chainlesschain 0.166.6 → 0.166.7

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 (189) hide show
  1. package/package.json +3 -1
  2. package/src/assets/web-panel/assets/{AIOps-CVnFjTfG.js → AIOps-BlrmQxa2.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-BxkwuuQC.js → ActionButton-zyRyLITg.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-C2670q6z.js → Analytics-DwGz7OGN.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-CU_rylW6.js → AppLayout-Dc-nj7Zd.js} +5 -5
  6. package/src/assets/web-panel/assets/{Artifacts-DGJmYqnj.js → Artifacts-7Hu3O73p.js} +1 -1
  7. package/src/assets/web-panel/assets/{Audit-BZOQbINJ.js → Audit-Bnoe3-fR.js} +1 -1
  8. package/src/assets/web-panel/assets/{BackgroundAgents-DghB4QwF.js → BackgroundAgents-BqYFrDKZ.js} +1 -1
  9. package/src/assets/web-panel/assets/{Backup-l0mwPbta.js → Backup-B3hwW1nz.js} +1 -1
  10. package/src/assets/web-panel/assets/{BaseInput-Bv3WSZOh.js → BaseInput-XFVxLA4w.js} +1 -1
  11. package/src/assets/web-panel/assets/{Chat-s88nBdvt.js → Chat-CWRDNw7e.js} +5 -5
  12. package/src/assets/web-panel/assets/{ChatBubbleRenderer-Z8CBuB1a.js → ChatBubbleRenderer-Bf30VM8G.js} +1 -1
  13. package/src/assets/web-panel/assets/{Checkbox-B5icasEs.js → Checkbox-kFeeBgac.js} +1 -1
  14. package/src/assets/web-panel/assets/{Codegen-CsUFqNud.js → Codegen-CCxp8xoI.js} +1 -1
  15. package/src/assets/web-panel/assets/{Col-DlBtClaW.js → Col-BLKZalle.js} +1 -1
  16. package/src/assets/web-panel/assets/{Community-xRn1IdLB.js → Community-DD0eWCez.js} +1 -1
  17. package/src/assets/web-panel/assets/{Compact-naIr8a_o.js → Compact-CHqHWdy0.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compliance-Dp9esfFE.js → Compliance-Bw54uPiK.js} +1 -1
  19. package/src/assets/web-panel/assets/{Cowork-DQlMYJB-.js → Cowork-DZ13zKNJ.js} +4 -4
  20. package/src/assets/web-panel/assets/{Cron-Cd0oNLzJ.js → Cron-Dlj5Jevg.js} +2 -2
  21. package/src/assets/web-panel/assets/{Crosschain-BtDIx3XX.js → Crosschain-Nvz0aR0j.js} +1 -1
  22. package/src/assets/web-panel/assets/{DID-BOlpzEwg.js → DID-Ct89eUyY.js} +2 -2
  23. package/src/assets/web-panel/assets/{Dashboard-DV15Axk1.js → Dashboard-BHUH5IAe.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dropdown-COXrewN1.js → Dropdown-BhZG-PO7.js} +1 -1
  25. package/src/assets/web-panel/assets/{EmailListRenderer-EjIt0Cm7.js → EmailListRenderer-ae4RVwwJ.js} +1 -1
  26. package/src/assets/web-panel/assets/{FamilyGuardDashboard-DJlhwb-R.js → FamilyGuardDashboard-AOcxLfLr.js} +1 -1
  27. package/src/assets/web-panel/assets/{Federation-BMiFl82k.js → Federation-BK2PJQOF.js} +1 -1
  28. package/src/assets/web-panel/assets/{FormItemContext-BUcDQyxn.js → FormItemContext-C2n3xO2_.js} +1 -1
  29. package/src/assets/web-panel/assets/{GenericCardRenderer-C25uFxvK.js → GenericCardRenderer-DcyUVFZq.js} +1 -1
  30. package/src/assets/web-panel/assets/{Git-D20uaEUU.js → Git-tBae9Lt8.js} +2 -2
  31. package/src/assets/web-panel/assets/{Governance-CQxYJjCX.js → Governance-DmNR3AP4.js} +1 -1
  32. package/src/assets/web-panel/assets/{Inference-m-sczpS5.js → Inference-CoseEigi.js} +1 -1
  33. package/src/assets/web-panel/assets/{KnowledgeGraph-CBsIlU0S.js → KnowledgeGraph-Bdjd1sxr.js} +1 -1
  34. package/src/assets/web-panel/assets/{Logs-D0-5bqeu.js → Logs-CtlkKIcn.js} +2 -2
  35. package/src/assets/web-panel/assets/{MarkdownRenderer-BwH414Ms.js → MarkdownRenderer-CZsTBEQE.js} +1 -1
  36. package/src/assets/web-panel/assets/{Marketplace-CwDGFu2Q.js → Marketplace-BTYb7nEx.js} +1 -1
  37. package/src/assets/web-panel/assets/{McpTools-7FxJ3omT.js → McpTools-D0iUdW3P.js} +2 -2
  38. package/src/assets/web-panel/assets/{Memory-DOVyb59U.js → Memory--gwI7w4Y.js} +2 -2
  39. package/src/assets/web-panel/assets/{MobileBridge-DZXl-Hje.js → MobileBridge-JmFBi24T.js} +1 -1
  40. package/src/assets/web-panel/assets/{MobileProjects-DlZ8tRXt.js → MobileProjects-BK01cQRx.js} +1 -1
  41. package/src/assets/web-panel/assets/{Mtc-D7Pjx1s_.js → Mtc-u7avzyoO.js} +5 -5
  42. package/src/assets/web-panel/assets/{MtcAudit-BND7lX8p.js → MtcAudit-gT3z5fo_.js} +2 -2
  43. package/src/assets/web-panel/assets/{Multisig-BknS7B-p.js → Multisig-BIqZTz5n.js} +3 -3
  44. package/src/assets/web-panel/assets/{NLProgramming-7C2-KPHt.js → NLProgramming-DdhVfXYq.js} +1 -1
  45. package/src/assets/web-panel/assets/{Notes-DNWdTndN.js → Notes-CBlyUmY3.js} +4 -4
  46. package/src/assets/web-panel/assets/{NotificationSettings-DCm4KcJZ.js → NotificationSettings-DSyI26N3.js} +1 -1
  47. package/src/assets/web-panel/assets/{OrderTableRenderer-DyVwwjJx.js → OrderTableRenderer-B7IEuNz4.js} +1 -1
  48. package/src/assets/web-panel/assets/{Organization-Dl2O_qJ9.js → Organization-ozhi4kGS.js} +4 -4
  49. package/src/assets/web-panel/assets/{Overflow-BOFCvk9Q.js → Overflow-CBy57RVM.js} +1 -1
  50. package/src/assets/web-panel/assets/{P2P-DgdVowY1.js → P2P-CA-ZRv77.js} +2 -2
  51. package/src/assets/web-panel/assets/PdhVaultBrowser-DOHc9zm8.js +7 -0
  52. package/src/assets/web-panel/assets/{Permissions-BHNEUUwa.js → Permissions-DiP632GP.js} +4 -4
  53. package/src/assets/web-panel/assets/{PersonalDataHub-CaZbrOdz.js → PersonalDataHub-AnU8O-SS.js} +5 -5
  54. package/src/assets/web-panel/assets/{Pipeline-DJDnoXmE.js → Pipeline-DDibOUaP.js} +1 -1
  55. package/src/assets/web-panel/assets/{Privacy-CBQr2eX8.js → Privacy-D421t36T.js} +1 -1
  56. package/src/assets/web-panel/assets/{ProjectInit-Yghqa06z.js → ProjectInit-DR879ZPJ.js} +2 -2
  57. package/src/assets/web-panel/assets/{ProjectSettings-HBAtJi8U.js → ProjectSettings-Ded8o6aY.js} +2 -2
  58. package/src/assets/web-panel/assets/{Projects-DiCGnMjz.js → Projects-BHPxiucB.js} +1 -1
  59. package/src/assets/web-panel/assets/{Providers-uJTz77GI.js → Providers-Boivuu-E.js} +1 -1
  60. package/src/assets/web-panel/assets/{QrScannerModal-k3M5ouTp.js → QrScannerModal-xKD_ntKp.js} +1 -1
  61. package/src/assets/web-panel/assets/{QuickAsk-CMji45PH.js → QuickAsk-D3y_A6FV.js} +1 -1
  62. package/src/assets/web-panel/assets/{Recommend-DyoZYPls.js → Recommend-BjKM-YC2.js} +1 -1
  63. package/src/assets/web-panel/assets/{RemoteSession-s1gR38IO.js → RemoteSession-CgqKMXG4.js} +2 -2
  64. package/src/assets/web-panel/assets/{Reputation-D4hIs4vV.js → Reputation-Ci2GjH5p.js} +1 -1
  65. package/src/assets/web-panel/assets/{Row-mzE-ElTg.js → Row-B0-T2BSh.js} +1 -1
  66. package/src/assets/web-panel/assets/{RssFeed-cg7J3hI6.js → RssFeed-Bet-ur-r.js} +3 -3
  67. package/src/assets/web-panel/assets/{Search-6M0TkGSZ.js → Search-DWtRAS2R.js} +1 -1
  68. package/src/assets/web-panel/assets/{Security-B1GQ67qh.js → Security-BDfu2Qn6.js} +4 -4
  69. package/src/assets/web-panel/assets/{Services-D_RwU_5S.js → Services-CvJmvSMM.js} +2 -2
  70. package/src/assets/web-panel/assets/{Skeleton-TZjk-dsW.js → Skeleton-CEbrKpdC.js} +1 -1
  71. package/src/assets/web-panel/assets/{Skills-CG6FcaCV.js → Skills-CjVeiETf.js} +1 -1
  72. package/src/assets/web-panel/assets/{Sla-BI190QDv.js → Sla-Dibypxum.js} +1 -1
  73. package/src/assets/web-panel/assets/{SpeechSettings-BWmxF2Wu.js → SpeechSettings-XflYXp7a.js} +1 -1
  74. package/src/assets/web-panel/assets/{SyncSettings-CwPiGw6L.js → SyncSettings-ro1Ivx1E.js} +2 -2
  75. package/src/assets/web-panel/assets/{Tasks-BIXgCeSk.js → Tasks-CHq1qFbo.js} +1 -1
  76. package/src/assets/web-panel/assets/{Templates-CQFgGCoK.js → Templates-CRnUZxtZ.js} +1 -1
  77. package/src/assets/web-panel/assets/{Tenant-DAelEdkL.js → Tenant-jUX72JCA.js} +1 -1
  78. package/src/assets/web-panel/assets/{Terminal-BbqWK6qh.js → Terminal-BBhAs7pt.js} +2 -2
  79. package/src/assets/web-panel/assets/{TimelineRenderer-cmG3zvY5.js → TimelineRenderer-CD5M3RGp.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tokens-C8444NKU.js → Tokens-sah3v0gu.js} +1 -1
  81. package/src/assets/web-panel/assets/{Trigger-C1Rpnz0I.js → Trigger-BNT3Uz3s.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trust-u4koPiFD.js → Trust-BytMGPMo.js} +1 -1
  83. package/src/assets/web-panel/assets/{UkeySign-oPWKn80Z.js → UkeySign-BkYVMRQs.js} +1 -1
  84. package/src/assets/web-panel/assets/{VideoEditing-D0CUUY_5.js → VideoEditing-psvb5Q7Y.js} +1 -1
  85. package/src/assets/web-panel/assets/{Wallet-fu9pIAbt.js → Wallet-PFQTW0MH.js} +4 -4
  86. package/src/assets/web-panel/assets/{WebAuthn-Bc5ciuOx.js → WebAuthn-DgO-OwRT.js} +5 -5
  87. package/src/assets/web-panel/assets/{WorkflowEditor-BCin4_4N.js → WorkflowEditor-DL2l9VNl.js} +1 -1
  88. package/src/assets/web-panel/assets/{chat-B2jbM-XN.js → chat-C84akEzN.js} +1 -1
  89. package/src/assets/web-panel/assets/{colors-CUVoUQ_2.js → colors-DzTWuQKP.js} +1 -1
  90. package/src/assets/web-panel/assets/{compact-item-DgOGpkRH.js → compact-item-CR9LJQFv.js} +1 -1
  91. package/src/assets/web-panel/assets/{createContext-DIxU6eKI.js → createContext-CTTov5Kn.js} +1 -1
  92. package/src/assets/web-panel/assets/devWarning-BOhvmlpc.js +1 -0
  93. package/src/assets/web-panel/assets/{hasIn-DoKRKMav.js → hasIn-DALj523o.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-i5MB455u.js → index-3-XJoYgX.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-CLdpHe6w.js → index-7ux_XohH.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-B3F_p8NA.js → index-AXnERsyV.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-D2yo6ast.js → index-B2qpjU-D.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-CWbL1-N0.js → index-B6QOJbSn.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-DtyAuGOm.js → index-BDyt57zL.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DpTFx8Xx.js → index-BHRXKiU1.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-CF80xxPG.js → index-BKNIzw0U.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-BRMEO2Tl.js → index-BNaQt49r.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-ByjrulIZ.js → index-Be6Os5S8.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-BCLeNqIL.js → index-C5eeMl_2.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-DJMHnbmu.js → index-CNmTDXmf.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-2flsPFIX.js → index-CXTEpfGe.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-BwYofQJg.js → index-CXaCRXN4.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-B5ySiGYy.js → index-CZhhFQi9.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-CeWSw-z5.js → index-Cef0n4k_.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-C846lPGD.js → index-CjkPDSX4.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-C9TsO9T9.js → index-CmELknPe.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-CqlwIjJx.js → index-CnxjXIsK.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-Co4lDEk-.js → index-CqUgXYIQ.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-Cj-us-D_.js → index-CunGDV0g.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-BFUprhNd.js → index-D0MqUnKO.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-DGTZdZOE.js → index-D9ScRFxz.js} +3 -3
  117. package/src/assets/web-panel/assets/{index-C88m9lsi.js → index-DBIPnoTj.js} +1 -1
  118. package/src/assets/web-panel/assets/index-DDyMJexx.js +1 -0
  119. package/src/assets/web-panel/assets/{index-BXb-Smmm.js → index-DH6OG-ci.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-eTWPaeBI.js → index-DZER6Lj3.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-Cskz--fd.js → index-D_Bg0LdK.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-D-ufbAJB.js → index-Dah8M4l2.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-DHugFl3v.js → index-DjE_ew7U.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-B9mSYovv.js → index-DtW6Zr_i.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-Ds8r3Fzb.js → index-DxdzSljS.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-CPXdBnGi.js → index-QW0EXx14.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-B-f6l4Vm.js → index-W9axN_Ce.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-CpvyOt5Z.js → index-_8vetPbU.js} +1 -1
  129. package/src/assets/web-panel/assets/index-btiojFYn.js +1 -0
  130. package/src/assets/web-panel/assets/{index-eYxUASSG.js → index-eJcFleIV.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-be8SonCh.js → index-hzzTITR9.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-BtSPhEyC.js → index-s4CFyn-n.js} +1 -1
  133. package/src/assets/web-panel/assets/{initDefaultProps-B4chl7iR.js → initDefaultProps-JuW8mFj7.js} +1 -1
  134. package/src/assets/web-panel/assets/{motion-DruN9h96.js → motion-Cwb0HBve.js} +1 -1
  135. package/src/assets/web-panel/assets/{move-Cl0UtCgU.js → move-DHokzMgu.js} +1 -1
  136. package/src/assets/web-panel/assets/{mtc-parser-FX2ttw70.js → mtc-parser-DX31y6QS.js} +1 -1
  137. package/src/assets/web-panel/assets/{omit-BDCneY46.js → omit-BCIUYDA6.js} +1 -1
  138. package/src/assets/web-panel/assets/{pickAttrs-DycsEg8b.js → pickAttrs-DMCj4EoZ.js} +1 -1
  139. package/src/assets/web-panel/assets/{placementArrow-Bc-dBuMv.js → placementArrow-Dy5K-u1s.js} +1 -1
  140. package/src/assets/web-panel/assets/{responsiveObserve--Wwaf8lu.js → responsiveObserve-DkGeZu54.js} +1 -1
  141. package/src/assets/web-panel/assets/{slide-vDmHQqHH.js → slide-Dc5dyJdg.js} +1 -1
  142. package/src/assets/web-panel/assets/{statusUtils-9c52yv3G.js → statusUtils-DIUBjOaC.js} +1 -1
  143. package/src/assets/web-panel/assets/{styleChecker-BT4BiO6_.js → styleChecker-DmyEOxm5.js} +1 -1
  144. package/src/assets/web-panel/assets/{useFlexGapSupport-C7XxWPcP.js → useFlexGapSupport-FRhakk1e.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFs-BHoMqh4i.js → useFs-clXyV1WQ.js} +1 -1
  146. package/src/assets/web-panel/assets/{usePersonalDataHub-BOLxvsAG.js → usePersonalDataHub-UF6DG41z.js} +1 -1
  147. package/src/assets/web-panel/assets/{vnode-CA7poeeP.js → vnode-CoCt95G7.js} +1 -1
  148. package/src/assets/web-panel/assets/{zoom-B_sAn-co.js → zoom-yVWt-ENm.js} +1 -1
  149. package/src/assets/web-panel/index.html +1 -1
  150. package/src/commands/graph.js +215 -5
  151. package/src/commands/team-distributed.js +342 -2
  152. package/src/commands/team.js +169 -7
  153. package/src/data/changelog.json +13 -0
  154. package/src/generated/cc-agent-protocol.schema.json +6 -1
  155. package/src/lib/agent-team/task-lease.js +315 -0
  156. package/src/lib/agent-team/team-agent-stream.js +16 -0
  157. package/src/lib/agent-team/team-distributed-graph-bridge.js +257 -0
  158. package/src/lib/agent-team/team-distributed-graph-writer.js +523 -0
  159. package/src/lib/agent-team/team-distributed-queue.js +251 -0
  160. package/src/lib/agent-team/team-graph-runtime-adapter.js +1918 -0
  161. package/src/lib/agent-team/team-runner.js +225 -2
  162. package/src/lib/app-server/graph-runtime.js +754 -0
  163. package/src/lib/app-server/rollout-store.js +32 -0
  164. package/src/lib/app-server/server.js +140 -0
  165. package/src/lib/autonomous-agent.js +11 -0
  166. package/src/lib/cowork-graph-authority-adapter.js +455 -0
  167. package/src/lib/dynamic-workflow-facade.js +83 -16
  168. package/src/lib/graph-kernel/adapters.js +93 -20
  169. package/src/lib/graph-kernel/authority.js +324 -0
  170. package/src/lib/graph-kernel/compiler.js +1 -8
  171. package/src/lib/graph-kernel/cutover-authority-resolver.js +219 -0
  172. package/src/lib/graph-kernel/cutover-ledger.js +650 -0
  173. package/src/lib/graph-kernel/event-store.js +15 -1
  174. package/src/lib/graph-kernel/graph-runtime-surfaces.json +1427 -0
  175. package/src/lib/graph-kernel/index.js +4 -0
  176. package/src/lib/graph-kernel/migration-saga.js +309 -0
  177. package/src/lib/graph-kernel/runtime-surface-manifest.js +481 -0
  178. package/src/lib/graph-kernel/runtime.js +661 -24
  179. package/src/lib/graph-kernel/store-cutover-evidence.js +354 -0
  180. package/src/lib/graph-kernel/trace-reducer.js +6 -0
  181. package/src/lib/graph-kernel/trigger-adapter.js +60 -3
  182. package/src/lib/legacy-runtime-authority.js +160 -0
  183. package/src/lib/orchestrator.js +28 -0
  184. package/src/lib/scheduler-kernel/graph-authority-adapter.js +512 -0
  185. package/src/lib/scheduler-kernel/runtime.js +75 -2
  186. package/src/assets/web-panel/assets/PdhVaultBrowser-BiaZfQIM.js +0 -7
  187. package/src/assets/web-panel/assets/devWarning-DiSlgCC4.js +0 -1
  188. package/src/assets/web-panel/assets/index-9WIQEHvv.js +0 -1
  189. package/src/assets/web-panel/assets/index-B7mDobAl.js +0 -1
@@ -11,6 +11,15 @@ import crypto from "node:crypto";
11
11
  import fs from "node:fs";
12
12
  import path from "node:path";
13
13
  import { TeamDistributedQueue } from "../lib/agent-team/team-distributed-queue.js";
14
+ import { TeamDistributedGraphBridge } from "../lib/agent-team/team-distributed-graph-bridge.js";
15
+ import {
16
+ distributedTeamGraphRequestId,
17
+ distributedTeamGraphRunId,
18
+ distributedTeamGraphSettlementPayload,
19
+ TeamDistributedGraphWriter,
20
+ verifyDistributedTeamGraphResponse,
21
+ } from "../lib/agent-team/team-distributed-graph-writer.js";
22
+ import { TeamGraphRuntimeAdapter } from "../lib/agent-team/team-graph-runtime-adapter.js";
14
23
  import { TeamRunner } from "../lib/agent-team/team-runner.js";
15
24
  import {
16
25
  summarizeWorktreeCheckpoint,
@@ -20,6 +29,9 @@ import { TeamProcessCheckpointBroker } from "../lib/agent-team/team-process-chec
20
29
  import { CostBudget } from "../lib/cost-budget.js";
21
30
  import { resolveTeamTaskContract } from "../lib/agent-team/team-task-contract.js";
22
31
  import executionBroker from "../lib/process-execution-broker/index.js";
32
+ import { GraphEventStore } from "../lib/graph-kernel/event-store.js";
33
+ import { createRuntimeGraphCutoverAuthorityResolver } from "../lib/graph-kernel/cutover-authority-resolver.js";
34
+ import { JsonlRolloutStore } from "../lib/app-server/rollout-store.js";
23
35
  import {
24
36
  SECURE_FILE_IDENTITY_ERROR,
25
37
  SecureFileIdentityError,
@@ -35,6 +47,11 @@ const MAX_AGENT_USAGE_RECORDS = 64;
35
47
  const SHELL_WORKTREE_MODE = "shell-worktree";
36
48
  const AGENT_WORKTREE_MODE = "agent-worktree";
37
49
  const DISTRIBUTED_MODES = new Set([SHELL_WORKTREE_MODE, AGENT_WORKTREE_MODE]);
50
+ const DISTRIBUTED_GRAPH_AUTHORITY_MODES = new Set([
51
+ "legacy",
52
+ "shadow",
53
+ "canonical",
54
+ ]);
38
55
  const AGENT_OPTION_FIELDS = new Set([
39
56
  "permissionMode",
40
57
  "model",
@@ -175,6 +192,54 @@ function distributedMode(value = SHELL_WORKTREE_MODE) {
175
192
  return mode;
176
193
  }
177
194
 
195
+ export function distributedGraphAuthorityMode(
196
+ value,
197
+ env = process.env,
198
+ {
199
+ runKey = undefined,
200
+ optIn = false,
201
+ resolver = undefined,
202
+ resolveCutover = true,
203
+ } = {},
204
+ ) {
205
+ const configured = String(
206
+ value ?? env.CHAINLESSCHAIN_GRAPH_CLI_TEAM ?? "legacy",
207
+ )
208
+ .trim()
209
+ .toLowerCase();
210
+ if (!DISTRIBUTED_GRAPH_AUTHORITY_MODES.has(configured)) {
211
+ fail(
212
+ "TEAM_QUEUE_GRAPH_AUTHORITY_UNSUPPORTED",
213
+ "Distributed Graph authority must be legacy, shadow, or canonical",
214
+ );
215
+ }
216
+ if (!resolveCutover) return configured;
217
+ const authorityResolver =
218
+ resolver ||
219
+ createRuntimeGraphCutoverAuthorityResolver({
220
+ env,
221
+ surface: "cli_team",
222
+ entryId: "cli-team-distributed",
223
+ fallbackMode: configured,
224
+ });
225
+ const resolved =
226
+ typeof authorityResolver === "function"
227
+ ? authorityResolver({ runKey, optIn })
228
+ : authorityResolver.resolve({
229
+ runKey,
230
+ optIn,
231
+ fallbackMode: configured,
232
+ });
233
+ const mode = typeof resolved === "string" ? resolved : resolved?.mode;
234
+ if (!DISTRIBUTED_GRAPH_AUTHORITY_MODES.has(mode)) {
235
+ fail(
236
+ "TEAM_QUEUE_GRAPH_AUTHORITY_UNSUPPORTED",
237
+ "Distributed Graph authority resolver returned an invalid mode",
238
+ );
239
+ }
240
+ return mode;
241
+ }
242
+
178
243
  function stableAgentText(
179
244
  value,
180
245
  label,
@@ -947,6 +1012,7 @@ function authorityFor({
947
1012
  mode,
948
1013
  baseTarget,
949
1014
  checkpoint,
1015
+ graphAuthorityMode,
950
1016
  agent = null,
951
1017
  }) {
952
1018
  const authority = {
@@ -955,6 +1021,7 @@ function authorityFor({
955
1021
  repoRoot,
956
1022
  runId,
957
1023
  mode,
1024
+ graphAuthorityMode,
958
1025
  baseTarget: {
959
1026
  branch: baseTarget.branch ?? null,
960
1027
  commitOid: baseTarget.commitOid,
@@ -988,6 +1055,11 @@ function assertAuthority(
988
1055
  path.isAbsolute(checkpoint.stateDir)
989
1056
  : checkpoint.stateDir === null);
990
1057
  const modeValid = DISTRIBUTED_MODES.has(authority?.mode);
1058
+ const graphAuthorityMode = distributedGraphAuthorityMode(
1059
+ authority?.graphAuthorityMode ?? "legacy",
1060
+ {},
1061
+ { resolveCutover: false },
1062
+ );
991
1063
  let agent = null;
992
1064
  if (authority?.mode === AGENT_WORKTREE_MODE) {
993
1065
  agent = normalizeAgentAuthority(authority.agent);
@@ -1001,6 +1073,7 @@ function assertAuthority(
1001
1073
  authority?.kind === AUTHORITY_KIND &&
1002
1074
  authority?.version === AUTHORITY_VERSION &&
1003
1075
  modeValid &&
1076
+ DISTRIBUTED_GRAPH_AUTHORITY_MODES.has(graphAuthorityMode) &&
1004
1077
  authority?.runId === runId &&
1005
1078
  samePath(authority?.repoRoot || "", repoRoot) &&
1006
1079
  typeof authority?.baseTarget?.commitOid === "string" &&
@@ -1039,6 +1112,7 @@ function assertAuthority(
1039
1112
  }
1040
1113
  return {
1041
1114
  ...authority,
1115
+ graphAuthorityMode,
1042
1116
  checkpoint: checkpointAuthority(checkpoint),
1043
1117
  ...(agent ? { agent } : {}),
1044
1118
  };
@@ -1247,6 +1321,11 @@ function workerRegistry(queue, workerId, { settlementForLease = null } = {}) {
1247
1321
  function defaultDependencies(overrides = {}) {
1248
1322
  return {
1249
1323
  Queue: TeamDistributedQueue,
1324
+ GraphBridge: TeamDistributedGraphBridge,
1325
+ GraphWriter: TeamDistributedGraphWriter,
1326
+ GraphAdapter: TeamGraphRuntimeAdapter,
1327
+ GraphEventStore,
1328
+ RolloutStore: JsonlRolloutStore,
1250
1329
  Runner: TeamRunner,
1251
1330
  WorktreeCoordinator: TeamWorktreeCoordinator,
1252
1331
  CheckpointBroker: TeamProcessCheckpointBroker,
@@ -1306,6 +1385,21 @@ function openPinnedQueue(options, deps) {
1306
1385
  `Worker/finalizer requested ${expectedMode}, but the pinned queue authority is ${authority.mode}`,
1307
1386
  );
1308
1387
  }
1388
+ if (
1389
+ options.graphAuthority != null &&
1390
+ distributedGraphAuthorityMode(
1391
+ options.graphAuthority,
1392
+ {},
1393
+ {
1394
+ resolveCutover: false,
1395
+ },
1396
+ ) !== authority.graphAuthorityMode
1397
+ ) {
1398
+ fail(
1399
+ "TEAM_QUEUE_AUTHORITY_MISMATCH",
1400
+ `Command requested ${options.graphAuthority} Graph authority, but the pinned queue authority is ${authority.graphAuthorityMode}`,
1401
+ );
1402
+ }
1309
1403
  if (
1310
1404
  options.managedCheckpoint === true &&
1311
1405
  authority.checkpoint.enabled !== true
@@ -1334,6 +1428,36 @@ function openPinnedQueue(options, deps) {
1334
1428
  return { queue, snapshot, authority, repoRoot, statePath, runId };
1335
1429
  }
1336
1430
 
1431
+ function distributedGraphResources(opened, deps) {
1432
+ const bridgeDirectory = assertExternalCheckpointStateDir(
1433
+ deps.GraphBridge.directoryForState(opened.statePath),
1434
+ opened.repoRoot,
1435
+ opened.statePath,
1436
+ );
1437
+ const eventDirectory = assertExternalCheckpointStateDir(
1438
+ `${opened.statePath}.graph-runs`,
1439
+ opened.repoRoot,
1440
+ opened.statePath,
1441
+ );
1442
+ const bridge = new deps.GraphBridge({
1443
+ directory: bridgeDirectory,
1444
+ queueId: opened.snapshot.queueId,
1445
+ runId: opened.runId,
1446
+ now: deps.now,
1447
+ });
1448
+ const eventStore = new deps.GraphEventStore({
1449
+ rolloutStore: new deps.RolloutStore({
1450
+ directory: eventDirectory,
1451
+ now: deps.now,
1452
+ }),
1453
+ });
1454
+ const graphRunId = distributedTeamGraphRunId({
1455
+ queueId: opened.snapshot.queueId,
1456
+ runId: opened.runId,
1457
+ });
1458
+ return { bridge, eventStore, graphRunId, bridgeDirectory, eventDirectory };
1459
+ }
1460
+
1337
1461
  export function initDistributedQueue(options, dependencyOverrides = {}) {
1338
1462
  if (options.queueId != null || options.authorityDigest != null) {
1339
1463
  fail(
@@ -1346,6 +1470,14 @@ export function initDistributedQueue(options, dependencyOverrides = {}) {
1346
1470
  const runId = requireText(options.runId, "--run-id");
1347
1471
  const statePath = assertExternalStatePath(options.state, repoRoot);
1348
1472
  const mode = distributedMode(options.mode);
1473
+ const graphAuthorityMode = distributedGraphAuthorityMode(
1474
+ options.graphAuthority,
1475
+ process.env,
1476
+ {
1477
+ runKey: runId,
1478
+ optIn: options.graphCanaryOptIn === true,
1479
+ },
1480
+ );
1349
1481
  if (options.checkpointStateDir && options.managedCheckpoint !== true) {
1350
1482
  fail(
1351
1483
  "TEAM_QUEUE_INVALID_OPTION",
@@ -1406,6 +1538,7 @@ export function initDistributedQueue(options, dependencyOverrides = {}) {
1406
1538
  repoRoot,
1407
1539
  runId,
1408
1540
  mode,
1541
+ graphAuthorityMode,
1409
1542
  baseTarget,
1410
1543
  checkpoint: {
1411
1544
  enabled: options.managedCheckpoint === true,
@@ -1429,6 +1562,7 @@ export function initDistributedQueue(options, dependencyOverrides = {}) {
1429
1562
  repoRoot,
1430
1563
  runId,
1431
1564
  mode,
1565
+ graphAuthorityMode,
1432
1566
  authority,
1433
1567
  budget,
1434
1568
  checkpoint: checkpointAuthority({
@@ -2286,6 +2420,55 @@ export async function runDistributedWorker(options, dependencyOverrides = {}) {
2286
2420
  options.workerId || `worker-${process.pid}-${crypto.randomUUID()}`,
2287
2421
  "--worker-id",
2288
2422
  );
2423
+ const graphResources =
2424
+ opened.authority.graphAuthorityMode !== "legacy"
2425
+ ? distributedGraphResources(opened, deps)
2426
+ : null;
2427
+ const graphTimeoutMs =
2428
+ optionalPositive(options.graphTimeoutMs, "--graph-timeout-ms", {
2429
+ integer: true,
2430
+ }) ?? 30_000;
2431
+ const graphPollMs =
2432
+ optionalPositive(options.graphPollMs, "--graph-poll-ms", {
2433
+ integer: true,
2434
+ }) ?? 25;
2435
+ const requestGraph = graphResources
2436
+ ? async ({ type, key, task, lease, payload = {}, wait = true }) => {
2437
+ const durableLease = attemptLease(
2438
+ { ...task, lease, metadata: { ...task?.metadata, lease } },
2439
+ key,
2440
+ );
2441
+ const binding = {
2442
+ queueId: opened.snapshot.queueId,
2443
+ taskKey: key,
2444
+ lease: durableLease,
2445
+ };
2446
+ const request = graphResources.bridge.request({
2447
+ requestId: distributedTeamGraphRequestId(type, binding),
2448
+ type,
2449
+ taskKey: key,
2450
+ workerId,
2451
+ lease: durableLease,
2452
+ payload,
2453
+ });
2454
+ if (!wait) return request;
2455
+ const response = await graphResources.bridge.waitForResponse(
2456
+ request.requestId,
2457
+ {
2458
+ timeoutMs: graphTimeoutMs,
2459
+ pollMs: graphPollMs,
2460
+ sleep: deps.sleep,
2461
+ },
2462
+ );
2463
+ verifyDistributedTeamGraphResponse({
2464
+ response,
2465
+ request,
2466
+ eventStore: graphResources.eventStore,
2467
+ runId: graphResources.graphRunId,
2468
+ });
2469
+ return response;
2470
+ }
2471
+ : null;
2289
2472
  const checkpointBroker = opened.authority.checkpoint.enabled
2290
2473
  ? new deps.CheckpointBroker({
2291
2474
  stateDir: opened.authority.checkpoint.stateDir,
@@ -2421,10 +2604,64 @@ export async function runDistributedWorker(options, dependencyOverrides = {}) {
2421
2604
  ? null
2422
2605
  : wallBudgetForQueueStats(queueStats, opened.queue, deps),
2423
2606
  emitHook: async () => {},
2424
- beforeTask: ({ task }) => {
2607
+ beforeTask: async ({ key, task, lease }) => {
2425
2608
  importCompletedDependencies(coordinator, opened.queue, task);
2426
2609
  importRetryWorkspace(coordinator, task);
2610
+ if (requestGraph) {
2611
+ if (opened.authority.graphAuthorityMode === "canonical") {
2612
+ await requestGraph({ type: "dispatch", key, task, lease });
2613
+ } else {
2614
+ try {
2615
+ await requestGraph({
2616
+ type: "dispatch",
2617
+ key,
2618
+ task,
2619
+ lease,
2620
+ wait: false,
2621
+ });
2622
+ } catch (error) {
2623
+ events.push({
2624
+ type: "graph_shadow_observation_failed",
2625
+ key,
2626
+ message: error?.message || String(error),
2627
+ });
2628
+ }
2629
+ }
2630
+ }
2427
2631
  },
2632
+ canonicalSettlement:
2633
+ requestGraph && opened.authority.graphAuthorityMode === "canonical"
2634
+ ? (settlement) =>
2635
+ requestGraph({
2636
+ type: "settle",
2637
+ key: settlement.key,
2638
+ task: settlement.task,
2639
+ lease: settlement.lease,
2640
+ payload: distributedTeamGraphSettlementPayload(settlement),
2641
+ })
2642
+ : null,
2643
+ afterTask:
2644
+ requestGraph && opened.authority.graphAuthorityMode === "shadow"
2645
+ ? async (settlement) => {
2646
+ if (!["completed", "failed"].includes(settlement.status)) return;
2647
+ try {
2648
+ await requestGraph({
2649
+ type: "settle",
2650
+ key: settlement.key,
2651
+ task: settlement.task,
2652
+ lease: settlement.lease,
2653
+ payload: distributedTeamGraphSettlementPayload(settlement),
2654
+ wait: false,
2655
+ });
2656
+ } catch (error) {
2657
+ events.push({
2658
+ type: "graph_shadow_observation_failed",
2659
+ key: settlement.key,
2660
+ message: error?.message || String(error),
2661
+ });
2662
+ }
2663
+ }
2664
+ : null,
2428
2665
  runTask,
2429
2666
  onEvent: (event) => events.push(event),
2430
2667
  });
@@ -2463,8 +2700,17 @@ export async function runDistributedWorker(options, dependencyOverrides = {}) {
2463
2700
  durableBudgetReason,
2464
2701
  stats: status.stats,
2465
2702
  };
2703
+ const graphBridgeSnapshot = graphResources?.bridge.snapshot() || null;
2466
2704
  return {
2467
2705
  workerId,
2706
+ graphAuthorityMode: opened.authority.graphAuthorityMode,
2707
+ graphBridge: graphResources
2708
+ ? {
2709
+ directory: graphResources.bridgeDirectory,
2710
+ head: graphBridgeSnapshot.head,
2711
+ revision: graphBridgeSnapshot.revision,
2712
+ }
2713
+ : null,
2468
2714
  summary,
2469
2715
  queue: {
2470
2716
  queueId: status.queueId,
@@ -2480,6 +2726,75 @@ export async function runDistributedWorker(options, dependencyOverrides = {}) {
2480
2726
  };
2481
2727
  }
2482
2728
 
2729
+ export async function runDistributedGraphWriter(
2730
+ options,
2731
+ dependencyOverrides = {},
2732
+ ) {
2733
+ const deps = defaultDependencies(dependencyOverrides);
2734
+ const opened = openPinnedQueue(options, deps);
2735
+ if (opened.authority.graphAuthorityMode === "legacy") {
2736
+ fail(
2737
+ "TEAM_QUEUE_GRAPH_WRITER_NOT_CANONICAL",
2738
+ "Distributed Graph writer requires a queue initialized with shadow or canonical Graph authority",
2739
+ );
2740
+ }
2741
+ const resources = distributedGraphResources(opened, deps);
2742
+ const adapter = new deps.GraphAdapter({
2743
+ eventStore: resources.eventStore,
2744
+ now: deps.now,
2745
+ });
2746
+ const writer = new deps.GraphWriter({
2747
+ queue: opened.queue,
2748
+ bridge: resources.bridge,
2749
+ adapter,
2750
+ runId: resources.graphRunId,
2751
+ executionMode: opened.authority.mode,
2752
+ authorityMode: opened.authority.graphAuthorityMode,
2753
+ budget: opened.snapshot.budget?.limits || {},
2754
+ });
2755
+ writer.open();
2756
+ const pollMs =
2757
+ optionalPositive(options.pollMs, "--poll-ms", { integer: true }) ?? 100;
2758
+ let processed = 0;
2759
+ let terminalIdlePasses = 0;
2760
+ let view;
2761
+ for (;;) {
2762
+ processed += writer.processPending().length;
2763
+ view = opened.queue.statusView();
2764
+ const bridgePending = resources.bridge.pending().length;
2765
+ const terminal =
2766
+ view.stats.completed + view.stats.cancelled === view.stats.total &&
2767
+ view.stats.adjudicationRequired === 0;
2768
+ terminalIdlePasses =
2769
+ terminal && bridgePending === 0 ? terminalIdlePasses + 1 : 0;
2770
+ if (
2771
+ options.once === true ||
2772
+ terminalIdlePasses >= 2 ||
2773
+ (view.stats.leased === 0 &&
2774
+ bridgePending === 0 &&
2775
+ (view.stats.adjudicationRequired > 0 || view.stats.budget?.reason))
2776
+ ) {
2777
+ break;
2778
+ }
2779
+ await deps.sleep(pollMs);
2780
+ }
2781
+ const status = writer.status();
2782
+ return {
2783
+ queueId: view.queueId,
2784
+ graphAuthorityMode: opened.authority.graphAuthorityMode,
2785
+ processed,
2786
+ stats: view.stats,
2787
+ graph: status.graph,
2788
+ bridge: {
2789
+ directory: resources.bridgeDirectory,
2790
+ eventDirectory: resources.eventDirectory,
2791
+ revision: status.bridge.revision,
2792
+ head: status.bridge.head,
2793
+ pending: status.bridge.requests.length - status.bridge.responses.length,
2794
+ },
2795
+ };
2796
+ }
2797
+
2483
2798
  function finalizationOperationId(snapshot, options) {
2484
2799
  if (options.operationId) {
2485
2800
  return requireText(options.operationId, "--operation-id");
@@ -3182,7 +3497,11 @@ function baseAuthorityOptions(command) {
3182
3497
  function commonAuthorityOptions(command) {
3183
3498
  return baseAuthorityOptions(command)
3184
3499
  .option("--queue-id <id>", "Pinned queue id")
3185
- .option("--authority-digest <sha256>", "Pinned authority digest");
3500
+ .option("--authority-digest <sha256>", "Pinned authority digest")
3501
+ .option(
3502
+ "--graph-authority <mode>",
3503
+ "Verify pinned Graph authority: legacy, shadow, or canonical",
3504
+ );
3186
3505
  }
3187
3506
 
3188
3507
  /** Register beneath the existing `cc team` Commander command. */
@@ -3209,6 +3528,14 @@ export function registerTeamDistributedCommands(
3209
3528
  "shell-worktree or agent-worktree",
3210
3529
  SHELL_WORKTREE_MODE,
3211
3530
  )
3531
+ .option(
3532
+ "--graph-authority <mode>",
3533
+ "Fallback Graph authority: legacy, shadow, or canonical",
3534
+ )
3535
+ .option(
3536
+ "--graph-canary-opt-in",
3537
+ "Opt this new distributed queue into an entry-scoped Graph canary",
3538
+ )
3212
3539
  .option("--max-tasks <n>", "Global task-attempt cap")
3213
3540
  .option("--max-tokens <n>", "Global token cap")
3214
3541
  .option("--max-usd <amount>", "Global USD cap")
@@ -3296,6 +3623,11 @@ export function registerTeamDistributedCommands(
3296
3623
  .option("--ttl-ms <ms>", "Lease TTL")
3297
3624
  .option("--renew-every-ms <ms>", "Lease heartbeat interval")
3298
3625
  .option("--max-tasks <n>", "Local execution cap")
3626
+ .option(
3627
+ "--graph-timeout-ms <ms>",
3628
+ "Wait limit for the canonical Graph writer response",
3629
+ )
3630
+ .option("--graph-poll-ms <ms>", "Canonical Graph response poll interval")
3299
3631
  .option(
3300
3632
  "--managed-checkpoint",
3301
3633
  "Require the queue's pinned managed checkpoint authority",
@@ -3309,6 +3641,14 @@ export function registerTeamDistributedCommands(
3309
3641
  action((options) => runDistributedWorker(options, agentDependencies), log),
3310
3642
  );
3311
3643
 
3644
+ commonAuthorityOptions(
3645
+ queue
3646
+ .command("graph-writer")
3647
+ .description("Own the canonical Graph ledger for distributed workers")
3648
+ .option("--poll-ms <ms>", "Bridge request poll interval")
3649
+ .option("--once", "Process the current bridge frontier and exit"),
3650
+ ).action(action(runDistributedGraphWriter, log));
3651
+
3312
3652
  commonAuthorityOptions(
3313
3653
  queue
3314
3654
  .command("finalize")