chainlesschain 0.165.1 → 0.165.2
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-lS1R0Cza.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CPBtdiU2.js → ActionButton-BmlgBPsj.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-Dayq7Dp7.js → Analytics-CNKczv1S.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-6U7bPb2s.js → AppLayout-BuZGJARQ.js} +4 -4
- package/src/assets/web-panel/assets/{Artifacts-D2Iqg_3D.js → Artifacts-Dm73Sl-O.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-CdoOB7WV.js → Audit-BGMW7A5e.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-DrnAVB8w.js → BackgroundAgents-BQ6M54JR.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-CesMi5cy.js → Backup-DBzGP0bR.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-DaX9ptax.js → BaseInput-D1mLCoOV.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-OrwOPxDS.js → Chat-BUfcN7p8.js} +4 -4
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-CvPZFRxM.js → ChatBubbleRenderer-CY5m8ZHg.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-DiHbcysC.js → Checkbox-Du0Yg5Pi.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-CbgCkaBJ.js → Codegen-B2RXziHW.js} +1 -1
- package/src/assets/web-panel/assets/{Col-Du5hgrh4.js → Col-DWhekOrR.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DsPOBW-p.js → Community-HQhrkon4.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-BwHIFkNC.js → Compact-izHNb4uz.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BvrDQSgd.js → Compliance-BDwLy41-.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-gwAE6arx.js → Cowork-DFJhLa7K.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-DW-0l4uF.js → Cron-DYY9RG7-.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-j-NsLesB.js → Crosschain-rr7tJTtv.js} +1 -1
- package/src/assets/web-panel/assets/{DID-CibVEBOI.js → DID-D2sfHRLi.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-W4z9vSfe.js → Dashboard-q_eGdhha.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-DAcrkKxG.js → Dropdown-Cufrh2Bz.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-6GXah-89.js → EmailListRenderer-B-kdv10f.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-TKDCq8Ku.js → FamilyGuardDashboard-D21XjgfG.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-BXBLlcNm.js → Federation-CAwRTLZH.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-BoJJBkG3.js → FormItemContext-vx3daNDF.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-okjsl46v.js → GenericCardRenderer-CRWY2wU4.js} +1 -1
- package/src/assets/web-panel/assets/{Git-Rvs7i6nn.js → Git-Q6SwauyD.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-CHSUxXXS.js → Governance-BJ1q4IQZ.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-V3BlfxsB.js → Inference-CSWjROgD.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-C_NlD4aR.js → KnowledgeGraph-fzuQsWuY.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-Nn4LNxhA.js → Logs-DVF8Mnns.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-BLif4QSg.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-DEmjFcg-.js → Marketplace-BQP7LOA4.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DlopXipI.js → McpTools-BNlJCmNc.js} +4 -4
- package/src/assets/web-panel/assets/{Memory-BG3ynX60.js → Memory-DLLg5WQ4.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-DeRzWOfT.js → MobileBridge-CR2skNAF.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-Tyd3o2A0.js → MobileProjects-BxVavObl.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BoPbOv1C.js → Mtc-B17pgqMI.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-un-rTHp7.js → MtcAudit-4UmV5cIL.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-Ds0oveEB.js → Multisig-DoMEXEcU.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-D09JI-yY.js → NLProgramming-h9DMXFX4.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-DTRhiKJn.js → Notes-Cihn-xX8.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-BAnnNCim.js → NotificationSettings-BE6ZGa3R.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-Yr-1fSYi.js → OrderTableRenderer-CnwojoSI.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-S9EAolpj.js → Organization-B2vpwmjb.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-CqcLKqJ8.js → Overflow-C4z28R0-.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-Dw0F9EcU.js → P2P-BVlFkwhW.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-BDRwUevN.js → PdhVaultBrowser-BXbEdL5B.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-D3_c3nKB.js → Permissions-C28xs4lp.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CxdMV98x.js → PersonalDataHub-Dgl_rBjM.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-CgjNQFLI.js → Pipeline-3QUIhrKI.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-BHghIIht.js → Privacy-8Gh33OZ5.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-De6pqaKM.js → ProjectInit-BNmg4tZi.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-Bg4ZkNYQ.js → ProjectSettings-vgMfeCf9.js} +2 -2
- package/src/assets/web-panel/assets/Projects-BhtAVilc.js +1 -0
- package/src/assets/web-panel/assets/{Providers-CUnHbNf-.js → Providers-CXoOa8eX.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-DA2f3Wts.js → QrScannerModal-BhfTF0oS.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-C1FeHDqp.js → QuickAsk-C746HEAj.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-B5guaUMN.js → Recommend-BSej8Eo0.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-PDADSds3.js → RemoteSession-f3gmnlG3.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-eTlRhgvK.js → Reputation-CyvybpkN.js} +1 -1
- package/src/assets/web-panel/assets/{Row-D7AqSGY0.js → Row-DwV2PeYn.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-JiuLm4Ja.js → RssFeed-11GrzjZy.js} +3 -3
- package/src/assets/web-panel/assets/{Search-CwruahW3.js → Search-BjKXkrAY.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CdhqaR0b.js → Security-eWiFb9Yk.js} +4 -4
- package/src/assets/web-panel/assets/{Services-CU0ZIlcT.js → Services-CdCsMAtt.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-CtduPfAb.js → Skeleton-4Q2UTKQ5.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-CROXm6AY.js → Skills-v4rtYrRj.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-DiZiABFD.js → Sla-CRhsFvd_.js} +1 -1
- package/src/assets/web-panel/assets/SpeechSettings-DLjKsDVu.js +1 -0
- package/src/assets/web-panel/assets/{SyncSettings-DBX6J1Oe.js → SyncSettings-D16zonl7.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-BLyRJd3-.js → Tasks-Xxozz0i_.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-BKa5qzmk.js → Templates-CXJpPtCT.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-DnD3a4M6.js → Tenant-XRV0L1ZF.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-DEitQeTb.js → Terminal-CYuO1i_w.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-CjHggTDq.js → TimelineRenderer-BXqitWsu.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-CsGT7sfl.js → Tokens-BvPrDHIy.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-yr4rFDrW.js → Trigger-DhCrSTf5.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-CLvu1Sjp.js → Trust-DmsuZD6K.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-B0m7yUP8.js → UkeySign-D_yrts5C.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-C0VvP4lc.js → VideoEditing-B01ihPrm.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-kllBAG1M.js → Wallet-DpUjKa-N.js} +3 -3
- package/src/assets/web-panel/assets/{WebAuthn-C54UQNLx.js → WebAuthn-CL07yON6.js} +3 -3
- package/src/assets/web-panel/assets/{WorkflowEditor-B7y8qSvU.js → WorkflowEditor-CLMflnRr.js} +1 -1
- package/src/assets/web-panel/assets/{chat-DRzTh8CJ.js → chat-DtUqe8h_.js} +1 -1
- package/src/assets/web-panel/assets/{colors-BSMwSnCx.js → colors-DPKrgVfy.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BTg602H5.js → compact-item-BTt2GtOm.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-B6EGsdvp.js → createContext-D_VeUc1J.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-Bj5nUW2v.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-DDKqJ8RD.js → hasIn-1kndiylj.js} +1 -1
- package/src/assets/web-panel/assets/{index-CUEU48o1.js → index-2eyAXE3d.js} +1 -1
- package/src/assets/web-panel/assets/{index-rjzk9z1Q.js → index-4bna2_SR.js} +1 -1
- package/src/assets/web-panel/assets/{index-CmAubjDi.js → index-8nz_fmlj.js} +1 -1
- package/src/assets/web-panel/assets/{index-Co7oM1qr.js → index-B9KvcS7R.js} +1 -1
- package/src/assets/web-panel/assets/{index-BMuGd2--.js → index-BAXfRKfG.js} +1 -1
- package/src/assets/web-panel/assets/{index-BVTAl5N2.js → index-BHpBMWCh.js} +1 -1
- package/src/assets/web-panel/assets/{index-DpTHIRfZ.js → index-BaZAbw9A.js} +1 -1
- package/src/assets/web-panel/assets/{index-CWGax2QW.js → index-BepLZwgB.js} +1 -1
- package/src/assets/web-panel/assets/{index-DiW0sDkz.js → index-Bhudc_Ez.js} +1 -1
- package/src/assets/web-panel/assets/{index-CGNklbP6.js → index-BlDNVgBt.js} +1 -1
- package/src/assets/web-panel/assets/{index-u2YVld9W.js → index-By5n8up9.js} +1 -1
- package/src/assets/web-panel/assets/{index-pqfux8vZ.js → index-CHG-KcS4.js} +1 -1
- package/src/assets/web-panel/assets/index-CPcM-eqo.js +1 -0
- package/src/assets/web-panel/assets/{index-BRqt4fO-.js → index-CX81qSM4.js} +1 -1
- package/src/assets/web-panel/assets/{index-BsR7Y2NG.js → index-CauoBQkH.js} +1 -1
- package/src/assets/web-panel/assets/{index-C_JzIXUq.js → index-CcO04eDn.js} +1 -1
- package/src/assets/web-panel/assets/{index-CQlHFN_g.js → index-CtF7EN49.js} +1 -1
- package/src/assets/web-panel/assets/{index-CwPUZbMI.js → index-CzjkKUmR.js} +1 -1
- package/src/assets/web-panel/assets/{index-th2ihDc0.js → index-D95OFht7.js} +1 -1
- package/src/assets/web-panel/assets/{index-CHfLYwcW.js → index-DFIZ_1Sf.js} +1 -1
- package/src/assets/web-panel/assets/{index-C1GFfuqN.js → index-DG2MZQ3f.js} +1 -1
- package/src/assets/web-panel/assets/{index-D1naNj4U.js → index-DJ8vXGOa.js} +1 -1
- package/src/assets/web-panel/assets/{index-DLdrHhML.js → index-Dbbymxpj.js} +1 -1
- package/src/assets/web-panel/assets/{index-DBT3YeQ9.js → index-DdkplL9R.js} +1 -1
- package/src/assets/web-panel/assets/{index-BICn3Qh1.js → index-DfGl8CqG.js} +1 -1
- package/src/assets/web-panel/assets/{index-DqFXGzzC.js → index-DfKBRdSS.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bx044qDj.js → index-DsJCDUJG.js} +1 -1
- package/src/assets/web-panel/assets/{index-XFe-1twF.js → index-Dwqmtk65.js} +1 -1
- package/src/assets/web-panel/assets/{index-C66NpWy5.js → index-DxdTdBix.js} +1 -1
- package/src/assets/web-panel/assets/{index-CmAInUkX.js → index-FzdwcSy2.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cf23wVMs.js → index-GsoUQ2M7.js} +1 -1
- package/src/assets/web-panel/assets/{index-D5CsBShd.js → index-brCInrzq.js} +1 -1
- package/src/assets/web-panel/assets/{index-323Hhxxt.js → index-dVc-CXY4.js} +1 -1
- package/src/assets/web-panel/assets/{index-p2HYn89m.js → index-fk2Rjacw.js} +3 -3
- package/src/assets/web-panel/assets/{index-Dfv2lKu3.js → index-l1BETrDb.js} +1 -1
- package/src/assets/web-panel/assets/{index-CNxg61YP.js → index-m31Ka8hZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CDTvsX8t.js → index-ocf06EVQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dc77VR3H.js → index-sDoMHTNA.js} +1 -1
- package/src/assets/web-panel/assets/index-xeSyVoRe.js +1 -0
- package/src/assets/web-panel/assets/{initDefaultProps-C3Djh9fa.js → initDefaultProps-CvyYJd7z.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BzqFmbSe.js → motion-DYZkhUdz.js} +1 -1
- package/src/assets/web-panel/assets/{move-DJo_FFaW.js → move-slnJRVT1.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-_tlTiBvk.js → mtc-parser-DVc0CKmy.js} +1 -1
- package/src/assets/web-panel/assets/{omit-CB2ZyxUg.js → omit-BCXAtHCq.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DZwIFD4u.js → pickAttrs-DBsemz_K.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-DxZY0dgk.js → placementArrow-BRtkJ-nv.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-CzzGt7GL.js → responsiveObserve-Cebq7EZn.js} +1 -1
- package/src/assets/web-panel/assets/{slide-BaIK52yz.js → slide-DT7qvId2.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-3-FHu9_M.js → statusUtils-pQiITLkG.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-BkRT68fK.js → styleChecker-c-19BVKQ.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-DHYwKS-s.js → useFlexGapSupport-DsS5-0bE.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-DVVUhV8p.js → useFs-CxGiMe5n.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-CkrFKAzQ.js → usePersonalDataHub-D9btVID5.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-BuBLFz0c.js → vnode-CUYFsFEN.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-kpm6LtXU.js → zoom-CXmn_35j.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 +14 -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 +4 -0
- package/src/lib/background-agent-supervisor.js +59 -29
- 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 +95 -5
- package/src/runtime/agent-core.js +595 -41
- package/src/workers/background-agent-keeper.js +40 -10
- package/src/assets/web-panel/assets/MarkdownRenderer-SVAgNnkt.js +0 -1
- package/src/assets/web-panel/assets/Projects-CP8vPvzs.js +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-B5pLcXUw.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
package/src/commands/cowork.js
CHANGED
|
@@ -48,7 +48,7 @@ function projectWorkflowExecutionAuthority(sessionId, verifiedProof) {
|
|
|
48
48
|
}
|
|
49
49
|
return Object.freeze({
|
|
50
50
|
schema: SESSION_EXECUTION_LOCATION_AUTHORITY_SCHEMA,
|
|
51
|
-
authority: "verified-session-start",
|
|
51
|
+
authority: proof.authority || "verified-session-start",
|
|
52
52
|
sessionId: proof.sessionId,
|
|
53
53
|
headHash: proof.headHash,
|
|
54
54
|
eventCount: proof.eventCount,
|
|
@@ -866,6 +866,256 @@ export function registerCoworkCommand(program, commandDeps = {}) {
|
|
|
866
866
|
.command("workflow")
|
|
867
867
|
.description("Define and execute multi-step Cowork workflows (DAG)");
|
|
868
868
|
|
|
869
|
+
workflow
|
|
870
|
+
.command("draft <prompt>")
|
|
871
|
+
.description(
|
|
872
|
+
"Generate a digest-bound workflow draft for explicit human review",
|
|
873
|
+
)
|
|
874
|
+
.option("--provider <name>", "LLM provider to use")
|
|
875
|
+
.option("--model <name>", "LLM model to use")
|
|
876
|
+
.action(async (prompt, options) => {
|
|
877
|
+
try {
|
|
878
|
+
let chat;
|
|
879
|
+
let provider;
|
|
880
|
+
let model;
|
|
881
|
+
if (Object.hasOwn(commandDeps, "workflowDraftChat")) {
|
|
882
|
+
const descriptor = Object.getOwnPropertyDescriptor(
|
|
883
|
+
commandDeps,
|
|
884
|
+
"workflowDraftChat",
|
|
885
|
+
);
|
|
886
|
+
if (
|
|
887
|
+
!descriptor ||
|
|
888
|
+
!Object.hasOwn(descriptor, "value") ||
|
|
889
|
+
typeof descriptor.value !== "function"
|
|
890
|
+
) {
|
|
891
|
+
throw new Error(
|
|
892
|
+
"Cowork workflow draft chat seam must be a function data property",
|
|
893
|
+
);
|
|
894
|
+
}
|
|
895
|
+
chat = descriptor.value;
|
|
896
|
+
provider = options.provider || "fixture";
|
|
897
|
+
model = options.model || "fixture-model";
|
|
898
|
+
} else {
|
|
899
|
+
const [{ createChatFn }, { BUILT_IN_PROVIDERS }, { loadConfig }] =
|
|
900
|
+
await Promise.all([
|
|
901
|
+
import("../lib/cowork-adapter.js"),
|
|
902
|
+
import("../lib/llm-providers.js"),
|
|
903
|
+
import("../lib/config-manager.js"),
|
|
904
|
+
]);
|
|
905
|
+
const config = loadConfig()?.llm || {};
|
|
906
|
+
provider =
|
|
907
|
+
options.provider ||
|
|
908
|
+
process.env.LLM_PROVIDER ||
|
|
909
|
+
config.provider ||
|
|
910
|
+
"ollama";
|
|
911
|
+
const providerDefinition = BUILT_IN_PROVIDERS[provider];
|
|
912
|
+
if (!providerDefinition) {
|
|
913
|
+
throw new Error(`Unsupported workflow draft provider: ${provider}`);
|
|
914
|
+
}
|
|
915
|
+
model =
|
|
916
|
+
options.model ||
|
|
917
|
+
process.env.LLM_MODEL ||
|
|
918
|
+
(config.provider === provider ? config.model : null) ||
|
|
919
|
+
providerDefinition.models[0];
|
|
920
|
+
chat = createChatFn({
|
|
921
|
+
provider,
|
|
922
|
+
model,
|
|
923
|
+
...(config.provider === provider && config.baseUrl
|
|
924
|
+
? { baseUrl: config.baseUrl }
|
|
925
|
+
: {}),
|
|
926
|
+
...(config.provider === provider && config.apiKey
|
|
927
|
+
? { apiKey: config.apiKey }
|
|
928
|
+
: {}),
|
|
929
|
+
});
|
|
930
|
+
}
|
|
931
|
+
const { generateDynamicWorkflowDraft } =
|
|
932
|
+
await import("../lib/dynamic-workflow-draft.js");
|
|
933
|
+
const draft = await generateDynamicWorkflowDraft(
|
|
934
|
+
{ prompt, provider, model },
|
|
935
|
+
{ chat },
|
|
936
|
+
);
|
|
937
|
+
console.log(JSON.stringify(draft, null, 2));
|
|
938
|
+
} catch (err) {
|
|
939
|
+
logger.error(`WORKFLOW_DRAFT_FAILED: ${err.message}`);
|
|
940
|
+
process.exitCode = 2;
|
|
941
|
+
}
|
|
942
|
+
});
|
|
943
|
+
|
|
944
|
+
workflow
|
|
945
|
+
.command("review <file>")
|
|
946
|
+
.description(
|
|
947
|
+
"Accept or reject an exact workflow draft; accepted definitions are versioned",
|
|
948
|
+
)
|
|
949
|
+
.requiredOption(
|
|
950
|
+
"--expected-draft-digest <sha256>",
|
|
951
|
+
"Exact draft digest shown during review",
|
|
952
|
+
)
|
|
953
|
+
.requiredOption("--reviewer <identity>", "Human reviewer identity")
|
|
954
|
+
.option("--accept", "Accept and save the reviewed definition")
|
|
955
|
+
.option("--reject", "Reject without saving the definition")
|
|
956
|
+
.option("--reason <text>", "Bounded, secret-free review reason")
|
|
957
|
+
.option("--json", "Machine-readable JSON output")
|
|
958
|
+
.action(async (file, options) => {
|
|
959
|
+
try {
|
|
960
|
+
if (options.accept === options.reject) {
|
|
961
|
+
throw new Error("exactly one of --accept or --reject is required");
|
|
962
|
+
}
|
|
963
|
+
const [draftModule, workflowModule] = await Promise.all([
|
|
964
|
+
import("../lib/dynamic-workflow-draft.js"),
|
|
965
|
+
import("../lib/cowork-workflow.js"),
|
|
966
|
+
]);
|
|
967
|
+
const draft = draftModule.readDynamicWorkflowDraftFile(file);
|
|
968
|
+
const review = draftModule.reviewDynamicWorkflowDraft({
|
|
969
|
+
draft,
|
|
970
|
+
expectedDraftDigest: options.expectedDraftDigest,
|
|
971
|
+
decision: options.accept ? "accept" : "reject",
|
|
972
|
+
reviewer: options.reviewer,
|
|
973
|
+
reason: options.reason,
|
|
974
|
+
});
|
|
975
|
+
let persisted = false;
|
|
976
|
+
if (review.status === "accepted") {
|
|
977
|
+
workflowModule.saveWorkflow(process.cwd(), review.definition);
|
|
978
|
+
const record = workflowModule.getWorkflowRecord(
|
|
979
|
+
process.cwd(),
|
|
980
|
+
review.definition.id,
|
|
981
|
+
);
|
|
982
|
+
if (
|
|
983
|
+
!record ||
|
|
984
|
+
record.definitionDigest !== review.acceptedDefinitionDigest
|
|
985
|
+
) {
|
|
986
|
+
throw new Error(
|
|
987
|
+
"reviewed workflow readback did not match its accepted digest",
|
|
988
|
+
);
|
|
989
|
+
}
|
|
990
|
+
persisted = true;
|
|
991
|
+
}
|
|
992
|
+
const result = Object.freeze({ ...review, persisted });
|
|
993
|
+
if (options.json) {
|
|
994
|
+
console.log(JSON.stringify(result, null, 2));
|
|
995
|
+
return;
|
|
996
|
+
}
|
|
997
|
+
const label = review.status === "accepted" ? "Accepted" : "Rejected";
|
|
998
|
+
logger.log(`${label} workflow draft ${review.draftDigest}`);
|
|
999
|
+
logger.log(` review: ${review.reviewDigest}`);
|
|
1000
|
+
logger.log(
|
|
1001
|
+
` definition: ${review.acceptedDefinitionDigest || "not-saved"}`,
|
|
1002
|
+
);
|
|
1003
|
+
} catch (err) {
|
|
1004
|
+
logger.error(`WORKFLOW_REVIEW_FAILED: ${err.message}`);
|
|
1005
|
+
process.exitCode = 2;
|
|
1006
|
+
}
|
|
1007
|
+
});
|
|
1008
|
+
|
|
1009
|
+
workflow
|
|
1010
|
+
.command("runtime-status <run-id>")
|
|
1011
|
+
.description("Read a durable workflow run without invoking a task provider")
|
|
1012
|
+
.option("--json", "Machine-readable JSON output")
|
|
1013
|
+
.action(async (runId, options) => {
|
|
1014
|
+
try {
|
|
1015
|
+
const runtime = await import("../lib/dynamic-workflow-runtime.js");
|
|
1016
|
+
const statePath = runtime.dynamicWorkflowRunStatePath(
|
|
1017
|
+
process.cwd(),
|
|
1018
|
+
runId,
|
|
1019
|
+
);
|
|
1020
|
+
const projection = runtime.projectDynamicWorkflowRuntime(statePath);
|
|
1021
|
+
if (options.json) {
|
|
1022
|
+
console.log(JSON.stringify(projection, null, 2));
|
|
1023
|
+
return;
|
|
1024
|
+
}
|
|
1025
|
+
logger.log(`${projection.runId} ${projection.status}`);
|
|
1026
|
+
logger.log(` revision: ${projection.revision}`);
|
|
1027
|
+
logger.log(` definition: ${projection.definitionDigest}`);
|
|
1028
|
+
logger.log(
|
|
1029
|
+
` effects: ${projection.settledEffectCount}/${projection.effectCount} settled`,
|
|
1030
|
+
);
|
|
1031
|
+
for (const effect of projection.pendingEffects) {
|
|
1032
|
+
logger.log(` pending: ${effect.id} (${effect.key})`);
|
|
1033
|
+
}
|
|
1034
|
+
} catch (err) {
|
|
1035
|
+
logger.error(`WORKFLOW_RUNTIME_STATUS_FAILED: ${err.message}`);
|
|
1036
|
+
process.exitCode = 2;
|
|
1037
|
+
}
|
|
1038
|
+
});
|
|
1039
|
+
|
|
1040
|
+
for (const action of ["pause", "stop", "resume"]) {
|
|
1041
|
+
workflow
|
|
1042
|
+
.command(`runtime-${action} <run-id>`)
|
|
1043
|
+
.description(
|
|
1044
|
+
`${action[0].toUpperCase()}${action.slice(1)} a revision-bound durable workflow run`,
|
|
1045
|
+
)
|
|
1046
|
+
.requiredOption(
|
|
1047
|
+
"--expected-revision <n>",
|
|
1048
|
+
"Exact runtime revision shown by runtime-status",
|
|
1049
|
+
)
|
|
1050
|
+
.option("--json", "Machine-readable JSON output")
|
|
1051
|
+
.action(async (runId, options) => {
|
|
1052
|
+
try {
|
|
1053
|
+
const runtime = await import("../lib/dynamic-workflow-runtime.js");
|
|
1054
|
+
const statePath = runtime.dynamicWorkflowRunStatePath(
|
|
1055
|
+
process.cwd(),
|
|
1056
|
+
runId,
|
|
1057
|
+
);
|
|
1058
|
+
const operation =
|
|
1059
|
+
action === "pause"
|
|
1060
|
+
? runtime.requestDurableWorkflowPause
|
|
1061
|
+
: action === "stop"
|
|
1062
|
+
? runtime.requestDurableWorkflowStop
|
|
1063
|
+
: runtime.prepareDurableWorkflowResume;
|
|
1064
|
+
const state = operation(statePath, options.expectedRevision);
|
|
1065
|
+
const projection = runtime.projectDynamicWorkflowRuntime(state);
|
|
1066
|
+
if (options.json) {
|
|
1067
|
+
console.log(JSON.stringify(projection, null, 2));
|
|
1068
|
+
} else {
|
|
1069
|
+
logger.log(
|
|
1070
|
+
`${projection.runId} ${projection.status} revision=${projection.revision}`,
|
|
1071
|
+
);
|
|
1072
|
+
}
|
|
1073
|
+
} catch (err) {
|
|
1074
|
+
logger.error(
|
|
1075
|
+
`WORKFLOW_RUNTIME_${action.toUpperCase()}_FAILED: ${err.message}`,
|
|
1076
|
+
);
|
|
1077
|
+
process.exitCode = 2;
|
|
1078
|
+
}
|
|
1079
|
+
});
|
|
1080
|
+
}
|
|
1081
|
+
|
|
1082
|
+
workflow
|
|
1083
|
+
.command("runtime-reconcile <run-id> <effect-id> <result-file>")
|
|
1084
|
+
.description(
|
|
1085
|
+
"Settle one outcome-unknown effect from a bounded provider result file",
|
|
1086
|
+
)
|
|
1087
|
+
.requiredOption(
|
|
1088
|
+
"--expected-revision <n>",
|
|
1089
|
+
"Exact runtime revision shown by runtime-status",
|
|
1090
|
+
)
|
|
1091
|
+
.option("--json", "Machine-readable JSON output")
|
|
1092
|
+
.action(async (runId, effectId, resultFile, options) => {
|
|
1093
|
+
try {
|
|
1094
|
+
const runtime = await import("../lib/dynamic-workflow-runtime.js");
|
|
1095
|
+
const statePath = runtime.dynamicWorkflowRunStatePath(
|
|
1096
|
+
process.cwd(),
|
|
1097
|
+
runId,
|
|
1098
|
+
);
|
|
1099
|
+
const result = runtime.readDynamicWorkflowEffectResultFile(resultFile);
|
|
1100
|
+
const state = runtime.reconcileDurableWorkflowEffect(statePath, {
|
|
1101
|
+
expectedRevision: options.expectedRevision,
|
|
1102
|
+
effectId,
|
|
1103
|
+
result,
|
|
1104
|
+
});
|
|
1105
|
+
const projection = runtime.projectDynamicWorkflowRuntime(state);
|
|
1106
|
+
if (options.json) {
|
|
1107
|
+
console.log(JSON.stringify(projection, null, 2));
|
|
1108
|
+
} else {
|
|
1109
|
+
logger.log(
|
|
1110
|
+
`${projection.runId} ${projection.status} revision=${projection.revision}`,
|
|
1111
|
+
);
|
|
1112
|
+
}
|
|
1113
|
+
} catch (err) {
|
|
1114
|
+
logger.error(`WORKFLOW_RUNTIME_RECONCILE_FAILED: ${err.message}`);
|
|
1115
|
+
process.exitCode = 2;
|
|
1116
|
+
}
|
|
1117
|
+
});
|
|
1118
|
+
|
|
869
1119
|
workflow
|
|
870
1120
|
.command("list")
|
|
871
1121
|
.description("List saved workflows")
|
|
@@ -1127,7 +1377,11 @@ export function registerCoworkCommand(program, commandDeps = {}) {
|
|
|
1127
1377
|
"Verified session whose start event anchors execution authority",
|
|
1128
1378
|
)
|
|
1129
1379
|
.option("--continue-on-error", "Keep running after a step fails", false)
|
|
1130
|
-
.option("--max-parallel <n>", "Max parallel steps per batch"
|
|
1380
|
+
.option("--max-parallel <n>", "Max parallel steps per batch")
|
|
1381
|
+
.option(
|
|
1382
|
+
"--durable-run-id <id>",
|
|
1383
|
+
"Use request-before-provider durable runtime with atomic effect batches",
|
|
1384
|
+
)
|
|
1131
1385
|
.option(
|
|
1132
1386
|
"--pipeline",
|
|
1133
1387
|
"No-barrier scheduling: start each step as soon as its own deps finish",
|
|
@@ -1203,6 +1457,8 @@ export function registerCoworkCommand(program, commandDeps = {}) {
|
|
|
1203
1457
|
return;
|
|
1204
1458
|
}
|
|
1205
1459
|
const wf = record.definition;
|
|
1460
|
+
const requestedMaxParallel =
|
|
1461
|
+
options.maxParallel || (options.durableRunId ? "1" : "4");
|
|
1206
1462
|
const executionAuthoritySessionId =
|
|
1207
1463
|
requireWorkflowExecutionAuthoritySession(
|
|
1208
1464
|
options.executionAuthoritySession,
|
|
@@ -1211,7 +1467,7 @@ export function registerCoworkCommand(program, commandDeps = {}) {
|
|
|
1211
1467
|
{
|
|
1212
1468
|
definitionAuthority: record,
|
|
1213
1469
|
executionAuthoritySessionId,
|
|
1214
|
-
maxParallel:
|
|
1470
|
+
maxParallel: requestedMaxParallel,
|
|
1215
1471
|
execution: {
|
|
1216
1472
|
cwd: process.cwd(),
|
|
1217
1473
|
continueOnError: !!options.continueOnError,
|
|
@@ -1245,8 +1501,27 @@ export function registerCoworkCommand(program, commandDeps = {}) {
|
|
|
1245
1501
|
getWorkflowVersion,
|
|
1246
1502
|
getVerifiedSessionExecutionLocationAuthority,
|
|
1247
1503
|
}),
|
|
1248
|
-
executeWorkflow: (execution) =>
|
|
1249
|
-
|
|
1504
|
+
executeWorkflow: async (execution) => {
|
|
1505
|
+
if (!options.durableRunId) {
|
|
1506
|
+
return executeCoworkWorkflow({
|
|
1507
|
+
...execution,
|
|
1508
|
+
runTask: runCoworkTask,
|
|
1509
|
+
});
|
|
1510
|
+
}
|
|
1511
|
+
const runtime =
|
|
1512
|
+
await import("../lib/dynamic-workflow-runtime.js");
|
|
1513
|
+
return runtime.executeDurableDynamicWorkflow(
|
|
1514
|
+
{
|
|
1515
|
+
statePath: runtime.dynamicWorkflowRunStatePath(
|
|
1516
|
+
process.cwd(),
|
|
1517
|
+
options.durableRunId,
|
|
1518
|
+
),
|
|
1519
|
+
runId: options.durableRunId,
|
|
1520
|
+
execution,
|
|
1521
|
+
},
|
|
1522
|
+
{ runTask: runCoworkTask },
|
|
1523
|
+
);
|
|
1524
|
+
},
|
|
1250
1525
|
},
|
|
1251
1526
|
);
|
|
1252
1527
|
if (!outcome.allowed) {
|