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
|
@@ -323,6 +323,7 @@ export class SubAgentContext {
|
|
|
323
323
|
// parent's policy, Plan lock, workspace sandbox, or unattended boundary.
|
|
324
324
|
this._parentAuthority = Object.freeze({
|
|
325
325
|
permissionRules: options.permissionRules || null,
|
|
326
|
+
permissionRulesProvider: options.permissionRulesProvider || null,
|
|
326
327
|
hostManagedToolPolicy: options.hostManagedToolPolicy || null,
|
|
327
328
|
planManager: options.planManager || null,
|
|
328
329
|
sandbox: options.sandbox || null,
|
|
@@ -618,6 +619,9 @@ export class SubAgentContext {
|
|
|
618
619
|
if (authority.permissionRules) {
|
|
619
620
|
options.permissionRules = authority.permissionRules;
|
|
620
621
|
}
|
|
622
|
+
if (authority.permissionRulesProvider) {
|
|
623
|
+
options.permissionRulesProvider = authority.permissionRulesProvider;
|
|
624
|
+
}
|
|
621
625
|
if (authority.hostManagedToolPolicy) {
|
|
622
626
|
options.hostManagedToolPolicy = authority.hostManagedToolPolicy;
|
|
623
627
|
}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
|
|
3
|
+
export const WORKFLOW_DEFINITION_SCHEMA = "cc-dynamic-workflow-definition/v1";
|
|
4
|
+
export const COWORK_WORKFLOW_RECORD_SCHEMA = "cc-cowork-workflow-record/v1";
|
|
5
|
+
export const MAX_WORKFLOW_DEFINITION_BYTES = 1024 * 1024;
|
|
6
|
+
|
|
7
|
+
function stableJsonValue(value, state = { nodes: 0, depth: 0 }) {
|
|
8
|
+
state.nodes += 1;
|
|
9
|
+
if (state.nodes > 20_000 || state.depth > 32) {
|
|
10
|
+
throw new TypeError("workflow definition exceeds canonicalization limits");
|
|
11
|
+
}
|
|
12
|
+
if (
|
|
13
|
+
value === null ||
|
|
14
|
+
typeof value === "boolean" ||
|
|
15
|
+
typeof value === "string"
|
|
16
|
+
) {
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
if (typeof value === "number") {
|
|
20
|
+
if (!Number.isFinite(value)) {
|
|
21
|
+
throw new TypeError("workflow definition contains a non-finite number");
|
|
22
|
+
}
|
|
23
|
+
return Object.is(value, -0) ? 0 : value;
|
|
24
|
+
}
|
|
25
|
+
if (Array.isArray(value)) {
|
|
26
|
+
const childState = { ...state, depth: state.depth + 1 };
|
|
27
|
+
const output = value.map((item) => stableJsonValue(item, childState));
|
|
28
|
+
state.nodes = childState.nodes;
|
|
29
|
+
return output;
|
|
30
|
+
}
|
|
31
|
+
if (value && typeof value === "object") {
|
|
32
|
+
const prototype = Object.getPrototypeOf(value);
|
|
33
|
+
if (prototype !== Object.prototype && prototype !== null) {
|
|
34
|
+
throw new TypeError(
|
|
35
|
+
"workflow definition must contain plain JSON objects",
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
const childState = { ...state, depth: state.depth + 1 };
|
|
39
|
+
const output = {};
|
|
40
|
+
for (const key of Object.keys(value).sort()) {
|
|
41
|
+
const child = value[key];
|
|
42
|
+
if (child === undefined) continue;
|
|
43
|
+
if (["function", "symbol", "bigint"].includes(typeof child)) {
|
|
44
|
+
throw new TypeError("workflow definition contains a non-JSON value");
|
|
45
|
+
}
|
|
46
|
+
output[key] = stableJsonValue(child, childState);
|
|
47
|
+
}
|
|
48
|
+
state.nodes = childState.nodes;
|
|
49
|
+
return output;
|
|
50
|
+
}
|
|
51
|
+
throw new TypeError("workflow definition contains a non-JSON value");
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function deepFreeze(value) {
|
|
55
|
+
if (!value || typeof value !== "object" || Object.isFrozen(value)) {
|
|
56
|
+
return value;
|
|
57
|
+
}
|
|
58
|
+
for (const child of Object.values(value)) deepFreeze(child);
|
|
59
|
+
return Object.freeze(value);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function digestDefinition(definition) {
|
|
63
|
+
const canonical = JSON.stringify(definition);
|
|
64
|
+
if (Buffer.byteLength(canonical, "utf8") > MAX_WORKFLOW_DEFINITION_BYTES) {
|
|
65
|
+
throw new TypeError(
|
|
66
|
+
`workflow definition exceeds ${MAX_WORKFLOW_DEFINITION_BYTES} bytes`,
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
return `sha256:${createHash("sha256").update(canonical).digest("hex")}`;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function integrityError(message) {
|
|
73
|
+
const error = new Error(message);
|
|
74
|
+
error.code = "WORKFLOW_DEFINITION_INTEGRITY";
|
|
75
|
+
return error;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export function normalizeWorkflowDefinitionDigest(value) {
|
|
79
|
+
if (typeof value !== "string") return null;
|
|
80
|
+
const normalized = value.trim().toLowerCase();
|
|
81
|
+
return /^sha256:[a-f0-9]{64}$/u.test(normalized) ? normalized : null;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export function createWorkflowDefinitionAuthority(workflow) {
|
|
85
|
+
const definition = deepFreeze(stableJsonValue(workflow));
|
|
86
|
+
return Object.freeze({
|
|
87
|
+
schema: WORKFLOW_DEFINITION_SCHEMA,
|
|
88
|
+
definitionDigest: digestDefinition(definition),
|
|
89
|
+
definition,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export function createCoworkWorkflowRecord(workflow) {
|
|
94
|
+
const authority = createWorkflowDefinitionAuthority(workflow);
|
|
95
|
+
const record = {
|
|
96
|
+
schema: COWORK_WORKFLOW_RECORD_SCHEMA,
|
|
97
|
+
definitionSchema: authority.schema,
|
|
98
|
+
definitionDigest: authority.definitionDigest,
|
|
99
|
+
definition: authority.definition,
|
|
100
|
+
};
|
|
101
|
+
const serialized = JSON.stringify(record, null, 2);
|
|
102
|
+
if (Buffer.byteLength(serialized, "utf8") > MAX_WORKFLOW_DEFINITION_BYTES) {
|
|
103
|
+
throw new TypeError(
|
|
104
|
+
`workflow definition exceeds ${MAX_WORKFLOW_DEFINITION_BYTES} bytes`,
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
return Object.freeze(record);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export function verifyCoworkWorkflowRecord(value, options = {}) {
|
|
111
|
+
if (
|
|
112
|
+
value?.schema !== COWORK_WORKFLOW_RECORD_SCHEMA &&
|
|
113
|
+
options.allowLegacy === true
|
|
114
|
+
) {
|
|
115
|
+
const authority = createWorkflowDefinitionAuthority(value);
|
|
116
|
+
return Object.freeze({
|
|
117
|
+
status: "legacy-unversioned",
|
|
118
|
+
recordSchema: null,
|
|
119
|
+
definitionSchema: authority.schema,
|
|
120
|
+
definitionDigest: authority.definitionDigest,
|
|
121
|
+
definition: authority.definition,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
if (!value || value.schema !== COWORK_WORKFLOW_RECORD_SCHEMA) {
|
|
125
|
+
throw integrityError(
|
|
126
|
+
`workflow record must use ${COWORK_WORKFLOW_RECORD_SCHEMA}`,
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
if (value.definitionSchema !== WORKFLOW_DEFINITION_SCHEMA) {
|
|
130
|
+
throw integrityError("workflow definition schema is unsupported");
|
|
131
|
+
}
|
|
132
|
+
const declaredDigest = normalizeWorkflowDefinitionDigest(
|
|
133
|
+
value.definitionDigest,
|
|
134
|
+
);
|
|
135
|
+
if (!declaredDigest) {
|
|
136
|
+
throw integrityError("workflow definition digest is invalid");
|
|
137
|
+
}
|
|
138
|
+
const authority = createWorkflowDefinitionAuthority(value.definition);
|
|
139
|
+
if (authority.definitionDigest !== declaredDigest) {
|
|
140
|
+
throw integrityError("workflow definition digest mismatch");
|
|
141
|
+
}
|
|
142
|
+
return Object.freeze({
|
|
143
|
+
status: "versioned",
|
|
144
|
+
recordSchema: COWORK_WORKFLOW_RECORD_SCHEMA,
|
|
145
|
+
definitionSchema: authority.schema,
|
|
146
|
+
definitionDigest: authority.definitionDigest,
|
|
147
|
+
definition: authority.definition,
|
|
148
|
+
});
|
|
149
|
+
}
|
package/src/repl/agent-repl.js
CHANGED
|
@@ -25,6 +25,7 @@ import path from "path";
|
|
|
25
25
|
import { randomUUID } from "node:crypto";
|
|
26
26
|
import { isPromise, isProxy } from "node:util/types";
|
|
27
27
|
import { logger } from "../lib/logger.js";
|
|
28
|
+
import { captureAmbientExecutionLocation } from "../lib/execution-location-runtime.js";
|
|
28
29
|
import { issueMcpStdioExecutionAuthority } from "../lib/mcp-stdio-execution-authority.js";
|
|
29
30
|
import { getPlanModeManager, PlanState } from "../lib/plan-mode.js";
|
|
30
31
|
import { createVimState, feedNormalKey } from "../lib/repl-vim.js";
|
|
@@ -88,6 +89,7 @@ import {
|
|
|
88
89
|
persistSideEffectLedger,
|
|
89
90
|
} from "../lib/side-effect-ledger-store.js";
|
|
90
91
|
import { operationIdempotencyKey } from "../lib/idempotency.js";
|
|
92
|
+
import { collectToolResourceIdentifiers } from "../lib/permission-side-effect-center.js";
|
|
91
93
|
import {
|
|
92
94
|
preserveDurableSystemMessageProvenance,
|
|
93
95
|
projectCanonicalResumeMessages,
|
|
@@ -173,6 +175,7 @@ import {
|
|
|
173
175
|
createPromptInteractionSurface,
|
|
174
176
|
mergeClipboardImageChips,
|
|
175
177
|
} from "./prompt-interactions.js";
|
|
178
|
+
import { createSystemClipboardImageBinding } from "./clipboard-image.js";
|
|
176
179
|
import {
|
|
177
180
|
buildPermissionPrompt,
|
|
178
181
|
resolveAskIdleTimeoutMs,
|
|
@@ -407,9 +410,11 @@ export async function runReplDirectToolWithLedger({
|
|
|
407
410
|
let _hookDb = null;
|
|
408
411
|
let _compressor = null;
|
|
409
412
|
let _approvalGate = null;
|
|
410
|
-
//
|
|
411
|
-
// confirmer for `ask` matches.
|
|
413
|
+
// Static + CLI-owned scoped permission rules (deny > ask > allow) and an
|
|
414
|
+
// interactive confirmer for `ask` matches. Scoped rules are refreshed at each
|
|
415
|
+
// tool boundary so TTL expiry and external revocation affect a live session.
|
|
412
416
|
let _permissionRules = null;
|
|
417
|
+
let _permissionRulesProvider = null;
|
|
413
418
|
let _permissionConfirm = null;
|
|
414
419
|
let _managedPermissionRulesOnly = false;
|
|
415
420
|
// .claude/settings.json `hooks` block (decision-capable PreToolUse/PostToolUse).
|
|
@@ -546,6 +551,7 @@ async function executeTool(name, args) {
|
|
|
546
551
|
cwd: process.cwd(),
|
|
547
552
|
approvalGate: _approvalGate,
|
|
548
553
|
permissionRules: _permissionRules,
|
|
554
|
+
permissionRulesProvider: _permissionRulesProvider,
|
|
549
555
|
permissionConfirm: _permissionConfirm,
|
|
550
556
|
settingsHooks: _settingsHooks,
|
|
551
557
|
classifyAllShell: _classifyAllShell,
|
|
@@ -770,6 +776,12 @@ export async function agentLoop(messages, options) {
|
|
|
770
776
|
key: sideEffect.key,
|
|
771
777
|
meta: {
|
|
772
778
|
tool: event.tool,
|
|
779
|
+
toolUseId: event.tool_use_id || null,
|
|
780
|
+
turnId: event.turn_id || null,
|
|
781
|
+
resources: collectToolResourceIdentifiers(
|
|
782
|
+
event.tool,
|
|
783
|
+
event.args,
|
|
784
|
+
),
|
|
773
785
|
idempotencyKey: operationIdempotencyKey({
|
|
774
786
|
tool: event.tool,
|
|
775
787
|
args: event.args,
|
|
@@ -3271,9 +3283,14 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
3271
3283
|
// Load .claude/settings.json permission rules + wire an interactive confirmer
|
|
3272
3284
|
// so `ask` rules prompt (rather than fall closed like headless does).
|
|
3273
3285
|
try {
|
|
3274
|
-
const {
|
|
3275
|
-
|
|
3276
|
-
|
|
3286
|
+
const { readBooleanSetting } = await import("../lib/settings-loader.cjs");
|
|
3287
|
+
const { createPermissionRulesProvider, loadPermissionAuthority } =
|
|
3288
|
+
await import("../lib/permission-authority.js");
|
|
3289
|
+
const permissionAuthorityOptions = { cwd: process.cwd() };
|
|
3290
|
+
const loaded = loadPermissionAuthority(permissionAuthorityOptions);
|
|
3291
|
+
_permissionRulesProvider = createPermissionRulesProvider(
|
|
3292
|
+
permissionAuthorityOptions,
|
|
3293
|
+
);
|
|
3277
3294
|
_managedPermissionRulesOnly =
|
|
3278
3295
|
loaded.managed?.allowManagedPermissionRulesOnly === true;
|
|
3279
3296
|
// Claude-Code 2.1.186 respondToBashCommands (default OFF / opt-in when unset).
|
|
@@ -3356,8 +3373,16 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
3356
3373
|
});
|
|
3357
3374
|
};
|
|
3358
3375
|
} catch (_err) {
|
|
3359
|
-
if (
|
|
3376
|
+
if (
|
|
3377
|
+
_err?.code === "CC_MANAGED_SETTINGS_INVALID" ||
|
|
3378
|
+
_err?.code === "CONFIG_HOME_UNSAFE" ||
|
|
3379
|
+
String(_err?.code || "").startsWith("CC_SCOPED_PERMISSION_") ||
|
|
3380
|
+
String(_err?.code || "").startsWith("DURABLE_SECURITY_STORE_")
|
|
3381
|
+
) {
|
|
3382
|
+
throw _err;
|
|
3383
|
+
}
|
|
3360
3384
|
_permissionRules = null;
|
|
3385
|
+
_permissionRulesProvider = null;
|
|
3361
3386
|
_permissionConfirm = null;
|
|
3362
3387
|
_managedPermissionRulesOnly = false;
|
|
3363
3388
|
}
|
|
@@ -3475,6 +3500,7 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
3475
3500
|
title: `Agent ${new Date().toISOString().slice(0, 10)}`,
|
|
3476
3501
|
provider,
|
|
3477
3502
|
model,
|
|
3503
|
+
executionLocation: captureAmbientExecutionLocation({ provider, model }),
|
|
3478
3504
|
};
|
|
3479
3505
|
if (useJsonl) {
|
|
3480
3506
|
sessionId = startReplJsonlSession(
|
|
@@ -4642,6 +4668,12 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
4642
4668
|
|
|
4643
4669
|
// Prompt-side interaction modules share the production readline surface.
|
|
4644
4670
|
// A per-REPL registry avoids singleton handlers retaining an old session.
|
|
4671
|
+
const _clipboardBinding = Object.prototype.hasOwnProperty.call(
|
|
4672
|
+
options,
|
|
4673
|
+
"clipboardBinding",
|
|
4674
|
+
)
|
|
4675
|
+
? options.clipboardBinding
|
|
4676
|
+
: createSystemClipboardImageBinding();
|
|
4645
4677
|
const _promptInteractionSurface = createPromptInteractionSurface({
|
|
4646
4678
|
readline: rl,
|
|
4647
4679
|
config: _promptInteractionConfig,
|
|
@@ -4649,7 +4681,7 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
4649
4681
|
getSessionId: () => sessionId,
|
|
4650
4682
|
getSuggestionContext: () => ({ messages: messages.slice() }),
|
|
4651
4683
|
persistSuggestionEnabled: _persistPromptSuggestionsEnabled,
|
|
4652
|
-
clipboardBinding:
|
|
4684
|
+
clipboardBinding: _clipboardBinding,
|
|
4653
4685
|
generateSuggestions: resolveReplPromptSuggestionGenerator(
|
|
4654
4686
|
useJsonl,
|
|
4655
4687
|
options.generatePromptSuggestions,
|
|
@@ -5936,6 +5968,7 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
5936
5968
|
if (snap) _clearedConversation = snap;
|
|
5937
5969
|
messages.length = 1; // Keep system prompt
|
|
5938
5970
|
_checkpointMarks.length = 0; // checkpoint marks no longer map to anything
|
|
5971
|
+
_promptInteractions.clearClipboardImageChips();
|
|
5939
5972
|
logger.info(
|
|
5940
5973
|
snap
|
|
5941
5974
|
? "Conversation cleared — run /rewind clear to restore it"
|
|
@@ -9056,6 +9089,7 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
9056
9089
|
prepareCall,
|
|
9057
9090
|
approvalGate: _approvalGate,
|
|
9058
9091
|
permissionRules: _permissionRules,
|
|
9092
|
+
permissionRulesProvider: _permissionRulesProvider,
|
|
9059
9093
|
permissionConfirm: _permissionConfirm,
|
|
9060
9094
|
settingsHooks: _settingsHooks,
|
|
9061
9095
|
hookSupervisor: _asyncHookSupervisor,
|
package/src/repl/chat-repl.js
CHANGED
|
@@ -55,6 +55,7 @@ import {
|
|
|
55
55
|
import { installPipeSafety } from "../runtime/pipe-safety.js";
|
|
56
56
|
import { installOutputBackpressure } from "../runtime/output-backpressure.js";
|
|
57
57
|
import { assertChatSessionUsageAdmission } from "../lib/chat-session-admission.js";
|
|
58
|
+
import { captureAmbientExecutionLocation } from "../lib/execution-location-runtime.js";
|
|
58
59
|
|
|
59
60
|
const SLASH_COMMANDS = {
|
|
60
61
|
"/exit": "Exit the chat",
|
|
@@ -114,6 +115,7 @@ export async function startChatRepl(options = {}) {
|
|
|
114
115
|
title: "chat-repl",
|
|
115
116
|
provider,
|
|
116
117
|
model,
|
|
118
|
+
executionLocation: captureAmbientExecutionLocation({ provider, model }),
|
|
117
119
|
});
|
|
118
120
|
} catch {
|
|
119
121
|
sessionId = null;
|