@rryando/arcs 5.1.0 → 5.2.1
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 +30 -17
- package/dist/cli/arcs-orchestrate.d.ts +1 -1
- package/dist/cli/arcs-orchestrate.d.ts.map +1 -1
- package/dist/cli/commands/bundle.js +39 -0
- package/dist/cli/commands/bundle.js.map +1 -1
- package/dist/cli/commands/proposal-doc.js +76 -58
- package/dist/cli/commands/proposal-doc.js.map +1 -1
- package/dist/cli/commands/web.js +2 -2
- package/dist/cli/commands/web.js.map +1 -1
- package/dist/cli/config.d.ts +37 -9
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +64 -5
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/instructions.d.ts +3 -3
- package/dist/cli/instructions.d.ts.map +1 -1
- package/dist/cli/instructions.js +10 -2
- package/dist/cli/instructions.js.map +1 -1
- package/dist/cli/orchestrator-shared-blocks.d.ts +1 -1
- package/dist/cli/orchestrator-shared-blocks.d.ts.map +1 -1
- package/dist/cli/orchestrator-shared-blocks.js +1 -1
- package/dist/cli/setup.d.ts.map +1 -1
- package/dist/cli/setup.js +281 -47
- package/dist/cli/setup.js.map +1 -1
- package/dist/utils/json-schemas.d.ts +32 -9
- package/dist/utils/json-schemas.d.ts.map +1 -1
- package/dist/utils/json-schemas.js +8 -1
- package/dist/utils/json-schemas.js.map +1 -1
- package/dist/utils/project-resolver.d.ts.map +1 -1
- package/dist/utils/project-resolver.js +9 -2
- package/dist/utils/project-resolver.js.map +1 -1
- package/dist/utils/run-transcript.d.ts +138 -0
- package/dist/utils/run-transcript.d.ts.map +1 -0
- package/dist/utils/run-transcript.js +146 -0
- package/dist/utils/run-transcript.js.map +1 -0
- package/dist/utils/storage-utils.d.ts +1 -1
- package/dist/utils/storage-utils.d.ts.map +1 -1
- package/dist/utils/storage-utils.js +1 -1
- package/dist/utils/storage-utils.js.map +1 -1
- package/dist/web-client/assets/{GraphCanvas-BYZE4sO9.js → GraphCanvas-BgWF1rB_.js} +1 -1
- package/dist/web-client/assets/{MarkdownEditor-BKx6M1cw.js → MarkdownEditor-5buYPQ1d.js} +1 -1
- package/dist/web-client/assets/{abnfDiagram-VRR7QNED-D4kt0l2y.js → abnfDiagram-VRR7QNED-AjQ08-zY.js} +1 -1
- package/dist/web-client/assets/architecture-TIHT7OUA-a3lTAuFS.js +1 -0
- package/dist/web-client/assets/{architectureDiagram-ZJ3FMSHR-bu29SJFS.js → architectureDiagram-ZJ3FMSHR-CtW2pYEp.js} +1 -1
- package/dist/web-client/assets/{blockDiagram-677ZJIJ3-hsu7mXKw.js → blockDiagram-677ZJIJ3-DE6HRcpA.js} +1 -1
- package/dist/web-client/assets/{c4Diagram-LMCZKHZV-DMllRlT_.js → c4Diagram-LMCZKHZV-Rn6iQdUl.js} +1 -1
- package/dist/web-client/assets/channel-Rxk7gzWl.js +1 -0
- package/dist/web-client/assets/{chunk-32BRIVSS-BSzwj5eM.js → chunk-32BRIVSS-C4-ay_Qd.js} +1 -1
- package/dist/web-client/assets/{chunk-52WLFC77-RDdZn6yY.js → chunk-52WLFC77-Bib0DU0H.js} +1 -1
- package/dist/web-client/assets/{chunk-C7G6YPKG-DQr--txT.js → chunk-C7G6YPKG-BLphnESE.js} +1 -1
- package/dist/web-client/assets/{chunk-EX3LRPZG-Bb8nc4z4.js → chunk-EX3LRPZG-CzvkrPNM.js} +1 -1
- package/dist/web-client/assets/{chunk-FWX5IMBZ-QvBpOcOg.js → chunk-FWX5IMBZ-BFTR_OLz.js} +2 -2
- package/dist/web-client/assets/{chunk-HOUHSVGY-B0mX_yjc.js → chunk-HOUHSVGY-CZS3ExUR.js} +1 -1
- package/dist/web-client/assets/{chunk-ICXQ74PX-BmJSQqOH.js → chunk-ICXQ74PX-iWFpNZgv.js} +1 -1
- package/dist/web-client/assets/{chunk-MOJQB5TN-BrEI4GGn.js → chunk-MOJQB5TN-opEQCwVq.js} +1 -1
- package/dist/web-client/assets/{chunk-OGEWGWER-CrqDPOWP.js → chunk-OGEWGWER-NCfmjyhi.js} +1 -1
- package/dist/web-client/assets/{chunk-PUDLZKDR-DfPKldpG.js → chunk-PUDLZKDR-D3_A--Z2.js} +1 -1
- package/dist/web-client/assets/{chunk-Q4XR5HBZ-ekATI9aV.js → chunk-Q4XR5HBZ-D6s-qZLi.js} +1 -1
- package/dist/web-client/assets/{chunk-V7JOEXUC-C5APsP1t.js → chunk-V7JOEXUC-DTqLR-bZ.js} +1 -1
- package/dist/web-client/assets/{chunk-VAUOI2AC-BhfSWJZI.js → chunk-VAUOI2AC-Gsd0Itap.js} +1 -1
- package/dist/web-client/assets/{chunk-VR4S4FIN-BGa-44J7.js → chunk-VR4S4FIN-Cdo_MeDQ.js} +1 -1
- package/dist/web-client/assets/{chunk-WYO6CB5R-By1K0guW.js → chunk-WYO6CB5R-n7FhYrli.js} +1 -1
- package/dist/web-client/assets/{chunk-ZGVPDNZ5-Vnzpc76F.js → chunk-ZGVPDNZ5-DU1Jcue0.js} +1 -1
- package/dist/web-client/assets/classDiagram-OUVF2IWQ-BG5uYDvC.js +1 -0
- package/dist/web-client/assets/classDiagram-v2-EOCWNBFH-BG5uYDvC.js +1 -0
- package/dist/web-client/assets/{cynefin-VYW2F7L2-C6MOMOOz.js → cynefin-VYW2F7L2-D-gD9LCO.js} +1 -1
- package/dist/web-client/assets/{cynefinDiagram-TSTJHNR4-Cseyu79b.js → cynefinDiagram-TSTJHNR4-BFGkcrNl.js} +1 -1
- package/dist/web-client/assets/{dagre-VKFMJZFB-CQJlIuNh.js → dagre-VKFMJZFB-BUaC6fks.js} +1 -1
- package/dist/web-client/assets/{diagram-FQU43EPY-DpqDxhq4.js → diagram-FQU43EPY-Ckgu02XC.js} +1 -1
- package/dist/web-client/assets/{diagram-G47NLZAW-C11fYYaF.js → diagram-G47NLZAW-BickHhmE.js} +1 -1
- package/dist/web-client/assets/{diagram-NH7WQ7WH-BiG-uRAF.js → diagram-NH7WQ7WH-CoqgJpcU.js} +1 -1
- package/dist/web-client/assets/{diagram-OA4YK3LP-CIXWWjq-.js → diagram-OA4YK3LP-CTSZWqCe.js} +1 -1
- package/dist/web-client/assets/{diagram-WEI45ONY-C3OgIWu9.js → diagram-WEI45ONY-D7xd1naU.js} +1 -1
- package/dist/web-client/assets/{ebnfDiagram-CCIWWBDH-BHF_NA3_.js → ebnfDiagram-CCIWWBDH-FESKYpKQ.js} +1 -1
- package/dist/web-client/assets/{erDiagram-Q63AITRT-CUOJCrLy.js → erDiagram-Q63AITRT-C-879ftU.js} +1 -1
- package/dist/web-client/assets/eventmodeling-45OFAUF4-C3kRZCei.js +1 -0
- package/dist/web-client/assets/flowDiagram-23GEKE2U-QKWFycdH.js +1 -0
- package/dist/web-client/assets/{ganttDiagram-NO4QXBWP-D_4BMJ-g.js → ganttDiagram-NO4QXBWP-mIX5nPpv.js} +1 -1
- package/dist/web-client/assets/{gitGraph-TEB2WS4Q-CBuaZBId.js → gitGraph-TEB2WS4Q-DlEDJ1IK.js} +1 -1
- package/dist/web-client/assets/{gitGraphDiagram-IHSO6WYX-BbztsGuO.js → gitGraphDiagram-IHSO6WYX-D2fXD4AO.js} +1 -1
- package/dist/web-client/assets/index-BsYR-C8u.js +61 -0
- package/dist/web-client/assets/index-Cc5DCTOr.css +2 -0
- package/dist/web-client/assets/{info-DKCQHKI2-Bzi0Xjro.js → info-DKCQHKI2-jinbCROt.js} +1 -1
- package/dist/web-client/assets/{infoDiagram-FWYZ7A6U-BkeEKcr0.js → infoDiagram-FWYZ7A6U-CM-A4TL8.js} +1 -1
- package/dist/web-client/assets/{ishikawaDiagram-FXEZZL3T-CVusWu0p.js → ishikawaDiagram-FXEZZL3T-BdFpHwp4.js} +1 -1
- package/dist/web-client/assets/{journeyDiagram-5HDEW3XC-BUxu71zw.js → journeyDiagram-5HDEW3XC-BwDWz25z.js} +1 -1
- package/dist/web-client/assets/{kanban-definition-HUTT4EX6-BE8Hv4Kd.js → kanban-definition-HUTT4EX6-_2QXjSvx.js} +1 -1
- package/dist/web-client/assets/{line-CiAoINJS.js → line-HCziev87.js} +1 -1
- package/dist/web-client/assets/{mermaid-parser.core-BW47khiS.js → mermaid-parser.core-C4139mkz.js} +3 -3
- package/dist/web-client/assets/{mermaid.core-DP--Jl9R.js → mermaid.core-ocHwkZiF.js} +3 -3
- package/dist/web-client/assets/{mindmap-definition-LN4V7U3C-CvWJUqdq.js → mindmap-definition-LN4V7U3C-DHyCmflp.js} +1 -1
- package/dist/web-client/assets/{packet-7NZHBO7P-XtzX9SaQ.js → packet-7NZHBO7P-Bk0w_irl.js} +1 -1
- package/dist/web-client/assets/{pegDiagram-2B236MQR-XNo0K1ct.js → pegDiagram-2B236MQR-D_GrmL93.js} +1 -1
- package/dist/web-client/assets/{pie-RZYD4A2V-B1eUd9yt.js → pie-RZYD4A2V-B6VIAbyj.js} +1 -1
- package/dist/web-client/assets/{pieDiagram-ENE6RG2P-CRSb5z-4.js → pieDiagram-ENE6RG2P-CiR2Y8y2.js} +1 -1
- package/dist/web-client/assets/{quadrantDiagram-ABIIQ3AL-DziMaQxE.js → quadrantDiagram-ABIIQ3AL-CLlicKmV.js} +1 -1
- package/dist/web-client/assets/{radar-I7S5WNFK-BpRqZH2g.js → radar-I7S5WNFK-B53XVRSZ.js} +1 -1
- package/dist/web-client/assets/{railroad-3IZDKUUU-FDIHW04k.js → railroad-3IZDKUUU-Dn8TN2M-.js} +1 -1
- package/dist/web-client/assets/railroad-abnf-AHOZXSZD-UrOKy6yx.js +1 -0
- package/dist/web-client/assets/railroad-ebnf-EBAXGLYW-Bx73sfMZ.js +1 -0
- package/dist/web-client/assets/railroad-peg-LSFZ7HO6-C4QEje-y.js +1 -0
- package/dist/web-client/assets/{railroadDiagram-RFXS5EU6-Cs7EVBaz.js → railroadDiagram-RFXS5EU6-C6kZwOio.js} +1 -1
- package/dist/web-client/assets/{requirementDiagram-TGXJPOKE-B9_Lj1ga.js → requirementDiagram-TGXJPOKE-D2b1MeP8.js} +1 -1
- package/dist/web-client/assets/{sankeyDiagram-HTMAVEWB-DuTJTiy0.js → sankeyDiagram-HTMAVEWB-pS_Ufq1E.js} +1 -1
- package/dist/web-client/assets/{sequenceDiagram-DBY2YBRQ-vOCU5UoE.js → sequenceDiagram-DBY2YBRQ-BrsKXNzu.js} +1 -1
- package/dist/web-client/assets/{stateDiagram-2N3HPSRC-rxAnfzWn.js → stateDiagram-2N3HPSRC-BuQKu3i0.js} +1 -1
- package/dist/web-client/assets/stateDiagram-v2-6OUMAXLB-BhqgaxDu.js +1 -0
- package/dist/web-client/assets/{swimlanes-5IMT3BWC-gdVZUnPe.js → swimlanes-5IMT3BWC-CzoImfTA.js} +1 -1
- package/dist/web-client/assets/swimlanesDiagram-G3AALYLV-CHOEI9hI.js +8 -0
- package/dist/web-client/assets/{timeline-definition-FHXFAJF6-Do68JyGy.js → timeline-definition-FHXFAJF6-DvezW7Fr.js} +1 -1
- package/dist/web-client/assets/{treeView-QDETBFTQ-CdZkmg80.js → treeView-QDETBFTQ-xu58R4kS.js} +1 -1
- package/dist/web-client/assets/{treemap-6X3UGDF4-ub54fmpW.js → treemap-6X3UGDF4-DMYBAOW1.js} +1 -1
- package/dist/web-client/assets/{vennDiagram-L72KCM5P-D-r8NBEp.js → vennDiagram-L72KCM5P-l1CbC7Ig.js} +1 -1
- package/dist/web-client/assets/{wardley-OPB4EBWU-CTleH1-J.js → wardley-OPB4EBWU-G3zmnnM0.js} +1 -1
- package/dist/web-client/assets/{wardleyDiagram-EHGQE667-BU8Kw39F.js → wardleyDiagram-EHGQE667-Dl2I79Vx.js} +1 -1
- package/dist/web-client/assets/{xychartDiagram-FW5EYKEG-CfNnag6i.js → xychartDiagram-FW5EYKEG-BWfge21N.js} +1 -1
- package/dist/web-client/index.html +2 -2
- package/dist/web-server/app.d.ts.map +1 -1
- package/dist/web-server/app.js +13 -7
- package/dist/web-server/app.js.map +1 -1
- package/dist/web-server/ask-prompt.d.ts +70 -0
- package/dist/web-server/ask-prompt.d.ts.map +1 -0
- package/dist/web-server/ask-prompt.js +238 -0
- package/dist/web-server/ask-prompt.js.map +1 -0
- package/dist/web-server/index.d.ts.map +1 -1
- package/dist/web-server/index.js +56 -3
- package/dist/web-server/index.js.map +1 -1
- package/dist/web-server/respond.d.ts.map +1 -1
- package/dist/web-server/respond.js +6 -1
- package/dist/web-server/respond.js.map +1 -1
- package/dist/web-server/routes/ask.d.ts +29 -0
- package/dist/web-server/routes/ask.d.ts.map +1 -0
- package/dist/web-server/routes/ask.js +698 -0
- package/dist/web-server/routes/ask.js.map +1 -0
- package/dist/web-server/routes/changes.d.ts +35 -0
- package/dist/web-server/routes/changes.d.ts.map +1 -0
- package/dist/web-server/routes/changes.js +93 -0
- package/dist/web-server/routes/changes.js.map +1 -0
- package/dist/web-server/routes/projects.d.ts.map +1 -1
- package/dist/web-server/routes/projects.js +10 -2
- package/dist/web-server/routes/projects.js.map +1 -1
- package/dist/web-server/routes/proposal-docs.d.ts +18 -0
- package/dist/web-server/routes/proposal-docs.d.ts.map +1 -0
- package/dist/web-server/routes/proposal-docs.js +208 -0
- package/dist/web-server/routes/proposal-docs.js.map +1 -0
- package/dist/web-server/routes/runners.d.ts +15 -0
- package/dist/web-server/routes/runners.d.ts.map +1 -0
- package/dist/web-server/routes/runners.js +66 -0
- package/dist/web-server/routes/runners.js.map +1 -0
- package/dist/web-server/routes/workspace.d.ts +2 -2
- package/dist/web-server/routes/workspace.js +4 -4
- package/dist/web-server/run-diff.d.ts +188 -0
- package/dist/web-server/run-diff.d.ts.map +1 -0
- package/dist/web-server/run-diff.js +739 -0
- package/dist/web-server/run-diff.js.map +1 -0
- package/dist/web-server/run-driver.d.ts +102 -2
- package/dist/web-server/run-driver.d.ts.map +1 -1
- package/dist/web-server/run-driver.js +495 -1
- package/dist/web-server/run-driver.js.map +1 -1
- package/dist/web-server/run-event-log.d.ts +13 -6
- package/dist/web-server/run-event-log.d.ts.map +1 -1
- package/dist/web-server/run-event-log.js +70 -25
- package/dist/web-server/run-event-log.js.map +1 -1
- package/dist/web-server/run-store.d.ts +201 -0
- package/dist/web-server/run-store.d.ts.map +1 -0
- package/dist/web-server/run-store.js +304 -0
- package/dist/web-server/run-store.js.map +1 -0
- package/dist/web-server/watcher.d.ts.map +1 -1
- package/dist/web-server/watcher.js +4 -0
- package/dist/web-server/watcher.js.map +1 -1
- package/opencode/arcs/manifest.json +8 -8
- package/opencode/arcs/prompts/arcs-orchestrate-caveman.txt +1 -1
- package/opencode/arcs/prompts/arcs-orchestrate.txt +1 -1
- package/opencode/arcs/skills/writing-proposals/SKILL.md +6 -3
- package/package.json +1 -1
- package/scripts/deploy-claudecode-bundle.mjs +2 -2
- package/scripts/deploy-opencode-bundle.mjs +1 -1
- package/scripts/deploy-pi-bundle.mjs +468 -0
- package/scripts/lint-bundle.mjs +1 -1
- package/dist/shared/session-vocabulary.d.ts +0 -88
- package/dist/shared/session-vocabulary.d.ts.map +0 -1
- package/dist/shared/session-vocabulary.js +0 -114
- package/dist/shared/session-vocabulary.js.map +0 -1
- package/dist/utils/claude-transcript.d.ts +0 -206
- package/dist/utils/claude-transcript.d.ts.map +0 -1
- package/dist/utils/claude-transcript.js +0 -384
- package/dist/utils/claude-transcript.js.map +0 -1
- package/dist/utils/session-store.d.ts +0 -313
- package/dist/utils/session-store.d.ts.map +0 -1
- package/dist/utils/session-store.js +0 -513
- package/dist/utils/session-store.js.map +0 -1
- package/dist/web-client/assets/architecture-TIHT7OUA-CIdGE6VO.js +0 -1
- package/dist/web-client/assets/channel-CBg-s-ZD.js +0 -1
- package/dist/web-client/assets/classDiagram-OUVF2IWQ-ciwDjhUR.js +0 -1
- package/dist/web-client/assets/classDiagram-v2-EOCWNBFH-ciwDjhUR.js +0 -1
- package/dist/web-client/assets/eventmodeling-45OFAUF4-DxfboL1J.js +0 -1
- package/dist/web-client/assets/flowDiagram-23GEKE2U-C3NzpTtI.js +0 -1
- package/dist/web-client/assets/index-B1KVIr80.css +0 -2
- package/dist/web-client/assets/index-BWd2fBNL.js +0 -60
- package/dist/web-client/assets/railroad-abnf-AHOZXSZD-BKj6JAhH.js +0 -1
- package/dist/web-client/assets/railroad-ebnf-EBAXGLYW-ChDM1OBv.js +0 -1
- package/dist/web-client/assets/railroad-peg-LSFZ7HO6-DvwA2e0i.js +0 -1
- package/dist/web-client/assets/stateDiagram-v2-6OUMAXLB-B3EvQPEe.js +0 -1
- package/dist/web-client/assets/swimlanesDiagram-G3AALYLV-WcOXuCPg.js +0 -8
- package/dist/web-server/permission-policy.d.ts +0 -46
- package/dist/web-server/permission-policy.d.ts.map +0 -1
- package/dist/web-server/permission-policy.js +0 -96
- package/dist/web-server/permission-policy.js.map +0 -1
- package/dist/web-server/prompt-assembly.d.ts +0 -454
- package/dist/web-server/prompt-assembly.d.ts.map +0 -1
- package/dist/web-server/prompt-assembly.js +0 -1121
- package/dist/web-server/prompt-assembly.js.map +0 -1
- package/dist/web-server/routes/sessions.d.ts +0 -19
- package/dist/web-server/routes/sessions.d.ts.map +0 -1
- package/dist/web-server/routes/sessions.js +0 -1296
- package/dist/web-server/routes/sessions.js.map +0 -1
- package/dist/web-server/session-reconciler.d.ts +0 -162
- package/dist/web-server/session-reconciler.d.ts.map +0 -1
- package/dist/web-server/session-reconciler.js +0 -363
- package/dist/web-server/session-reconciler.js.map +0 -1
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-run claims — the durable spine of the stateless Ask-AI turn surface.
|
|
3
|
+
*
|
|
4
|
+
* Replaces the sessions-entity run claims (session-store's `currentRunId` +
|
|
5
|
+
* `metadata.run`) with a store keyed by RUN, not by session: per-project
|
|
6
|
+
* `runs/index.json` records every run a project spawned, and a record with no
|
|
7
|
+
* `outcome` IS the live claim. There is no thread record anywhere — a run is
|
|
8
|
+
* the only unit of persistence, and everything a client needs to continue a
|
|
9
|
+
* conversation (the end frame's `runtimeSessionId`, harvested by the fold)
|
|
10
|
+
* reaches it out of band.
|
|
11
|
+
*
|
|
12
|
+
* Concurrency: ONE live run per project. `beginRun` refuses (DagError
|
|
13
|
+
* `RUN_IN_PROGRESS`, mapped to HTTP 409 by respond.ts) while an unsettled
|
|
14
|
+
* claim holds the index — the same single overlap signal the sessions route
|
|
15
|
+
* used, renamed.
|
|
16
|
+
*
|
|
17
|
+
* Liveness survives a restart the same way it always did: the claim persists
|
|
18
|
+
* the child's pid, and `settleOrphanedRuns` (the startup sweep) probes it.
|
|
19
|
+
* Deliberately narrowed from the old reconciler: a dead pid alone no longer
|
|
20
|
+
* settles — the run's own deadline must also have passed, so a claim written
|
|
21
|
+
* by a previous server process whose child outlived the restart is left alone,
|
|
22
|
+
* and a claim whose child died mid-run settles `interrupted` exactly once.
|
|
23
|
+
*/
|
|
24
|
+
import { join, resolve } from "node:path";
|
|
25
|
+
import { readRootMeta } from "../utils/dag.js";
|
|
26
|
+
import { DagError } from "../utils/errors.js";
|
|
27
|
+
import { withLock } from "../utils/file-lock.js";
|
|
28
|
+
import { readJsonSafe } from "../utils/json.js";
|
|
29
|
+
import { getDataDir } from "../utils/paths.js";
|
|
30
|
+
import { ensureDir, writeJson } from "../utils/storage-utils.js";
|
|
31
|
+
import { pruneRunEventLogs } from "./run-event-log.js";
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// Index IO
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
/** Index path — the pattern session-store used for `sessions/index.json`. */
|
|
36
|
+
export function runsIndexPath(projectDir) {
|
|
37
|
+
return join(projectDir, "runs", "index.json");
|
|
38
|
+
}
|
|
39
|
+
function runStoreLockPath(projectDir) {
|
|
40
|
+
return join(projectDir, "runs", ".store");
|
|
41
|
+
}
|
|
42
|
+
/** A decoded record that is usable as a run — anything else is dropped on
|
|
43
|
+
* read, exactly as session-store dropped records with unknown runtime types. */
|
|
44
|
+
function isRunRecord(value) {
|
|
45
|
+
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
46
|
+
return false;
|
|
47
|
+
const record = value;
|
|
48
|
+
if (typeof record.runId !== "string" || record.runId === "")
|
|
49
|
+
return false;
|
|
50
|
+
const startedAt = record.startedAt;
|
|
51
|
+
if (typeof startedAt !== "number" || !Number.isFinite(startedAt))
|
|
52
|
+
return false;
|
|
53
|
+
const runtimeType = record.runtimeType;
|
|
54
|
+
if (typeof runtimeType !== "string" || runtimeType === "")
|
|
55
|
+
return false;
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
async function readRunsIndex(projectDir) {
|
|
59
|
+
const index = await readJsonSafe(runsIndexPath(projectDir));
|
|
60
|
+
if (!index || !Array.isArray(index.runs))
|
|
61
|
+
return [];
|
|
62
|
+
return index.runs.filter(isRunRecord);
|
|
63
|
+
}
|
|
64
|
+
async function writeRunsIndex(projectDir, runs) {
|
|
65
|
+
await ensureDir(join(projectDir, "runs"));
|
|
66
|
+
await writeJson(runsIndexPath(projectDir), { runs });
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Claims the project's one live-run slot for `runId`.
|
|
70
|
+
*
|
|
71
|
+
* Refuses with `RUN_IN_PROGRESS` (409 on the wire) while ANY unsettled claim
|
|
72
|
+
* holds the index — the atomic single-live-run gate, checked under the same
|
|
73
|
+
* lock the settle releases it under, so two overlapping POSTs cannot both win.
|
|
74
|
+
* The claim lands BEFORE the child exists: from here on, a server that dies
|
|
75
|
+
* mid-run leaves a claim behind rather than an invisible orphan, and the
|
|
76
|
+
* startup sweep is what settles it.
|
|
77
|
+
*/
|
|
78
|
+
export async function beginRun(projectDir, input) {
|
|
79
|
+
await ensureDir(join(projectDir, "runs"));
|
|
80
|
+
return withLock(runStoreLockPath(projectDir), async () => {
|
|
81
|
+
const runs = await readRunsIndex(projectDir);
|
|
82
|
+
const live = runs.find((run) => run.outcome === undefined);
|
|
83
|
+
if (live !== undefined) {
|
|
84
|
+
throw new DagError("RUN_IN_PROGRESS", `a run for this project is already in progress (run ${live.runId})`);
|
|
85
|
+
}
|
|
86
|
+
const pid = typeof input.pid === "number" && Number.isInteger(input.pid) && input.pid > 0
|
|
87
|
+
? input.pid
|
|
88
|
+
: undefined;
|
|
89
|
+
const claim = {
|
|
90
|
+
runId: input.runId,
|
|
91
|
+
startedAt: Date.now(),
|
|
92
|
+
deadlineAt: input.deadlineAt,
|
|
93
|
+
runtimeType: input.runtimeType,
|
|
94
|
+
runner: input.runner,
|
|
95
|
+
logSegment: input.logSegment,
|
|
96
|
+
...(pid !== undefined && { pid }),
|
|
97
|
+
...(input.continueSessionId !== undefined &&
|
|
98
|
+
input.continueSessionId !== "" && {
|
|
99
|
+
continueSessionId: input.continueSessionId,
|
|
100
|
+
}),
|
|
101
|
+
};
|
|
102
|
+
runs.push(claim);
|
|
103
|
+
await writeRunsIndex(projectDir, runs);
|
|
104
|
+
return claim;
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
/** Records the child's pid on the claim AFTER the spawn produced one. No-op
|
|
108
|
+
* when the claim is already gone (the run settled in the gap) — a pid write
|
|
109
|
+
* must never resurrect a settled run. */
|
|
110
|
+
export async function updateRunPid(projectDir, input) {
|
|
111
|
+
await ensureDir(join(projectDir, "runs"));
|
|
112
|
+
await withLock(runStoreLockPath(projectDir), async () => {
|
|
113
|
+
const runs = await readRunsIndex(projectDir);
|
|
114
|
+
const claim = runs.find((run) => run.runId === input.runId);
|
|
115
|
+
if (claim === undefined || claim.outcome !== undefined)
|
|
116
|
+
return;
|
|
117
|
+
claim.pid = input.pid;
|
|
118
|
+
await writeRunsIndex(projectDir, runs);
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Stamps the outcome onto the run's claim in ONE lock acquisition — the same
|
|
123
|
+
* write that releases the claim, so "claim gone" and "outcome readable" can
|
|
124
|
+
* never disagree (the stream's end frame depends on that).
|
|
125
|
+
*
|
|
126
|
+
* Keyed on the run id: a settle whose run has already settled (a cancel that
|
|
127
|
+
* won the race, or a newer claim) is a byte-identical no-op.
|
|
128
|
+
*/
|
|
129
|
+
export async function settleRun(projectDir, input) {
|
|
130
|
+
await ensureDir(join(projectDir, "runs"));
|
|
131
|
+
return withLock(runStoreLockPath(projectDir), async () => {
|
|
132
|
+
const runs = await readRunsIndex(projectDir);
|
|
133
|
+
const claim = runs.find((run) => run.runId === input.runId);
|
|
134
|
+
if (claim === undefined || claim.outcome !== undefined)
|
|
135
|
+
return claim;
|
|
136
|
+
claim.outcome = input.outcome;
|
|
137
|
+
claim.endedAt = input.endedAt ?? Date.now();
|
|
138
|
+
if (input.error !== undefined)
|
|
139
|
+
claim.error = input.error;
|
|
140
|
+
if (input.replyChars !== undefined)
|
|
141
|
+
claim.replyChars = input.replyChars;
|
|
142
|
+
if (input.runtimeSessionId !== undefined)
|
|
143
|
+
claim.runtimeSessionId = input.runtimeSessionId;
|
|
144
|
+
if (input.errorCode !== undefined)
|
|
145
|
+
claim.errorCode = input.errorCode;
|
|
146
|
+
// Only ever written `true` (the runner omits the flag otherwise), so its
|
|
147
|
+
// absence on a settled record means the log is whole.
|
|
148
|
+
if (input.eventLogTruncated === true)
|
|
149
|
+
claim.eventLogTruncated = true;
|
|
150
|
+
await writeRunsIndex(projectDir, runs);
|
|
151
|
+
return claim;
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
/** One run record, or `undefined` when the index does not list the run id. */
|
|
155
|
+
export async function getRun(projectDir, runId) {
|
|
156
|
+
const runs = await readRunsIndex(projectDir);
|
|
157
|
+
return runs.find((run) => run.runId === runId);
|
|
158
|
+
}
|
|
159
|
+
// ---------------------------------------------------------------------------
|
|
160
|
+
// Revert state
|
|
161
|
+
// ---------------------------------------------------------------------------
|
|
162
|
+
/**
|
|
163
|
+
* Stamps the run's workspace changes as reverted (POST /revert), once.
|
|
164
|
+
*
|
|
165
|
+
* Refuses with `RUN_ALREADY_REVERTED` (409 on the wire) when the run has
|
|
166
|
+
* already been reverted, `RUN_NOT_FOUND` when the run is not in the index, and
|
|
167
|
+
* `RUN_NOT_SETTLED` while the run is still live — a claim in flight may still
|
|
168
|
+
* be writing, so its changes are not final and must not be reverted.
|
|
169
|
+
* Under the same lock every other mutation uses, so a second revert racing
|
|
170
|
+
* the first can never both win.
|
|
171
|
+
*/
|
|
172
|
+
export async function markRunReverted(projectDir, runId) {
|
|
173
|
+
await ensureDir(join(projectDir, "runs"));
|
|
174
|
+
return withLock(runStoreLockPath(projectDir), async () => {
|
|
175
|
+
const runs = await readRunsIndex(projectDir);
|
|
176
|
+
const claim = runs.find((run) => run.runId === runId);
|
|
177
|
+
if (claim === undefined) {
|
|
178
|
+
throw new DagError("RUN_NOT_FOUND", `no run "${runId}" on this project`);
|
|
179
|
+
}
|
|
180
|
+
if (claim.outcome === undefined) {
|
|
181
|
+
throw new DagError("RUN_NOT_SETTLED", `run "${runId}" is still live — only a settled run's changes can be reverted`);
|
|
182
|
+
}
|
|
183
|
+
if (claim.revertedAt !== undefined) {
|
|
184
|
+
throw new DagError("RUN_ALREADY_REVERTED", `the changes of run "${runId}" were already reverted`);
|
|
185
|
+
}
|
|
186
|
+
claim.revertedAt = Date.now();
|
|
187
|
+
await writeRunsIndex(projectDir, runs);
|
|
188
|
+
return claim;
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
/** The project's current in-flight run claim, or `undefined`. */
|
|
192
|
+
export async function liveRun(projectDir) {
|
|
193
|
+
const runs = await readRunsIndex(projectDir);
|
|
194
|
+
return runs.find((run) => run.outcome === undefined);
|
|
195
|
+
}
|
|
196
|
+
// ---------------------------------------------------------------------------
|
|
197
|
+
// Liveness
|
|
198
|
+
// ---------------------------------------------------------------------------
|
|
199
|
+
/**
|
|
200
|
+
* Whether a pid is a live process, via signal 0 (no signal delivered).
|
|
201
|
+
*
|
|
202
|
+
* SHORTCUT: pids are reused, so a recycled pid reads alive and keeps an orphan
|
|
203
|
+
* claim standing; upgrade to a start-time check (`/proc/<pid>/stat` field 22 or
|
|
204
|
+
* `ps -o lstart`) when a stuck claim is ever actually observed.
|
|
205
|
+
*/
|
|
206
|
+
export function isProcessAlive(pid) {
|
|
207
|
+
if (!Number.isInteger(pid) || pid <= 0)
|
|
208
|
+
return false;
|
|
209
|
+
try {
|
|
210
|
+
process.kill(pid, 0);
|
|
211
|
+
return true;
|
|
212
|
+
}
|
|
213
|
+
catch (err) {
|
|
214
|
+
// EPERM means the process exists but belongs to another user — alive.
|
|
215
|
+
return err?.code === "EPERM";
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
function orphanError(pid) {
|
|
219
|
+
return pid === undefined
|
|
220
|
+
? "run was interrupted: no pid was recorded for it, so nothing could report how it ended"
|
|
221
|
+
: `run was interrupted: its process (pid ${pid}) is gone and never reported an outcome`;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Settles every run claim in a project whose process is gone AND whose
|
|
225
|
+
* deadline has passed, as `interrupted`.
|
|
226
|
+
*
|
|
227
|
+
* A claim only stands while its pid is still alive within its own deadline — a
|
|
228
|
+
* run spawned by a previous server process either outlived the restart (leave
|
|
229
|
+
* it be; it still holds the project's slot) or died with it, and a dead claim
|
|
230
|
+
* that is never cleared is a project stuck on "a run is in progress" forever.
|
|
231
|
+
* The deadline condition is what keeps a claim whose child merely outlived a
|
|
232
|
+
* crash from being settled out from under a live process.
|
|
233
|
+
*
|
|
234
|
+
* A settle here also prunes the project's run event logs, exactly as the
|
|
235
|
+
* route's own write-back does — this is the ONLY settle an interrupted run
|
|
236
|
+
* ever gets, so it is the only place that can bound the logs of a project
|
|
237
|
+
* whose runs never settle normally.
|
|
238
|
+
*
|
|
239
|
+
* Never throws: a project whose index cannot be read is skipped, and a record
|
|
240
|
+
* deleted mid-sweep is simply not settled.
|
|
241
|
+
*/
|
|
242
|
+
export async function settleOrphanedRuns(projectDir, options = {}) {
|
|
243
|
+
const alive = options.isAlive ?? isProcessAlive;
|
|
244
|
+
const now = options.now ?? Date.now();
|
|
245
|
+
const runs = await readRunsIndex(projectDir);
|
|
246
|
+
const settled = [];
|
|
247
|
+
for (const claim of runs) {
|
|
248
|
+
if (claim.outcome !== undefined)
|
|
249
|
+
continue;
|
|
250
|
+
if (typeof claim.pid === "number" && alive(claim.pid))
|
|
251
|
+
continue;
|
|
252
|
+
// The pid is dead (or was never recorded) — settle only once the run's own
|
|
253
|
+
// deadline has passed. A non-finite/missing deadline is treated as passed:
|
|
254
|
+
// every claim this store writes carries one, so anything else un-wedges.
|
|
255
|
+
const deadlineAt = claim.deadlineAt;
|
|
256
|
+
if (typeof deadlineAt === "number" && Number.isFinite(deadlineAt) && deadlineAt > now) {
|
|
257
|
+
continue;
|
|
258
|
+
}
|
|
259
|
+
const settledClaim = await settleRun(projectDir, {
|
|
260
|
+
runId: claim.runId,
|
|
261
|
+
outcome: "interrupted",
|
|
262
|
+
error: orphanError(claim.pid),
|
|
263
|
+
endedAt: now,
|
|
264
|
+
});
|
|
265
|
+
if (settledClaim !== undefined)
|
|
266
|
+
settled.push(settledClaim);
|
|
267
|
+
// Retention belongs to every settle, and this is the one settle path that
|
|
268
|
+
// is not a run's own write-back. A server that dies mid-run never reaches
|
|
269
|
+
// the route's prune, so a project whose runs are always interrupted would
|
|
270
|
+
// otherwise accumulate one RUN_EVENT_LOG_MAX_BYTES log per run forever.
|
|
271
|
+
try {
|
|
272
|
+
await pruneRunEventLogs(projectDir, claim.logSegment, RUN_LOG_RETENTION_KEEP);
|
|
273
|
+
}
|
|
274
|
+
catch {
|
|
275
|
+
// Pruning never throws; this catch is defensive only.
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
return settled;
|
|
279
|
+
}
|
|
280
|
+
/** The log-retention budget the sweep prunes to after an interrupted settle.
|
|
281
|
+
* Mirrors run-event-log's default, stated here so the sweep cannot drift. */
|
|
282
|
+
const RUN_LOG_RETENTION_KEEP = 5;
|
|
283
|
+
/**
|
|
284
|
+
* Startup sweep across every registered project, keyed by RUN. Composition-time
|
|
285
|
+
* work (app.ts calls it once, fire-and-forget) — one pass, never a poller.
|
|
286
|
+
*
|
|
287
|
+
* Never throws — a data dir without a readable meta.json settles nothing,
|
|
288
|
+
* rather than taking the server down at boot.
|
|
289
|
+
*/
|
|
290
|
+
export async function settleOrphanedRunsOnStartup(dataDir = getDataDir(), options = {}) {
|
|
291
|
+
let slugs;
|
|
292
|
+
try {
|
|
293
|
+
slugs = (await readRootMeta(dataDir)).projects.map((project) => project.id);
|
|
294
|
+
}
|
|
295
|
+
catch {
|
|
296
|
+
return [];
|
|
297
|
+
}
|
|
298
|
+
const settled = [];
|
|
299
|
+
for (const slug of slugs) {
|
|
300
|
+
settled.push(...(await settleOrphanedRuns(resolve(dataDir, "projects", slug), options)));
|
|
301
|
+
}
|
|
302
|
+
return settled;
|
|
303
|
+
}
|
|
304
|
+
//# sourceMappingURL=run-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-store.js","sourceRoot":"","sources":["../../src/web-server/run-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/web-server/watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EACA,MAAM,GACN,WAAW,GACX,OAAO,GACP,OAAO,GACP,WAAW,GACX,UAAU,GACV,MAAM,GACN,MAAM,GACN,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,KAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAY7C,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,IAAI,CAK3D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,GACnB;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/web-server/watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,IAAI,EACA,MAAM,GACN,WAAW,GACX,OAAO,GACP,OAAO,GACP,WAAW,GACX,UAAU,GACV,MAAM,GACN,MAAM,GACN,OAAO,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,KAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAY7C,wBAAgB,YAAY,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,IAAI,CAK3D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,GACnB;IAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAqB3D;AAiFD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GACxC,WAAW,GAAG,UAAU,CAoB1B;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAgBlC"}
|
|
@@ -45,6 +45,10 @@ export function classifyChange(relativePath) {
|
|
|
45
45
|
return { slug, area: "proposals" };
|
|
46
46
|
if (rest === "sessions" || rest.startsWith("sessions/"))
|
|
47
47
|
return { slug, area: "sessions" };
|
|
48
|
+
// The run store is the ask surface's persistence — the client's invalidation
|
|
49
|
+
// path keys on the `sessions` area, so run claims/settles keep triggering it.
|
|
50
|
+
if (rest === "runs" || rest.startsWith("runs/"))
|
|
51
|
+
return { slug, area: "sessions" };
|
|
48
52
|
if (rest === "meta.json")
|
|
49
53
|
return { slug, area: "meta" };
|
|
50
54
|
if (rest.endsWith(".md"))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/web-server/watcher.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/web-server/watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"status": "active",
|
|
14
14
|
"kind": "subagent",
|
|
15
15
|
"tier": "heavy",
|
|
16
|
-
"modes": ["opencode", "claudecode"],
|
|
16
|
+
"modes": ["opencode", "claudecode", "pi"],
|
|
17
17
|
"source": "prompts/software-engineer.txt",
|
|
18
18
|
"destination": "prompts/software-engineer.txt",
|
|
19
19
|
"description": "Implementation specialist. Writes code, runs tests, and ships verified work using orchestrator-selected implementation bounded or inspect mode.",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"status": "active",
|
|
31
31
|
"kind": "subagent",
|
|
32
32
|
"tier": "heavy",
|
|
33
|
-
"modes": ["opencode", "claudecode"],
|
|
33
|
+
"modes": ["opencode", "claudecode", "pi"],
|
|
34
34
|
"source": "prompts/tech-architect.txt",
|
|
35
35
|
"destination": "prompts/tech-architect.txt",
|
|
36
36
|
"description": "Architecture, analysis, and cited research specialist. Produces read-only structural guidance, trade-off evaluation, and DAG-first research synthesis.",
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"status": "active",
|
|
66
66
|
"kind": "subagent",
|
|
67
67
|
"tier": "standard",
|
|
68
|
-
"modes": ["opencode", "claudecode"],
|
|
68
|
+
"modes": ["opencode", "claudecode", "pi"],
|
|
69
69
|
"source": "prompts/arcs-docs.txt",
|
|
70
70
|
"destination": "prompts/arcs-docs.txt",
|
|
71
71
|
"description": "ARCS documentation specialist. Manages plans, knowledge entries, diagrams, and DAG health. Knows ARCS structure intimately.",
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
"status": "active",
|
|
83
83
|
"kind": "subagent",
|
|
84
84
|
"tier": "standard",
|
|
85
|
-
"modes": ["opencode", "claudecode"],
|
|
85
|
+
"modes": ["opencode", "claudecode", "pi"],
|
|
86
86
|
"source": "prompts/code-reviewer.txt",
|
|
87
87
|
"destination": "prompts/code-reviewer.txt",
|
|
88
88
|
"description": "Reviews code changes for production readiness and catches correctness, maintainability, and testing issues.",
|
|
@@ -135,7 +135,7 @@
|
|
|
135
135
|
"status": "active",
|
|
136
136
|
"kind": "subagent",
|
|
137
137
|
"tier": "light",
|
|
138
|
-
"modes": ["opencode", "claudecode"],
|
|
138
|
+
"modes": ["opencode", "claudecode", "pi"],
|
|
139
139
|
"source": "prompts/graph-explorer.txt",
|
|
140
140
|
"destination": "prompts/graph-explorer.txt",
|
|
141
141
|
"description": "DAG-first codebase and knowledge exploration specialist. Queries arcs search, related, and context first, then codegraph MCP code-intelligence tools, before falling back to raw file-system tools. Replaces vanilla explore for ARCS projects.",
|
|
@@ -152,7 +152,7 @@
|
|
|
152
152
|
"status": "active",
|
|
153
153
|
"kind": "primary",
|
|
154
154
|
"tier": "standard",
|
|
155
|
-
"modes": ["opencode", "claudecode"],
|
|
155
|
+
"modes": ["opencode", "claudecode", "pi"],
|
|
156
156
|
"source": "prompts/arcs-orchestrate.txt",
|
|
157
157
|
"destination": "prompts/arcs-orchestrate.txt",
|
|
158
158
|
"description": "The central coordinator for executing plans, managing agent dispatch, and handling DAG workflows.",
|
|
@@ -169,7 +169,7 @@
|
|
|
169
169
|
"status": "active",
|
|
170
170
|
"kind": "primary",
|
|
171
171
|
"tier": "standard",
|
|
172
|
-
"modes": ["opencode", "claudecode"],
|
|
172
|
+
"modes": ["opencode", "claudecode", "pi"],
|
|
173
173
|
"source": "prompts/arcs-orchestrate-caveman.txt",
|
|
174
174
|
"destination": "prompts/arcs-orchestrate-caveman.txt",
|
|
175
175
|
"description": "A terse, high-efficiency orchestrator that drives tasks without extra commentary.",
|
|
@@ -186,7 +186,7 @@
|
|
|
186
186
|
"status": "active",
|
|
187
187
|
"kind": "primary",
|
|
188
188
|
"tier": "standard",
|
|
189
|
-
"modes": ["opencode", "claudecode"],
|
|
189
|
+
"modes": ["opencode", "claudecode", "pi"],
|
|
190
190
|
"source": "prompts/arcs-flash.txt",
|
|
191
191
|
"destination": "prompts/arcs-flash.txt",
|
|
192
192
|
"description": "A speed-optimized orchestrator that sources context from arcs knowledge first and maximizes parallel sub-agent dispatch under tiered gates.",
|
|
@@ -81,7 +81,7 @@ Available skills: `implementation`, `test-driven-development`, `systematic-debug
|
|
|
81
81
|
|
|
82
82
|
## Design, Proposals, and Plans
|
|
83
83
|
|
|
84
|
-
For architecture-changing, large-feature, or cross-cutting work, delegate the proposal doc to `tech-architect` with the `writing-proposals` skill, stored in `
|
|
84
|
+
For architecture-changing, large-feature, or cross-cutting work, delegate the proposal doc to `tech-architect` with the `writing-proposals` skill, stored in the data dir under `projects/<slug>/proposals/`, not the workspace. Iterate with the user until approval, then delegate plan creation to `arcs-docs` with the `writing-plans` skill.
|
|
85
85
|
|
|
86
86
|
For broad multi-step or explicitly requested plans, delegate plan creation directly. Resolve material choices with the user; do not ask about details that repository evidence or convention settles.
|
|
87
87
|
|
|
@@ -75,7 +75,7 @@ Available skills: `implementation`, `test-driven-development`, `systematic-debug
|
|
|
75
75
|
|
|
76
76
|
## Design, Proposals, and Plans
|
|
77
77
|
|
|
78
|
-
For architecture-changing, large-feature, or cross-cutting work, delegate the proposal doc to `tech-architect` with the `writing-proposals` skill, stored in `
|
|
78
|
+
For architecture-changing, large-feature, or cross-cutting work, delegate the proposal doc to `tech-architect` with the `writing-proposals` skill, stored in the data dir under `projects/<slug>/proposals/`, not the workspace. Iterate with the user until approval, then delegate plan creation to `arcs-docs` with the `writing-plans` skill.
|
|
79
79
|
|
|
80
80
|
For broad multi-step or explicitly requested plans, delegate plan creation directly. Resolve material choices with the user; do not ask about details that repository evidence or convention settles.
|
|
81
81
|
|
|
@@ -28,9 +28,12 @@ the handoff to stage two, then delegates explicitly.
|
|
|
28
28
|
|
|
29
29
|
## CLI
|
|
30
30
|
|
|
31
|
-
All proposal doc operations use the `arcs proposal-doc` command group
|
|
31
|
+
All proposal doc operations use the `arcs proposal-doc` command group. Documents
|
|
32
|
+
are stored in the ARCS data dir under `projects/<slug>/proposals/` (not the
|
|
33
|
+
workspace); workspace `docs/proposals/` files are ignored by tooling (no
|
|
34
|
+
migration):
|
|
32
35
|
|
|
33
|
-
- `arcs proposal-doc create <slug> "<title>"` — scaffold `
|
|
36
|
+
- `arcs proposal-doc create <slug> "<title>"` — scaffold `proposals/<id>.proposal.md` in the project data dir
|
|
34
37
|
- `arcs proposal-doc list <slug>` — list pending proposals (both `.proposal.md` files)
|
|
35
38
|
- `arcs proposal-doc get <slug> <id>` — view body text of a proposal (pending or accepted)
|
|
36
39
|
- `arcs proposal-doc edit <slug> <id> --body="..."` — replace body text
|
|
@@ -43,7 +46,7 @@ All proposal doc operations use the `arcs proposal-doc` command group:
|
|
|
43
46
|
(`arcs brief`, knowledge search). A proposal grounded only in the request
|
|
44
47
|
text is a guess, not a proposal.
|
|
45
48
|
2. **Draft** with `arcs proposal-doc create <slug> "<title>"`. This scaffolds
|
|
46
|
-
`
|
|
49
|
+
`proposals/<kebab-id>.proposal.md` under the project's data dir with the required sections:
|
|
47
50
|
- **Goal** — the outcome in one paragraph.
|
|
48
51
|
- **Motivation / non-goals** — why now, what is explicitly out of scope.
|
|
49
52
|
- **Current state** — how it works today, with file/symbol references.
|
package/package.json
CHANGED
|
@@ -106,7 +106,7 @@ function resolveBundlePromptPath(value) {
|
|
|
106
106
|
// ---------------------------------------------------------------------------
|
|
107
107
|
// Model tier configuration
|
|
108
108
|
// ---------------------------------------------------------------------------
|
|
109
|
-
// Env vars: DEPLOY_MODEL_HEAVY, DEPLOY_MODEL_STANDARD, DEPLOY_MODEL_LIGHT
|
|
109
|
+
// Env vars: DEPLOY_MODEL_HEAVY, DEPLOY_MODEL_STANDARD, DEPLOY_MODEL_LIGHT.
|
|
110
110
|
// Each defaults to "inherit" if unset.
|
|
111
111
|
const tierModels = {
|
|
112
112
|
heavy: process.env.DEPLOY_MODEL_HEAVY || "inherit",
|
|
@@ -134,7 +134,7 @@ function readAgentRegistry() {
|
|
|
134
134
|
["heavy", "standard", "light"].includes(agent.tier) &&
|
|
135
135
|
Array.isArray(agent.modes) &&
|
|
136
136
|
agent.modes.length > 0 &&
|
|
137
|
-
agent.modes.every((mode) => ["opencode", "claudecode"].includes(mode)) &&
|
|
137
|
+
agent.modes.every((mode) => ["opencode", "claudecode", "pi"].includes(mode)) &&
|
|
138
138
|
isPromptPath(agent.source) &&
|
|
139
139
|
isPromptPath(agent.destination) &&
|
|
140
140
|
typeof agent.description === "string" &&
|
|
@@ -137,7 +137,7 @@ function validateAgentRegistry(agents) {
|
|
|
137
137
|
if (
|
|
138
138
|
!Array.isArray(agent.modes) ||
|
|
139
139
|
agent.modes.length === 0 ||
|
|
140
|
-
agent.modes.some((mode) => mode !== "opencode" && mode !== "claudecode")
|
|
140
|
+
agent.modes.some((mode) => mode !== "opencode" && mode !== "claudecode" && mode !== "pi")
|
|
141
141
|
) {
|
|
142
142
|
throw new Error(`Invalid agent registry modes for ${agent.id}`);
|
|
143
143
|
}
|