jay
befb1fc98b
feat: Phase 0 spike - tmux stream PoC implementation
...
- Add spike.ts with tmux session management and WebSocket streaming
- Register /spike command in extension
- Add HTML test client with xterm.js
- Uses FIFO for pipe-pane streaming
- Single reader broadcasts to all WebSocket clients
2026-05-15 03:42:53 +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