chainlesschain 0.166.5 → 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.
- package/package.json +3 -1
- package/src/assets/web-panel/assets/{AIOps-DhCWWRmS.js → AIOps-BlrmQxa2.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BGbZcxSE.js → ActionButton-zyRyLITg.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-CUJNYrmU.js → Analytics-DwGz7OGN.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-ParuJRmc.js → AppLayout-Dc-nj7Zd.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-BMESCkte.js → Artifacts-7Hu3O73p.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-B614pUXR.js → Audit-Bnoe3-fR.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-BKkkvkQl.js → BackgroundAgents-BqYFrDKZ.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-CoFiC_kv.js → Backup-B3hwW1nz.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-Cu4OHz1W.js → BaseInput-XFVxLA4w.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-mxb_SR22.js → Chat-CWRDNw7e.js} +5 -5
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-CsqO-fiV.js → ChatBubbleRenderer-Bf30VM8G.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-BJpZz-5L.js → Checkbox-kFeeBgac.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-ng7fYMi8.js → Codegen-CCxp8xoI.js} +1 -1
- package/src/assets/web-panel/assets/{Col-D751NOsU.js → Col-BLKZalle.js} +1 -1
- package/src/assets/web-panel/assets/{Community-BPVTHvTC.js → Community-DD0eWCez.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-CY42ARxJ.js → Compact-CHqHWdy0.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-Ec3zabvu.js → Compliance-Bw54uPiK.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-Do0oOlj8.js → Cowork-DZ13zKNJ.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-BXu6LGra.js → Cron-Dlj5Jevg.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-Dg1CsWLA.js → Crosschain-Nvz0aR0j.js} +1 -1
- package/src/assets/web-panel/assets/{DID-D1B8O6C9.js → DID-Ct89eUyY.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-DJFnfIVk.js → Dashboard-BHUH5IAe.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-Be6KCHb7.js → Dropdown-BhZG-PO7.js} +1 -1
- package/src/assets/web-panel/assets/EmailListRenderer-ae4RVwwJ.js +1 -0
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-CWt6WUoP.js → FamilyGuardDashboard-AOcxLfLr.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-Ba7bRkZh.js → Federation-BK2PJQOF.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CNa8GTAM.js → FormItemContext-C2n3xO2_.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-DGHg2fio.js → GenericCardRenderer-DcyUVFZq.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DJAgN16e.js → Git-tBae9Lt8.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-DqIapin6.js → Governance-DmNR3AP4.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-B00_KwDW.js → Inference-CoseEigi.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-D1_ZCehX.js → KnowledgeGraph-Bdjd1sxr.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-22jGgUmw.js → Logs-CtlkKIcn.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-DOIQQUTp.js → MarkdownRenderer-CZsTBEQE.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-ClIyNRL6.js → Marketplace-BTYb7nEx.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BhPsaaJr.js → McpTools-D0iUdW3P.js} +2 -2
- package/src/assets/web-panel/assets/{Memory-BXNDHgEH.js → Memory--gwI7w4Y.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BeSEujLm.js → MobileBridge-JmFBi24T.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-DKJjWZ6t.js → MobileProjects-BK01cQRx.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-CsX4lo0h.js → Mtc-u7avzyoO.js} +5 -5
- package/src/assets/web-panel/assets/{MtcAudit-CdGiWPEN.js → MtcAudit-gT3z5fo_.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-C1aJmYGd.js → Multisig-BIqZTz5n.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-ClOwZKGW.js → NLProgramming-DdhVfXYq.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-xqZJkp5X.js → Notes-CBlyUmY3.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-D_8hg6E5.js → NotificationSettings-DSyI26N3.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-BNMgCFHY.js → OrderTableRenderer-B7IEuNz4.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-DQjjPQ9u.js → Organization-ozhi4kGS.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-D0g51CZb.js → Overflow-CBy57RVM.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-BqDCDnon.js → P2P-CA-ZRv77.js} +2 -2
- package/src/assets/web-panel/assets/PdhVaultBrowser-DOHc9zm8.js +7 -0
- package/src/assets/web-panel/assets/{Permissions-D9Mk4hzw.js → Permissions-DiP632GP.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-Cksd0Ft-.js → PersonalDataHub-AnU8O-SS.js} +5 -5
- package/src/assets/web-panel/assets/{Pipeline-ALaa1U0w.js → Pipeline-DDibOUaP.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-M-mmVDtr.js → Privacy-D421t36T.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-Bn39Z5S7.js → ProjectInit-DR879ZPJ.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-6Xmsc-zo.js → ProjectSettings-Ded8o6aY.js} +2 -2
- package/src/assets/web-panel/assets/Projects-BHPxiucB.js +1 -0
- package/src/assets/web-panel/assets/{Providers-FLNmdOWT.js → Providers-Boivuu-E.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-C5PNS5N7.js → QrScannerModal-xKD_ntKp.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-CHSVdvQA.js → QuickAsk-D3y_A6FV.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-BRwvF4m9.js → Recommend-BjKM-YC2.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-DeAfmrU2.js → RemoteSession-CgqKMXG4.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-Be_YQzm9.js → Reputation-Ci2GjH5p.js} +1 -1
- package/src/assets/web-panel/assets/{Row-Bv3cbL2A.js → Row-B0-T2BSh.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-DsTYAdrh.js → RssFeed-Bet-ur-r.js} +2 -2
- package/src/assets/web-panel/assets/{Search-2gch6_kT.js → Search-DWtRAS2R.js} +1 -1
- package/src/assets/web-panel/assets/{Security-pkS2eKdn.js → Security-BDfu2Qn6.js} +4 -4
- package/src/assets/web-panel/assets/{Services-D1ns1NlD.js → Services-CvJmvSMM.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-B-9nVmze.js → Skeleton-CEbrKpdC.js} +1 -1
- package/src/assets/web-panel/assets/Skills-CjVeiETf.js +1 -0
- package/src/assets/web-panel/assets/{Sla-CI9DZg-s.js → Sla-Dibypxum.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-CH0mQsl3.js → SpeechSettings-XflYXp7a.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-BHeEVZyN.js → SyncSettings-ro1Ivx1E.js} +2 -2
- package/src/assets/web-panel/assets/Tasks-CHq1qFbo.js +1 -0
- package/src/assets/web-panel/assets/{Templates--GvWvJEB.js → Templates-CRnUZxtZ.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-L-FgZD-r.js → Tenant-jUX72JCA.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-DMNfs5hK.js → Terminal-BBhAs7pt.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-DFzInCAj.js → TimelineRenderer-CD5M3RGp.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-Bnh73Gam.js → Tokens-sah3v0gu.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-BO-fMwq8.js → Trigger-BNT3Uz3s.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-CX-HXcRl.js → Trust-BytMGPMo.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-C8AOFGVL.js → UkeySign-BkYVMRQs.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-B_bJ6BO2.js → VideoEditing-psvb5Q7Y.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-Ccd3u1t4.js → Wallet-PFQTW0MH.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DVSL5e6o.js → WebAuthn-DgO-OwRT.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-DqFq6xGO.js → WorkflowEditor-DL2l9VNl.js} +1 -1
- package/src/assets/web-panel/assets/{chat-s5SEbhS8.js → chat-C84akEzN.js} +1 -1
- package/src/assets/web-panel/assets/{colors-CRFmX1eW.js → colors-DzTWuQKP.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-DCofr-Ii.js → compact-item-CR9LJQFv.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-duu0_qGr.js → createContext-CTTov5Kn.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-BOhvmlpc.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-B0KKSHGi.js → hasIn-DALj523o.js} +1 -1
- package/src/assets/web-panel/assets/{index-PR4YRMxw.js → index-3-XJoYgX.js} +1 -1
- package/src/assets/web-panel/assets/{index-DY6ZHvJw.js → index-7ux_XohH.js} +1 -1
- package/src/assets/web-panel/assets/{index-DFzJlpwu.js → index-AXnERsyV.js} +1 -1
- package/src/assets/web-panel/assets/{index-CaDLq49Y.js → index-B2qpjU-D.js} +1 -1
- package/src/assets/web-panel/assets/{index-CpnGJDxL.js → index-B6QOJbSn.js} +1 -1
- package/src/assets/web-panel/assets/{index-D6sAHm_C.js → index-BDyt57zL.js} +1 -1
- package/src/assets/web-panel/assets/{index-B_8atrbf.js → index-BHRXKiU1.js} +1 -1
- package/src/assets/web-panel/assets/{index-CQWeRqsN.js → index-BKNIzw0U.js} +1 -1
- package/src/assets/web-panel/assets/{index-NiXCoVfh.js → index-BNaQt49r.js} +1 -1
- package/src/assets/web-panel/assets/{index-C5chs_dS.js → index-Be6Os5S8.js} +1 -1
- package/src/assets/web-panel/assets/{index-C3PtUFgB.js → index-C5eeMl_2.js} +1 -1
- package/src/assets/web-panel/assets/{index-4aqbfxrp.js → index-CNmTDXmf.js} +1 -1
- package/src/assets/web-panel/assets/{index-SbxDTh6S.js → index-CXTEpfGe.js} +1 -1
- package/src/assets/web-panel/assets/{index-BWWfogVi.js → index-CXaCRXN4.js} +1 -1
- package/src/assets/web-panel/assets/{index-CIiqGHl0.js → index-CZhhFQi9.js} +1 -1
- package/src/assets/web-panel/assets/{index-D8sxQTSI.js → index-Cef0n4k_.js} +1 -1
- package/src/assets/web-panel/assets/{index-BM48QU3P.js → index-CjkPDSX4.js} +1 -1
- package/src/assets/web-panel/assets/{index-DjZvE3_P.js → index-CmELknPe.js} +1 -1
- package/src/assets/web-panel/assets/{index-BMaM-Yex.js → index-CnxjXIsK.js} +1 -1
- package/src/assets/web-panel/assets/{index-BugberH-.js → index-CqUgXYIQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DeJMQynL.js → index-CunGDV0g.js} +1 -1
- package/src/assets/web-panel/assets/{index-DHHrnUkx.js → index-D0MqUnKO.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ch8O1mrO.js → index-D9ScRFxz.js} +3 -3
- package/src/assets/web-panel/assets/{index-DJrRZ5um.js → index-DBIPnoTj.js} +1 -1
- package/src/assets/web-panel/assets/index-DDyMJexx.js +1 -0
- package/src/assets/web-panel/assets/{index-BDGNTPr6.js → index-DH6OG-ci.js} +1 -1
- package/src/assets/web-panel/assets/{index-DDLVcra4.js → index-DZER6Lj3.js} +1 -1
- package/src/assets/web-panel/assets/{index-B24nGxlB.js → index-D_Bg0LdK.js} +1 -1
- package/src/assets/web-panel/assets/{index-CRjnopxx.js → index-Dah8M4l2.js} +1 -1
- package/src/assets/web-panel/assets/{index-BRpzktuV.js → index-DjE_ew7U.js} +1 -1
- package/src/assets/web-panel/assets/{index-BERyKHMq.js → index-DtW6Zr_i.js} +1 -1
- package/src/assets/web-panel/assets/{index-BCnLafAV.js → index-DxdzSljS.js} +1 -1
- package/src/assets/web-panel/assets/{index-CxvnkXVj.js → index-QW0EXx14.js} +1 -1
- package/src/assets/web-panel/assets/{index-CUFMz21M.js → index-W9axN_Ce.js} +1 -1
- package/src/assets/web-panel/assets/{index-CDCDbWnv.js → index-_8vetPbU.js} +1 -1
- package/src/assets/web-panel/assets/index-btiojFYn.js +1 -0
- package/src/assets/web-panel/assets/{index-oxcFCNJ4.js → index-eJcFleIV.js} +1 -1
- package/src/assets/web-panel/assets/{index-DtPSAUza.js → index-hzzTITR9.js} +1 -1
- package/src/assets/web-panel/assets/{index-DUT3dpdB.js → index-s4CFyn-n.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-Ncgc0S0H.js → initDefaultProps-JuW8mFj7.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BBobPHz-.js → motion-Cwb0HBve.js} +1 -1
- package/src/assets/web-panel/assets/{move-Dgeb9hea.js → move-DHokzMgu.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-onxX64FZ.js → mtc-parser-DX31y6QS.js} +1 -1
- package/src/assets/web-panel/assets/{omit-D2OZXzri.js → omit-BCIUYDA6.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-J5iBCavx.js → pickAttrs-DMCj4EoZ.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-CE4U8sO6.js → placementArrow-Dy5K-u1s.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-Dl64-wdo.js → responsiveObserve-DkGeZu54.js} +1 -1
- package/src/assets/web-panel/assets/{slide-DRFC8TgC.js → slide-Dc5dyJdg.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-Bh1xb87a.js → statusUtils-DIUBjOaC.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-DlG_dRlk.js → styleChecker-DmyEOxm5.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-5qmSh3pc.js → useFlexGapSupport-FRhakk1e.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-C_fMqkQA.js → useFs-clXyV1WQ.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-D0Aih7lk.js → usePersonalDataHub-UF6DG41z.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-Cv17kLab.js → vnode-CoCt95G7.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-B8Mzvavx.js → zoom-yVWt-ENm.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/graph.js +215 -5
- package/src/commands/team-distributed.js +342 -2
- package/src/commands/team.js +169 -7
- package/src/data/changelog.json +26 -0
- package/src/generated/cc-agent-protocol.schema.json +6 -1
- package/src/lib/agent-ipc-bus.js +453 -91
- package/src/lib/agent-ipc-flow-control.js +200 -0
- package/src/lib/agent-team/task-lease.js +315 -0
- package/src/lib/agent-team/team-agent-stream.js +16 -0
- package/src/lib/agent-team/team-distributed-graph-bridge.js +257 -0
- package/src/lib/agent-team/team-distributed-graph-writer.js +523 -0
- package/src/lib/agent-team/team-distributed-queue.js +251 -0
- package/src/lib/agent-team/team-graph-runtime-adapter.js +1918 -0
- package/src/lib/agent-team/team-runner.js +225 -2
- package/src/lib/app-server/graph-runtime.js +754 -0
- package/src/lib/app-server/rollout-store.js +32 -0
- package/src/lib/app-server/server.js +140 -0
- package/src/lib/autonomous-agent.js +11 -0
- package/src/lib/cowork-graph-authority-adapter.js +455 -0
- package/src/lib/dynamic-workflow-facade.js +83 -16
- package/src/lib/graph-kernel/adapters.js +93 -20
- package/src/lib/graph-kernel/authority.js +324 -0
- package/src/lib/graph-kernel/compiler.js +1 -8
- package/src/lib/graph-kernel/cutover-authority-resolver.js +219 -0
- package/src/lib/graph-kernel/cutover-ledger.js +650 -0
- package/src/lib/graph-kernel/event-store.js +15 -1
- package/src/lib/graph-kernel/graph-runtime-surfaces.json +1427 -0
- package/src/lib/graph-kernel/index.js +4 -0
- package/src/lib/graph-kernel/migration-saga.js +309 -0
- package/src/lib/graph-kernel/runtime-surface-manifest.js +481 -0
- package/src/lib/graph-kernel/runtime.js +661 -24
- package/src/lib/graph-kernel/store-cutover-evidence.js +354 -0
- package/src/lib/graph-kernel/trace-reducer.js +6 -0
- package/src/lib/graph-kernel/trigger-adapter.js +60 -3
- package/src/lib/legacy-runtime-authority.js +160 -0
- package/src/lib/orchestrator.js +28 -0
- package/src/lib/scheduler-kernel/graph-authority-adapter.js +512 -0
- package/src/lib/scheduler-kernel/runtime.js +75 -2
- package/src/assets/web-panel/assets/EmailListRenderer-9L4EdmcR.js +0 -1
- package/src/assets/web-panel/assets/PdhVaultBrowser-BDMyV-DM.js +0 -7
- package/src/assets/web-panel/assets/Projects-C2KI2sH1.js +0 -1
- package/src/assets/web-panel/assets/Skills-V7TqlXWR.js +0 -1
- package/src/assets/web-panel/assets/Tasks-DOld05sg.js +0 -1
- package/src/assets/web-panel/assets/devWarning-0bFBr86K.js +0 -1
- package/src/assets/web-panel/assets/index-BJCitHZ6.js +0 -1
- package/src/assets/web-panel/assets/index-WmqZ5PwS.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")
|