chainlesschain 0.164.0 → 0.165.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +248 -2
- package/package.json +7 -4
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-D2MEn7fI.js → AIOps-lS1R0Cza.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-lCW_4Gf0.js → ActionButton-BmlgBPsj.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-Bs7i-nsS.js → Analytics-CNKczv1S.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-CK7B6S_j.js → AppLayout-BuZGJARQ.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-C8ILjpyo.js → Artifacts-Dm73Sl-O.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-Bb9cNaWc.js → Audit-BGMW7A5e.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-sC9ooXIf.js → BackgroundAgents-BQ6M54JR.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-D-DrsplT.js → Backup-DBzGP0bR.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-uCNZpwSK.js → BaseInput-D1mLCoOV.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-CsDK1uE9.js → Chat-BUfcN7p8.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-OqSDt50w.js → ChatBubbleRenderer-CY5m8ZHg.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-JhTXM1-K.js → Checkbox-Du0Yg5Pi.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-BbzZLnyD.js → Codegen-B2RXziHW.js} +1 -1
- package/src/assets/web-panel/assets/{Col-D4VW4m4j.js → Col-DWhekOrR.js} +1 -1
- package/src/assets/web-panel/assets/{Community-BXrYawxV.js → Community-HQhrkon4.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DCihGy1u.js → Compact-izHNb4uz.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-DlyZ-lk8.js → Compliance-BDwLy41-.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-DvGZrhbO.js → Cowork-DFJhLa7K.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-DUncZi8h.js → Cron-DYY9RG7-.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-C_hLuUcm.js → Crosschain-rr7tJTtv.js} +1 -1
- package/src/assets/web-panel/assets/{DID-b6YSUqxr.js → DID-D2sfHRLi.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-uvM15Cfb.js → Dashboard-q_eGdhha.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-D1-Nd4qY.js → Dropdown-Cufrh2Bz.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-8ApvL6Zc.js → EmailListRenderer-B-kdv10f.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-LYJt8811.js → FamilyGuardDashboard-D21XjgfG.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-BbI3HGpv.js → Federation-CAwRTLZH.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-DSoEKuFu.js → FormItemContext-vx3daNDF.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-B0S9OWd5.js → GenericCardRenderer-CRWY2wU4.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DIs9Zhf3.js → Git-Q6SwauyD.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-jzZXrxcl.js → Governance-BJ1q4IQZ.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-JUPjf2ZI.js → Inference-CSWjROgD.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DxnfJvlP.js → KnowledgeGraph-fzuQsWuY.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-iXiz8BEE.js → Logs-DVF8Mnns.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-BLif4QSg.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-Y3Xch312.js → Marketplace-BQP7LOA4.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-D7kGGbO7.js → McpTools-BNlJCmNc.js} +4 -4
- package/src/assets/web-panel/assets/{Memory-Do_hVxzh.js → Memory-DLLg5WQ4.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-CtrR0Tas.js → MobileBridge-CR2skNAF.js} +1 -1
- package/src/assets/web-panel/assets/MobileProjects-BxVavObl.js +1 -0
- package/src/assets/web-panel/assets/{Mtc-qo5QCTGd.js → Mtc-B17pgqMI.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-cq5mnjYj.js → MtcAudit-4UmV5cIL.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-Bq0MAQHw.js → Multisig-DoMEXEcU.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-DdWE6Vi2.js → NLProgramming-h9DMXFX4.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-BxMBFcIp.js → Notes-Cihn-xX8.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-RTrAcbUe.js → NotificationSettings-BE6ZGa3R.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-DJbpGqzT.js → OrderTableRenderer-CnwojoSI.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-SQzIPdqC.js → Organization-B2vpwmjb.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-02yECh22.js → Overflow-C4z28R0-.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-BNg4pNCM.js → P2P-BVlFkwhW.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-BxPJZsD3.js → PdhVaultBrowser-BXbEdL5B.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-CLnDnPAz.js → Permissions-C28xs4lp.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-C5m0AjGf.js → PersonalDataHub-Dgl_rBjM.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-VwOf5Dhv.js → Pipeline-3QUIhrKI.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-CC0W2hZd.js → Privacy-8Gh33OZ5.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-Dz893Bob.js → ProjectInit-BNmg4tZi.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CxQkvl0k.js → ProjectSettings-vgMfeCf9.js} +2 -2
- package/src/assets/web-panel/assets/Projects-BhtAVilc.js +1 -0
- package/src/assets/web-panel/assets/{Providers-DeB9IkxK.js → Providers-CXoOa8eX.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-OCeoaswn.js → QrScannerModal-BhfTF0oS.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-DenotaAj.js → QuickAsk-C746HEAj.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-Cies_jjI.js → Recommend-BSej8Eo0.js} +1 -1
- package/src/assets/web-panel/assets/RemoteSession-f3gmnlG3.js +5 -0
- package/src/assets/web-panel/assets/{Reputation-CW0mvxgZ.js → Reputation-CyvybpkN.js} +1 -1
- package/src/assets/web-panel/assets/{Row-SEd32qZU.js → Row-DwV2PeYn.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-BSwnJ3Lm.js → RssFeed-11GrzjZy.js} +3 -3
- package/src/assets/web-panel/assets/{Search-xe2m8bkC.js → Search-BjKXkrAY.js} +1 -1
- package/src/assets/web-panel/assets/{Security-Mq2F9Nro.js → Security-eWiFb9Yk.js} +4 -4
- package/src/assets/web-panel/assets/{Services-BKGw2V3P.js → Services-CdCsMAtt.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DW95-Rxf.js → Skeleton-4Q2UTKQ5.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-CHgChCv_.js → Skills-v4rtYrRj.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-tKh6k3R7.js → Sla-CRhsFvd_.js} +1 -1
- package/src/assets/web-panel/assets/SpeechSettings-DLjKsDVu.js +1 -0
- package/src/assets/web-panel/assets/{SyncSettings-D0Fw8fVL.js → SyncSettings-D16zonl7.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-20x1GB3D.js → Tasks-Xxozz0i_.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-DJ-lts-a.js → Templates-CXJpPtCT.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BFdGpbs7.js → Tenant-XRV0L1ZF.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-Xpx61vHL.js → Terminal-CYuO1i_w.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-C6UIvyZQ.js → TimelineRenderer-BXqitWsu.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-Dellq08f.js → Tokens-BvPrDHIy.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-VKw8d0J-.js → Trigger-DhCrSTf5.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-DNftdKT5.js → Trust-DmsuZD6K.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-DX9VAKJI.js → UkeySign-D_yrts5C.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-B2h3jO8q.js → VideoEditing-B01ihPrm.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-CjGkof7f.js → Wallet-DpUjKa-N.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-2Zfcu55P.js → WebAuthn-CL07yON6.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-B9eZ8UxZ.js → WorkflowEditor-CLMflnRr.js} +1 -1
- package/src/assets/web-panel/assets/{chat-CQNfD-YO.js → chat-DtUqe8h_.js} +1 -1
- package/src/assets/web-panel/assets/{colors-D4usyFT2.js → colors-DPKrgVfy.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-s4TpjvjX.js → compact-item-BTt2GtOm.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-BRCSvYxj.js → createContext-D_VeUc1J.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-Bj5nUW2v.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-AdkUbkV-.js → hasIn-1kndiylj.js} +1 -1
- package/src/assets/web-panel/assets/{index-BIoG5yYf.js → index-2eyAXE3d.js} +1 -1
- package/src/assets/web-panel/assets/{index-nXyk8GZ9.js → index-4bna2_SR.js} +1 -1
- package/src/assets/web-panel/assets/{index-B2V-eKfK.js → index-8nz_fmlj.js} +1 -1
- package/src/assets/web-panel/assets/{index-D_XBHopw.js → index-B9KvcS7R.js} +1 -1
- package/src/assets/web-panel/assets/{index-s_buFMEG.js → index-BAXfRKfG.js} +1 -1
- package/src/assets/web-panel/assets/{index-DZT36ZYq.js → index-BHpBMWCh.js} +1 -1
- package/src/assets/web-panel/assets/{index-BMcimU-2.js → index-BaZAbw9A.js} +1 -1
- package/src/assets/web-panel/assets/{index-DzRjHxEv.js → index-BepLZwgB.js} +1 -1
- package/src/assets/web-panel/assets/{index--00U6vXZ.js → index-Bhudc_Ez.js} +1 -1
- package/src/assets/web-panel/assets/{index-C7Y8Aluc.js → index-BlDNVgBt.js} +1 -1
- package/src/assets/web-panel/assets/{index-BtobShro.js → index-By5n8up9.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cvyt-zhm.js → index-CHG-KcS4.js} +1 -1
- package/src/assets/web-panel/assets/index-CPcM-eqo.js +1 -0
- package/src/assets/web-panel/assets/{index-MMN9V6JF.js → index-CX81qSM4.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bad4VNvz.js → index-CauoBQkH.js} +1 -1
- package/src/assets/web-panel/assets/{index-CCsM_Ybx.js → index-CcO04eDn.js} +1 -1
- package/src/assets/web-panel/assets/{index-DARsAyUp.js → index-CtF7EN49.js} +1 -1
- package/src/assets/web-panel/assets/{index-C5KAQFPQ.js → index-CzjkKUmR.js} +1 -1
- package/src/assets/web-panel/assets/{index-RfMr79MW.js → index-D95OFht7.js} +1 -1
- package/src/assets/web-panel/assets/{index-DdCB70SS.js → index-DFIZ_1Sf.js} +1 -1
- package/src/assets/web-panel/assets/{index-CYdoQsa1.js → index-DG2MZQ3f.js} +1 -1
- package/src/assets/web-panel/assets/{index-BPhkFZ1I.js → index-DJ8vXGOa.js} +1 -1
- package/src/assets/web-panel/assets/{index-_IRVsV9X.js → index-Dbbymxpj.js} +1 -1
- package/src/assets/web-panel/assets/{index-DVKfQ0Ux.js → index-DdkplL9R.js} +1 -1
- package/src/assets/web-panel/assets/{index-CkwiSLhU.js → index-DfGl8CqG.js} +1 -1
- package/src/assets/web-panel/assets/{index-CJVEOa4i.js → index-DfKBRdSS.js} +1 -1
- package/src/assets/web-panel/assets/{index-C1mJtE6q.js → index-DsJCDUJG.js} +1 -1
- package/src/assets/web-panel/assets/{index-BgiXR_-_.js → index-Dwqmtk65.js} +1 -1
- package/src/assets/web-panel/assets/{index-CJCFe2Qf.js → index-DxdTdBix.js} +1 -1
- package/src/assets/web-panel/assets/{index-C484EJiS.js → index-FzdwcSy2.js} +1 -1
- package/src/assets/web-panel/assets/{index-B4JJCfQ2.js → index-GsoUQ2M7.js} +1 -1
- package/src/assets/web-panel/assets/{index-CQhAVU5t.js → index-brCInrzq.js} +1 -1
- package/src/assets/web-panel/assets/{index-CKC1t3Ic.js → index-dVc-CXY4.js} +1 -1
- package/src/assets/web-panel/assets/{index-BQ3DXBtD.js → index-fk2Rjacw.js} +3 -3
- package/src/assets/web-panel/assets/{index-Cduu2Hhr.js → index-l1BETrDb.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bw2MEnUk.js → index-m31Ka8hZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-D2GjI2oe.js → index-ocf06EVQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CJdQrZth.js → index-sDoMHTNA.js} +1 -1
- package/src/assets/web-panel/assets/index-xeSyVoRe.js +1 -0
- package/src/assets/web-panel/assets/{initDefaultProps-Blmpk7HL.js → initDefaultProps-CvyYJd7z.js} +1 -1
- package/src/assets/web-panel/assets/{motion-DPBJMv1n.js → motion-DYZkhUdz.js} +1 -1
- package/src/assets/web-panel/assets/{move-ButdzCM7.js → move-slnJRVT1.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-cyRC_QCe.js → mtc-parser-DVc0CKmy.js} +1 -1
- package/src/assets/web-panel/assets/{omit-1epSV7hz.js → omit-BCXAtHCq.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DuPY8xJs.js → pickAttrs-DBsemz_K.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-6XZqarhe.js → placementArrow-BRtkJ-nv.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-B40pXBWM.js → responsiveObserve-Cebq7EZn.js} +1 -1
- package/src/assets/web-panel/assets/{slide-jbZ9Wu4n.js → slide-DT7qvId2.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-BKQQcVy4.js → statusUtils-pQiITLkG.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-NiKfWjUT.js → styleChecker-c-19BVKQ.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-bQUCvPeb.js → useFlexGapSupport-DsS5-0bE.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-CUGji7ph.js → useFs-CxGiMe5n.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-4veyN2N2.js → usePersonalDataHub-D9btVID5.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-1-nLug-Z.js → vnode-CUYFsFEN.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-dhCeRDMo.js → zoom-CXmn_35j.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +1 -1
- package/src/commands/cowork.js +559 -62
- package/src/commands/plugin.js +819 -64
- package/src/commands/session-location.js +318 -7
- package/src/constants.js +2 -2
- package/src/data/changelog.json +28 -2
- package/src/gateways/ws/action-protocol.js +293 -19
- package/src/gateways/ws/message-dispatcher.js +30 -0
- package/src/gateways/ws/remote-session-protocol.js +542 -35
- package/src/gateways/ws/ws-approval-gate.js +5 -0
- package/src/gateways/ws/ws-server.js +462 -38
- package/src/harness/jsonl-session-store.js +638 -2
- package/src/harness/prompt-compressor.js +4 -0
- package/src/harness/remote-session-audit.js +1 -0
- package/src/harness/remote-session-crypto.js +750 -50
- package/src/harness/remote-session-registry.js +795 -27
- package/src/lib/auto-mode-config.js +98 -3
- package/src/lib/background-agent-keeper-client.js +29 -0
- package/src/lib/background-agent-keeper-protocol.js +158 -10
- package/src/lib/background-agent-supervisor.js +870 -48
- package/src/lib/background-session-transport.js +23 -6
- package/src/lib/background-turn-bootstrap-protocol.js +64 -0
- package/src/lib/cowork-task-runner.js +70 -0
- package/src/lib/cowork-workflow.js +887 -62
- package/src/lib/delivery-production-adapter.js +38 -2
- package/src/lib/doctor-checkup.js +34 -10
- package/src/lib/dynamic-workflow-draft.js +535 -0
- package/src/lib/dynamic-workflow-facade.js +1105 -17
- package/src/lib/dynamic-workflow-runtime.js +2974 -0
- package/src/lib/execution-location-contract.js +111 -7
- package/src/lib/execution-location-runtime.js +3 -1
- package/src/lib/execution-location-target.js +910 -0
- package/src/lib/llm-providers.js +1 -0
- package/src/lib/mcp-call-ledger-store.js +35 -0
- package/src/lib/mcp-call-ledger.js +30 -0
- package/src/lib/mcp-stdio-package-materialization.js +1 -1
- package/src/lib/plugin-runtime/__tests__/remote-source.test.js +34 -16
- package/src/lib/plugin-runtime/install.js +4956 -657
- package/src/lib/plugin-runtime/manifest.js +3 -1
- package/src/lib/plugin-runtime/marketplace-artifact-readback.js +671 -31
- package/src/lib/plugin-runtime/marketplace-catalog.js +68 -2
- package/src/lib/plugin-runtime/marketplace-impact.js +208 -15
- package/src/lib/plugin-runtime/marketplace-network.js +317 -0
- package/src/lib/plugin-runtime/marketplace-pac-worker.js +15 -0
- package/src/lib/plugin-runtime/marketplace-remote-artifacts.js +25 -2
- package/src/lib/plugin-runtime/marketplace-source-cache.js +359 -0
- package/src/lib/plugin-runtime/policy.js +21 -6
- package/src/lib/plugin-runtime/publisher-trust.js +332 -0
- package/src/lib/plugin-runtime/remote-source.js +323 -27
- package/src/lib/plugin-runtime/scopes.js +317 -41
- package/src/lib/plugin-runtime/transaction-journal.js +806 -0
- package/src/lib/public-ide-capability-manifest.js +1 -1
- package/src/lib/remote-approval-bridge.js +745 -108
- package/src/lib/remote-control.js +2 -0
- package/src/lib/remote-membership-coordinator.js +612 -46
- package/src/lib/remote-membership-host-store.js +59 -10
- package/src/lib/runtime-provenance-ledger.js +171 -46
- package/src/lib/shell-approval.js +169 -6
- package/src/lib/sub-agent-context.js +268 -2
- package/src/lib/task-model-selector.js +1 -1
- package/src/lib/with-file-lock.js +167 -42
- package/src/repl/agent-repl.js +70 -29
- package/src/repl/remote-approval.js +29 -7
- package/src/runtime/agent-core.js +1695 -194
- package/src/runtime/headless-runner.js +22 -5
- package/src/runtime/headless-stream.js +19 -3
- package/src/workers/background-agent-keeper.js +279 -58
- package/src/workers/background-agent-worker.js +7 -0
- package/src/workers/background-turn-bootstrap.js +29 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-GmB6DOr6.js +0 -1
- package/src/assets/web-panel/assets/MobileProjects-BL0Czcoj.js +0 -1
- package/src/assets/web-panel/assets/Projects-DDAjkUkT.js +0 -1
- package/src/assets/web-panel/assets/RemoteSession-Dxzl5n2T.js +0 -5
- package/src/assets/web-panel/assets/SpeechSettings-D6UL3dA5.js +0 -1
- package/src/assets/web-panel/assets/devWarning-DKJjSWRn.js +0 -1
- package/src/assets/web-panel/assets/index-C61cnl3K.js +0 -1
- package/src/assets/web-panel/assets/index-D4XFHxBr.js +0 -1
package/src/repl/agent-repl.js
CHANGED
|
@@ -3175,6 +3175,11 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
3175
3175
|
const { getApprovalGate } =
|
|
3176
3176
|
await import("../lib/session-core-singletons.js");
|
|
3177
3177
|
_approvalGate = await getApprovalGate();
|
|
3178
|
+
_approvalGate =
|
|
3179
|
+
_approvalGate?.createSessionScope?.(
|
|
3180
|
+
sessionId || `repl-scope:${randomUUID()}`,
|
|
3181
|
+
) || _approvalGate;
|
|
3182
|
+
_approvalGate?.setAuthorizationConsumer?.(null);
|
|
3178
3183
|
// autoMode.decisions: wrap the gate with the configurable classifier
|
|
3179
3184
|
// BEFORE setConfirmer so the wrapper captures the interactive confirmer.
|
|
3180
3185
|
// Inactive (delegating) unless the session mode is "auto"; not installed
|
|
@@ -3252,29 +3257,53 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
3252
3257
|
},
|
|
3253
3258
|
};
|
|
3254
3259
|
};
|
|
3255
|
-
_approvalGate.setConfirmer(
|
|
3256
|
-
|
|
3257
|
-
|
|
3258
|
-
|
|
3259
|
-
|
|
3260
|
-
|
|
3260
|
+
_approvalGate.setConfirmer(
|
|
3261
|
+
async ({
|
|
3262
|
+
tool,
|
|
3263
|
+
args,
|
|
3264
|
+
riskLevel,
|
|
3265
|
+
action,
|
|
3266
|
+
cwd,
|
|
3267
|
+
workspace,
|
|
3268
|
+
sessionId,
|
|
3269
|
+
session,
|
|
3270
|
+
targetEnv,
|
|
3271
|
+
policyVersion,
|
|
3272
|
+
}) => {
|
|
3273
|
+
if (_dontAskActive()) {
|
|
3274
|
+
process.stdout.write(
|
|
3275
|
+
chalk.yellow(
|
|
3276
|
+
`\n ✕ denied without asking (dontAsk mode): ${riskLevel || "medium"}-risk ${tool || "run_shell"}${args?.command ? " — " + args.command : ""}\n`,
|
|
3277
|
+
),
|
|
3278
|
+
);
|
|
3279
|
+
return false;
|
|
3280
|
+
}
|
|
3281
|
+
await _fireNotification(
|
|
3282
|
+
`Permission needed: ${riskLevel || "medium"}-risk ${tool || "run_shell"}${args?.command ? " — " + args.command : ""}`,
|
|
3283
|
+
"info",
|
|
3284
|
+
_sessionHandle,
|
|
3261
3285
|
);
|
|
3262
|
-
|
|
3263
|
-
|
|
3264
|
-
|
|
3265
|
-
|
|
3266
|
-
|
|
3267
|
-
|
|
3268
|
-
|
|
3269
|
-
|
|
3270
|
-
|
|
3271
|
-
|
|
3272
|
-
|
|
3273
|
-
|
|
3274
|
-
|
|
3275
|
-
|
|
3276
|
-
|
|
3277
|
-
|
|
3286
|
+
const local = askGateApprovalLocally({ tool, args, riskLevel });
|
|
3287
|
+
if (!_remoteApproval?.bridge) return local.promise;
|
|
3288
|
+
return raceLocalAndRemote({
|
|
3289
|
+
bridge: _remoteApproval.bridge,
|
|
3290
|
+
ask: describeAskContext({
|
|
3291
|
+
tool,
|
|
3292
|
+
args,
|
|
3293
|
+
riskLevel,
|
|
3294
|
+
action,
|
|
3295
|
+
cwd,
|
|
3296
|
+
workspace,
|
|
3297
|
+
sessionId,
|
|
3298
|
+
session,
|
|
3299
|
+
targetEnv,
|
|
3300
|
+
policyVersion,
|
|
3301
|
+
}),
|
|
3302
|
+
local,
|
|
3303
|
+
writeOut: (text) => process.stdout.write(chalk.cyan(text)),
|
|
3304
|
+
});
|
|
3305
|
+
},
|
|
3306
|
+
);
|
|
3278
3307
|
}
|
|
3279
3308
|
} catch (_err) {
|
|
3280
3309
|
_approvalGate = null;
|
|
@@ -3364,13 +3393,11 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
3364
3393
|
_sessionHandle,
|
|
3365
3394
|
);
|
|
3366
3395
|
const local = askPermissionLocally({ tool, args, rule, reason });
|
|
3367
|
-
|
|
3368
|
-
|
|
3369
|
-
|
|
3370
|
-
|
|
3371
|
-
|
|
3372
|
-
writeOut: (text) => process.stdout.write(chalk.cyan(text)),
|
|
3373
|
-
});
|
|
3396
|
+
// This confirmer is consumed as a legacy boolean by settings/hook
|
|
3397
|
+
// admission. A remote lease must never be flattened there and then skip
|
|
3398
|
+
// the ApprovalGate consume, so this path remains local-only until it can
|
|
3399
|
+
// carry the opaque authorization through its own dispatch boundary.
|
|
3400
|
+
return local.promise;
|
|
3374
3401
|
};
|
|
3375
3402
|
} catch (_err) {
|
|
3376
3403
|
if (
|
|
@@ -3568,6 +3595,18 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
3568
3595
|
// purely how the confirmers consume it — they RACE the terminal prompt
|
|
3569
3596
|
// against the paired device instead of gating on the remote alone.
|
|
3570
3597
|
const _startRemoteApproval = async () => {
|
|
3598
|
+
if (
|
|
3599
|
+
!_approvalGate ||
|
|
3600
|
+
typeof _approvalGate.setConfirmer !== "function" ||
|
|
3601
|
+
typeof _approvalGate.setAuthorizationConsumer !== "function" ||
|
|
3602
|
+
typeof _approvalGate.consumeAuthorization !== "function"
|
|
3603
|
+
) {
|
|
3604
|
+
const error = new Error(
|
|
3605
|
+
"installed session-core cannot bind and consume durable remote approval",
|
|
3606
|
+
);
|
|
3607
|
+
error.code = "CC_REMOTE_APPROVAL_GATE_UNAVAILABLE";
|
|
3608
|
+
throw error;
|
|
3609
|
+
}
|
|
3571
3610
|
const { startHeadlessRemoteApproval } =
|
|
3572
3611
|
await import("../lib/remote-approval-bridge.js");
|
|
3573
3612
|
const started = await startHeadlessRemoteApproval({
|
|
@@ -3580,6 +3619,7 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
3580
3619
|
pairing: started.pairing,
|
|
3581
3620
|
close: started.close,
|
|
3582
3621
|
};
|
|
3622
|
+
_approvalGate.setAuthorizationConsumer(started.consumeAuthorization);
|
|
3583
3623
|
logger.log(
|
|
3584
3624
|
chalk.cyan(
|
|
3585
3625
|
" remote-control: permission prompts can be answered from a paired device (first answer — terminal or device — wins)",
|
|
@@ -3597,6 +3637,7 @@ async function startAgentReplInWorkspaceOwned(
|
|
|
3597
3637
|
const _stopRemoteApproval = async () => {
|
|
3598
3638
|
const active = _remoteApproval;
|
|
3599
3639
|
_remoteApproval = null; // confirmers fall back to local-only immediately
|
|
3640
|
+
_approvalGate?.setAuthorizationConsumer?.(null);
|
|
3600
3641
|
if (active) await active.close().catch(() => undefined);
|
|
3601
3642
|
};
|
|
3602
3643
|
|
|
@@ -19,14 +19,21 @@
|
|
|
19
19
|
/**
|
|
20
20
|
* Normalize the shapes the REPL's two confirmers receive (ApprovalGate
|
|
21
21
|
* `{tool, args, riskLevel}` / settings-hook `{tool, args, rule, reason}`)
|
|
22
|
-
* into the bridge's
|
|
22
|
+
* into the bridge's exact durable ask payload.
|
|
23
23
|
*/
|
|
24
24
|
export function describeAskContext({
|
|
25
25
|
tool,
|
|
26
26
|
args,
|
|
27
|
+
action = null,
|
|
27
28
|
rule = null,
|
|
28
29
|
reason = null,
|
|
29
30
|
riskLevel = null,
|
|
31
|
+
cwd = null,
|
|
32
|
+
workspace = null,
|
|
33
|
+
sessionId = null,
|
|
34
|
+
session = null,
|
|
35
|
+
targetEnv = null,
|
|
36
|
+
policyVersion = null,
|
|
30
37
|
} = {}) {
|
|
31
38
|
const detail =
|
|
32
39
|
typeof args?.command === "string"
|
|
@@ -38,17 +45,24 @@ export function describeAskContext({
|
|
|
38
45
|
: null;
|
|
39
46
|
return {
|
|
40
47
|
tool: tool || null,
|
|
41
|
-
action:
|
|
42
|
-
|
|
43
|
-
|
|
48
|
+
action:
|
|
49
|
+
action ||
|
|
50
|
+
(rule
|
|
51
|
+
? `ask-rule:${rule}`
|
|
52
|
+
: reason || (riskLevel ? `${riskLevel}-risk` : null)),
|
|
44
53
|
detail,
|
|
54
|
+
operationArgs: args === undefined ? null : structuredClone(args),
|
|
55
|
+
workspace: workspace || cwd || null,
|
|
56
|
+
session: session || sessionId || null,
|
|
57
|
+
targetEnv: targetEnv || null,
|
|
58
|
+
policyVersion: policyVersion || null,
|
|
45
59
|
};
|
|
46
60
|
}
|
|
47
61
|
|
|
48
62
|
// These outcomes are not a remote human decision. The terminal may still
|
|
49
63
|
// answer, but its result is accepted only if resolveLocally can durably settle
|
|
50
64
|
// the same live card.
|
|
51
|
-
const NON_DECISIVE_REMOTE = new Set(["timeout", "closed"]);
|
|
65
|
+
const NON_DECISIVE_REMOTE = new Set(["timeout", "closed", "lease-unavailable"]);
|
|
52
66
|
|
|
53
67
|
/**
|
|
54
68
|
* Race the local interactive prompt against the paired-device decision.
|
|
@@ -83,14 +97,22 @@ export async function raceLocalAndRemote({
|
|
|
83
97
|
() => ({ src: "local", approved: false }),
|
|
84
98
|
);
|
|
85
99
|
let winner = await Promise.race([remoteLeg, localLeg]);
|
|
100
|
+
let remoteUnavailableWithoutCard = false;
|
|
86
101
|
if (
|
|
87
102
|
winner.src === "remote" &&
|
|
88
103
|
NON_DECISIVE_REMOTE.has(winner.decision?.via)
|
|
89
104
|
) {
|
|
105
|
+
remoteUnavailableWithoutCard =
|
|
106
|
+
winner.decision?.via === "lease-unavailable" && !requestId;
|
|
90
107
|
winner = await localLeg;
|
|
91
108
|
}
|
|
92
109
|
if (winner.src === "local") {
|
|
93
|
-
|
|
110
|
+
// Unsupported tools have no durable remote card to settle. In that exact
|
|
111
|
+
// lease-unavailable case, preserve the existing local confirmation path;
|
|
112
|
+
// timeout/closed responses without a request id remain fail-closed.
|
|
113
|
+
if (!requestId) {
|
|
114
|
+
return remoteUnavailableWithoutCard && winner.approved === true;
|
|
115
|
+
}
|
|
94
116
|
try {
|
|
95
117
|
const persisted = bridge.resolveLocally(requestId, winner.approved);
|
|
96
118
|
return persisted === true && winner.approved === true;
|
|
@@ -107,5 +129,5 @@ export async function raceLocalAndRemote({
|
|
|
107
129
|
writeOut(
|
|
108
130
|
`\n ✓ ${winner.decision.approved ? "allowed" : "denied"} from paired device\n`,
|
|
109
131
|
);
|
|
110
|
-
return winner.decision
|
|
132
|
+
return winner.decision;
|
|
111
133
|
}
|