FlipDeck Mission Control: Mac engine + app, BLE protocol, new Flipper client - #71
Merged
Merged
Conversation
Pivot foundation: a platform-independent Swift core that discovers projects, reads Git state, detects dev servers and coding agents from ps/lsof, tracks Vercel deployments, derives normalized events, routes them through deterministic notification rules, and speaks FDP/1 to a Flipper over any byte-stream transport. - docs/AUDIT.md: pre-pivot audit (keep/refactor/remove decisions) - ARCHITECTURE.md: target architecture and phased plan - docs/protocol.md + protocol-vectors.txt: wire protocol and golden vectors - mac/: SwiftPM package; FlipDeckCore builds and tests on Linux (69 tests, incl. real git repos, real listening sockets, end-to-end engine run) - flipdeck-headless: runs the engine without UI for debugging Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PMkHPu93LjX5phcrk37APq
- BLESerialTransport: CoreBluetooth client for the Flipper serial GATT service with credit-based flow control, pairing, and auto-reconnect - KeychainSecretStore, MacMachineMetrics (Mach/sysctl/IOKit/Network), MacSystemEffects (NSWorkspace), MacUserNotifier, OSLogSink - SwiftUI app: Overview, Projects, Agents, Services, Activity, Flipper, Settings; empty states instead of placeholder data - scripts/build-app.sh + Info.plist to produce a signed FlipDeck.app - Session: retry HELLO until HI; alerts flush pending snapshots first - InteropTests: the Swift session against the Flipper's C state machine - Stricter frame decoding (4 hex CRC digits, 1-7 letter types) with new golden vectors macOS-only files are wrapped in #if os(macOS); they are compiled by the macOS CI job proposed in ci/test.yml. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PMkHPu93LjX5phcrk37APq
…lient The pre-pivot USB-HID keystroke app is removed (it could not exit and never switched USB into HID mode; see docs/AUDIT.md). It remains in history at 26b96bb. The new app keeps the same appid and layout so existing CI builds and tests it unchanged. - fd_proto: FDP/1 framing, CRC-16, stream reassembly (host-tested) - fd_state: staged snapshots with atomic commit, heartbeats, staleness, alert de-duplication, action requests with timeouts (host-tested) - fd_ble: own BLE profile around the exported serial service, since the BT service hijacks the stock serial profile for RPC; separate bonding keys; restores the default profile on exit - fd_ui: row-based screens (Home, Mac, Projects, Project, Deploys, Services, Agents, Activity, Attention, alert overlay, confirm dialog) - scripts/check_flipper_sdk.sh: type-checks against real firmware headers with firmware -Werror flags and verifies every symbol is exported Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PMkHPu93LjX5phcrk37APq
README, CLAUDE.md, CONTRIBUTING and ARCHITECTURE now describe FlipDeck Mission Control. Docs that only described the removed keystroke app are deleted; web-installer docs move to docs/legacy/. ci/ holds workflows for .github/workflows/ that this session could not push (no workflow scope). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PMkHPu93LjX5phcrk37APq
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Binding(get:set:) inferred a non-optional SidebarItem, so the setter's optional unwrap wouldn't type-check on macOS. Also move enum pattern matches out of view builders into computed properties. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PMkHPu93LjX5phcrk37APq
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Moves FlipDeck from a USB keystroke deck to Mission Control. The Mac watches the dev environment and the Flipper Zero shows it over Bluetooth LE, and can request a small allowlist of actions. Phase 1 of the plan in
ARCHITECTURE.md. The audit behind the keep/remove decisions is indocs/AUDIT.md.What's in it
Mac (
mac/, Swift package)FlipDeckCorehas no platform dependencies and builds and tests on Linux:ps,lsoflisteners, cwd → project).vercel/project.jsonlink, Keychain token)FlipDeckMacPlatform: CoreBluetooth transport with credit-based flow control, Keychain, Mach/IOKit metrics, NSWorkspace effects, notifications.FlipDeckApp: SwiftUI with Overview, Projects, Agents, Services, Activity, Flipper and Settings. It shows empty states rather than placeholder data.flipdeck-headless: runs the engine without the UI and can print the exact frames a Flipper would receive.Protocol (
docs/protocol.md)HELLOuntil the Flipper answers.docs/protocol-vectors.txt, checked by the Swift and C suites.Flipper (
src/,application.fam)bt.c), so the stock profile can't be reused. Pairing keys are kept separate from the phone app's.Verification
InteropTests, which drives the Swift session against the Flipper's actual C state machine over pipesmake -C src/tests/host run).scripts/check_flipper_sdk.shtype-checks it against currentflipperzero-firmwareheaders with the firmware's-Werrorflags; all 118 external symbols are exported to apps.APPCHKagainst Momentum's SDK zip (mntm-011).This session's token lacks GitHub's
workflowscope, so the intended workflows are inci/and need copying into.github/workflows/(seeci/README.md). They add macOS build and tests, Linux Swift tests, and a uFBT build on every PR. Until then, the existingflipper-hostjob runs the new C tests, and nothing in CI compiles the Swift code.Not changed
web/,desktop_helper/andsd_card/belong to the old keystroke product and are marked legacy. Vercel still deploysweb/, so removing them is your call. After merge, the existingbuild-fap.ymlwill build the new app and commit it intoweb/public/;ci/build-fap.ymlreplaces that with an artifact upload.🤖 Generated with Claude Code
https://claude.ai/code/session_01PMkHPu93LjX5phcrk37APq
Generated by Claude Code