chainlesschain 0.163.8 → 0.165.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +7 -4
- package/scripts/macos-mcp-launcher-build.mjs +317 -0
- package/scripts/macos-mcp-launcher-postinstall.sh +54 -0
- package/scripts/macos-mcp-launcher-preinstall.sh +61 -0
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-CavM7W3k.js → AIOps-CYxFDrcm.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CUvZGabQ.js → ActionButton-CPBtdiU2.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-DeBnWnbe.js → Analytics-Dayq7Dp7.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-DbI5kxvd.js → AppLayout-6U7bPb2s.js} +4 -4
- package/src/assets/web-panel/assets/{Artifacts-D93bigKm.js → Artifacts-D2Iqg_3D.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-CBNvfUZa.js → Audit-CdoOB7WV.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-CJLyh_YU.js → BackgroundAgents-DrnAVB8w.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-D_0yoehD.js → Backup-CesMi5cy.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-TJxmbObW.js → BaseInput-DaX9ptax.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-CE0dto1q.js → Chat-OrwOPxDS.js} +5 -5
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-CZ5-yYiD.js → ChatBubbleRenderer-CvPZFRxM.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-Ck1RVIVo.js → Checkbox-DiHbcysC.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-qpoyf6DK.js → Codegen-CbgCkaBJ.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DUyPWjIE.js → Col-Du5hgrh4.js} +1 -1
- package/src/assets/web-panel/assets/{Community-D_S1BemS.js → Community-DsPOBW-p.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-BjxeK-Gc.js → Compact-BwHIFkNC.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-Dd3CEJsu.js → Compliance-BvrDQSgd.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-B4QG7-ad.js → Cowork-gwAE6arx.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-BtZnids5.js → Cron-DW-0l4uF.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-CHPfCBFD.js → Crosschain-j-NsLesB.js} +1 -1
- package/src/assets/web-panel/assets/{DID-DT8DCEOK.js → DID-CibVEBOI.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-COQab5_U.js → Dashboard-W4z9vSfe.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BY1PsQuU.js → Dropdown-DAcrkKxG.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-CsuAuaq3.js → EmailListRenderer-6GXah-89.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-BqpinD-j.js → FamilyGuardDashboard-TKDCq8Ku.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-D0gkfQFv.js → Federation-BXBLlcNm.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-BqgE-axK.js → FormItemContext-BoJJBkG3.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-D0hJ2KvC.js → GenericCardRenderer-okjsl46v.js} +1 -1
- package/src/assets/web-panel/assets/{Git-CmMB0uPY.js → Git-Rvs7i6nn.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-BnVEI0Dk.js → Governance-CHSUxXXS.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-YTAMihRP.js → Inference-V3BlfxsB.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-0ax7VHop.js → KnowledgeGraph-C_NlD4aR.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-B9TRcokL.js → Logs-Nn4LNxhA.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-SVAgNnkt.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-B6CSuD_H.js → Marketplace-DEmjFcg-.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-CjMXvOVU.js → McpTools-DlopXipI.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-CXRF71U3.js → Memory-BG3ynX60.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-DQgNp_oS.js → MobileBridge-DeRzWOfT.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-DlPwcCbq.js → MobileProjects-Tyd3o2A0.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-6hDTRPe1.js → Mtc-BoPbOv1C.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-BlVHU1DS.js → MtcAudit-un-rTHp7.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-DP9pzEbV.js → Multisig-Ds0oveEB.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-Djorh8EV.js → NLProgramming-D09JI-yY.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-oLZ-JkUg.js → Notes-DTRhiKJn.js} +4 -4
- package/src/assets/web-panel/assets/{NotificationSettings-Cg288VH3.js → NotificationSettings-BAnnNCim.js} +1 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-Yr-1fSYi.js +1 -0
- package/src/assets/web-panel/assets/{Organization-CBdo-bHs.js → Organization-S9EAolpj.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-qZdnVumx.js → Overflow-CqcLKqJ8.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-D4kNfGNQ.js → P2P-Dw0F9EcU.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-DnlMemM7.js → PdhVaultBrowser-BDRwUevN.js} +5 -5
- package/src/assets/web-panel/assets/{Permissions-DHucHFBJ.js → Permissions-D3_c3nKB.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-BovlOIPR.js → PersonalDataHub-CxdMV98x.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-Deru3CQY.js → Pipeline-CgjNQFLI.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-Bq5oTTbU.js → Privacy-BHghIIht.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BfzxVWAz.js → ProjectInit-De6pqaKM.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CKC6XBtH.js → ProjectSettings-Bg4ZkNYQ.js} +2 -2
- package/src/assets/web-panel/assets/Projects-CP8vPvzs.js +1 -0
- package/src/assets/web-panel/assets/{Providers-C_jx4TWX.js → Providers-CUnHbNf-.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-BdIHeVGC.js → QrScannerModal-DA2f3Wts.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-BwZwAcPD.js → QuickAsk-C1FeHDqp.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-BNTt0L-m.js → Recommend-B5guaUMN.js} +1 -1
- package/src/assets/web-panel/assets/RemoteSession-PDADSds3.js +5 -0
- package/src/assets/web-panel/assets/{Reputation-D6VpG32B.js → Reputation-eTlRhgvK.js} +1 -1
- package/src/assets/web-panel/assets/{Row-D_74OvQQ.js → Row-D7AqSGY0.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-BTr0a-BQ.js → RssFeed-JiuLm4Ja.js} +3 -3
- package/src/assets/web-panel/assets/{Search-C3MCFoNU.js → Search-CwruahW3.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CqW9aJ6s.js → Security-CdhqaR0b.js} +4 -4
- package/src/assets/web-panel/assets/{Services-Cw5GNaHF.js → Services-CU0ZIlcT.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DZps5qeY.js → Skeleton-CtduPfAb.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-C6NQ1znT.js → Skills-CROXm6AY.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-DFP8G2Sh.js → Sla-DiZiABFD.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-ESt6MB6v.js → SpeechSettings-B5pLcXUw.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-BHnN98aM.js → SyncSettings-DBX6J1Oe.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-NiSCaOf-.js → Tasks-BLyRJd3-.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-DsKFhW2C.js → Templates-BKa5qzmk.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-CQ0E0ze5.js → Tenant-DnD3a4M6.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-D_rBu_by.js → Terminal-DEitQeTb.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-D3Vm4Po4.js → TimelineRenderer-CjHggTDq.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-DNTxRH6q.js → Tokens-CsGT7sfl.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-Dgprz1ms.js → Trigger-yr4rFDrW.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-B2rUnVBD.js → Trust-CLvu1Sjp.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-DEGQNc6_.js → UkeySign-B0m7yUP8.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-jlsAx3Eh.js → VideoEditing-C0VvP4lc.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-8jQih1ij.js → Wallet-kllBAG1M.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-XLeO6xIB.js → WebAuthn-C54UQNLx.js} +3 -3
- package/src/assets/web-panel/assets/{WorkflowEditor-De_dgDAG.js → WorkflowEditor-B7y8qSvU.js} +1 -1
- package/src/assets/web-panel/assets/{chat-CI19R_Sk.js → chat-DRzTh8CJ.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DsYTOYN3.js → colors-BSMwSnCx.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-CM3-t_Qr.js → compact-item-BTg602H5.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-BjxlBRZv.js → createContext-B6EGsdvp.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-Dol8jLEP.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-RDaWX_4i.js → hasIn-DDKqJ8RD.js} +1 -1
- package/src/assets/web-panel/assets/{index-nAH87mQP.js → index-323Hhxxt.js} +1 -1
- package/src/assets/web-panel/assets/{index-DIUnNOjG.js → index-BICn3Qh1.js} +1 -1
- package/src/assets/web-panel/assets/{index-DyIWssPC.js → index-BMuGd2--.js} +1 -1
- package/src/assets/web-panel/assets/{index-DX7tuWVJ.js → index-BRqt4fO-.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cd3euP_4.js → index-BVTAl5N2.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cpqm1qfU.js → index-BsR7Y2NG.js} +1 -1
- package/src/assets/web-panel/assets/{index-DcPFB8qJ.js → index-Bx044qDj.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cd9OJhHG.js → index-C1GFfuqN.js} +1 -1
- package/src/assets/web-panel/assets/index-C3QX5tOl.js +1 -0
- package/src/assets/web-panel/assets/{index-B-Z8eFUJ.js → index-C66NpWy5.js} +1 -1
- package/src/assets/web-panel/assets/{index-BlT2VAEK.js → index-CDTvsX8t.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dsij_KsN.js → index-CGNklbP6.js} +1 -1
- package/src/assets/web-panel/assets/{index-C4gkzxkw.js → index-CHfLYwcW.js} +1 -1
- package/src/assets/web-panel/assets/{index-D6sm5-Xq.js → index-CNxg61YP.js} +1 -1
- package/src/assets/web-panel/assets/{index-C0yx-jtQ.js → index-CQlHFN_g.js} +1 -1
- package/src/assets/web-panel/assets/{index-CjTrRt13.js → index-CUEU48o1.js} +1 -1
- package/src/assets/web-panel/assets/{index-B7WBt_4T.js → index-CWGax2QW.js} +1 -1
- package/src/assets/web-panel/assets/{index-IeiL9RKc.js → index-C_JzIXUq.js} +1 -1
- package/src/assets/web-panel/assets/{index-CnHH7bnD.js → index-Cf23wVMs.js} +1 -1
- package/src/assets/web-panel/assets/{index-BKJr-TZp.js → index-CmAInUkX.js} +1 -1
- package/src/assets/web-panel/assets/{index-CiECJi-Q.js → index-CmAubjDi.js} +1 -1
- package/src/assets/web-panel/assets/{index-BCnZyIMA.js → index-Co7oM1qr.js} +1 -1
- package/src/assets/web-panel/assets/{index-Drlnwr8F.js → index-CwPUZbMI.js} +1 -1
- package/src/assets/web-panel/assets/{index-9R6BxAr0.js → index-D1naNj4U.js} +1 -1
- package/src/assets/web-panel/assets/{index-BGqqJfL0.js → index-D5CsBShd.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bi46Xu4u.js → index-DBT3YeQ9.js} +1 -1
- package/src/assets/web-panel/assets/{index-DXXtGMUJ.js → index-DLdrHhML.js} +1 -1
- package/src/assets/web-panel/assets/{index-B0PMlbMs.js → index-Dc77VR3H.js} +1 -1
- package/src/assets/web-panel/assets/{index-D0zcy54x.js → index-Dfv2lKu3.js} +1 -1
- package/src/assets/web-panel/assets/{index-BN6UPD2E.js → index-DiW0sDkz.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dxge-xWl.js → index-DpTHIRfZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CyOGN6a5.js → index-DqFXGzzC.js} +1 -1
- package/src/assets/web-panel/assets/{index-B9O9YyWE.js → index-XFe-1twF.js} +1 -1
- package/src/assets/web-panel/assets/{index-BHNYPO0b.js → index-p2HYn89m.js} +3 -3
- package/src/assets/web-panel/assets/{index-CVQMeiwH.js → index-pqfux8vZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-pPL66J85.js → index-rjzk9z1Q.js} +1 -1
- package/src/assets/web-panel/assets/{index-DoQA0-52.js → index-th2ihDc0.js} +1 -1
- package/src/assets/web-panel/assets/{index-B5REnKt8.js → index-u2YVld9W.js} +1 -1
- package/src/assets/web-panel/assets/index-xYybvEic.js +1 -0
- package/src/assets/web-panel/assets/{initDefaultProps-BTL88of4.js → initDefaultProps-C3Djh9fa.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BUB2pXwB.js → motion-BzqFmbSe.js} +1 -1
- package/src/assets/web-panel/assets/{move-egCkkOMm.js → move-DJo_FFaW.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-DAWhZC8c.js → mtc-parser-_tlTiBvk.js} +1 -1
- package/src/assets/web-panel/assets/{omit-CvOxe_6d.js → omit-CB2ZyxUg.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DZUSLZ5Z.js → pickAttrs-DZwIFD4u.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-BERxGNMY.js → placementArrow-DxZY0dgk.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-DZuDfZ9n.js → responsiveObserve-CzzGt7GL.js} +1 -1
- package/src/assets/web-panel/assets/{slide-DO756sgI.js → slide-BaIK52yz.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-BRQlIz28.js → statusUtils-3-FHu9_M.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-DCSfdybl.js → styleChecker-BkRT68fK.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-LD8dWVve.js → useFlexGapSupport-DHYwKS-s.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-BX9uW2LK.js → useFs-DVVUhV8p.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-BPSlPuHU.js → usePersonalDataHub-CkrFKAzQ.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-BmOILC9V.js → vnode-BuBLFz0c.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-1iKowKGg.js → zoom-kpm6LtXU.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +3 -3
- package/src/commands/cowork.js +418 -41
- package/src/commands/permissions.js +240 -16
- package/src/commands/plugin.js +1293 -56
- package/src/commands/session-location.js +276 -0
- package/src/commands/session.js +2 -0
- package/src/data/changelog.json +28 -2
- package/src/gateways/ws/action-protocol.js +316 -17
- package/src/gateways/ws/message-dispatcher.js +30 -0
- package/src/gateways/ws/remote-session-protocol.js +565 -35
- package/src/gateways/ws/ws-agent-handler.js +12 -0
- package/src/gateways/ws/ws-approval-gate.js +5 -0
- package/src/gateways/ws/ws-server.js +510 -50
- package/src/harness/jsonl-session-store.js +341 -24
- package/src/harness/mcp-client.js +8 -1
- package/src/harness/remote-session-audit.js +2 -0
- package/src/harness/remote-session-crypto.js +929 -21
- package/src/harness/remote-session-registry.js +945 -24
- package/src/harness/session-list-index.js +233 -14
- package/src/lib/agent-authority.js +6 -0
- package/src/lib/auto-mode-config.js +98 -3
- package/src/lib/background-agent-keeper-client.js +248 -0
- package/src/lib/background-agent-keeper-protocol.js +291 -0
- package/src/lib/background-agent-supervisor.js +1357 -85
- package/src/lib/background-interaction-resolver.js +12 -0
- package/src/lib/background-session-transport.js +23 -6
- package/src/lib/background-turn-bootstrap-protocol.js +190 -0
- package/src/lib/cowork-workflow.js +1188 -76
- package/src/lib/delivery-production-adapter.js +38 -2
- package/src/lib/dynamic-workflow-facade.js +1736 -0
- package/src/lib/execution-location-contract.js +551 -0
- package/src/lib/execution-location-runtime.js +130 -0
- package/src/lib/ide-context.js +94 -6
- package/src/lib/mcp-stdio-package-materialization.js +166 -14
- package/src/lib/packer/pkg-config-generator.js +2 -0
- package/src/lib/permission-authority.js +77 -0
- package/src/lib/permission-side-effect-center.js +495 -0
- package/src/lib/plugin-runtime/install.js +514 -13
- package/src/lib/plugin-runtime/marketplace-artifact-readback.js +900 -0
- package/src/lib/plugin-runtime/marketplace-catalog.js +1181 -0
- package/src/lib/plugin-runtime/marketplace-impact.js +408 -0
- package/src/lib/plugin-runtime/marketplace-remote-artifacts.js +1567 -0
- package/src/lib/plugin-security.js +60 -3
- package/src/lib/process-execution-broker/index.js +1095 -57
- package/src/lib/process-execution-broker/linux-bwrap-descriptor-launch.js +375 -0
- package/src/lib/process-execution-broker/linux-generic-bwrap-runtime.js +90 -16
- package/src/lib/process-execution-broker/linux-generic-bwrap.js +159 -18
- package/src/lib/process-execution-broker/macos-mcp-launcher-contract.js +278 -0
- package/src/lib/process-execution-broker/macos-mcp-launcher-protocol.json +23 -0
- package/src/lib/process-execution-broker/macos-mcp-launcher.c +1497 -0
- package/src/lib/process-execution-broker/mcp-fd-entry-bootstrap.js +37 -0
- package/src/lib/process-execution-broker/platform-sandbox.js +2330 -279
- package/src/lib/process-execution-broker/windows-sandbox-helper.dll +0 -0
- package/src/lib/process-execution-broker/windows-sandbox-helper.exe +0 -0
- package/src/lib/process-execution-broker/windows-sandbox.cs +50 -4
- package/src/lib/public-ide-capability-manifest.js +3 -0
- package/src/lib/remote-approval-bridge.js +777 -34
- package/src/lib/remote-control.js +2 -0
- package/src/lib/remote-membership-authority.js +632 -0
- package/src/lib/remote-membership-coordinator.js +2973 -0
- package/src/lib/remote-membership-host-store.js +1799 -0
- package/src/lib/runtime-provenance-ledger.js +171 -46
- package/src/lib/scoped-permission-store.js +369 -0
- package/src/lib/session-anti-rollback-anchor.js +262 -5
- package/src/lib/shell-approval.js +169 -6
- package/src/lib/sub-agent-context.js +4 -0
- package/src/lib/with-file-lock.js +73 -38
- package/src/lib/workflow-definition-contract.js +149 -0
- package/src/repl/agent-repl.js +111 -36
- package/src/repl/chat-repl.js +2 -0
- package/src/repl/clipboard-image.js +735 -16
- package/src/repl/ide-status.js +1 -1
- package/src/repl/prompt-interactions.js +59 -6
- package/src/repl/remote-approval.js +29 -7
- package/src/runtime/agent-core.js +1182 -155
- package/src/runtime/headless-runner.js +52 -30
- package/src/runtime/headless-stream.js +51 -28
- package/src/workers/background-agent-keeper.js +689 -0
- package/src/workers/background-agent-worker.js +365 -13
- package/src/workers/background-turn-bootstrap.js +170 -0
- package/src/assets/web-panel/assets/MarkdownRenderer-yySN5YNM.js +0 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-Bb1O3Ofr.js +0 -1
- package/src/assets/web-panel/assets/Projects-CMolGhae.js +0 -1
- package/src/assets/web-panel/assets/RemoteSession-Biyn2-Ro.js +0 -5
- package/src/assets/web-panel/assets/devWarning-S1ld2LwU.js +0 -1
- package/src/assets/web-panel/assets/index-Drz6yq0m.js +0 -1
- package/src/assets/web-panel/assets/index-uWiUs7S_.js +0 -1
package/src/commands/cowork.js
CHANGED
|
@@ -9,7 +9,111 @@ import fs from "fs";
|
|
|
9
9
|
import path from "path";
|
|
10
10
|
import { logger } from "../lib/logger.js";
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
const SESSION_EXECUTION_LOCATION_AUTHORITY_SCHEMA =
|
|
13
|
+
"cc-session-execution-location-authority/v1";
|
|
14
|
+
|
|
15
|
+
function workflowAuthorityError(code, message) {
|
|
16
|
+
const error = new Error(message);
|
|
17
|
+
error.code = code;
|
|
18
|
+
error.executionStarted = false;
|
|
19
|
+
return error;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function requireWorkflowExecutionAuthoritySession(sessionId) {
|
|
23
|
+
if (typeof sessionId !== "string" || sessionId.trim() === "") {
|
|
24
|
+
throw workflowAuthorityError(
|
|
25
|
+
"CC_DYNAMIC_WORKFLOW_EXECUTION_AUTHORITY_MISSING",
|
|
26
|
+
"--execution-authority-session <id> is required",
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
return sessionId;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function projectWorkflowExecutionAuthority(sessionId, verifiedProof) {
|
|
33
|
+
requireWorkflowExecutionAuthoritySession(sessionId);
|
|
34
|
+
let proof;
|
|
35
|
+
try {
|
|
36
|
+
proof = structuredClone(verifiedProof);
|
|
37
|
+
} catch {
|
|
38
|
+
throw workflowAuthorityError(
|
|
39
|
+
"CC_DYNAMIC_WORKFLOW_EXECUTION_AUTHORITY_INVALID",
|
|
40
|
+
"verified execution authority could not be safely snapshotted",
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
if (proof?.sessionId !== sessionId) {
|
|
44
|
+
throw workflowAuthorityError(
|
|
45
|
+
"CC_DYNAMIC_WORKFLOW_EXECUTION_AUTHORITY_SESSION_MISMATCH",
|
|
46
|
+
"verified execution authority does not match the requested session",
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
return Object.freeze({
|
|
50
|
+
schema: SESSION_EXECUTION_LOCATION_AUTHORITY_SCHEMA,
|
|
51
|
+
authority: "verified-session-start",
|
|
52
|
+
sessionId: proof.sessionId,
|
|
53
|
+
headHash: proof.headHash,
|
|
54
|
+
eventCount: proof.eventCount,
|
|
55
|
+
binding: proof.binding,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function renderWorkflowPreflight(preflight) {
|
|
60
|
+
const color = preflight.allowed ? chalk.green : chalk.red;
|
|
61
|
+
logger.log(color(preflight.allowed ? "READY" : "BLOCKED"));
|
|
62
|
+
logger.log(` definition: ${preflight.definition.definitionDigest}`);
|
|
63
|
+
logger.log(
|
|
64
|
+
` task calls: ${preflight.scale.worstCaseTaskCalls ?? "unknown"}`,
|
|
65
|
+
);
|
|
66
|
+
logger.log(
|
|
67
|
+
` tokens/USD: ${preflight.cost.projectedTokens ?? "unknown"} / ${preflight.cost.projectedUsd ?? "unknown"}`,
|
|
68
|
+
);
|
|
69
|
+
for (const blocker of preflight.blockers) {
|
|
70
|
+
logger.log(chalk.red(` blocker: ${blocker}`));
|
|
71
|
+
}
|
|
72
|
+
for (const warning of preflight.warnings) {
|
|
73
|
+
logger.log(chalk.yellow(` warning: ${warning}`));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
async function loadCoworkWorkflowRecord(cwd, id, definitionDigest) {
|
|
78
|
+
const { getWorkflowRecord, getWorkflowVersion } =
|
|
79
|
+
await import("../lib/cowork-workflow.js");
|
|
80
|
+
return definitionDigest
|
|
81
|
+
? getWorkflowVersion(cwd, id, definitionDigest)
|
|
82
|
+
: getWorkflowRecord(cwd, id);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
function verifyWorkflowRunAuthorities(
|
|
86
|
+
cwd,
|
|
87
|
+
{ workflowId, definitionDigest, executionAuthoritySessionId },
|
|
88
|
+
deps,
|
|
89
|
+
) {
|
|
90
|
+
const definitionAuthority = deps.getWorkflowVersion(
|
|
91
|
+
cwd,
|
|
92
|
+
workflowId,
|
|
93
|
+
definitionDigest,
|
|
94
|
+
);
|
|
95
|
+
if (
|
|
96
|
+
!definitionAuthority ||
|
|
97
|
+
definitionAuthority.definitionDigest !== definitionDigest
|
|
98
|
+
) {
|
|
99
|
+
throw workflowAuthorityError(
|
|
100
|
+
"CC_DYNAMIC_WORKFLOW_DEFINITION_AUTHORITY_DRIFT",
|
|
101
|
+
"the exact admitted workflow definition version is no longer available",
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
const executionLocationAuthority = projectWorkflowExecutionAuthority(
|
|
105
|
+
executionAuthoritySessionId,
|
|
106
|
+
deps.getVerifiedSessionExecutionLocationAuthority(
|
|
107
|
+
executionAuthoritySessionId,
|
|
108
|
+
),
|
|
109
|
+
);
|
|
110
|
+
return Object.freeze({
|
|
111
|
+
definitionAuthority,
|
|
112
|
+
executionLocationAuthority,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export function registerCoworkCommand(program, commandDeps = {}) {
|
|
13
117
|
const cowork = program
|
|
14
118
|
.command("cowork")
|
|
15
119
|
.description(
|
|
@@ -799,6 +903,188 @@ export function registerCoworkCommand(program) {
|
|
|
799
903
|
console.log(JSON.stringify(wf, null, 2));
|
|
800
904
|
});
|
|
801
905
|
|
|
906
|
+
workflow
|
|
907
|
+
.command("versions <id>")
|
|
908
|
+
.description("List immutable saved definition versions")
|
|
909
|
+
.option("--json", "Machine-readable JSON output")
|
|
910
|
+
.action(async (id, options) => {
|
|
911
|
+
try {
|
|
912
|
+
const { listWorkflowVersions } =
|
|
913
|
+
await import("../lib/cowork-workflow.js");
|
|
914
|
+
const versions = listWorkflowVersions(process.cwd(), id);
|
|
915
|
+
if (options.json) {
|
|
916
|
+
console.log(JSON.stringify(versions, null, 2));
|
|
917
|
+
return;
|
|
918
|
+
}
|
|
919
|
+
if (versions.length === 0) {
|
|
920
|
+
logger.log(chalk.gray(`No versioned definitions found for '${id}'.`));
|
|
921
|
+
return;
|
|
922
|
+
}
|
|
923
|
+
logger.log(chalk.bold(`${versions.length} immutable version(s):`));
|
|
924
|
+
for (const version of versions) {
|
|
925
|
+
logger.log(` ${version.definitionDigest} ${version.name}`);
|
|
926
|
+
}
|
|
927
|
+
} catch (err) {
|
|
928
|
+
logger.error(err.message);
|
|
929
|
+
process.exitCode = 1;
|
|
930
|
+
}
|
|
931
|
+
});
|
|
932
|
+
|
|
933
|
+
workflow
|
|
934
|
+
.command("manifest <id>")
|
|
935
|
+
.description(
|
|
936
|
+
"Project a versioned, digest-bound workflow definition and DAG plan",
|
|
937
|
+
)
|
|
938
|
+
.option(
|
|
939
|
+
"--definition-digest <sha256>",
|
|
940
|
+
"Inspect an immutable saved definition version",
|
|
941
|
+
)
|
|
942
|
+
.option("--json", "Machine-readable JSON output")
|
|
943
|
+
.action(async (id, options) => {
|
|
944
|
+
try {
|
|
945
|
+
const [{ createDynamicWorkflowManifest }, record] = await Promise.all([
|
|
946
|
+
import("../lib/dynamic-workflow-facade.js"),
|
|
947
|
+
loadCoworkWorkflowRecord(process.cwd(), id, options.definitionDigest),
|
|
948
|
+
]);
|
|
949
|
+
if (!record) {
|
|
950
|
+
logger.error(`Workflow not found: ${id}`);
|
|
951
|
+
process.exitCode = 1;
|
|
952
|
+
return;
|
|
953
|
+
}
|
|
954
|
+
const projected = createDynamicWorkflowManifest(record.definition);
|
|
955
|
+
const manifest = Object.freeze({
|
|
956
|
+
...projected,
|
|
957
|
+
definitionAuthority: Object.freeze({
|
|
958
|
+
status: record.status,
|
|
959
|
+
recordSchema: record.recordSchema,
|
|
960
|
+
definitionSchema: record.definitionSchema,
|
|
961
|
+
definitionDigest: record.definitionDigest,
|
|
962
|
+
}),
|
|
963
|
+
});
|
|
964
|
+
if (options.json) {
|
|
965
|
+
console.log(JSON.stringify(manifest, null, 2));
|
|
966
|
+
return;
|
|
967
|
+
}
|
|
968
|
+
logger.log(chalk.bold(`${manifest.definition.name}`));
|
|
969
|
+
logger.log(` schema: ${manifest.schema}`);
|
|
970
|
+
logger.log(` digest: ${manifest.definitionDigest}`);
|
|
971
|
+
logger.log(` authority: ${record.status}`);
|
|
972
|
+
logger.log(` adapter: ${manifest.adapter}`);
|
|
973
|
+
logger.log(` plan: ${manifest.plan.mode}`);
|
|
974
|
+
logger.log(
|
|
975
|
+
` task calls: ${manifest.plan.worstCaseTaskCalls ?? "unknown"}`,
|
|
976
|
+
);
|
|
977
|
+
logger.log(
|
|
978
|
+
` resumable: ${manifest.runtimeClaims.durablePauseResume ? "yes" : "no"}`,
|
|
979
|
+
);
|
|
980
|
+
} catch (err) {
|
|
981
|
+
logger.error(err.message);
|
|
982
|
+
process.exitCode = 1;
|
|
983
|
+
}
|
|
984
|
+
});
|
|
985
|
+
|
|
986
|
+
workflow
|
|
987
|
+
.command("preflight <id>")
|
|
988
|
+
.description(
|
|
989
|
+
"Evaluate capability, permission, sandbox, scale, and cost gates",
|
|
990
|
+
)
|
|
991
|
+
.option(
|
|
992
|
+
"--definition-digest <sha256>",
|
|
993
|
+
"Preflight an immutable saved definition version",
|
|
994
|
+
)
|
|
995
|
+
.option(
|
|
996
|
+
"--execution-authority-session <id>",
|
|
997
|
+
"Verified session whose start event anchors execution authority",
|
|
998
|
+
)
|
|
999
|
+
.option("--max-parallel <n>", "Requested maximum parallel steps", "4")
|
|
1000
|
+
.option("--json", "Machine-readable JSON output")
|
|
1001
|
+
.action(async (id, options) => {
|
|
1002
|
+
try {
|
|
1003
|
+
const [
|
|
1004
|
+
{ buildDynamicWorkflowRunAdmission },
|
|
1005
|
+
{ getWorkflowVersion },
|
|
1006
|
+
{ getVerifiedSessionExecutionLocationAuthority },
|
|
1007
|
+
record,
|
|
1008
|
+
] = await Promise.all([
|
|
1009
|
+
import("../lib/dynamic-workflow-facade.js"),
|
|
1010
|
+
import("../lib/cowork-workflow.js"),
|
|
1011
|
+
import("../harness/jsonl-session-store.js"),
|
|
1012
|
+
loadCoworkWorkflowRecord(process.cwd(), id, options.definitionDigest),
|
|
1013
|
+
]);
|
|
1014
|
+
if (!record) {
|
|
1015
|
+
if (options.json) {
|
|
1016
|
+
console.log(
|
|
1017
|
+
JSON.stringify(
|
|
1018
|
+
{
|
|
1019
|
+
schema: "cc-dynamic-workflow-run-admission-error/v1",
|
|
1020
|
+
allowed: false,
|
|
1021
|
+
executionStarted: false,
|
|
1022
|
+
code: "WORKFLOW_NOT_FOUND",
|
|
1023
|
+
message: `Workflow not found: ${id}`,
|
|
1024
|
+
},
|
|
1025
|
+
null,
|
|
1026
|
+
2,
|
|
1027
|
+
),
|
|
1028
|
+
);
|
|
1029
|
+
} else {
|
|
1030
|
+
logger.error(`Workflow not found: ${id}`);
|
|
1031
|
+
}
|
|
1032
|
+
process.exitCode = 1;
|
|
1033
|
+
return;
|
|
1034
|
+
}
|
|
1035
|
+
const executionAuthoritySessionId =
|
|
1036
|
+
requireWorkflowExecutionAuthoritySession(
|
|
1037
|
+
options.executionAuthoritySession,
|
|
1038
|
+
);
|
|
1039
|
+
const admission = buildDynamicWorkflowRunAdmission(
|
|
1040
|
+
{
|
|
1041
|
+
definitionAuthority: record,
|
|
1042
|
+
executionAuthoritySessionId,
|
|
1043
|
+
maxParallel: options.maxParallel,
|
|
1044
|
+
execution: {
|
|
1045
|
+
cwd: process.cwd(),
|
|
1046
|
+
continueOnError: false,
|
|
1047
|
+
pipeline: record.definition.pipeline === true,
|
|
1048
|
+
},
|
|
1049
|
+
},
|
|
1050
|
+
{
|
|
1051
|
+
verifyAuthorities: (lookup) =>
|
|
1052
|
+
verifyWorkflowRunAuthorities(process.cwd(), lookup, {
|
|
1053
|
+
getWorkflowVersion,
|
|
1054
|
+
getVerifiedSessionExecutionLocationAuthority,
|
|
1055
|
+
}),
|
|
1056
|
+
},
|
|
1057
|
+
);
|
|
1058
|
+
const preflight = admission.preflight;
|
|
1059
|
+
if (options.json) {
|
|
1060
|
+
console.log(JSON.stringify(preflight, null, 2));
|
|
1061
|
+
} else {
|
|
1062
|
+
renderWorkflowPreflight(preflight);
|
|
1063
|
+
}
|
|
1064
|
+
process.exitCode = admission.allowed ? 0 : 2;
|
|
1065
|
+
} catch (err) {
|
|
1066
|
+
const code = err.code || "WORKFLOW_PREFLIGHT_BLOCKED";
|
|
1067
|
+
if (options.json) {
|
|
1068
|
+
console.log(
|
|
1069
|
+
JSON.stringify(
|
|
1070
|
+
{
|
|
1071
|
+
schema: "cc-dynamic-workflow-run-admission-error/v1",
|
|
1072
|
+
allowed: false,
|
|
1073
|
+
executionStarted: false,
|
|
1074
|
+
code,
|
|
1075
|
+
message: err.message,
|
|
1076
|
+
},
|
|
1077
|
+
null,
|
|
1078
|
+
2,
|
|
1079
|
+
),
|
|
1080
|
+
);
|
|
1081
|
+
} else {
|
|
1082
|
+
logger.error(`${code}: ${err.message}`);
|
|
1083
|
+
}
|
|
1084
|
+
process.exitCode = 2;
|
|
1085
|
+
}
|
|
1086
|
+
});
|
|
1087
|
+
|
|
802
1088
|
workflow
|
|
803
1089
|
.command("add <file>")
|
|
804
1090
|
.description("Add a workflow from a JSON definition file")
|
|
@@ -832,6 +1118,14 @@ export function registerCoworkCommand(program) {
|
|
|
832
1118
|
workflow
|
|
833
1119
|
.command("run <id>")
|
|
834
1120
|
.description("Execute a saved workflow end-to-end")
|
|
1121
|
+
.option(
|
|
1122
|
+
"--definition-digest <sha256>",
|
|
1123
|
+
"Replay an immutable saved definition version",
|
|
1124
|
+
)
|
|
1125
|
+
.option(
|
|
1126
|
+
"--execution-authority-session <id>",
|
|
1127
|
+
"Verified session whose start event anchors execution authority",
|
|
1128
|
+
)
|
|
835
1129
|
.option("--continue-on-error", "Keep running after a step fails", false)
|
|
836
1130
|
.option("--max-parallel <n>", "Max parallel steps per batch", "4")
|
|
837
1131
|
.option(
|
|
@@ -840,46 +1134,127 @@ export function registerCoworkCommand(program) {
|
|
|
840
1134
|
false,
|
|
841
1135
|
)
|
|
842
1136
|
.action(async (id, options) => {
|
|
843
|
-
|
|
844
|
-
{ getWorkflow, executeWorkflow, _deps: wfDeps },
|
|
845
|
-
{ runCoworkTask },
|
|
846
|
-
] = await Promise.all([
|
|
847
|
-
import("../lib/cowork-workflow.js"),
|
|
848
|
-
import("../lib/cowork-task-runner.js"),
|
|
849
|
-
]);
|
|
850
|
-
const wf = getWorkflow(process.cwd(), id);
|
|
851
|
-
if (!wf) {
|
|
852
|
-
logger.error(`Workflow not found: ${id}`);
|
|
853
|
-
process.exit(1);
|
|
854
|
-
}
|
|
855
|
-
wfDeps.runTask = runCoworkTask;
|
|
856
|
-
|
|
857
|
-
logger.log(
|
|
858
|
-
chalk.bold(
|
|
859
|
-
`\nExecuting workflow '${wf.name}' (${wf.steps.length} steps)...`,
|
|
860
|
-
),
|
|
861
|
-
);
|
|
1137
|
+
let executionStarted = false;
|
|
862
1138
|
try {
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
1139
|
+
let workflowExecutionAuthorityModule;
|
|
1140
|
+
if (Object.hasOwn(commandDeps, "workflowExecutionAuthorityProvider")) {
|
|
1141
|
+
const descriptor = Object.getOwnPropertyDescriptor(
|
|
1142
|
+
commandDeps,
|
|
1143
|
+
"workflowExecutionAuthorityProvider",
|
|
1144
|
+
);
|
|
1145
|
+
if (!descriptor || !Object.hasOwn(descriptor, "value")) {
|
|
1146
|
+
throw new Error(
|
|
1147
|
+
"Cowork workflow authority provider seam must be a data property",
|
|
1148
|
+
);
|
|
1149
|
+
}
|
|
1150
|
+
workflowExecutionAuthorityModule = Promise.resolve({
|
|
1151
|
+
getVerifiedSessionExecutionLocationAuthority: descriptor.value,
|
|
1152
|
+
});
|
|
1153
|
+
} else {
|
|
1154
|
+
workflowExecutionAuthorityModule =
|
|
1155
|
+
import("../harness/jsonl-session-store.js");
|
|
1156
|
+
}
|
|
1157
|
+
let workflowRunTaskModule;
|
|
1158
|
+
if (Object.hasOwn(commandDeps, "workflowRunTask")) {
|
|
1159
|
+
const descriptor = Object.getOwnPropertyDescriptor(
|
|
1160
|
+
commandDeps,
|
|
1161
|
+
"workflowRunTask",
|
|
1162
|
+
);
|
|
1163
|
+
if (!descriptor || !Object.hasOwn(descriptor, "value")) {
|
|
1164
|
+
throw new Error(
|
|
1165
|
+
"Cowork workflow task runner seam must be a data property",
|
|
1166
|
+
);
|
|
1167
|
+
}
|
|
1168
|
+
workflowRunTaskModule = Promise.resolve({
|
|
1169
|
+
runCoworkTask: descriptor.value,
|
|
1170
|
+
});
|
|
1171
|
+
} else {
|
|
1172
|
+
workflowRunTaskModule = import("../lib/cowork-task-runner.js");
|
|
1173
|
+
}
|
|
1174
|
+
const [
|
|
1175
|
+
{ executeWorkflow: executeCoworkWorkflow, getWorkflowVersion },
|
|
1176
|
+
{ executeDynamicWorkflowWithAdmission },
|
|
1177
|
+
{ getVerifiedSessionExecutionLocationAuthority },
|
|
1178
|
+
{ runCoworkTask },
|
|
1179
|
+
] = await Promise.all([
|
|
1180
|
+
import("../lib/cowork-workflow.js"),
|
|
1181
|
+
import("../lib/dynamic-workflow-facade.js"),
|
|
1182
|
+
workflowExecutionAuthorityModule,
|
|
1183
|
+
workflowRunTaskModule,
|
|
1184
|
+
]);
|
|
1185
|
+
if (typeof runCoworkTask !== "function") {
|
|
1186
|
+
throw new Error("Cowork workflow task runner is unavailable");
|
|
1187
|
+
}
|
|
1188
|
+
if (
|
|
1189
|
+
typeof getVerifiedSessionExecutionLocationAuthority !== "function"
|
|
1190
|
+
) {
|
|
1191
|
+
throw new Error(
|
|
1192
|
+
"Cowork workflow execution authority provider is unavailable",
|
|
1193
|
+
);
|
|
1194
|
+
}
|
|
1195
|
+
const record = await loadCoworkWorkflowRecord(
|
|
1196
|
+
process.cwd(),
|
|
1197
|
+
id,
|
|
1198
|
+
options.definitionDigest,
|
|
1199
|
+
);
|
|
1200
|
+
if (!record) {
|
|
1201
|
+
logger.error(`Workflow not found: ${id}`);
|
|
1202
|
+
process.exitCode = 1;
|
|
1203
|
+
return;
|
|
1204
|
+
}
|
|
1205
|
+
const wf = record.definition;
|
|
1206
|
+
const executionAuthoritySessionId =
|
|
1207
|
+
requireWorkflowExecutionAuthoritySession(
|
|
1208
|
+
options.executionAuthoritySession,
|
|
1209
|
+
);
|
|
1210
|
+
const outcome = await executeDynamicWorkflowWithAdmission(
|
|
1211
|
+
{
|
|
1212
|
+
definitionAuthority: record,
|
|
1213
|
+
executionAuthoritySessionId,
|
|
1214
|
+
maxParallel: options.maxParallel,
|
|
1215
|
+
execution: {
|
|
1216
|
+
cwd: process.cwd(),
|
|
1217
|
+
continueOnError: !!options.continueOnError,
|
|
1218
|
+
// Omit (rather than pass undefined) when absent so a
|
|
1219
|
+
// workflow-level `pipeline: true` remains authoritative.
|
|
1220
|
+
...(options.pipeline ? { pipeline: true } : {}),
|
|
1221
|
+
onStepStart: ({ stepId }) =>
|
|
1222
|
+
logger.log(chalk.gray(` → step ${stepId} ...`)),
|
|
1223
|
+
onStepComplete: (out) => {
|
|
1224
|
+
const flag =
|
|
1225
|
+
out.status === "completed"
|
|
1226
|
+
? chalk.green("✓")
|
|
1227
|
+
: out.status === "skipped"
|
|
1228
|
+
? chalk.gray("—")
|
|
1229
|
+
: chalk.red("✗");
|
|
1230
|
+
logger.log(` ${flag} ${out.id} (${out.status})`);
|
|
1231
|
+
},
|
|
1232
|
+
},
|
|
1233
|
+
onAdmitted: () => {
|
|
1234
|
+
executionStarted = true;
|
|
1235
|
+
logger.log(
|
|
1236
|
+
chalk.bold(
|
|
1237
|
+
`\nExecuting workflow '${wf.name}' (${wf.steps.length} steps, ${record.definitionDigest})...`,
|
|
1238
|
+
),
|
|
1239
|
+
);
|
|
1240
|
+
},
|
|
881
1241
|
},
|
|
882
|
-
|
|
1242
|
+
{
|
|
1243
|
+
verifyAuthorities: (lookup) =>
|
|
1244
|
+
verifyWorkflowRunAuthorities(process.cwd(), lookup, {
|
|
1245
|
+
getWorkflowVersion,
|
|
1246
|
+
getVerifiedSessionExecutionLocationAuthority,
|
|
1247
|
+
}),
|
|
1248
|
+
executeWorkflow: (execution) =>
|
|
1249
|
+
executeCoworkWorkflow({ ...execution, runTask: runCoworkTask }),
|
|
1250
|
+
},
|
|
1251
|
+
);
|
|
1252
|
+
if (!outcome.allowed) {
|
|
1253
|
+
renderWorkflowPreflight(outcome.preflight);
|
|
1254
|
+
process.exitCode = 2;
|
|
1255
|
+
return;
|
|
1256
|
+
}
|
|
1257
|
+
const result = outcome.record;
|
|
883
1258
|
const color =
|
|
884
1259
|
result.status === "completed"
|
|
885
1260
|
? chalk.green
|
|
@@ -887,9 +1262,11 @@ export function registerCoworkCommand(program) {
|
|
|
887
1262
|
? chalk.yellow
|
|
888
1263
|
: chalk.red;
|
|
889
1264
|
logger.log(color(`\nWorkflow ${result.status}.\n`));
|
|
1265
|
+
process.exitCode = result.status === "completed" ? 0 : 1;
|
|
890
1266
|
} catch (err) {
|
|
891
|
-
logger.error(err.message);
|
|
892
|
-
process.
|
|
1267
|
+
logger.error(`${err.code || "WORKFLOW_RUN_FAILED"}: ${err.message}`);
|
|
1268
|
+
process.exitCode =
|
|
1269
|
+
executionStarted || err.executionStarted === true ? 1 : 2;
|
|
893
1270
|
}
|
|
894
1271
|
});
|
|
895
1272
|
|