@rubytech/create-maxy-code 0.1.40 → 0.1.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/payload/platform/lib/mcp-stderr-tee/package.json +7 -0
- package/payload/platform/plugins/admin/hooks/turn-completed-graph-write.sh +142 -52
- package/payload/platform/plugins/docs/references/deployment.md +6 -0
- package/payload/platform/plugins/docs/references/platform.md +18 -4
- package/payload/platform/plugins/docs/references/plugins-guide.md +2 -0
- package/payload/platform/scripts/check-no-esm-require.mjs +132 -0
- package/payload/platform/scripts/smoke-boot-services.sh +175 -0
- package/payload/platform/services/claude-session-manager/dist/config.d.ts +17 -0
- package/payload/platform/services/claude-session-manager/dist/config.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/config.js +31 -0
- package/payload/platform/services/claude-session-manager/dist/config.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.d.ts +63 -0
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.js +514 -0
- package/payload/platform/services/claude-session-manager/dist/fs-watcher.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +3 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +364 -204
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/index.js +38 -11
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-path.d.ts +2 -0
- package/payload/platform/services/claude-session-manager/dist/jsonl-path.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/jsonl-path.js +11 -6
- package/payload/platform/services/claude-session-manager/dist/jsonl-path.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +37 -44
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +136 -159
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/reaper.d.ts +24 -0
- package/payload/platform/services/claude-session-manager/dist/reaper.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/reaper.js +114 -0
- package/payload/platform/services/claude-session-manager/dist/reaper.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/session-store.d.ts +16 -41
- package/payload/platform/services/claude-session-manager/dist/session-store.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/session-store.js +29 -68
- package/payload/platform/services/claude-session-manager/dist/session-store.js.map +1 -1
- package/payload/premium-plugins/real-agent/lib/mcp-stderr-tee/dist/index.d.ts +51 -0
- package/payload/premium-plugins/real-agent/lib/mcp-stderr-tee/dist/index.d.ts.map +1 -0
- package/payload/premium-plugins/real-agent/lib/mcp-stderr-tee/dist/index.js +196 -0
- package/payload/premium-plugins/real-agent/lib/mcp-stderr-tee/dist/index.js.map +1 -0
- package/payload/premium-plugins/real-agent/lib/mcp-stderr-tee/package.json +7 -0
- package/payload/server/public/assets/{admin-DO9W2D9g.js → admin-CzJDs5FQ.js} +24 -24
- package/payload/server/public/assets/{arc-DMDAZHAN.js → arc-aUiRP9AS.js} +1 -1
- package/payload/server/public/assets/architecture-YZFGNWBL--v-pJPNp.js +1 -0
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-BbLtk_k6.js → architectureDiagram-Q4EWVU46-DJvcnhtT.js} +1 -1
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-B9IgcgeJ.js → blockDiagram-DXYQGD6D-_vt7n9ql.js} +1 -1
- package/payload/server/public/assets/{brand-DQrOw38P.css → brand-DNSV7-vn.css} +1 -1
- package/payload/server/public/assets/{brand-Bky-hMVw.js → brand-FZ59T8pI.js} +1 -1
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-BrvPS09f.js → c4Diagram-AHTNJAMY-CdEo9QqN.js} +1 -1
- package/payload/server/public/assets/channel-DzmCBQ_9.js +1 -0
- package/payload/server/public/assets/{chunk-2KRD3SAO-Di4bO8ir.js → chunk-2KRD3SAO-BK3470lx.js} +1 -1
- package/payload/server/public/assets/chunk-336JU56O-JmuLOuir.js +2 -0
- package/payload/server/public/assets/chunk-426QAEUC-10f8pXpz.js +1 -0
- package/payload/server/public/assets/{chunk-4BX2VUAB-DyEhFk-Z.js → chunk-4BX2VUAB-BOvVdJLf.js} +1 -1
- package/payload/server/public/assets/{chunk-4TB4RGXK-D7_xc8xf.js → chunk-4TB4RGXK-DajMd0ug.js} +1 -1
- package/payload/server/public/assets/{chunk-55IACEB6-BRJOZLpU.js → chunk-55IACEB6-BwZyF7vR.js} +1 -1
- package/payload/server/public/assets/{chunk-5FUZZQ4R-CdCSpb8j.js → chunk-5FUZZQ4R-B4A-XUHI.js} +1 -1
- package/payload/server/public/assets/{chunk-5PVQY5BW-BVgnD9QR.js → chunk-5PVQY5BW-BNM3rT14.js} +1 -1
- package/payload/server/public/assets/{chunk-67CJDMHE-BG6-9r6c.js → chunk-67CJDMHE-D5bhMrtY.js} +1 -1
- package/payload/server/public/assets/{chunk-7N4EOEYR-BvMbitX7.js → chunk-7N4EOEYR-Si7Lgrwc.js} +1 -1
- package/payload/server/public/assets/{chunk-AA7GKIK3-CE8mGBD5.js → chunk-AA7GKIK3-DMuHtDqO.js} +1 -1
- package/payload/server/public/assets/{chunk-BSJP7CBP-DP7LTBll.js → chunk-BSJP7CBP-L79XKVcb.js} +1 -1
- package/payload/server/public/assets/{chunk-CIAEETIT-VfnIdN-h.js → chunk-CIAEETIT-C0O7Upmg.js} +1 -1
- package/payload/server/public/assets/{chunk-EDXVE4YY-CYrT1Tom.js → chunk-EDXVE4YY-atMwO81K.js} +1 -1
- package/payload/server/public/assets/{chunk-ENJZ2VHE-B70d0jN7.js → chunk-ENJZ2VHE-BUbZv2Nz.js} +1 -1
- package/payload/server/public/assets/{chunk-FMBD7UC4-w-yBZsN2.js → chunk-FMBD7UC4-C_E43NFJ.js} +1 -1
- package/payload/server/public/assets/{chunk-FOC6F5B3-f9cFywhd.js → chunk-FOC6F5B3-D9lWWHAu.js} +1 -1
- package/payload/server/public/assets/{chunk-ICPOFSXX-BcLouRbd.js → chunk-ICPOFSXX-BMF-eWHb.js} +2 -2
- package/payload/server/public/assets/{chunk-K5T4RW27-B_ZUrFUq.js → chunk-K5T4RW27-DuhsNH4c.js} +1 -1
- package/payload/server/public/assets/{chunk-KGLVRYIC-CcWTvRlI.js → chunk-KGLVRYIC-B4-A1Abi.js} +1 -1
- package/payload/server/public/assets/{chunk-LIHQZDEY-D-5-peQw.js → chunk-LIHQZDEY-BxqgHRgT.js} +1 -1
- package/payload/server/public/assets/{chunk-ORNJ4GCN-B4Z5L25I.js → chunk-ORNJ4GCN-DEYQ5WaJ.js} +1 -1
- package/payload/server/public/assets/{chunk-OYMX7WX6-C2ja2fPj.js → chunk-OYMX7WX6-BEMDmPTI.js} +1 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-Bd-GrQM6.js +1 -0
- package/payload/server/public/assets/{chunk-U2HBQHQK-CCjoTpL6.js → chunk-U2HBQHQK-DOM7Y4f1.js} +1 -1
- package/payload/server/public/assets/{chunk-X2U36JSP-QIVkp-XR.js → chunk-X2U36JSP-C_uWyW6Y.js} +1 -1
- package/payload/server/public/assets/{chunk-XPW4576I-m1Y_r88I.js → chunk-XPW4576I-CBfZXZDB.js} +1 -1
- package/payload/server/public/assets/{chunk-YZCP3GAM-qD9rebhx.js → chunk-YZCP3GAM-DQbgl47k.js} +1 -1
- package/payload/server/public/assets/{chunk-ZZ45TVLE-C0J_f05H.js → chunk-ZZ45TVLE-C44DEAgq.js} +1 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-DVoOmecn.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-B0r3hpf9.js +1 -0
- package/payload/server/public/assets/clone-Dde30M8J.js +1 -0
- package/payload/server/public/assets/{cose-bilkent-S5V4N54A-BhtgY3T7.js → cose-bilkent-S5V4N54A-Br2gjtEO.js} +1 -1
- package/payload/server/public/assets/{dagre-KV5264BT-C8lVFO5U.js → dagre-KV5264BT-CE3meBlZ.js} +1 -1
- package/payload/server/public/assets/{dagre-B3cA7jId.js → dagre-lNEvWLDX.js} +1 -1
- package/payload/server/public/assets/data-DW6QAnMD.js +1 -0
- package/payload/server/public/assets/{device-url-actions-qu2-XiHc.js → device-url-actions-a6Bd-MRk.js} +1 -1
- package/payload/server/public/assets/{diagram-5BDNPKRD-BYkcTelK.js → diagram-5BDNPKRD-BqR72jWu.js} +1 -1
- package/payload/server/public/assets/{diagram-G4DWMVQ6-B6f_WR4j.js → diagram-G4DWMVQ6-DOjamNAP.js} +1 -1
- package/payload/server/public/assets/{diagram-MMDJMWI5-ALaKcN6w.js → diagram-MMDJMWI5-DAUB-aPu.js} +1 -1
- package/payload/server/public/assets/{diagram-TYMM5635-CkVg3crF.js → diagram-TYMM5635-DpToW00F.js} +1 -1
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-DszlTGIQ.js → erDiagram-SMLLAGMA-C-p2ze2T.js} +1 -1
- package/payload/server/public/assets/{flatten-BsWEYbBB.js → flatten-Bo6YRmWl.js} +1 -1
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-C9-FqSlk.js → flowDiagram-DWJPFMVM-B9SS6a8F.js} +1 -1
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-faJU-5Zy.js → ganttDiagram-T4ZO3ILL-DnXZX0Gp.js} +1 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-CI0s_tqn.js +1 -0
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-Cck8_tiG.js → gitGraphDiagram-UUTBAWPF-CtQ0FzPg.js} +1 -1
- package/payload/server/public/assets/graph-D13IJB3w.js +1 -0
- package/payload/server/public/assets/graph-labels-CI9WmEiE.js +1 -0
- package/payload/server/public/assets/{graphlib-CYRxeBXj.js → graphlib-nUaDKzkp.js} +1 -1
- package/payload/server/public/assets/info-OMHHGYJF-g3gYW7Qm.js +1 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-c2wWbEaX.js +2 -0
- package/payload/server/public/assets/{isEmpty-BWl67LAZ.js → isEmpty-D6Kr-M1M.js} +1 -1
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-nSIaVXdw.js → ishikawaDiagram-UXIWVN3A-BBOgnjrU.js} +1 -1
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-DuKq7d3g.js → journeyDiagram-VCZTEJTY-DzIkOZor.js} +1 -1
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-Bt5xqHfY.js → kanban-definition-6JOO6SKY-NoAdbB_E.js} +1 -1
- package/payload/server/public/assets/{line-BgV8qCP_.js → line-BRK1p00q.js} +1 -1
- package/payload/server/public/assets/{linear-0O14Y6uf.js → linear-DOh_6k2k.js} +1 -1
- package/payload/server/public/assets/{mermaid-parser.core-DQzl__pY.js → mermaid-parser.core-Bm0OvYTL.js} +2 -2
- package/payload/server/public/assets/{mermaid.core-BAPEOjwh.js → mermaid.core-CTznq93v.js} +3 -3
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-CmMBrI79.js → mindmap-definition-QFDTVHPH-BOQ1enWi.js} +1 -1
- package/payload/server/public/assets/{ordinal-krseTxxN.js → ordinal-BDi6f4xk.js} +1 -1
- package/payload/server/public/assets/packet-4T2RLAQJ-CT0TB9HI.js +1 -0
- package/payload/server/public/assets/{page-BoDdtGsH.js → page-BLNJpxTT.js} +2 -2
- package/payload/server/public/assets/{page-D_NCNi5j.js → page-Dn3gASQM.js} +1 -1
- package/payload/server/public/assets/pie-ZZUOXDRM-CXLe7TFF.js +1 -0
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-BhsR9k6j.js → pieDiagram-DEJITSTG-2S-XHkal.js} +1 -1
- package/payload/server/public/assets/{public-DCcGKIMW.js → public-D0z7BALL.js} +5 -5
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-DSKV6d_A.js → quadrantDiagram-34T5L4WZ-CncZqXXr.js} +1 -1
- package/payload/server/public/assets/radar-PYXPWWZC-DnPLBl-D.js +1 -0
- package/payload/server/public/assets/{reduce-tk-xY6Fv.js → reduce-CGi9ik8i.js} +1 -1
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-BccM48AI.js → requirementDiagram-MS252O5E-CPeWs9fs.js} +1 -1
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-C0pxiQfn.js → sankeyDiagram-XADWPNL6-A4_669ey.js} +1 -1
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-BVsUIJsW.js → sequenceDiagram-FGHM5R23-DD-qEurY.js} +1 -1
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-lqYQZ-F1.js → stateDiagram-FHFEXIEX-CdO6Mw_T.js} +1 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-D28bJZnf.js +1 -0
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-D-LxYOHq.js → timeline-definition-GMOUNBTQ-JH65fN1V.js} +1 -1
- package/payload/server/public/assets/treeView-SZITEDCU-C3cb7Xwe.js +1 -0
- package/payload/server/public/assets/treemap-W4RFUUIX-Dc7G3Bgm.js +1 -0
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-BNHzvNba.js → vennDiagram-DHZGUBPP-CJLoNrBL.js} +1 -1
- package/payload/server/public/assets/wardley-RL74JXVD-DtgibWAt.js +1 -0
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-BfXR9l5s.js → wardleyDiagram-NUSXRM2D-BgM9eEf7.js} +1 -1
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-CL7mVEbT.js → xychartDiagram-5P7HB3ND-DCmesmc9.js} +1 -1
- package/payload/server/public/data.html +5 -5
- package/payload/server/public/graph.html +5 -6
- package/payload/server/public/index.html +7 -8
- package/payload/server/public/public.html +4 -5
- package/payload/server/server.js +94 -4
- package/payload/server/public/assets/Checkbox-6lLDKzMP.js +0 -1
- package/payload/server/public/assets/architecture-YZFGNWBL-COhEvUpo.js +0 -1
- package/payload/server/public/assets/channel-Bmc1qlCD.js +0 -1
- package/payload/server/public/assets/chunk-336JU56O-DXOr0ZnC.js +0 -2
- package/payload/server/public/assets/chunk-426QAEUC-BFW4zwrV.js +0 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-CWh_0JsP.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-RVZorqSk.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BEZem5bl.js +0 -1
- package/payload/server/public/assets/clone-B6eXIhiR.js +0 -1
- package/payload/server/public/assets/data-BaSmBQ7U.js +0 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-DeTNsAO0.js +0 -1
- package/payload/server/public/assets/graph-labels-COhLbJD0.js +0 -1
- package/payload/server/public/assets/graph-qg6fkRyC.js +0 -1
- package/payload/server/public/assets/info-OMHHGYJF-DJJ9GlS6.js +0 -1
- package/payload/server/public/assets/infoDiagram-42DDH7IO-CLjEjhJX.js +0 -2
- package/payload/server/public/assets/packet-4T2RLAQJ-CGbvGkvF.js +0 -1
- package/payload/server/public/assets/pie-ZZUOXDRM-BZy8rjFn.js +0 -1
- package/payload/server/public/assets/radar-PYXPWWZC-DcfWIVXr.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-D2eHThhC.js +0 -1
- package/payload/server/public/assets/treeView-SZITEDCU-3WugwVdj.js +0 -1
- package/payload/server/public/assets/treemap-W4RFUUIX-Cf5mDLlu.js +0 -1
- package/payload/server/public/assets/wardley-RL74JXVD-Bv4md4b3.js +0 -1
- /package/payload/server/public/assets/{_baseFor-BHtDrjIo.js → _baseFor-Cam2PbSt.js} +0 -0
- /package/payload/server/public/assets/{array-DetWRiSa.js → array-DYRGGQae.js} +0 -0
- /package/payload/server/public/assets/{cytoscape.esm-C9yNhe1u.js → cytoscape.esm-nWsJMTNI.js} +0 -0
- /package/payload/server/public/assets/{defaultLocale-_WRwicXn.js → defaultLocale-Du1XY3Dp.js} +0 -0
- /package/payload/server/public/assets/{dist-Bd4S37oi.js → dist-BzAsli7o.js} +0 -0
- /package/payload/server/public/assets/{init-sTEcj9YX.js → init-B5BXBRcm.js} +0 -0
- /package/payload/server/public/assets/{katex-s61Rgv6l.js → katex-HOUACuRw.js} +0 -0
- /package/payload/server/public/assets/{path-B0Ik7Tu9.js → path-CNO468J-.js} +0 -0
- /package/payload/server/public/assets/{rough.esm-DKRO8IF-.js → rough.esm-DRO6hWPh.js} +0 -0
- /package/payload/server/public/assets/{src-B6XdH6xq.js → src-CWiyyVfn.js} +0 -0
|
@@ -0,0 +1,514 @@
|
|
|
1
|
+
// Filesystem watcher — single source of truth for the manager's row index.
|
|
2
|
+
//
|
|
3
|
+
// Two directories are watched continuously:
|
|
4
|
+
//
|
|
5
|
+
// ${CLAUDE_CONFIG_DIR}/sessions/<pid>.json — written by Claude Code at PTY
|
|
6
|
+
// launch for entrypoint=cli. Carries sessionId, bridgeSessionId, agent,
|
|
7
|
+
// status, cwd, updatedAt directly. Created at process init, refreshed on
|
|
8
|
+
// status/agent change, deleted when the process exits cleanly.
|
|
9
|
+
//
|
|
10
|
+
// ${CLAUDE_CONFIG_DIR}/projects/<slug>/<sessionId>.jsonl — written on the
|
|
11
|
+
// first operator turn; persists after process exit as the audit
|
|
12
|
+
// transcript.
|
|
13
|
+
//
|
|
14
|
+
// The watcher unifies the two surfaces into one row indexed by the intrinsic
|
|
15
|
+
// `sessionId` (the UUID Claude Code mints, identical to the JSONL basename).
|
|
16
|
+
// PID-file events drive the live half of the lifecycle; JSONL events drive
|
|
17
|
+
// the archived half. A row exists whenever EITHER file exists.
|
|
18
|
+
//
|
|
19
|
+
// Boot sequence is sync-then-arm: bootSeed() reads both directories
|
|
20
|
+
// synchronously and rebuilds the in-memory index before arm() turns on the
|
|
21
|
+
// fs.watch handlers. Without this ordering, watch events fire before the
|
|
22
|
+
// seed completes and either land before any subscriber attaches (silent
|
|
23
|
+
// drop) or race with seed inserts (double-emit). The deterministic order
|
|
24
|
+
// also lets the manager survive restarts mid-session — a long-lived PTY's
|
|
25
|
+
// PID file is already on disk when the manager comes back up.
|
|
26
|
+
//
|
|
27
|
+
// Per-file 200 ms debounce coalesces the burst of MODIFY events Claude Code
|
|
28
|
+
// emits when the PID file is rewritten (write-temp-rename is two events
|
|
29
|
+
// from fs.watch's perspective on macOS, more on Linux), and folds the
|
|
30
|
+
// CREATE→MODIFY pair an editor-style writer can emit.
|
|
31
|
+
//
|
|
32
|
+
// Identifiers carried on every row:
|
|
33
|
+
// - sessionId (canonical, never null)
|
|
34
|
+
// - bridgeSessionId ("session_<suffix>" form, null for entrypoint=cli
|
|
35
|
+
// rows that have not yet written URL-bound state)
|
|
36
|
+
// - bridgeSuffix ("<suffix>" — derived; bridgeSessionId minus the
|
|
37
|
+
// "session_" prefix)
|
|
38
|
+
// - pid (null on archived JSONL-only rows)
|
|
39
|
+
// The store/HTTP layer resolves an inbound id against all four keys so a
|
|
40
|
+
// caller holding any one of them resolves to the same row.
|
|
41
|
+
import { existsSync, mkdirSync, openSync, closeSync, readSync, readFileSync, readdirSync, statSync, watch } from 'node:fs';
|
|
42
|
+
import { join } from 'node:path';
|
|
43
|
+
const DEBOUNCE_MS = 200;
|
|
44
|
+
// First `agent-setting` record sits near the JSONL head (Claude Code writes
|
|
45
|
+
// it after env+meta, before the first user turn). 32 KiB is enough to cover
|
|
46
|
+
// the prologue with margin.
|
|
47
|
+
const JSONL_HEAD_READ_BYTES = 32 * 1024;
|
|
48
|
+
/** Scan the first JSONL_HEAD_READ_BYTES of a transcript for the first
|
|
49
|
+
* `{"type":"agent-setting","agentSetting":"<name>"}` record. Returns the
|
|
50
|
+
* agent name, or null when no record is found (operator-driven session)
|
|
51
|
+
* or the file is unreadable. */
|
|
52
|
+
function readAgentSettingFromJsonl(path) {
|
|
53
|
+
let fd;
|
|
54
|
+
try {
|
|
55
|
+
fd = openSync(path, 'r');
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
try {
|
|
61
|
+
const buf = Buffer.alloc(JSONL_HEAD_READ_BYTES);
|
|
62
|
+
const n = readSync(fd, buf, 0, JSONL_HEAD_READ_BYTES, 0);
|
|
63
|
+
const head = buf.toString('utf8', 0, n);
|
|
64
|
+
const newlineIdx = head.lastIndexOf('\n');
|
|
65
|
+
const scannable = newlineIdx === -1 ? head : head.slice(0, newlineIdx);
|
|
66
|
+
for (const line of scannable.split('\n')) {
|
|
67
|
+
if (!line.includes('"agent-setting"'))
|
|
68
|
+
continue;
|
|
69
|
+
try {
|
|
70
|
+
const obj = JSON.parse(line);
|
|
71
|
+
if (obj.type !== 'agent-setting')
|
|
72
|
+
continue;
|
|
73
|
+
if (typeof obj.agentSetting !== 'string' || obj.agentSetting.length === 0)
|
|
74
|
+
continue;
|
|
75
|
+
return obj.agentSetting;
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// Malformed line — keep scanning.
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
try {
|
|
85
|
+
closeSync(fd);
|
|
86
|
+
}
|
|
87
|
+
catch { /* ignore */ }
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function parsePidFile(path) {
|
|
91
|
+
let raw;
|
|
92
|
+
try {
|
|
93
|
+
raw = readFileSync(path, 'utf8');
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
if (!raw)
|
|
99
|
+
return null;
|
|
100
|
+
let parsed;
|
|
101
|
+
try {
|
|
102
|
+
parsed = JSON.parse(raw);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
const sessionId = typeof parsed.sessionId === 'string' ? parsed.sessionId : '';
|
|
108
|
+
const pid = typeof parsed.pid === 'number' ? parsed.pid : null;
|
|
109
|
+
if (!sessionId || pid === null)
|
|
110
|
+
return null;
|
|
111
|
+
const bridgeSessionId = typeof parsed.bridgeSessionId === 'string' ? parsed.bridgeSessionId : null;
|
|
112
|
+
const bridgeSuffix = bridgeSessionId ? bridgeSessionId.replace(/^session_/, '') : null;
|
|
113
|
+
const agent = typeof parsed.agent === 'string' ? parsed.agent : null;
|
|
114
|
+
const cwd = typeof parsed.cwd === 'string' ? parsed.cwd : null;
|
|
115
|
+
const rawStatus = typeof parsed.status === 'string' ? parsed.status : '';
|
|
116
|
+
const status = rawStatus === 'busy' ? 'busy' : 'idle';
|
|
117
|
+
const updatedAt = typeof parsed.updatedAt === 'number'
|
|
118
|
+
? parsed.updatedAt
|
|
119
|
+
: typeof parsed.startedAt === 'number'
|
|
120
|
+
? parsed.startedAt
|
|
121
|
+
: 0;
|
|
122
|
+
return {
|
|
123
|
+
sessionId,
|
|
124
|
+
bridgeSessionId,
|
|
125
|
+
bridgeSuffix,
|
|
126
|
+
agent,
|
|
127
|
+
cachedAgentSetting: null,
|
|
128
|
+
cwd,
|
|
129
|
+
pid,
|
|
130
|
+
jsonlPath: null,
|
|
131
|
+
pidFilePath: path,
|
|
132
|
+
state: 'live',
|
|
133
|
+
status,
|
|
134
|
+
updatedAt,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
export function createFsWatcher(opts) {
|
|
138
|
+
const { sessionsDir, projectsDir, logger } = opts;
|
|
139
|
+
// Canonical store keyed on sessionId. Secondary maps re-derived from the
|
|
140
|
+
// canonical row so a removeRow drops every key in one shot.
|
|
141
|
+
const rowsBySessionId = new Map();
|
|
142
|
+
const sessionIdByPid = new Map();
|
|
143
|
+
const sessionIdByBridgeSuffix = new Map();
|
|
144
|
+
const sessionIdByPidFilePath = new Map();
|
|
145
|
+
const subscribers = new Set();
|
|
146
|
+
const pidWaiters = new Map();
|
|
147
|
+
const debounceTimers = new Map();
|
|
148
|
+
let pidWatcher = null;
|
|
149
|
+
let jsonlWatcher = null;
|
|
150
|
+
let armed = false;
|
|
151
|
+
let seeded = false;
|
|
152
|
+
function emit(event) {
|
|
153
|
+
logger(`[fs-watcher] event=${event.kind} kind=${event.source} sessionId=${event.sessionId} ` +
|
|
154
|
+
`bridgeSessionId=${event.row?.bridgeSessionId ?? 'none'} agent=${event.row?.agent ?? 'none'} ` +
|
|
155
|
+
`status=${event.row?.status ?? 'gone'} path=${event.row?.[event.source === 'pid' ? 'pidFilePath' : 'jsonlPath'] ?? 'none'}`);
|
|
156
|
+
for (const sub of subscribers) {
|
|
157
|
+
try {
|
|
158
|
+
sub(event);
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
logger(`[fs-watcher] subscriber-error message=${err instanceof Error ? err.message : String(err)}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Drain PID waiters when the event carries a pid.
|
|
165
|
+
if (event.kind !== 'delete' && event.row && event.row.pid !== null) {
|
|
166
|
+
const waiter = pidWaiters.get(event.row.pid);
|
|
167
|
+
if (waiter) {
|
|
168
|
+
clearTimeout(waiter.timer);
|
|
169
|
+
pidWaiters.delete(event.row.pid);
|
|
170
|
+
waiter.resolve(event.row);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
function indexRow(row) {
|
|
175
|
+
rowsBySessionId.set(row.sessionId, row);
|
|
176
|
+
if (row.pid !== null)
|
|
177
|
+
sessionIdByPid.set(row.pid, row.sessionId);
|
|
178
|
+
if (row.bridgeSuffix)
|
|
179
|
+
sessionIdByBridgeSuffix.set(row.bridgeSuffix, row.sessionId);
|
|
180
|
+
if (row.pidFilePath)
|
|
181
|
+
sessionIdByPidFilePath.set(row.pidFilePath, row.sessionId);
|
|
182
|
+
}
|
|
183
|
+
function unindexRow(row) {
|
|
184
|
+
rowsBySessionId.delete(row.sessionId);
|
|
185
|
+
if (row.pid !== null)
|
|
186
|
+
sessionIdByPid.delete(row.pid);
|
|
187
|
+
if (row.bridgeSuffix)
|
|
188
|
+
sessionIdByBridgeSuffix.delete(row.bridgeSuffix);
|
|
189
|
+
if (row.pidFilePath)
|
|
190
|
+
sessionIdByPidFilePath.delete(row.pidFilePath);
|
|
191
|
+
}
|
|
192
|
+
function jsonlPathFor(sessionId) {
|
|
193
|
+
return join(projectsDir, `${sessionId}.jsonl`);
|
|
194
|
+
}
|
|
195
|
+
/** Apply the current on-disk state for one PID-file path to the index.
|
|
196
|
+
* Reads the file if present, merges with any existing row (by sessionId),
|
|
197
|
+
* or removes the row when the file is gone. Emits create/modify/delete. */
|
|
198
|
+
function reconcilePidFile(path) {
|
|
199
|
+
const onDisk = existsSync(path);
|
|
200
|
+
const priorSessionId = sessionIdByPidFilePath.get(path);
|
|
201
|
+
if (!onDisk) {
|
|
202
|
+
if (!priorSessionId)
|
|
203
|
+
return;
|
|
204
|
+
const prior = rowsBySessionId.get(priorSessionId);
|
|
205
|
+
if (!prior) {
|
|
206
|
+
sessionIdByPidFilePath.delete(path);
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
// PID file gone. If JSONL still exists, demote row to archived;
|
|
210
|
+
// else drop it entirely.
|
|
211
|
+
const jsonlPath = prior.jsonlPath ?? jsonlPathFor(prior.sessionId);
|
|
212
|
+
if (existsSync(jsonlPath)) {
|
|
213
|
+
// Cache agent identity from JSONL head before the PID file is
|
|
214
|
+
// forgotten. `agent` on a live row comes from the PID file
|
|
215
|
+
// (`--agent <name>`); after demote it's null, so without this
|
|
216
|
+
// cache the UI would lose the specialist label.
|
|
217
|
+
const cachedAgentSetting = prior.cachedAgentSetting
|
|
218
|
+
?? readAgentSettingFromJsonl(jsonlPath);
|
|
219
|
+
const updated = {
|
|
220
|
+
...prior,
|
|
221
|
+
pid: null,
|
|
222
|
+
pidFilePath: null,
|
|
223
|
+
state: 'archived',
|
|
224
|
+
status: 'gone',
|
|
225
|
+
cachedAgentSetting,
|
|
226
|
+
jsonlPath,
|
|
227
|
+
};
|
|
228
|
+
unindexRow(prior);
|
|
229
|
+
indexRow(updated);
|
|
230
|
+
emit({ kind: 'delete', source: 'pid', row: updated, sessionId: updated.sessionId });
|
|
231
|
+
emit({ kind: 'modify', source: 'jsonl', row: updated, sessionId: updated.sessionId });
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
unindexRow(prior);
|
|
235
|
+
emit({ kind: 'delete', source: 'pid', row: null, sessionId: prior.sessionId });
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
const parsed = parsePidFile(path);
|
|
239
|
+
if (!parsed)
|
|
240
|
+
return;
|
|
241
|
+
const jsonlPath = jsonlPathFor(parsed.sessionId);
|
|
242
|
+
if (existsSync(jsonlPath))
|
|
243
|
+
parsed.jsonlPath = jsonlPath;
|
|
244
|
+
const prior = rowsBySessionId.get(parsed.sessionId);
|
|
245
|
+
if (!prior) {
|
|
246
|
+
indexRow(parsed);
|
|
247
|
+
emit({ kind: 'create', source: 'pid', row: parsed, sessionId: parsed.sessionId });
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
// Merge: keep jsonlPath from prior if file existed; otherwise from
|
|
251
|
+
// parsed (which already checked disk above).
|
|
252
|
+
const merged = {
|
|
253
|
+
...prior,
|
|
254
|
+
...parsed,
|
|
255
|
+
jsonlPath: parsed.jsonlPath ?? prior.jsonlPath,
|
|
256
|
+
};
|
|
257
|
+
unindexRow(prior);
|
|
258
|
+
indexRow(merged);
|
|
259
|
+
emit({ kind: 'modify', source: 'pid', row: merged, sessionId: merged.sessionId });
|
|
260
|
+
}
|
|
261
|
+
function reconcileJsonlFile(path) {
|
|
262
|
+
const onDisk = existsSync(path);
|
|
263
|
+
const fileName = path.slice(path.lastIndexOf('/') + 1);
|
|
264
|
+
if (!fileName.endsWith('.jsonl'))
|
|
265
|
+
return;
|
|
266
|
+
const sessionId = fileName.slice(0, -'.jsonl'.length);
|
|
267
|
+
const prior = rowsBySessionId.get(sessionId);
|
|
268
|
+
if (!onDisk) {
|
|
269
|
+
if (!prior)
|
|
270
|
+
return;
|
|
271
|
+
// JSONL gone. If PID file still present, row stays live but loses
|
|
272
|
+
// transcript; else drop row entirely.
|
|
273
|
+
if (prior.pidFilePath && existsSync(prior.pidFilePath)) {
|
|
274
|
+
const updated = { ...prior, jsonlPath: null };
|
|
275
|
+
rowsBySessionId.set(updated.sessionId, updated);
|
|
276
|
+
emit({ kind: 'delete', source: 'jsonl', row: updated, sessionId });
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
279
|
+
unindexRow(prior);
|
|
280
|
+
emit({ kind: 'delete', source: 'jsonl', row: null, sessionId });
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
if (prior) {
|
|
284
|
+
if (prior.jsonlPath === path) {
|
|
285
|
+
emit({ kind: 'modify', source: 'jsonl', row: prior, sessionId });
|
|
286
|
+
return;
|
|
287
|
+
}
|
|
288
|
+
const updated = { ...prior, jsonlPath: path };
|
|
289
|
+
rowsBySessionId.set(sessionId, updated);
|
|
290
|
+
emit({ kind: 'modify', source: 'jsonl', row: updated, sessionId });
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
// JSONL appeared without a corresponding PID file → archived row.
|
|
294
|
+
const row = {
|
|
295
|
+
sessionId,
|
|
296
|
+
bridgeSessionId: null,
|
|
297
|
+
bridgeSuffix: null,
|
|
298
|
+
agent: null,
|
|
299
|
+
cachedAgentSetting: readAgentSettingFromJsonl(path),
|
|
300
|
+
cwd: null,
|
|
301
|
+
pid: null,
|
|
302
|
+
jsonlPath: path,
|
|
303
|
+
pidFilePath: null,
|
|
304
|
+
state: 'archived',
|
|
305
|
+
status: 'gone',
|
|
306
|
+
updatedAt: (() => {
|
|
307
|
+
try {
|
|
308
|
+
return statSync(path).mtimeMs;
|
|
309
|
+
}
|
|
310
|
+
catch {
|
|
311
|
+
return 0;
|
|
312
|
+
}
|
|
313
|
+
})(),
|
|
314
|
+
};
|
|
315
|
+
indexRow(row);
|
|
316
|
+
emit({ kind: 'create', source: 'jsonl', row, sessionId });
|
|
317
|
+
}
|
|
318
|
+
function schedule(path, reconcile) {
|
|
319
|
+
const prev = debounceTimers.get(path);
|
|
320
|
+
if (prev)
|
|
321
|
+
clearTimeout(prev);
|
|
322
|
+
const t = setTimeout(() => {
|
|
323
|
+
debounceTimers.delete(path);
|
|
324
|
+
try {
|
|
325
|
+
reconcile(path);
|
|
326
|
+
}
|
|
327
|
+
catch (err) {
|
|
328
|
+
logger(`[fs-watcher] reconcile-error path=${path} message=${err instanceof Error ? err.message : String(err)}`);
|
|
329
|
+
}
|
|
330
|
+
}, DEBOUNCE_MS);
|
|
331
|
+
debounceTimers.set(path, t);
|
|
332
|
+
}
|
|
333
|
+
function bootSeed() {
|
|
334
|
+
if (seeded)
|
|
335
|
+
return;
|
|
336
|
+
let pidCount = 0;
|
|
337
|
+
let jsonlCount = 0;
|
|
338
|
+
try {
|
|
339
|
+
for (const entry of readdirSync(sessionsDir, { withFileTypes: true })) {
|
|
340
|
+
if (!entry.isFile() || !entry.name.endsWith('.json'))
|
|
341
|
+
continue;
|
|
342
|
+
const path = join(sessionsDir, entry.name);
|
|
343
|
+
const row = parsePidFile(path);
|
|
344
|
+
if (!row)
|
|
345
|
+
continue;
|
|
346
|
+
const jsonlPath = jsonlPathFor(row.sessionId);
|
|
347
|
+
if (existsSync(jsonlPath))
|
|
348
|
+
row.jsonlPath = jsonlPath;
|
|
349
|
+
indexRow(row);
|
|
350
|
+
pidCount += 1;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
catch {
|
|
354
|
+
// sessionsDir absent — fine. Watcher creates it via mkdir at arm time.
|
|
355
|
+
}
|
|
356
|
+
try {
|
|
357
|
+
for (const entry of readdirSync(projectsDir, { withFileTypes: true })) {
|
|
358
|
+
if (!entry.isFile() || !entry.name.endsWith('.jsonl'))
|
|
359
|
+
continue;
|
|
360
|
+
const sessionId = entry.name.slice(0, -'.jsonl'.length);
|
|
361
|
+
const path = join(projectsDir, entry.name);
|
|
362
|
+
const prior = rowsBySessionId.get(sessionId);
|
|
363
|
+
if (prior) {
|
|
364
|
+
if (prior.jsonlPath !== path) {
|
|
365
|
+
rowsBySessionId.set(sessionId, { ...prior, jsonlPath: path });
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
else {
|
|
369
|
+
const row = {
|
|
370
|
+
sessionId,
|
|
371
|
+
bridgeSessionId: null,
|
|
372
|
+
bridgeSuffix: null,
|
|
373
|
+
agent: null,
|
|
374
|
+
cachedAgentSetting: readAgentSettingFromJsonl(path),
|
|
375
|
+
cwd: null,
|
|
376
|
+
pid: null,
|
|
377
|
+
jsonlPath: path,
|
|
378
|
+
pidFilePath: null,
|
|
379
|
+
state: 'archived',
|
|
380
|
+
status: 'gone',
|
|
381
|
+
updatedAt: (() => {
|
|
382
|
+
try {
|
|
383
|
+
return statSync(path).mtimeMs;
|
|
384
|
+
}
|
|
385
|
+
catch {
|
|
386
|
+
return 0;
|
|
387
|
+
}
|
|
388
|
+
})(),
|
|
389
|
+
};
|
|
390
|
+
indexRow(row);
|
|
391
|
+
}
|
|
392
|
+
jsonlCount += 1;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
catch {
|
|
396
|
+
// projectsDir absent on first boot — Claude Code creates it on first
|
|
397
|
+
// transcript write. Watcher's mkdirSync at arm() avoids fs.watch ENOENT.
|
|
398
|
+
}
|
|
399
|
+
seeded = true;
|
|
400
|
+
logger(`[fs-watcher] boot-seed sessions-dir=${pidCount} projects-dir=${jsonlCount} rows=${rowsBySessionId.size}`);
|
|
401
|
+
}
|
|
402
|
+
function arm() {
|
|
403
|
+
if (armed)
|
|
404
|
+
return;
|
|
405
|
+
if (!seeded)
|
|
406
|
+
bootSeed();
|
|
407
|
+
try {
|
|
408
|
+
mkdirSync(sessionsDir, { recursive: true });
|
|
409
|
+
}
|
|
410
|
+
catch { /* best effort */ }
|
|
411
|
+
try {
|
|
412
|
+
mkdirSync(projectsDir, { recursive: true });
|
|
413
|
+
}
|
|
414
|
+
catch { /* best effort */ }
|
|
415
|
+
try {
|
|
416
|
+
pidWatcher = watch(sessionsDir, { persistent: false }, (_event, filename) => {
|
|
417
|
+
if (!filename || !filename.endsWith('.json'))
|
|
418
|
+
return;
|
|
419
|
+
const path = join(sessionsDir, filename);
|
|
420
|
+
schedule(path, reconcilePidFile);
|
|
421
|
+
});
|
|
422
|
+
pidWatcher.on('error', (err) => {
|
|
423
|
+
logger(`[fs-watcher] watch-error dir=${sessionsDir} message=${err instanceof Error ? err.message : String(err)}`);
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
catch (err) {
|
|
427
|
+
logger(`[fs-watcher] watch-init-failed dir=${sessionsDir} message=${err instanceof Error ? err.message : String(err)}`);
|
|
428
|
+
}
|
|
429
|
+
try {
|
|
430
|
+
jsonlWatcher = watch(projectsDir, { persistent: false }, (_event, filename) => {
|
|
431
|
+
if (!filename || !filename.endsWith('.jsonl'))
|
|
432
|
+
return;
|
|
433
|
+
const path = join(projectsDir, filename);
|
|
434
|
+
schedule(path, reconcileJsonlFile);
|
|
435
|
+
});
|
|
436
|
+
jsonlWatcher.on('error', (err) => {
|
|
437
|
+
logger(`[fs-watcher] watch-error dir=${projectsDir} message=${err instanceof Error ? err.message : String(err)}`);
|
|
438
|
+
});
|
|
439
|
+
}
|
|
440
|
+
catch (err) {
|
|
441
|
+
logger(`[fs-watcher] watch-init-failed dir=${projectsDir} message=${err instanceof Error ? err.message : String(err)}`);
|
|
442
|
+
}
|
|
443
|
+
armed = true;
|
|
444
|
+
logger(`[fs-watcher] armed sessions-dir=${sessionsDir} projects-dir=${projectsDir}`);
|
|
445
|
+
}
|
|
446
|
+
function subscribe(sub) {
|
|
447
|
+
subscribers.add(sub);
|
|
448
|
+
return () => { subscribers.delete(sub); };
|
|
449
|
+
}
|
|
450
|
+
function getBySessionId(id) {
|
|
451
|
+
return rowsBySessionId.get(id);
|
|
452
|
+
}
|
|
453
|
+
function getByBridgeSessionId(id) {
|
|
454
|
+
const suffix = id.replace(/^session_/, '');
|
|
455
|
+
const sessionId = sessionIdByBridgeSuffix.get(suffix);
|
|
456
|
+
return sessionId ? rowsBySessionId.get(sessionId) : undefined;
|
|
457
|
+
}
|
|
458
|
+
function getByBridgeSuffix(suffix) {
|
|
459
|
+
const sessionId = sessionIdByBridgeSuffix.get(suffix);
|
|
460
|
+
return sessionId ? rowsBySessionId.get(sessionId) : undefined;
|
|
461
|
+
}
|
|
462
|
+
function getByPid(pid) {
|
|
463
|
+
const sessionId = sessionIdByPid.get(pid);
|
|
464
|
+
return sessionId ? rowsBySessionId.get(sessionId) : undefined;
|
|
465
|
+
}
|
|
466
|
+
function all() {
|
|
467
|
+
return [...rowsBySessionId.values()];
|
|
468
|
+
}
|
|
469
|
+
function waitForPid(pid, timeoutMs) {
|
|
470
|
+
const existing = getByPid(pid);
|
|
471
|
+
if (existing)
|
|
472
|
+
return Promise.resolve(existing);
|
|
473
|
+
return new Promise((resolve, reject) => {
|
|
474
|
+
const timer = setTimeout(() => {
|
|
475
|
+
pidWaiters.delete(pid);
|
|
476
|
+
reject(new Error(`fs-watcher waitForPid timed out pid=${pid} ms=${timeoutMs}`));
|
|
477
|
+
}, timeoutMs);
|
|
478
|
+
pidWaiters.set(pid, { resolve, reject, timer });
|
|
479
|
+
});
|
|
480
|
+
}
|
|
481
|
+
function close() {
|
|
482
|
+
if (pidWatcher) {
|
|
483
|
+
pidWatcher.close();
|
|
484
|
+
pidWatcher = null;
|
|
485
|
+
}
|
|
486
|
+
if (jsonlWatcher) {
|
|
487
|
+
jsonlWatcher.close();
|
|
488
|
+
jsonlWatcher = null;
|
|
489
|
+
}
|
|
490
|
+
for (const t of debounceTimers.values())
|
|
491
|
+
clearTimeout(t);
|
|
492
|
+
debounceTimers.clear();
|
|
493
|
+
for (const w of pidWaiters.values()) {
|
|
494
|
+
clearTimeout(w.timer);
|
|
495
|
+
w.reject(new Error('fs-watcher closed'));
|
|
496
|
+
}
|
|
497
|
+
pidWaiters.clear();
|
|
498
|
+
subscribers.clear();
|
|
499
|
+
}
|
|
500
|
+
return {
|
|
501
|
+
bootSeed,
|
|
502
|
+
arm,
|
|
503
|
+
subscribe,
|
|
504
|
+
getBySessionId,
|
|
505
|
+
getByBridgeSessionId,
|
|
506
|
+
getByBridgeSuffix,
|
|
507
|
+
getByPid,
|
|
508
|
+
all,
|
|
509
|
+
waitForPid,
|
|
510
|
+
close,
|
|
511
|
+
__internal: { reconcilePidFile, reconcileJsonlFile },
|
|
512
|
+
};
|
|
513
|
+
}
|
|
514
|
+
//# sourceMappingURL=fs-watcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-watcher.js","sourceRoot":"","sources":["../src/fs-watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { Hono } from 'hono';
|
|
2
2
|
import type { SessionStore } from './session-store.js';
|
|
3
3
|
import { type SpawnDeps } from './pty-spawner.js';
|
|
4
|
+
import type { FsWatcher } from './fs-watcher.js';
|
|
4
5
|
import type { RateLimiter } from './spawn-rate-limiter.js';
|
|
5
6
|
import type { AuditRegistry } from './public-tool-audit.js';
|
|
6
|
-
export interface HttpDeps extends Omit<SpawnDeps, 'store' | '
|
|
7
|
+
export interface HttpDeps extends Omit<SpawnDeps, 'store' | 'onSessionReady' | 'watcher'> {
|
|
7
8
|
store: SessionStore;
|
|
9
|
+
watcher: FsWatcher;
|
|
8
10
|
killGraceMs: number;
|
|
9
11
|
jsonlReadMaxBytes: number;
|
|
10
12
|
publicSpawnLimiter: RateLimiter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAI3B,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAA0E,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAIzH,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,iBAAiB,CAAA;AAE5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AA8E3D,MAAM,WAAW,QAAS,SAAQ,IAAI,CAAC,SAAS,EAAE,OAAO,GAAG,gBAAgB,GAAG,SAAS,CAAC;IACvF,KAAK,EAAE,YAAY,CAAA;IACnB,OAAO,EAAE,SAAS,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;IACzB,kBAAkB,EAAE,WAAW,CAAA;IAC/B,eAAe,EAAE,aAAa,CAAA;CAC/B;AA0DD,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CA0tBjD"}
|