chainlesschain 0.163.7 → 0.164.0
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 +5 -1
- 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/assets/{AIOps-axqQfwv8.js → AIOps-D2MEn7fI.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-DV-Ro0By.js → ActionButton-lCW_4Gf0.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-Bt72WEVu.js → Analytics-Bs7i-nsS.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-BtepG55E.js → AppLayout-CK7B6S_j.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-B7KaJ7S_.js → Artifacts-C8ILjpyo.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-FNFaUg7A.js → Audit-Bb9cNaWc.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-DFb6J2wQ.js → BackgroundAgents-sC9ooXIf.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-CC7YBhyj.js → Backup-D-DrsplT.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-RkgTNVtj.js → BaseInput-uCNZpwSK.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-hHEmGZy-.js → Chat-CsDK1uE9.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-CAP9YhHv.js → ChatBubbleRenderer-OqSDt50w.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-z5wXOQP1.js → Checkbox-JhTXM1-K.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DVaDJnxy.js → Codegen-BbzZLnyD.js} +1 -1
- package/src/assets/web-panel/assets/{Col-CJmaRDR5.js → Col-D4VW4m4j.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DF29_2bI.js → Community-BXrYawxV.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DtkQkBzn.js → Compact-DCihGy1u.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-xoHDxp7I.js → Compliance-DlyZ-lk8.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-BUm-R7ht.js → Cowork-DvGZrhbO.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-Cgl14ZkB.js → Cron-DUncZi8h.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-BNcbmoqh.js → Crosschain-C_hLuUcm.js} +1 -1
- package/src/assets/web-panel/assets/{DID-Bwja0Zo9.js → DID-b6YSUqxr.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-Bk5XjEdJ.js → Dashboard-uvM15Cfb.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-Ci36Oitq.js → Dropdown-D1-Nd4qY.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer--U04ZN4q.js → EmailListRenderer-8ApvL6Zc.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-B2gNPR2s.js → FamilyGuardDashboard-LYJt8811.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-C4KghYn7.js → Federation-BbI3HGpv.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-QL7x_Q_0.js → FormItemContext-DSoEKuFu.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-F3Ryltwm.js → GenericCardRenderer-B0S9OWd5.js} +1 -1
- package/src/assets/web-panel/assets/{Git-2HassK5k.js → Git-DIs9Zhf3.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-DoBIp7oe.js → Governance-jzZXrxcl.js} +1 -1
- package/src/assets/web-panel/assets/{Inference--W01QhZ-.js → Inference-JUPjf2ZI.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DmvwqGpT.js → KnowledgeGraph-DxnfJvlP.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-BBJ4yAel.js → Logs-iXiz8BEE.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-BLCZMzhJ.js → MarkdownRenderer-GmB6DOr6.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-D5lNngSI.js → Marketplace-Y3Xch312.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-CkEVOMKH.js → McpTools-D7kGGbO7.js} +4 -4
- package/src/assets/web-panel/assets/{Memory-B1Ow1xVE.js → Memory-Do_hVxzh.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-SgYbUfb6.js → MobileBridge-CtrR0Tas.js} +1 -1
- package/src/assets/web-panel/assets/MobileProjects-BL0Czcoj.js +1 -0
- package/src/assets/web-panel/assets/{Mtc-DcTXSSma.js → Mtc-qo5QCTGd.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-Dt3WG4oj.js → MtcAudit-cq5mnjYj.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-B9B38UZx.js → Multisig-Bq0MAQHw.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-B0S4GGvG.js → NLProgramming-DdWE6Vi2.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-DZ5U58Ng.js → Notes-BxMBFcIp.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-PjL5ZW34.js → NotificationSettings-RTrAcbUe.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-DrAX2ESt.js → OrderTableRenderer-DJbpGqzT.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-Cv1GYs-c.js → Organization-SQzIPdqC.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-Bbkp_PL3.js → Overflow-02yECh22.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-BD8QUgoZ.js → P2P-BNg4pNCM.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-BO-2PeaB.js → PdhVaultBrowser-BxPJZsD3.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-D_OPVa02.js → Permissions-CLnDnPAz.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-mh-pEmaB.js → PersonalDataHub-C5m0AjGf.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-6JC2EDdb.js → Pipeline-VwOf5Dhv.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-CUshzUAG.js → Privacy-CC0W2hZd.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-Cs2Aalri.js → ProjectInit-Dz893Bob.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-1ak49tcj.js → ProjectSettings-CxQkvl0k.js} +2 -2
- package/src/assets/web-panel/assets/Projects-DDAjkUkT.js +1 -0
- package/src/assets/web-panel/assets/{Providers-CXXxvafH.js → Providers-DeB9IkxK.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-PTcDsF58.js → QrScannerModal-OCeoaswn.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-CDwucrJw.js → QuickAsk-DenotaAj.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-CJlLVRXR.js → Recommend-Cies_jjI.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-DlN-ETsO.js → RemoteSession-Dxzl5n2T.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-DI23LR6m.js → Reputation-CW0mvxgZ.js} +1 -1
- package/src/assets/web-panel/assets/{Row-Cl7UQMrM.js → Row-SEd32qZU.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CexHNfh8.js → RssFeed-BSwnJ3Lm.js} +3 -3
- package/src/assets/web-panel/assets/{Search-BneBWvRN.js → Search-xe2m8bkC.js} +1 -1
- package/src/assets/web-panel/assets/{Security-DX7Phgrp.js → Security-Mq2F9Nro.js} +4 -4
- package/src/assets/web-panel/assets/{Services-BWXO8Mte.js → Services-BKGw2V3P.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DCyOjKPJ.js → Skeleton-DW95-Rxf.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-CXqERsTB.js → Skills-CHgChCv_.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-bhbrbz8E.js → Sla-tKh6k3R7.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-3IPU0HBZ.js → SpeechSettings-D6UL3dA5.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-DBNTQLbM.js → SyncSettings-D0Fw8fVL.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-quP0bkN-.js → Tasks-20x1GB3D.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-BouWmgho.js → Templates-DJ-lts-a.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-qv0D9s7z.js → Tenant-BFdGpbs7.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-BxvbE8BB.js → Terminal-Xpx61vHL.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-D-IeLnJ2.js → TimelineRenderer-C6UIvyZQ.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-CFMKKyVG.js → Tokens-Dellq08f.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-L8as3UuJ.js → Trigger-VKw8d0J-.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-MxmA4VZG.js → Trust-DNftdKT5.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-C0VvJYRi.js → UkeySign-DX9VAKJI.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-Bf5QZj8N.js → VideoEditing-B2h3jO8q.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-BIJ9riRz.js → Wallet-CjGkof7f.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-B8p9Mhkw.js → WebAuthn-2Zfcu55P.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-BVsuaPen.js → WorkflowEditor-B9eZ8UxZ.js} +1 -1
- package/src/assets/web-panel/assets/{chat-BfkjoKpV.js → chat-CQNfD-YO.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DeAlsWK8.js → colors-D4usyFT2.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-Cs97bz5j.js → compact-item-s4TpjvjX.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-BqbG60LH.js → createContext-BRCSvYxj.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DKJjSWRn.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-i_RY0b1X.js → hasIn-AdkUbkV-.js} +1 -1
- package/src/assets/web-panel/assets/{index-BOVkf1K3.js → index--00U6vXZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-B-3tEpTc.js → index-B2V-eKfK.js} +1 -1
- package/src/assets/web-panel/assets/{index-D2B4VPyP.js → index-B4JJCfQ2.js} +1 -1
- package/src/assets/web-panel/assets/{index-BkBi5TmC.js → index-BIoG5yYf.js} +1 -1
- package/src/assets/web-panel/assets/{index-79V_zv1s.js → index-BMcimU-2.js} +1 -1
- package/src/assets/web-panel/assets/{index-U4f5izHz.js → index-BPhkFZ1I.js} +1 -1
- package/src/assets/web-panel/assets/{index-DiSkx4UB.js → index-BQ3DXBtD.js} +3 -3
- package/src/assets/web-panel/assets/{index-dIHr4B_u.js → index-Bad4VNvz.js} +1 -1
- package/src/assets/web-panel/assets/{index-CIG8fQ2_.js → index-BgiXR_-_.js} +1 -1
- package/src/assets/web-panel/assets/{index-DqBgBpgp.js → index-BtobShro.js} +1 -1
- package/src/assets/web-panel/assets/{index-ZxO_-E8a.js → index-Bw2MEnUk.js} +1 -1
- package/src/assets/web-panel/assets/{index-DUUrv141.js → index-C1mJtE6q.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bm7lLR4c.js → index-C484EJiS.js} +1 -1
- package/src/assets/web-panel/assets/{index-COdGA-8n.js → index-C5KAQFPQ.js} +1 -1
- package/src/assets/web-panel/assets/index-C61cnl3K.js +1 -0
- package/src/assets/web-panel/assets/{index-CED2PL_y.js → index-C7Y8Aluc.js} +1 -1
- package/src/assets/web-panel/assets/{index-YXgLng0K.js → index-CCsM_Ybx.js} +1 -1
- package/src/assets/web-panel/assets/{index-0-agYlWL.js → index-CJCFe2Qf.js} +1 -1
- package/src/assets/web-panel/assets/{index-B5UkyA3c.js → index-CJVEOa4i.js} +1 -1
- package/src/assets/web-panel/assets/{index-B1CbOH1i.js → index-CJdQrZth.js} +1 -1
- package/src/assets/web-panel/assets/{index-s1opAL-M.js → index-CKC1t3Ic.js} +1 -1
- package/src/assets/web-panel/assets/{index-yObj1O4n.js → index-CQhAVU5t.js} +1 -1
- package/src/assets/web-panel/assets/{index-CgsqdnRV.js → index-CYdoQsa1.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dk7-v4hP.js → index-Cduu2Hhr.js} +1 -1
- package/src/assets/web-panel/assets/{index-B-JVTrpr.js → index-CkwiSLhU.js} +1 -1
- package/src/assets/web-panel/assets/{index-CeWoNHau.js → index-Cvyt-zhm.js} +1 -1
- package/src/assets/web-panel/assets/{index-CE2VtTlp.js → index-D2GjI2oe.js} +1 -1
- package/src/assets/web-panel/assets/index-D4XFHxBr.js +1 -0
- package/src/assets/web-panel/assets/{index-DmbfhJUP.js → index-DARsAyUp.js} +1 -1
- package/src/assets/web-panel/assets/{index-BESLFt4q.js → index-DVKfQ0Ux.js} +1 -1
- package/src/assets/web-panel/assets/{index-PT_5sBMA.js → index-DZT36ZYq.js} +1 -1
- package/src/assets/web-panel/assets/{index-gyFpvL7l.js → index-D_XBHopw.js} +1 -1
- package/src/assets/web-panel/assets/{index-BYUVuwKt.js → index-DdCB70SS.js} +1 -1
- package/src/assets/web-panel/assets/{index-BcUXAB2s.js → index-DzRjHxEv.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dk2qouAz.js → index-MMN9V6JF.js} +1 -1
- package/src/assets/web-panel/assets/{index-D9evtvg2.js → index-RfMr79MW.js} +1 -1
- package/src/assets/web-panel/assets/{index-BuLQobzW.js → index-_IRVsV9X.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cf3WCLmy.js → index-nXyk8GZ9.js} +1 -1
- package/src/assets/web-panel/assets/{index-CG3PRyAL.js → index-s_buFMEG.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-C9h9yKL3.js → initDefaultProps-Blmpk7HL.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BvmLsPdu.js → motion-DPBJMv1n.js} +1 -1
- package/src/assets/web-panel/assets/{move-CoL4ekU1.js → move-ButdzCM7.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-C4pMy6xV.js → mtc-parser-cyRC_QCe.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DPuJfNxx.js → omit-1epSV7hz.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-D0KEeaK2.js → pickAttrs-DuPY8xJs.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-BpkyINxt.js → placementArrow-6XZqarhe.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-DQI_wOq8.js → responsiveObserve-B40pXBWM.js} +1 -1
- package/src/assets/web-panel/assets/{slide-DYfdDiRg.js → slide-jbZ9Wu4n.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-B5dtvb0D.js → statusUtils-BKQQcVy4.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CF310mSj.js → styleChecker-NiKfWjUT.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-D1Qp4BLp.js → useFlexGapSupport-bQUCvPeb.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-C7_iyvJK.js → useFs-CUGji7ph.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-DZUt_fIm.js → usePersonalDataHub-4veyN2N2.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-D3dsi0lZ.js → vnode-1-nLug-Z.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-WdbOlvdQ.js → zoom-dhCeRDMo.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +6 -6
- package/src/commands/automation.js +103 -1
- package/src/commands/cowork.js +174 -19
- 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/commands/team-merge-review.js +937 -0
- package/src/commands/team.js +2 -0
- package/src/data/changelog.json +27 -1
- package/src/gateways/ws/action-protocol.js +35 -10
- package/src/gateways/ws/remote-session-protocol.js +24 -1
- package/src/gateways/ws/ws-agent-handler.js +12 -0
- package/src/gateways/ws/ws-server.js +48 -12
- package/src/harness/jsonl-session-store.js +341 -24
- package/src/harness/mcp-client.js +8 -1
- package/src/harness/remote-session-audit.js +1 -0
- package/src/harness/remote-session-crypto.js +210 -2
- package/src/harness/remote-session-registry.js +159 -6
- package/src/harness/session-list-index.js +233 -14
- package/src/lib/agent-authority.js +6 -0
- package/src/lib/agent-schedule-store.js +139 -28
- package/src/lib/agent-team/team-merge-review-store.js +765 -0
- package/src/lib/agent-team/team-merge-review-transaction.js +1223 -0
- package/src/lib/agent-team/team-merge-review.js +1847 -0
- package/src/lib/automation-center-incidents.js +314 -0
- package/src/lib/automation-center-runtime.js +448 -0
- package/src/lib/automation-center.js +182 -38
- package/src/lib/automation-engine.js +41 -0
- package/src/lib/automation-execution-authority.js +241 -12
- package/src/lib/automation-execution-incident.js +737 -0
- package/src/lib/background-agent-keeper-client.js +248 -0
- package/src/lib/background-agent-keeper-protocol.js +147 -0
- package/src/lib/background-agent-supervisor.js +520 -40
- package/src/lib/background-interaction-resolver.js +12 -0
- package/src/lib/background-turn-bootstrap-protocol.js +126 -0
- package/src/lib/cowork-cron.js +85 -14
- package/src/lib/cowork-workflow.js +336 -16
- package/src/lib/dynamic-workflow-facade.js +648 -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 +123 -17
- package/src/lib/remote-membership-authority.js +632 -0
- package/src/lib/remote-membership-coordinator.js +2409 -0
- package/src/lib/remote-membership-host-store.js +1750 -0
- package/src/lib/scheduler-kernel/agenda-adapter.js +17 -7
- package/src/lib/scheduler-kernel/automation-adapter.js +105 -11
- package/src/lib/scheduler-kernel/automation-event-adapter.js +87 -11
- package/src/lib/scheduler-kernel/contract.js +91 -0
- package/src/lib/scheduler-kernel/cowork-cron-adapter.js +12 -1
- package/src/lib/scheduler-kernel/loop-adapter.js +7 -1
- package/src/lib/scheduler-kernel/routine-adapter.js +7 -1
- package/src/lib/scheduler-kernel/runtime-control-capabilities.js +31 -0
- package/src/lib/scheduler-kernel/runtime.js +176 -3
- package/src/lib/scheduler-kernel/store.js +1253 -45
- package/src/lib/scoped-permission-store.js +369 -0
- package/src/lib/session-anti-rollback-anchor.js +262 -5
- package/src/lib/sub-agent-context.js +4 -0
- package/src/lib/workflow-definition-contract.js +149 -0
- package/src/repl/agent-repl.js +41 -7
- 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/runtime/agent-core.js +93 -3
- package/src/runtime/headless-runner.js +30 -25
- package/src/runtime/headless-stream.js +32 -25
- package/src/runtime/mcp-config.js +81 -10
- package/src/workers/background-agent-keeper.js +498 -0
- package/src/workers/background-agent-worker.js +358 -13
- package/src/workers/background-turn-bootstrap.js +143 -0
- package/src/assets/web-panel/assets/MobileProjects-BWdOvQAj.js +0 -1
- package/src/assets/web-panel/assets/Projects-BV4oApsm.js +0 -1
- package/src/assets/web-panel/assets/devWarning-DPty0mGN.js +0 -1
- package/src/assets/web-panel/assets/index-Bt7g0Vq_.js +0 -1
- package/src/assets/web-panel/assets/index-ChVT0p9u.js +0 -1
|
@@ -1,10 +1,22 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
2
|
import {
|
|
3
|
+
assertAutomationRuntimeBoundary,
|
|
3
4
|
automationExecutionAuthorityDigest,
|
|
4
5
|
automationExecutionAuthoritySnapshot,
|
|
6
|
+
classifyAutomationBoundaryError,
|
|
5
7
|
inspectAutomationExecutionAuthority,
|
|
6
8
|
reserveAutomationExecutionAuthority,
|
|
7
9
|
} from "./automation-execution-authority.js";
|
|
10
|
+
import {
|
|
11
|
+
listAutomationExecutionIncidents,
|
|
12
|
+
upsertAutomationExecutionIncident,
|
|
13
|
+
} from "./automation-execution-incident.js";
|
|
14
|
+
import { projectAutomationCenterIncident } from "./automation-center-incidents.js";
|
|
15
|
+
import {
|
|
16
|
+
AUTOMATION_CENTER_RUNTIME_SCHEMA,
|
|
17
|
+
AUTOMATION_CENTER_RUNTIME_SCHEMA_VERSION,
|
|
18
|
+
buildAutomationCenterRuntimeProjection,
|
|
19
|
+
} from "./automation-center-runtime.js";
|
|
8
20
|
import {
|
|
9
21
|
EXECUTION_STATUS,
|
|
10
22
|
FLOW_STATUS,
|
|
@@ -23,11 +35,12 @@ import {
|
|
|
23
35
|
canonicalJson,
|
|
24
36
|
normalizeIdentifier,
|
|
25
37
|
} from "./scheduler-kernel/contract.js";
|
|
38
|
+
import { resolveAutomationCenterRuntimeControl } from "./scheduler-kernel/runtime-control-capabilities.js";
|
|
26
39
|
import { RoutineStore } from "./routine-store.js";
|
|
27
40
|
import { buildRoutineCenterProjection } from "./automation-center-routines.js";
|
|
28
41
|
|
|
29
|
-
export const AUTOMATION_CENTER_SCHEMA = "chainlesschain.automation-center/
|
|
30
|
-
export const AUTOMATION_CENTER_SCHEMA_VERSION =
|
|
42
|
+
export const AUTOMATION_CENTER_SCHEMA = "chainlesschain.automation-center/v3";
|
|
43
|
+
export const AUTOMATION_CENTER_SCHEMA_VERSION = 3;
|
|
31
44
|
export const AUTOMATION_CENTER_ACTIONS = Object.freeze([
|
|
32
45
|
"run_now",
|
|
33
46
|
"retry_failed",
|
|
@@ -45,7 +58,7 @@ function centerError(code, message, details = undefined) {
|
|
|
45
58
|
|
|
46
59
|
function digest(value) {
|
|
47
60
|
return `sha256:${createHash("sha256")
|
|
48
|
-
.update("chainlesschain.automation-center.
|
|
61
|
+
.update("chainlesschain.automation-center.v3\0", "utf8")
|
|
49
62
|
.update(canonicalJson(value, "automationCenter"), "utf8")
|
|
50
63
|
.digest("hex")}`;
|
|
51
64
|
}
|
|
@@ -183,6 +196,10 @@ function projectFlow(db, flow, { historyLimit, now }) {
|
|
|
183
196
|
flowId: flow.id,
|
|
184
197
|
limit: historyLimit,
|
|
185
198
|
}).map(projectExecution);
|
|
199
|
+
const incidents = listAutomationExecutionIncidents(db, {
|
|
200
|
+
flowId: flow.id,
|
|
201
|
+
limit: historyLimit,
|
|
202
|
+
}).map(projectAutomationCenterIncident);
|
|
186
203
|
const security = projectSecurity(db, flow, now);
|
|
187
204
|
const content = {
|
|
188
205
|
kind: "flow",
|
|
@@ -194,6 +211,7 @@ function projectFlow(db, flow, { historyLimit, now }) {
|
|
|
194
211
|
updatedAt: flow.updatedAt || null,
|
|
195
212
|
triggers,
|
|
196
213
|
history,
|
|
214
|
+
incidents,
|
|
197
215
|
security,
|
|
198
216
|
};
|
|
199
217
|
const revision = digest(content);
|
|
@@ -266,6 +284,8 @@ export function buildAutomationCenterProjection(
|
|
|
266
284
|
historyLimit = 20,
|
|
267
285
|
now = Date.now,
|
|
268
286
|
routineStore = new RoutineStore(),
|
|
287
|
+
schedulerStore = null,
|
|
288
|
+
runtimeCapabilityForKind = resolveAutomationCenterRuntimeControl,
|
|
269
289
|
} = {},
|
|
270
290
|
) {
|
|
271
291
|
if (typeof now !== "function") {
|
|
@@ -283,16 +303,34 @@ export function buildAutomationCenterProjection(
|
|
|
283
303
|
limit: boundedLimit,
|
|
284
304
|
historyLimit: boundedHistory,
|
|
285
305
|
});
|
|
306
|
+
const runtime = schedulerStore
|
|
307
|
+
? buildAutomationCenterRuntimeProjection(schedulerStore, {
|
|
308
|
+
capabilityForKind: runtimeCapabilityForKind,
|
|
309
|
+
limit: Math.min(200, boundedLimit),
|
|
310
|
+
})
|
|
311
|
+
: {
|
|
312
|
+
schema: AUTOMATION_CENTER_RUNTIME_SCHEMA,
|
|
313
|
+
schemaVersion: AUTOMATION_CENTER_RUNTIME_SCHEMA_VERSION,
|
|
314
|
+
items: [],
|
|
315
|
+
};
|
|
286
316
|
const items = [...flows, ...routineProjection.items];
|
|
287
317
|
const summary = {
|
|
288
318
|
total: items.length,
|
|
289
319
|
flows: flows.length,
|
|
290
320
|
routines: routineProjection.items.length,
|
|
321
|
+
runtimeRunning: runtime.items.filter((item) => item.status === "running")
|
|
322
|
+
.length,
|
|
323
|
+
runtimePauseRequested: runtime.items.filter(
|
|
324
|
+
(item) => item.status === "pause_requested",
|
|
325
|
+
).length,
|
|
326
|
+
runtimePaused: runtime.items.filter((item) => item.status === "paused")
|
|
327
|
+
.length,
|
|
291
328
|
active: items.filter((item) => item.status === FLOW_STATUS.ACTIVE).length,
|
|
292
329
|
paused: items.filter((item) => item.status === FLOW_STATUS.PAUSED).length,
|
|
293
330
|
needsAttention: items.filter(
|
|
294
331
|
(item) =>
|
|
295
332
|
item.security.ready !== true ||
|
|
333
|
+
item.incidents?.some((incident) => incident.status === "open") ||
|
|
296
334
|
item.history[0]?.status === EXECUTION_STATUS.FAILED ||
|
|
297
335
|
item.history[0]?.status === "failed",
|
|
298
336
|
).length,
|
|
@@ -315,10 +353,16 @@ export function buildAutomationCenterProjection(
|
|
|
315
353
|
id: item.id,
|
|
316
354
|
revision: item.revision,
|
|
317
355
|
})),
|
|
356
|
+
// The root revision protects the exact sanitized runtime capability and
|
|
357
|
+
// action previews consumed by IDEs, not only the occurrence state. A
|
|
358
|
+
// capability downgrade must therefore invalidate a previously rendered
|
|
359
|
+
// pause/resume action even when fence/controlRevision are unchanged.
|
|
360
|
+
runtime,
|
|
318
361
|
}),
|
|
319
362
|
summary,
|
|
320
363
|
mutations: { createRoutine: routineProjection.createRoutine },
|
|
321
364
|
items,
|
|
365
|
+
runtime,
|
|
322
366
|
};
|
|
323
367
|
}
|
|
324
368
|
|
|
@@ -328,7 +372,62 @@ function executionIdFor(flowId, requestedAction, revision) {
|
|
|
328
372
|
.digest("hex")}`;
|
|
329
373
|
}
|
|
330
374
|
|
|
331
|
-
|
|
375
|
+
function manualIncidentBoundary(error, authority) {
|
|
376
|
+
const classified = classifyAutomationBoundaryError(error);
|
|
377
|
+
if (!classified) return null;
|
|
378
|
+
return {
|
|
379
|
+
classified,
|
|
380
|
+
boundary: {
|
|
381
|
+
...(Array.isArray(error?.details?.permissions)
|
|
382
|
+
? {
|
|
383
|
+
deniedPermissions: error.details.permissions
|
|
384
|
+
.map(String)
|
|
385
|
+
.slice(0, 32),
|
|
386
|
+
}
|
|
387
|
+
: {}),
|
|
388
|
+
...(authority?.budget?.revision === undefined
|
|
389
|
+
? {}
|
|
390
|
+
: { budgetRevision: authority.budget.revision }),
|
|
391
|
+
...(Array.isArray(authority?.connectors)
|
|
392
|
+
? { connectors: authority.connectors }
|
|
393
|
+
: {}),
|
|
394
|
+
},
|
|
395
|
+
details: { reasonCode: classified.code, retryable: false },
|
|
396
|
+
};
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
const DURABLE_CENTER_REJECTION = Symbol("durable-center-rejection");
|
|
400
|
+
|
|
401
|
+
function persistManualExecutionIncident(
|
|
402
|
+
db,
|
|
403
|
+
{ flow, executionId, occurrenceId, requestedAction, authority, error, now },
|
|
404
|
+
) {
|
|
405
|
+
const evidence = manualIncidentBoundary(error, authority);
|
|
406
|
+
if (!evidence) return false;
|
|
407
|
+
const authorityDigest = automationExecutionAuthorityDigest(authority, flow);
|
|
408
|
+
upsertAutomationExecutionIncident(
|
|
409
|
+
db,
|
|
410
|
+
{
|
|
411
|
+
runId: executionId,
|
|
412
|
+
flowId: flow.id,
|
|
413
|
+
occurrenceId,
|
|
414
|
+
triggerType: TRIGGER_TYPE.MANUAL,
|
|
415
|
+
category: evidence.classified.category,
|
|
416
|
+
code: evidence.classified.code,
|
|
417
|
+
authorityDigest,
|
|
418
|
+
boundary: evidence.boundary,
|
|
419
|
+
details: { ...evidence.details, actionId: requestedAction },
|
|
420
|
+
},
|
|
421
|
+
{ now },
|
|
422
|
+
);
|
|
423
|
+
return true;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
function durableCenterRejection(error) {
|
|
427
|
+
return { [DURABLE_CENTER_REJECTION]: error };
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
function runAutomationCenterActionLocked(
|
|
332
431
|
db,
|
|
333
432
|
{ flowId, action: requestedAction, expectedRevision, now = Date.now } = {},
|
|
334
433
|
) {
|
|
@@ -372,38 +471,44 @@ export function runAutomationCenterAction(
|
|
|
372
471
|
} else if (requestedAction === "disable") {
|
|
373
472
|
result = updateFlowStatus(db, id, FLOW_STATUS.ARCHIVED);
|
|
374
473
|
} else if (requestedAction === "delete") {
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
"DELETE FROM auto_execution_budget_reservations WHERE flow_id = ?",
|
|
385
|
-
).run(id);
|
|
386
|
-
db.prepare(
|
|
387
|
-
"DELETE FROM auto_execution_budget_usage WHERE flow_id = ?",
|
|
388
|
-
).run(id);
|
|
389
|
-
db.prepare("DELETE FROM auto_execution_budgets WHERE flow_id = ?").run(
|
|
390
|
-
id,
|
|
391
|
-
);
|
|
392
|
-
deleteFlow(db, id);
|
|
393
|
-
return { deleted: true };
|
|
394
|
-
})
|
|
395
|
-
.immediate();
|
|
474
|
+
db.prepare(
|
|
475
|
+
"DELETE FROM auto_execution_budget_reservations WHERE flow_id = ?",
|
|
476
|
+
).run(id);
|
|
477
|
+
db.prepare("DELETE FROM auto_execution_budget_usage WHERE flow_id = ?").run(
|
|
478
|
+
id,
|
|
479
|
+
);
|
|
480
|
+
db.prepare("DELETE FROM auto_execution_budgets WHERE flow_id = ?").run(id);
|
|
481
|
+
deleteFlow(db, id);
|
|
482
|
+
result = { deleted: true };
|
|
396
483
|
} else {
|
|
397
484
|
const authority = automationExecutionAuthoritySnapshot(db, flow);
|
|
485
|
+
const executionId = executionIdFor(id, requestedAction, item.revision);
|
|
398
486
|
const occurrenceId = `automation-center:${requestedAction}:${id}:${item.revision.slice("sha256:".length)}`;
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
487
|
+
try {
|
|
488
|
+
reserveAutomationExecutionAuthority(
|
|
489
|
+
db,
|
|
490
|
+
flow,
|
|
491
|
+
occurrenceId,
|
|
492
|
+
authority,
|
|
493
|
+
automationExecutionAuthorityDigest(authority, flow),
|
|
494
|
+
{ now },
|
|
495
|
+
);
|
|
496
|
+
} catch (error) {
|
|
497
|
+
if (
|
|
498
|
+
persistManualExecutionIncident(db, {
|
|
499
|
+
flow,
|
|
500
|
+
executionId,
|
|
501
|
+
occurrenceId,
|
|
502
|
+
requestedAction,
|
|
503
|
+
authority,
|
|
504
|
+
error,
|
|
505
|
+
now,
|
|
506
|
+
})
|
|
507
|
+
) {
|
|
508
|
+
return durableCenterRejection(error);
|
|
509
|
+
}
|
|
510
|
+
throw error;
|
|
511
|
+
}
|
|
407
512
|
let inputData = { source: "automation-center" };
|
|
408
513
|
if (requestedAction === "retry_failed") {
|
|
409
514
|
const failed = getExecution(db, item.history[0].id);
|
|
@@ -416,11 +521,30 @@ export function runAutomationCenterAction(
|
|
|
416
521
|
retryOf = failed.id;
|
|
417
522
|
inputData = failed.inputData;
|
|
418
523
|
}
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
524
|
+
try {
|
|
525
|
+
result = executeFlow(db, id, {
|
|
526
|
+
triggerType: TRIGGER_TYPE.MANUAL,
|
|
527
|
+
inputData,
|
|
528
|
+
executionId,
|
|
529
|
+
executionAuthority: authority,
|
|
530
|
+
assertRuntimeBoundary: assertAutomationRuntimeBoundary,
|
|
531
|
+
});
|
|
532
|
+
} catch (error) {
|
|
533
|
+
if (
|
|
534
|
+
persistManualExecutionIncident(db, {
|
|
535
|
+
flow,
|
|
536
|
+
executionId,
|
|
537
|
+
occurrenceId,
|
|
538
|
+
requestedAction,
|
|
539
|
+
authority,
|
|
540
|
+
error,
|
|
541
|
+
now,
|
|
542
|
+
})
|
|
543
|
+
) {
|
|
544
|
+
return durableCenterRejection(error);
|
|
545
|
+
}
|
|
546
|
+
throw error;
|
|
547
|
+
}
|
|
424
548
|
}
|
|
425
549
|
return {
|
|
426
550
|
schema: "chainlesschain.automation-center-action/v1",
|
|
@@ -433,3 +557,23 @@ export function runAutomationCenterAction(
|
|
|
433
557
|
result,
|
|
434
558
|
};
|
|
435
559
|
}
|
|
560
|
+
|
|
561
|
+
export function runAutomationCenterAction(db, options = {}) {
|
|
562
|
+
if (!db || typeof db.transaction !== "function") {
|
|
563
|
+
throw centerError(
|
|
564
|
+
"AUTOMATION_CENTER_TRANSACTION_REQUIRED",
|
|
565
|
+
"automation center actions require transactional database support",
|
|
566
|
+
);
|
|
567
|
+
}
|
|
568
|
+
// BEGIN IMMEDIATE makes the rendered revision recheck and its mutation one
|
|
569
|
+
// cross-process critical section. Boundary rejections are returned as a
|
|
570
|
+
// sentinel so their durable incident commits before the original error is
|
|
571
|
+
// surfaced to the caller.
|
|
572
|
+
const outcome = db
|
|
573
|
+
.transaction(() => runAutomationCenterActionLocked(db, options))
|
|
574
|
+
.immediate();
|
|
575
|
+
if (outcome?.[DURABLE_CENTER_REJECTION]) {
|
|
576
|
+
throw outcome[DURABLE_CENTER_REJECTION];
|
|
577
|
+
}
|
|
578
|
+
return outcome;
|
|
579
|
+
}
|
|
@@ -1131,6 +1131,24 @@ function _topoOrder(nodes, edges) {
|
|
|
1131
1131
|
return result.map((id) => indexById.get(id));
|
|
1132
1132
|
}
|
|
1133
1133
|
|
|
1134
|
+
function _runtimeEffectForNode(flow, node) {
|
|
1135
|
+
return {
|
|
1136
|
+
nodeId: node.id,
|
|
1137
|
+
connector: node.connector,
|
|
1138
|
+
action: node.action,
|
|
1139
|
+
effect:
|
|
1140
|
+
node.effect && typeof node.effect === "object"
|
|
1141
|
+
? node.effect.effect || "write"
|
|
1142
|
+
: "write",
|
|
1143
|
+
resourceScopes:
|
|
1144
|
+
node.effect &&
|
|
1145
|
+
typeof node.effect === "object" &&
|
|
1146
|
+
Array.isArray(node.effect.resourceScopes)
|
|
1147
|
+
? node.effect.resourceScopes
|
|
1148
|
+
: [`automation-flow:${flow.id}:node:${node.id}:simulated`],
|
|
1149
|
+
};
|
|
1150
|
+
}
|
|
1151
|
+
|
|
1134
1152
|
export function executeFlow(db, flowId, options = {}) {
|
|
1135
1153
|
const flow = getFlow(db, flowId);
|
|
1136
1154
|
if (!flow) throw new Error(`Flow not found: ${flowId}`);
|
|
@@ -1140,6 +1158,8 @@ export function executeFlow(db, flowId, options = {}) {
|
|
|
1140
1158
|
triggerType = TRIGGER_TYPE.MANUAL,
|
|
1141
1159
|
testMode = false,
|
|
1142
1160
|
executionId,
|
|
1161
|
+
executionAuthority = null,
|
|
1162
|
+
assertRuntimeBoundary = null,
|
|
1143
1163
|
} = options;
|
|
1144
1164
|
const execId =
|
|
1145
1165
|
executionId === undefined
|
|
@@ -1149,6 +1169,20 @@ export function executeFlow(db, flowId, options = {}) {
|
|
|
1149
1169
|
if (existing) {
|
|
1150
1170
|
return _resolveExistingExecution(existing, { flowId, triggerType });
|
|
1151
1171
|
}
|
|
1172
|
+
// Validate every declared action boundary before creating an execution row
|
|
1173
|
+
// or invoking the first effect. The per-node assertion below remains as the
|
|
1174
|
+
// final send-time check, while this complete preflight guarantees that a
|
|
1175
|
+
// later node cannot discover an undeclared write after earlier nodes ran.
|
|
1176
|
+
if (assertRuntimeBoundary) {
|
|
1177
|
+
for (const node of flow.nodes) {
|
|
1178
|
+
if ((node.type || "action") !== "action") continue;
|
|
1179
|
+
assertRuntimeBoundary(
|
|
1180
|
+
executionAuthority,
|
|
1181
|
+
flow,
|
|
1182
|
+
_runtimeEffectForNode(flow, node),
|
|
1183
|
+
);
|
|
1184
|
+
}
|
|
1185
|
+
}
|
|
1152
1186
|
const startedAt = _now();
|
|
1153
1187
|
const startMs = Date.now();
|
|
1154
1188
|
|
|
@@ -1203,6 +1237,13 @@ export function executeFlow(db, flowId, options = {}) {
|
|
|
1203
1237
|
Object.assign(merged, stepInputs.get(pe.from) || {});
|
|
1204
1238
|
}
|
|
1205
1239
|
}
|
|
1240
|
+
if ((node.type || "action") === "action" && assertRuntimeBoundary) {
|
|
1241
|
+
assertRuntimeBoundary(
|
|
1242
|
+
executionAuthority,
|
|
1243
|
+
flow,
|
|
1244
|
+
_runtimeEffectForNode(flow, node),
|
|
1245
|
+
);
|
|
1246
|
+
}
|
|
1206
1247
|
const output = _simulateNodeOutput(node, merged);
|
|
1207
1248
|
stepInputs.set(node.id, output.output || output);
|
|
1208
1249
|
stepsLog.push({
|