chainlesschain 0.165.5 → 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-CEeYTeDB.js → AIOps-B3gWmXjo.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BeRUQ3V2.js → ActionButton-G9pdT-0e.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-DrV718XF.js → Analytics-Ca30J7m2.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-Cd2Frt7Q.js → AppLayout-BtVTm8PU.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-CUJMlORU.js → Artifacts-BhViNa6u.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-CXJcfT6p.js → Audit-DhKq-FnY.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-DOv6Z7H9.js → BackgroundAgents-BL0SVbnE.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-BwdDyBI0.js → Backup-BWkblnFi.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-BmLn4kYH.js → BaseInput-ClaRNrF8.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-COg8pAW2.js → Chat-sZE2Z77o.js} +4 -4
- package/src/assets/web-panel/assets/ChatBubbleRenderer-BAfKOnRe.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-BCP4uoU8.js → Checkbox-Cvhay5WM.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-pRt6Y9JI.js → Codegen-BpejL-4N.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DLaprKhS.js → Col-g2Ki6g_1.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DyATsz5f.js → Community-D2xKbNo9.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-BXAaupZK.js → Compact-DbL1Pds3.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-DpcJBELr.js → Compliance-DGtZCV4c.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-DG4EFWyd.js → Cowork-4kQpoNsI.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-F6Oy5n2P.js → Cron-BxTYXXAN.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-BOdgtalX.js → Crosschain-k0J0LT2N.js} +1 -1
- package/src/assets/web-panel/assets/{DID-DT1dSkjH.js → DID-BaqhoPgN.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-NBUIqWzC.js → Dashboard-T4RVPIM1.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CSpHeMYB.js → Dropdown-DszOToWq.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-CEG0xISr.js → EmailListRenderer-C9KJU7HF.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-BTZ0BZna.js → FamilyGuardDashboard-Cmr0JnsA.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-BuuCTn2V.js → Federation-BI-_2xZX.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-KAVceevk.js → FormItemContext-DsnDEPsl.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-DnHpcQvW.js → GenericCardRenderer-BLncAKKK.js} +1 -1
- package/src/assets/web-panel/assets/{Git-C_B_0HwB.js → Git-BPQhGXDn.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-DPSZuzuu.js → Governance-CyElbUQW.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-BV-06V7q.js → Inference-CcSntBQD.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-wpDuupn6.js → KnowledgeGraph-p6e7HZ2r.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-Bseca1_I.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-d3kM4DDL.js → Marketplace-Dd2notAJ.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-DQ_xZ23i.js → McpTools-BBsN2CSW.js} +4 -4
- package/src/assets/web-panel/assets/{Memory-CRIeYO4L.js → Memory-Dg2uTvwx.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BsllIa9l.js → MobileBridge-r1YMRiJV.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-BUuQy30X.js → MobileProjects-C-89kSm4.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BOFDIzrC.js → Mtc-CrPZcVgf.js} +5 -5
- package/src/assets/web-panel/assets/{MtcAudit-BQg-vyvG.js → MtcAudit-sxi7hqJb.js} +5 -5
- package/src/assets/web-panel/assets/{Multisig-Bo1jrPdN.js → Multisig-CAgOMfF1.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-Bmod8alw.js → NLProgramming-DafaPts3.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-CGGFL8w-.js → Notes-CJM-xUW_.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-BsZvCJxC.js → NotificationSettings-L0ZjfAh_.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-C1-Quo_h.js → OrderTableRenderer-BB1CvCK0.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-BjOeDYOi.js → Organization-DeLtgAD8.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-DwVV3l5A.js → Overflow-CKC2b10z.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-Cu3DQT9W.js → P2P-eyf2rzY1.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-Cg0gR7dH.js → PdhVaultBrowser-5upNIOW8.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-CsAXxRN5.js → Permissions-B8p3W6JK.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-C-nNmnYp.js → PersonalDataHub-BnRMxTq3.js} +5 -5
- package/src/assets/web-panel/assets/{Pipeline-BOnW7nNc.js → Pipeline-DjCNI1li.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-ClLSyGKt.js → Privacy-u6gXLbWT.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-DuLvjjq7.js → ProjectInit-BZAw4tkM.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-DQYYbDD9.js → ProjectSettings-B1Tr72q7.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-Drw8MBGK.js → Projects-DO7HFuBQ.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-ckqHQe6K.js → Providers-BjCztyhj.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-DW5BXk-G.js → QrScannerModal-ZWyCUbR1.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-DDLnhNTp.js → QuickAsk-DhDjeW4G.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-PJQ2C91U.js → Recommend-R_CN2MuU.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-s6wmda34.js → RemoteSession-uxFcujeu.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-DC2sb-I3.js → Reputation-DX8D7rks.js} +1 -1
- package/src/assets/web-panel/assets/{Row-hPGk1eGj.js → Row-BYahQILD.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-RIvfZql0.js → RssFeed-CUSQ2tm-.js} +3 -3
- package/src/assets/web-panel/assets/{Search-DFg1G1eR.js → Search-CnN_S8Cs.js} +1 -1
- package/src/assets/web-panel/assets/{Security-D6H5p8Dp.js → Security-DcZlh-O4.js} +4 -4
- package/src/assets/web-panel/assets/{Services-nxYiFV_w.js → Services-ZhBOjzIX.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-BmgFNAdB.js → Skeleton-D5Qnq_lI.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-CsaaD2av.js → Skills-BC9cZ3Be.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-yM5y9yvK.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-CFVhEyyr.js → SyncSettings-DUvJbSct.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-DdO02Inn.js → Tasks-BXa-5noQ.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-Eo2d8Llu.js → Templates-JxaiUt_3.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-ChESOXgy.js → Tenant-BW4ERQN8.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-BJ7oDxTI.js → Terminal-DltUbdtv.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-hWX0fUvz.js → TimelineRenderer-CMoZz0Tc.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-DVBZQnd-.js → Tokens-D_VEV60K.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-D89cQfVq.js → Trigger-CCXTCs0R.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BIVSb4-V.js → Trust-lkGRIPcG.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-B58gWopl.js → UkeySign-BfGeQ9HX.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-DhHI7bmG.js → VideoEditing-BEC7pYvc.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-C4FheWS_.js → Wallet-BZdG24o0.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DnPRq-Bx.js → WebAuthn-yoEddedp.js} +3 -3
- package/src/assets/web-panel/assets/{WorkflowEditor-BerRPjpJ.js → WorkflowEditor-BXZEprOW.js} +1 -1
- package/src/assets/web-panel/assets/{chat-BzZ52iKr.js → chat-gg0bzZal.js} +1 -1
- package/src/assets/web-panel/assets/{colors-BI_E4BAn.js → colors-DjRVRuin.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-d50mr3yk.js → compact-item-su-dieAc.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-C6FsQ1IH.js → createContext-Ci3S8oKF.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-CxbFX9uH.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-DLZEMgLP.js → hasIn-D8F10heH.js} +1 -1
- package/src/assets/web-panel/assets/{index-D-aBumtY.js → index-11wtYQiF.js} +1 -1
- package/src/assets/web-panel/assets/{index-CjuKZBqJ.js → index-1IgxgALJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-9H_M2jju.js → index-1agckWSq.js} +1 -1
- package/src/assets/web-panel/assets/{index-DE0V6cp-.js → index-5JqhujnR.js} +1 -1
- package/src/assets/web-panel/assets/{index-Y2-q7QLm.js → index-6Tniqk1s.js} +1 -1
- package/src/assets/web-panel/assets/{index-DoFtCVZ7.js → index-8Z-8BIlN.js} +1 -1
- package/src/assets/web-panel/assets/{index-KNGgO4Wm.js → index-BCI5v0yB.js} +1 -1
- package/src/assets/web-panel/assets/{index-DY4j5zkF.js → index-BDJntYmJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BZjjdQ62.js → index-BGzixOGZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BTpIOTfR.js → index-BMMOVoLD.js} +1 -1
- package/src/assets/web-panel/assets/{index-BB9SqVSt.js → index-BTFpdBtt.js} +1 -1
- package/src/assets/web-panel/assets/{index-AHr7ryWf.js → index-Ba_HyPnE.js} +1 -1
- package/src/assets/web-panel/assets/{index-Pvf30m8Q.js → index-BbF1IHof.js} +1 -1
- package/src/assets/web-panel/assets/{index-CRN5TRTQ.js → index-BgT9su_e.js} +1 -1
- package/src/assets/web-panel/assets/{index-CUaEHfQ0.js → index-BzPB6kGZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CdKt9fOd.js → index-C6ygzplr.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dec0Kf_Z.js → index-CC3ZDjzY.js} +1 -1
- package/src/assets/web-panel/assets/{index-IPkwSAW_.js → index-CEmXRhAE.js} +1 -1
- package/src/assets/web-panel/assets/index-CJGOlduY.js +1 -0
- package/src/assets/web-panel/assets/{index-C3k8kevG.js → index-CMPqd5Cv.js} +1 -1
- package/src/assets/web-panel/assets/{index-A5CDWP7y.js → index-COWd8uGx.js} +1 -1
- package/src/assets/web-panel/assets/{index-CO8DAF7U.js → index-CPIYSp4H.js} +1 -1
- package/src/assets/web-panel/assets/{index-CVzuawCX.js → index-CR0h6seT.js} +1 -1
- package/src/assets/web-panel/assets/{index-Co7s9LsB.js → index-CUmDhC4j.js} +1 -1
- package/src/assets/web-panel/assets/index-CkBCN5yH.js +1 -0
- package/src/assets/web-panel/assets/{index-CLoTQr0W.js → index-CusgZPtc.js} +1 -1
- package/src/assets/web-panel/assets/{index-B81mo1Et.js → index-DBAETXft.js} +1 -1
- package/src/assets/web-panel/assets/{index-BcSUl9fA.js → index-DIJ2qFOC.js} +1 -1
- package/src/assets/web-panel/assets/{index-Q5Tn735s.js → index-Dbq4NMET.js} +1 -1
- package/src/assets/web-panel/assets/{index-GXE0D8Nx.js → index-DkMEF5VT.js} +1 -1
- package/src/assets/web-panel/assets/{index-TWG-_D1M.js → index-DkfQR3hM.js} +1 -1
- package/src/assets/web-panel/assets/{index-BAE3hwev.js → index-DnLucOn9.js} +1 -1
- package/src/assets/web-panel/assets/{index-CgkoH3_g.js → index-DugB_aKa.js} +1 -1
- package/src/assets/web-panel/assets/{index-BRGx3w6T.js → index-DyLUarhZ.js} +3 -3
- package/src/assets/web-panel/assets/{index-BeM4hfht.js → index-T6_6ygJZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DsscwxPE.js → index-Tu8eWqh-.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bmr_vxXD.js → index-W7XUgdVL.js} +1 -1
- package/src/assets/web-panel/assets/{index-BoNZlzhQ.js → index-dHZinfko.js} +1 -1
- package/src/assets/web-panel/assets/{index-DqkbHHg8.js → index-jyNgp5FI.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-D-4Hzgej.js → initDefaultProps-Cv4p8e4w.js} +1 -1
- package/src/assets/web-panel/assets/{motion-D4Wl4xU7.js → motion-B8EwmMOw.js} +1 -1
- package/src/assets/web-panel/assets/{move-Cd5eQvL0.js → move-B8R9F8TK.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-B4ilslCW.js → mtc-parser-DoFYz5Bp.js} +1 -1
- package/src/assets/web-panel/assets/{omit-Ckarx-tf.js → omit-CHWYLBjI.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-QJ0bpCmc.js → pickAttrs-CXuPDO77.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-CKHm-tq8.js → placementArrow-BaAtUUon.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-CV6a_w_Y.js → responsiveObserve-DCc4zcDD.js} +1 -1
- package/src/assets/web-panel/assets/{slide-mHpeQFgk.js → slide-B_lx89oZ.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-DIaQNQWA.js → statusUtils-DE8DPmR0.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-PJpzavV8.js → styleChecker-1ktXOsL_.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-BH7zTw8S.js → useFlexGapSupport-xH89-wjh.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-BDNG3JDd.js → useFs-DscvfW5p.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-CY2VWdUg.js → usePersonalDataHub-RdMKQta7.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-D0kw9jhz.js → vnode-Z3wTni2T.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-B5g7TN7r.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 +105 -62
- package/src/commands/background-session.js +100 -10
- package/src/commands/git.js +39 -0
- package/src/commands/mcp.js +5 -0
- package/src/commands/plugin.js +160 -29
- package/src/commands/remote-control.js +295 -110
- package/src/commands/session-group.js +131 -0
- package/src/commands/session-location.js +48 -0
- package/src/commands/session-message.js +171 -0
- package/src/commands/session.js +22 -0
- package/src/commands/sync-providers.js +4 -1
- package/src/commands/update.js +1 -0
- package/src/data/changelog.json +41 -2
- 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 +832 -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/background-session-transport.js +153 -27
- 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-client.js +2 -0
- package/src/lib/mcp-headers-helper.js +47 -5
- package/src/lib/mcp-lifecycle-authority.js +887 -0
- package/src/lib/mcp-oauth.js +156 -26
- package/src/lib/mcp-tls.js +330 -0
- package/src/lib/output-styles.js +12 -0
- 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 +730 -71
- package/src/lib/plugin-runtime/lsp.js +4 -4
- package/src/lib/plugin-runtime/marketplace-archive-source.js +366 -0
- package/src/lib/plugin-runtime/marketplace-catalog.js +63 -6
- 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-remote-artifacts.js +1 -0
- package/src/lib/plugin-runtime/marketplace-source-adapter.js +188 -0
- package/src/lib/plugin-runtime/marketplace-source-cache.js +11 -1
- 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 +583 -58
- package/src/lib/plugin-runtime/settings.js +3 -1
- package/src/lib/plugin-runtime/trust.js +274 -13
- package/src/lib/plugin-security.js +393 -41
- package/src/lib/plugin-source-identity.js +850 -0
- 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/remote-approval-bridge.js +136 -46
- package/src/lib/remote-control.js +217 -31
- 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 +1252 -0
- package/src/lib/session-projection.js +286 -3
- package/src/lib/session-runtime-retention.js +155 -0
- package/src/lib/session-store-guard.js +3 -1
- package/src/lib/session-workbench-store.js +466 -0
- package/src/lib/settings-loader.cjs +29 -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 +175 -19
- package/src/repl/permission-prompt.js +29 -8
- package/src/repl/repl-keybindings.js +55 -0
- package/src/runtime/agent-core.js +362 -20
- package/src/runtime/bootstrap.js +37 -13
- package/src/runtime/coding-agent-contract-shared.cjs +11 -4
- package/src/runtime/headless-runner.js +281 -102
- package/src/runtime/headless-stream.js +199 -30
- package/src/runtime/mcp-config.js +298 -6
- package/src/runtime/policies/agent-policy.js +10 -0
- package/src/runtime/status-diagnostics-lite.js +9 -1
- package/src/assets/web-panel/assets/ChatBubbleRenderer-4gGkdGgA.js +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-B4RLp2zs.js +0 -1
- package/src/assets/web-panel/assets/SpeechSettings-DPy1XMYh.js +0 -1
- package/src/assets/web-panel/assets/devWarning-CagEcIex.js +0 -1
- package/src/assets/web-panel/assets/index-pzT9PpOU.js +0 -1
- package/src/assets/web-panel/assets/index-z1kFadaX.js +0 -1
package/src/commands/plugin.js
CHANGED
|
@@ -258,7 +258,8 @@ async function buildRegistrySetSelection(
|
|
|
258
258
|
caFile,
|
|
259
259
|
} = {},
|
|
260
260
|
) {
|
|
261
|
-
const
|
|
261
|
+
const managedPolicy = loadPluginManagedPolicy();
|
|
262
|
+
const { authorizeRegistryPluginEntry, fetchRegistry, resolveRegistryToken } =
|
|
262
263
|
await import("../lib/plugin-runtime/remote-source.js");
|
|
263
264
|
const {
|
|
264
265
|
buildPluginMarketplaceCatalog,
|
|
@@ -281,6 +282,8 @@ async function buildRegistrySetSelection(
|
|
|
281
282
|
const resolvedToken = resolveRegistryToken(url, { token, config });
|
|
282
283
|
const resolved = await fetchRegistry(url, {
|
|
283
284
|
token: resolvedToken,
|
|
285
|
+
config,
|
|
286
|
+
managedPolicy,
|
|
284
287
|
allowInsecure,
|
|
285
288
|
offline,
|
|
286
289
|
expectedSha256: registryDigestPins.get(url),
|
|
@@ -301,6 +304,41 @@ async function buildRegistrySetSelection(
|
|
|
301
304
|
}),
|
|
302
305
|
);
|
|
303
306
|
const { VERSION } = await import("../constants.js");
|
|
307
|
+
// Select and authorize the highest-ranked candidate before inspecting the
|
|
308
|
+
// installed-plugin tree. Installed versions affect dependency diagnostics,
|
|
309
|
+
// but never candidate ordering; a blocked resolved source must therefore
|
|
310
|
+
// fail before any project/user plugin filesystem access.
|
|
311
|
+
const preliminaryCatalog = buildPluginMarketplaceCatalog({
|
|
312
|
+
sources,
|
|
313
|
+
installed: {},
|
|
314
|
+
hostVersion: VERSION,
|
|
315
|
+
strict,
|
|
316
|
+
});
|
|
317
|
+
const preliminarySelection = buildPluginMarketplaceCandidateSelection({
|
|
318
|
+
catalog: preliminaryCatalog,
|
|
319
|
+
name,
|
|
320
|
+
});
|
|
321
|
+
if (!preliminarySelection.selected) {
|
|
322
|
+
return {
|
|
323
|
+
catalog: preliminaryCatalog,
|
|
324
|
+
selection: preliminarySelection,
|
|
325
|
+
preflight: null,
|
|
326
|
+
resolved: null,
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
const sourceIndex = preliminarySelection.selected.registry.priority;
|
|
330
|
+
const entryIndex = preliminarySelection.selected.registry.entryIndex;
|
|
331
|
+
const source = sources[sourceIndex];
|
|
332
|
+
const entry = source?.registry?.plugins?.[entryIndex];
|
|
333
|
+
if (!entry || entry.name !== preliminarySelection.selected.name) {
|
|
334
|
+
throw new Error(
|
|
335
|
+
"selected registry entry no longer matches catalog authority",
|
|
336
|
+
);
|
|
337
|
+
}
|
|
338
|
+
const authorized = authorizeRegistryPluginEntry(source.registry, entry, {
|
|
339
|
+
registryUrl: registryUrls[sourceIndex],
|
|
340
|
+
cwd,
|
|
341
|
+
});
|
|
304
342
|
const catalog = buildPluginMarketplaceCatalog({
|
|
305
343
|
sources,
|
|
306
344
|
installed: await discoverInstalledPluginVersions(cwd),
|
|
@@ -311,31 +349,23 @@ async function buildRegistrySetSelection(
|
|
|
311
349
|
catalog,
|
|
312
350
|
name,
|
|
313
351
|
});
|
|
314
|
-
if (
|
|
315
|
-
|
|
352
|
+
if (
|
|
353
|
+
selection.selected?.registry.priority !== sourceIndex ||
|
|
354
|
+
selection.selected?.registry.entryIndex !== entryIndex
|
|
355
|
+
) {
|
|
356
|
+
throw new Error("selected registry entry changed during local preflight");
|
|
316
357
|
}
|
|
317
358
|
const preflight = buildPluginMarketplaceInstallPreflightFromSelection({
|
|
318
359
|
catalog,
|
|
319
360
|
selection,
|
|
320
361
|
}).preflight;
|
|
321
|
-
const sourceIndex = selection.selected.registry.priority;
|
|
322
|
-
const entryIndex = selection.selected.registry.entryIndex;
|
|
323
|
-
const source = sources[sourceIndex];
|
|
324
|
-
const entry = source?.registry?.plugins?.[entryIndex];
|
|
325
|
-
if (!entry || entry.name !== selection.selected.name) {
|
|
326
|
-
throw new Error(
|
|
327
|
-
"selected registry entry no longer matches catalog authority",
|
|
328
|
-
);
|
|
329
|
-
}
|
|
330
362
|
return {
|
|
331
363
|
catalog,
|
|
332
364
|
selection,
|
|
333
365
|
preflight,
|
|
334
366
|
resolved: {
|
|
335
367
|
registryUrl: registryUrls[sourceIndex],
|
|
336
|
-
|
|
337
|
-
ref: entry.ref || null,
|
|
338
|
-
sha256: entry.sha256 || null,
|
|
368
|
+
...authorized,
|
|
339
369
|
entry,
|
|
340
370
|
fromCache: source.fromCache === true,
|
|
341
371
|
documentSha256: source.documentSha256 || null,
|
|
@@ -344,6 +374,61 @@ async function buildRegistrySetSelection(
|
|
|
344
374
|
};
|
|
345
375
|
}
|
|
346
376
|
|
|
377
|
+
async function materializeRegistrySelection(
|
|
378
|
+
url,
|
|
379
|
+
resolved,
|
|
380
|
+
options,
|
|
381
|
+
marketplacePreflight,
|
|
382
|
+
) {
|
|
383
|
+
const {
|
|
384
|
+
inspectRegistryEntrySource,
|
|
385
|
+
resolveRegistryEntrySource,
|
|
386
|
+
resolveRegistryToken,
|
|
387
|
+
} = await import("../lib/plugin-runtime/remote-source.js");
|
|
388
|
+
const inspected = inspectRegistryEntrySource(resolved.entry);
|
|
389
|
+
const expectedType = marketplacePreflight.package?.type || "git";
|
|
390
|
+
const sourceAuthority = (value) => {
|
|
391
|
+
try {
|
|
392
|
+
const parsed = new URL(String(value));
|
|
393
|
+
parsed.username = "";
|
|
394
|
+
parsed.password = "";
|
|
395
|
+
parsed.search = "";
|
|
396
|
+
parsed.hash = "";
|
|
397
|
+
return parsed.toString();
|
|
398
|
+
} catch {
|
|
399
|
+
return value;
|
|
400
|
+
}
|
|
401
|
+
};
|
|
402
|
+
if (
|
|
403
|
+
inspected.sourceType !== resolved.sourceType ||
|
|
404
|
+
inspected.sourceIdentity !== resolved.sourceIdentity ||
|
|
405
|
+
inspected.ref !== resolved.ref ||
|
|
406
|
+
inspected.sourceType !== expectedType ||
|
|
407
|
+
sourceAuthority(inspected.sourceIdentity) !==
|
|
408
|
+
marketplacePreflight.package?.source ||
|
|
409
|
+
inspected.ref !== (marketplacePreflight.package?.ref || null) ||
|
|
410
|
+
(inspected.sourceType === "archive" &&
|
|
411
|
+
inspected.archiveSpec.sha256 !==
|
|
412
|
+
marketplacePreflight.package?.archiveSha256) ||
|
|
413
|
+
(inspected.sourceType === "command" &&
|
|
414
|
+
inspected.commandSpec.mode !== marketplacePreflight.package?.mode)
|
|
415
|
+
) {
|
|
416
|
+
throw new Error(
|
|
417
|
+
"registry candidate preflight revision changed before source fetch",
|
|
418
|
+
);
|
|
419
|
+
}
|
|
420
|
+
if (!["archive", "command"].includes(resolved.sourceType)) return resolved;
|
|
421
|
+
const config = await loadOptionalPluginConfig();
|
|
422
|
+
const materialized = await resolveRegistryEntrySource(url, resolved.entry, {
|
|
423
|
+
registryResolutionAuthority: resolved.registryResolutionAuthority,
|
|
424
|
+
token: resolveRegistryToken(url, { token: options.token, config }),
|
|
425
|
+
allowInsecure: options.allowInsecureRegistry === true,
|
|
426
|
+
offline: options.offline === true,
|
|
427
|
+
...registryNetworkOptions(options),
|
|
428
|
+
});
|
|
429
|
+
return { ...resolved, ...materialized };
|
|
430
|
+
}
|
|
431
|
+
|
|
347
432
|
async function buildRegistryInstallPreflight(url, resolved, cwd) {
|
|
348
433
|
const { VERSION } = await import("../constants.js");
|
|
349
434
|
const { buildPluginMarketplaceInstallPreflight } =
|
|
@@ -364,6 +449,8 @@ function catalogAuthorityFromPreflight(
|
|
|
364
449
|
preflight,
|
|
365
450
|
impact = null,
|
|
366
451
|
remoteArtifactEvidence = null,
|
|
452
|
+
archiveSource = null,
|
|
453
|
+
commandSource = null,
|
|
367
454
|
) {
|
|
368
455
|
return {
|
|
369
456
|
catalogDigest: preflight.catalogDigest,
|
|
@@ -417,6 +504,8 @@ function catalogAuthorityFromPreflight(
|
|
|
417
504
|
: {}),
|
|
418
505
|
...(impact ? { updateImpactDigest: impact.impactDigest } : {}),
|
|
419
506
|
...(remoteArtifactEvidence ? { remoteArtifactEvidence } : {}),
|
|
507
|
+
...(archiveSource ? { archiveSource } : {}),
|
|
508
|
+
...(commandSource ? { commandSource } : {}),
|
|
420
509
|
};
|
|
421
510
|
}
|
|
422
511
|
|
|
@@ -475,6 +564,10 @@ async function installedCatalogAuthorityMatches(
|
|
|
475
564
|
(!remoteArtifactEvidence ||
|
|
476
565
|
authority?.remoteArtifactEvidence?.evidenceDigest ===
|
|
477
566
|
remoteArtifactEvidence.evidenceDigest) &&
|
|
567
|
+
(preflight.package?.type !== "archive" ||
|
|
568
|
+
(authority?.archiveSource?.url === preflight.package.source &&
|
|
569
|
+
authority?.archiveSource?.archiveSha256 ===
|
|
570
|
+
preflight.package.archiveSha256)) &&
|
|
478
571
|
remoteSbomComparisonAuthorityMatches(
|
|
479
572
|
authority,
|
|
480
573
|
remoteArtifactEvidence,
|
|
@@ -1582,6 +1675,9 @@ export function registerPluginCommand(program) {
|
|
|
1582
1675
|
let marketplaceImpact = null;
|
|
1583
1676
|
let remoteArtifactRequest = null;
|
|
1584
1677
|
let remoteArtifacts = null;
|
|
1678
|
+
let archiveSourceAuthority = null;
|
|
1679
|
+
let commandSourceAuthority = null;
|
|
1680
|
+
let registryResolutionAuthority = null;
|
|
1585
1681
|
const registryUrls = normalizeRegistryUrls(options.registry);
|
|
1586
1682
|
const { isRemoteSource, resolveRemoteSource } =
|
|
1587
1683
|
await import("../lib/plugin-runtime/remote-source.js");
|
|
@@ -1643,6 +1739,7 @@ export function registerPluginCommand(program) {
|
|
|
1643
1739
|
allowInsecure: options.allowInsecureRegistry === true,
|
|
1644
1740
|
offline: options.offline === true,
|
|
1645
1741
|
expectedSha256: registryDigestPins.get(url),
|
|
1742
|
+
materialize: false,
|
|
1646
1743
|
...registryNetworkOptions(options),
|
|
1647
1744
|
});
|
|
1648
1745
|
marketplacePreflight = await buildRegistryInstallPreflight(
|
|
@@ -1651,7 +1748,8 @@ export function registerPluginCommand(program) {
|
|
|
1651
1748
|
process.cwd(),
|
|
1652
1749
|
);
|
|
1653
1750
|
}
|
|
1654
|
-
|
|
1751
|
+
registryResolutionAuthority =
|
|
1752
|
+
resolved.registryResolutionAuthority || null;
|
|
1655
1753
|
integritySha = resolved.sha256;
|
|
1656
1754
|
if (registryManifestDigestConflict(integritySha, options.sha256)) {
|
|
1657
1755
|
throw new Error(
|
|
@@ -1708,6 +1806,17 @@ export function registerPluginCommand(program) {
|
|
|
1708
1806
|
"registry candidate preflight blocked: VERSION_DOWNGRADE_APPROVAL_REQUIRED; pass --allow-downgrade after reviewing cc plugin impact",
|
|
1709
1807
|
);
|
|
1710
1808
|
}
|
|
1809
|
+
resolved = await materializeRegistrySelection(
|
|
1810
|
+
url,
|
|
1811
|
+
resolved,
|
|
1812
|
+
options,
|
|
1813
|
+
marketplacePreflight,
|
|
1814
|
+
);
|
|
1815
|
+
installSource = resolved.source;
|
|
1816
|
+
archiveSourceAuthority = resolved.archiveAuthority || null;
|
|
1817
|
+
commandSourceAuthority = resolved.commandAuthority || null;
|
|
1818
|
+
registryResolutionAuthority =
|
|
1819
|
+
resolved.registryResolutionAuthority || registryResolutionAuthority;
|
|
1711
1820
|
expectedIdentity = {
|
|
1712
1821
|
name:
|
|
1713
1822
|
typeof resolved.entry.name === "string"
|
|
@@ -1728,16 +1837,15 @@ export function registerPluginCommand(program) {
|
|
|
1728
1837
|
source: url,
|
|
1729
1838
|
registry: url,
|
|
1730
1839
|
package: name || source,
|
|
1731
|
-
resolvedSource: resolved.source,
|
|
1732
|
-
ref:
|
|
1733
|
-
(typeof resolved.source === "string" &&
|
|
1734
|
-
resolved.source.includes("#") &&
|
|
1735
|
-
resolved.source.slice(resolved.source.indexOf("#") + 1)) ||
|
|
1736
|
-
null,
|
|
1840
|
+
resolvedSource: resolved.sourceIdentity || resolved.source,
|
|
1841
|
+
ref: resolved.ref || null,
|
|
1737
1842
|
offline: resolved.fromCache === true,
|
|
1738
1843
|
catalogAuthority: catalogAuthorityFromPreflight(
|
|
1739
1844
|
marketplacePreflight,
|
|
1740
1845
|
marketplaceImpact,
|
|
1846
|
+
null,
|
|
1847
|
+
archiveSourceAuthority,
|
|
1848
|
+
commandSourceAuthority,
|
|
1741
1849
|
),
|
|
1742
1850
|
};
|
|
1743
1851
|
if (resolved.fromCache) {
|
|
@@ -1790,6 +1898,8 @@ export function registerPluginCommand(program) {
|
|
|
1790
1898
|
marketplacePreflight,
|
|
1791
1899
|
marketplaceImpact,
|
|
1792
1900
|
remoteArtifacts.authority,
|
|
1901
|
+
archiveSourceAuthority,
|
|
1902
|
+
commandSourceAuthority,
|
|
1793
1903
|
);
|
|
1794
1904
|
}
|
|
1795
1905
|
}
|
|
@@ -1841,6 +1951,7 @@ export function registerPluginCommand(program) {
|
|
|
1841
1951
|
sourceMetadata,
|
|
1842
1952
|
expectedIdentity,
|
|
1843
1953
|
managedPolicy: managed,
|
|
1954
|
+
registryResolutionAuthority,
|
|
1844
1955
|
policySource: sourceMetadata?.registry || source,
|
|
1845
1956
|
remoteSbomBytes: remoteArtifacts?.sbomBytes || null,
|
|
1846
1957
|
offline: options.offline === true,
|
|
@@ -2036,6 +2147,7 @@ export function registerPluginCommand(program) {
|
|
|
2036
2147
|
options.registry,
|
|
2037
2148
|
{
|
|
2038
2149
|
token,
|
|
2150
|
+
config,
|
|
2039
2151
|
allowInsecure: options.allowInsecureRegistry === true,
|
|
2040
2152
|
offline: options.offline === true,
|
|
2041
2153
|
expectedSha256: registryDigestPins.get(options.registry),
|
|
@@ -2177,6 +2289,7 @@ export function registerPluginCommand(program) {
|
|
|
2177
2289
|
});
|
|
2178
2290
|
const resolved = await fetchRegistry(url, {
|
|
2179
2291
|
token,
|
|
2292
|
+
config,
|
|
2180
2293
|
allowInsecure: options.allowInsecureRegistry === true,
|
|
2181
2294
|
offline: options.offline === true,
|
|
2182
2295
|
expectedSha256: registryDigestPins.get(url),
|
|
@@ -3330,6 +3443,9 @@ export function registerPluginCommand(program) {
|
|
|
3330
3443
|
let marketplaceImpact = null;
|
|
3331
3444
|
let remoteArtifactRequest = null;
|
|
3332
3445
|
let remoteArtifacts = null;
|
|
3446
|
+
let archiveSourceAuthority = null;
|
|
3447
|
+
let commandSourceAuthority = null;
|
|
3448
|
+
let registryResolutionAuthority = null;
|
|
3333
3449
|
const registryUrls = normalizeRegistryUrls(options.registry);
|
|
3334
3450
|
const { isRemoteSource, resolveRemoteSource } =
|
|
3335
3451
|
await import("../lib/plugin-runtime/remote-source.js");
|
|
@@ -3391,6 +3507,7 @@ export function registerPluginCommand(program) {
|
|
|
3391
3507
|
allowInsecure: options.allowInsecureRegistry === true,
|
|
3392
3508
|
offline: options.offline === true,
|
|
3393
3509
|
expectedSha256: registryDigestPins.get(url),
|
|
3510
|
+
materialize: false,
|
|
3394
3511
|
...registryNetworkOptions(options),
|
|
3395
3512
|
});
|
|
3396
3513
|
marketplacePreflight = await buildRegistryInstallPreflight(
|
|
@@ -3399,7 +3516,8 @@ export function registerPluginCommand(program) {
|
|
|
3399
3516
|
process.cwd(),
|
|
3400
3517
|
);
|
|
3401
3518
|
}
|
|
3402
|
-
|
|
3519
|
+
registryResolutionAuthority =
|
|
3520
|
+
resolved.registryResolutionAuthority || null;
|
|
3403
3521
|
integritySha = resolved.sha256;
|
|
3404
3522
|
if (registryManifestDigestConflict(integritySha, options.sha256)) {
|
|
3405
3523
|
throw new Error(
|
|
@@ -3472,6 +3590,17 @@ export function registerPluginCommand(program) {
|
|
|
3472
3590
|
`registry candidate preflight blocked: UPDATE_IMPACT_DIGEST_MISMATCH (expected ${options.expectedImpactDigest}, actual ${marketplaceImpact.impactDigest})`,
|
|
3473
3591
|
);
|
|
3474
3592
|
}
|
|
3593
|
+
resolved = await materializeRegistrySelection(
|
|
3594
|
+
url,
|
|
3595
|
+
resolved,
|
|
3596
|
+
options,
|
|
3597
|
+
marketplacePreflight,
|
|
3598
|
+
);
|
|
3599
|
+
installSource = resolved.source;
|
|
3600
|
+
archiveSourceAuthority = resolved.archiveAuthority || null;
|
|
3601
|
+
commandSourceAuthority = resolved.commandAuthority || null;
|
|
3602
|
+
registryResolutionAuthority =
|
|
3603
|
+
resolved.registryResolutionAuthority || registryResolutionAuthority;
|
|
3475
3604
|
expectedIdentity = {
|
|
3476
3605
|
name:
|
|
3477
3606
|
typeof resolved.entry.name === "string"
|
|
@@ -3492,16 +3621,15 @@ export function registerPluginCommand(program) {
|
|
|
3492
3621
|
source: url,
|
|
3493
3622
|
registry: url,
|
|
3494
3623
|
package: name || source,
|
|
3495
|
-
resolvedSource: resolved.source,
|
|
3496
|
-
ref:
|
|
3497
|
-
(typeof resolved.source === "string" &&
|
|
3498
|
-
resolved.source.includes("#") &&
|
|
3499
|
-
resolved.source.slice(resolved.source.indexOf("#") + 1)) ||
|
|
3500
|
-
null,
|
|
3624
|
+
resolvedSource: resolved.sourceIdentity || resolved.source,
|
|
3625
|
+
ref: resolved.ref || null,
|
|
3501
3626
|
offline: resolved.fromCache === true,
|
|
3502
3627
|
catalogAuthority: catalogAuthorityFromPreflight(
|
|
3503
3628
|
marketplacePreflight,
|
|
3504
3629
|
marketplaceImpact,
|
|
3630
|
+
null,
|
|
3631
|
+
archiveSourceAuthority,
|
|
3632
|
+
commandSourceAuthority,
|
|
3505
3633
|
),
|
|
3506
3634
|
};
|
|
3507
3635
|
if (resolved.fromCache && !options.json) {
|
|
@@ -3554,6 +3682,8 @@ export function registerPluginCommand(program) {
|
|
|
3554
3682
|
marketplacePreflight,
|
|
3555
3683
|
marketplaceImpact,
|
|
3556
3684
|
remoteArtifacts.authority,
|
|
3685
|
+
archiveSourceAuthority,
|
|
3686
|
+
commandSourceAuthority,
|
|
3557
3687
|
);
|
|
3558
3688
|
}
|
|
3559
3689
|
}
|
|
@@ -3603,6 +3733,7 @@ export function registerPluginCommand(program) {
|
|
|
3603
3733
|
sourceMetadata,
|
|
3604
3734
|
expectedIdentity,
|
|
3605
3735
|
managedPolicy: managed,
|
|
3736
|
+
registryResolutionAuthority,
|
|
3606
3737
|
policySource: sourceMetadata?.registry || source,
|
|
3607
3738
|
remoteSbomBytes: remoteArtifacts?.sbomBytes || null,
|
|
3608
3739
|
offline: options.offline === true,
|