chainlesschain 0.165.6 → 0.165.8
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 +2 -1
- package/src/assets/web-panel/assets/{AIOps-vfoDb6HZ.js → AIOps-B3gWmXjo.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-Cm5f7p93.js → ActionButton-G9pdT-0e.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-yRuvgWxa.js → Analytics-Ca30J7m2.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-BROsC4h1.js → AppLayout-BtVTm8PU.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-CimHApb1.js → Artifacts-BhViNa6u.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-DI8kr8zI.js → Audit-DhKq-FnY.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-DSLzKy-n.js → BackgroundAgents-BL0SVbnE.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-DkH_n2r1.js → Backup-BWkblnFi.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-CKSrUoRA.js → BaseInput-ClaRNrF8.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-ClwfMXUS.js → Chat-sZE2Z77o.js} +4 -4
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-CjMaqfL7.js → ChatBubbleRenderer-BAfKOnRe.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-BYTehcQG.js → Checkbox-Cvhay5WM.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-B8AMcp6J.js → Codegen-BpejL-4N.js} +1 -1
- package/src/assets/web-panel/assets/{Col-BNSogPo3.js → Col-g2Ki6g_1.js} +1 -1
- package/src/assets/web-panel/assets/{Community-JxPvGb8O.js → Community-D2xKbNo9.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DF7bFAgE.js → Compact-DbL1Pds3.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-Bvhqnwrq.js → Compliance-DGtZCV4c.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-BDS0CJvM.js → Cowork-4kQpoNsI.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-DqvRfxoQ.js → Cron-BxTYXXAN.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-CDcIvnqS.js → Crosschain-k0J0LT2N.js} +1 -1
- package/src/assets/web-panel/assets/{DID-D7jaUxU3.js → DID-BaqhoPgN.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-B5A18wEV.js → Dashboard-T4RVPIM1.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-_6IVkGag.js → Dropdown-DszOToWq.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-C9PeiKCG.js → EmailListRenderer-C9KJU7HF.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-DXjuEHrX.js → FamilyGuardDashboard-Cmr0JnsA.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-B4IAR9zv.js → Federation-BI-_2xZX.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CxQeSNx1.js → FormItemContext-DsnDEPsl.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-B8GS-Y3N.js → GenericCardRenderer-BLncAKKK.js} +1 -1
- package/src/assets/web-panel/assets/{Git-BS8SouUX.js → Git-BPQhGXDn.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-Dq9aYb5Q.js → Governance-CyElbUQW.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-BrCEe9AJ.js → Inference-CcSntBQD.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DybOpiY2.js → KnowledgeGraph-p6e7HZ2r.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-DBpzbRfx.js → Logs-CNEtr-wz.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-Bj9xI0YH.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-Cc7CCSCu.js → Marketplace-Dd2notAJ.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DFaIhOfu.js → McpTools-BBsN2CSW.js} +4 -4
- package/src/assets/web-panel/assets/{Memory-KCqlp9ol.js → Memory-Dg2uTvwx.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-Bys84ySN.js → MobileBridge-r1YMRiJV.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-B-6qU-je.js → MobileProjects-C-89kSm4.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BgY-fvCq.js → Mtc-CrPZcVgf.js} +5 -5
- package/src/assets/web-panel/assets/{MtcAudit-B8pCmqQJ.js → MtcAudit-sxi7hqJb.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-BbOmYutA.js → Multisig-CAgOMfF1.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-BocLQz_M.js → NLProgramming-DafaPts3.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-CSwbxEop.js → Notes-CJM-xUW_.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-CqFNSYG3.js → NotificationSettings-L0ZjfAh_.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-C6gMfAk7.js → OrderTableRenderer-BB1CvCK0.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-QrDXVdMJ.js → Organization-DeLtgAD8.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-Cxntotjt.js → Overflow-CKC2b10z.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CIdBOwNq.js → P2P-eyf2rzY1.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-CT5aP8rD.js → PdhVaultBrowser-5upNIOW8.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-DH7OM8XU.js → Permissions-B8p3W6JK.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CnJqbWce.js → PersonalDataHub-BnRMxTq3.js} +5 -5
- package/src/assets/web-panel/assets/{Pipeline-5C3HG1kH.js → Pipeline-DjCNI1li.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-B4yIp7xK.js → Privacy-u6gXLbWT.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BMvt-2M0.js → ProjectInit-BZAw4tkM.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CvSTEMRG.js → ProjectSettings-B1Tr72q7.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-BKBJxEek.js → Projects-DO7HFuBQ.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-BdwUqFWN.js → Providers-BjCztyhj.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-DtnCKlTm.js → QrScannerModal-ZWyCUbR1.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-sTbgwyNr.js → QuickAsk-DhDjeW4G.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-Bzr14gSb.js → Recommend-R_CN2MuU.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-C_TF5IaJ.js → RemoteSession-uxFcujeu.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-GCAM4H2K.js → Reputation-DX8D7rks.js} +1 -1
- package/src/assets/web-panel/assets/{Row-Dir0r6OQ.js → Row-BYahQILD.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CpGnlecX.js → RssFeed-CUSQ2tm-.js} +3 -3
- package/src/assets/web-panel/assets/{Search-DMMamC6u.js → Search-CnN_S8Cs.js} +1 -1
- package/src/assets/web-panel/assets/{Security-yqay5yG-.js → Security-DcZlh-O4.js} +4 -4
- package/src/assets/web-panel/assets/{Services-C5i2wh9G.js → Services-ZhBOjzIX.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-vUqk35yj.js → Skeleton-D5Qnq_lI.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-DzcSkhot.js → Skills-BC9cZ3Be.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-CB6qbYNr.js → Sla-DauJ3E8_.js} +1 -1
- package/src/assets/web-panel/assets/SpeechSettings-DbNeZ_fh.js +1 -0
- package/src/assets/web-panel/assets/{SyncSettings-D-RrsxTJ.js → SyncSettings-DUvJbSct.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-DFxdOJiq.js → Tasks-BXa-5noQ.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-SKAob_Aq.js → Templates-JxaiUt_3.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BPfsfHQ-.js → Tenant-BW4ERQN8.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-8iw7FpUf.js → Terminal-DltUbdtv.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-C4Gjj5Su.js → TimelineRenderer-CMoZz0Tc.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-COYhN18e.js → Tokens-D_VEV60K.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-B-JzXcf6.js → Trigger-CCXTCs0R.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BJ5bg0nI.js → Trust-lkGRIPcG.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-BG_ByRMf.js → UkeySign-BfGeQ9HX.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-B3kOnSiU.js → VideoEditing-BEC7pYvc.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-CcoGFnK7.js → Wallet-BZdG24o0.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DdT8vRC_.js → WebAuthn-yoEddedp.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-CZu3M9N8.js → WorkflowEditor-BXZEprOW.js} +1 -1
- package/src/assets/web-panel/assets/{chat-DxJt3Qba.js → chat-gg0bzZal.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DdYfwJaB.js → colors-DjRVRuin.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BG3SUzwj.js → compact-item-su-dieAc.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-By51z2-1.js → createContext-Ci3S8oKF.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-CxbFX9uH.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-B0apZ3KJ.js → hasIn-D8F10heH.js} +1 -1
- package/src/assets/web-panel/assets/{index-DE76D-kA.js → index-11wtYQiF.js} +1 -1
- package/src/assets/web-panel/assets/{index-BkvcEo4p.js → index-1IgxgALJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bos5_aMV.js → index-1agckWSq.js} +1 -1
- package/src/assets/web-panel/assets/{index-BfWYsB9t.js → index-5JqhujnR.js} +1 -1
- package/src/assets/web-panel/assets/{index-CAhHirVH.js → index-6Tniqk1s.js} +1 -1
- package/src/assets/web-panel/assets/{index-BYINoRLK.js → index-8Z-8BIlN.js} +1 -1
- package/src/assets/web-panel/assets/{index-B5rLiEo0.js → index-BCI5v0yB.js} +1 -1
- package/src/assets/web-panel/assets/{index-BZ_0qm4g.js → index-BDJntYmJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CWEuZWCK.js → index-BGzixOGZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BLIbGOLX.js → index-BMMOVoLD.js} +1 -1
- package/src/assets/web-panel/assets/{index-bP_VlDb4.js → index-BTFpdBtt.js} +1 -1
- package/src/assets/web-panel/assets/{index-B3rWuPMW.js → index-Ba_HyPnE.js} +1 -1
- package/src/assets/web-panel/assets/{index-Da_WBdLX.js → index-BbF1IHof.js} +1 -1
- package/src/assets/web-panel/assets/{index-RD6O-0C6.js → index-BgT9su_e.js} +1 -1
- package/src/assets/web-panel/assets/{index-CpjZhgNd.js → index-BzPB6kGZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Q2SCX-MI.js → index-C6ygzplr.js} +1 -1
- package/src/assets/web-panel/assets/{index-BIrJfqO4.js → index-CC3ZDjzY.js} +1 -1
- package/src/assets/web-panel/assets/{index-BBPf3TpM.js → index-CEmXRhAE.js} +1 -1
- package/src/assets/web-panel/assets/index-CJGOlduY.js +1 -0
- package/src/assets/web-panel/assets/{index-Cp6e-hGw.js → index-CMPqd5Cv.js} +1 -1
- package/src/assets/web-panel/assets/{index-kf57LJ93.js → index-COWd8uGx.js} +1 -1
- package/src/assets/web-panel/assets/{index-CW93tZDv.js → index-CPIYSp4H.js} +1 -1
- package/src/assets/web-panel/assets/{index-BewKYrX9.js → index-CR0h6seT.js} +1 -1
- package/src/assets/web-panel/assets/{index-p1_8SbI1.js → index-CUmDhC4j.js} +1 -1
- package/src/assets/web-panel/assets/index-CkBCN5yH.js +1 -0
- package/src/assets/web-panel/assets/{index-ZxtP8jG7.js → index-CusgZPtc.js} +1 -1
- package/src/assets/web-panel/assets/{index-BWF8_mkx.js → index-DBAETXft.js} +1 -1
- package/src/assets/web-panel/assets/{index-BP94CrBV.js → index-DIJ2qFOC.js} +1 -1
- package/src/assets/web-panel/assets/{index-CNIxXMmN.js → index-Dbq4NMET.js} +1 -1
- package/src/assets/web-panel/assets/{index-CzmQElZy.js → index-DkMEF5VT.js} +1 -1
- package/src/assets/web-panel/assets/{index-ZFbps9po.js → index-DkfQR3hM.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dz49VOyQ.js → index-DnLucOn9.js} +1 -1
- package/src/assets/web-panel/assets/{index-oxRrmFO9.js → index-DugB_aKa.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bissefox.js → index-DyLUarhZ.js} +3 -3
- package/src/assets/web-panel/assets/{index-DaIz0NAW.js → index-T6_6ygJZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-SQqOlR3d.js → index-Tu8eWqh-.js} +1 -1
- package/src/assets/web-panel/assets/{index-DCn8IcxV.js → index-W7XUgdVL.js} +1 -1
- package/src/assets/web-panel/assets/{index-3jWkIu5j.js → index-dHZinfko.js} +1 -1
- package/src/assets/web-panel/assets/{index-C1C9i79A.js → index-jyNgp5FI.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-BWJktcg8.js → initDefaultProps-Cv4p8e4w.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BEXBzUFV.js → motion-B8EwmMOw.js} +1 -1
- package/src/assets/web-panel/assets/{move-BUKwn2sx.js → move-B8R9F8TK.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-FTI7btqQ.js → mtc-parser-DoFYz5Bp.js} +1 -1
- package/src/assets/web-panel/assets/{omit-CsLtSPH3.js → omit-CHWYLBjI.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DWZxsT_S.js → pickAttrs-CXuPDO77.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-Bcfs43CX.js → placementArrow-BaAtUUon.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-a9bcC1p-.js → responsiveObserve-DCc4zcDD.js} +1 -1
- package/src/assets/web-panel/assets/{slide-BDTzgOXN.js → slide-B_lx89oZ.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-Iq1j_HUg.js → statusUtils-DE8DPmR0.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-DAZEYxeh.js → styleChecker-1ktXOsL_.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-DVkjyDrh.js → useFlexGapSupport-xH89-wjh.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-wXTpNTHt.js → useFs-DscvfW5p.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-CtQM_aZr.js → usePersonalDataHub-RdMKQta7.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-hjEoG85v.js → vnode-Z3wTni2T.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BHVpyKg_.js → zoom-B0iChCsm.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +3 -3
- package/src/commands/agent.js +91 -60
- package/src/commands/git.js +39 -0
- package/src/commands/plugin.js +17 -2
- package/src/commands/session-group.js +131 -0
- package/src/commands/session-location.js +48 -0
- package/src/commands/session.js +11 -0
- package/src/commands/sync-providers.js +4 -1
- package/src/commands/update.js +1 -0
- package/src/data/changelog.json +27 -1
- package/src/gateways/ws/ws-agent-handler.js +20 -12
- package/src/harness/jsonl-session-store.js +279 -37
- package/src/harness/mcp-client.js +701 -91
- package/src/harness/session-index.js +15 -4
- package/src/lib/agent-worktree.js +8 -1
- package/src/lib/auto-mode-safety-classifier.js +3 -17
- package/src/lib/background-agent-keeper-protocol.js +26 -6
- package/src/lib/background-agent-supervisor.js +17 -1
- package/src/lib/browser-evidence.js +1405 -0
- package/src/lib/chrome-connector.js +465 -79
- package/src/lib/claude-project-auto-memory.js +481 -0
- package/src/lib/claude-project-storage-layout.js +104 -0
- package/src/lib/cloud/cloud-client.js +40 -0
- package/src/lib/execution-location-local-supervisor.mjs +226 -0
- package/src/lib/execution-location-runner-lifecycle.js +991 -0
- package/src/lib/execution-location-target-preflight.js +333 -0
- package/src/lib/execution-location-target.js +783 -13
- package/src/lib/file-lines.js +6 -1
- package/src/lib/gateway-client-resilience.js +571 -0
- package/src/lib/gitlab-mr-worktree.js +176 -0
- package/src/lib/hooks-v2-producers.js +119 -15
- package/src/lib/hooks-v2-workspace-context.js +44 -1
- package/src/lib/host-resource-budget.js +295 -0
- package/src/lib/ide-context.js +15 -2
- package/src/lib/llm-config-defaults.js +43 -0
- package/src/lib/mcp-lifecycle-authority.js +887 -0
- package/src/lib/mcp-oauth.js +101 -20
- package/src/lib/mcp-tls.js +103 -3
- package/src/lib/paths.js +260 -32
- package/src/lib/permission-request.js +48 -0
- package/src/lib/plugin-runtime/bin.js +3 -1
- package/src/lib/plugin-runtime/hooks.js +3 -1
- package/src/lib/plugin-runtime/install.js +117 -1
- package/src/lib/plugin-runtime/lsp.js +4 -4
- package/src/lib/plugin-runtime/marketplace-archive-source.js +40 -5
- package/src/lib/plugin-runtime/marketplace-catalog.js +13 -2
- package/src/lib/plugin-runtime/marketplace-command-descriptor.js +343 -0
- package/src/lib/plugin-runtime/marketplace-command-source.js +580 -0
- package/src/lib/plugin-runtime/marketplace-source-adapter.js +33 -8
- package/src/lib/plugin-runtime/mcp.js +3 -1
- package/src/lib/plugin-runtime/monitors.js +3 -1
- package/src/lib/plugin-runtime/remote-source.js +151 -6
- package/src/lib/plugin-runtime/settings.js +3 -1
- package/src/lib/plugin-runtime/trust.js +274 -13
- package/src/lib/process-execution-broker/credential-agent.js +210 -41
- package/src/lib/process-execution-broker/index.js +15 -1
- package/src/lib/process-execution-broker/linux-cgroup-v2.js +391 -0
- package/src/lib/process-execution-broker/platform-sandbox.js +50 -28
- package/src/lib/project-mcp-trust.js +165 -10
- package/src/lib/resume-session.js +9 -6
- package/src/lib/session-core-singletons.js +26 -11
- package/src/lib/session-host-lease.js +52 -16
- package/src/lib/session-lifecycle-scope.js +153 -0
- package/src/lib/session-message-fabric.js +168 -21
- package/src/lib/session-projection.js +244 -4
- package/src/lib/session-store-guard.js +3 -1
- package/src/lib/session-workbench-store.js +466 -0
- package/src/lib/spellcheck.js +211 -0
- package/src/lib/sub-agent-context.js +9 -9
- package/src/lib/sync-cli-db.js +485 -129
- package/src/lib/sync-credentials.js +31 -20
- package/src/lib/web-fetch.js +112 -40
- package/src/lib/web-search.js +127 -61
- package/src/lib/workspace-trust.js +793 -0
- package/src/repl/agent-repl.js +124 -5
- package/src/repl/permission-prompt.js +10 -12
- package/src/runtime/agent-core.js +311 -18
- package/src/runtime/bootstrap.js +37 -13
- package/src/runtime/coding-agent-contract-shared.cjs +11 -4
- package/src/runtime/headless-runner.js +234 -36
- package/src/runtime/headless-stream.js +181 -6
- package/src/runtime/mcp-config.js +298 -8
- package/src/runtime/policies/agent-policy.js +8 -0
- package/src/runtime/status-diagnostics-lite.js +9 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-CFyt8iUd.js +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-BHUI7cox.js +0 -1
- package/src/assets/web-panel/assets/devWarning-DorRZcI9.js +0 -1
- package/src/assets/web-panel/assets/index-BETiL0a3.js +0 -1
- package/src/assets/web-panel/assets/index-BhAVHuW8.js +0 -1
package/src/commands/git.js
CHANGED
|
@@ -15,12 +15,51 @@ import {
|
|
|
15
15
|
gitInit,
|
|
16
16
|
isGitRepo,
|
|
17
17
|
} from "../lib/git-integration.js";
|
|
18
|
+
import {
|
|
19
|
+
parseGitLabMergeRequestReference,
|
|
20
|
+
renderGitLabMergeRequestFooter,
|
|
21
|
+
} from "../lib/gitlab-mr-worktree.js";
|
|
18
22
|
|
|
19
23
|
export function registerGitCommand(program) {
|
|
20
24
|
const git = program
|
|
21
25
|
.command("git")
|
|
22
26
|
.description("Git integration for knowledge base versioning");
|
|
23
27
|
|
|
28
|
+
git
|
|
29
|
+
.command("gitlab-mr <reference>")
|
|
30
|
+
.description("Render a local GitLab MR/worktree footer (no network I/O)")
|
|
31
|
+
.option("--worktree <path>", "Worktree path to include in the footer")
|
|
32
|
+
.option("--host <host>", "Default GitLab host for project!iid shorthand")
|
|
33
|
+
.option("--json", "Output the normalized local display model as JSON")
|
|
34
|
+
.action((reference, options) => {
|
|
35
|
+
try {
|
|
36
|
+
const mr = parseGitLabMergeRequestReference(reference, {
|
|
37
|
+
defaultHost: options.host,
|
|
38
|
+
});
|
|
39
|
+
if (options.json) {
|
|
40
|
+
console.log(
|
|
41
|
+
JSON.stringify(
|
|
42
|
+
{
|
|
43
|
+
...mr,
|
|
44
|
+
...(options.worktree ? { worktreePath: options.worktree } : {}),
|
|
45
|
+
},
|
|
46
|
+
null,
|
|
47
|
+
2,
|
|
48
|
+
),
|
|
49
|
+
);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
logger.log(
|
|
53
|
+
renderGitLabMergeRequestFooter(mr, {
|
|
54
|
+
worktreePath: options.worktree,
|
|
55
|
+
}),
|
|
56
|
+
);
|
|
57
|
+
} catch (error) {
|
|
58
|
+
logger.error(`GitLab MR footer failed: ${error.message}`);
|
|
59
|
+
process.exitCode = 1;
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
|
|
24
63
|
// git status
|
|
25
64
|
git
|
|
26
65
|
.command("status")
|
package/src/commands/plugin.js
CHANGED
|
@@ -282,6 +282,7 @@ async function buildRegistrySetSelection(
|
|
|
282
282
|
const resolvedToken = resolveRegistryToken(url, { token, config });
|
|
283
283
|
const resolved = await fetchRegistry(url, {
|
|
284
284
|
token: resolvedToken,
|
|
285
|
+
config,
|
|
285
286
|
managedPolicy,
|
|
286
287
|
allowInsecure,
|
|
287
288
|
offline,
|
|
@@ -408,13 +409,15 @@ async function materializeRegistrySelection(
|
|
|
408
409
|
inspected.ref !== (marketplacePreflight.package?.ref || null) ||
|
|
409
410
|
(inspected.sourceType === "archive" &&
|
|
410
411
|
inspected.archiveSpec.sha256 !==
|
|
411
|
-
marketplacePreflight.package?.archiveSha256)
|
|
412
|
+
marketplacePreflight.package?.archiveSha256) ||
|
|
413
|
+
(inspected.sourceType === "command" &&
|
|
414
|
+
inspected.commandSpec.mode !== marketplacePreflight.package?.mode)
|
|
412
415
|
) {
|
|
413
416
|
throw new Error(
|
|
414
417
|
"registry candidate preflight revision changed before source fetch",
|
|
415
418
|
);
|
|
416
419
|
}
|
|
417
|
-
if (resolved.sourceType
|
|
420
|
+
if (!["archive", "command"].includes(resolved.sourceType)) return resolved;
|
|
418
421
|
const config = await loadOptionalPluginConfig();
|
|
419
422
|
const materialized = await resolveRegistryEntrySource(url, resolved.entry, {
|
|
420
423
|
registryResolutionAuthority: resolved.registryResolutionAuthority,
|
|
@@ -447,6 +450,7 @@ function catalogAuthorityFromPreflight(
|
|
|
447
450
|
impact = null,
|
|
448
451
|
remoteArtifactEvidence = null,
|
|
449
452
|
archiveSource = null,
|
|
453
|
+
commandSource = null,
|
|
450
454
|
) {
|
|
451
455
|
return {
|
|
452
456
|
catalogDigest: preflight.catalogDigest,
|
|
@@ -501,6 +505,7 @@ function catalogAuthorityFromPreflight(
|
|
|
501
505
|
...(impact ? { updateImpactDigest: impact.impactDigest } : {}),
|
|
502
506
|
...(remoteArtifactEvidence ? { remoteArtifactEvidence } : {}),
|
|
503
507
|
...(archiveSource ? { archiveSource } : {}),
|
|
508
|
+
...(commandSource ? { commandSource } : {}),
|
|
504
509
|
};
|
|
505
510
|
}
|
|
506
511
|
|
|
@@ -1671,6 +1676,7 @@ export function registerPluginCommand(program) {
|
|
|
1671
1676
|
let remoteArtifactRequest = null;
|
|
1672
1677
|
let remoteArtifacts = null;
|
|
1673
1678
|
let archiveSourceAuthority = null;
|
|
1679
|
+
let commandSourceAuthority = null;
|
|
1674
1680
|
let registryResolutionAuthority = null;
|
|
1675
1681
|
const registryUrls = normalizeRegistryUrls(options.registry);
|
|
1676
1682
|
const { isRemoteSource, resolveRemoteSource } =
|
|
@@ -1808,6 +1814,7 @@ export function registerPluginCommand(program) {
|
|
|
1808
1814
|
);
|
|
1809
1815
|
installSource = resolved.source;
|
|
1810
1816
|
archiveSourceAuthority = resolved.archiveAuthority || null;
|
|
1817
|
+
commandSourceAuthority = resolved.commandAuthority || null;
|
|
1811
1818
|
registryResolutionAuthority =
|
|
1812
1819
|
resolved.registryResolutionAuthority || registryResolutionAuthority;
|
|
1813
1820
|
expectedIdentity = {
|
|
@@ -1838,6 +1845,7 @@ export function registerPluginCommand(program) {
|
|
|
1838
1845
|
marketplaceImpact,
|
|
1839
1846
|
null,
|
|
1840
1847
|
archiveSourceAuthority,
|
|
1848
|
+
commandSourceAuthority,
|
|
1841
1849
|
),
|
|
1842
1850
|
};
|
|
1843
1851
|
if (resolved.fromCache) {
|
|
@@ -1891,6 +1899,7 @@ export function registerPluginCommand(program) {
|
|
|
1891
1899
|
marketplaceImpact,
|
|
1892
1900
|
remoteArtifacts.authority,
|
|
1893
1901
|
archiveSourceAuthority,
|
|
1902
|
+
commandSourceAuthority,
|
|
1894
1903
|
);
|
|
1895
1904
|
}
|
|
1896
1905
|
}
|
|
@@ -2138,6 +2147,7 @@ export function registerPluginCommand(program) {
|
|
|
2138
2147
|
options.registry,
|
|
2139
2148
|
{
|
|
2140
2149
|
token,
|
|
2150
|
+
config,
|
|
2141
2151
|
allowInsecure: options.allowInsecureRegistry === true,
|
|
2142
2152
|
offline: options.offline === true,
|
|
2143
2153
|
expectedSha256: registryDigestPins.get(options.registry),
|
|
@@ -2279,6 +2289,7 @@ export function registerPluginCommand(program) {
|
|
|
2279
2289
|
});
|
|
2280
2290
|
const resolved = await fetchRegistry(url, {
|
|
2281
2291
|
token,
|
|
2292
|
+
config,
|
|
2282
2293
|
allowInsecure: options.allowInsecureRegistry === true,
|
|
2283
2294
|
offline: options.offline === true,
|
|
2284
2295
|
expectedSha256: registryDigestPins.get(url),
|
|
@@ -3433,6 +3444,7 @@ export function registerPluginCommand(program) {
|
|
|
3433
3444
|
let remoteArtifactRequest = null;
|
|
3434
3445
|
let remoteArtifacts = null;
|
|
3435
3446
|
let archiveSourceAuthority = null;
|
|
3447
|
+
let commandSourceAuthority = null;
|
|
3436
3448
|
let registryResolutionAuthority = null;
|
|
3437
3449
|
const registryUrls = normalizeRegistryUrls(options.registry);
|
|
3438
3450
|
const { isRemoteSource, resolveRemoteSource } =
|
|
@@ -3586,6 +3598,7 @@ export function registerPluginCommand(program) {
|
|
|
3586
3598
|
);
|
|
3587
3599
|
installSource = resolved.source;
|
|
3588
3600
|
archiveSourceAuthority = resolved.archiveAuthority || null;
|
|
3601
|
+
commandSourceAuthority = resolved.commandAuthority || null;
|
|
3589
3602
|
registryResolutionAuthority =
|
|
3590
3603
|
resolved.registryResolutionAuthority || registryResolutionAuthority;
|
|
3591
3604
|
expectedIdentity = {
|
|
@@ -3616,6 +3629,7 @@ export function registerPluginCommand(program) {
|
|
|
3616
3629
|
marketplaceImpact,
|
|
3617
3630
|
null,
|
|
3618
3631
|
archiveSourceAuthority,
|
|
3632
|
+
commandSourceAuthority,
|
|
3619
3633
|
),
|
|
3620
3634
|
};
|
|
3621
3635
|
if (resolved.fromCache && !options.json) {
|
|
@@ -3669,6 +3683,7 @@ export function registerPluginCommand(program) {
|
|
|
3669
3683
|
marketplaceImpact,
|
|
3670
3684
|
remoteArtifacts.authority,
|
|
3671
3685
|
archiveSourceAuthority,
|
|
3686
|
+
commandSourceAuthority,
|
|
3672
3687
|
);
|
|
3673
3688
|
}
|
|
3674
3689
|
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { logger } from "../lib/logger.js";
|
|
2
|
+
import { SessionWorkbenchStore } from "../lib/session-workbench-store.js";
|
|
3
|
+
|
|
4
|
+
function output(value, options) {
|
|
5
|
+
if (options.json) {
|
|
6
|
+
logger.log(JSON.stringify(value, null, 2));
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
logger.log(
|
|
10
|
+
`${value.items.length} groups; revision ${value.revision}; generation ${value.generation}`,
|
|
11
|
+
);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function store() {
|
|
15
|
+
return new SessionWorkbenchStore();
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function expected(options) {
|
|
19
|
+
return typeof options.expectedRevision === "string"
|
|
20
|
+
? options.expectedRevision.trim()
|
|
21
|
+
: "";
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function registerSessionGroupCommands(session) {
|
|
25
|
+
const group = session
|
|
26
|
+
.command("group")
|
|
27
|
+
.description("CLI-owned durable session groups and atomic batch moves");
|
|
28
|
+
|
|
29
|
+
group
|
|
30
|
+
.command("list")
|
|
31
|
+
.description("Read the current group revision and assignments")
|
|
32
|
+
.option("--json", "Output as JSON")
|
|
33
|
+
.action((options) => output(store().projection(), options));
|
|
34
|
+
|
|
35
|
+
group
|
|
36
|
+
.command("create <name>")
|
|
37
|
+
.description("Create a session group using exact revision CAS")
|
|
38
|
+
.requiredOption(
|
|
39
|
+
"--expected-revision <sha256>",
|
|
40
|
+
"Exact group revision rendered by session projection",
|
|
41
|
+
)
|
|
42
|
+
.option("--order <n>", "Insert at a zero-based group order")
|
|
43
|
+
.option("--json", "Output as JSON")
|
|
44
|
+
.action((name, options) =>
|
|
45
|
+
output(
|
|
46
|
+
store().createGroup({
|
|
47
|
+
name,
|
|
48
|
+
order: options.order == null ? null : Number(options.order),
|
|
49
|
+
expectedRevision: expected(options),
|
|
50
|
+
}),
|
|
51
|
+
options,
|
|
52
|
+
),
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
group
|
|
56
|
+
.command("rename <group-id> <name>")
|
|
57
|
+
.description("Rename a session group using exact revision CAS")
|
|
58
|
+
.requiredOption(
|
|
59
|
+
"--expected-revision <sha256>",
|
|
60
|
+
"Exact group revision rendered by session projection",
|
|
61
|
+
)
|
|
62
|
+
.option("--json", "Output as JSON")
|
|
63
|
+
.action((groupId, name, options) =>
|
|
64
|
+
output(
|
|
65
|
+
store().renameGroup({
|
|
66
|
+
groupId,
|
|
67
|
+
name,
|
|
68
|
+
expectedRevision: expected(options),
|
|
69
|
+
}),
|
|
70
|
+
options,
|
|
71
|
+
),
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
group
|
|
75
|
+
.command("delete <group-id>")
|
|
76
|
+
.description("Delete a group and atomically ungroup its sessions")
|
|
77
|
+
.requiredOption(
|
|
78
|
+
"--expected-revision <sha256>",
|
|
79
|
+
"Exact group revision rendered by session projection",
|
|
80
|
+
)
|
|
81
|
+
.option("--json", "Output as JSON")
|
|
82
|
+
.action((groupId, options) =>
|
|
83
|
+
output(
|
|
84
|
+
store().deleteGroup({
|
|
85
|
+
groupId,
|
|
86
|
+
expectedRevision: expected(options),
|
|
87
|
+
}),
|
|
88
|
+
options,
|
|
89
|
+
),
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
group
|
|
93
|
+
.command("order <group-id> <order>")
|
|
94
|
+
.description("Move a group to a zero-based order using exact revision CAS")
|
|
95
|
+
.requiredOption(
|
|
96
|
+
"--expected-revision <sha256>",
|
|
97
|
+
"Exact group revision rendered by session projection",
|
|
98
|
+
)
|
|
99
|
+
.option("--json", "Output as JSON")
|
|
100
|
+
.action((groupId, order, options) =>
|
|
101
|
+
output(
|
|
102
|
+
store().setGroupOrder({
|
|
103
|
+
groupId,
|
|
104
|
+
order: Number(order),
|
|
105
|
+
expectedRevision: expected(options),
|
|
106
|
+
}),
|
|
107
|
+
options,
|
|
108
|
+
),
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
group
|
|
112
|
+
.command("move <group-id> <session-ids...>")
|
|
113
|
+
.description(
|
|
114
|
+
"Atomically move selected canonical sessions; use ungrouped as the target",
|
|
115
|
+
)
|
|
116
|
+
.requiredOption(
|
|
117
|
+
"--expected-revision <sha256>",
|
|
118
|
+
"Exact group revision rendered by session projection",
|
|
119
|
+
)
|
|
120
|
+
.option("--json", "Output as JSON")
|
|
121
|
+
.action((groupId, sessionIds, options) =>
|
|
122
|
+
output(
|
|
123
|
+
store().moveSessions({
|
|
124
|
+
groupId,
|
|
125
|
+
sessionIds,
|
|
126
|
+
expectedRevision: expected(options),
|
|
127
|
+
}),
|
|
128
|
+
options,
|
|
129
|
+
),
|
|
130
|
+
);
|
|
131
|
+
}
|
|
@@ -61,6 +61,11 @@ import {
|
|
|
61
61
|
verifyExecutionLocationResultApplySourceGit,
|
|
62
62
|
} from "../lib/execution-location-result-apply.js";
|
|
63
63
|
import { executionBroker } from "../lib/process-execution-broker/index.js";
|
|
64
|
+
import {
|
|
65
|
+
projectExecutionLocationTargetSigtermProbe,
|
|
66
|
+
projectExecutionLocationTargetPreflight,
|
|
67
|
+
runExecutionLocationTargetResourceProbe,
|
|
68
|
+
} from "../lib/execution-location-target-preflight.js";
|
|
64
69
|
import {
|
|
65
70
|
sameFileStatIdentity,
|
|
66
71
|
samePathHandleFileIdentity,
|
|
@@ -1134,6 +1139,17 @@ function runPreviewAction(action, deps = {}) {
|
|
|
1134
1139
|
}
|
|
1135
1140
|
}
|
|
1136
1141
|
|
|
1142
|
+
async function runAsyncAction(action, options = {}) {
|
|
1143
|
+
try {
|
|
1144
|
+
const projection = await action();
|
|
1145
|
+
writeProjection(projection, options);
|
|
1146
|
+
return projection.allowed === false ? 2 : 0;
|
|
1147
|
+
} catch (error) {
|
|
1148
|
+
process.stderr.write(`Execution location failed: ${error.message}\n`);
|
|
1149
|
+
return 1;
|
|
1150
|
+
}
|
|
1151
|
+
}
|
|
1152
|
+
|
|
1137
1153
|
export function registerSessionLocationSubcommands(session, deps = {}) {
|
|
1138
1154
|
const location = session
|
|
1139
1155
|
.command("location")
|
|
@@ -1152,6 +1168,38 @@ export function registerSessionLocationSubcommands(session, deps = {}) {
|
|
|
1152
1168
|
);
|
|
1153
1169
|
});
|
|
1154
1170
|
|
|
1171
|
+
location
|
|
1172
|
+
.command("target-preflight", { hidden: true })
|
|
1173
|
+
.description("Verify target-local runner fences and resource limits")
|
|
1174
|
+
.option("--json", "Machine-readable JSON output")
|
|
1175
|
+
.action((options) => {
|
|
1176
|
+
process.exitCode = runAction(
|
|
1177
|
+
() => projectExecutionLocationTargetPreflight({}, deps),
|
|
1178
|
+
options,
|
|
1179
|
+
);
|
|
1180
|
+
});
|
|
1181
|
+
|
|
1182
|
+
location
|
|
1183
|
+
.command("resource-probe <kind>", { hidden: true })
|
|
1184
|
+
.description("Exercise a target-local cpu or memory enforcement boundary")
|
|
1185
|
+
.action((kind) => {
|
|
1186
|
+
process.exitCode = runAction(
|
|
1187
|
+
() => runExecutionLocationTargetResourceProbe(kind),
|
|
1188
|
+
{},
|
|
1189
|
+
);
|
|
1190
|
+
});
|
|
1191
|
+
|
|
1192
|
+
location
|
|
1193
|
+
.command("sigterm-drain-probe", { hidden: true })
|
|
1194
|
+
.description("Exercise the target-local SIGTERM drain transition")
|
|
1195
|
+
.option("--json", "Machine-readable JSON output")
|
|
1196
|
+
.action(async (options) => {
|
|
1197
|
+
process.exitCode = await runAsyncAction(
|
|
1198
|
+
() => projectExecutionLocationTargetSigtermProbe({}, deps),
|
|
1199
|
+
options,
|
|
1200
|
+
);
|
|
1201
|
+
});
|
|
1202
|
+
|
|
1155
1203
|
location
|
|
1156
1204
|
.command("show <id>")
|
|
1157
1205
|
.description("Show the execution location anchored by session_start")
|
package/src/commands/session.js
CHANGED
|
@@ -69,6 +69,7 @@ import { registerSessionObservabilitySubcommand } from "./session-observability.
|
|
|
69
69
|
import { registerSessionLocationSubcommands } from "./session-location.js";
|
|
70
70
|
import { registerSessionBudgetCommands } from "./session-budget.js";
|
|
71
71
|
import { registerSessionMessageCommands } from "./session-message.js";
|
|
72
|
+
import { registerSessionGroupCommands } from "./session-group.js";
|
|
72
73
|
|
|
73
74
|
export const _deps = {
|
|
74
75
|
execFileSync: (...args) => executionBroker.execFileSync(...args),
|
|
@@ -228,6 +229,7 @@ export function registerSessionCommand(program) {
|
|
|
228
229
|
registerSessionLocationSubcommands(session);
|
|
229
230
|
registerSessionBudgetCommands(session);
|
|
230
231
|
registerSessionMessageCommands(session);
|
|
232
|
+
registerSessionGroupCommands(session);
|
|
231
233
|
|
|
232
234
|
// session list
|
|
233
235
|
session
|
|
@@ -324,6 +326,7 @@ export function registerSessionCommand(program) {
|
|
|
324
326
|
let workflow = [];
|
|
325
327
|
let dynamicWorkflow = [];
|
|
326
328
|
let sessionMessageFabric = null;
|
|
329
|
+
let sessionWorkbench = null;
|
|
327
330
|
let artifacts = [];
|
|
328
331
|
let prLinks = {};
|
|
329
332
|
|
|
@@ -472,6 +475,13 @@ export function registerSessionCommand(program) {
|
|
|
472
475
|
} catch (error) {
|
|
473
476
|
sourceErrors.sessionMessageFabric = error?.message || String(error);
|
|
474
477
|
}
|
|
478
|
+
try {
|
|
479
|
+
const { SessionWorkbenchStore } =
|
|
480
|
+
await import("../lib/session-workbench-store.js");
|
|
481
|
+
sessionWorkbench = new SessionWorkbenchStore().projection();
|
|
482
|
+
} catch (error) {
|
|
483
|
+
sourceErrors.sessionWorkbench = error?.message || String(error);
|
|
484
|
+
}
|
|
475
485
|
|
|
476
486
|
const { buildSessionProjection } =
|
|
477
487
|
await import("../lib/session-projection.js");
|
|
@@ -485,6 +495,7 @@ export function registerSessionCommand(program) {
|
|
|
485
495
|
artifacts,
|
|
486
496
|
prLinks,
|
|
487
497
|
sessionMessageFabric,
|
|
498
|
+
sessionWorkbench,
|
|
488
499
|
sourceErrors,
|
|
489
500
|
});
|
|
490
501
|
if (options.json) {
|
|
@@ -188,7 +188,10 @@ async function _runProvider(providerId, opts = {}) {
|
|
|
188
188
|
try {
|
|
189
189
|
vault = await openCliVault();
|
|
190
190
|
} catch (err) {
|
|
191
|
-
if (
|
|
191
|
+
if (
|
|
192
|
+
err?.code === "BETTER_SQLITE3_MISSING" ||
|
|
193
|
+
String(err?.code || "").startsWith("CLI_VAULT_")
|
|
194
|
+
) {
|
|
192
195
|
console.error(chalk.red(`✗ ${err.message}`));
|
|
193
196
|
process.exitCode = 2;
|
|
194
197
|
return;
|
package/src/commands/update.js
CHANGED
package/src/data/changelog.json
CHANGED
|
@@ -1,6 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"source": "CHANGELOG.md",
|
|
3
3
|
"releases": [
|
|
4
|
+
{
|
|
5
|
+
"productVersion": null,
|
|
6
|
+
"cliVersion": "0.165.8",
|
|
7
|
+
"cliVersions": ["0.165.7", "0.165.8"],
|
|
8
|
+
"date": "2026-08-23",
|
|
9
|
+
"title": "",
|
|
10
|
+
"sections": [
|
|
11
|
+
{
|
|
12
|
+
"heading": "Fixed - cc CLI 0.165.8: release-gate home isolation",
|
|
13
|
+
"body": "> `chainlesschain` **0.165.7 -> 0.165.8** (source candidate; not yet\n> published, 2026-08-23).\n> CLI-only candidate; `@chainlesschain/personal-data-hub` remains **0.4.59**\n> and `@chainlesschain/agent-sdk` remains **0.1.7**.\n\n- **Agent SDK release-gate isolation**: the real-CLI SDK test now keeps its\n simulated operating-system home separate from `CHAINLESSCHAIN_HOME`, while\n retaining separate workspace and rollback-resistant security-anchor roots.\n This exercises the production fail-closed layout without asking the CLI to\n repair owner-only permissions on a broad user-home directory.\n- **Candidate continuity**: exact SHA `350fb4ce71` passed the complete Linux,\n Windows, and macOS `CLI CI` (`32612516841`) and `CLI Strict Sandbox`\n (`32612516696`) matrices. Its immutable `v-npm-0-165-7` release run\n (`32613795671`) stopped in the Agent SDK test before package, dry-run, or npm\n publish jobs; `0.165.7` was therefore never published and the fix advances\n to a new immutable version/tag rather than moving the existing tag.\n- **Release status**: publication requires this candidate's exact commit to\n pass the complete Linux, Windows, and macOS `CLI CI` and `CLI Strict Sandbox`\n matrices. Tag, provenance, registry readback, and publication evidence must\n be recorded only after those exact-SHA gates succeed."
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"productVersion": null,
|
|
19
|
+
"cliVersion": "0.165.7",
|
|
20
|
+
"cliVersions": ["0.165.6", "0.165.7"],
|
|
21
|
+
"date": "2026-08-23",
|
|
22
|
+
"title": "",
|
|
23
|
+
"sections": [
|
|
24
|
+
{
|
|
25
|
+
"heading": "Fixed - cc CLI 0.165.7: merged-session and evidence stability",
|
|
26
|
+
"body": "> `chainlesschain` **0.165.6 -> 0.165.7** (unpublished immutable-tag candidate,\n> 2026-08-23; superseded by `0.165.8` after a pre-package release-gate failure).\n> CLI-only candidate; `@chainlesschain/personal-data-hub` remains **0.4.59**\n> and `@chainlesschain/agent-sdk` remains **0.1.7**.\n\n- **Durable session stability**: bound headless event backlogs, scoped session\n sidecars, routed Claude project storage through canonical path authority,\n and prevented Windows append-writer starvation under concurrent session\n activity.\n- **Execution-location convergence**: local and remote replicas now bootstrap\n isolated target state, preserve replica identity and witnesses, forward\n staged input through the target supervisor, and retain CPU-limit evidence.\n- **Browser evidence reliability**: two-origin browser evidence installs its\n complete driver and aggregate dependency closure, preserves detached\n baselines, stabilizes Windows tabs, and retries bounded profile cleanup.\n- **Merged test-contract repair**: real-spawn fixtures keep workspace and\n application data as siblings, while path-module mocks inherit the production\n API before overriding isolated test roots. The bundled offline changelog is\n regenerated from this canonical record.\n- **Release status**: publication requires this candidate's exact commit to\n pass the complete Linux, Windows, and macOS `CLI CI` and `CLI Strict Sandbox`\n matrices. Tag, provenance, registry readback, and publication evidence must\n be recorded only after those exact-SHA gates succeed."
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
},
|
|
4
30
|
{
|
|
5
31
|
"productVersion": null,
|
|
6
32
|
"cliVersion": "0.165.6",
|
|
@@ -10,7 +36,7 @@
|
|
|
10
36
|
"sections": [
|
|
11
37
|
{
|
|
12
38
|
"heading": "Added - cc CLI 0.165.6: safer remote sessions and governed plugin sources",
|
|
13
|
-
"body": "> `chainlesschain` **0.165.5 -> 0.165.6** (
|
|
39
|
+
"body": "> `chainlesschain` **0.165.5 -> 0.165.6** (published from exact SHA\n> `ef4324349f272f5ec6af9a6ab80110e814122dae`, 2026-08-21).\n> CLI-only release; `@chainlesschain/personal-data-hub` remains **0.4.59**\n> and `@chainlesschain/agent-sdk` remains **0.1.7**.\n\n- **Remote Control safe defaults**: direct sessions bind to loopback by\n default. Trusted-LAN exposure requires explicit command authority, preserves\n the selected bind address, fails closed on relay/direct fallback, and keeps\n IDE pairing surfaces from presenting loopback endpoints as phone-ready QR\n links.\n- **Governed plugin source identity**: managed Marketplace policy now evaluates\n canonical Git, registry, file, alias, ref, path, host, port, principal, and\n registry-resolution identities before target I/O or process spawn. Clone\n execution is isolated from ambient Git/SSH configuration, and cache\n provenance remains bound to the approved source and registry document.\n- **Digest-pinned Marketplace archives**: registry install and update can\n materialize same-origin, catalog-bound `tgz`/`tar.gz` sources only after\n candidate preflight. SHA-256 verification and bounded extraction reject\n traversal, links, special entries, case collisions, and expansion bombs;\n archive and extracted-payload digest authority are revalidated for offline\n cache replay. Dynamic command and headers-helper sources remain disabled by\n product policy.\n- **Cross-platform policy enforcement**: Windows runner temporary roots are\n canonicalized without probing caller-controlled targets. Other existing 8.3\n spellings resolve to their long-path authority, while unresolved or forged\n aliases remain rejected. Linux, Windows, and macOS Marketplace campaigns\n exercise air-gapped cache, proxy, PAC, and private-registry boundaries.\n- **Durable session and MCP lifecycle**: cross-session messaging, bounded\n long-running live state, MCP reconnect subscription recovery, lifecycle\n compatibility, and structured headless observability now share explicit\n identity, cleanup, and backpressure contracts.\n- **Focused terminal ergonomics**: the `concise` output style and persisted\n `classic`/`readline` keybinding flavor extend interactive use without\n changing existing default behavior.\n- **Published release evidence**: immutable tag `v-npm-0-165-6`, three-OS\n `CLI CI` (`32483224738`), `CLI Strict Sandbox` (`32483224517`), npm release\n (`32486454203`), and independent registry/provenance readback\n (`32488130856`) all bind exact SHA `ef4324349f`. npm reports\n `latest=0.165.6`; the public tarball SHA-1 is\n `d0dc65bdf34d0afe8e8db4492a1ddc72d63ee260`."
|
|
14
40
|
}
|
|
15
41
|
]
|
|
16
42
|
},
|
|
@@ -69,6 +69,7 @@ import {
|
|
|
69
69
|
recordSessionBudgetUsage,
|
|
70
70
|
rejectSessionBudgetUsageUnknown,
|
|
71
71
|
} from "../../lib/session-budget-usage.js";
|
|
72
|
+
import { HostResourceBudget } from "../../lib/host-resource-budget.js";
|
|
72
73
|
|
|
73
74
|
const CANONICAL_WS_TURN_QUEUES = new Map();
|
|
74
75
|
const CANONICAL_WS_CLAIM_CAS_ATTEMPTS = 4;
|
|
@@ -163,6 +164,7 @@ export class WSAgentHandler {
|
|
|
163
164
|
canonicalSessionStore,
|
|
164
165
|
sessionHostLease = null,
|
|
165
166
|
sessionBudgetRoot = null,
|
|
167
|
+
hostResourceBudget = null,
|
|
166
168
|
}) {
|
|
167
169
|
this.session = session;
|
|
168
170
|
this.interaction = interaction;
|
|
@@ -173,6 +175,9 @@ export class WSAgentHandler {
|
|
|
173
175
|
this._sessionHostLease = sessionHostLease;
|
|
174
176
|
this._sessionBudgetRoot = sessionBudgetRoot;
|
|
175
177
|
this._sessionBudget = sessionBudgetRoot?.budget || null;
|
|
178
|
+
// session-protocol keeps one handler alive across reconnects and incoming
|
|
179
|
+
// requests, making this authority session-scoped rather than turn-scoped.
|
|
180
|
+
this._hostResourceBudget = hostResourceBudget || new HostResourceBudget();
|
|
176
181
|
this._onSessionHostLeaseAbort = null;
|
|
177
182
|
if (sessionHostLease?.signal) {
|
|
178
183
|
this._onSessionHostLeaseAbort = () => {
|
|
@@ -642,7 +647,8 @@ export class WSAgentHandler {
|
|
|
642
647
|
model: session.model,
|
|
643
648
|
baseUrl: session.baseUrl,
|
|
644
649
|
apiKey: session.apiKey,
|
|
645
|
-
signal:
|
|
650
|
+
signal:
|
|
651
|
+
signal || this._sessionBudgetSignal || this._sessionHostLease?.signal,
|
|
646
652
|
onlyIfNeeded: true,
|
|
647
653
|
preserveCompletedExchange: true,
|
|
648
654
|
llmQuery: this._compactionLlmQuery,
|
|
@@ -1152,11 +1158,10 @@ export class WSAgentHandler {
|
|
|
1152
1158
|
strictUsageTelemetry =
|
|
1153
1159
|
this._resolveCanonicalUsageProtocol() === "call-ledger";
|
|
1154
1160
|
if (strictUsageTelemetry) this._assertUsageLedgerWritable();
|
|
1155
|
-
const compacted =
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
);
|
|
1161
|
+
const compacted = await this._compactCanonicalHistoryBeforeClaim(
|
|
1162
|
+
requestId,
|
|
1163
|
+
turnSignal,
|
|
1164
|
+
);
|
|
1160
1165
|
if (!compacted) return;
|
|
1161
1166
|
}
|
|
1162
1167
|
canonicalTurn ||= this._claimCanonicalTurn(userMessage, requestId);
|
|
@@ -1240,6 +1245,7 @@ export class WSAgentHandler {
|
|
|
1240
1245
|
cwd: session.projectRoot,
|
|
1241
1246
|
sessionId: session.id,
|
|
1242
1247
|
planManager: session.planManager,
|
|
1248
|
+
hostResourceBudget: this._hostResourceBudget,
|
|
1243
1249
|
enabledToolNames: session.enabledToolNames || null,
|
|
1244
1250
|
hostManagedToolPolicy: session.hostManagedToolPolicy || null,
|
|
1245
1251
|
extraToolDefinitions: session.externalToolDefinitions || [],
|
|
@@ -1507,7 +1513,10 @@ export class WSAgentHandler {
|
|
|
1507
1513
|
this._persistCanonicalUsageBoundary(event, "unknown");
|
|
1508
1514
|
}
|
|
1509
1515
|
if (this._markSessionBudgetUsageUnknown(event)) {
|
|
1510
|
-
rejectSessionBudgetUsageUnknown(
|
|
1516
|
+
rejectSessionBudgetUsageUnknown(
|
|
1517
|
+
event,
|
|
1518
|
+
"WebSocket provider call",
|
|
1519
|
+
);
|
|
1511
1520
|
}
|
|
1512
1521
|
break;
|
|
1513
1522
|
|
|
@@ -1624,9 +1633,9 @@ export class WSAgentHandler {
|
|
|
1624
1633
|
? surfacedError?.code || "CC_SESSION_BUDGET_EXHAUSTED"
|
|
1625
1634
|
: isAbortError(err)
|
|
1626
1635
|
? "CC_WS_TURN_INTERRUPTED"
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1636
|
+
: err?.code === "CC_WS_EMPTY_ASSISTANT_RESPONSE"
|
|
1637
|
+
? "CC_WS_EMPTY_ASSISTANT_RESPONSE"
|
|
1638
|
+
: "CC_WS_TURN_FAILED";
|
|
1630
1639
|
try {
|
|
1631
1640
|
this._settleCanonicalFailure(canonicalTurn, failureCode);
|
|
1632
1641
|
} catch (settlementError) {
|
|
@@ -1917,8 +1926,7 @@ export class WSAgentHandler {
|
|
|
1917
1926
|
model: session.model,
|
|
1918
1927
|
baseUrl: session.baseUrl,
|
|
1919
1928
|
apiKey: session.apiKey,
|
|
1920
|
-
signal:
|
|
1921
|
-
this._sessionBudgetSignal || this._sessionHostLease?.signal,
|
|
1929
|
+
signal: this._sessionBudgetSignal || this._sessionHostLease?.signal,
|
|
1922
1930
|
force: true,
|
|
1923
1931
|
preserveCompletedExchange: true,
|
|
1924
1932
|
llmQuery: this._compactionLlmQuery,
|