@rryando/arcs 3.11.0 → 4.0.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.
Files changed (191) hide show
  1. package/dist/cli/commands/hooks.d.ts +46 -6
  2. package/dist/cli/commands/hooks.d.ts.map +1 -1
  3. package/dist/cli/commands/hooks.js +190 -52
  4. package/dist/cli/commands/hooks.js.map +1 -1
  5. package/dist/cli/commands/web.js +14 -4
  6. package/dist/cli/commands/web.js.map +1 -1
  7. package/dist/cli/config.d.ts +14 -3
  8. package/dist/cli/config.d.ts.map +1 -1
  9. package/dist/cli/config.js +39 -38
  10. package/dist/cli/config.js.map +1 -1
  11. package/dist/cli/instructions.d.ts +13 -1
  12. package/dist/cli/instructions.d.ts.map +1 -1
  13. package/dist/cli/instructions.js +38 -3
  14. package/dist/cli/instructions.js.map +1 -1
  15. package/dist/cli/setup.d.ts.map +1 -1
  16. package/dist/cli/setup.js +76 -11
  17. package/dist/cli/setup.js.map +1 -1
  18. package/dist/shared/session-vocabulary.d.ts +88 -0
  19. package/dist/shared/session-vocabulary.d.ts.map +1 -0
  20. package/dist/shared/session-vocabulary.js +114 -0
  21. package/dist/shared/session-vocabulary.js.map +1 -0
  22. package/dist/utils/claude-code-hook-install.d.ts +1 -1
  23. package/dist/utils/claude-code-hook-install.d.ts.map +1 -1
  24. package/dist/utils/claude-code-hook-install.js +68 -3
  25. package/dist/utils/claude-code-hook-install.js.map +1 -1
  26. package/dist/utils/claude-transcript.d.ts +81 -2
  27. package/dist/utils/claude-transcript.d.ts.map +1 -1
  28. package/dist/utils/claude-transcript.js +33 -2
  29. package/dist/utils/claude-transcript.js.map +1 -1
  30. package/dist/utils/git.d.ts +21 -0
  31. package/dist/utils/git.d.ts.map +1 -1
  32. package/dist/utils/git.js +65 -1
  33. package/dist/utils/git.js.map +1 -1
  34. package/dist/utils/hook-contract.d.ts +36 -0
  35. package/dist/utils/hook-contract.d.ts.map +1 -0
  36. package/dist/utils/hook-contract.js +35 -0
  37. package/dist/utils/hook-contract.js.map +1 -0
  38. package/dist/utils/hook-token-store.d.ts +39 -0
  39. package/dist/utils/hook-token-store.d.ts.map +1 -1
  40. package/dist/utils/hook-token-store.js +46 -3
  41. package/dist/utils/hook-token-store.js.map +1 -1
  42. package/dist/utils/session-store.d.ts +226 -0
  43. package/dist/utils/session-store.d.ts.map +1 -1
  44. package/dist/utils/session-store.js +266 -1
  45. package/dist/utils/session-store.js.map +1 -1
  46. package/dist/web-client/assets/{GraphCanvas-dNyZ458L.js → GraphCanvas-CTyf_XXQ.js} +1 -1
  47. package/dist/web-client/assets/{MarkdownEditor-BmU9mdkN.js → MarkdownEditor-af2vwQOX.js} +1 -1
  48. package/dist/web-client/assets/{abnfDiagram-VRR7QNED-D1BFBoeF.js → abnfDiagram-VRR7QNED-CdxcKX9t.js} +1 -1
  49. package/dist/web-client/assets/architecture-TIHT7OUA-Bt2-DmfV.js +1 -0
  50. package/dist/web-client/assets/{architectureDiagram-ZJ3FMSHR-CA8hTWUK.js → architectureDiagram-ZJ3FMSHR-DOISDv6o.js} +1 -1
  51. package/dist/web-client/assets/{blockDiagram-677ZJIJ3-CQpb_KwX.js → blockDiagram-677ZJIJ3-DKwtbttM.js} +1 -1
  52. package/dist/web-client/assets/{c4Diagram-LMCZKHZV-BhpHX84V.js → c4Diagram-LMCZKHZV-CilqK-Mm.js} +1 -1
  53. package/dist/web-client/assets/channel-C2mb9np_.js +1 -0
  54. package/dist/web-client/assets/{chunk-32BRIVSS-BUusQQa_.js → chunk-32BRIVSS-C79m1mkG.js} +1 -1
  55. package/dist/web-client/assets/{chunk-52WLFC77-nNYwlftl.js → chunk-52WLFC77-C6WelGWJ.js} +1 -1
  56. package/dist/web-client/assets/{chunk-C7G6YPKG-D0a-yqnK.js → chunk-C7G6YPKG-DLg7ryWI.js} +1 -1
  57. package/dist/web-client/assets/{chunk-EX3LRPZG-IDuRMN-4.js → chunk-EX3LRPZG-DjWgo4gL.js} +1 -1
  58. package/dist/web-client/assets/{chunk-FWX5IMBZ-D_spTcqi.js → chunk-FWX5IMBZ-BgS9p_zy.js} +2 -2
  59. package/dist/web-client/assets/{chunk-HOUHSVGY-C-bcxwZS.js → chunk-HOUHSVGY-DuVR7dZO.js} +1 -1
  60. package/dist/web-client/assets/{chunk-ICXQ74PX-CjmK2bAM.js → chunk-ICXQ74PX-Y8DlnIJM.js} +1 -1
  61. package/dist/web-client/assets/{chunk-MOJQB5TN-Bkc08KWY.js → chunk-MOJQB5TN-BEM3QgeD.js} +1 -1
  62. package/dist/web-client/assets/{chunk-OGEWGWER-BAAYYvG9.js → chunk-OGEWGWER-DlM8LxGr.js} +1 -1
  63. package/dist/web-client/assets/{chunk-PUDLZKDR-WXbPY7NM.js → chunk-PUDLZKDR-c6cqNVTx.js} +1 -1
  64. package/dist/web-client/assets/{chunk-Q4XR5HBZ-DcbnjxQE.js → chunk-Q4XR5HBZ-C5lNmcka.js} +1 -1
  65. package/dist/web-client/assets/{chunk-V7JOEXUC-C6t75PAp.js → chunk-V7JOEXUC-nSswxvSG.js} +1 -1
  66. package/dist/web-client/assets/{chunk-VAUOI2AC-DVrJ0Ic7.js → chunk-VAUOI2AC-CqJkCkT0.js} +1 -1
  67. package/dist/web-client/assets/{chunk-VR4S4FIN-MOOFvGS0.js → chunk-VR4S4FIN-D3pFchin.js} +1 -1
  68. package/dist/web-client/assets/{chunk-WYO6CB5R-sK7Y2NZD.js → chunk-WYO6CB5R-BI9c-NzI.js} +1 -1
  69. package/dist/web-client/assets/{chunk-ZGVPDNZ5-a13RQsku.js → chunk-ZGVPDNZ5-CKTF2kLR.js} +1 -1
  70. package/dist/web-client/assets/classDiagram-OUVF2IWQ-CPd_w3Zr.js +1 -0
  71. package/dist/web-client/assets/classDiagram-v2-EOCWNBFH-CPd_w3Zr.js +1 -0
  72. package/dist/web-client/assets/{cynefin-VYW2F7L2-D8xaH-wO.js → cynefin-VYW2F7L2-BrJrnfh1.js} +1 -1
  73. package/dist/web-client/assets/{cynefinDiagram-TSTJHNR4-Bt__EqJW.js → cynefinDiagram-TSTJHNR4-9jYzPWJZ.js} +1 -1
  74. package/dist/web-client/assets/{dagre-VKFMJZFB-Bwgjwflz.js → dagre-VKFMJZFB-B705Djpu.js} +1 -1
  75. package/dist/web-client/assets/{diagram-FQU43EPY-CaPDVUq2.js → diagram-FQU43EPY-BfQAlUlJ.js} +1 -1
  76. package/dist/web-client/assets/{diagram-G47NLZAW-BQLB9YYA.js → diagram-G47NLZAW-s1YDe06A.js} +1 -1
  77. package/dist/web-client/assets/{diagram-NH7WQ7WH-BWo84w8Y.js → diagram-NH7WQ7WH-Dy3z11Hc.js} +1 -1
  78. package/dist/web-client/assets/{diagram-OA4YK3LP-bKn6Pz5s.js → diagram-OA4YK3LP-Bius2xUN.js} +1 -1
  79. package/dist/web-client/assets/{diagram-WEI45ONY-BRqV5Oy6.js → diagram-WEI45ONY-D7x4VcHM.js} +1 -1
  80. package/dist/web-client/assets/{ebnfDiagram-CCIWWBDH-DhUXL1-7.js → ebnfDiagram-CCIWWBDH-CBg1xrmD.js} +1 -1
  81. package/dist/web-client/assets/{erDiagram-Q63AITRT-HXAQQ-_F.js → erDiagram-Q63AITRT-CJRvTFvd.js} +1 -1
  82. package/dist/web-client/assets/eventmodeling-45OFAUF4-CTKRC2Yj.js +1 -0
  83. package/dist/web-client/assets/flowDiagram-23GEKE2U-CaZjFyU1.js +1 -0
  84. package/dist/web-client/assets/{ganttDiagram-NO4QXBWP-D-Ddf_Ii.js → ganttDiagram-NO4QXBWP-C_LsypZ4.js} +1 -1
  85. package/dist/web-client/assets/{gitGraph-TEB2WS4Q-BmHzs0uF.js → gitGraph-TEB2WS4Q-Dx2XxdGk.js} +1 -1
  86. package/dist/web-client/assets/{gitGraphDiagram-IHSO6WYX-YnQWrlh_.js → gitGraphDiagram-IHSO6WYX-DiKWkGWQ.js} +1 -1
  87. package/dist/web-client/assets/{index-DCWxuIeQ.js → index-CYwhkPtc.js} +38 -36
  88. package/dist/web-client/assets/index-wSzUPvml.css +2 -0
  89. package/dist/web-client/assets/{info-DKCQHKI2-DCT_B7RN.js → info-DKCQHKI2-DORwHenK.js} +1 -1
  90. package/dist/web-client/assets/{infoDiagram-FWYZ7A6U-D-le1Zhq.js → infoDiagram-FWYZ7A6U-CQecXS1E.js} +1 -1
  91. package/dist/web-client/assets/{ishikawaDiagram-FXEZZL3T-Jr1x2VJB.js → ishikawaDiagram-FXEZZL3T-CWhj60Zp.js} +1 -1
  92. package/dist/web-client/assets/{journeyDiagram-5HDEW3XC-BF9ELxj-.js → journeyDiagram-5HDEW3XC-Cj3z2U8u.js} +1 -1
  93. package/dist/web-client/assets/{kanban-definition-HUTT4EX6-C4fJqAxu.js → kanban-definition-HUTT4EX6-DFmBRenP.js} +1 -1
  94. package/dist/web-client/assets/{line-7N7ikFxa.js → line-C_Hxz9xb.js} +1 -1
  95. package/dist/web-client/assets/{mermaid-parser.core-QbC1icPt.js → mermaid-parser.core-E3xRdzPn.js} +3 -3
  96. package/dist/web-client/assets/{mermaid.core-C26d_UJm.js → mermaid.core-C2_CcotH.js} +3 -3
  97. package/dist/web-client/assets/{mindmap-definition-LN4V7U3C-D6TV1JDf.js → mindmap-definition-LN4V7U3C-Bs7VxPid.js} +1 -1
  98. package/dist/web-client/assets/{packet-7NZHBO7P-CR1vrGj3.js → packet-7NZHBO7P-D2nqso7i.js} +1 -1
  99. package/dist/web-client/assets/{pegDiagram-2B236MQR-xOMBBtfV.js → pegDiagram-2B236MQR-Cepo1sIu.js} +1 -1
  100. package/dist/web-client/assets/{pie-RZYD4A2V-BbWuhjwy.js → pie-RZYD4A2V-Sx0IGbXt.js} +1 -1
  101. package/dist/web-client/assets/{pieDiagram-ENE6RG2P-MsfnsqgW.js → pieDiagram-ENE6RG2P-D-PMDNhk.js} +1 -1
  102. package/dist/web-client/assets/{quadrantDiagram-ABIIQ3AL-BoI7zKXF.js → quadrantDiagram-ABIIQ3AL-BNGC7Fms.js} +1 -1
  103. package/dist/web-client/assets/{radar-I7S5WNFK-CbYXKToJ.js → radar-I7S5WNFK-CFf_-2OC.js} +1 -1
  104. package/dist/web-client/assets/{railroad-3IZDKUUU-6LxHDkLe.js → railroad-3IZDKUUU-BvZeVRGh.js} +1 -1
  105. package/dist/web-client/assets/railroad-abnf-AHOZXSZD-DnGh6x2O.js +1 -0
  106. package/dist/web-client/assets/railroad-ebnf-EBAXGLYW-CGfgCoaE.js +1 -0
  107. package/dist/web-client/assets/railroad-peg-LSFZ7HO6-BzQxYdqp.js +1 -0
  108. package/dist/web-client/assets/{railroadDiagram-RFXS5EU6-D6RUoUki.js → railroadDiagram-RFXS5EU6-D0iK_k84.js} +1 -1
  109. package/dist/web-client/assets/{requirementDiagram-TGXJPOKE-B6k4BDpE.js → requirementDiagram-TGXJPOKE-BPdsw9tz.js} +1 -1
  110. package/dist/web-client/assets/{sankeyDiagram-HTMAVEWB-BUDF-UFr.js → sankeyDiagram-HTMAVEWB-maA6ukOJ.js} +1 -1
  111. package/dist/web-client/assets/{sequenceDiagram-DBY2YBRQ-D6GqcsUi.js → sequenceDiagram-DBY2YBRQ-DKmAjmgr.js} +1 -1
  112. package/dist/web-client/assets/{stateDiagram-2N3HPSRC-WfJCQAK5.js → stateDiagram-2N3HPSRC-esxmzk3w.js} +1 -1
  113. package/dist/web-client/assets/stateDiagram-v2-6OUMAXLB-hcBqlOLc.js +1 -0
  114. package/dist/web-client/assets/{swimlanes-5IMT3BWC-BtMo82mC.js → swimlanes-5IMT3BWC-DFd-wGBv.js} +1 -1
  115. package/dist/web-client/assets/swimlanesDiagram-G3AALYLV-DbSrPBYr.js +8 -0
  116. package/dist/web-client/assets/{timeline-definition-FHXFAJF6-CoAmv2Sn.js → timeline-definition-FHXFAJF6-C7SG8MQH.js} +1 -1
  117. package/dist/web-client/assets/{treeView-QDETBFTQ-BWsKzE1s.js → treeView-QDETBFTQ-M0rhxbs2.js} +1 -1
  118. package/dist/web-client/assets/{treemap-6X3UGDF4-i_qGtB3o.js → treemap-6X3UGDF4-BQfkQxSh.js} +1 -1
  119. package/dist/web-client/assets/{vennDiagram-L72KCM5P-DYkiLe-P.js → vennDiagram-L72KCM5P-CyIlb8ju.js} +1 -1
  120. package/dist/web-client/assets/{wardley-OPB4EBWU-Daaqr1Vp.js → wardley-OPB4EBWU-EE-7q8M1.js} +1 -1
  121. package/dist/web-client/assets/{wardleyDiagram-EHGQE667-Bofbsg3J.js → wardleyDiagram-EHGQE667-bY8XdYYS.js} +1 -1
  122. package/dist/web-client/assets/{xychartDiagram-FW5EYKEG-KNF4VTfL.js → xychartDiagram-FW5EYKEG-AhuXJ3de.js} +1 -1
  123. package/dist/web-client/index.html +2 -2
  124. package/dist/web-server/app.d.ts +4 -1
  125. package/dist/web-server/app.d.ts.map +1 -1
  126. package/dist/web-server/app.js +19 -0
  127. package/dist/web-server/app.js.map +1 -1
  128. package/dist/web-server/claude-runner.d.ts +109 -7
  129. package/dist/web-server/claude-runner.d.ts.map +1 -1
  130. package/dist/web-server/claude-runner.js +329 -50
  131. package/dist/web-server/claude-runner.js.map +1 -1
  132. package/dist/web-server/index.d.ts +2 -2
  133. package/dist/web-server/index.d.ts.map +1 -1
  134. package/dist/web-server/index.js +3 -2
  135. package/dist/web-server/index.js.map +1 -1
  136. package/dist/web-server/permission-policy.d.ts +46 -0
  137. package/dist/web-server/permission-policy.d.ts.map +1 -0
  138. package/dist/web-server/permission-policy.js +96 -0
  139. package/dist/web-server/permission-policy.js.map +1 -0
  140. package/dist/web-server/prompt-assembly.d.ts +454 -0
  141. package/dist/web-server/prompt-assembly.d.ts.map +1 -0
  142. package/dist/web-server/prompt-assembly.js +1122 -0
  143. package/dist/web-server/prompt-assembly.js.map +1 -0
  144. package/dist/web-server/routes/hook-events.d.ts +28 -3
  145. package/dist/web-server/routes/hook-events.d.ts.map +1 -1
  146. package/dist/web-server/routes/hook-events.js +209 -24
  147. package/dist/web-server/routes/hook-events.js.map +1 -1
  148. package/dist/web-server/routes/sessions.d.ts +7 -5
  149. package/dist/web-server/routes/sessions.d.ts.map +1 -1
  150. package/dist/web-server/routes/sessions.js +1030 -174
  151. package/dist/web-server/routes/sessions.js.map +1 -1
  152. package/dist/web-server/routes/workspace.d.ts +27 -0
  153. package/dist/web-server/routes/workspace.d.ts.map +1 -0
  154. package/dist/web-server/routes/workspace.js +280 -0
  155. package/dist/web-server/routes/workspace.js.map +1 -0
  156. package/dist/web-server/run-event-log.d.ts +167 -0
  157. package/dist/web-server/run-event-log.d.ts.map +1 -0
  158. package/dist/web-server/run-event-log.js +468 -0
  159. package/dist/web-server/run-event-log.js.map +1 -0
  160. package/dist/web-server/session-reconciler.d.ts +162 -0
  161. package/dist/web-server/session-reconciler.d.ts.map +1 -0
  162. package/dist/web-server/session-reconciler.js +363 -0
  163. package/dist/web-server/session-reconciler.js.map +1 -0
  164. package/dist/web-server/static.d.ts +7 -0
  165. package/dist/web-server/static.d.ts.map +1 -1
  166. package/dist/web-server/static.js +46 -3
  167. package/dist/web-server/static.js.map +1 -1
  168. package/dist/web-server/web-auth.d.ts +17 -0
  169. package/dist/web-server/web-auth.d.ts.map +1 -0
  170. package/dist/web-server/web-auth.js +33 -0
  171. package/dist/web-server/web-auth.js.map +1 -0
  172. package/dist/web-server/web-token.d.ts +39 -0
  173. package/dist/web-server/web-token.d.ts.map +1 -0
  174. package/dist/web-server/web-token.js +71 -0
  175. package/dist/web-server/web-token.js.map +1 -0
  176. package/opencode/arcs/manifest.json +8 -8
  177. package/package.json +1 -1
  178. package/scripts/claude-code-session-hook.mjs +49 -3
  179. package/scripts/deploy-claudecode-bundle.mjs +24 -3
  180. package/dist/web-client/assets/architecture-TIHT7OUA-CJqI5wNI.js +0 -1
  181. package/dist/web-client/assets/channel-C8DlmyVe.js +0 -1
  182. package/dist/web-client/assets/classDiagram-OUVF2IWQ-p32N1P_G.js +0 -1
  183. package/dist/web-client/assets/classDiagram-v2-EOCWNBFH-p32N1P_G.js +0 -1
  184. package/dist/web-client/assets/eventmodeling-45OFAUF4-Bj5P8mZJ.js +0 -1
  185. package/dist/web-client/assets/flowDiagram-23GEKE2U-37BztFri.js +0 -1
  186. package/dist/web-client/assets/index-3mNPVkix.css +0 -2
  187. package/dist/web-client/assets/railroad-abnf-AHOZXSZD-2Dg9wu0J.js +0 -1
  188. package/dist/web-client/assets/railroad-ebnf-EBAXGLYW-C_E2ot0R.js +0 -1
  189. package/dist/web-client/assets/railroad-peg-LSFZ7HO6-Bs9UQR1b.js +0 -1
  190. package/dist/web-client/assets/stateDiagram-v2-6OUMAXLB-BCMWGnsJ.js +0 -1
  191. package/dist/web-client/assets/swimlanesDiagram-G3AALYLV-DmudmLcK.js +0 -8
@@ -1,11 +1,12 @@
1
- /** Matches `arcs web`'s own default override when that port is taken. */
2
- export declare const DEFAULT_SERVER_URL = "http://127.0.0.1:4173";
1
+ import { DEFAULT_SERVER_URL, HOOK_EVENTS, type HookEventName } from "../../utils/hook-contract.js";
3
2
  /**
4
- * One script registered under four events; it dispatches internally on the
5
- * `hook_event_name` field Claude Code puts on stdin.
3
+ * Re-exported from the bridge contract, which is where the event list and the
4
+ * default URL are defined once for the server, this installer, and the parity
5
+ * test that pins the standalone hook script to them. Kept exported here because
6
+ * `utils/claude-code-hook-install.ts` sources them from this module.
6
7
  */
7
- export declare const HOOK_EVENTS: readonly ["SessionStart", "UserPromptSubmit", "SessionEnd", "Stop"];
8
- export type HookEvent = (typeof HOOK_EVENTS)[number];
8
+ export { DEFAULT_SERVER_URL, HOOK_EVENTS };
9
+ export type HookEvent = HookEventName;
9
10
  export interface ProvisionedHook {
10
11
  token: string;
11
12
  hookScriptPath: string;
@@ -31,6 +32,45 @@ export interface HookStatus {
31
32
  installed: boolean;
32
33
  matchesCurrentSlug: boolean;
33
34
  matchedSlugs: string[];
35
+ /**
36
+ * The `ARCS_HOOK_URL` values baked into the installed hook commands, in the
37
+ * order first seen. Additive to the pre-existing shape and always an array:
38
+ * an absent, unreadable or unparsable install reports `[]` rather than
39
+ * failing, and a workspace whose entries disagree reports each distinct URL
40
+ * instead of picking a winner.
41
+ *
42
+ * This is the field that makes the bridge's worst failure mode visible — the
43
+ * URL is written into settings.json at install time, so it keeps pointing at
44
+ * whatever port `arcs web` used *then*, no matter what it binds now.
45
+ */
46
+ hookUrls: string[];
34
47
  hookScriptPath: string;
35
48
  }
49
+ export interface BoundAddress {
50
+ host: string;
51
+ port: number;
52
+ }
53
+ /**
54
+ * The single warning block `arcs web` prints when the address it actually bound
55
+ * disagrees with the URL baked into an installed hook — or `null` when there is
56
+ * nothing to say. Plain text: the caller owns the colouring.
57
+ *
58
+ * Why this exists: `ARCS_HOOK_URL` is written into settings.json at install
59
+ * time, so `arcs web --port N` leaves every already-installed hook posting to
60
+ * the old port. The hook exits 0 on a failed POST by design (a broken bridge
61
+ * must be inert, never fatal to the user's Claude Code session), so the bridge
62
+ * dies with no output anywhere and looks exactly like an idle session. This is
63
+ * the only place that difference becomes visible.
64
+ *
65
+ * Compares PORTS, not full origins: `arcs web` refuses anything but loopback,
66
+ * and 127.0.0.1 / localhost / ::1 are the same listener often enough that
67
+ * warning on a host spelling difference would be noise that trains the warning
68
+ * away. The port is the difference that reliably breaks the bridge.
69
+ *
70
+ * Never throws and never blocks — it runs after the server is already
71
+ * listening, and every read inside it degrades to silence: no data dir, no
72
+ * root meta, no project, no workspace, no settings file, malformed settings,
73
+ * or an `ARCS_HOOK_URL` that is not a parsable URL all produce `null`.
74
+ */
75
+ export declare function hookUrlMismatchWarning(bound: BoundAddress): Promise<string | null>;
36
76
  //# sourceMappingURL=hooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/hooks.ts"],"names":[],"mappings":"AAyBA,2EAA2E;AAC3E,eAAO,MAAM,kBAAkB,0BAA0B,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,WAAW,qEAAsE,CAAC;AAE/F,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,eAAe,CAAC,CAS3B;AAuLD,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/hooks.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,KAAK,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAanG;;;;;GAKG;AACH,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,CAAC;AAE3C,MAAM,MAAM,SAAS,GAAG,aAAa,CAAC;AAEtC,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,eAAe,CAAC,CAc3B;AAuLD,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB;;;;;;;;;;OAUG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;CACxB;AAyKD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAmCD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMxF"}
@@ -6,18 +6,20 @@ import { readFile } from "node:fs/promises";
6
6
  import { homedir } from "node:os";
7
7
  import { resolve } from "node:path";
8
8
  import { claudeSettingsLocalPath, installClaudeCodeHook, } from "../../utils/claude-code-hook-install.js";
9
+ import { readRootMeta } from "../../utils/dag.js";
10
+ import { DEFAULT_SERVER_URL, HOOK_EVENTS } from "../../utils/hook-contract.js";
9
11
  import { writeHookToken } from "../../utils/hook-token-store.js";
10
- import { PACKAGE_ROOT } from "../../utils/paths.js";
12
+ import { getDataDir, PACKAGE_ROOT } from "../../utils/paths.js";
11
13
  import { resolveProject } from "../../utils/project-resolver.js";
12
14
  import { defineCommand, } from "../command-registry.js";
13
15
  import { failure, success } from "../output-envelope.js";
14
- /** Matches `arcs web`'s own default — override when that port is taken. */
15
- export const DEFAULT_SERVER_URL = "http://127.0.0.1:4173";
16
16
  /**
17
- * One script registered under four events; it dispatches internally on the
18
- * `hook_event_name` field Claude Code puts on stdin.
17
+ * Re-exported from the bridge contract, which is where the event list and the
18
+ * default URL are defined once for the server, this installer, and the parity
19
+ * test that pins the standalone hook script to them. Kept exported here because
20
+ * `utils/claude-code-hook-install.ts` sources them from this module.
19
21
  */
20
- export const HOOK_EVENTS = ["SessionStart", "UserPromptSubmit", "SessionEnd", "Stop"];
22
+ export { DEFAULT_SERVER_URL, HOOK_EVENTS };
21
23
  /**
22
24
  * Rotates the project's hook token and builds the `command` string a
23
25
  * settings.json hook entry must run.
@@ -32,9 +34,14 @@ export async function provisionHookCommand(options) {
32
34
  const serverUrl = (options.serverUrl ?? DEFAULT_SERVER_URL).replace(/\/+$/, "");
33
35
  const token = randomUUID();
34
36
  await writeHookToken(options.projectDir, token);
35
- const hookScriptPath = resolve(PACKAGE_ROOT, "scripts", "claude-code-session-hook.mjs");
36
- const command = buildHookCommand({ token, slug: options.slug, serverUrl, hookScriptPath });
37
- return { token, hookScriptPath, serverUrl, command };
37
+ const scriptPath = hookScriptPath();
38
+ const command = buildHookCommand({
39
+ token,
40
+ slug: options.slug,
41
+ serverUrl,
42
+ hookScriptPath: scriptPath,
43
+ });
44
+ return { token, hookScriptPath: scriptPath, serverUrl, command };
38
45
  }
39
46
  /**
40
47
  * The literal `command` string a settings.json hook entry runs.
@@ -183,26 +190,35 @@ defineCommand({
183
190
  });
184
191
  /** `ARCS_HOOK_SLUG=<slug>` as prefixed onto a settings.json hook `command`. */
185
192
  const HOOK_SLUG_PATTERN = /ARCS_HOOK_SLUG=(\S+)/;
193
+ /** `ARCS_HOOK_URL=<url>` as prefixed onto a settings.json hook `command`. */
194
+ const HOOK_URL_PATTERN = /ARCS_HOOK_URL=(\S+)/;
195
+ /** Fresh (never shared) empty result — every degradation path returns this. */
196
+ function noHooks() {
197
+ return { installed: false, matchedSlugs: [], hookUrls: [] };
198
+ }
186
199
  /**
187
- * First configured workspace path for a project, mirroring how
188
- * `resolveProject()` sources it. Returns undefined when the project has none
189
- * (or its meta is unreadable) — a status check reports "not installed" rather
190
- * than guessing at `process.cwd()`, since inspecting whatever directory the CLI
200
+ * Configured workspace paths for a project, in order, mirroring how
201
+ * `resolveProject()` sources them. Returns `[]` when the project has none (or
202
+ * its meta is unreadable) — a status check reports "not installed" rather than
203
+ * guessing at `process.cwd()`, since inspecting whatever directory the CLI
191
204
  * happens to run from would be a lie about the project.
192
205
  */
193
- async function firstWorkspacePath(projectDir) {
206
+ async function workspacePathsFor(projectDir) {
194
207
  let meta;
195
208
  try {
196
209
  meta = JSON.parse(await readFile(resolve(projectDir, "meta.json"), "utf-8"));
197
210
  }
198
211
  catch {
199
- return undefined;
212
+ return [];
200
213
  }
201
- const paths = Array.isArray(meta.workspacePaths) ? meta.workspacePaths : [];
202
- const first = paths[0];
203
- if (typeof first !== "string" || first.length === 0)
204
- return undefined;
205
- return first.startsWith("~") ? resolve(homedir(), first.slice(2)) : resolve(first);
214
+ const configured = Array.isArray(meta.workspacePaths) ? meta.workspacePaths : [];
215
+ const paths = [];
216
+ for (const entry of configured) {
217
+ if (typeof entry !== "string" || entry.length === 0)
218
+ continue;
219
+ paths.push(entry.startsWith("~") ? resolve(homedir(), entry.slice(2)) : resolve(entry));
220
+ }
221
+ return paths;
206
222
  }
207
223
  /**
208
224
  * Read-only inspection of a workspace's `.claude/settings.local.json`.
@@ -213,12 +229,14 @@ async function firstWorkspacePath(projectDir) {
213
229
  *
214
230
  * `installed` requires every hook event to be registered: a partial
215
231
  * registration is a broken bridge that should be repaired, so reporting it as
216
- * installed would suppress the fix. `matchedSlugs` is still populated in that
217
- * case, which is also how a caller sees a hook wired to a *different* project.
232
+ * installed would suppress the fix. `matchedSlugs`/`hookUrls` are still
233
+ * populated in that case, which is also how a caller sees a hook wired to a
234
+ * *different* project or a *different* port.
218
235
  */
219
236
  function inspectSettings(settings, hookScriptPath) {
220
237
  const hooks = settings.hooks ?? {};
221
238
  const matchedSlugs = [];
239
+ const hookUrls = [];
222
240
  let eventsWithHook = 0;
223
241
  for (const event of HOOK_EVENTS) {
224
242
  const entries = Array.isArray(hooks[event]) ? hooks[event] : [];
@@ -233,12 +251,53 @@ function inspectSettings(settings, hookScriptPath) {
233
251
  const slug = HOOK_SLUG_PATTERN.exec(h.command)?.[1];
234
252
  if (slug && !matchedSlugs.includes(slug))
235
253
  matchedSlugs.push(slug);
254
+ const url = HOOK_URL_PATTERN.exec(h.command)?.[1];
255
+ if (url && !hookUrls.includes(url))
256
+ hookUrls.push(url);
236
257
  }
237
258
  }
238
259
  if (found)
239
260
  eventsWithHook++;
240
261
  }
241
- return { installed: eventsWithHook === HOOK_EVENTS.length, matchedSlugs };
262
+ return { installed: eventsWithHook === HOOK_EVENTS.length, matchedSlugs, hookUrls };
263
+ }
264
+ /**
265
+ * The one read path for an installed hook: locate the workspace's
266
+ * `.claude/settings.local.json`, parse it, and hand it to `inspectSettings()`.
267
+ *
268
+ * Every failure — missing file, empty file, invalid JSON, a JSON array or
269
+ * scalar where an object belongs — degrades to `noHooks()` instead of throwing.
270
+ * That is deliberately the mirror image of `installClaudeCodeHook()`, which
271
+ * aborts on the same malformed input: the writer must never clobber a
272
+ * hand-edited settings file, but a reader risks nothing, and callers here
273
+ * include a server startup path that must not be killable by a stray comma in
274
+ * someone else's config.
275
+ */
276
+ async function inspectWorkspaceHooks(workspacePath, hookScriptPath) {
277
+ let raw;
278
+ try {
279
+ raw = await readFile(claudeSettingsLocalPath(workspacePath), "utf-8");
280
+ }
281
+ catch {
282
+ return noHooks();
283
+ }
284
+ if (raw.trim().length === 0)
285
+ return noHooks();
286
+ let parsed;
287
+ try {
288
+ parsed = JSON.parse(raw);
289
+ }
290
+ catch {
291
+ return noHooks();
292
+ }
293
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
294
+ return noHooks();
295
+ }
296
+ return inspectSettings(parsed, hookScriptPath);
297
+ }
298
+ /** Absolute path of the standalone hook script a settings entry must run. */
299
+ function hookScriptPath() {
300
+ return resolve(PACKAGE_ROOT, "scripts", "claude-code-session-hook.mjs");
242
301
  }
243
302
  /**
244
303
  * Reports whether the session-bridge hook is registered in the project's
@@ -246,8 +305,7 @@ function inspectSettings(settings, hookScriptPath) {
246
305
  *
247
306
  * Deliberately does not call `provisionHookCommand()`: that rotates the hook
248
307
  * token, so a status check built on it would break the very hook it was asked
249
- * to inspect. The script path is recomputed here instead — the one line shared
250
- * with the install path.
308
+ * to inspect. Only `hookScriptPath()` is shared with the install path.
251
309
  *
252
310
  * A malformed or non-object settings file reports `installed: false` rather
253
311
  * than throwing: unlike the install path (which must abort before writing so a
@@ -258,41 +316,121 @@ async function handleHooksStatus(params, _flags) {
258
316
  if (!resolved.ok)
259
317
  return resolved.result;
260
318
  const { slug, projectDir } = resolved;
261
- const hookScriptPath = resolve(PACKAGE_ROOT, "scripts", "claude-code-session-hook.mjs");
262
- const notInstalled = {
263
- installed: false,
264
- matchesCurrentSlug: false,
265
- matchedSlugs: [],
266
- hookScriptPath,
267
- };
268
- const workspacePath = await firstWorkspacePath(projectDir);
269
- if (!workspacePath)
270
- return success(notInstalled);
271
- let raw;
319
+ const scriptPath = hookScriptPath();
320
+ // First workspace only, matching `resolveProject()` — status answers for the
321
+ // workspace a hook install would have targeted.
322
+ const workspacePath = (await workspacePathsFor(projectDir))[0];
323
+ const { installed, matchedSlugs, hookUrls } = workspacePath
324
+ ? await inspectWorkspaceHooks(workspacePath, scriptPath)
325
+ : noHooks();
326
+ return success({
327
+ installed,
328
+ matchesCurrentSlug: matchedSlugs.includes(slug),
329
+ matchedSlugs,
330
+ hookUrls,
331
+ hookScriptPath: scriptPath,
332
+ });
333
+ }
334
+ /** `http://host:port`, bracketing an IPv6 host so the printed URL is valid. */
335
+ function boundUrlOf(bound) {
336
+ const host = bound.host.includes(":") && !bound.host.startsWith("[") ? `[${bound.host}]` : bound.host;
337
+ return `http://${host}:${bound.port}`;
338
+ }
339
+ /**
340
+ * Port a baked `ARCS_HOOK_URL` actually posts to, or undefined when the value
341
+ * is not a URL we can read. Undefined means "unknown", and unknown must stay
342
+ * silent — a warning we cannot substantiate is worse than none.
343
+ */
344
+ function portOfUrl(url) {
345
+ let parsed;
272
346
  try {
273
- raw = await readFile(claudeSettingsLocalPath(workspacePath), "utf-8");
347
+ parsed = new URL(url);
274
348
  }
275
349
  catch {
276
- return success(notInstalled);
350
+ return undefined;
277
351
  }
278
- if (raw.trim().length === 0)
279
- return success(notInstalled);
280
- let parsed;
352
+ if (parsed.port.length > 0) {
353
+ const port = Number(parsed.port);
354
+ return Number.isInteger(port) ? port : undefined;
355
+ }
356
+ if (parsed.protocol === "https:")
357
+ return 443;
358
+ if (parsed.protocol === "http:")
359
+ return 80;
360
+ return undefined;
361
+ }
362
+ /**
363
+ * The single warning block `arcs web` prints when the address it actually bound
364
+ * disagrees with the URL baked into an installed hook — or `null` when there is
365
+ * nothing to say. Plain text: the caller owns the colouring.
366
+ *
367
+ * Why this exists: `ARCS_HOOK_URL` is written into settings.json at install
368
+ * time, so `arcs web --port N` leaves every already-installed hook posting to
369
+ * the old port. The hook exits 0 on a failed POST by design (a broken bridge
370
+ * must be inert, never fatal to the user's Claude Code session), so the bridge
371
+ * dies with no output anywhere and looks exactly like an idle session. This is
372
+ * the only place that difference becomes visible.
373
+ *
374
+ * Compares PORTS, not full origins: `arcs web` refuses anything but loopback,
375
+ * and 127.0.0.1 / localhost / ::1 are the same listener often enough that
376
+ * warning on a host spelling difference would be noise that trains the warning
377
+ * away. The port is the difference that reliably breaks the bridge.
378
+ *
379
+ * Never throws and never blocks — it runs after the server is already
380
+ * listening, and every read inside it degrades to silence: no data dir, no
381
+ * root meta, no project, no workspace, no settings file, malformed settings,
382
+ * or an `ARCS_HOOK_URL` that is not a parsable URL all produce `null`.
383
+ */
384
+ export async function hookUrlMismatchWarning(bound) {
281
385
  try {
282
- parsed = JSON.parse(raw);
386
+ return await buildHookUrlMismatchWarning(bound);
283
387
  }
284
388
  catch {
285
- return success(notInstalled);
389
+ return null;
286
390
  }
287
- if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
288
- return success(notInstalled);
391
+ }
392
+ async function buildHookUrlMismatchWarning(bound) {
393
+ const dataDir = getDataDir();
394
+ let projects;
395
+ try {
396
+ projects = (await readRootMeta(dataDir)).projects;
289
397
  }
290
- const { installed, matchedSlugs } = inspectSettings(parsed, hookScriptPath);
291
- return success({
292
- installed,
293
- matchesCurrentSlug: matchedSlugs.includes(slug),
294
- matchedSlugs,
295
- hookScriptPath,
296
- });
398
+ catch {
399
+ return null;
400
+ }
401
+ const scriptPath = hookScriptPath();
402
+ const mismatches = [];
403
+ const seen = new Set();
404
+ // Every project is scanned: `arcs web` serves all of them from one listener,
405
+ // so any project's hook can be the one pointing somewhere else. Workspaces
406
+ // that disagree with each other are all reported rather than reconciled.
407
+ for (const project of projects) {
408
+ const projectDir = resolve(dataDir, "projects", project.id);
409
+ for (const workspacePath of await workspacePathsFor(projectDir)) {
410
+ const { hookUrls } = await inspectWorkspaceHooks(workspacePath, scriptPath);
411
+ for (const url of hookUrls) {
412
+ const port = portOfUrl(url);
413
+ if (port === undefined || port === bound.port)
414
+ continue;
415
+ const key = `${project.id}\x00${url}`;
416
+ if (seen.has(key))
417
+ continue;
418
+ seen.add(key);
419
+ mismatches.push({ slug: project.id, url });
420
+ }
421
+ }
422
+ }
423
+ if (mismatches.length === 0)
424
+ return null;
425
+ const boundUrl = boundUrlOf(bound);
426
+ return [
427
+ "⚠ Claude Code session bridge: the installed hook posts to a different port.",
428
+ ` arcs web is listening on ${boundUrl}`,
429
+ ...mismatches.map((m) => ` installed hook posts to ${m.url} (project ${m.slug})`),
430
+ " Every hook POST will be refused, and the hook exits 0 by design — the",
431
+ " session bridge will stay silent instead of failing loudly.",
432
+ " Fix: restart on the hook's port, or re-point the hook:",
433
+ ` arcs hooks install-claude-code ${mismatches[0].slug} --url ${boundUrl} --write`,
434
+ ].join("\n");
297
435
  }
298
436
  //# sourceMappingURL=hooks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/cli/commands/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/cli/commands/hooks.ts"],"names":[],"mappings":"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"}
@@ -2,18 +2,21 @@
2
2
  // web — Start the ARCS web UI (knowledge base visualizer and manager)
3
3
  // ---------------------------------------------------------------------------
4
4
  import pc from "picocolors";
5
+ import { DEFAULT_WEB_HOST, DEFAULT_WEB_PORT } from "../../utils/hook-contract.js";
5
6
  import { defineCommand, } from "../command-registry.js";
6
7
  import { failure, success } from "../output-envelope.js";
7
8
  const webParams = {
8
9
  port: {
9
10
  type: "number",
10
- default: 4173,
11
- description: "Port to listen on (default 4173)",
11
+ // Shared with the hook contract: an installed hook posts to this port, so
12
+ // the two defaults must move together or every hook silently misses.
13
+ default: DEFAULT_WEB_PORT,
14
+ description: `Port to listen on (default ${DEFAULT_WEB_PORT})`,
12
15
  },
13
16
  host: {
14
17
  type: "string",
15
- default: "127.0.0.1",
16
- description: "Interface to bind (default 127.0.0.1)",
18
+ default: DEFAULT_WEB_HOST,
19
+ description: `Interface to bind (default ${DEFAULT_WEB_HOST})`,
17
20
  },
18
21
  "no-open": {
19
22
  type: "boolean",
@@ -47,6 +50,13 @@ async function handleWeb(params, _flags) {
47
50
  ];
48
51
  // Banner on stderr keeps --json stdout clean.
49
52
  console.error(banner.join("\n"));
53
+ // Checked against the address actually bound, not `params.port`: the two
54
+ // differ whenever port 0 was requested. Runs after listen, so it can only
55
+ // add output — it never delays or fails the server coming up.
56
+ const { hookUrlMismatchWarning } = await import("./hooks.js");
57
+ const mismatch = await hookUrlMismatchWarning({ host: handle.host, port: handle.port });
58
+ if (mismatch)
59
+ console.error(`${pc.yellow(mismatch)}\n`);
50
60
  return success({ url: handle.url, port: handle.port, host: handle.host });
51
61
  }
52
62
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"web.js","sourceRoot":"","sources":["../../../src/cli/commands/web.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,sEAAsE;AACtE,8EAA8E;AAE9E,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAGL,aAAa,GAGd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,SAAS,GAAG;IAChB,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,kCAAkC;KAChD;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,WAAW;QACpB,WAAW,EAAE,uCAAuC;KACrD;IACD,SAAS,EAAE;QACT,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,KAAK;QACd,WAAW,EAAE,8BAA8B;KAC5C;CAC0C,CAAC;AAE9C,aAAa,CAAC;IACZ,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,+DAA+D;IAC5E,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,SAAS;CACnB,CAAC,CAAC;AAEH,KAAK,UAAU,SAAS,CACtB,MAAsC,EACtC,MAAoB;IAEpB,IAAI,CAAC;QACH,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;QACrE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;YAClC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC;SACzB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG;YACb,EAAE;YACF,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,4BAA4B,CAAC,EAAE;YACtF,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YAClD,KAAK,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,UAAU,EAAE,EAAE;YAC3C,KAAK,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO;YAClI,KAAK,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE;YAC/B,EAAE;SACH,CAAC;QACF,8CAA8C;QAC9C,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAEjC,OAAO,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,OAAO,CAAC,iBAAiB,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACtF,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../../src/cli/commands/web.ts"],"names":[],"mappings":"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"}
@@ -90,10 +90,21 @@ export interface ProviderModels {
90
90
  */
91
91
  export declare function readClaudeCodeCurrentModel(): Promise<string>;
92
92
  /**
93
- * Returns the curated Claude Code model list, sorted so the family matching
94
- * `currentModel` appears first.
93
+ * Reads ~/.claude/settings.json and returns the registry id of the primary
94
+ * agent the last deploy made the default (or empty string if unset / file
95
+ * missing). scripts/deploy-claudecode-bundle.mjs writes this key on every
96
+ * deploy, so a re-run of the wizard can pre-select what is actually installed
97
+ * instead of silently resetting the default back to the built-in fallback.
95
98
  */
96
- export declare function getClaudeCodeModels(currentModel: string): ProviderModels[];
99
+ export declare function readClaudeCodeCurrentPrimaryAgent(): Promise<string>;
100
+ /**
101
+ * Returns the curated Claude Code model list.
102
+ *
103
+ * The list is a single alias group, so there is nothing to order by the
104
+ * currently configured model — the "current" model only drives the per-tier
105
+ * pre-fill at the prompt, not the shape of this list.
106
+ */
107
+ export declare function getClaudeCodeModels(): ProviderModels[];
97
108
  /**
98
109
  * Reads ~/.local/share/opencode/auth.json to get authenticated provider names,
99
110
  * then runs `opencode models <provider>` for each to get available models.
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,GAAG,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAMD,wBAAgB,aAAa,IAAI,UAAU,CAK1C;AAUD;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAOtC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,UAAU,CAYvC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAGpD;AAMD,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC,CAAC;AAEF;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAQlE;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CACnD;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAC/C;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CACrD,CAaA;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CACrD;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC/F;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CACrD,CAyCA;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,eAAe,CAYrE;AAMD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAoCD;;;GAGG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,MAAM,CAAC,CASlE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc,EAAE,CAe1E;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CA8CxF"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/cli/config.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,GAAG,CAAC;IACb,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAMD,wBAAgB,aAAa,IAAI,UAAU,CAK1C;AAUD;;GAEG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAOtC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,UAAU,CAYvC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAGpD;AAMD,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC,CAAC;AAEF;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAQlE;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CACnD;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAC/C;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CACrD,CAaA;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CACrD;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC/F;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CACrD,CAyCA;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,eAAe,CAYrE;AAMD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AA4BD;;;GAGG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,MAAM,CAAC,CASlE;AAED;;;;;;GAMG;AACH,wBAAsB,iCAAiC,IAAI,OAAO,CAAC,MAAM,CAAC,CASzE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,IAAI,cAAc,EAAE,CAEtD;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CA8CxF"}
@@ -168,32 +168,24 @@ export function extractModelPreFills(config) {
168
168
  // Claude Code model list
169
169
  // ---------------------------------------------------------------------------
170
170
  /**
171
- * Curated list of Claude models supported by Claude Code, grouped by family.
172
- * Derived from the Claude Code binary (latest-first within each family).
173
- * Aliases (opus/sonnet/haiku) are listed first as shortcuts.
171
+ * Curated list of Claude models supported by Claude Code.
172
+ *
173
+ * Aliases only — pinned version identifiers (`claude-opus-4-7`, …) are
174
+ * deliberately absent so a deployed bundle tracks whatever the alias resolves
175
+ * to instead of freezing on a snapshot that ages out. `fable` is a heavy-class
176
+ * model offered in the list but not wired as any tier default.
177
+ *
178
+ * `inherit` is not a model but the pseudo-value Claude Code agent frontmatter
179
+ * accepts to defer to the host session's model — the same value
180
+ * scripts/deploy-claudecode-bundle.mjs falls back to when a tier is unset. It is
181
+ * listed explicitly because the tier note already tells users to reach for it,
182
+ * and requiring them to discover it behind "Enter custom model ID" made a
183
+ * documented choice effectively unreachable.
174
184
  */
175
185
  const CLAUDE_CODE_MODELS = [
176
186
  {
177
187
  provider: "claude (aliases)",
178
- models: ["opus", "sonnet", "haiku"],
179
- },
180
- {
181
- provider: "claude-opus",
182
- models: [
183
- "claude-opus-4-7",
184
- "claude-opus-4-6",
185
- "claude-opus-4-5",
186
- "claude-opus-4-1",
187
- "claude-opus-4-0",
188
- ],
189
- },
190
- {
191
- provider: "claude-sonnet",
192
- models: ["claude-sonnet-4-6", "claude-sonnet-4-5", "claude-sonnet-4-0", "claude-sonnet-3-7"],
193
- },
194
- {
195
- provider: "claude-haiku",
196
- models: ["claude-haiku-4-5", "claude-haiku-3-5"],
188
+ models: ["opus", "sonnet", "haiku", "fable", "inherit"],
197
189
  },
198
190
  ];
199
191
  /**
@@ -212,23 +204,32 @@ export async function readClaudeCodeCurrentModel() {
212
204
  }
213
205
  }
214
206
  /**
215
- * Returns the curated Claude Code model list, sorted so the family matching
216
- * `currentModel` appears first.
207
+ * Reads ~/.claude/settings.json and returns the registry id of the primary
208
+ * agent the last deploy made the default (or empty string if unset / file
209
+ * missing). scripts/deploy-claudecode-bundle.mjs writes this key on every
210
+ * deploy, so a re-run of the wizard can pre-select what is actually installed
211
+ * instead of silently resetting the default back to the built-in fallback.
212
+ */
213
+ export async function readClaudeCodeCurrentPrimaryAgent() {
214
+ try {
215
+ const settingsPath = join(homedir(), ".claude", "settings.json");
216
+ const content = await readFile(settingsPath, "utf-8");
217
+ const parsed = JSON.parse(content);
218
+ return typeof parsed.agent === "string" ? parsed.agent : "";
219
+ }
220
+ catch {
221
+ return "";
222
+ }
223
+ }
224
+ /**
225
+ * Returns the curated Claude Code model list.
226
+ *
227
+ * The list is a single alias group, so there is nothing to order by the
228
+ * currently configured model — the "current" model only drives the per-tier
229
+ * pre-fill at the prompt, not the shape of this list.
217
230
  */
218
- export function getClaudeCodeModels(currentModel) {
219
- const family = currentModel.includes("opus")
220
- ? "claude-opus"
221
- : currentModel.includes("sonnet")
222
- ? "claude-sonnet"
223
- : currentModel.includes("haiku")
224
- ? "claude-haiku"
225
- : "";
226
- if (!family)
227
- return CLAUDE_CODE_MODELS;
228
- return [
229
- ...CLAUDE_CODE_MODELS.filter((g) => g.provider === family),
230
- ...CLAUDE_CODE_MODELS.filter((g) => g.provider !== family),
231
- ];
231
+ export function getClaudeCodeModels() {
232
+ return CLAUDE_CODE_MODELS;
232
233
  }
233
234
  /**
234
235
  * Reads ~/.local/share/opencode/auth.json to get authenticated provider names,