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
|
@@ -11,12 +11,15 @@ import {
|
|
|
11
11
|
} from "./scheduler-kernel/contract.js";
|
|
12
12
|
|
|
13
13
|
export const AUTOMATION_EXECUTE_PERMISSION = "automation:execute";
|
|
14
|
+
export const AUTOMATION_EXECUTION_AUTHORITY_SCHEMA_VERSION = 2;
|
|
15
|
+
export const AUTOMATION_EXECUTION_BOUNDARY_SCHEMA_VERSION = 1;
|
|
14
16
|
export const AUTOMATION_MIN_BUDGET_WINDOW_MS = 60_000;
|
|
15
17
|
export const AUTOMATION_MAX_BUDGET_WINDOW_MS = 31 * 24 * 60 * 60 * 1000;
|
|
16
18
|
export const AUTOMATION_MAX_BUDGET_VALUE = 1_000_000;
|
|
17
19
|
|
|
18
20
|
const CONNECTOR_PATTERN = /^[a-z0-9][a-z0-9_-]{0,63}$/u;
|
|
19
21
|
const DIGEST_PATTERN = /^[0-9a-f]{64}$/u;
|
|
22
|
+
const AUTOMATION_EFFECTS = new Set(["read", "write", "destructive"]);
|
|
20
23
|
|
|
21
24
|
function authorityError(code, message, details = undefined, cause = undefined) {
|
|
22
25
|
const error = new SchedulerKernelError(
|
|
@@ -106,6 +109,7 @@ function normalizeFlowAuthorityInputs(flow) {
|
|
|
106
109
|
);
|
|
107
110
|
}
|
|
108
111
|
const connectors = [];
|
|
112
|
+
const effects = [];
|
|
109
113
|
let actionSteps = 0;
|
|
110
114
|
for (let index = 0; index < flow.nodes.length; index += 1) {
|
|
111
115
|
const node = flow.nodes[index];
|
|
@@ -118,17 +122,69 @@ function normalizeFlowAuthorityInputs(flow) {
|
|
|
118
122
|
}
|
|
119
123
|
if ((node.type || "action") !== "action") continue;
|
|
120
124
|
actionSteps += 1;
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
125
|
+
const connector = normalizeConnector(
|
|
126
|
+
node.connector,
|
|
127
|
+
`automationFlow.nodes[${index}].connector`,
|
|
128
|
+
);
|
|
129
|
+
const action = normalizeIdentifier(
|
|
130
|
+
node.action,
|
|
131
|
+
`automationFlow.nodes[${index}].action`,
|
|
132
|
+
{ maxLength: 96 },
|
|
126
133
|
);
|
|
134
|
+
connectors.push(connector);
|
|
135
|
+
const rawEffect =
|
|
136
|
+
node.effect &&
|
|
137
|
+
typeof node.effect === "object" &&
|
|
138
|
+
!Array.isArray(node.effect)
|
|
139
|
+
? node.effect
|
|
140
|
+
: {};
|
|
141
|
+
const effect = String(rawEffect.effect || "write").toLowerCase();
|
|
142
|
+
if (!AUTOMATION_EFFECTS.has(effect)) {
|
|
143
|
+
throw authorityError(
|
|
144
|
+
"AUTOMATION_EXECUTION_EFFECT_INVALID",
|
|
145
|
+
`automationFlow.nodes[${index}].effect.effect is invalid`,
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
const declaredScopes = Array.isArray(rawEffect.resourceScopes)
|
|
149
|
+
? [
|
|
150
|
+
...new Set(
|
|
151
|
+
rawEffect.resourceScopes.map((scope, scopeIndex) =>
|
|
152
|
+
normalizeIdentifier(
|
|
153
|
+
scope,
|
|
154
|
+
`automationFlow.nodes[${index}].effect.resourceScopes[${scopeIndex}]`,
|
|
155
|
+
{ maxLength: 256 },
|
|
156
|
+
),
|
|
157
|
+
),
|
|
158
|
+
),
|
|
159
|
+
].sort()
|
|
160
|
+
: [];
|
|
161
|
+
// The current connector engine is intentionally a simulator and performs
|
|
162
|
+
// no outbound effect. Legacy flows therefore receive a deterministic,
|
|
163
|
+
// flow-local simulated scope. A future real connector must declare its
|
|
164
|
+
// actual resource scopes in the versioned flow definition before it can
|
|
165
|
+
// pass this same boundary contract.
|
|
166
|
+
const resourceScopes =
|
|
167
|
+
declaredScopes.length > 0
|
|
168
|
+
? declaredScopes
|
|
169
|
+
: [
|
|
170
|
+
`automation-flow:${flowId}:node:${normalizeIdentifier(
|
|
171
|
+
node.id,
|
|
172
|
+
`automationFlow.nodes[${index}].id`,
|
|
173
|
+
)}:simulated`,
|
|
174
|
+
];
|
|
175
|
+
effects.push({
|
|
176
|
+
nodeId: normalizeIdentifier(node.id, `automationFlow.nodes[${index}].id`),
|
|
177
|
+
connector,
|
|
178
|
+
action,
|
|
179
|
+
effect,
|
|
180
|
+
resourceScopes,
|
|
181
|
+
});
|
|
127
182
|
}
|
|
128
183
|
return {
|
|
129
184
|
flowId,
|
|
130
185
|
principalId,
|
|
131
186
|
connectors: [...new Set(connectors)].sort(),
|
|
187
|
+
effects,
|
|
132
188
|
actionSteps,
|
|
133
189
|
};
|
|
134
190
|
}
|
|
@@ -349,7 +405,7 @@ export function automationExecutionAuthoritySnapshot(db, flow) {
|
|
|
349
405
|
);
|
|
350
406
|
}
|
|
351
407
|
return {
|
|
352
|
-
schemaVersion:
|
|
408
|
+
schemaVersion: AUTOMATION_EXECUTION_AUTHORITY_SCHEMA_VERSION,
|
|
353
409
|
flowId: inputs.flowId,
|
|
354
410
|
principalId: inputs.principalId,
|
|
355
411
|
requiredPermissions: [
|
|
@@ -357,6 +413,10 @@ export function automationExecutionAuthoritySnapshot(db, flow) {
|
|
|
357
413
|
...inputs.connectors.map(automationConnectorPermission),
|
|
358
414
|
],
|
|
359
415
|
connectors: inputs.connectors,
|
|
416
|
+
effectBoundary: {
|
|
417
|
+
schemaVersion: AUTOMATION_EXECUTION_BOUNDARY_SCHEMA_VERSION,
|
|
418
|
+
effects: inputs.effects,
|
|
419
|
+
},
|
|
360
420
|
actionSteps: inputs.actionSteps,
|
|
361
421
|
budget: normalizeAutomationExecutionBudget(budget),
|
|
362
422
|
};
|
|
@@ -372,8 +432,16 @@ export function normalizeAutomationExecutionAuthoritySnapshot(value, flow) {
|
|
|
372
432
|
const inputs = normalizeFlowAuthorityInputs(flow);
|
|
373
433
|
const budget = normalizeAutomationExecutionBudget(value.budget);
|
|
374
434
|
const requiredPermissions = automationRequiredPermissions(flow);
|
|
435
|
+
const expectedEffectBoundary = {
|
|
436
|
+
schemaVersion: AUTOMATION_EXECUTION_BOUNDARY_SCHEMA_VERSION,
|
|
437
|
+
effects: inputs.effects,
|
|
438
|
+
};
|
|
439
|
+
const hasEffectBoundary = Object.prototype.hasOwnProperty.call(
|
|
440
|
+
value,
|
|
441
|
+
"effectBoundary",
|
|
442
|
+
);
|
|
375
443
|
const normalized = {
|
|
376
|
-
schemaVersion: value.schemaVersion,
|
|
444
|
+
schemaVersion: Number(value.schemaVersion),
|
|
377
445
|
flowId: normalizeIdentifier(value.flowId, "executionAuthority.flowId"),
|
|
378
446
|
principalId: normalizeIdentifier(
|
|
379
447
|
value.principalId,
|
|
@@ -395,11 +463,33 @@ export function normalizeAutomationExecutionAuthoritySnapshot(value, flow) {
|
|
|
395
463
|
),
|
|
396
464
|
)
|
|
397
465
|
: [],
|
|
466
|
+
effectBoundary:
|
|
467
|
+
value.effectBoundary &&
|
|
468
|
+
typeof value.effectBoundary === "object" &&
|
|
469
|
+
!Array.isArray(value.effectBoundary)
|
|
470
|
+
? value.effectBoundary
|
|
471
|
+
: null,
|
|
398
472
|
actionSteps: Number(value.actionSteps),
|
|
399
473
|
budget,
|
|
400
474
|
};
|
|
475
|
+
const boundaryMatches =
|
|
476
|
+
canonicalJson(
|
|
477
|
+
normalized.effectBoundary,
|
|
478
|
+
"executionAuthority.effectBoundary",
|
|
479
|
+
) === canonicalJson(expectedEffectBoundary, "effectBoundary");
|
|
480
|
+
// Schema v1 is the pre-write-scope authority snapshot already persisted by
|
|
481
|
+
// released schedulers. It is accepted only for an otherwise exact flow and
|
|
482
|
+
// is upgraded in memory to the deterministic boundary derived from that
|
|
483
|
+
// immutable flow snapshot. New snapshots are v2 and must carry the boundary.
|
|
484
|
+
const compatibleSchema =
|
|
485
|
+
(normalized.schemaVersion === 1 &&
|
|
486
|
+
(!hasEffectBoundary || boundaryMatches)) ||
|
|
487
|
+
(normalized.schemaVersion ===
|
|
488
|
+
AUTOMATION_EXECUTION_AUTHORITY_SCHEMA_VERSION &&
|
|
489
|
+
hasEffectBoundary &&
|
|
490
|
+
boundaryMatches);
|
|
401
491
|
const valid =
|
|
402
|
-
|
|
492
|
+
compatibleSchema &&
|
|
403
493
|
normalized.flowId === inputs.flowId &&
|
|
404
494
|
normalized.principalId === inputs.principalId &&
|
|
405
495
|
canonicalJson(
|
|
@@ -416,7 +506,7 @@ export function normalizeAutomationExecutionAuthoritySnapshot(value, flow) {
|
|
|
416
506
|
`automation execution authority does not match flow: ${inputs.flowId}`,
|
|
417
507
|
);
|
|
418
508
|
}
|
|
419
|
-
return normalized;
|
|
509
|
+
return { ...normalized, effectBoundary: expectedEffectBoundary };
|
|
420
510
|
}
|
|
421
511
|
|
|
422
512
|
export function automationExecutionAuthorityDigest(snapshot, flow) {
|
|
@@ -424,12 +514,136 @@ export function automationExecutionAuthorityDigest(snapshot, flow) {
|
|
|
424
514
|
snapshot,
|
|
425
515
|
flow,
|
|
426
516
|
);
|
|
517
|
+
const digestSnapshot =
|
|
518
|
+
normalized.schemaVersion === 1
|
|
519
|
+
? {
|
|
520
|
+
schemaVersion: 1,
|
|
521
|
+
flowId: normalized.flowId,
|
|
522
|
+
principalId: normalized.principalId,
|
|
523
|
+
requiredPermissions: normalized.requiredPermissions,
|
|
524
|
+
connectors: normalized.connectors,
|
|
525
|
+
actionSteps: normalized.actionSteps,
|
|
526
|
+
budget: normalized.budget,
|
|
527
|
+
}
|
|
528
|
+
: normalized;
|
|
529
|
+
return createHash("sha256")
|
|
530
|
+
.update(
|
|
531
|
+
normalized.schemaVersion === 1
|
|
532
|
+
? "chainlesschain.automation-execution-authority.v1\0"
|
|
533
|
+
: "chainlesschain.automation-execution-authority.v2\0",
|
|
534
|
+
"utf8",
|
|
535
|
+
)
|
|
536
|
+
.update(
|
|
537
|
+
canonicalJson(digestSnapshot, "automationExecutionAuthority"),
|
|
538
|
+
"utf8",
|
|
539
|
+
)
|
|
540
|
+
.digest("hex");
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
export function automationExecutionBoundary(snapshot, flow) {
|
|
544
|
+
const normalized = normalizeAutomationExecutionAuthoritySnapshot(
|
|
545
|
+
snapshot,
|
|
546
|
+
flow,
|
|
547
|
+
);
|
|
548
|
+
return structuredClone(normalized.effectBoundary);
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
export function automationExecutionBoundaryDigest(snapshot, flow) {
|
|
552
|
+
const boundary = automationExecutionBoundary(snapshot, flow);
|
|
427
553
|
return createHash("sha256")
|
|
428
|
-
.update("chainlesschain.automation-execution-
|
|
429
|
-
.update(canonicalJson(
|
|
554
|
+
.update("chainlesschain.automation-execution-boundary.v1\0", "utf8")
|
|
555
|
+
.update(canonicalJson(boundary, "automationExecutionBoundary"), "utf8")
|
|
430
556
|
.digest("hex");
|
|
431
557
|
}
|
|
432
558
|
|
|
559
|
+
export function assertAutomationRuntimeBoundary(
|
|
560
|
+
snapshot,
|
|
561
|
+
flow,
|
|
562
|
+
{ nodeId, connector, action, effect, resourceScopes } = {},
|
|
563
|
+
) {
|
|
564
|
+
const boundary = automationExecutionBoundary(snapshot, flow);
|
|
565
|
+
const id = normalizeIdentifier(nodeId, "runtimeEffect.nodeId");
|
|
566
|
+
const expected = boundary.effects.find((entry) => entry.nodeId === id);
|
|
567
|
+
const actual = {
|
|
568
|
+
nodeId: id,
|
|
569
|
+
connector: normalizeConnector(connector, "runtimeEffect.connector"),
|
|
570
|
+
action: normalizeIdentifier(action, "runtimeEffect.action", {
|
|
571
|
+
maxLength: 96,
|
|
572
|
+
}),
|
|
573
|
+
effect: String(effect || "").toLowerCase(),
|
|
574
|
+
resourceScopes: Array.isArray(resourceScopes)
|
|
575
|
+
? [
|
|
576
|
+
...new Set(
|
|
577
|
+
resourceScopes.map((scope, index) =>
|
|
578
|
+
normalizeIdentifier(
|
|
579
|
+
scope,
|
|
580
|
+
`runtimeEffect.resourceScopes[${index}]`,
|
|
581
|
+
{ maxLength: 256 },
|
|
582
|
+
),
|
|
583
|
+
),
|
|
584
|
+
),
|
|
585
|
+
].sort()
|
|
586
|
+
: [],
|
|
587
|
+
};
|
|
588
|
+
if (
|
|
589
|
+
!expected ||
|
|
590
|
+
canonicalJson(actual, "runtimeEffect") !==
|
|
591
|
+
canonicalJson(expected, "expectedRuntimeEffect")
|
|
592
|
+
) {
|
|
593
|
+
throw authorityError(
|
|
594
|
+
"AUTOMATION_EXECUTION_WRITE_SCOPE_DENIED",
|
|
595
|
+
`automation runtime effect exceeds its declared boundary: ${id}`,
|
|
596
|
+
{ flowId: boundary.flowId || flow?.id || null, nodeId: id },
|
|
597
|
+
);
|
|
598
|
+
}
|
|
599
|
+
return actual;
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
export function classifyAutomationBoundaryError(error) {
|
|
603
|
+
const code = String(error?.code || "");
|
|
604
|
+
if (code === "AUTOMATION_EXECUTION_BUDGET_EXHAUSTED") {
|
|
605
|
+
return { category: "budget", code };
|
|
606
|
+
}
|
|
607
|
+
if (
|
|
608
|
+
code === "AUTOMATION_EXECUTION_BUDGET_REQUIRED" ||
|
|
609
|
+
code === "AUTOMATION_EXECUTION_BUDGET_INVALID" ||
|
|
610
|
+
code === "AUTOMATION_EXECUTION_BUDGET_STATE_INVALID" ||
|
|
611
|
+
code === "AUTOMATION_EXECUTION_AUTHORITY_STALE"
|
|
612
|
+
) {
|
|
613
|
+
return { category: "budget", code };
|
|
614
|
+
}
|
|
615
|
+
if (
|
|
616
|
+
code === "AUTOMATION_EXECUTION_WRITE_SCOPE_DENIED" ||
|
|
617
|
+
code === "AUTOMATION_EXECUTION_WRITE_SCOPE_REQUIRED" ||
|
|
618
|
+
code === "AUTOMATION_EXECUTION_EFFECT_INVALID"
|
|
619
|
+
) {
|
|
620
|
+
return { category: "write_scope", code };
|
|
621
|
+
}
|
|
622
|
+
if (code === "AUTOMATION_EXECUTION_PERMISSION_DENIED") {
|
|
623
|
+
const denied = Array.isArray(error?.details?.permissions)
|
|
624
|
+
? error.details.permissions.map(String)
|
|
625
|
+
: [];
|
|
626
|
+
return {
|
|
627
|
+
category: denied.some((permission) =>
|
|
628
|
+
permission.startsWith("automation:connector:"),
|
|
629
|
+
)
|
|
630
|
+
? "connector"
|
|
631
|
+
: "permission",
|
|
632
|
+
code,
|
|
633
|
+
};
|
|
634
|
+
}
|
|
635
|
+
if (
|
|
636
|
+
code === "AUTOMATION_EXECUTION_PRINCIPAL_REQUIRED" ||
|
|
637
|
+
code === "AUTOMATION_EXECUTION_AUTHORITY_INVALID"
|
|
638
|
+
) {
|
|
639
|
+
return { category: "permission", code };
|
|
640
|
+
}
|
|
641
|
+
if (code === "AUTOMATION_EXECUTION_CONNECTOR_INVALID") {
|
|
642
|
+
return { category: "connector", code };
|
|
643
|
+
}
|
|
644
|
+
return null;
|
|
645
|
+
}
|
|
646
|
+
|
|
433
647
|
export function automationSchedulerAuthority(snapshot, flow, capability) {
|
|
434
648
|
const normalized = normalizeAutomationExecutionAuthoritySnapshot(
|
|
435
649
|
snapshot,
|
|
@@ -608,7 +822,22 @@ export function reserveAutomationExecutionAuthority(
|
|
|
608
822
|
const timestamp = normalizeEpochMs(Number(now()), "now");
|
|
609
823
|
const reserve = db.transaction(() => {
|
|
610
824
|
const current = automationExecutionAuthoritySnapshot(db, flow);
|
|
611
|
-
const
|
|
825
|
+
const comparableCurrent =
|
|
826
|
+
normalized.schemaVersion === 1
|
|
827
|
+
? {
|
|
828
|
+
schemaVersion: 1,
|
|
829
|
+
flowId: current.flowId,
|
|
830
|
+
principalId: current.principalId,
|
|
831
|
+
requiredPermissions: current.requiredPermissions,
|
|
832
|
+
connectors: current.connectors,
|
|
833
|
+
actionSteps: current.actionSteps,
|
|
834
|
+
budget: current.budget,
|
|
835
|
+
}
|
|
836
|
+
: current;
|
|
837
|
+
const currentDigest = automationExecutionAuthorityDigest(
|
|
838
|
+
comparableCurrent,
|
|
839
|
+
flow,
|
|
840
|
+
);
|
|
612
841
|
if (currentDigest !== expectedDigest) {
|
|
613
842
|
throw authorityError(
|
|
614
843
|
"AUTOMATION_EXECUTION_AUTHORITY_STALE",
|