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
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import {
|
|
2
|
+
marketplaceCommandDescriptorIdentity,
|
|
3
|
+
normalizeMarketplaceCommandDescriptor,
|
|
4
|
+
} from "./marketplace-command-descriptor.js";
|
|
5
|
+
|
|
6
|
+
const SHA256_RE = /^[a-f0-9]{64}$/u;
|
|
7
|
+
const DISABLED_DYNAMIC_SOURCE_TYPES = new Set(["headers-helper", "headershelper"]);
|
|
8
|
+
|
|
9
|
+
export const MARKETPLACE_DYNAMIC_SOURCE_DISABLED_CODE =
|
|
10
|
+
"CC_MARKETPLACE_DYNAMIC_SOURCE_DISABLED";
|
|
11
|
+
|
|
12
|
+
function sourceError(code, message) {
|
|
13
|
+
const error = new Error(message);
|
|
14
|
+
error.code = code;
|
|
15
|
+
return error;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function bounded(value, max) {
|
|
19
|
+
const text = typeof value === "string" ? value.trim() : "";
|
|
20
|
+
return text.length > 0 && text.length <= max ? text : null;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function safeUrl(value, label) {
|
|
24
|
+
const raw = bounded(value, 4096);
|
|
25
|
+
if (!raw) throw sourceError("INVALID_SOURCE_URL", `${label} URL is missing`);
|
|
26
|
+
let url;
|
|
27
|
+
try {
|
|
28
|
+
url = new URL(raw);
|
|
29
|
+
} catch {
|
|
30
|
+
throw sourceError("INVALID_SOURCE_URL", `${label} URL is invalid`);
|
|
31
|
+
}
|
|
32
|
+
if (url.username || url.password) {
|
|
33
|
+
throw sourceError(
|
|
34
|
+
"SOURCE_CREDENTIALS_REJECTED",
|
|
35
|
+
`${label} URL must not contain credentials`,
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
if (!new Set(["https:", "http:"]).has(url.protocol)) {
|
|
39
|
+
throw sourceError(
|
|
40
|
+
"INVALID_SOURCE_URL",
|
|
41
|
+
`${label} URL must use HTTPS or loopback HTTP`,
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
const requestUrl = url.href;
|
|
45
|
+
url.search = "";
|
|
46
|
+
url.hash = "";
|
|
47
|
+
return { url: url.href, requestUrl };
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function disabledDynamicSource(type) {
|
|
51
|
+
return Object.freeze({
|
|
52
|
+
type: "dynamic-disabled",
|
|
53
|
+
requestedType: type,
|
|
54
|
+
enabled: false,
|
|
55
|
+
code: MARKETPLACE_DYNAMIC_SOURCE_DISABLED_CODE,
|
|
56
|
+
reason:
|
|
57
|
+
"dynamic Marketplace source/auth adapters are disabled by product policy",
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Normalize one registry package source without executing it. Git strings keep
|
|
63
|
+
* the legacy shape. Archive sources require an HTTPS URL and exact compressed
|
|
64
|
+
* byte digest. Legacy shell-string command/helper adapters remain
|
|
65
|
+
* representable for UI diagnostics but can never become executable authority.
|
|
66
|
+
* A typed `source: { type: "command", executable, args, cwd, ... }` is the
|
|
67
|
+
* one deliberate exception: it is parsed as an exact direct-argv descriptor.
|
|
68
|
+
*/
|
|
69
|
+
export function normalizeMarketplacePackageSource(entry, options = {}) {
|
|
70
|
+
const row = entry && typeof entry === "object" ? entry : {};
|
|
71
|
+
if (row.command != null || row.headersHelper != null) {
|
|
72
|
+
const disabled = disabledDynamicSource(
|
|
73
|
+
row.command != null ? "command" : "headers-helper",
|
|
74
|
+
);
|
|
75
|
+
if (options.forExecution === true) {
|
|
76
|
+
throw sourceError(disabled.code, disabled.reason);
|
|
77
|
+
}
|
|
78
|
+
return disabled;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const source = row.source;
|
|
82
|
+
if (typeof source === "string") {
|
|
83
|
+
const value = bounded(source, 4096);
|
|
84
|
+
if (!value) {
|
|
85
|
+
throw sourceError("MISSING_PACKAGE_SOURCE", "plugin source is missing");
|
|
86
|
+
}
|
|
87
|
+
return Object.freeze({
|
|
88
|
+
type: "git",
|
|
89
|
+
source: value,
|
|
90
|
+
ref: bounded(row.ref, 256),
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
if (!source || typeof source !== "object" || Array.isArray(source)) {
|
|
94
|
+
throw sourceError("MISSING_PACKAGE_SOURCE", "plugin source is missing");
|
|
95
|
+
}
|
|
96
|
+
if (source.command != null || source.headersHelper != null) {
|
|
97
|
+
const disabled = disabledDynamicSource(
|
|
98
|
+
source.command != null ? "command" : "headers-helper",
|
|
99
|
+
);
|
|
100
|
+
if (options.forExecution === true) {
|
|
101
|
+
throw sourceError(disabled.code, disabled.reason);
|
|
102
|
+
}
|
|
103
|
+
return disabled;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const type = String(source.type || "")
|
|
107
|
+
.trim()
|
|
108
|
+
.toLowerCase();
|
|
109
|
+
if (DISABLED_DYNAMIC_SOURCE_TYPES.has(type)) {
|
|
110
|
+
const disabled = disabledDynamicSource(type);
|
|
111
|
+
if (options.forExecution === true) {
|
|
112
|
+
throw sourceError(disabled.code, disabled.reason);
|
|
113
|
+
}
|
|
114
|
+
return disabled;
|
|
115
|
+
}
|
|
116
|
+
if (type === "command") {
|
|
117
|
+
const descriptor = normalizeMarketplaceCommandDescriptor(source, {
|
|
118
|
+
kind: "source",
|
|
119
|
+
allowType: true,
|
|
120
|
+
label: "Marketplace command source descriptor",
|
|
121
|
+
});
|
|
122
|
+
const normalized = {
|
|
123
|
+
type: "command",
|
|
124
|
+
mode: descriptor.mode,
|
|
125
|
+
identity: marketplaceCommandDescriptorIdentity(source),
|
|
126
|
+
};
|
|
127
|
+
// Descriptor values are deliberately retained for the immediate local
|
|
128
|
+
// materializer but are not enumerable, so catalog/listing/provenance JSON
|
|
129
|
+
// cannot accidentally disclose a local argv, path, or environment value.
|
|
130
|
+
for (const [key, value] of Object.entries(descriptor)) {
|
|
131
|
+
Object.defineProperty(normalized, key, {
|
|
132
|
+
value,
|
|
133
|
+
enumerable: false,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
return Object.freeze(normalized);
|
|
137
|
+
}
|
|
138
|
+
if (type === "git") {
|
|
139
|
+
const value = bounded(source.url ?? source.source, 4096);
|
|
140
|
+
if (!value) {
|
|
141
|
+
throw sourceError("MISSING_PACKAGE_SOURCE", "git source URL is missing");
|
|
142
|
+
}
|
|
143
|
+
return Object.freeze({
|
|
144
|
+
type: "git",
|
|
145
|
+
source: value,
|
|
146
|
+
ref: bounded(source.ref ?? row.ref, 256),
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
if (type !== "archive") {
|
|
150
|
+
throw sourceError(
|
|
151
|
+
"UNSUPPORTED_PACKAGE_SOURCE",
|
|
152
|
+
`unsupported Marketplace source type: ${type || "unknown"}`,
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const archiveUrl = safeUrl(source.url, "archive source");
|
|
157
|
+
const sha256 = String(source.sha256 || "")
|
|
158
|
+
.trim()
|
|
159
|
+
.toLowerCase();
|
|
160
|
+
if (!SHA256_RE.test(sha256)) {
|
|
161
|
+
throw sourceError(
|
|
162
|
+
"ARCHIVE_DIGEST_REQUIRED",
|
|
163
|
+
"archive source requires a 64-character lowercase SHA-256 digest",
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
const format = String(source.format || "tgz").toLowerCase();
|
|
167
|
+
if (!new Set(["tgz", "tar.gz"]).has(format)) {
|
|
168
|
+
throw sourceError(
|
|
169
|
+
"ARCHIVE_FORMAT_UNSUPPORTED",
|
|
170
|
+
"archive source format must be tgz or tar.gz",
|
|
171
|
+
);
|
|
172
|
+
}
|
|
173
|
+
const normalized = {
|
|
174
|
+
type: "archive",
|
|
175
|
+
url: archiveUrl.url,
|
|
176
|
+
sha256,
|
|
177
|
+
format: "tgz",
|
|
178
|
+
};
|
|
179
|
+
Object.defineProperty(normalized, "requestUrl", {
|
|
180
|
+
value: archiveUrl.requestUrl,
|
|
181
|
+
enumerable: false,
|
|
182
|
+
});
|
|
183
|
+
return Object.freeze(normalized);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
export function assertMarketplaceSourceExecutable(entry) {
|
|
187
|
+
return normalizeMarketplacePackageSource(entry, { forExecution: true });
|
|
188
|
+
}
|
|
@@ -29,6 +29,9 @@ export function marketplaceSourceCacheSpec(
|
|
|
29
29
|
if (sourceMetadata?.type !== "registry") return null;
|
|
30
30
|
const source = cleanString(sourceMetadata.resolvedSource, 4096);
|
|
31
31
|
const ref = cleanString(sourceMetadata.ref, 256);
|
|
32
|
+
const sourceDigest =
|
|
33
|
+
normalizeSha256(sourceMetadata.resolvedSourceDigest) ||
|
|
34
|
+
(source ? sha256Canonical({ source, ref }) : null);
|
|
32
35
|
const expectations = sourceMetadata.catalogAuthority?.artifactExpectations;
|
|
33
36
|
const manifestSha256 = normalizeSha256(expectations?.manifest?.sha256);
|
|
34
37
|
let payloadSchemaVersion = cleanString(expectations?.sbom?.format, 128);
|
|
@@ -57,6 +60,7 @@ export function marketplaceSourceCacheSpec(
|
|
|
57
60
|
}
|
|
58
61
|
if (
|
|
59
62
|
!source ||
|
|
63
|
+
!sourceDigest ||
|
|
60
64
|
!manifestSha256 ||
|
|
61
65
|
!payloadSha256 ||
|
|
62
66
|
!isMarketplacePayloadSbomFormat(payloadSchemaVersion)
|
|
@@ -66,6 +70,7 @@ export function marketplaceSourceCacheSpec(
|
|
|
66
70
|
const keyAuthority = {
|
|
67
71
|
schemaVersion: PLUGIN_MARKETPLACE_SOURCE_CACHE_SCHEMA,
|
|
68
72
|
source,
|
|
73
|
+
sourceDigest,
|
|
69
74
|
ref,
|
|
70
75
|
manifestSha256,
|
|
71
76
|
payload: {
|
|
@@ -180,6 +185,7 @@ function buildCacheAuthority(payload, spec) {
|
|
|
180
185
|
schemaVersion: PLUGIN_MARKETPLACE_SOURCE_CACHE_SCHEMA,
|
|
181
186
|
cacheKey: spec.cacheKey,
|
|
182
187
|
source: spec.source,
|
|
188
|
+
sourceDigest: spec.sourceDigest,
|
|
183
189
|
ref: spec.ref,
|
|
184
190
|
manifestSha256,
|
|
185
191
|
payload: {
|
|
@@ -279,7 +285,11 @@ function readAuthority(file) {
|
|
|
279
285
|
} catch {
|
|
280
286
|
throw new Error("Marketplace source cache authority is not valid UTF-8");
|
|
281
287
|
}
|
|
282
|
-
|
|
288
|
+
try {
|
|
289
|
+
return JSON.parse(text);
|
|
290
|
+
} catch {
|
|
291
|
+
throw new Error("Marketplace source cache authority is invalid JSON");
|
|
292
|
+
}
|
|
283
293
|
} finally {
|
|
284
294
|
if (descriptor != null) fs.closeSync(descriptor);
|
|
285
295
|
}
|
|
@@ -80,7 +80,9 @@ export function collectPluginMcpServers(opts = {}) {
|
|
|
80
80
|
}
|
|
81
81
|
// An MCP stdio server spawns a command — gate it behind trust so a cloned
|
|
82
82
|
// repo's project plugin can't get a server launched the moment cc starts.
|
|
83
|
-
const { trusted, skipped } = partitionByTrust(plugins
|
|
83
|
+
const { trusted, skipped } = partitionByTrust(plugins, {
|
|
84
|
+
workspaceRoot: opts.cwd,
|
|
85
|
+
});
|
|
84
86
|
warnUntrustedOnce(
|
|
85
87
|
skipped.filter((p) => p.manifest?.components?.mcp).map((p) => p.name),
|
|
86
88
|
"mcp",
|
|
@@ -116,7 +116,9 @@ export function collectPluginMonitors(opts = {}) {
|
|
|
116
116
|
return [];
|
|
117
117
|
}
|
|
118
118
|
// A monitor spawns a command — gate it behind trust.
|
|
119
|
-
const { trusted, skipped } = partitionByTrust(plugins
|
|
119
|
+
const { trusted, skipped } = partitionByTrust(plugins, {
|
|
120
|
+
workspaceRoot: opts.cwd,
|
|
121
|
+
});
|
|
120
122
|
warnUntrustedOnce(
|
|
121
123
|
skipped.filter((p) => p.manifest?.components?.monitors).map((p) => p.name),
|
|
122
124
|
"monitors",
|