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
|
@@ -4,9 +4,24 @@ import { TextDecoder } from "node:util";
|
|
|
4
4
|
import {
|
|
5
5
|
buildExecutionLocationCatalog,
|
|
6
6
|
buildExecutionLocationHandoffPreview,
|
|
7
|
+
computeExecutionLocationTargetFactsDigest,
|
|
7
8
|
} from "../lib/execution-location-contract.js";
|
|
8
9
|
import { captureAmbientExecutionLocation } from "../lib/execution-location-runtime.js";
|
|
9
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
EXECUTION_LOCATION_TARGET_ATTESTATION_SCHEMA,
|
|
12
|
+
EXECUTION_LOCATION_TARGET_RESUME_SCHEMA,
|
|
13
|
+
attestExecutionLocationTarget,
|
|
14
|
+
readExecutionLocationProfile,
|
|
15
|
+
resumeExecutionLocationTarget,
|
|
16
|
+
} from "../lib/execution-location-target.js";
|
|
17
|
+
import {
|
|
18
|
+
MAX_SESSION_REPLICA_BYTES,
|
|
19
|
+
SESSION_EXECUTION_LOCATION_HANDOFF_INSTALL_SCHEMA,
|
|
20
|
+
getVerifiedSessionExecutionLocationAuthority,
|
|
21
|
+
installSessionReplica,
|
|
22
|
+
installSessionReplicaWithLocationHandoff,
|
|
23
|
+
readVerifiedTranscriptBytes,
|
|
24
|
+
} from "../harness/jsonl-session-store.js";
|
|
10
25
|
import {
|
|
11
26
|
sameFileStatIdentity,
|
|
12
27
|
samePathHandleFileIdentity,
|
|
@@ -112,10 +127,13 @@ export function projectSessionExecutionLocation(sessionId, deps = {}) {
|
|
|
112
127
|
)(sessionId);
|
|
113
128
|
return {
|
|
114
129
|
schema: SESSION_EXECUTION_LOCATION_AUTHORITY_SCHEMA,
|
|
115
|
-
authority: "verified-session-start",
|
|
130
|
+
authority: authority.authority || "verified-session-start",
|
|
116
131
|
sessionId: authority.sessionId,
|
|
117
132
|
headHash: authority.headHash,
|
|
118
133
|
eventCount: authority.eventCount,
|
|
134
|
+
bindingEventHash: authority.bindingEventHash ?? null,
|
|
135
|
+
bindingEventCount: authority.bindingEventCount ?? null,
|
|
136
|
+
locationHandoff: authority.locationHandoff ?? null,
|
|
119
137
|
binding: authority.binding,
|
|
120
138
|
};
|
|
121
139
|
}
|
|
@@ -156,6 +174,146 @@ export function projectExecutionLocationHandoff(
|
|
|
156
174
|
};
|
|
157
175
|
}
|
|
158
176
|
|
|
177
|
+
export function projectExecutionLocationTargetAttestation(
|
|
178
|
+
sessionId,
|
|
179
|
+
target,
|
|
180
|
+
factsPath,
|
|
181
|
+
profilePath,
|
|
182
|
+
deps = {},
|
|
183
|
+
) {
|
|
184
|
+
const handoff = projectExecutionLocationHandoff(
|
|
185
|
+
sessionId,
|
|
186
|
+
target,
|
|
187
|
+
factsPath,
|
|
188
|
+
deps,
|
|
189
|
+
);
|
|
190
|
+
const profile = (
|
|
191
|
+
deps.readExecutionLocationProfile || readExecutionLocationProfile
|
|
192
|
+
)(profilePath, deps);
|
|
193
|
+
return (deps.attestExecutionLocationTarget || attestExecutionLocationTarget)(
|
|
194
|
+
{ handoff, profile },
|
|
195
|
+
deps,
|
|
196
|
+
);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
export function resumeSessionAtExecutionLocation(
|
|
200
|
+
sessionId,
|
|
201
|
+
target,
|
|
202
|
+
factsPath,
|
|
203
|
+
profilePath,
|
|
204
|
+
expectedTargetFactsDigest,
|
|
205
|
+
deps = {},
|
|
206
|
+
) {
|
|
207
|
+
const handoff = projectExecutionLocationHandoff(
|
|
208
|
+
sessionId,
|
|
209
|
+
target,
|
|
210
|
+
factsPath,
|
|
211
|
+
deps,
|
|
212
|
+
);
|
|
213
|
+
const profile = (
|
|
214
|
+
deps.readExecutionLocationProfile || readExecutionLocationProfile
|
|
215
|
+
)(profilePath, deps);
|
|
216
|
+
const transcriptBytes =
|
|
217
|
+
profile.sessionStore?.mode === "replicated"
|
|
218
|
+
? (deps.readVerifiedTranscriptBytes || readVerifiedTranscriptBytes)(
|
|
219
|
+
sessionId,
|
|
220
|
+
)
|
|
221
|
+
: null;
|
|
222
|
+
const readSourceAuthority = () => {
|
|
223
|
+
const authority = (
|
|
224
|
+
deps.getVerifiedSessionExecutionLocationAuthority ||
|
|
225
|
+
getVerifiedSessionExecutionLocationAuthority
|
|
226
|
+
)(sessionId);
|
|
227
|
+
return {
|
|
228
|
+
sessionId: authority.sessionId,
|
|
229
|
+
headHash: authority.headHash,
|
|
230
|
+
eventCount: authority.eventCount,
|
|
231
|
+
};
|
|
232
|
+
};
|
|
233
|
+
return (deps.resumeExecutionLocationTarget || resumeExecutionLocationTarget)(
|
|
234
|
+
{
|
|
235
|
+
handoff,
|
|
236
|
+
profile,
|
|
237
|
+
expectedTargetFactsDigest,
|
|
238
|
+
transcriptBytes,
|
|
239
|
+
readSourceAuthority,
|
|
240
|
+
},
|
|
241
|
+
deps,
|
|
242
|
+
);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
function readBoundedReplicaInput(deps = {}) {
|
|
246
|
+
if (process.stdin.isTTY) {
|
|
247
|
+
throw new Error("session replica bytes must be provided on stdin");
|
|
248
|
+
}
|
|
249
|
+
const runtimeFs = deps.fs || fs;
|
|
250
|
+
const chunks = [];
|
|
251
|
+
let total = 0;
|
|
252
|
+
while (true) {
|
|
253
|
+
const chunk = Buffer.allocUnsafe(
|
|
254
|
+
Math.min(64 * 1024, MAX_SESSION_REPLICA_BYTES + 1 - total),
|
|
255
|
+
);
|
|
256
|
+
const count = runtimeFs.readSync(0, chunk, 0, chunk.length, null);
|
|
257
|
+
if (count === 0) break;
|
|
258
|
+
total += count;
|
|
259
|
+
if (total > MAX_SESSION_REPLICA_BYTES) {
|
|
260
|
+
throw new Error(
|
|
261
|
+
`session replica exceeds ${MAX_SESSION_REPLICA_BYTES} bytes`,
|
|
262
|
+
);
|
|
263
|
+
}
|
|
264
|
+
chunks.push(chunk.subarray(0, count));
|
|
265
|
+
}
|
|
266
|
+
if (total === 0) throw new Error("session replica stdin is empty");
|
|
267
|
+
return Buffer.concat(chunks, total);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
export function receiveSessionReplica(
|
|
271
|
+
sessionId,
|
|
272
|
+
expectedHeadHash,
|
|
273
|
+
expectedEventCount,
|
|
274
|
+
expectedTranscriptDigest,
|
|
275
|
+
deps = {},
|
|
276
|
+
) {
|
|
277
|
+
const bytes = (deps.readSessionReplicaInput || readBoundedReplicaInput)(deps);
|
|
278
|
+
return (deps.installSessionReplica || installSessionReplica)(
|
|
279
|
+
sessionId,
|
|
280
|
+
bytes,
|
|
281
|
+
{
|
|
282
|
+
headHash: expectedHeadHash,
|
|
283
|
+
eventCount: Number(expectedEventCount),
|
|
284
|
+
transcriptDigest: expectedTranscriptDigest,
|
|
285
|
+
},
|
|
286
|
+
);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
export function prepareSessionReplicaHandoff(sessionId, options, deps = {}) {
|
|
290
|
+
const bytes = (deps.readSessionReplicaInput || readBoundedReplicaInput)(deps);
|
|
291
|
+
const binding = projectCurrentExecutionLocation({}, deps).binding;
|
|
292
|
+
const targetFactsDigest = computeExecutionLocationTargetFactsDigest(binding);
|
|
293
|
+
if (targetFactsDigest !== String(options.expectedTargetFactsDigest || "")) {
|
|
294
|
+
throw new Error("target facts changed before location handoff append");
|
|
295
|
+
}
|
|
296
|
+
return (
|
|
297
|
+
deps.installSessionReplicaWithLocationHandoff ||
|
|
298
|
+
installSessionReplicaWithLocationHandoff
|
|
299
|
+
)(
|
|
300
|
+
sessionId,
|
|
301
|
+
bytes,
|
|
302
|
+
{
|
|
303
|
+
headHash: options.expectedHeadHash,
|
|
304
|
+
eventCount: Number(options.expectedEventCount),
|
|
305
|
+
transcriptDigest: options.expectedTranscriptDigest,
|
|
306
|
+
},
|
|
307
|
+
{
|
|
308
|
+
profileDigest: options.profileDigest,
|
|
309
|
+
targetEvidenceId: options.targetEvidenceId,
|
|
310
|
+
targetFactsDigest,
|
|
311
|
+
attestationDigest: options.attestationDigest,
|
|
312
|
+
binding,
|
|
313
|
+
},
|
|
314
|
+
);
|
|
315
|
+
}
|
|
316
|
+
|
|
159
317
|
function renderBinding(binding) {
|
|
160
318
|
const git = binding.source.git;
|
|
161
319
|
return [
|
|
@@ -180,6 +338,30 @@ function writeProjection(projection, options = {}) {
|
|
|
180
338
|
process.stdout.write(`${JSON.stringify(projection, null, 2)}\n`);
|
|
181
339
|
return;
|
|
182
340
|
}
|
|
341
|
+
if (projection.schema === EXECUTION_LOCATION_TARGET_ATTESTATION_SCHEMA) {
|
|
342
|
+
process.stdout.write(
|
|
343
|
+
`ATTESTED ${projection.binding.location}\nFacts: ${projection.targetFactsDigest}\nAttestation: ${projection.attestationDigest}\nGaps: ${projection.gaps.join(", ")}\n`,
|
|
344
|
+
);
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
if (projection.schema === EXECUTION_LOCATION_TARGET_RESUME_SCHEMA) {
|
|
348
|
+
process.stdout.write(
|
|
349
|
+
`RESUME EXITED ${projection.target}\nReceipt: ${projection.receiptDigest}\nGaps: ${projection.gaps.join(", ")}\n`,
|
|
350
|
+
);
|
|
351
|
+
return;
|
|
352
|
+
}
|
|
353
|
+
if (projection.schema === "chainlesschain.session-replica-install/v1") {
|
|
354
|
+
process.stdout.write(
|
|
355
|
+
`${projection.installed ? "INSTALLED" : "ALREADY PRESENT"} ${projection.sessionId}\nReceipt: ${projection.receiptDigest}\n`,
|
|
356
|
+
);
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
if (projection.schema === SESSION_EXECUTION_LOCATION_HANDOFF_INSTALL_SCHEMA) {
|
|
360
|
+
process.stdout.write(
|
|
361
|
+
`HANDOFF ANCHORED ${projection.sessionId}\nTarget head: ${projection.targetHeadHash}\nReceipt: ${projection.receiptDigest}\n`,
|
|
362
|
+
);
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
183
365
|
if (projection.binding) {
|
|
184
366
|
process.stdout.write(`${renderBinding(projection.binding)}\n`);
|
|
185
367
|
return;
|
|
@@ -217,7 +399,7 @@ function runAction(action, options = {}) {
|
|
|
217
399
|
}
|
|
218
400
|
}
|
|
219
401
|
|
|
220
|
-
export function registerSessionLocationSubcommands(session) {
|
|
402
|
+
export function registerSessionLocationSubcommands(session, deps = {}) {
|
|
221
403
|
const location = session
|
|
222
404
|
.command("location")
|
|
223
405
|
.description(
|
|
@@ -230,7 +412,7 @@ export function registerSessionLocationSubcommands(session) {
|
|
|
230
412
|
.option("--json", "Machine-readable JSON output")
|
|
231
413
|
.action((options) => {
|
|
232
414
|
process.exitCode = runAction(
|
|
233
|
-
() => projectCurrentExecutionLocation({},
|
|
415
|
+
() => projectCurrentExecutionLocation({}, deps),
|
|
234
416
|
options,
|
|
235
417
|
);
|
|
236
418
|
});
|
|
@@ -241,7 +423,7 @@ export function registerSessionLocationSubcommands(session) {
|
|
|
241
423
|
.option("--json", "Machine-readable JSON output")
|
|
242
424
|
.action((id, options) => {
|
|
243
425
|
process.exitCode = runAction(
|
|
244
|
-
() => projectSessionExecutionLocation(id),
|
|
426
|
+
() => projectSessionExecutionLocation(id, deps),
|
|
245
427
|
options,
|
|
246
428
|
);
|
|
247
429
|
});
|
|
@@ -254,7 +436,7 @@ export function registerSessionLocationSubcommands(session) {
|
|
|
254
436
|
.option("--json", "Machine-readable JSON output")
|
|
255
437
|
.action((options) => {
|
|
256
438
|
process.exitCode = runAction(
|
|
257
|
-
() => projectExecutionLocationComparison({},
|
|
439
|
+
() => projectExecutionLocationComparison({}, deps),
|
|
258
440
|
options,
|
|
259
441
|
);
|
|
260
442
|
});
|
|
@@ -269,7 +451,136 @@ export function registerSessionLocationSubcommands(session) {
|
|
|
269
451
|
.option("--json", "Machine-readable JSON output")
|
|
270
452
|
.action((id, target, options) => {
|
|
271
453
|
process.exitCode = runAction(
|
|
272
|
-
() => projectExecutionLocationHandoff(id, target, options.facts),
|
|
454
|
+
() => projectExecutionLocationHandoff(id, target, options.facts, deps),
|
|
455
|
+
options,
|
|
456
|
+
);
|
|
457
|
+
});
|
|
458
|
+
|
|
459
|
+
location
|
|
460
|
+
.command("attest <id> <target>")
|
|
461
|
+
.description(
|
|
462
|
+
"Invoke a fixed target-side probe and bind observed host facts to a handoff",
|
|
463
|
+
)
|
|
464
|
+
.requiredOption(
|
|
465
|
+
"--facts <path>",
|
|
466
|
+
"Versioned Git/summary/artifact/permission/target evidence JSON",
|
|
467
|
+
)
|
|
468
|
+
.requiredOption(
|
|
469
|
+
"--profile <path>",
|
|
470
|
+
"Secret-free WSL/SSH/Container target profile JSON",
|
|
471
|
+
)
|
|
472
|
+
.option("--json", "Machine-readable JSON output")
|
|
473
|
+
.action((id, target, options) => {
|
|
474
|
+
process.exitCode = runAction(
|
|
475
|
+
() =>
|
|
476
|
+
projectExecutionLocationTargetAttestation(
|
|
477
|
+
id,
|
|
478
|
+
target,
|
|
479
|
+
options.facts,
|
|
480
|
+
options.profile,
|
|
481
|
+
deps,
|
|
482
|
+
),
|
|
483
|
+
options,
|
|
484
|
+
);
|
|
485
|
+
});
|
|
486
|
+
|
|
487
|
+
location
|
|
488
|
+
.command("receive <id>")
|
|
489
|
+
.description("Install an exact verified session replica from bounded stdin")
|
|
490
|
+
.requiredOption(
|
|
491
|
+
"--expected-head-hash <sha256>",
|
|
492
|
+
"Exact unprefixed transcript head hash",
|
|
493
|
+
)
|
|
494
|
+
.requiredOption(
|
|
495
|
+
"--expected-event-count <count>",
|
|
496
|
+
"Exact transcript event count",
|
|
497
|
+
)
|
|
498
|
+
.requiredOption(
|
|
499
|
+
"--expected-transcript-digest <sha256>",
|
|
500
|
+
"Exact SHA-256 digest of stdin bytes",
|
|
501
|
+
)
|
|
502
|
+
.option("--json", "Machine-readable JSON receipt")
|
|
503
|
+
.action((id, options) => {
|
|
504
|
+
process.exitCode = runAction(
|
|
505
|
+
() =>
|
|
506
|
+
receiveSessionReplica(
|
|
507
|
+
id,
|
|
508
|
+
options.expectedHeadHash,
|
|
509
|
+
options.expectedEventCount,
|
|
510
|
+
options.expectedTranscriptDigest,
|
|
511
|
+
deps,
|
|
512
|
+
),
|
|
513
|
+
options,
|
|
514
|
+
);
|
|
515
|
+
});
|
|
516
|
+
|
|
517
|
+
location
|
|
518
|
+
.command("prepare <id>")
|
|
519
|
+
.description(
|
|
520
|
+
"Install an exact replica and append a canonical target-location handoff",
|
|
521
|
+
)
|
|
522
|
+
.requiredOption(
|
|
523
|
+
"--expected-head-hash <sha256>",
|
|
524
|
+
"Exact unprefixed source transcript head hash",
|
|
525
|
+
)
|
|
526
|
+
.requiredOption(
|
|
527
|
+
"--expected-event-count <count>",
|
|
528
|
+
"Exact source transcript event count",
|
|
529
|
+
)
|
|
530
|
+
.requiredOption(
|
|
531
|
+
"--expected-transcript-digest <sha256>",
|
|
532
|
+
"Exact SHA-256 digest of stdin bytes",
|
|
533
|
+
)
|
|
534
|
+
.requiredOption(
|
|
535
|
+
"--expected-target-facts-digest <sha256>",
|
|
536
|
+
"Stable target facts digest from target attestation",
|
|
537
|
+
)
|
|
538
|
+
.requiredOption("--profile-digest <sha256>", "Exact target profile digest")
|
|
539
|
+
.requiredOption(
|
|
540
|
+
"--target-evidence-id <id>",
|
|
541
|
+
"Exact handoff target evidence id",
|
|
542
|
+
)
|
|
543
|
+
.requiredOption(
|
|
544
|
+
"--attestation-digest <sha256>",
|
|
545
|
+
"Exact target attestation digest",
|
|
546
|
+
)
|
|
547
|
+
.option("--json", "Machine-readable JSON receipt")
|
|
548
|
+
.action((id, options) => {
|
|
549
|
+
process.exitCode = runAction(
|
|
550
|
+
() => prepareSessionReplicaHandoff(id, options, deps),
|
|
551
|
+
options,
|
|
552
|
+
);
|
|
553
|
+
});
|
|
554
|
+
|
|
555
|
+
location
|
|
556
|
+
.command("resume <id> <target>")
|
|
557
|
+
.description(
|
|
558
|
+
"Re-attest a target, verify its canonical session replica, and resume there",
|
|
559
|
+
)
|
|
560
|
+
.requiredOption(
|
|
561
|
+
"--facts <path>",
|
|
562
|
+
"Versioned Git/summary/artifact/permission/target evidence JSON",
|
|
563
|
+
)
|
|
564
|
+
.requiredOption(
|
|
565
|
+
"--profile <path>",
|
|
566
|
+
"Secret-free WSL/SSH/Container target profile JSON",
|
|
567
|
+
)
|
|
568
|
+
.requiredOption(
|
|
569
|
+
"--expected-target-facts-digest <sha256>",
|
|
570
|
+
"Exact stable target facts digest from session location attest",
|
|
571
|
+
)
|
|
572
|
+
.option("--json", "Machine-readable JSON receipt after target exit")
|
|
573
|
+
.action((id, target, options) => {
|
|
574
|
+
process.exitCode = runAction(
|
|
575
|
+
() =>
|
|
576
|
+
resumeSessionAtExecutionLocation(
|
|
577
|
+
id,
|
|
578
|
+
target,
|
|
579
|
+
options.facts,
|
|
580
|
+
options.profile,
|
|
581
|
+
options.expectedTargetFactsDigest,
|
|
582
|
+
deps,
|
|
583
|
+
),
|
|
273
584
|
options,
|
|
274
585
|
);
|
|
275
586
|
});
|
package/src/constants.js
CHANGED
|
@@ -30,7 +30,7 @@ export const LLM_PROVIDERS = {
|
|
|
30
30
|
volcengine: {
|
|
31
31
|
name: "Volcengine (火山引擎/豆包)",
|
|
32
32
|
defaultBaseUrl: "https://ark.cn-beijing.volces.com/api/v3",
|
|
33
|
-
defaultModel: "
|
|
33
|
+
defaultModel: "deepseek-v4-flash-260425",
|
|
34
34
|
requiresApiKey: true,
|
|
35
35
|
},
|
|
36
36
|
openai: {
|
|
@@ -144,7 +144,7 @@ export const DEFAULT_CONFIG = {
|
|
|
144
144
|
provider: "volcengine",
|
|
145
145
|
apiKey: null,
|
|
146
146
|
baseUrl: "https://ark.cn-beijing.volces.com/api/v3",
|
|
147
|
-
model: "
|
|
147
|
+
model: "deepseek-v4-flash-260425",
|
|
148
148
|
// When true, `cc ask` (provider=ollama only) overrides baseUrl to point at
|
|
149
149
|
// the Android LocalLlmServer (127.0.0.1:18484). User opt-in toggle:
|
|
150
150
|
// cc config set llm.preferAndroidLocal true
|
package/src/data/changelog.json
CHANGED
|
@@ -1,16 +1,42 @@
|
|
|
1
1
|
{
|
|
2
2
|
"source": "CHANGELOG.md",
|
|
3
3
|
"releases": [
|
|
4
|
+
{
|
|
5
|
+
"productVersion": null,
|
|
6
|
+
"cliVersion": "0.165.2",
|
|
7
|
+
"cliVersions": ["0.165.1", "0.165.2"],
|
|
8
|
+
"date": "2026-08-18",
|
|
9
|
+
"title": "",
|
|
10
|
+
"sections": [
|
|
11
|
+
{
|
|
12
|
+
"heading": "Fixed — cc CLI 0.165.2: governed plugins and keeper handoff reliability",
|
|
13
|
+
"body": "> `chainlesschain` **0.165.1 → 0.165.2** (candidate; not yet published,\n> 2026-08-18).\n> CLI-only candidate; `@chainlesschain/personal-data-hub` remains **0.4.58**\n> and `@chainlesschain/agent-sdk` remains **0.1.7**.\n\n- **Governed plugin transactions and provenance**: marketplace payload,\n activation, install, update, transaction recovery, and provenance decisions\n bind immutable source identities and digests. Registry cache entries are\n content-addressed, while corrupt, stale, or mismatched recovery evidence\n continues to fail closed.\n- **Strict plugin execution boundaries**: the remaining live plugin fixtures\n now execute in the strict Linux sandbox, MCP security soak provisions its\n required Bubblewrap boundary explicitly, and release fixtures exercise the\n production activation path instead of accepting inactive coverage.\n- **Durable workflow authority**: provider requests and settlements, nested and\n parallel tool effects, child and descendant calls, and timeout outcomes gain\n durable identity-bound receipts so retries cannot silently reuse ambiguous\n execution authority.\n- **Background keeper lock handoff**: an owner that durably publishes its exact\n release marker treats the marker as the logical handoff even when another\n contender wins physical cleanup. Wrong, corrupt, or active foreign claimants\n remain rejected, and POSIX/Windows process identity and cleanup races retain\n bounded fail-closed handling.\n- **Scheduler campaign continuity**: scheduled long-soak dispatches use a pinned\n campaign identity, refuse overlapping segments, and can auto-finalize only\n after the required cross-platform evidence window is complete.\n- **Cross-platform release stability**: generated command help stays in sync;\n POSIX fsync-failure fixtures match the actual read mode; registry cache tests\n follow immutable URL-plus-digest semantics; and macOS marketplace replay uses\n isolated local scope instead of leaking state through the runner user home.\n- **Release status**: immutable tag, final source SHA, workflow run IDs, npm\n provenance, package digests, and registry readback remain intentionally\n absent until the final `0.165.2` merge SHA passes complete `CLI CI` and\n `CLI Strict Sandbox` matrices on Linux, Windows, and macOS, followed by the\n dedicated npm release and independent public readback workflows. The active\n two-hour Keeper/reliability runs and the 72-hour scheduler campaign are not\n claimed as completed release evidence here."
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"productVersion": null,
|
|
19
|
+
"cliVersion": "0.165.1",
|
|
20
|
+
"cliVersions": ["0.164.0", "0.165.1"],
|
|
21
|
+
"date": "2026-08-17",
|
|
22
|
+
"title": "",
|
|
23
|
+
"sections": [
|
|
24
|
+
{
|
|
25
|
+
"heading": "Added — cc CLI 0.165.1: runtime admission, remote authority, and background containment",
|
|
26
|
+
"body": "> `chainlesschain` **0.164.0 → 0.165.1** (published from exact SHA\n> `1a10ed7c8fd14d12f7760e948ff8efe36c766602`, 2026-08-17).\n> CLI release includes `@chainlesschain/personal-data-hub` **0.4.58**;\n> `@chainlesschain/agent-sdk` remains **0.1.7**.\n\n- **Dynamic workflow run admission**: Cowork workflow execution revalidates the\n immutable definition digest, execution-authority session, permissions,\n sandbox, scale, and cost gates when a run starts instead of treating an\n earlier preflight as continuing authority.\n- **Durable remote authority**: CLI-hosted approval, relay membership, and\n reconnect reconciliation bind responses and commits to durable membership\n epochs. Stale, revoked, mismatched, or unavailable authority fails closed.\n- **Canonical execution boundaries**: background `run_shell`, plugin-bin, and\n delivery paths validate canonical workspace and configured repository\n authority before executing or pushing. Linux child descriptors not declared\n by the execution contract are closed before launch.\n- **Background keeper containment**: supervisor state locks publish ownership\n atomically, distinguish zombies and reused PIDs, preserve POSIX process-group\n cleanup, contain released turns after Worker loss, and require durable cleanup\n evidence before retiring worktrees. POSIX socket namespaces and Windows exit\n settlement are bounded for hosted and local environments.\n- **Cross-platform release evidence**: CLI workflows install the candidate's\n dependency closure, bind reusable jobs to the exact source SHA, keep each\n platform's evidence isolated, and retain bounded diagnostics for transient\n process-identity and cleanup races.\n- **Dependency security closure**: the CLI requires the patched `js-yaml`\n 3.15.1 line, while Personal Data Hub 0.4.58 advances its bounded ZIP adapter\n to `adm-zip` 0.6.0 so a crafted archive cannot trigger the disclosed 4 GB\n allocation path before adapter-level entry validation.\n- **Release boundary**: the separate plugin marketplace payload/activation\n hardening later passed its own exact-head gates at `89c498cc46` and merged\n through PR #215 (`089336992d`). It remains intentionally excluded from this\n immutable tarball and is tracked as a post-`0.165.1` source increment.\n- **Release packaging recovery**: immutable tag `v-npm-0-165-0` stopped before\n any registry write because its SBOM resolver tried to fetch the coordinated\n PDH 0.4.58 candidate before that package could be published. The 0.165.1\n workflow resolves the SBOM from exact-SHA internal package tarballs instead.\n- **Published release evidence**: immutable tag `v-npm-0-165-1` resolves to\n exact source commit `1a10ed7c8fd14d12f7760e948ff8efe36c766602`.\n Its Linux, Windows, and macOS `CLI CI` (`32038591204`) and\n `CLI Strict Sandbox` (`32038590960`) matrices passed; the dedicated npm\n release (`32038590940`) and independent public readback (`32039659372`)\n succeeded. npm reports `latest=0.165.1`; the public tarball SHA-1 is\n `51ce645bebbe63ae168386cb8b6122a67c7d0813` and SHA-256 is\n `5806d34b6659dcc632dad31db3acdc2f4fa07fb924b7d93de1d22637a3186241`."
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
},
|
|
4
30
|
{
|
|
5
31
|
"productVersion": null,
|
|
6
32
|
"cliVersion": "0.164.0",
|
|
7
33
|
"cliVersions": ["0.163.8", "0.164.0"],
|
|
8
|
-
"date": "2026-08-
|
|
34
|
+
"date": "2026-08-16",
|
|
9
35
|
"title": "",
|
|
10
36
|
"sections": [
|
|
11
37
|
{
|
|
12
38
|
"heading": "Added — cc CLI 0.164.0: governed marketplace, execution authority, and native isolation hardening",
|
|
13
|
-
"body": "> `chainlesschain` **0.163.8 → 0.164.0** (
|
|
39
|
+
"body": "> `chainlesschain` **0.163.8 → 0.164.0** (published from exact SHA\n> `313dec85cffa09dbb183be17d2b6597e303bed5f`, 2026-08-16).\n> CLI-only release; `@chainlesschain/personal-data-hub` remains **0.4.57**\n> and `@chainlesschain/agent-sdk` remains **0.1.7**.\n\n- **Native clipboard images**: `/paste-image` can attach bounded PNG, JPEG,\n GIF, and WebP clipboard payloads to the next vision turn. Windows, macOS,\n Wayland, and X11 host adapters use literal arguments, private temporary\n files, signature checks, byte/count limits, and the Process Broker boundary.\n- **Scoped execution and context authority**: runtime permissions now expose\n exact side-effect explanations and scoped decisions, while session execution\n locations, IDE context-center evidence, prompt interactions, and durable\n workflow definitions carry versioned identities instead of ambient context.\n- **Governed plugin marketplace**: catalog, multi-registry candidate selection,\n install authority, update-impact review, artifact byte readback, and remote\n artifact verification bind publisher, digest, signature, source, policy, and\n approval evidence before plugin installation or update.\n- **Background keeper containment**: an independent keeper records Worker and\n descendant PIDs, retires interrupted turns under bounded Windows identity and\n cleanup budgets, and emits strict formal/smoke evidence contracts. The local\n real-spawn regression is green; the three-platform formal keeper aggregate is\n still required before P1-2 can be marked complete.\n- **MCP capsule boundary evidence**: materialized capsules bind the exact Node\n builtin capability set and OS execution-context requirements. Formal evidence\n now hashes and reparses each live result and schedules three independent\n fresh-isolate probes per platform across a two-hour span; smoke evidence is\n explicitly non-qualifying.\n- **Session and remote-approval hardening**: canonical session persistence gains\n additional crash and anti-rollback checks. Client-hosted remote approval uses\n durable same-machine membership epochs and fails closed on stale, revoked, or\n unavailable authority. Signed coordinator/host lease modules are included as\n a foundation only; they are not yet wired as a complete cross-host dispatch\n fence and do not claim distributed consensus or revoke closure.\n- **Linux dynamic-native isolation candidate**: strict Linux native execution\n recursively attests the ELF startup graph, snapshots caller-owned runtime and\n plugin bytes, exposes only a read-only descriptor-bound namespace, and blocks\n loader-input acquisition and nested mount namespaces with a dynamic-only\n seccomp profile. The typed claim is limited to pathname-visible loader input;\n broad `sharedLibraryClosure` remains false, JIT/custom loaders are excluded,\n and packed Linux runtimes fail closed until separately supported.\n- **macOS signed launcher candidate**: a fixed signed/root helper contract can\n copy and hash runtime and entry descriptors into root-protected snapshots,\n gate entry until the runtime pathname is removed, supervise the target, and\n fail closed when ownership, receipt, protocol, or signing evidence differs.\n It remains disabled until the protected x64/arm64 workflow proves Developer\n ID signing, notarization, root package installation, and the full live race\n matrix; it does not claim shared-library closure.\n- **Compatibility and reliability boundary**: reaching the documented\n `0.164.0` removal floor does not replace representative telemetry. All 25\n compatibility aliases remain retained because approved cohort export,\n three-platform reporting coverage, accepted points, and per-command usage are\n still absent. The scheduler campaign remains incomplete, and the uncommitted\n remote `run_shell` lease-consumption vertical is excluded after its expanded\n parallel matrix did not finish fully green.\n- **Release authority hardening**: manual npm workflow runs are dry-run only;\n production packaging and publishing require an immutable `v-npm-*` tag-push\n event. Operator-controlled version text is no longer interpolated into shell\n scripts, release Actions are commit-pinned, and independent readback validates\n a canonical numeric SemVer before resolving the tag and attested artifact.\n- **Published release evidence**: immutable tag `v-npm-0-164-0` resolves to\n exact source commit `313dec85cffa09dbb183be17d2b6597e303bed5f`. Its\n Linux, Windows, and macOS `CLI CI` (`31912844177`) and\n `CLI Strict Sandbox` (`31912844034`) matrices passed; the dedicated npm\n release (`31912844032`) and independent public readback (`31913903124`)\n succeeded. npm reports `latest=0.164.0`; the public tarball SHA-1 is\n `2d13836305c6841b7fe5bcd059bc8ef25127fc3d` and SHA-256 is\n `4d7f36f11bd2bfc1b85eee87392b74bd948e7cc33698cd35c87bff72fb3b4c16`."
|
|
14
40
|
}
|
|
15
41
|
]
|
|
16
42
|
},
|