改动 / #3347

#3347 [GUI] Add opt-in Mac pairing and shared iPhone conversations

open · draft · @jorge123255 · 0 评论 · 去 GitHub 看

Setup & installAMD / HIPSecurityWindowsLinux

说明

## Problem and result

A Mac conversation currently cannot be securely reopened and continued by a paired native iPhone client. This adds opt-in **Pair iPhone** in the sidebar and Settings, plus shared history, existing-session continuation, visible Thinking/progress, browser/tool activity, approvals and Stop. Closing the phone leaves the Mac's work running.

## Related discussion

Scope proposal: #3346. Maintainer agreement is pending; this PR is a draft for scope and implementation discussion. The native iPhone client is submitted separately in #3348 and depends on this API. Both branches start from the same upstream base so their diffs can be reviewed independently; the client needs this Mac support at runtime.

## Approach

- Keep the inference host on loopback. Start the companion's authenticated HTTPS listener only after explicit enablement; use certificate-pinned, expiring one-use invitations and revocable per-device token hashes.
- Import desktop history after opt-in and persist a shared catalog independently of any connected screen. Stable chat/message IDs, revision checks, deletion tombstones and turn-bound callbacks prevent stale caches or delayed work from replacing a newer turn. A conversation already running before first enablement is imported when that response finishes.
- Continue with the Mac chat's existing model, folder and permissions. Expose only bounded controls and display data; omit provider configuration, raw tool arguments and runtime protocol. Existing private phone-only routes remain compatible. Paired devices are trusted to read the shared catalog and answer its pending approvals.
- Stage the bridge and a local Core Image QR helper through normal desktop builds. Packaged Python disables bytecode writes to preserve signed application contents; source Python behavior is unchanged.

## Validation

Fresh checks at **818ecf4c**, based on upstream **e88ee39d**, on **macOS 26.5 arm64, Node 24.12.0, Xcode 26.6**. Host dependencies matched the existing lockfile installation.

**Passed:**

```sh
/Applications/Strata.app/Contents/Resources/node/node --test apps/companion-bridge/test/*.test.mjs
# 23 passed, 0 failed, 0 skipped

STRATA_HARNESS_DIR=/Applications/Strata.app/Contents/Resources/harness \
  /Applications/Strata.app/Contents/Resources/node/node --test \
  apps/host/tests/conversations.test.mjs \
  apps/host/tests/conversation-migration.test.mjs \
  apps/host/tests/conversation-agent.test.mjs \
  apps/host/tests/conversation-events.test.mjs \
  apps/host/tests/conversation-routes.test.mjs \
  apps/host/tests/companion.test.mjs \
  apps/host/tests/companion-routes.test.mjs \
  apps/host/tests/packaged-python-cache.test.mjs
# 48 passed, 0 failed, 0 skipped

npm --prefix apps/host run typecheck
npm --prefix apps/desktop run build:ui
git diff --check
```

The focused host run includes real shipped Harness session continuity/detach with scripted inference, private event/origin restrictions, no capture before opt-in, migration during an active response, stale-turn/Stop races, reasoning timing, and real bundled-Python cache isolation. The UI build also compiled and signed the QR helper. Its existing large-chunk warning remains.

**Failed:**

None in the fresh checks above. Earlier broad full-feature development runs had nine failure locations reproduced on their clean dependency-matched baseline; this PR does not claim a clean complete host suite.

**Not run:**

The full host suite on this split revision; fresh Tauri app/installer packaging, Developer ID signing or notarization; Windows/Linux desktop acceptance; physical iPhone interaction against this exact split branch; native local-model inference. No engine/GPU backend code changes or performance claims are included.

## Limits

Initial support is local-network Mac pairing. Polling follows the selected conversation while the phone is active. Browser cards show actions and results rather than browser pixels. Earlier installed full-feature fork checks are separate from acceptance of these split upstream revisions. Release packaging and the permission/API boundary need maintainer review before this draft is ready.

本站相关内容

相关页面的快捷入口。