chainlesschain 0.165.1 → 0.165.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +248 -2
- package/package.json +4 -1
- package/src/assets/web-panel/assets/{AIOps-CYxFDrcm.js → AIOps-BiHNUlbU.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CPBtdiU2.js → ActionButton-D-UFjDRQ.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-Dayq7Dp7.js → Analytics-DazVsDgW.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-6U7bPb2s.js → AppLayout-DXh9UfNJ.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-D2Iqg_3D.js → Artifacts-CZ6tsceY.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-CdoOB7WV.js → Audit-RyxnBr_h.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-DrnAVB8w.js → BackgroundAgents-BWS51Q6X.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-CesMi5cy.js → Backup-BRtPcUul.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-DaX9ptax.js → BaseInput-CGd4vZYY.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-OrwOPxDS.js → Chat-h8ijVwCg.js} +4 -4
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-CvPZFRxM.js → ChatBubbleRenderer-D7tcdDS9.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-DiHbcysC.js → Checkbox-NyF6dPl8.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-CbgCkaBJ.js → Codegen-Ci4OOxr5.js} +1 -1
- package/src/assets/web-panel/assets/{Col-Du5hgrh4.js → Col-CwTkc9BM.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DsPOBW-p.js → Community-DW_tM82m.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-BwHIFkNC.js → Compact-DEvHRV4S.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BvrDQSgd.js → Compliance-BbjBEEfD.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-gwAE6arx.js → Cowork-10IXBaBa.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-DW-0l4uF.js → Cron-BZkbpd5I.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-j-NsLesB.js → Crosschain-CFQ8L_6v.js} +1 -1
- package/src/assets/web-panel/assets/{DID-CibVEBOI.js → DID-BDF6AkXe.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-W4z9vSfe.js → Dashboard-CoOdWMi4.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-DAcrkKxG.js → Dropdown-DEsGmu8Y.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-6GXah-89.js → EmailListRenderer-BS89SWlK.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-TKDCq8Ku.js → FamilyGuardDashboard-C1FpCHiI.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-BXBLlcNm.js → Federation-BzvpVmLA.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-BoJJBkG3.js → FormItemContext-BeC259PQ.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-okjsl46v.js → GenericCardRenderer-azgG3bmV.js} +1 -1
- package/src/assets/web-panel/assets/{Git-Rvs7i6nn.js → Git-BmSSowc5.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-CHSUxXXS.js → Governance-CTBCSyQZ.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-V3BlfxsB.js → Inference-DA5xyk4a.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-C_NlD4aR.js → KnowledgeGraph-D1gPHNig.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-Nn4LNxhA.js → Logs-BPmLf1AR.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-SVAgNnkt.js → MarkdownRenderer-SVLOg49H.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-DEmjFcg-.js → Marketplace-DtUFcR0E.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DlopXipI.js → McpTools-DS_kqBv-.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-BG3ynX60.js → Memory-Fvh7XL7V.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-DeRzWOfT.js → MobileBridge-C7itAP45.js} +1 -1
- package/src/assets/web-panel/assets/MobileProjects-DGbP36-3.js +1 -0
- package/src/assets/web-panel/assets/{Mtc-BoPbOv1C.js → Mtc-B57MiNLK.js} +6 -6
- package/src/assets/web-panel/assets/{MtcAudit-un-rTHp7.js → MtcAudit-BXfCUcM7.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-Ds0oveEB.js → Multisig-yaJ-ZcF6.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-D09JI-yY.js → NLProgramming-CoaUCKrO.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-DTRhiKJn.js → Notes-BKLM_65R.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-BAnnNCim.js → NotificationSettings-DoDtK9uZ.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-Yr-1fSYi.js → OrderTableRenderer-BJ28TGr-.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-S9EAolpj.js → Organization-MuGsdoIb.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-CqcLKqJ8.js → Overflow-BLUN9J4R.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-Dw0F9EcU.js → P2P-DWuoBUPd.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-BDRwUevN.js → PdhVaultBrowser-CUi37YPj.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-D3_c3nKB.js → Permissions-BYQg2pcr.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CxdMV98x.js → PersonalDataHub-CAxoV2xu.js} +6 -6
- package/src/assets/web-panel/assets/{Pipeline-CgjNQFLI.js → Pipeline-B33wGvIO.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-BHghIIht.js → Privacy-A8yXTORP.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-De6pqaKM.js → ProjectInit-D49I2I1O.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-Bg4ZkNYQ.js → ProjectSettings-Ci73jJDw.js} +2 -2
- package/src/assets/web-panel/assets/Projects-CF-yD6Cn.js +1 -0
- package/src/assets/web-panel/assets/Providers-D-etEhg5.js +1 -0
- package/src/assets/web-panel/assets/{QrScannerModal-DA2f3Wts.js → QrScannerModal-Brza0ykJ.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-C1FeHDqp.js → QuickAsk-DFydhjxL.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-B5guaUMN.js → Recommend-DLF8_NhA.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-PDADSds3.js → RemoteSession-dyuStW3x.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-eTlRhgvK.js → Reputation-5F3tA6yw.js} +1 -1
- package/src/assets/web-panel/assets/{Row-D7AqSGY0.js → Row-Ca2A57S5.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-JiuLm4Ja.js → RssFeed-B0bxBkq_.js} +3 -3
- package/src/assets/web-panel/assets/{Search-CwruahW3.js → Search-CFNvHalZ.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CdhqaR0b.js → Security-DSoH3Hav.js} +4 -4
- package/src/assets/web-panel/assets/{Services-CU0ZIlcT.js → Services-BHpfEmBQ.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-CtduPfAb.js → Skeleton-Dsh-QNmn.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-CROXm6AY.js → Skills-BhT1NkSU.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-DiZiABFD.js → Sla-DY9snPeJ.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-B5pLcXUw.js → SpeechSettings-CWaX0_Cx.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-DBX6J1Oe.js → SyncSettings-B690y_TC.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-BLyRJd3-.js → Tasks-2N-w3zWd.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-BKa5qzmk.js → Templates-BjwQOQYC.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-DnD3a4M6.js → Tenant-CUqHErxY.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-DEitQeTb.js → Terminal-C13rXvNy.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-CjHggTDq.js → TimelineRenderer-CpbWcya_.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-CsGT7sfl.js → Tokens-BXHLGXYC.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-yr4rFDrW.js → Trigger-1e5i65o3.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-CLvu1Sjp.js → Trust-FLGqNHs5.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-B0m7yUP8.js → UkeySign-BbaR_LJB.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-C0VvP4lc.js → VideoEditing-NOp4RIov.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-kllBAG1M.js → Wallet-B7DW7bG4.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-C54UQNLx.js → WebAuthn-BptSUWix.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-B7y8qSvU.js → WorkflowEditor-CAJnDOXS.js} +1 -1
- package/src/assets/web-panel/assets/{chat-DRzTh8CJ.js → chat-I8LgG1-Z.js} +1 -1
- package/src/assets/web-panel/assets/{colors-BSMwSnCx.js → colors-CWe7SOVD.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BTg602H5.js → compact-item-Cx3u3CA3.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-B6EGsdvp.js → createContext-CgD5ArwY.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DLv_872g.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-DDKqJ8RD.js → hasIn-BfQWiXN8.js} +1 -1
- package/src/assets/web-panel/assets/{index-D5CsBShd.js → index-3iKP9OTJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dfv2lKu3.js → index-87gMxqhN.js} +1 -1
- package/src/assets/web-panel/assets/{index-C66NpWy5.js → index-B1cX4Rxu.js} +1 -1
- package/src/assets/web-panel/assets/{index-DBT3YeQ9.js → index-B6yChzt1.js} +1 -1
- package/src/assets/web-panel/assets/{index-BVTAl5N2.js → index-BREnPKGo.js} +1 -1
- package/src/assets/web-panel/assets/{index-CwPUZbMI.js → index-BUAR7RY-.js} +1 -1
- package/src/assets/web-panel/assets/{index-th2ihDc0.js → index-Bi24S7Dw.js} +1 -1
- package/src/assets/web-panel/assets/{index-CmAubjDi.js → index-BiI-xPRH.js} +1 -1
- package/src/assets/web-panel/assets/{index-CUEU48o1.js → index-BuEQSorC.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cf23wVMs.js → index-Bx7BNIRH.js} +1 -1
- package/src/assets/web-panel/assets/{index-BRqt4fO-.js → index-C-rIKccl.js} +1 -1
- package/src/assets/web-panel/assets/{index-C_JzIXUq.js → index-C0nDKhWv.js} +1 -1
- package/src/assets/web-panel/assets/{index-DiW0sDkz.js → index-C0ztiqtB.js} +1 -1
- package/src/assets/web-panel/assets/{index-BICn3Qh1.js → index-C1UjHdgZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DpTHIRfZ.js → index-CAUnl4Jv.js} +1 -1
- package/src/assets/web-panel/assets/{index-Co7oM1qr.js → index-CMu16vPC.js} +1 -1
- package/src/assets/web-panel/assets/{index-CNxg61YP.js → index-CNYFQxAW.js} +1 -1
- package/src/assets/web-panel/assets/{index-XFe-1twF.js → index-CQDKYbnv.js} +1 -1
- package/src/assets/web-panel/assets/{index-p2HYn89m.js → index-CWZ3REg6.js} +3 -3
- package/src/assets/web-panel/assets/{index-Bx044qDj.js → index-CcX4FSPf.js} +1 -1
- package/src/assets/web-panel/assets/{index-BMuGd2--.js → index-Cd79NQAx.js} +1 -1
- package/src/assets/web-panel/assets/{index-CGNklbP6.js → index-CdRkCwm4.js} +1 -1
- package/src/assets/web-panel/assets/index-CdiGCibe.js +1 -0
- package/src/assets/web-panel/assets/{index-rjzk9z1Q.js → index-Cy_cCJlr.js} +1 -1
- package/src/assets/web-panel/assets/{index-323Hhxxt.js → index-DAVy98u7.js} +1 -1
- package/src/assets/web-panel/assets/{index-CDTvsX8t.js → index-DCJEY2T0.js} +1 -1
- package/src/assets/web-panel/assets/{index-DLdrHhML.js → index-DFb-XIKy.js} +1 -1
- package/src/assets/web-panel/assets/{index-pqfux8vZ.js → index-DGMYTN5W.js} +1 -1
- package/src/assets/web-panel/assets/index-D_0z-gyz.js +1 -0
- package/src/assets/web-panel/assets/{index-u2YVld9W.js → index-Dcdm_Z2c.js} +1 -1
- package/src/assets/web-panel/assets/{index-CmAInUkX.js → index-DeizoQVZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CHfLYwcW.js → index-DlIyt1qF.js} +1 -1
- package/src/assets/web-panel/assets/{index-CWGax2QW.js → index-DmgtY58H.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dc77VR3H.js → index-DmrdUwzU.js} +1 -1
- package/src/assets/web-panel/assets/{index-D1naNj4U.js → index-Doc0Ftpd.js} +1 -1
- package/src/assets/web-panel/assets/{index-BsR7Y2NG.js → index-DsQcURkA.js} +1 -1
- package/src/assets/web-panel/assets/{index-CQlHFN_g.js → index-DslTuqro.js} +1 -1
- package/src/assets/web-panel/assets/{index-DqFXGzzC.js → index-V-kIHzAV.js} +1 -1
- package/src/assets/web-panel/assets/{index-C1GFfuqN.js → index-e8BM1yY1.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-C3Djh9fa.js → initDefaultProps-DiBszVdG.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BzqFmbSe.js → motion-BGIFFozv.js} +1 -1
- package/src/assets/web-panel/assets/{move-DJo_FFaW.js → move-D5W7mp7B.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-_tlTiBvk.js → mtc-parser-JFIlxJ7F.js} +1 -1
- package/src/assets/web-panel/assets/{omit-CB2ZyxUg.js → omit-CQ3o6LIU.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DZwIFD4u.js → pickAttrs-R8MIlXo3.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-DxZY0dgk.js → placementArrow-sW7ylSky.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-CzzGt7GL.js → responsiveObserve-Cnl39Vbz.js} +1 -1
- package/src/assets/web-panel/assets/{slide-BaIK52yz.js → slide-sn8tFd14.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-3-FHu9_M.js → statusUtils-IKKY_QxZ.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-BkRT68fK.js → styleChecker-BNpV4Nqs.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-DHYwKS-s.js → useFlexGapSupport-BWyT_eoU.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-DVVUhV8p.js → useFs-D09p6_U9.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-CkrFKAzQ.js → usePersonalDataHub-CzW3TkJZ.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-BuBLFz0c.js → vnode-3s3WoAKB.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-kpm6LtXU.js → zoom-Cjy_673s.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +1 -1
- package/src/commands/cowork.js +280 -5
- package/src/commands/plugin.js +819 -64
- package/src/commands/session-location.js +318 -7
- package/src/constants.js +2 -2
- package/src/data/changelog.json +27 -1
- package/src/gateways/ws/action-protocol.js +1 -1
- package/src/harness/jsonl-session-store.js +638 -2
- package/src/harness/prompt-compressor.js +4 -0
- package/src/lib/background-agent-keeper-client.js +29 -0
- package/src/lib/background-agent-keeper-protocol.js +78 -3
- package/src/lib/background-agent-launch-barrier.js +74 -0
- package/src/lib/background-agent-supervisor.js +208 -34
- package/src/lib/background-turn-bootstrap-protocol.js +4 -0
- package/src/lib/cowork-task-runner.js +70 -0
- package/src/lib/cowork-workflow.js +42 -9
- package/src/lib/doctor-checkup.js +34 -10
- package/src/lib/dynamic-workflow-draft.js +535 -0
- package/src/lib/dynamic-workflow-facade.js +11 -11
- package/src/lib/dynamic-workflow-runtime.js +2974 -0
- package/src/lib/execution-location-contract.js +111 -7
- package/src/lib/execution-location-runtime.js +3 -1
- package/src/lib/execution-location-target.js +910 -0
- package/src/lib/llm-providers.js +1 -0
- package/src/lib/mcp-call-ledger-store.js +35 -0
- package/src/lib/mcp-call-ledger.js +30 -0
- package/src/lib/plugin-runtime/__tests__/remote-source.test.js +34 -16
- package/src/lib/plugin-runtime/install.js +4956 -657
- package/src/lib/plugin-runtime/manifest.js +3 -1
- package/src/lib/plugin-runtime/marketplace-artifact-readback.js +671 -31
- package/src/lib/plugin-runtime/marketplace-catalog.js +68 -2
- package/src/lib/plugin-runtime/marketplace-impact.js +208 -15
- package/src/lib/plugin-runtime/marketplace-network.js +317 -0
- package/src/lib/plugin-runtime/marketplace-pac-worker.js +15 -0
- package/src/lib/plugin-runtime/marketplace-remote-artifacts.js +25 -2
- package/src/lib/plugin-runtime/marketplace-source-cache.js +359 -0
- package/src/lib/plugin-runtime/policy.js +21 -6
- package/src/lib/plugin-runtime/publisher-trust.js +332 -0
- package/src/lib/plugin-runtime/remote-source.js +323 -27
- package/src/lib/plugin-runtime/scopes.js +317 -41
- package/src/lib/plugin-runtime/transaction-journal.js +806 -0
- package/src/lib/public-ide-capability-manifest.js +1 -1
- package/src/lib/remote-membership-coordinator.js +8 -6
- package/src/lib/sub-agent-context.js +268 -2
- package/src/lib/task-model-selector.js +1 -1
- package/src/lib/with-file-lock.js +266 -27
- package/src/runtime/agent-core.js +595 -41
- package/src/workers/background-agent-keeper.js +147 -24
- package/src/workers/background-agent-worker.js +383 -134
- package/src/workers/background-turn-bootstrap.js +13 -8
- package/src/assets/web-panel/assets/MobileProjects-Tyd3o2A0.js +0 -1
- package/src/assets/web-panel/assets/Projects-CP8vPvzs.js +0 -1
- package/src/assets/web-panel/assets/Providers-CUnHbNf-.js +0 -1
- package/src/assets/web-panel/assets/devWarning-Dol8jLEP.js +0 -1
- package/src/assets/web-panel/assets/index-C3QX5tOl.js +0 -1
- package/src/assets/web-panel/assets/index-xYybvEic.js +0 -1
|
@@ -58,6 +58,7 @@ export const _deps = {
|
|
|
58
58
|
|
|
59
59
|
const DEFAULT_MAX_ITERATIONS = 50;
|
|
60
60
|
const DEFAULT_TOKEN_BUDGET = 100_000;
|
|
61
|
+
const WORKFLOW_EFFECT_ID_RE = /^sha256:[a-f0-9]{64}$/;
|
|
61
62
|
const COWORK_MCP_CALL_LEDGER_UNSUPPORTED =
|
|
62
63
|
"CC_COWORK_MCP_CALL_LEDGER_UNSUPPORTED";
|
|
63
64
|
const COWORK_MCP_SESSION_UNVERIFIED = "CC_COWORK_MCP_SESSION_UNVERIFIED";
|
|
@@ -74,6 +75,44 @@ function coworkMcpAdmissionError(code, message, sessionId, cause = null) {
|
|
|
74
75
|
return error;
|
|
75
76
|
}
|
|
76
77
|
|
|
78
|
+
function assertWorkflowEffectId(value) {
|
|
79
|
+
if (value == null) return;
|
|
80
|
+
if (typeof value !== "string" || !WORKFLOW_EFFECT_ID_RE.test(value)) {
|
|
81
|
+
const error = new TypeError(
|
|
82
|
+
"workflowEffectId must be a canonical sha256 identity",
|
|
83
|
+
);
|
|
84
|
+
error.code = "CC_COWORK_WORKFLOW_EFFECT_ID_INVALID";
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function workflowEffectEvidence(subAgent, workflowEffectId) {
|
|
90
|
+
if (!workflowEffectId) return {};
|
|
91
|
+
const attempts =
|
|
92
|
+
typeof subAgent?.providerRequestAttempts === "function"
|
|
93
|
+
? subAgent.providerRequestAttempts()
|
|
94
|
+
: [];
|
|
95
|
+
const receipts =
|
|
96
|
+
typeof subAgent?.providerRequestReceipts === "function"
|
|
97
|
+
? subAgent.providerRequestReceipts()
|
|
98
|
+
: [];
|
|
99
|
+
const nestedEffectAttempts =
|
|
100
|
+
typeof subAgent?.nestedEffectAttempts === "function"
|
|
101
|
+
? subAgent.nestedEffectAttempts()
|
|
102
|
+
: [];
|
|
103
|
+
const nestedEffectSettlements =
|
|
104
|
+
typeof subAgent?.nestedEffectSettlements === "function"
|
|
105
|
+
? subAgent.nestedEffectSettlements()
|
|
106
|
+
: [];
|
|
107
|
+
return {
|
|
108
|
+
workflowEffectId,
|
|
109
|
+
providerRequestAttempts: attempts,
|
|
110
|
+
providerRequestReceipts: receipts,
|
|
111
|
+
nestedEffectAttempts,
|
|
112
|
+
nestedEffectSettlements,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
|
|
77
116
|
function assertCoworkMcpEventUsageAdmission(event, sessionId) {
|
|
78
117
|
if (event?.type !== "session_start") return;
|
|
79
118
|
const data =
|
|
@@ -477,6 +516,12 @@ export function prepareCoworkMcpRuntime(mcp, options = {}) {
|
|
|
477
516
|
* @param {number} [options.maxIterations] - Override iteration limit
|
|
478
517
|
* @param {number} [options.tokenBudget] - Override token budget
|
|
479
518
|
* @param {string} [options.mcpSessionId] - Stable MCP ledger session for resume
|
|
519
|
+
* @param {string} [options.workflowEffectId] - Canonical durable workflow effect
|
|
520
|
+
* @param {boolean} [options.strictUsageTelemetry] - Require synchronous durable call observers
|
|
521
|
+
* @param {function} [options.onUsageBoundary] - Provider-call durable start observer
|
|
522
|
+
* @param {function} [options.onUsageSettlement] - Provider-call durable settlement observer
|
|
523
|
+
* @param {function} [options.onToolCallBoundary] - Tool-call durable start observer
|
|
524
|
+
* @param {function} [options.onToolCallSettlement] - Tool-call durable settlement observer
|
|
480
525
|
* @param {(request: object) => boolean|Promise<boolean>} [options.approveMcpLocalCodeExecution]
|
|
481
526
|
* @returns {Promise<{ taskId: string, status: string, result: object }>}
|
|
482
527
|
*/
|
|
@@ -493,12 +538,19 @@ export async function runCoworkTask(options = {}) {
|
|
|
493
538
|
onProgress = null,
|
|
494
539
|
signal = null,
|
|
495
540
|
mcpSessionId = null,
|
|
541
|
+
workflowEffectId = null,
|
|
542
|
+
strictUsageTelemetry = false,
|
|
543
|
+
onUsageBoundary = null,
|
|
544
|
+
onUsageSettlement = null,
|
|
545
|
+
onToolCallBoundary = null,
|
|
546
|
+
onToolCallSettlement = null,
|
|
496
547
|
approveMcpLocalCodeExecution = null,
|
|
497
548
|
} = options;
|
|
498
549
|
|
|
499
550
|
if (!userMessage || typeof userMessage !== "string") {
|
|
500
551
|
throw new Error("userMessage is required");
|
|
501
552
|
}
|
|
553
|
+
assertWorkflowEffectId(workflowEffectId);
|
|
502
554
|
|
|
503
555
|
// An explicit canonical authority must be admitted before mounting local MCP
|
|
504
556
|
// servers, constructing a child context, or making any provider call.
|
|
@@ -582,6 +634,16 @@ export async function runCoworkTask(options = {}) {
|
|
|
582
634
|
cwd,
|
|
583
635
|
onProgress,
|
|
584
636
|
signal,
|
|
637
|
+
...(workflowEffectId ? { workflowEffectId } : {}),
|
|
638
|
+
...(strictUsageTelemetry
|
|
639
|
+
? {
|
|
640
|
+
strictUsageTelemetry: true,
|
|
641
|
+
onUsageBoundary,
|
|
642
|
+
onUsageSettlement,
|
|
643
|
+
onToolCallBoundary,
|
|
644
|
+
onToolCallSettlement,
|
|
645
|
+
}
|
|
646
|
+
: {}),
|
|
585
647
|
extraToolDefinitions: mcp.extraToolDefinitions,
|
|
586
648
|
externalToolDescriptors: mcp.externalToolDescriptors,
|
|
587
649
|
externalToolExecutors: mcp.externalToolExecutors,
|
|
@@ -632,17 +694,25 @@ export async function runCoworkTask(options = {}) {
|
|
|
632
694
|
templateId: template.id,
|
|
633
695
|
templateName: template.name,
|
|
634
696
|
...(mcpRuntime.sessionId ? { mcpSessionId: mcpRuntime.sessionId } : {}),
|
|
697
|
+
...workflowEffectEvidence(subAgent, workflowEffectId),
|
|
635
698
|
result,
|
|
636
699
|
};
|
|
637
700
|
_appendHistory(cwd, entry, userMessage);
|
|
638
701
|
return entry;
|
|
639
702
|
} catch (err) {
|
|
703
|
+
// A durable workflow already marked this outer effect as dispatched.
|
|
704
|
+
// Converting a child/provider exception into an ordinary failed result
|
|
705
|
+
// would authorize the step retry path even though the physical provider
|
|
706
|
+
// outcome may be unknown. Propagate so the runtime keeps it pending and
|
|
707
|
+
// requires reconciliation.
|
|
708
|
+
if (workflowEffectId) throw err;
|
|
640
709
|
const entry = {
|
|
641
710
|
taskId,
|
|
642
711
|
status: "failed",
|
|
643
712
|
templateId: template.id,
|
|
644
713
|
templateName: template.name,
|
|
645
714
|
...(mcpRuntime.sessionId ? { mcpSessionId: mcpRuntime.sessionId } : {}),
|
|
715
|
+
...workflowEffectEvidence(subAgent, workflowEffectId),
|
|
646
716
|
result: {
|
|
647
717
|
summary: `Task failed: ${err.message}`,
|
|
648
718
|
artifacts: [],
|
|
@@ -66,6 +66,8 @@ export const COWORK_WORKFLOW_RUN_ADMISSION_INVALID_CODE =
|
|
|
66
66
|
"COWORK_WORKFLOW_RUN_ADMISSION_INVALID";
|
|
67
67
|
export const COWORK_WORKFLOW_RUN_RESULT_INVALID_CODE =
|
|
68
68
|
"COWORK_WORKFLOW_RUN_RESULT_INVALID";
|
|
69
|
+
export const COWORK_WORKFLOW_CONTROL_SIGNAL_CODE =
|
|
70
|
+
"COWORK_WORKFLOW_CONTROL_SIGNAL";
|
|
69
71
|
|
|
70
72
|
const DYNAMIC_WORKFLOW_RUN_ADMISSION_SCHEMA =
|
|
71
73
|
"cc-dynamic-workflow-run-admission/v1";
|
|
@@ -484,7 +486,9 @@ function normalizeWorkflowRunAdmission(
|
|
|
484
486
|
authority.definitionDigest !== definitionDigest ||
|
|
485
487
|
value.executionLocation.authoritySchema !==
|
|
486
488
|
EXECUTION_LOCATION_AUTHORITY_SCHEMA ||
|
|
487
|
-
|
|
489
|
+
!["verified-session-start", "verified-session-location-handoff"].includes(
|
|
490
|
+
value.executionLocation.authority,
|
|
491
|
+
) ||
|
|
488
492
|
value.executionLocation.bindingSchema !==
|
|
489
493
|
EXECUTION_LOCATION_BINDING_SCHEMA ||
|
|
490
494
|
typeof value.executionLocation.location !== "string" ||
|
|
@@ -534,7 +538,7 @@ function normalizeWorkflowRunAdmission(
|
|
|
534
538
|
}),
|
|
535
539
|
executionLocation: Object.freeze({
|
|
536
540
|
authoritySchema: EXECUTION_LOCATION_AUTHORITY_SCHEMA,
|
|
537
|
-
authority:
|
|
541
|
+
authority: value.executionLocation.authority,
|
|
538
542
|
session: Object.freeze({
|
|
539
543
|
sessionId: session.sessionId,
|
|
540
544
|
headHash: session.headHash,
|
|
@@ -1307,6 +1311,7 @@ export async function runStepWithRetry({
|
|
|
1307
1311
|
taskSemaphore,
|
|
1308
1312
|
runTask = _deps.runTask,
|
|
1309
1313
|
recordId = step.id,
|
|
1314
|
+
iteration = 1,
|
|
1310
1315
|
onTaskStart,
|
|
1311
1316
|
admitted = false,
|
|
1312
1317
|
}) {
|
|
@@ -1336,6 +1341,12 @@ export async function runStepWithRetry({
|
|
|
1336
1341
|
files: step.files || [],
|
|
1337
1342
|
cwd,
|
|
1338
1343
|
llmOptions,
|
|
1344
|
+
workflowEffect: Object.freeze({
|
|
1345
|
+
stepId: recordId,
|
|
1346
|
+
iteration,
|
|
1347
|
+
attempt,
|
|
1348
|
+
timeoutMs,
|
|
1349
|
+
}),
|
|
1339
1350
|
...(abortController ? { signal: abortController.signal } : {}),
|
|
1340
1351
|
}),
|
|
1341
1352
|
);
|
|
@@ -1353,20 +1364,38 @@ export async function runStepWithRetry({
|
|
|
1353
1364
|
lastErr = null;
|
|
1354
1365
|
} catch (err) {
|
|
1355
1366
|
if (release) release();
|
|
1367
|
+
if (err?.code === COWORK_WORKFLOW_CONTROL_SIGNAL_CODE) throw err;
|
|
1356
1368
|
if (err?.code === COWORK_WORKFLOW_RUN_RESULT_INVALID_CODE) throw err;
|
|
1357
1369
|
if (admitted && err?.code === STEP_TIMEOUT_CODE && taskPromise != null) {
|
|
1358
1370
|
abortController.abort(err);
|
|
1359
1371
|
// A terminal admitted record must never be written while the physical
|
|
1360
1372
|
// task can still produce side effects. Confirm settlement before a
|
|
1361
1373
|
// retry or final failure; a runner that ignores abort safely blocks.
|
|
1374
|
+
// A late completed result is authoritative and must not be replayed.
|
|
1362
1375
|
try {
|
|
1363
|
-
await taskPromise;
|
|
1364
|
-
|
|
1365
|
-
|
|
1376
|
+
const lateRawEntry = await taskPromise;
|
|
1377
|
+
const lateEntry = normalizeAdmittedTaskEntry(lateRawEntry);
|
|
1378
|
+
if (lateEntry.status === "completed") {
|
|
1379
|
+
return { ok: true, entry: lateEntry, attempts: attempt };
|
|
1380
|
+
}
|
|
1381
|
+
lastEntry = lateEntry;
|
|
1382
|
+
lastErr = null;
|
|
1383
|
+
} catch (lateError) {
|
|
1384
|
+
if (
|
|
1385
|
+
lateError?.code === COWORK_WORKFLOW_CONTROL_SIGNAL_CODE ||
|
|
1386
|
+
lateError?.code === COWORK_WORKFLOW_RUN_RESULT_INVALID_CODE
|
|
1387
|
+
) {
|
|
1388
|
+
throw lateError;
|
|
1389
|
+
}
|
|
1390
|
+
// The timeout remains the attempt's externally visible failure when
|
|
1391
|
+
// a non-authoritative runner error arrives after the deadline.
|
|
1392
|
+
lastErr = err;
|
|
1393
|
+
lastEntry = null;
|
|
1366
1394
|
}
|
|
1395
|
+
} else {
|
|
1396
|
+
lastErr = err; // threw or timed out → retry-eligible
|
|
1397
|
+
lastEntry = null;
|
|
1367
1398
|
}
|
|
1368
|
-
lastErr = err; // threw or timed out → retry-eligible
|
|
1369
|
-
lastEntry = null;
|
|
1370
1399
|
}
|
|
1371
1400
|
if (attempt <= maxRetries) {
|
|
1372
1401
|
const delay = retryDelayFor(step, attempt);
|
|
@@ -1503,6 +1532,7 @@ export async function runLoopStep({
|
|
|
1503
1532
|
taskSemaphore,
|
|
1504
1533
|
runTask,
|
|
1505
1534
|
recordId,
|
|
1535
|
+
iteration: iter,
|
|
1506
1536
|
onTaskStart: (event) => {
|
|
1507
1537
|
if (startAnnounced) return;
|
|
1508
1538
|
startAnnounced = true;
|
|
@@ -1760,8 +1790,11 @@ export async function runPipeline({
|
|
|
1760
1790
|
admitted,
|
|
1761
1791
|
});
|
|
1762
1792
|
} catch (err) {
|
|
1763
|
-
if (
|
|
1764
|
-
|
|
1793
|
+
if (
|
|
1794
|
+
err?.code === COWORK_WORKFLOW_RUN_RESULT_INVALID_CODE ||
|
|
1795
|
+
err?.code === COWORK_WORKFLOW_CONTROL_SIGNAL_CODE
|
|
1796
|
+
) {
|
|
1797
|
+
fatalError ||= err;
|
|
1765
1798
|
halted = true;
|
|
1766
1799
|
active--;
|
|
1767
1800
|
pump();
|
|
@@ -462,7 +462,6 @@ async function pluginSection(opts, _deps2) {
|
|
|
462
462
|
const checks = [];
|
|
463
463
|
try {
|
|
464
464
|
const { listInstalled } = await import("./plugin-runtime/install.js");
|
|
465
|
-
const { readPluginLock } = await import("./plugin-runtime/signature.js");
|
|
466
465
|
const plugins = listInstalled({ cwd: opts.cwd || process.cwd() }) || [];
|
|
467
466
|
if (plugins.length === 0) {
|
|
468
467
|
checks.push(
|
|
@@ -475,22 +474,47 @@ async function pluginSection(opts, _deps2) {
|
|
|
475
474
|
);
|
|
476
475
|
} else {
|
|
477
476
|
let unsigned = 0;
|
|
477
|
+
const runtimeBlocked = [];
|
|
478
|
+
const retainedRecovery = [];
|
|
478
479
|
for (const p of plugins) {
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
480
|
+
if (p.activePointer?.recoveryPath) {
|
|
481
|
+
retainedRecovery.push(`${p.name} (${p.activePointer.recoveryPath})`);
|
|
482
|
+
}
|
|
483
|
+
if (p.runtimeBlocked === true) {
|
|
484
|
+
runtimeBlocked.push(
|
|
485
|
+
`${p.name} (${p.activePointer?.status || "unknown pointer state"})`,
|
|
486
|
+
);
|
|
487
|
+
continue;
|
|
484
488
|
}
|
|
489
|
+
if (p.integrity?.signature?.present !== true) unsigned++;
|
|
485
490
|
}
|
|
486
491
|
checks.push(
|
|
487
492
|
check(
|
|
488
493
|
"plugins",
|
|
489
494
|
`Installed plugins: ${plugins.length}`,
|
|
490
|
-
unsigned > 0
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
495
|
+
unsigned > 0 ||
|
|
496
|
+
runtimeBlocked.length > 0 ||
|
|
497
|
+
retainedRecovery.length > 0
|
|
498
|
+
? CHECK_LEVELS.WARN
|
|
499
|
+
: CHECK_LEVELS.OK,
|
|
500
|
+
[
|
|
501
|
+
runtimeBlocked.length > 0
|
|
502
|
+
? `runtime blocked: ${runtimeBlocked.join(", ")}`
|
|
503
|
+
: null,
|
|
504
|
+
retainedRecovery.length > 0
|
|
505
|
+
? `retained install recovery: ${retainedRecovery.join(", ")}; remove the blocked plugin before another mutation`
|
|
506
|
+
: null,
|
|
507
|
+
unsigned > 0
|
|
508
|
+
? `${unsigned} active without a signature lock — they will be refused if plugins.requireSignedPlugins is enabled`
|
|
509
|
+
: null,
|
|
510
|
+
runtimeBlocked.length === 0 &&
|
|
511
|
+
retainedRecovery.length === 0 &&
|
|
512
|
+
unsigned === 0
|
|
513
|
+
? "all active plugins have signature locks"
|
|
514
|
+
: null,
|
|
515
|
+
]
|
|
516
|
+
.filter(Boolean)
|
|
517
|
+
.join("; "),
|
|
494
518
|
),
|
|
495
519
|
);
|
|
496
520
|
}
|