Commit Graph

50 Commits

Author SHA1 Message Date
Johannes Merz 460c5fac7a sync: clear stale T-1.0 claim (qwen swarm reset) 2026-05-15 10:48:56 +02:00
Johannes Merz 07522e5974 docs: mark IC-1..IC-4 frozen in NEXT-STEPS, resolve OQ-1/OQ-2 2026-05-15 10:48:38 +02:00
jay c9bdfce890 sync: claim T-1.0 server refactor 2026-05-15 06:56:58 +02:00
jay 7c40c49b1a chore: freeze IC-1..IC-4 interface contracts
Resolved OQ-1 (drop tree event), OQ-2 (defer resize), OQ-3 (per-session
control-mode, T-1.1 to decide final), OQ-4 (sonnet-4-5 for T-1.0).

IC-3: clarified deviceToken/environment optional pre-Phase-2, mandatory
from Phase 2 onward.
2026-05-15 06:56:38 +02:00
jay aa8aa42655 docs: update README for iOS app direction + sidecar architecture 2026-05-15 04:50:22 +02:00
jay b2b82c82ce docs: incorporate Phase 0.5 verdict (Path B), prep Phase 1
- PHASE-1-sidecar.md
  - Note at top: streaming primitive decided as tmux control mode
  - Architecture sketch: tmux/pipe.ts → tmux/control.ts
  - T-1.1 description updated to reference control mode + spike-cc.ts
  - Risks R4 (parser throughput) and R5 (tmux ≥2.5 required) added

- SYNC.md
  - File ownership map: tmux/** note about control mode
  - Frozen Interface Contracts table: added Status + Frozen-at columns
    so contracts can be tracked from draft → frozen with date stamp
  - Freeze protocol prose

- NEW: NEXT-STEPS.md — single resume pointer for the next session.
  Lists what's done, what's draft, the orchestrator todo list (freeze
  contracts → dispatch T-1.0 → plan fan-out), open questions, and
  things explicitly NOT to do tomorrow.

- README.md: NEXT-STEPS.md added at top of the docs index.
2026-05-15 04:48:20 +02:00
jay 86c4d3e869 docs: mark Phase 0.5 complete in SYNC
- Phase 0.5 status: done
- Verdict: Path B (tmux control mode) recommended
- Active claim removed
- History entry added
- Phase 1 status updated: ready to start with control mode
2026-05-15 04:18:41 +02:00
jay 307417b392 docs: add Phase 0.5 — spike tmux control mode
Phase 0 found that tmux pipe-pane is unreliable across alternate-screen
transitions. Before Phase 1 commits to a streaming primitive, a short
follow-up spike evaluates tmux control mode (`tmux -CC`) as an
alternative to pipe-pane + watchdog. Verdict drives T-1.1 design.
2026-05-15 04:06:25 +02:00
jay d97bd4aeef docs: mark Phase 0 complete in SYNC.md
- Phase 0 status: done (GREEN LIGHT)
- Phase 1 status: ready to start
- Remove active claim for T-0.*
- Add history entry
- Full report available in feat/spike-stream branch
2026-05-15 03:51:14 +02:00
jay 15772558dd docs: claim Phase 0 spike stream task 2026-05-15 03:40:50 +02:00
jay f6cbf17078 docs: reorganise — implementation plans + sync, archive spec to reference/
- docs/ now holds only implementation drivers:
  - PHASE-0-spike-stream.md (single agent, ~1 day PoC)
  - PHASE-1-sidecar.md (multi-agent, sidecar production-ready)
  - PHASE-2-ios-mvp.md (multi-agent, iOS app MVP)
  - PHASE-3-ios-augmentation.md (multi-agent, iOS polish)
  - SYNC.md (live coordination: claims, ownership, CCRs)
  - README.md (folder guide)

- docs/reference/ holds background:
  - SPEC-ios-app.md (final v3 spec)
  - EXTENSION-API-AUDIT.md (audit result)
  - SPEC-ios-app-review-v1.md (archived review thread)
  - ARCHITECTURE.md (original extension architecture)
  - README.md (folder guide)

Each phase plan defines: goal, acceptance criteria, file layout,
explicit task table with parallelisable tasks, interface contracts,
branching strategy, risks, exit criteria.

SYNC.md provides the multi-agent coordination protocol: active claims
table, file ownership map, frozen contracts, and contract change
requests (CCR) workflow.
2026-05-15 03:33:51 +02:00
jay 0f946d56ea docs: spec v3 — close Q-A (pi -p flags) and Q-C (APNs details)
- S-09a: concrete pi CLI invocation verified, ~2s with haiku-4-5
- iOS-C-02: full APNs setup, .p8 key, sandbox/production routing
  per device-token (Xcode-debug → sandbox, TestFlight → production),
  collapse-id, JWT caching, auto-cleanup on 410
2026-05-15 01:48:23 +02:00
jay cf61b2ba1b docs: spec v3 — drop Tree-Nav from iOS, audit closed
- Audit confirmed S-07, S-08 work out-of-the-box → upgraded from PENDING to firm SHOULD
- Tree-Write blocked by ExtensionAPI; Gruppe T removed entirely
- Tree-Navigation explicitly out of scope (native pi only)
- Spike-0a closed, EXTENSION-API-AUDIT.md is referenced artifact
2026-05-15 01:35:20 +02:00
jay 36938a66c4 docs: spec v2 — incorporate review feedback, archive v1 thread 2026-05-15 01:20:17 +02:00
jay 7c0e94cb57 docs: add iOS app spec with inline review thread 2026-05-15 01:09:20 +02:00
jay 94b4dc7a41 fix: reconnect immediately on tab visibility (iOS) 2026-05-14 19:22:46 +02:00
jay 74fc22ddfb feat: persist auth token across server restarts
Token is stored in ~/.pi/remote-control/token (mode 600) on first start
and reused on subsequent starts — saved URLs stay valid indefinitely.
2026-05-14 19:00:31 +02:00
jay 9f8b2cc987 Revert "fix: faster WebSocket reconnect on iOS PWA"
This reverts commit c21b6c441c.
2026-05-14 18:59:13 +02:00
jay c21b6c441c fix: faster WebSocket reconnect on iOS PWA
- connection timeout after 4s (vs OS TCP default ~75s)
- visibilitychange listener: reconnect immediately when app resumes
2026-05-14 18:57:02 +02:00
jay 1b610013c3 feat: bindAddress from config + PWA support
- config: read from ~/.pi/remote-control/config.json (zerray-compatible path)
- config: add bindAddress + advertisedBaseUrl fields
- server: listen on host/port from bindAddress (default: 127.0.0.1:random)
- server: /manifest.json + /icon.svg routes (no auth, PWA)
- server: manifest-src 'self' in CSP
- html: apple-mobile-web-app meta tags + manifest/touch-icon links
- index: advertisedBaseUrl as fallback for publicBaseUrl
2026-05-14 18:51:54 +02:00
Yejun Su 48810a5456
add Makefile for debug the extension only 2026-05-10 21:33:08 +08:00
Yejun Su 0571d42b80
npm audit fix 2026-05-08 18:19:14 +08:00
Yejun Su cff6aa693c
chore: migrate @mariozechner pi packages to @earendil-works namespace 2026-05-08 18:18:04 +08:00
Yejun Su 084515c199
npm audit fix 2026-04-30 23:19:50 +08:00
Yejun Su a489ff84bd
fix install
npm error command sh -c husky
Error: npm install --omit=dev failed with code 127
2026-04-30 23:19:49 +08:00
Yejun Su fc5d448a29
chore: add lint:check script and use it in pre-commit hook 2026-04-29 10:13:36 +08:00
Yejun Su d22b853de2
chore: add husky pre-commit hook for linting 2026-04-21 15:31:09 +08:00
Yejun Su 82c463ec27
chore(remote-control): add Biome and fix all lint warnings 2026-04-21 14:09:42 +08:00
Yejun Su 06fa1147f3
extensions/pi-remote-control -> extensions/remote-control 2026-04-21 12:51:38 +08:00
Yejun Su 8cffeb9e27
fix(remote-control): clear stale status badge on session reload 2026-03-22 00:51:10 +08:00
Yejun Su 9e92201206
feat(statusbar): show cwd with home abbreviated to ~ 2026-03-22 00:46:45 +08:00
Yejun Su 9207b3198a
docs: improve README with screenshot, security details, and fixes 2026-03-20 21:15:19 +08:00
Yejun Su 54267f1842
docs: rewrite README and add architecture docs 2026-03-20 20:56:53 +08:00
Yejun Su 63a879046b
fix(remote-control): send utf-8 charset for plain text errors 2026-03-20 20:12:47 +08:00
Yejun Su 9821efa370
fix(remote-control): always sync on session switch even if turn started 2026-03-20 19:05:28 +08:00
Yejun Su b77c2a57b0
fix(remote-control): re-check idle state inside delayed sync callback 2026-03-20 18:51:11 +08:00
Yejun Su aacabde7dc
fix(remote-control): avoid mid-turn model resync 2026-03-20 18:39:04 +08:00
Yejun Su 0dd6960688
fix(remote-control): resync after restored model changes 2026-03-20 18:32:15 +08:00
Yejun Su 33403bd030
fix(remote-control): resync clients on session switch 2026-03-20 18:26:22 +08:00
Yejun Su f16a5fed83
fix(remote-control): use keybinding hints in info panel 2026-03-20 18:05:53 +08:00
Yejun Su 55741ff9af
fix(remote-control): use keybindings for closing info panel 2026-03-20 17:59:44 +08:00
Yejun Su ad08d297a5
fix(server): prevent shutdown hang by forcefully terminating connections
Use client.terminate() instead of client.close() to avoid waiting for
unresponsive clients to acknowledge the WebSocket close handshake.

Add a 2-second safety timeout that closes the HTTP listener, destroys
lingering sockets, and resolves the promise so session_shutdown does not
block pi from exiting.
2026-03-19 14:37:31 +08:00
Yejun Su 37dc2b2f1e
feat(ui): add stop/abort button to web remote control
When the agent is streaming, the send button becomes a red stop button
that sends a { type: "stop" } WebSocket message. The server handles this
by calling ctx.abort() to cancel the current agent operation.
2026-03-19 13:55:08 +08:00
Yejun Su 4bc4cfa630
feat(html): add markdown table rendering to inline renderer 2026-03-19 13:29:14 +08:00
Yejun Su 98642b5b5a
fix(ui): update HTML title to "π - remote-control" 2026-03-19 13:02:26 +08:00
Yejun Su 824ae6a203
fix: replace qrencode system dependency with pure-JS qrcode package
Use the 'qrcode' npm package instead of shelling out to the 'qrencode'
binary. Load via createRequire for ESM/CJS interop. Use margin: 2 to
avoid the utf8 renderer's invalid array length bug with odd margins.
2026-03-19 12:59:05 +08:00
Yejun Su be2c015b72
refactor: extract index.ts into config, auth, messages, html, and server modules 2026-03-19 12:43:31 +08:00
Yejun Su 7080cdc34f
feat(ui): replace subcommands with interactive menu
/remote-control now opens a select menu with Turn on/off,
Configure URL, and Status instead of relying on subcommands.
Adds ability to stop the server. Shows current URL in the
Configure URL menu item and in the input dialog title.
2026-03-19 12:32:26 +08:00
Yejun Su ee3341d20c
feat: add --remote-control flag, status indicator, and fix config check ordering 2026-03-19 12:10:39 +08:00
Yejun Su 18f49a6828
chore: initial commit 2026-03-19 10:41:11 +08:00