Files
Michael Ramos 89f0b6628e feat(pi): live local app annotation through a shared proxy core and Node transport (#1366)
Phase 2 of live app annotation: full parity on Pi over one shared
implementation instead of drifting copies.

- Extract every proxy decision into packages/shared/live-proxy-core.ts
  (HTML injector state machine, loopback/Host/Origin predicates,
  CSP/X-Frame-Options policy, redirect rewrite, WS origin gate, bridge
  assembly, liveAppDraftIdentity) and the CLI probe + live-mode messages
  into packages/shared/live-probe.ts. packages/server/live-proxy.ts is
  now a thin Bun transport over the core; its test suite passes
  unmodified.
- Add packages/shared/live-proxy-node.ts, the node:http transport the Pi
  extension runs: streaming request/response piping through the shared
  injector, and WebSocket (HMR) passthrough that replays the client's
  handshake upstream over raw TCP and pipes the sockets byte-for-byte.
  Transport tests run the proxy in a real node child process, because
  Bun's node:http shim drops writes to an upgrade event's socket.
- Wire Pi: /plannotator-annotate probes loopback URLs live-first with
  the shared probe (same 3s timeout, same <500 gate, same messages),
  recognizes --app/--static via parseAnnotateArgs's liveFlags opt-in
  (OpenCode deliberately does not opt in), and serves mode annotate-app
  from serverAnnotate.ts with the shared per-target draft identity,
  live sessions excluded from history/submissions, the remote hard-off
  throw, and guarded live-proxy shutdown.
- Vendor live-proxy-core/live-probe/live-proxy-node plus the
  dependency-free bridge-script constants to generated/.
- Docs: AGENTS.md phase-gate passages, marketing annotate page, Pi
  README.
2026-08-21 10:29:29 -07:00

100 lines
4.0 KiB
JSON

{
"name": "@plannotator/shared",
"version": "0.0.1",
"private": true,
"exports": {
"./agents": "./agents.ts",
"./annotatable": "./annotatable.ts",
"./compress": "./compress.ts",
"./crypto": "./crypto.ts",
"./diff-paths": "./diff-paths.ts",
"./feedback-templates": "./feedback-templates.ts",
"./jj-core": "./jj-core.ts",
"./gitbutler-core": "./gitbutler-core.ts",
"./review-core": "./review-core.ts",
"./commit-history": "./commit-history.ts",
"./review-workspace": "./review-workspace.ts",
"./review-workspace-node": "./review-workspace-node.ts",
"./review-args": "./review-args.ts",
"./vcs-core": "./vcs-core.ts",
"./checklist": "./checklist.ts",
"./types": "./types.ts",
"./pr-types": "./pr-types.ts",
"./pr-context-live": "./pr-context-live.ts",
"./pr-artifact-document": "./pr-artifact-document.ts",
"./pr-provider": "./pr-provider.ts",
"./pr-stack": "./pr-stack.ts",
"./project": "./project.ts",
"./storage": "./storage.ts",
"./draft": "./draft.ts",
"./annotate-history": "./annotate-history.ts",
"./html-diff": "./html-diff.ts",
"./integrations-common": "./integrations-common.ts",
"./repo": "./repo.ts",
"./reference-common": "./reference-common.ts",
"./file-browser-watch-core": "./file-browser-watch-core.ts",
"./favicon": "./favicon.ts",
"./code-file": "./code-file.ts",
"./resolve-file": "./resolve-file.ts",
"./annotate-reference-roots-node": "./annotate-reference-roots-node.ts",
"./extract-code-paths": "./extract-code-paths.ts",
"./external-annotation": "./external-annotation.ts",
"./agent-jobs": "./agent-jobs.ts",
"./agent-terminal": "./agent-terminal.ts",
"./config": "./config.ts",
"./data-dir": "./data-dir.ts",
"./prompts": "./prompts.ts",
"./improvement-hooks": "./improvement-hooks.ts",
"./pfm-reminder": "./pfm-reminder.ts",
"./worktree": "./worktree.ts",
"./worktree-pool": "./worktree-pool.ts",
"./html-to-markdown": "./html-to-markdown.ts",
"./url-to-markdown": "./url-to-markdown.ts",
"./html-assets": "./html-assets.ts",
"./html-assets-node": "./html-assets-node.ts",
"./tour": "./tour.ts",
"./guide": "./guide.ts",
"./guide-instructions-store": "./guide-instructions-store.ts",
"./guide-store": "./guide-store.ts",
"./annotate-args": "./annotate-args.ts",
"./annotate-target": "./annotate-target.ts",
"./at-reference": "./at-reference.ts",
"./code-nav": "./code-nav.ts",
"./goal-setup": "./goal-setup.ts",
"./semantic-diff": "./semantic-diff.ts",
"./semantic-diff-types": "./semantic-diff-types.ts",
"./call-flow-types": "./call-flow-types.ts",
"./call-flow-languages": "./call-flow-languages.ts",
"./call-flow": "./call-flow.ts",
"./call-flow-install": "./call-flow-install.ts",
"./single-flight": "./single-flight.ts",
"./source-save": "./source-save.ts",
"./source-save-node": "./source-save-node.ts",
"./browser-paths": "./browser-paths.ts",
"./workspace-status": "./workspace-status.ts",
"./open-in-apps": "./open-in-apps.ts",
"./port-range": "./port-range.ts",
"./tailscale": "./tailscale.ts",
"./plan-review-lifecycle": "./plan-review-lifecycle.ts",
"./review-profiles": "./review-profiles.ts",
"./commit-avatars": "./commit-avatars.ts",
"./generated-files": "./generated-files.ts",
"./annotate-client-lease": "./annotate-client-lease.ts",
"./annotate-decision": "./annotate-decision.ts",
"./archive-mode": "./archive-mode.ts",
"./guide-format": "./guide-format.ts",
"./guide-viewer-manifest": "./guide-viewer-manifest.ts",
"./guide-format-fixtures": "./guide-format-fixtures.ts",
"./live-proxy-core": "./live-proxy-core.ts",
"./live-probe": "./live-probe.ts",
"./live-proxy-node": "./live-proxy-node.ts"
},
"dependencies": {
"@joplin/turndown-plugin-gfm": "^1.0.64",
"@plannotator/core": "workspace:*",
"chokidar": "^5.0.0",
"parse5": "^7.3.0",
"turndown": "^7.2.4"
}
}