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
|
@@ -109,6 +109,11 @@ export function createBackgroundInteractionClient(options = {}) {
|
|
|
109
109
|
let sequence = 0;
|
|
110
110
|
let closed = false;
|
|
111
111
|
|
|
112
|
+
const refChannel = () => processLike?.channel?.ref?.();
|
|
113
|
+
const unrefIdleChannel = () => {
|
|
114
|
+
if (pending.size === 0) processLike?.channel?.unref?.();
|
|
115
|
+
};
|
|
116
|
+
|
|
112
117
|
const removeMessageListener = () => {
|
|
113
118
|
if (typeof processLike?.off === "function") {
|
|
114
119
|
processLike.off("message", onMessage);
|
|
@@ -122,6 +127,7 @@ export function createBackgroundInteractionClient(options = {}) {
|
|
|
122
127
|
entry.settled = true;
|
|
123
128
|
clearTimeout(entry.timer);
|
|
124
129
|
pending.delete(entry.requestId);
|
|
130
|
+
unrefIdleChannel();
|
|
125
131
|
action(value);
|
|
126
132
|
}
|
|
127
133
|
|
|
@@ -204,6 +210,11 @@ export function createBackgroundInteractionClient(options = {}) {
|
|
|
204
210
|
}, timeoutMs);
|
|
205
211
|
entry.timer.unref?.();
|
|
206
212
|
pending.set(requestId, entry);
|
|
213
|
+
// The bootstrap channel is unref'd after Agent main is released so a
|
|
214
|
+
// naturally completed turn can exit. A suspended interaction is live
|
|
215
|
+
// work, however, and must keep that channel/process alive until its
|
|
216
|
+
// exact response, timeout, or close settles it.
|
|
217
|
+
refChannel();
|
|
207
218
|
|
|
208
219
|
const sent = sendIpc(
|
|
209
220
|
processLike,
|
|
@@ -262,6 +273,7 @@ export function createBackgroundInteractionClient(options = {}) {
|
|
|
262
273
|
protocolError(reason, "INTERACTION_CHANNEL_CLOSED"),
|
|
263
274
|
);
|
|
264
275
|
}
|
|
276
|
+
unrefIdleChannel();
|
|
265
277
|
},
|
|
266
278
|
};
|
|
267
279
|
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Private worker <-> turn bootstrap protocol.
|
|
3
|
+
*
|
|
4
|
+
* The nonce is deliberately confined to the inherited environment and the
|
|
5
|
+
* dedicated Node IPC channel. It must never be copied into background-agent
|
|
6
|
+
* state or the attach transport.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export const BACKGROUND_TURN_BOOTSTRAP_PROTOCOL_VERSION = 1;
|
|
10
|
+
export const BACKGROUND_TURN_BOOTSTRAP_READY =
|
|
11
|
+
"background-turn-bootstrap-ready";
|
|
12
|
+
export const BACKGROUND_TURN_BOOTSTRAP_RELEASE =
|
|
13
|
+
"background-turn-bootstrap-release";
|
|
14
|
+
|
|
15
|
+
export const BACKGROUND_TURN_BOOTSTRAP_ENV = Object.freeze({
|
|
16
|
+
nonce: "CC_BACKGROUND_TURN_BOOTSTRAP_NONCE",
|
|
17
|
+
workerGeneration: "CC_BACKGROUND_TURN_BOOTSTRAP_GENERATION",
|
|
18
|
+
attempt: "CC_BACKGROUND_TURN_BOOTSTRAP_ATTEMPT",
|
|
19
|
+
testTimeoutMs: "CC_BACKGROUND_TURN_BOOTSTRAP_TEST_TIMEOUT_MS",
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
const SAFE_BINDING = /^[A-Za-z0-9_-]+$/u;
|
|
23
|
+
|
|
24
|
+
function requiredBindingString(value, label) {
|
|
25
|
+
const normalized = typeof value === "string" ? value.trim() : "";
|
|
26
|
+
if (
|
|
27
|
+
normalized.length < 1 ||
|
|
28
|
+
normalized.length > 256 ||
|
|
29
|
+
!SAFE_BINDING.test(normalized)
|
|
30
|
+
) {
|
|
31
|
+
throw new TypeError(`invalid background turn bootstrap ${label}`);
|
|
32
|
+
}
|
|
33
|
+
return normalized;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function requiredPositiveInteger(value, label) {
|
|
37
|
+
const normalized = Number(value);
|
|
38
|
+
if (!Number.isSafeInteger(normalized) || normalized < 1) {
|
|
39
|
+
throw new TypeError(`invalid background turn bootstrap ${label}`);
|
|
40
|
+
}
|
|
41
|
+
return normalized;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function normalizeBackgroundTurnBootstrapAuthority(binding = {}) {
|
|
45
|
+
return Object.freeze({
|
|
46
|
+
nonce: requiredBindingString(binding.nonce, "nonce"),
|
|
47
|
+
workerGeneration: requiredBindingString(
|
|
48
|
+
binding.workerGeneration,
|
|
49
|
+
"worker generation",
|
|
50
|
+
),
|
|
51
|
+
attempt: requiredPositiveInteger(binding.attempt, "attempt"),
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function normalizeBackgroundTurnBootstrapBinding(binding = {}) {
|
|
56
|
+
return Object.freeze({
|
|
57
|
+
...normalizeBackgroundTurnBootstrapAuthority(binding),
|
|
58
|
+
pid: requiredPositiveInteger(binding.pid, "pid"),
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function backgroundTurnBootstrapBindingFromEnvironment(
|
|
63
|
+
environment,
|
|
64
|
+
pid,
|
|
65
|
+
) {
|
|
66
|
+
return normalizeBackgroundTurnBootstrapBinding({
|
|
67
|
+
nonce: environment?.[BACKGROUND_TURN_BOOTSTRAP_ENV.nonce],
|
|
68
|
+
workerGeneration:
|
|
69
|
+
environment?.[BACKGROUND_TURN_BOOTSTRAP_ENV.workerGeneration],
|
|
70
|
+
attempt: environment?.[BACKGROUND_TURN_BOOTSTRAP_ENV.attempt],
|
|
71
|
+
pid,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
export function createBackgroundTurnBootstrapMessage(type, binding) {
|
|
76
|
+
if (
|
|
77
|
+
type !== BACKGROUND_TURN_BOOTSTRAP_READY &&
|
|
78
|
+
type !== BACKGROUND_TURN_BOOTSTRAP_RELEASE
|
|
79
|
+
) {
|
|
80
|
+
throw new TypeError("invalid background turn bootstrap message type");
|
|
81
|
+
}
|
|
82
|
+
return Object.freeze({
|
|
83
|
+
type,
|
|
84
|
+
protocolVersion: BACKGROUND_TURN_BOOTSTRAP_PROTOCOL_VERSION,
|
|
85
|
+
...normalizeBackgroundTurnBootstrapBinding(binding),
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export function matchesBackgroundTurnBootstrapMessage(
|
|
90
|
+
message,
|
|
91
|
+
type,
|
|
92
|
+
authority,
|
|
93
|
+
) {
|
|
94
|
+
let expected;
|
|
95
|
+
let actual;
|
|
96
|
+
try {
|
|
97
|
+
expected = normalizeBackgroundTurnBootstrapAuthority(authority);
|
|
98
|
+
actual = normalizeBackgroundTurnBootstrapBinding(message);
|
|
99
|
+
} catch {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
return (
|
|
103
|
+
message?.type === type &&
|
|
104
|
+
message.protocolVersion === BACKGROUND_TURN_BOOTSTRAP_PROTOCOL_VERSION &&
|
|
105
|
+
actual.nonce === expected.nonce &&
|
|
106
|
+
actual.workerGeneration === expected.workerGeneration &&
|
|
107
|
+
actual.attempt === expected.attempt &&
|
|
108
|
+
(authority.pid === undefined || Number(authority.pid) === actual.pid)
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export function removeBackgroundTurnBootstrapImport(execArgv, moduleUrl) {
|
|
113
|
+
const expected = `--import=${moduleUrl}`;
|
|
114
|
+
const values = Array.isArray(execArgv) ? [...execArgv] : [];
|
|
115
|
+
if (values.filter((value) => value === expected).length !== 1) {
|
|
116
|
+
throw new Error("background turn bootstrap preload identity is ambiguous");
|
|
117
|
+
}
|
|
118
|
+
return values.filter((value) => value !== expected);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export function clearBackgroundTurnBootstrapEnvironment(environment) {
|
|
122
|
+
if (!environment || typeof environment !== "object") return;
|
|
123
|
+
for (const key of Object.values(BACKGROUND_TURN_BOOTSTRAP_ENV)) {
|
|
124
|
+
delete environment[key];
|
|
125
|
+
}
|
|
126
|
+
}
|
package/src/lib/cowork-cron.js
CHANGED
|
@@ -31,12 +31,14 @@
|
|
|
31
31
|
|
|
32
32
|
import crypto from "node:crypto";
|
|
33
33
|
import {
|
|
34
|
-
|
|
34
|
+
closeSync,
|
|
35
|
+
fsyncSync,
|
|
35
36
|
mkdirSync,
|
|
37
|
+
openSync,
|
|
36
38
|
readFileSync,
|
|
37
39
|
renameSync,
|
|
38
40
|
unlinkSync,
|
|
39
|
-
|
|
41
|
+
writeSync,
|
|
40
42
|
} from "node:fs";
|
|
41
43
|
import { join } from "node:path";
|
|
42
44
|
import {
|
|
@@ -47,12 +49,14 @@ import {
|
|
|
47
49
|
import { withFileLock } from "./with-file-lock.js";
|
|
48
50
|
|
|
49
51
|
export const _deps = {
|
|
50
|
-
|
|
52
|
+
closeSync,
|
|
53
|
+
fsyncSync,
|
|
51
54
|
mkdirSync,
|
|
55
|
+
openSync,
|
|
52
56
|
readFileSync,
|
|
53
57
|
renameSync,
|
|
54
58
|
unlinkSync,
|
|
55
|
-
|
|
59
|
+
writeSync,
|
|
56
60
|
withFileLock,
|
|
57
61
|
now: () => new Date(),
|
|
58
62
|
runTask: null, // injected at runtime to avoid circular import
|
|
@@ -543,14 +547,33 @@ function _scheduleFile(cwd) {
|
|
|
543
547
|
/** Load all schedules from disk. Returns [] if the file doesn't exist. */
|
|
544
548
|
export function loadSchedules(cwd, { failOnMalformed = false } = {}) {
|
|
545
549
|
const file = _scheduleFile(cwd);
|
|
546
|
-
|
|
547
|
-
|
|
550
|
+
let raw;
|
|
551
|
+
try {
|
|
552
|
+
raw = _deps.readFileSync(file, "utf-8");
|
|
553
|
+
} catch (cause) {
|
|
554
|
+
if (cause?.code === "ENOENT") return [];
|
|
555
|
+
const error = new Error(`cowork schedule store read failed: ${file}`, {
|
|
556
|
+
cause,
|
|
557
|
+
});
|
|
558
|
+
error.code = "COWORK_SCHEDULE_STORE_READ_FAILED";
|
|
559
|
+
error.filePath = file;
|
|
560
|
+
if (typeof cause?.code === "string") error.fsCode = cause.code;
|
|
561
|
+
throw error;
|
|
562
|
+
}
|
|
548
563
|
const out = [];
|
|
549
564
|
for (const line of raw.split("\n")) {
|
|
550
565
|
const trimmed = line.trim();
|
|
551
566
|
if (!trimmed) continue;
|
|
552
567
|
try {
|
|
553
|
-
|
|
568
|
+
const schedule = JSON.parse(trimmed);
|
|
569
|
+
if (
|
|
570
|
+
!schedule ||
|
|
571
|
+
typeof schedule !== "object" ||
|
|
572
|
+
Array.isArray(schedule)
|
|
573
|
+
) {
|
|
574
|
+
throw new TypeError("schedule entry must be an object");
|
|
575
|
+
}
|
|
576
|
+
out.push(schedule);
|
|
554
577
|
} catch (cause) {
|
|
555
578
|
if (failOnMalformed) {
|
|
556
579
|
const error = new Error(
|
|
@@ -573,20 +596,68 @@ function _prepareScheduleDir(cwd) {
|
|
|
573
596
|
}
|
|
574
597
|
|
|
575
598
|
function _saveSchedulesUnlocked(cwd, schedules) {
|
|
576
|
-
_prepareScheduleDir(cwd);
|
|
599
|
+
const directory = _prepareScheduleDir(cwd);
|
|
577
600
|
const file = _scheduleFile(cwd);
|
|
578
601
|
const body = schedules.map((s) => JSON.stringify(s)).join("\n");
|
|
602
|
+
const contents = Buffer.from(body ? `${body}\n` : "", "utf8");
|
|
579
603
|
const tmp = `${file}.${process.pid}.${crypto.randomUUID()}.tmp`;
|
|
604
|
+
let descriptor = null;
|
|
605
|
+
let renamed = false;
|
|
580
606
|
try {
|
|
581
|
-
_deps.
|
|
607
|
+
descriptor = _deps.openSync(tmp, "wx", 0o600);
|
|
608
|
+
let offset = 0;
|
|
609
|
+
while (offset < contents.length) {
|
|
610
|
+
const written = _deps.writeSync(
|
|
611
|
+
descriptor,
|
|
612
|
+
contents,
|
|
613
|
+
offset,
|
|
614
|
+
contents.length - offset,
|
|
615
|
+
null,
|
|
616
|
+
);
|
|
617
|
+
if (!Number.isSafeInteger(written) || written <= 0) {
|
|
618
|
+
const cause = new Error("write returned no progress");
|
|
619
|
+
cause.code = "EIO";
|
|
620
|
+
throw cause;
|
|
621
|
+
}
|
|
622
|
+
offset += written;
|
|
623
|
+
}
|
|
624
|
+
_deps.fsyncSync(descriptor);
|
|
625
|
+
_deps.closeSync(descriptor);
|
|
626
|
+
descriptor = null;
|
|
582
627
|
_deps.renameSync(tmp, file);
|
|
628
|
+
renamed = true;
|
|
629
|
+
|
|
630
|
+
if (process.platform !== "win32") {
|
|
631
|
+
const directoryDescriptor = _deps.openSync(directory, "r");
|
|
632
|
+
try {
|
|
633
|
+
_deps.fsyncSync(directoryDescriptor);
|
|
634
|
+
} finally {
|
|
635
|
+
_deps.closeSync(directoryDescriptor);
|
|
636
|
+
}
|
|
637
|
+
}
|
|
583
638
|
} catch (error) {
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
639
|
+
if (descriptor !== null) {
|
|
640
|
+
try {
|
|
641
|
+
_deps.closeSync(descriptor);
|
|
642
|
+
} catch {
|
|
643
|
+
// Preserve the original persistence error.
|
|
644
|
+
}
|
|
588
645
|
}
|
|
589
|
-
|
|
646
|
+
if (!renamed) {
|
|
647
|
+
try {
|
|
648
|
+
_deps.unlinkSync(tmp);
|
|
649
|
+
} catch {
|
|
650
|
+
// Best-effort orphan cleanup; the authoritative file is unchanged.
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
const persistenceError =
|
|
654
|
+
error && (typeof error === "object" || typeof error === "function")
|
|
655
|
+
? error
|
|
656
|
+
: new Error(`Cowork schedule persistence failed: ${String(error)}`, {
|
|
657
|
+
cause: error,
|
|
658
|
+
});
|
|
659
|
+
persistenceError.commitState = renamed ? "unknown" : "not-committed";
|
|
660
|
+
throw persistenceError;
|
|
590
661
|
}
|
|
591
662
|
}
|
|
592
663
|
|