@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
|
@@ -1,9 +1,28 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Adapter that builds BM25 retrieval indexes from ARCS project knowledge and plan entries.
|
|
3
3
|
*/
|
|
4
|
+
import { stat } from "node:fs/promises";
|
|
5
|
+
import { join } from "node:path";
|
|
4
6
|
import { getProjectDir } from "../utils/paths.js";
|
|
5
7
|
import { readKnowledgeIndex, readPlanIndex, } from "../utils/project-memory.js";
|
|
6
8
|
import { createBm25Index } from "./bm25.js";
|
|
9
|
+
const retrievalCache = new Map();
|
|
10
|
+
async function sourceSignature(projectDir) {
|
|
11
|
+
const paths = [
|
|
12
|
+
join(projectDir, "knowledge", "index.json"),
|
|
13
|
+
join(projectDir, "plans", "index.json"),
|
|
14
|
+
];
|
|
15
|
+
const parts = await Promise.all(paths.map(async (path) => {
|
|
16
|
+
try {
|
|
17
|
+
const info = await stat(path);
|
|
18
|
+
return `${info.mtimeMs}:${info.size}:${info.ino}`;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}));
|
|
24
|
+
return parts.some((part) => part === null) ? null : parts.join("|");
|
|
25
|
+
}
|
|
7
26
|
const FIELD_WEIGHTS = { title: 3, keywords: 2, summary: 1 };
|
|
8
27
|
function knowledgeToDocument(entry) {
|
|
9
28
|
return {
|
|
@@ -46,6 +65,10 @@ function buildSearchFn(index, metaMap) {
|
|
|
46
65
|
*/
|
|
47
66
|
export async function buildProjectRetrievalIndex(slug) {
|
|
48
67
|
const projectDir = getProjectDir(slug);
|
|
68
|
+
const signature = await sourceSignature(projectDir);
|
|
69
|
+
const cached = retrievalCache.get(projectDir);
|
|
70
|
+
if (signature !== null && cached?.signature === signature)
|
|
71
|
+
return cached.index;
|
|
49
72
|
let knowledgeEntries = [];
|
|
50
73
|
let planEntries = [];
|
|
51
74
|
try {
|
|
@@ -89,6 +112,11 @@ export async function buildProjectRetrievalIndex(slug) {
|
|
|
89
112
|
merged.sort((a, b) => b.score - a.score);
|
|
90
113
|
return merged.slice(0, limit);
|
|
91
114
|
};
|
|
92
|
-
|
|
115
|
+
const index = { searchKnowledge, searchPlans, searchAll };
|
|
116
|
+
if (signature !== null)
|
|
117
|
+
retrievalCache.set(projectDir, { signature, index });
|
|
118
|
+
else
|
|
119
|
+
retrievalCache.delete(projectDir);
|
|
120
|
+
return index;
|
|
93
121
|
}
|
|
94
122
|
//# sourceMappingURL=index-builder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-builder.js","sourceRoot":"","sources":["../../src/retrieval/index-builder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAGL,kBAAkB,EAClB,aAAa,GACd,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAkB,eAAe,EAAiB,MAAM,WAAW,CAAC;AAgB3E,MAAM,aAAa,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAE5D,SAAS,mBAAmB,CAAC,KAAoB;IAC/C,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,MAAM,EAAE;YACN,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YAClC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE;SAC7B;KACF,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,IAAc;IACpC,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,MAAM,EAAE;YACN,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YACjC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;SAC5B;KACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,KAAgB,EAChB,OAAoF;IAEpF,OAAO,CAAC,KAAa,EAAE,KAAK,GAAG,EAAE,EAAiB,EAAE;QAClD,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACvB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC;YAChC,OAAO;gBACL,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,KAAK,EAAE,CAAC,CAAC,KAAK;aACf,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,IAAY;IAC3D,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index-builder.js","sourceRoot":"","sources":["../../src/retrieval/index-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Consent-gated writer for the Claude Code session-bridge hook.
|
|
3
|
+
*
|
|
4
|
+
* `arcs hooks install-claude-code` deliberately never edits agent configuration
|
|
5
|
+
* — it prints a snippet. This module is the opt-in counterpart: when the user
|
|
6
|
+
* explicitly confirms during `arcs project init`, it merges the same hook entry
|
|
7
|
+
* into the workspace's `.claude/settings.local.json` (local-only: the token is a
|
|
8
|
+
* secret and `settings.local.json` is the git-ignored variant).
|
|
9
|
+
*
|
|
10
|
+
* Two rules the merge must never break:
|
|
11
|
+
* 1. A malformed existing file ABORTS the write. Silently coalescing an
|
|
12
|
+
* unparseable settings file to `{}` would destroy a user's `permissions`
|
|
13
|
+
* block over a stray comma, so parse errors are surfaced, not swallowed.
|
|
14
|
+
* 2. Replacement is keyed on the absolute hook script path, not the project
|
|
15
|
+
* slug. A workspace can be reassigned between ARCS projects, so matching on
|
|
16
|
+
* the script path leaves exactly one current ARCS entry per event instead
|
|
17
|
+
* of accumulating stale ones. Entries belonging to other tools are kept
|
|
18
|
+
* untouched, in place.
|
|
19
|
+
*/
|
|
20
|
+
interface HookCommandEntry {
|
|
21
|
+
type?: string;
|
|
22
|
+
command?: string;
|
|
23
|
+
[key: string]: unknown;
|
|
24
|
+
}
|
|
25
|
+
interface HookMatcherEntry {
|
|
26
|
+
hooks?: HookCommandEntry[];
|
|
27
|
+
[key: string]: unknown;
|
|
28
|
+
}
|
|
29
|
+
export interface ClaudeSettings {
|
|
30
|
+
hooks?: Record<string, HookMatcherEntry[]>;
|
|
31
|
+
[key: string]: unknown;
|
|
32
|
+
}
|
|
33
|
+
export interface ClaudeCodeHookInstallResult {
|
|
34
|
+
settingsPath: string;
|
|
35
|
+
token: string;
|
|
36
|
+
hookScriptPath: string;
|
|
37
|
+
serverUrl: string;
|
|
38
|
+
events: string[];
|
|
39
|
+
}
|
|
40
|
+
/** The only file this module ever writes — never `~/.claude/settings.json`. */
|
|
41
|
+
export declare function claudeSettingsLocalPath(workspacePath: string): string;
|
|
42
|
+
/**
|
|
43
|
+
* Returns a copy of `settings` with the ARCS hook entry registered under every
|
|
44
|
+
* hook event, replacing any prior entry that runs the same `hookScriptPath`.
|
|
45
|
+
* Pure — no I/O, so the merge rules are directly testable.
|
|
46
|
+
*/
|
|
47
|
+
export declare function mergeHookIntoSettings(settings: ClaudeSettings, hook: {
|
|
48
|
+
command: string;
|
|
49
|
+
hookScriptPath: string;
|
|
50
|
+
}): ClaudeSettings;
|
|
51
|
+
/**
|
|
52
|
+
* Reads the workspace's `.claude/settings.local.json` (if any), merges in a
|
|
53
|
+
* freshly provisioned hook, and writes it back.
|
|
54
|
+
*
|
|
55
|
+
* Throws when the existing file is present but unparseable — nothing is written
|
|
56
|
+
* in that case, so a hand-edited settings file is never clobbered.
|
|
57
|
+
*/
|
|
58
|
+
export declare function installClaudeCodeHook(options: {
|
|
59
|
+
workspacePath: string;
|
|
60
|
+
projectDir: string;
|
|
61
|
+
slug: string;
|
|
62
|
+
serverUrl?: string;
|
|
63
|
+
}): Promise<ClaudeCodeHookInstallResult>;
|
|
64
|
+
/**
|
|
65
|
+
* Interactively offers the hook install during `arcs project init`.
|
|
66
|
+
*
|
|
67
|
+
* Mirrors `promptAndInstallCodegraph`: a note explaining the offer, a confirm
|
|
68
|
+
* defaulting to "no", and a manual-fallback hint when declined. Returns the
|
|
69
|
+
* install result only when a write actually happened; returns `null` on
|
|
70
|
+
* decline, cancel, or failure. Never throws — `arcs project init` succeeding
|
|
71
|
+
* matters more than this offer succeeding.
|
|
72
|
+
*/
|
|
73
|
+
export declare function promptAndInstallClaudeCodeHook(options: {
|
|
74
|
+
workspacePath: string;
|
|
75
|
+
projectDir: string;
|
|
76
|
+
slug: string;
|
|
77
|
+
serverUrl?: string;
|
|
78
|
+
}): Promise<ClaudeCodeHookInstallResult | null>;
|
|
79
|
+
export {};
|
|
80
|
+
//# sourceMappingURL=claude-code-hook-install.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code-hook-install.d.ts","sourceRoot":"","sources":["../../src/utils/claude-code-hook-install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,UAAU,gBAAgB;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,UAAU,gBAAgB;IACxB,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC3C,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,2BAA2B;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,+EAA+E;AAC/E,wBAAgB,uBAAuB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAChD,cAAc,CA2BhB;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CAAC,OAAO,EAAE;IACnD,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAgDvC;AAED;;;;;;;;GAQG;AACH,wBAAsB,8BAA8B,CAAC,OAAO,EAAE;IAC5D,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,2BAA2B,GAAG,IAAI,CAAC,CAyC9C"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Consent-gated writer for the Claude Code session-bridge hook.
|
|
3
|
+
*
|
|
4
|
+
* `arcs hooks install-claude-code` deliberately never edits agent configuration
|
|
5
|
+
* — it prints a snippet. This module is the opt-in counterpart: when the user
|
|
6
|
+
* explicitly confirms during `arcs project init`, it merges the same hook entry
|
|
7
|
+
* into the workspace's `.claude/settings.local.json` (local-only: the token is a
|
|
8
|
+
* secret and `settings.local.json` is the git-ignored variant).
|
|
9
|
+
*
|
|
10
|
+
* Two rules the merge must never break:
|
|
11
|
+
* 1. A malformed existing file ABORTS the write. Silently coalescing an
|
|
12
|
+
* unparseable settings file to `{}` would destroy a user's `permissions`
|
|
13
|
+
* block over a stray comma, so parse errors are surfaced, not swallowed.
|
|
14
|
+
* 2. Replacement is keyed on the absolute hook script path, not the project
|
|
15
|
+
* slug. A workspace can be reassigned between ARCS projects, so matching on
|
|
16
|
+
* the script path leaves exactly one current ARCS entry per event instead
|
|
17
|
+
* of accumulating stale ones. Entries belonging to other tools are kept
|
|
18
|
+
* untouched, in place.
|
|
19
|
+
*/
|
|
20
|
+
import { mkdir, readFile, writeFile } from "node:fs/promises";
|
|
21
|
+
import { dirname, join } from "node:path";
|
|
22
|
+
import * as p from "@clack/prompts";
|
|
23
|
+
import color from "picocolors";
|
|
24
|
+
import { HOOK_EVENTS, provisionHookCommand } from "../cli/commands/hooks.js";
|
|
25
|
+
/** The only file this module ever writes — never `~/.claude/settings.json`. */
|
|
26
|
+
export function claudeSettingsLocalPath(workspacePath) {
|
|
27
|
+
return join(workspacePath, ".claude", "settings.local.json");
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Returns a copy of `settings` with the ARCS hook entry registered under every
|
|
31
|
+
* hook event, replacing any prior entry that runs the same `hookScriptPath`.
|
|
32
|
+
* Pure — no I/O, so the merge rules are directly testable.
|
|
33
|
+
*/
|
|
34
|
+
export function mergeHookIntoSettings(settings, hook) {
|
|
35
|
+
const hooks = { ...(settings.hooks ?? {}) };
|
|
36
|
+
for (const event of HOOK_EVENTS) {
|
|
37
|
+
const existing = Array.isArray(hooks[event]) ? hooks[event] : [];
|
|
38
|
+
const preserved = [];
|
|
39
|
+
for (const entry of existing) {
|
|
40
|
+
if (!entry || typeof entry !== "object" || !Array.isArray(entry.hooks)) {
|
|
41
|
+
// Not a shape we understand — leave it exactly as found.
|
|
42
|
+
preserved.push(entry);
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
// Strip only OUR command, at the inner level: a matcher entry may mix an
|
|
46
|
+
// ARCS hook with another tool's, and that other tool must survive.
|
|
47
|
+
const kept = entry.hooks.filter((h) => !(typeof h?.command === "string" && h.command.includes(hook.hookScriptPath)));
|
|
48
|
+
if (kept.length === 0)
|
|
49
|
+
continue;
|
|
50
|
+
preserved.push({ ...entry, hooks: kept });
|
|
51
|
+
}
|
|
52
|
+
preserved.push({ hooks: [{ type: "command", command: hook.command }] });
|
|
53
|
+
hooks[event] = preserved;
|
|
54
|
+
}
|
|
55
|
+
return { ...settings, hooks };
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Reads the workspace's `.claude/settings.local.json` (if any), merges in a
|
|
59
|
+
* freshly provisioned hook, and writes it back.
|
|
60
|
+
*
|
|
61
|
+
* Throws when the existing file is present but unparseable — nothing is written
|
|
62
|
+
* in that case, so a hand-edited settings file is never clobbered.
|
|
63
|
+
*/
|
|
64
|
+
export async function installClaudeCodeHook(options) {
|
|
65
|
+
const settingsPath = claudeSettingsLocalPath(options.workspacePath);
|
|
66
|
+
let raw;
|
|
67
|
+
try {
|
|
68
|
+
raw = await readFile(settingsPath, "utf-8");
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// Absent file — start from an empty settings object.
|
|
72
|
+
}
|
|
73
|
+
let settings = {};
|
|
74
|
+
if (raw !== undefined && raw.trim().length > 0) {
|
|
75
|
+
let parsed;
|
|
76
|
+
try {
|
|
77
|
+
parsed = JSON.parse(raw);
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
throw new Error(`${settingsPath} exists but is not valid JSON — fix it manually or delete it, ` +
|
|
81
|
+
`then re-run \`arcs hooks install-claude-code ${options.slug}\`. Nothing was written.`);
|
|
82
|
+
}
|
|
83
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
84
|
+
throw new Error(`${settingsPath} is valid JSON but not an object — fix it manually or delete it, ` +
|
|
85
|
+
`then re-run \`arcs hooks install-claude-code ${options.slug}\`. Nothing was written.`);
|
|
86
|
+
}
|
|
87
|
+
settings = parsed;
|
|
88
|
+
}
|
|
89
|
+
const provisioned = await provisionHookCommand({
|
|
90
|
+
projectDir: options.projectDir,
|
|
91
|
+
slug: options.slug,
|
|
92
|
+
serverUrl: options.serverUrl,
|
|
93
|
+
});
|
|
94
|
+
const merged = mergeHookIntoSettings(settings, provisioned);
|
|
95
|
+
await mkdir(dirname(settingsPath), { recursive: true });
|
|
96
|
+
await writeFile(settingsPath, `${JSON.stringify(merged, null, 2)}\n`, "utf-8");
|
|
97
|
+
return {
|
|
98
|
+
settingsPath,
|
|
99
|
+
token: provisioned.token,
|
|
100
|
+
hookScriptPath: provisioned.hookScriptPath,
|
|
101
|
+
serverUrl: provisioned.serverUrl,
|
|
102
|
+
events: [...HOOK_EVENTS],
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Interactively offers the hook install during `arcs project init`.
|
|
107
|
+
*
|
|
108
|
+
* Mirrors `promptAndInstallCodegraph`: a note explaining the offer, a confirm
|
|
109
|
+
* defaulting to "no", and a manual-fallback hint when declined. Returns the
|
|
110
|
+
* install result only when a write actually happened; returns `null` on
|
|
111
|
+
* decline, cancel, or failure. Never throws — `arcs project init` succeeding
|
|
112
|
+
* matters more than this offer succeeding.
|
|
113
|
+
*/
|
|
114
|
+
export async function promptAndInstallClaudeCodeHook(options) {
|
|
115
|
+
const settingsPath = claudeSettingsLocalPath(options.workspacePath);
|
|
116
|
+
p.note([
|
|
117
|
+
"The session-bridge hook lets the ARCS web UI see your Claude Code",
|
|
118
|
+
"sessions and queue messages for them (delivered at the next prompt).",
|
|
119
|
+
"",
|
|
120
|
+
`Writes ${color.cyan(settingsPath)} only — never your global config.`,
|
|
121
|
+
].join("\n"), "Optional: Claude Code session bridge");
|
|
122
|
+
const shouldInstall = await p.confirm({
|
|
123
|
+
message: "Install the Claude Code session-bridge hook now?",
|
|
124
|
+
initialValue: false,
|
|
125
|
+
});
|
|
126
|
+
if (p.isCancel(shouldInstall) || !shouldInstall) {
|
|
127
|
+
p.log.info(color.dim(`Install later: arcs hooks install-claude-code ${options.slug}`));
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
try {
|
|
131
|
+
const result = await installClaudeCodeHook(options);
|
|
132
|
+
p.log.success([
|
|
133
|
+
`${color.green("✔")} Hook installed → ${color.cyan(result.settingsPath)}`,
|
|
134
|
+
color.dim("Start a NEW Claude Code session to pick it up — running sessions won't."),
|
|
135
|
+
].join("\n"));
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
p.log.warn([
|
|
140
|
+
`${color.yellow("⚠")} Could not install the hook: ${err instanceof Error ? err.message : String(err)}`,
|
|
141
|
+
color.dim(`Install manually later: arcs hooks install-claude-code ${options.slug}`),
|
|
142
|
+
].join("\n"));
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=claude-code-hook-install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code-hook-install.js","sourceRoot":"","sources":["../../src/utils/claude-code-hook-install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
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
|
+
/** A MarkdownSection payload the caller sent to the session. Preserved on the
|
|
16
|
+
* sidecar reference record verbatim so the web UI can render the section with
|
|
17
|
+
* click-through back to its source document. */
|
|
18
|
+
export interface ReferenceSection {
|
|
19
|
+
/** Heading depth of the referenced section (1-based). */
|
|
20
|
+
depth: number;
|
|
21
|
+
/** The section's rendered markdown, exactly as it was sent to the session. */
|
|
22
|
+
text: string;
|
|
23
|
+
/** Stable id of the section within its document. */
|
|
24
|
+
id: string;
|
|
25
|
+
/** Character offsets of the section within the full document text. */
|
|
26
|
+
startOffset: number;
|
|
27
|
+
endOffset: number;
|
|
28
|
+
}
|
|
29
|
+
/** Identity of the document a reference was quoted from. */
|
|
30
|
+
export interface ReferenceSource {
|
|
31
|
+
/** Which ARCS store the referenced document lives in. */
|
|
32
|
+
kind: "overview" | "knowledge" | "plan";
|
|
33
|
+
/** Human-readable name of the source document. */
|
|
34
|
+
label: string;
|
|
35
|
+
/** Optional doc identifier (e.g. knowledge entry id, plan id). */
|
|
36
|
+
doc?: string;
|
|
37
|
+
id?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface TranscriptTurn {
|
|
40
|
+
/**
|
|
41
|
+
* Absolute 0-based line index in the source transcript for mirrored turns.
|
|
42
|
+
* ARCS-authored turns (references and web-sent user/assistant turns) carry a
|
|
43
|
+
* negative id drawn from one shared monotonic sequence, so they live in a
|
|
44
|
+
* disjoint space and can never collide with transcript line indices or with
|
|
45
|
+
* each other (the panel keys TurnRow on id).
|
|
46
|
+
*/
|
|
47
|
+
id: number;
|
|
48
|
+
type: "user" | "assistant" | "reference";
|
|
49
|
+
text: string;
|
|
50
|
+
ts?: string;
|
|
51
|
+
tool?: {
|
|
52
|
+
name: string;
|
|
53
|
+
};
|
|
54
|
+
/** Reference turns only: the MarkdownSection payload the caller sent to the
|
|
55
|
+
* session, preserved for click-through rendering. */
|
|
56
|
+
section?: ReferenceSection;
|
|
57
|
+
/** Reference turns only: identity of the source document. */
|
|
58
|
+
source?: ReferenceSource;
|
|
59
|
+
}
|
|
60
|
+
export interface ReadTranscriptResult {
|
|
61
|
+
turns: TranscriptTurn[];
|
|
62
|
+
/** Number of record lines in the transcript (trailing newline excluded). */
|
|
63
|
+
totalLines: number;
|
|
64
|
+
}
|
|
65
|
+
export interface ReferenceTurnInput {
|
|
66
|
+
text?: string;
|
|
67
|
+
ts?: string;
|
|
68
|
+
tool?: {
|
|
69
|
+
name: string;
|
|
70
|
+
};
|
|
71
|
+
section?: ReferenceSection;
|
|
72
|
+
source?: ReferenceSource;
|
|
73
|
+
}
|
|
74
|
+
/** An ARCS-authored user/assistant turn sent to the session from the web UI. */
|
|
75
|
+
export interface SessionTurnInput {
|
|
76
|
+
type: "user" | "assistant";
|
|
77
|
+
text: string;
|
|
78
|
+
ts?: string;
|
|
79
|
+
}
|
|
80
|
+
/** Single-read cap for transcript files; anything larger mirrors as a no-op. */
|
|
81
|
+
export declare const TRANSCRIPT_MAX_BYTES: number;
|
|
82
|
+
/**
|
|
83
|
+
* Sidecar path. The filename keys on the normalized id so it matches the
|
|
84
|
+
* session index record exactly (normalizeIdentifier round-trips UUIDs
|
|
85
|
+
* unchanged, so Claude Code session uuids survive verbatim).
|
|
86
|
+
*/
|
|
87
|
+
export declare function sessionTranscriptPath(projectDir: string, normalizedId: string): string;
|
|
88
|
+
/**
|
|
89
|
+
* Reads a Claude Code JSONL transcript and parses only lines >= fromLine.
|
|
90
|
+
* Returns the kept turns (absolute line indices) plus the transcript's total
|
|
91
|
+
* record-line count. Never throws — unreadable files yield empty results.
|
|
92
|
+
*/
|
|
93
|
+
export declare function readTranscriptTurns(filePath: string, fromLine: number): Promise<ReadTranscriptResult>;
|
|
94
|
+
/**
|
|
95
|
+
* Mirrors the transcript into the per-session sidecar (append-only, offset
|
|
96
|
+
* idempotent). When the transcript has fewer lines than the mirrored offset —
|
|
97
|
+
* Claude Code compacts/rewrites its JSONL — the sidecar is rebuilt from line 0
|
|
98
|
+
* with existing ARCS-authored turns (id < 0) preserved.
|
|
99
|
+
*
|
|
100
|
+
* Never throws: missing/unreadable/oversized/malformed inputs are silent
|
|
101
|
+
* no-ops and the sidecar stays untouched. Never writes sessions/index.json.
|
|
102
|
+
*/
|
|
103
|
+
export declare function mirrorSessionTranscript(projectDir: string, normalizedId: string, transcriptPath: string): Promise<void>;
|
|
104
|
+
/**
|
|
105
|
+
* Appends an ARCS-authored reference turn (document section sent to the
|
|
106
|
+
* session) to the sidecar under the same sessions/.store lock the session
|
|
107
|
+
* store uses, so appends serialize with index mutations. A failed append is a
|
|
108
|
+
* swallowed no-op — the caller has already delivered the message. The id is
|
|
109
|
+
* minted from the shared ARCS-authored negative space so it can never collide
|
|
110
|
+
* with a web-sent user/assistant turn.
|
|
111
|
+
*/
|
|
112
|
+
export declare function appendReferenceTurn(projectDir: string, normalizedId: string, turn: ReferenceTurnInput): Promise<void>;
|
|
113
|
+
/**
|
|
114
|
+
* Appends an ARCS-authored user/assistant turn (sent to the session from the
|
|
115
|
+
* web UI) to the sidecar under the same sessions/.store lock the session store
|
|
116
|
+
* and the other sidecar writers use, so appends serialize with index mutations
|
|
117
|
+
* and reference appends. A failed append is a swallowed no-op. The id is
|
|
118
|
+
* minted from the shared ARCS-authored negative space so it can never collide
|
|
119
|
+
* with a reference turn — both render through <TurnRow key={t.id}>.
|
|
120
|
+
*/
|
|
121
|
+
export declare function appendSessionTurn(projectDir: string, normalizedId: string, turn: SessionTurnInput): Promise<void>;
|
|
122
|
+
/**
|
|
123
|
+
* Reads the sidecar for the GET route, skipping malformed lines. Returns an
|
|
124
|
+
* empty array when the sidecar is missing. Never throws.
|
|
125
|
+
*/
|
|
126
|
+
export declare function readSessionTurns(projectDir: string, normalizedId: string): Promise<TranscriptTurn[]>;
|
|
127
|
+
//# sourceMappingURL=claude-transcript.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-transcript.d.ts","sourceRoot":"","sources":["../../src/utils/claude-transcript.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH;;iDAEiD;AACjD,MAAM,WAAW,gBAAgB;IAC/B,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,EAAE,EAAE,MAAM,CAAC;IACX,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,4DAA4D;AAC5D,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,IAAI,EAAE,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;IACxC,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC7B;;;;;;OAMG;IACH,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxB;0DACsD;IACtD,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,6DAA6D;IAC7D,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,4EAA4E;IAC5E,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxB,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAED,gFAAgF;AAChF,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,gFAAgF;AAChF,eAAO,MAAM,oBAAoB,QAAmB,CAAC;AAMrD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAEtF;AAyGD;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,oBAAoB,CAAC,CAiB/B;AAyFD;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAoCf;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,IAAI,CAAC,CAoBf;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,gBAAgB,GACrB,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,cAAc,EAAE,CAAC,CAM3B"}
|