@rryando/arcs 3.10.0 → 3.11.0
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/README.md +172 -146
- package/dist/cli/agent-registry.d.ts +12 -0
- package/dist/cli/agent-registry.d.ts.map +1 -0
- package/dist/cli/agent-registry.js +67 -0
- package/dist/cli/agent-registry.js.map +1 -0
- package/dist/cli/arcs-flash.d.ts +2 -0
- package/dist/cli/arcs-flash.d.ts.map +1 -0
- package/dist/cli/arcs-flash.js +68 -0
- package/dist/cli/arcs-flash.js.map +1 -0
- package/dist/cli/arcs-orchestrate-caveman.d.ts +2 -14
- package/dist/cli/arcs-orchestrate-caveman.d.ts.map +1 -1
- package/dist/cli/arcs-orchestrate-caveman.js +6 -97
- package/dist/cli/arcs-orchestrate-caveman.js.map +1 -1
- package/dist/cli/arcs-orchestrate.d.ts +1 -1
- package/dist/cli/arcs-orchestrate.d.ts.map +1 -1
- package/dist/cli/arcs-orchestrate.js +40 -383
- package/dist/cli/arcs-orchestrate.js.map +1 -1
- package/dist/cli/bundle-installer.d.ts +10 -4
- package/dist/cli/bundle-installer.d.ts.map +1 -1
- package/dist/cli/bundle-installer.js +99 -6
- package/dist/cli/bundle-installer.js.map +1 -1
- package/dist/cli/commands/batch.js +4 -0
- package/dist/cli/commands/batch.js.map +1 -1
- package/dist/cli/commands/hooks.d.ts +36 -0
- package/dist/cli/commands/hooks.d.ts.map +1 -0
- package/dist/cli/commands/hooks.js +298 -0
- package/dist/cli/commands/hooks.js.map +1 -0
- package/dist/cli/commands/index.d.ts +2 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +2 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/project.js +27 -0
- package/dist/cli/commands/project.js.map +1 -1
- package/dist/cli/commands/task.js +16 -1
- package/dist/cli/commands/task.js.map +1 -1
- package/dist/cli/commands/web.d.ts +2 -0
- package/dist/cli/commands/web.d.ts.map +1 -0
- package/dist/cli/commands/web.js +56 -0
- package/dist/cli/commands/web.js.map +1 -0
- package/dist/cli/config.d.ts +32 -0
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +56 -0
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/instructions.d.ts +19 -6
- package/dist/cli/instructions.d.ts.map +1 -1
- package/dist/cli/instructions.js +62 -32
- package/dist/cli/instructions.js.map +1 -1
- package/dist/cli/orchestrator-shared-blocks.d.ts +31 -0
- package/dist/cli/orchestrator-shared-blocks.d.ts.map +1 -0
- package/dist/cli/orchestrator-shared-blocks.js +148 -0
- package/dist/cli/orchestrator-shared-blocks.js.map +1 -0
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +159 -85
- package/dist/cli/setup.js.map +1 -1
- package/dist/retrieval/index-builder.d.ts.map +1 -1
- package/dist/retrieval/index-builder.js +29 -1
- package/dist/retrieval/index-builder.js.map +1 -1
- package/dist/utils/claude-code-hook-install.d.ts +80 -0
- package/dist/utils/claude-code-hook-install.d.ts.map +1 -0
- package/dist/utils/claude-code-hook-install.js +146 -0
- package/dist/utils/claude-code-hook-install.js.map +1 -0
- package/dist/utils/claude-transcript.d.ts +127 -0
- package/dist/utils/claude-transcript.d.ts.map +1 -0
- package/dist/utils/claude-transcript.js +353 -0
- package/dist/utils/claude-transcript.js.map +1 -0
- package/dist/utils/diagram-generator.d.ts +1 -1
- package/dist/utils/diagram-generator.d.ts.map +1 -1
- package/dist/utils/diagram-generator.js +3 -2
- package/dist/utils/diagram-generator.js.map +1 -1
- package/dist/utils/errors.d.ts +6 -2
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +12 -0
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/hook-token-store.d.ts +22 -0
- package/dist/utils/hook-token-store.d.ts.map +1 -0
- package/dist/utils/hook-token-store.js +43 -0
- package/dist/utils/hook-token-store.js.map +1 -0
- package/dist/utils/json-schemas.d.ts +186 -2
- package/dist/utils/json-schemas.d.ts.map +1 -1
- package/dist/utils/json-schemas.js +48 -4
- package/dist/utils/json-schemas.js.map +1 -1
- package/dist/utils/knowledge-store.d.ts +7 -1
- package/dist/utils/knowledge-store.d.ts.map +1 -1
- package/dist/utils/knowledge-store.js +97 -65
- package/dist/utils/knowledge-store.js.map +1 -1
- package/dist/utils/plan-store.d.ts +8 -0
- package/dist/utils/plan-store.d.ts.map +1 -1
- package/dist/utils/plan-store.js +98 -59
- package/dist/utils/plan-store.js.map +1 -1
- package/dist/utils/project-resolver.d.ts +8 -0
- package/dist/utils/project-resolver.d.ts.map +1 -1
- package/dist/utils/project-resolver.js +7 -2
- package/dist/utils/project-resolver.js.map +1 -1
- package/dist/utils/session-store.d.ts +113 -0
- package/dist/utils/session-store.d.ts.map +1 -0
- package/dist/utils/session-store.js +312 -0
- package/dist/utils/session-store.js.map +1 -0
- package/dist/utils/storage-utils.d.ts +31 -0
- package/dist/utils/storage-utils.d.ts.map +1 -1
- package/dist/utils/storage-utils.js +116 -5
- package/dist/utils/storage-utils.js.map +1 -1
- package/dist/utils/task-store.d.ts +7 -0
- package/dist/utils/task-store.d.ts.map +1 -1
- package/dist/utils/task-store.js +73 -23
- package/dist/utils/task-store.js.map +1 -1
- package/dist/web-client/assets/GraphCanvas-dNyZ458L.js +1 -0
- package/dist/web-client/assets/MarkdownEditor-BmU9mdkN.js +77 -0
- package/dist/web-client/assets/abnfDiagram-VRR7QNED-D1BFBoeF.js +1 -0
- package/dist/web-client/assets/arc-Bfaogrm1.js +1 -0
- package/dist/web-client/assets/architecture-TIHT7OUA-CJqI5wNI.js +1 -0
- package/dist/web-client/assets/architectureDiagram-ZJ3FMSHR-CA8hTWUK.js +36 -0
- package/dist/web-client/assets/array-BifhSqXX.js +1 -0
- package/dist/web-client/assets/blockDiagram-677ZJIJ3-CQpb_KwX.js +132 -0
- package/dist/web-client/assets/c4Diagram-LMCZKHZV-BhpHX84V.js +10 -0
- package/dist/web-client/assets/channel-C8DlmyVe.js +1 -0
- package/dist/web-client/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- package/dist/web-client/assets/chunk-32BRIVSS-BUusQQa_.js +1 -0
- package/dist/web-client/assets/chunk-52WLFC77-nNYwlftl.js +10 -0
- package/dist/web-client/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
- package/dist/web-client/assets/chunk-7BUUIJ7U-Bb538aSH.js +1 -0
- package/dist/web-client/assets/chunk-C7G6YPKG-D0a-yqnK.js +1 -0
- package/dist/web-client/assets/chunk-EX3LRPZG-IDuRMN-4.js +231 -0
- package/dist/web-client/assets/chunk-FWX5IMBZ-D_spTcqi.js +2 -0
- package/dist/web-client/assets/chunk-HOUHSVGY-C-bcxwZS.js +1 -0
- package/dist/web-client/assets/chunk-ICXQ74PX-CjmK2bAM.js +2 -0
- package/dist/web-client/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
- package/dist/web-client/assets/chunk-KEIR6QF5-DEvma7oi.js +161 -0
- package/dist/web-client/assets/chunk-MOJQB5TN-Bkc08KWY.js +88 -0
- package/dist/web-client/assets/chunk-OGEWGWER-BAAYYvG9.js +1 -0
- package/dist/web-client/assets/chunk-PUDLZKDR-WXbPY7NM.js +156 -0
- package/dist/web-client/assets/chunk-Q4XR5HBZ-DcbnjxQE.js +70 -0
- package/dist/web-client/assets/chunk-RYQCIY6F-np2RyIY1.js +1 -0
- package/dist/web-client/assets/chunk-V7JOEXUC-C6t75PAp.js +206 -0
- package/dist/web-client/assets/chunk-VAUOI2AC-DVrJ0Ic7.js +1 -0
- package/dist/web-client/assets/chunk-VR4S4FIN-MOOFvGS0.js +1 -0
- package/dist/web-client/assets/chunk-WYO6CB5R-sK7Y2NZD.js +125 -0
- package/dist/web-client/assets/chunk-XXDRQBXY-BvKO0v-W.js +1 -0
- package/dist/web-client/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
- package/dist/web-client/assets/chunk-ZGVPDNZ5-a13RQsku.js +62 -0
- package/dist/web-client/assets/chunk-ZIRB5QZD-BpeS1aZ7.js +32 -0
- package/dist/web-client/assets/classDiagram-OUVF2IWQ-p32N1P_G.js +1 -0
- package/dist/web-client/assets/classDiagram-v2-EOCWNBFH-p32N1P_G.js +1 -0
- package/dist/web-client/assets/cose-bilkent-JH36ORCC-BebHqzgp.js +1 -0
- package/dist/web-client/assets/cynefin-VYW2F7L2-D8xaH-wO.js +1 -0
- package/dist/web-client/assets/cynefinDiagram-TSTJHNR4-Bt__EqJW.js +62 -0
- package/dist/web-client/assets/cytoscape-fcose-peAzqedC.js +1 -0
- package/dist/web-client/assets/cytoscape.esm-C3UvhD5t.js +321 -0
- package/dist/web-client/assets/dagre-Buvkdvvj.js +1 -0
- package/dist/web-client/assets/dagre-VKFMJZFB-Bwgjwflz.js +4 -0
- package/dist/web-client/assets/defaultLocale-BFoDCU3G.js +1 -0
- package/dist/web-client/assets/diagram-FQU43EPY-CaPDVUq2.js +3 -0
- package/dist/web-client/assets/diagram-G47NLZAW-BQLB9YYA.js +24 -0
- package/dist/web-client/assets/diagram-NH7WQ7WH-BWo84w8Y.js +24 -0
- package/dist/web-client/assets/diagram-OA4YK3LP-bKn6Pz5s.js +30 -0
- package/dist/web-client/assets/diagram-WEI45ONY-BRqV5Oy6.js +41 -0
- package/dist/web-client/assets/dist-B_J_HbC0.js +1 -0
- package/dist/web-client/assets/ebnfDiagram-CCIWWBDH-DhUXL1-7.js +1 -0
- package/dist/web-client/assets/erDiagram-Q63AITRT-HXAQQ-_F.js +85 -0
- package/dist/web-client/assets/eventmodeling-45OFAUF4-Bj5P8mZJ.js +1 -0
- package/dist/web-client/assets/flowDiagram-23GEKE2U-37BztFri.js +1 -0
- package/dist/web-client/assets/ganttDiagram-NO4QXBWP-D-Ddf_Ii.js +292 -0
- package/dist/web-client/assets/gitGraph-TEB2WS4Q-BmHzs0uF.js +1 -0
- package/dist/web-client/assets/gitGraphDiagram-IHSO6WYX-YnQWrlh_.js +106 -0
- package/dist/web-client/assets/graphlib-DS17s2tU.js +1 -0
- package/dist/web-client/assets/index-3mNPVkix.css +2 -0
- package/dist/web-client/assets/index-DCWxuIeQ.js +58 -0
- package/dist/web-client/assets/info-DKCQHKI2-DCT_B7RN.js +1 -0
- package/dist/web-client/assets/infoDiagram-FWYZ7A6U-D-le1Zhq.js +2 -0
- package/dist/web-client/assets/init-C-OQMol4.js +1 -0
- package/dist/web-client/assets/ishikawaDiagram-FXEZZL3T-Jr1x2VJB.js +70 -0
- package/dist/web-client/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
- package/dist/web-client/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
- package/dist/web-client/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
- package/dist/web-client/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
- package/dist/web-client/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
- package/dist/web-client/assets/journeyDiagram-5HDEW3XC-BF9ELxj-.js +139 -0
- package/dist/web-client/assets/kanban-definition-HUTT4EX6-C4fJqAxu.js +89 -0
- package/dist/web-client/assets/katex-DolUETbr.js +257 -0
- package/dist/web-client/assets/line-7N7ikFxa.js +1 -0
- package/dist/web-client/assets/linear-DeUiD2wj.js +1 -0
- package/dist/web-client/assets/map-BaFkSB1l.js +1 -0
- package/dist/web-client/assets/mermaid-parser.core-QbC1icPt.js +7 -0
- package/dist/web-client/assets/mermaid.core-C26d_UJm.js +11 -0
- package/dist/web-client/assets/mindmap-definition-LN4V7U3C-D6TV1JDf.js +96 -0
- package/dist/web-client/assets/ordinal-BDEzSJ7C.js +1 -0
- package/dist/web-client/assets/packet-7NZHBO7P-CR1vrGj3.js +1 -0
- package/dist/web-client/assets/path-COt_16Va.js +1 -0
- package/dist/web-client/assets/pegDiagram-2B236MQR-xOMBBtfV.js +1 -0
- package/dist/web-client/assets/pie-RZYD4A2V-BbWuhjwy.js +1 -0
- package/dist/web-client/assets/pieDiagram-ENE6RG2P-MsfnsqgW.js +39 -0
- package/dist/web-client/assets/quadrantDiagram-ABIIQ3AL-BoI7zKXF.js +7 -0
- package/dist/web-client/assets/radar-I7S5WNFK-CbYXKToJ.js +1 -0
- package/dist/web-client/assets/railroad-3IZDKUUU-6LxHDkLe.js +1 -0
- package/dist/web-client/assets/railroad-abnf-AHOZXSZD-2Dg9wu0J.js +1 -0
- package/dist/web-client/assets/railroad-ebnf-EBAXGLYW-C_E2ot0R.js +1 -0
- package/dist/web-client/assets/railroad-peg-LSFZ7HO6-Bs9UQR1b.js +1 -0
- package/dist/web-client/assets/railroadDiagram-RFXS5EU6-D6RUoUki.js +1 -0
- package/dist/web-client/assets/requirementDiagram-TGXJPOKE-B6k4BDpE.js +84 -0
- package/dist/web-client/assets/rolldown-runtime-Dd_uD5pT.js +1 -0
- package/dist/web-client/assets/rough.esm-By172zw-.js +1 -0
- package/dist/web-client/assets/sankeyDiagram-HTMAVEWB-BUDF-UFr.js +40 -0
- package/dist/web-client/assets/sequenceDiagram-DBY2YBRQ-D6GqcsUi.js +162 -0
- package/dist/web-client/assets/sizeCapture-X5ZJPWSS-B0uUizjq.js +1 -0
- package/dist/web-client/assets/src-oBChb5qS.js +1 -0
- package/dist/web-client/assets/stateDiagram-2N3HPSRC-WfJCQAK5.js +1 -0
- package/dist/web-client/assets/stateDiagram-v2-6OUMAXLB-BCMWGnsJ.js +1 -0
- package/dist/web-client/assets/swimlanes-5IMT3BWC-BtMo82mC.js +2 -0
- package/dist/web-client/assets/swimlanesDiagram-G3AALYLV-DmudmLcK.js +8 -0
- package/dist/web-client/assets/timeline-definition-FHXFAJF6-CoAmv2Sn.js +120 -0
- package/dist/web-client/assets/treeView-QDETBFTQ-BWsKzE1s.js +1 -0
- package/dist/web-client/assets/treemap-6X3UGDF4-i_qGtB3o.js +1 -0
- package/dist/web-client/assets/vennDiagram-L72KCM5P-DYkiLe-P.js +34 -0
- package/dist/web-client/assets/wardley-OPB4EBWU-Daaqr1Vp.js +1 -0
- package/dist/web-client/assets/wardleyDiagram-EHGQE667-Bofbsg3J.js +78 -0
- package/dist/web-client/assets/xychartDiagram-FW5EYKEG-KNF4VTfL.js +7 -0
- package/dist/web-client/index.html +15 -0
- package/dist/web-server/app.d.ts +13 -0
- package/dist/web-server/app.d.ts.map +1 -0
- package/dist/web-server/app.js +58 -0
- package/dist/web-server/app.js.map +1 -0
- package/dist/web-server/claude-runner.d.ts +86 -0
- package/dist/web-server/claude-runner.d.ts.map +1 -0
- package/dist/web-server/claude-runner.js +320 -0
- package/dist/web-server/claude-runner.js.map +1 -0
- package/dist/web-server/hook-auth.d.ts +12 -0
- package/dist/web-server/hook-auth.d.ts.map +1 -0
- package/dist/web-server/hook-auth.js +36 -0
- package/dist/web-server/hook-auth.js.map +1 -0
- package/dist/web-server/index.d.ts +23 -0
- package/dist/web-server/index.d.ts.map +1 -0
- package/dist/web-server/index.js +49 -0
- package/dist/web-server/index.js.map +1 -0
- package/dist/web-server/opencode-client.d.ts +123 -0
- package/dist/web-server/opencode-client.d.ts.map +1 -0
- package/dist/web-server/opencode-client.js +514 -0
- package/dist/web-server/opencode-client.js.map +1 -0
- package/dist/web-server/respond.d.ts +33 -0
- package/dist/web-server/respond.d.ts.map +1 -0
- package/dist/web-server/respond.js +79 -0
- package/dist/web-server/respond.js.map +1 -0
- package/dist/web-server/routes/collections.d.ts +11 -0
- package/dist/web-server/routes/collections.d.ts.map +1 -0
- package/dist/web-server/routes/collections.js +217 -0
- package/dist/web-server/routes/collections.js.map +1 -0
- package/dist/web-server/routes/discovery.d.ts +7 -0
- package/dist/web-server/routes/discovery.d.ts.map +1 -0
- package/dist/web-server/routes/discovery.js +159 -0
- package/dist/web-server/routes/discovery.js.map +1 -0
- package/dist/web-server/routes/events.d.ts +6 -0
- package/dist/web-server/routes/events.d.ts.map +1 -0
- package/dist/web-server/routes/events.js +25 -0
- package/dist/web-server/routes/events.js.map +1 -0
- package/dist/web-server/routes/hook-events.d.ts +19 -0
- package/dist/web-server/routes/hook-events.d.ts.map +1 -0
- package/dist/web-server/routes/hook-events.js +135 -0
- package/dist/web-server/routes/hook-events.js.map +1 -0
- package/dist/web-server/routes/projects.d.ts +7 -0
- package/dist/web-server/routes/projects.d.ts.map +1 -0
- package/dist/web-server/routes/projects.js +272 -0
- package/dist/web-server/routes/projects.js.map +1 -0
- package/dist/web-server/routes/sessions.d.ts +16 -0
- package/dist/web-server/routes/sessions.d.ts.map +1 -0
- package/dist/web-server/routes/sessions.js +442 -0
- package/dist/web-server/routes/sessions.js.map +1 -0
- package/dist/web-server/security.d.ts +7 -0
- package/dist/web-server/security.d.ts.map +1 -0
- package/dist/web-server/security.js +41 -0
- package/dist/web-server/security.js.map +1 -0
- package/dist/web-server/static.d.ts +10 -0
- package/dist/web-server/static.d.ts.map +1 -0
- package/dist/web-server/static.js +36 -0
- package/dist/web-server/static.js.map +1 -0
- package/dist/web-server/storage.d.ts +17 -0
- package/dist/web-server/storage.d.ts.map +1 -0
- package/dist/web-server/storage.js +42 -0
- package/dist/web-server/storage.js.map +1 -0
- package/dist/web-server/watcher.d.ts +37 -0
- package/dist/web-server/watcher.d.ts.map +1 -0
- package/dist/web-server/watcher.js +181 -0
- package/dist/web-server/watcher.js.map +1 -0
- package/opencode/arcs/bundle-runtime.json +5 -13
- package/opencode/arcs/manifest.json +213 -149
- package/opencode/arcs/prompts/arcs-docs.txt +53 -47
- package/opencode/arcs/prompts/arcs-flash.txt +190 -0
- package/opencode/arcs/prompts/arcs-orchestrate-caveman.txt +116 -422
- package/opencode/arcs/prompts/arcs-orchestrate.txt +114 -341
- package/opencode/arcs/prompts/code-reviewer.txt +37 -98
- package/opencode/arcs/prompts/devil-advocate.txt +44 -115
- package/opencode/arcs/prompts/graph-explorer.txt +31 -179
- package/opencode/arcs/prompts/software-engineer.txt +24 -6
- package/opencode/arcs/prompts/tech-architect.txt +25 -9
- package/opencode/arcs/skills/brainstorming/SKILL.md +65 -105
- package/opencode/arcs/skills/deep-pr-review/SKILL.md +5 -5
- package/opencode/arcs/skills/deep-pr-review/review-template.md +1 -1
- package/opencode/arcs/skills/enriching-codegraph-proposals/SKILL.md +17 -18
- package/opencode/arcs/skills/executing-plans/SKILL.md +26 -234
- package/opencode/arcs/skills/implementation/SKILL.md +61 -0
- package/opencode/arcs/skills/init-project/SKILL.md +16 -15
- package/opencode/arcs/skills/install-claude-code-hook/SKILL.md +143 -0
- package/opencode/arcs/skills/systematic-debugging/SKILL.md +7 -7
- package/opencode/arcs/skills/test-driven-development/SKILL.md +1 -1
- package/opencode/arcs/skills/to-diagram/SKILL.md +8 -3
- package/opencode/arcs/skills/writing-knowledge/SKILL.md +7 -6
- package/opencode/arcs/skills/writing-plans/SKILL.md +80 -130
- package/opencode/arcs/skills/writing-plans/plan-document-reviewer-prompt.md +38 -30
- package/package.json +14 -6
- package/scripts/build-opencode-bundle.mjs +22 -7
- package/scripts/claude-code-session-hook.mjs +125 -0
- package/scripts/deploy-claudecode-bundle.mjs +185 -132
- package/scripts/deploy-opencode-bundle.mjs +181 -5
- package/scripts/lib/bundle-helpers.mjs +26 -0
- package/scripts/lint-bundle.mjs +123 -3
- package/skills/explore-dag.md +5 -3
- package/skills/init-project.md +27 -26
- package/skills/orchestrate.md +29 -13
- package/skills/update-docs.md +8 -13
- package/opencode/arcs/prompts/docs-researcher.txt +0 -79
- package/opencode/arcs/prompts/oncall-ops.txt +0 -85
- package/opencode/arcs/skills/code-agent/SKILL.md +0 -63
- package/opencode/arcs/skills/executing-plans/code-quality-reviewer-prompt.md +0 -57
- package/opencode/arcs/skills/executing-plans/implementer-prompt.md +0 -152
- package/opencode/arcs/skills/executing-plans/spec-reviewer-prompt.md +0 -91
- package/opencode/arcs/skills/quick-dev/SKILL.md +0 -52
- package/opencode/arcs/skills/requesting-code-review/SKILL.md +0 -59
- package/opencode/arcs/skills/requesting-code-review/code-reviewer.md +0 -139
- package/opencode/arcs/skills/the-ladder/SKILL.md +0 -54
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code transcript mirroring for the session bridge.
|
|
3
|
+
*
|
|
4
|
+
* Owns a per-session sidecar at `sessions/{normalizedId}.transcript.jsonl`
|
|
5
|
+
* that mirrors a Claude Code JSONL transcript (the runtime's single source of
|
|
6
|
+
* truth) into a derived read-model for the web UI. The sidecar is append-only
|
|
7
|
+
* and keyed by transcript line offsets so re-mirroring is idempotent; when the
|
|
8
|
+
* transcript is compacted/rewritten below the mirrored offset, the sidecar is
|
|
9
|
+
* rebuilt from line 0 while preserving ARCS-authored turns (any record with a
|
|
10
|
+
* negative id — references and web-sent user/assistant turns).
|
|
11
|
+
*
|
|
12
|
+
* Never throws: missing/unreadable/oversized/malformed inputs are silent
|
|
13
|
+
* no-ops, and the sidecar never touches `sessions/index.json`.
|
|
14
|
+
*/
|
|
15
|
+
import { appendFile, readFile, stat } from "node:fs/promises";
|
|
16
|
+
import { join } from "node:path";
|
|
17
|
+
import { withLock } from "./file-lock.js";
|
|
18
|
+
import { normalizeIdentifier } from "./slug.js";
|
|
19
|
+
import { ensureDir, nowISO, writeTextAtomic } from "./storage-utils.js";
|
|
20
|
+
/** Single-read cap for transcript files; anything larger mirrors as a no-op. */
|
|
21
|
+
export const TRANSCRIPT_MAX_BYTES = 20 * 1024 * 1024;
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Paths & locking
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
/**
|
|
26
|
+
* Sidecar path. The filename keys on the normalized id so it matches the
|
|
27
|
+
* session index record exactly (normalizeIdentifier round-trips UUIDs
|
|
28
|
+
* unchanged, so Claude Code session uuids survive verbatim).
|
|
29
|
+
*/
|
|
30
|
+
export function sessionTranscriptPath(projectDir, normalizedId) {
|
|
31
|
+
return join(projectDir, "sessions", `${normalizeIdentifier(normalizedId)}.transcript.jsonl`);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* The same advisory lock the session store uses for index mutations. Kept
|
|
35
|
+
* local (not imported) because session-store's helper is private and that
|
|
36
|
+
* module is out of scope; the path mirrors its `sessions/.store` so appends
|
|
37
|
+
* here serialize with createSession/updateSession/etc.
|
|
38
|
+
*/
|
|
39
|
+
function sessionStoreLockPath(projectDir) {
|
|
40
|
+
return join(projectDir, "sessions", ".store");
|
|
41
|
+
}
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
// Transcript parser — verified against the real Claude Code JSONL shape
|
|
44
|
+
// ---------------------------------------------------------------------------
|
|
45
|
+
function isBlock(value) {
|
|
46
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
47
|
+
}
|
|
48
|
+
/** Concatenates non-empty text blocks; thinking/tool_use blocks are dropped. */
|
|
49
|
+
function extractTextBlocks(blocks) {
|
|
50
|
+
return blocks
|
|
51
|
+
.filter((block) => isBlock(block) &&
|
|
52
|
+
block.type === "text" &&
|
|
53
|
+
typeof block.text === "string" &&
|
|
54
|
+
block.text !== "")
|
|
55
|
+
.map((block) => block.text)
|
|
56
|
+
.join("\n");
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Parses one transcript line into a normalized turn, or null when the line is
|
|
60
|
+
* noise/malformed. Malformed JSON is skipped, never thrown.
|
|
61
|
+
*
|
|
62
|
+
* Noise rules (verified against real ~/.claude/projects JSONL transcripts):
|
|
63
|
+
* - types other than "user"/"assistant" (mode, agent-setting, permission-mode,
|
|
64
|
+
* file-history-snapshot, last-prompt, queue-operation, system, attachment…)
|
|
65
|
+
* - user entries with isMeta:true (the <local-command-caveat> wrapper)
|
|
66
|
+
* - user local-command payloads (<command-name>/<local-command-stdout>), which
|
|
67
|
+
* in practice carry NO isMeta flag at all — filtered by content marker
|
|
68
|
+
* - user entries whose content is a tool_result array (tool output echoes)
|
|
69
|
+
* - thinking blocks inside assistant content
|
|
70
|
+
* - assistant lines with neither text nor tool_use (thinking-only lines)
|
|
71
|
+
*/
|
|
72
|
+
function parseTranscriptLine(rawLine, lineIndex) {
|
|
73
|
+
if (rawLine.trim() === "")
|
|
74
|
+
return null;
|
|
75
|
+
let entry;
|
|
76
|
+
try {
|
|
77
|
+
entry = JSON.parse(rawLine);
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
if (!isBlock(entry))
|
|
83
|
+
return null;
|
|
84
|
+
if (entry.type !== "user" && entry.type !== "assistant")
|
|
85
|
+
return null;
|
|
86
|
+
const message = entry.message;
|
|
87
|
+
if (!isBlock(message))
|
|
88
|
+
return null;
|
|
89
|
+
const ts = typeof entry.timestamp === "string" ? entry.timestamp : undefined;
|
|
90
|
+
if (entry.type === "user") {
|
|
91
|
+
if (entry.isMeta === true)
|
|
92
|
+
return null;
|
|
93
|
+
const content = message.content;
|
|
94
|
+
if (typeof content === "string") {
|
|
95
|
+
const text = content.trim();
|
|
96
|
+
if (text.startsWith("<command-name>") ||
|
|
97
|
+
text.startsWith("<local-command-stdout>") ||
|
|
98
|
+
text.startsWith("<local-command-caveat>")) {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
return { id: lineIndex, type: "user", text, ...(ts !== undefined ? { ts } : {}) };
|
|
102
|
+
}
|
|
103
|
+
if (Array.isArray(content)) {
|
|
104
|
+
// Claude Code user arrays are tool_result blocks — echoed tool output,
|
|
105
|
+
// never a real prompt. (The rare text-only array, e.g. an interruption
|
|
106
|
+
// notice, is kept.)
|
|
107
|
+
if (content.some((block) => isBlock(block) && block.type === "tool_result"))
|
|
108
|
+
return null;
|
|
109
|
+
const text = extractTextBlocks(content);
|
|
110
|
+
if (text === "")
|
|
111
|
+
return null;
|
|
112
|
+
return { id: lineIndex, type: "user", text, ...(ts !== undefined ? { ts } : {}) };
|
|
113
|
+
}
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
// assistant — content is a block array: keep text, dim tool_use, drop thinking.
|
|
117
|
+
if (!Array.isArray(message.content))
|
|
118
|
+
return null;
|
|
119
|
+
const text = extractTextBlocks(message.content);
|
|
120
|
+
const toolUse = message.content.find((block) => isBlock(block) && block.type === "tool_use" && typeof block.name === "string");
|
|
121
|
+
if (text === "" && toolUse === undefined)
|
|
122
|
+
return null;
|
|
123
|
+
const turn = {
|
|
124
|
+
id: lineIndex,
|
|
125
|
+
type: "assistant",
|
|
126
|
+
text,
|
|
127
|
+
...(ts !== undefined ? { ts } : {}),
|
|
128
|
+
};
|
|
129
|
+
if (toolUse !== undefined)
|
|
130
|
+
turn.tool = { name: toolUse.name };
|
|
131
|
+
return turn;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Reads a Claude Code JSONL transcript and parses only lines >= fromLine.
|
|
135
|
+
* Returns the kept turns (absolute line indices) plus the transcript's total
|
|
136
|
+
* record-line count. Never throws — unreadable files yield empty results.
|
|
137
|
+
*/
|
|
138
|
+
export async function readTranscriptTurns(filePath, fromLine) {
|
|
139
|
+
let raw;
|
|
140
|
+
try {
|
|
141
|
+
raw = await readFile(filePath, "utf-8");
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return { turns: [], totalLines: 0 };
|
|
145
|
+
}
|
|
146
|
+
const lines = raw.split("\n");
|
|
147
|
+
// A trailing newline produces one empty split element — not a record line.
|
|
148
|
+
while (lines.length > 0 && lines[lines.length - 1] === "")
|
|
149
|
+
lines.pop();
|
|
150
|
+
const totalLines = lines.length;
|
|
151
|
+
const turns = [];
|
|
152
|
+
for (let lineIndex = fromLine; lineIndex < totalLines; lineIndex++) {
|
|
153
|
+
const turn = parseTranscriptLine(lines[lineIndex] ?? "", lineIndex);
|
|
154
|
+
if (turn !== null)
|
|
155
|
+
turns.push(turn);
|
|
156
|
+
}
|
|
157
|
+
return { turns, totalLines };
|
|
158
|
+
}
|
|
159
|
+
// ---------------------------------------------------------------------------
|
|
160
|
+
// Sidecar read/write
|
|
161
|
+
// ---------------------------------------------------------------------------
|
|
162
|
+
function parseSidecarLine(rawLine) {
|
|
163
|
+
if (rawLine.trim() === "")
|
|
164
|
+
return null;
|
|
165
|
+
try {
|
|
166
|
+
const parsed = JSON.parse(rawLine);
|
|
167
|
+
if (isBlock(parsed) &&
|
|
168
|
+
(parsed.type === "user" || parsed.type === "assistant" || parsed.type === "reference")) {
|
|
169
|
+
return parsed;
|
|
170
|
+
}
|
|
171
|
+
return null;
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/** Reads the sidecar, skipping malformed lines. Never throws. */
|
|
178
|
+
async function readSidecarRecords(filePath) {
|
|
179
|
+
try {
|
|
180
|
+
const raw = await readFile(filePath, "utf-8");
|
|
181
|
+
return raw.split("\n").flatMap((line) => {
|
|
182
|
+
const record = parseSidecarLine(line);
|
|
183
|
+
return record !== null ? [record] : [];
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
return [];
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Resume offset = the next unmirrored transcript line. ARCS-authored turns are
|
|
192
|
+
* excluded (they are not transcript lines, and their negative ids never exceed
|
|
193
|
+
* the -1 sentinel, so they cannot push the offset), and the id of the last
|
|
194
|
+
* mirrored turn is the transcript line index it came from, so
|
|
195
|
+
* `last id + 1` is the count of transcript lines consumed. Equivalent to the
|
|
196
|
+
* sidecar line count in the noise-free case, and correct under interleaved
|
|
197
|
+
* noise and ARCS-authored turns where a raw line count would drift.
|
|
198
|
+
*/
|
|
199
|
+
function mirrorOffset(records) {
|
|
200
|
+
let lastMirroredId = -1;
|
|
201
|
+
for (const record of records) {
|
|
202
|
+
if (record.type !== "reference" &&
|
|
203
|
+
typeof record.id === "number" &&
|
|
204
|
+
record.id > lastMirroredId) {
|
|
205
|
+
lastMirroredId = record.id;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return lastMirroredId + 1;
|
|
209
|
+
}
|
|
210
|
+
function serializeRecords(records) {
|
|
211
|
+
if (records.length === 0)
|
|
212
|
+
return "";
|
|
213
|
+
return `${records.map((record) => JSON.stringify(record)).join("\n")}\n`;
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Next id in the shared ARCS-authored negative space: min(existing id < 0) − 1.
|
|
217
|
+
* All ARCS-authored records — session user/assistant turns and references —
|
|
218
|
+
* draw from this one monotonic sequence, so a user turn and a reference can
|
|
219
|
+
* never collide on the same id (the panel renders <TurnRow key={t.id}>).
|
|
220
|
+
* No negative ids yet: first id is −1 (0 − 1).
|
|
221
|
+
*/
|
|
222
|
+
function nextNegativeTurnId(records) {
|
|
223
|
+
let minNegative = 0;
|
|
224
|
+
for (const record of records) {
|
|
225
|
+
if (typeof record.id === "number" && record.id < 0 && record.id < minNegative) {
|
|
226
|
+
minNegative = record.id;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return minNegative - 1;
|
|
230
|
+
}
|
|
231
|
+
async function appendRecords(filePath, records) {
|
|
232
|
+
if (records.length === 0)
|
|
233
|
+
return;
|
|
234
|
+
await appendFile(filePath, serializeRecords(records), "utf-8");
|
|
235
|
+
}
|
|
236
|
+
// ---------------------------------------------------------------------------
|
|
237
|
+
// Public API
|
|
238
|
+
// ---------------------------------------------------------------------------
|
|
239
|
+
/**
|
|
240
|
+
* Mirrors the transcript into the per-session sidecar (append-only, offset
|
|
241
|
+
* idempotent). When the transcript has fewer lines than the mirrored offset —
|
|
242
|
+
* Claude Code compacts/rewrites its JSONL — the sidecar is rebuilt from line 0
|
|
243
|
+
* with existing ARCS-authored turns (id < 0) preserved.
|
|
244
|
+
*
|
|
245
|
+
* Never throws: missing/unreadable/oversized/malformed inputs are silent
|
|
246
|
+
* no-ops and the sidecar stays untouched. Never writes sessions/index.json.
|
|
247
|
+
*/
|
|
248
|
+
export async function mirrorSessionTranscript(projectDir, normalizedId, transcriptPath) {
|
|
249
|
+
try {
|
|
250
|
+
// Cap the single read: oversized transcripts are silently skipped.
|
|
251
|
+
const transcriptStat = await stat(transcriptPath);
|
|
252
|
+
if (!transcriptStat.isFile() || transcriptStat.size > TRANSCRIPT_MAX_BYTES)
|
|
253
|
+
return;
|
|
254
|
+
await withLock(sessionStoreLockPath(projectDir), async () => {
|
|
255
|
+
const sidecarPath = sessionTranscriptPath(projectDir, normalizedId);
|
|
256
|
+
const existing = await readSidecarRecords(sidecarPath);
|
|
257
|
+
const offset = mirrorOffset(existing);
|
|
258
|
+
const { turns, totalLines } = await readTranscriptTurns(transcriptPath, offset);
|
|
259
|
+
if (totalLines < offset) {
|
|
260
|
+
// Compaction/rewrite: rebuild from line 0, preserving every
|
|
261
|
+
// ARCS-authored turn (id < 0) — references and web-sent user/assistant
|
|
262
|
+
// turns both live in the negative space.
|
|
263
|
+
// SHORTCUT: compaction detection is line-count-only — a corrupted or
|
|
264
|
+
// truncated transcript that happens to shrink below the mirrored
|
|
265
|
+
// offset is treated as compaction and mirrored turns are dropped
|
|
266
|
+
// (ARCS-authored turns always survive). Upgrade when Claude Code's
|
|
267
|
+
// JSONL rewrite signals are identifiable, e.g. a marker record.
|
|
268
|
+
const arsAuthored = existing.filter((record) => typeof record.id === "number" && record.id < 0);
|
|
269
|
+
const { turns: allTurns } = await readTranscriptTurns(transcriptPath, 0);
|
|
270
|
+
await ensureDir(join(projectDir, "sessions"));
|
|
271
|
+
await writeTextAtomic(sidecarPath, serializeRecords([...arsAuthored, ...allTurns]));
|
|
272
|
+
return;
|
|
273
|
+
}
|
|
274
|
+
if (turns.length === 0)
|
|
275
|
+
return;
|
|
276
|
+
await ensureDir(join(projectDir, "sessions"));
|
|
277
|
+
await appendRecords(sidecarPath, turns);
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
// Never throws — every mirror failure is a swallowed no-op.
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Appends an ARCS-authored reference turn (document section sent to the
|
|
286
|
+
* session) to the sidecar under the same sessions/.store lock the session
|
|
287
|
+
* store uses, so appends serialize with index mutations. A failed append is a
|
|
288
|
+
* swallowed no-op — the caller has already delivered the message. The id is
|
|
289
|
+
* minted from the shared ARCS-authored negative space so it can never collide
|
|
290
|
+
* with a web-sent user/assistant turn.
|
|
291
|
+
*/
|
|
292
|
+
export async function appendReferenceTurn(projectDir, normalizedId, turn) {
|
|
293
|
+
try {
|
|
294
|
+
await ensureDir(join(projectDir, "sessions"));
|
|
295
|
+
await withLock(sessionStoreLockPath(projectDir), async () => {
|
|
296
|
+
const sidecarPath = sessionTranscriptPath(projectDir, normalizedId);
|
|
297
|
+
const existing = await readSidecarRecords(sidecarPath);
|
|
298
|
+
const record = {
|
|
299
|
+
id: nextNegativeTurnId(existing),
|
|
300
|
+
type: "reference",
|
|
301
|
+
text: turn.text ?? "",
|
|
302
|
+
ts: turn.ts ?? nowISO(),
|
|
303
|
+
...(turn.tool !== undefined ? { tool: turn.tool } : {}),
|
|
304
|
+
...(turn.section !== undefined ? { section: turn.section } : {}),
|
|
305
|
+
...(turn.source !== undefined ? { source: turn.source } : {}),
|
|
306
|
+
};
|
|
307
|
+
await appendRecords(sidecarPath, [record]);
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
catch {
|
|
311
|
+
// Failed append is a swallowed no-op.
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Appends an ARCS-authored user/assistant turn (sent to the session from the
|
|
316
|
+
* web UI) to the sidecar under the same sessions/.store lock the session store
|
|
317
|
+
* and the other sidecar writers use, so appends serialize with index mutations
|
|
318
|
+
* and reference appends. A failed append is a swallowed no-op. The id is
|
|
319
|
+
* minted from the shared ARCS-authored negative space so it can never collide
|
|
320
|
+
* with a reference turn — both render through <TurnRow key={t.id}>.
|
|
321
|
+
*/
|
|
322
|
+
export async function appendSessionTurn(projectDir, normalizedId, turn) {
|
|
323
|
+
try {
|
|
324
|
+
await ensureDir(join(projectDir, "sessions"));
|
|
325
|
+
await withLock(sessionStoreLockPath(projectDir), async () => {
|
|
326
|
+
const sidecarPath = sessionTranscriptPath(projectDir, normalizedId);
|
|
327
|
+
const existing = await readSidecarRecords(sidecarPath);
|
|
328
|
+
const record = {
|
|
329
|
+
id: nextNegativeTurnId(existing),
|
|
330
|
+
type: turn.type,
|
|
331
|
+
text: turn.text,
|
|
332
|
+
...(turn.ts !== undefined ? { ts: turn.ts } : {}),
|
|
333
|
+
};
|
|
334
|
+
await appendRecords(sidecarPath, [record]);
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
catch {
|
|
338
|
+
// Failed append is a swallowed no-op.
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Reads the sidecar for the GET route, skipping malformed lines. Returns an
|
|
343
|
+
* empty array when the sidecar is missing. Never throws.
|
|
344
|
+
*/
|
|
345
|
+
export async function readSessionTurns(projectDir, normalizedId) {
|
|
346
|
+
try {
|
|
347
|
+
return await readSidecarRecords(sessionTranscriptPath(projectDir, normalizedId));
|
|
348
|
+
}
|
|
349
|
+
catch {
|
|
350
|
+
return [];
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
//# sourceMappingURL=claude-transcript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-transcript.js","sourceRoot":"","sources":["../../src/utils/claude-transcript.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagram-generator.d.ts","sourceRoot":"","sources":["../../src/utils/diagram-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"diagram-generator.d.ts","sourceRoot":"","sources":["../../src/utils/diagram-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3E,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,qBAAqB,CAyHjG"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { normalizeTaskWorkMetadata } from "./task-store.js";
|
|
1
2
|
/**
|
|
2
3
|
* Generates a Mermaid .mmd diagram from plan tasks.
|
|
3
4
|
* Node IDs assigned T001+ in stable task.id order (a.id.localeCompare(b.id)).
|
|
@@ -55,12 +56,12 @@ export function generateDiagramFromTasks(planId, tasks) {
|
|
|
55
56
|
lines.push(`%% next-action: Start first backlog task`, "");
|
|
56
57
|
for (let i = 0; i < nodes.length; i++) {
|
|
57
58
|
const node = nodes[i];
|
|
58
|
-
const t = sorted[i];
|
|
59
|
+
const t = normalizeTaskWorkMetadata(sorted[i]);
|
|
59
60
|
const deps = t.dependsOn ?? [];
|
|
60
61
|
const blockedBy = deps
|
|
61
62
|
.map((depId) => taskIdToNodeId.get(depId))
|
|
62
63
|
.filter((n) => n !== undefined);
|
|
63
|
-
lines.push(`%% node: ${node.nodeId}`, `%% title: ${t.title}`, `%% status: ${t.status}`, `%% skill: ${t.skill ?? "
|
|
64
|
+
lines.push(`%% node: ${node.nodeId}`, `%% title: ${t.title}`, `%% status: ${t.status}`, `%% skill: ${t.skill ?? "implementation"}`, `%% work-mode: ${t.workMode ?? "bounded"}`, `%% scope: ${t.scope ?? "(TBD)"}`);
|
|
64
65
|
if (t.sourceFiles && t.sourceFiles.length > 0) {
|
|
65
66
|
const filesStr = t.sourceFiles
|
|
66
67
|
.map((f) => (f.anchor ? `${f.path}:${f.anchor}` : f.path))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagram-generator.js","sourceRoot":"","sources":["../../src/utils/diagram-generator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"diagram-generator.js","sourceRoot":"","sources":["../../src/utils/diagram-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAiB,MAAM,iBAAiB,CAAC;AAa3E;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAc,EAAE,KAAiB;IACxE,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEnE,MAAM,KAAK,GAAkB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACjD,MAAM,EAAE,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;QAC5C,MAAM,EAAE,CAAC,CAAC,EAAE;QACZ,KAAK,EAAE,CAAC,CAAC,KAAK;KACf,CAAC,CAAC,CAAC;IAEJ,uDAAuD;IACvD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IACjD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,2DAA2D;IAC3D,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IACjD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,iCAAiC;IACjC,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,CAAC;YAC5E,IAAI,OAAO,EAAE,CAAC;gBACZ,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAErF,MAAM,KAAK,GAAa;QACtB,YAAY,MAAM,EAAE;QACpB,cAAc,UAAU,EAAE;QAC1B,aAAa,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,6BAA6B;KACrG,CAAC;IACF,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,eAAe,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IAC3E,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,0CAA0C,EAAE,EAAE,CAAC,CAAC;IAE3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,CAAC,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;QAC/B,MAAM,SAAS,GAAG,IAAI;aACnB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aACzC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;QAE/C,KAAK,CAAC,IAAI,CACR,YAAY,IAAI,CAAC,MAAM,EAAE,EACzB,aAAa,CAAC,CAAC,KAAK,EAAE,EACtB,cAAc,CAAC,CAAC,MAAM,EAAE,EACxB,aAAa,CAAC,CAAC,KAAK,IAAI,gBAAgB,EAAE,EAC1C,iBAAiB,CAAC,CAAC,QAAQ,IAAI,SAAS,EAAE,EAC1C,aAAa,CAAC,CAAC,KAAK,IAAI,OAAO,EAAE,CAClC,CAAC;QACF,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,MAAM,QAAQ,GAAG,CAAC,CAAC,WAAW;iBAC3B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;iBACzD,IAAI,CAAC,IAAI,CAAC,CAAC;YACd,KAAK,CAAC,IAAI,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC;QACtC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,UAAU,IAAI,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC,CAAC;QAChG,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,kBAAkB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CACR,cAAc,EACd,2CAA2C,EAC3C,iDAAiD,EACjD,8CAA8C,EAC9C,8CAA8C,EAC9C,EAAE,CACH,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,GAAG,GACP,CAAC,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9F,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,qEAAqE;IACrE,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;YACzB,MAAM,YAAY,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,YAAY,EAAE,CAAC;gBACjB,SAAS,CAAC,IAAI,CAAC,OAAO,YAAY,QAAQ,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IACD,SAAS,CAAC,IAAI,EAAE,CAAC;IACjB,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;AACjD,CAAC"}
|
package/dist/utils/errors.d.ts
CHANGED
|
@@ -15,11 +15,15 @@ export declare function dependencyNotFound(ids: string[]): DagError;
|
|
|
15
15
|
export declare function invalidPlanStatus(status: string): DagError;
|
|
16
16
|
export declare function invalidTaskStatus(status: string): DagError;
|
|
17
17
|
export declare function invalidTaskPriority(priority: string): DagError;
|
|
18
|
+
export declare function invalidSessionStatus(status: string): DagError;
|
|
19
|
+
export declare function invalidSessionRuntimeType(runtimeType: string): DagError;
|
|
20
|
+
export declare function invalidSessionId(runtimeSessionId: string): DagError;
|
|
21
|
+
export declare function invalidSessionLink(detail: string): DagError;
|
|
18
22
|
export declare function invalidKnowledgeKind(kind: string): DagError;
|
|
19
23
|
export declare function invalidKeyword(keyword: string): DagError;
|
|
20
24
|
export declare function invalidFileRef(detail: string): DagError;
|
|
21
|
-
export declare function normalizedIdCollision(kind: "plan" | "knowledge entry" | "task", requestedId: string, normalizedId: string): DagError;
|
|
22
|
-
export declare function itemNotFound(kind: "plan" | "knowledge entry" | "task", id: string): DagError;
|
|
25
|
+
export declare function normalizedIdCollision(kind: "plan" | "knowledge entry" | "task" | "session", requestedId: string, normalizedId: string): DagError;
|
|
26
|
+
export declare function itemNotFound(kind: "plan" | "knowledge entry" | "task" | "session", id: string): DagError;
|
|
23
27
|
export declare function planNotFound(slug: string, planId: string): DagError;
|
|
24
28
|
export declare function invalidFileFormat(filePath: string, details: string): DagError;
|
|
25
29
|
export declare function indexRebuildFailed(kind: "plans" | "knowledge", reason: string): DagError;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,qBAAa,QAAS,SAAQ,KAAK;aAEf,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM;CAKlB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAEtD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAE3D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAKpD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAKxE;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,QAAQ,CAKzE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAE9D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,QAAQ,CAE1D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAE1D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAE1D;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAE9D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAE3D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAExD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAEvD;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,qBAAa,QAAS,SAAQ,KAAK;aAEf,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM;CAKlB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAEtD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAE3D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAKpD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAKxE;AAED,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,QAAQ,CAKzE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAE9D;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,QAAQ,CAE1D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAE1D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAE1D;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAE9D;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAE7D;AAED,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,CAKvE;AAED,wBAAgB,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,GAAG,QAAQ,CAKnE;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAE3D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAE3D;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAExD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAEvD;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,MAAM,GAAG,SAAS,EACrD,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,QAAQ,CAKV;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,MAAM,GAAG,SAAS,EACrD,EAAE,EAAE,MAAM,GACT,QAAQ,CAEV;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAEnE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,QAAQ,CAE7E;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,QAAQ,CAExF;AAED,wBAAgB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,QAAQ,CAM9D;AAED,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,QAAQ,CAMtF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAK3D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAKvD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,QAAQ;;;;;;EAExC"}
|
package/dist/utils/errors.js
CHANGED
|
@@ -40,6 +40,18 @@ export function invalidTaskStatus(status) {
|
|
|
40
40
|
export function invalidTaskPriority(priority) {
|
|
41
41
|
return new DagError("INVALID_TASK_PRIORITY", `Invalid task priority "${priority}".`);
|
|
42
42
|
}
|
|
43
|
+
export function invalidSessionStatus(status) {
|
|
44
|
+
return new DagError("INVALID_SESSION_STATUS", `Invalid session status "${status}".`);
|
|
45
|
+
}
|
|
46
|
+
export function invalidSessionRuntimeType(runtimeType) {
|
|
47
|
+
return new DagError("INVALID_SESSION_RUNTIME_TYPE", `Invalid session runtime type "${runtimeType}".`);
|
|
48
|
+
}
|
|
49
|
+
export function invalidSessionId(runtimeSessionId) {
|
|
50
|
+
return new DagError("INVALID_SESSION_ID", `Invalid runtime session id "${runtimeSessionId}". Must contain at least one alphanumeric character.`);
|
|
51
|
+
}
|
|
52
|
+
export function invalidSessionLink(detail) {
|
|
53
|
+
return new DagError("INVALID_SESSION_LINK", `Invalid session link: ${detail}`);
|
|
54
|
+
}
|
|
43
55
|
export function invalidKnowledgeKind(kind) {
|
|
44
56
|
return new DagError("INVALID_KNOWLEDGE_KIND", `Invalid knowledge kind "${kind}".`);
|
|
45
57
|
}
|
package/dist/utils/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,OAAO,QAAS,SAAQ,KAAK;IAEf;IADlB,YACkB,IAAY,EAC5B,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,SAAI,GAAJ,IAAI,CAAQ;QAI5B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,IAAI,QAAQ,CAAC,mBAAmB,EAAE,YAAY,IAAI,mBAAmB,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,IAAI,QAAQ,CAAC,wBAAwB,EAAE,YAAY,IAAI,mBAAmB,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,IAAI,QAAQ,CACjB,kBAAkB,EAClB,0BAA0B,GAAG,8DAA8D,CAC5F,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB,EAAE,MAAc;IAC5D,OAAO,IAAI,QAAQ,CACjB,gBAAgB,EAChB,sBAAsB,QAAQ,QAAQ,MAAM,yBAAyB,CACtE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,SAAmB;IAC7D,OAAO,IAAI,QAAQ,CACjB,uBAAuB,EACvB,8BAA8B,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CACtD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,OAAO,IAAI,QAAQ,CAAC,2BAA2B,EAAE,oBAAoB,KAAK,mBAAmB,CAAC,CAAC;AACjG,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAAa;IAC9C,OAAO,IAAI,QAAQ,CAAC,sBAAsB,EAAE,iCAAiC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACjG,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,OAAO,IAAI,QAAQ,CAAC,qBAAqB,EAAE,wBAAwB,MAAM,IAAI,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,OAAO,IAAI,QAAQ,CAAC,qBAAqB,EAAE,wBAAwB,MAAM,IAAI,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,OAAO,IAAI,QAAQ,CAAC,uBAAuB,EAAE,0BAA0B,QAAQ,IAAI,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,OAAO,IAAI,QAAQ,CAAC,wBAAwB,EAAE,2BAA2B,IAAI,IAAI,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,IAAI,QAAQ,CAAC,iBAAiB,EAAE,oBAAoB,OAAO,IAAI,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,OAAO,IAAI,QAAQ,CAAC,kBAAkB,EAAE,2BAA2B,MAAM,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-project auth token for the Claude Code session-bridge hook endpoint.
|
|
3
|
+
*
|
|
4
|
+
* Loopback-only is not enough on its own: every process on the machine shares
|
|
5
|
+
* localhost, so any local program could otherwise register sessions or drain a
|
|
6
|
+
* project's message queue. The token proves the caller is the hook script that
|
|
7
|
+
* `arcs hooks install-claude-code` provisioned for this project.
|
|
8
|
+
*
|
|
9
|
+
* Intentionally not a CRUD store — one token per project, rotated by rerunning
|
|
10
|
+
* the install command. No index, no markdown mirror, no lock (a rotation races
|
|
11
|
+
* only with itself, and the loser simply has to rerun install).
|
|
12
|
+
*/
|
|
13
|
+
export declare function hookTokenPath(projectDir: string): string;
|
|
14
|
+
export declare function readHookToken(projectDir: string): Promise<string | undefined>;
|
|
15
|
+
export declare function writeHookToken(projectDir: string, token: string): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Constant-time token comparison. Returns false when the project has no token
|
|
18
|
+
* provisioned yet, so an uninstalled project cannot be driven by an empty
|
|
19
|
+
* `Authorization` header.
|
|
20
|
+
*/
|
|
21
|
+
export declare function verifyHookToken(projectDir: string, candidate: string): Promise<boolean>;
|
|
22
|
+
//# sourceMappingURL=hook-token-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-token-store.d.ts","sourceRoot":"","sources":["../../src/utils/hook-token-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAYH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAGnF;AAED,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGrF;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ7F"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-project auth token for the Claude Code session-bridge hook endpoint.
|
|
3
|
+
*
|
|
4
|
+
* Loopback-only is not enough on its own: every process on the machine shares
|
|
5
|
+
* localhost, so any local program could otherwise register sessions or drain a
|
|
6
|
+
* project's message queue. The token proves the caller is the hook script that
|
|
7
|
+
* `arcs hooks install-claude-code` provisioned for this project.
|
|
8
|
+
*
|
|
9
|
+
* Intentionally not a CRUD store — one token per project, rotated by rerunning
|
|
10
|
+
* the install command. No index, no markdown mirror, no lock (a rotation races
|
|
11
|
+
* only with itself, and the loser simply has to rerun install).
|
|
12
|
+
*/
|
|
13
|
+
import { timingSafeEqual } from "node:crypto";
|
|
14
|
+
import { join } from "node:path";
|
|
15
|
+
import { readJsonSafe } from "./json.js";
|
|
16
|
+
import { ensureDir, nowISO, writeJson } from "./storage-utils.js";
|
|
17
|
+
export function hookTokenPath(projectDir) {
|
|
18
|
+
return join(projectDir, "hooks", "claude-code-token.json");
|
|
19
|
+
}
|
|
20
|
+
export async function readHookToken(projectDir) {
|
|
21
|
+
const file = await readJsonSafe(hookTokenPath(projectDir));
|
|
22
|
+
return typeof file?.token === "string" && file.token ? file.token : undefined;
|
|
23
|
+
}
|
|
24
|
+
export async function writeHookToken(projectDir, token) {
|
|
25
|
+
await ensureDir(join(projectDir, "hooks"));
|
|
26
|
+
await writeJson(hookTokenPath(projectDir), { token, createdAt: nowISO() });
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Constant-time token comparison. Returns false when the project has no token
|
|
30
|
+
* provisioned yet, so an uninstalled project cannot be driven by an empty
|
|
31
|
+
* `Authorization` header.
|
|
32
|
+
*/
|
|
33
|
+
export async function verifyHookToken(projectDir, candidate) {
|
|
34
|
+
const token = await readHookToken(projectDir);
|
|
35
|
+
if (!token || !candidate)
|
|
36
|
+
return false;
|
|
37
|
+
const expected = Buffer.from(token, "utf-8");
|
|
38
|
+
const actual = Buffer.from(candidate, "utf-8");
|
|
39
|
+
if (expected.length !== actual.length)
|
|
40
|
+
return false;
|
|
41
|
+
return timingSafeEqual(expected, actual);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=hook-token-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-token-store.js","sourceRoot":"","sources":["../../src/utils/hook-token-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAOlE,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,OAAO,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,wBAAwB,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAkB;IACpD,MAAM,IAAI,GAAG,MAAM,YAAY,CAAgB,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;IAC1E,OAAO,OAAO,IAAI,EAAE,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAChF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAkB,EAAE,KAAa;IACpE,MAAM,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3C,MAAM,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;AAC7E,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAkB,EAAE,SAAiB;IACzE,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,UAAU,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAEvC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC/C,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACpD,OAAO,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC"}
|