chainlesschain 0.165.4 → 0.165.6
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 +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-C__nnraW.js → AIOps-vfoDb6HZ.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CsKWHEZ-.js → ActionButton-Cm5f7p93.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-BhIjfjWO.js → Analytics-yRuvgWxa.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-BjuXFzWZ.js → AppLayout-BROsC4h1.js} +4 -4
- package/src/assets/web-panel/assets/{Artifacts-k6whDkZJ.js → Artifacts-CimHApb1.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-C4FBMYRh.js → Audit-DI8kr8zI.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-C_vRrSXk.js → BackgroundAgents-DSLzKy-n.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-CngFZeVp.js → Backup-DkH_n2r1.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-B_H9EBRm.js → BaseInput-CKSrUoRA.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-DLEC5kt7.js → Chat-ClwfMXUS.js} +3 -3
- package/src/assets/web-panel/assets/ChatBubbleRenderer-CjMaqfL7.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-m3ClR4xh.js → Checkbox-BYTehcQG.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-CmLSFrgp.js → Codegen-B8AMcp6J.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DFGQteHN.js → Col-BNSogPo3.js} +1 -1
- package/src/assets/web-panel/assets/{Community-EUUVORHE.js → Community-JxPvGb8O.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-2PSg0Yr7.js → Compact-DF7bFAgE.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CcKur7gB.js → Compliance-Bvhqnwrq.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-DK_Fezfa.js → Cowork-BDS0CJvM.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-Dbw89xl7.js → Cron-DqvRfxoQ.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-CH66h_Ec.js → Crosschain-CDcIvnqS.js} +1 -1
- package/src/assets/web-panel/assets/{DID-D1igRb17.js → DID-D7jaUxU3.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-DVAsrobk.js → Dashboard-B5A18wEV.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-Dl7W8AQs.js → Dropdown-_6IVkGag.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-D5tpaEQC.js → EmailListRenderer-C9PeiKCG.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-O_VQf8gq.js → FamilyGuardDashboard-DXjuEHrX.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-BTVcgS9n.js → Federation-B4IAR9zv.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-BRnkJAIz.js → FormItemContext-CxQeSNx1.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-8OWSCkDj.js → GenericCardRenderer-B8GS-Y3N.js} +1 -1
- package/src/assets/web-panel/assets/{Git-WXLYTQj2.js → Git-BS8SouUX.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-BezaUhtc.js → Governance-Dq9aYb5Q.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CuRay3Gu.js → Inference-BrCEe9AJ.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DfWLDW1m.js → KnowledgeGraph-DybOpiY2.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-C55y2pPY.js → Logs-DBpzbRfx.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-CFyt8iUd.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-Dk08Uycg.js → Marketplace-Cc7CCSCu.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-C11fSB5V.js → McpTools-DFaIhOfu.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-mr0eZc97.js → Memory-KCqlp9ol.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-C0iCSRbb.js → MobileBridge-Bys84ySN.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-CY-xMG8Z.js → MobileProjects-B-6qU-je.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-Bplqc_Wc.js → Mtc-BgY-fvCq.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-BlzwsoSM.js → MtcAudit-B8pCmqQJ.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-BBLmTty6.js → Multisig-BbOmYutA.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-DtT1uf1W.js → NLProgramming-BocLQz_M.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-DcqQAxTK.js → Notes-CSwbxEop.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-cb0kWoZe.js → NotificationSettings-CqFNSYG3.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-kw9HZQNN.js → OrderTableRenderer-C6gMfAk7.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-DlTlbkUN.js → Organization-QrDXVdMJ.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-pp1qs-oY.js → Overflow-Cxntotjt.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-BESLnyYz.js → P2P-CIdBOwNq.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-B-J1mGuf.js → PdhVaultBrowser-CT5aP8rD.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-B36PeT1_.js → Permissions-DH7OM8XU.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CTK2ad-3.js → PersonalDataHub-CnJqbWce.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline-zJNGXsac.js → Pipeline-5C3HG1kH.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-b9fz0Qf0.js → Privacy-B4yIp7xK.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-DjZbZgiB.js → ProjectInit-BMvt-2M0.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-C-hHJXlD.js → ProjectSettings-CvSTEMRG.js} +2 -2
- package/src/assets/web-panel/assets/Projects-BKBJxEek.js +1 -0
- package/src/assets/web-panel/assets/Providers-BdwUqFWN.js +1 -0
- package/src/assets/web-panel/assets/{QrScannerModal-A0yoQ3-3.js → QrScannerModal-DtnCKlTm.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-DrFgFJNC.js → QuickAsk-sTbgwyNr.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-KC8hF1g4.js → Recommend-Bzr14gSb.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-DGTPIk6u.js → RemoteSession-C_TF5IaJ.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-QmbwM7Yk.js → Reputation-GCAM4H2K.js} +1 -1
- package/src/assets/web-panel/assets/{Row-BxjJylia.js → Row-Dir0r6OQ.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-B7Wda1J6.js → RssFeed-CpGnlecX.js} +2 -2
- package/src/assets/web-panel/assets/{Search-_plQ_YSA.js → Search-DMMamC6u.js} +1 -1
- package/src/assets/web-panel/assets/{Security-CD2YJZfx.js → Security-yqay5yG-.js} +4 -4
- package/src/assets/web-panel/assets/{Services-qQE7NmwE.js → Services-C5i2wh9G.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DgQqkFf7.js → Skeleton-vUqk35yj.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-C4C0oFFt.js → Skills-DzcSkhot.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-Px2N2B5c.js → Sla-CB6qbYNr.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-DN6C3lQd.js → SpeechSettings-BHUI7cox.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-jm5aH_m7.js → SyncSettings-D-RrsxTJ.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-DlkJcv67.js → Tasks-DFxdOJiq.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-DyrTHUBs.js → Templates-SKAob_Aq.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-mC434PtL.js → Tenant-BPfsfHQ-.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-o0_s3NgK.js → Terminal-8iw7FpUf.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-DAGlAXOw.js → TimelineRenderer-C4Gjj5Su.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BnulS_bs.js → Tokens-COYhN18e.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-suQbVXYM.js → Trigger-B-JzXcf6.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-DbIJAPo5.js → Trust-BJ5bg0nI.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-CQNpbIHi.js → UkeySign-BG_ByRMf.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-D8aWCERk.js → VideoEditing-B3kOnSiU.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-CuLpYfZc.js → Wallet-CcoGFnK7.js} +2 -2
- package/src/assets/web-panel/assets/{WebAuthn-CsfG8ZMc.js → WebAuthn-DdT8vRC_.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-BYsEAZbd.js → WorkflowEditor-CZu3M9N8.js} +1 -1
- package/src/assets/web-panel/assets/{chat-FT4Um3-I.js → chat-DxJt3Qba.js} +1 -1
- package/src/assets/web-panel/assets/{colors-CKbS_Wlt.js → colors-DdYfwJaB.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-CFJtzuJM.js → compact-item-BG3SUzwj.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-B9kSRW6K.js → createContext-By51z2-1.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DorRZcI9.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-DR-x0Xpi.js → hasIn-B0apZ3KJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DjEP7WkH.js → index-3jWkIu5j.js} +1 -1
- package/src/assets/web-panel/assets/{index-7jHr_A_k.js → index-B3rWuPMW.js} +1 -1
- package/src/assets/web-panel/assets/{index-DcfxhKXR.js → index-B5rLiEo0.js} +1 -1
- package/src/assets/web-panel/assets/{index-tqSEHPRT.js → index-BBPf3TpM.js} +1 -1
- package/src/assets/web-panel/assets/index-BETiL0a3.js +1 -0
- package/src/assets/web-panel/assets/{index-Cr2FLUsD.js → index-BIrJfqO4.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bt4fS2eL.js → index-BLIbGOLX.js} +1 -1
- package/src/assets/web-panel/assets/{index-BwR7yc2h.js → index-BP94CrBV.js} +1 -1
- package/src/assets/web-panel/assets/{index-BVPU43b1.js → index-BWF8_mkx.js} +1 -1
- package/src/assets/web-panel/assets/{index-DShSkww-.js → index-BYINoRLK.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bzz0C1BZ.js → index-BZ_0qm4g.js} +1 -1
- package/src/assets/web-panel/assets/{index-KqDaCApw.js → index-BewKYrX9.js} +1 -1
- package/src/assets/web-panel/assets/{index-BW-t9n-q.js → index-BfWYsB9t.js} +1 -1
- package/src/assets/web-panel/assets/index-BhAVHuW8.js +1 -0
- package/src/assets/web-panel/assets/{index-B7osrXqy.js → index-Bissefox.js} +3 -3
- package/src/assets/web-panel/assets/{index-DW4BWjTk.js → index-BkvcEo4p.js} +1 -1
- package/src/assets/web-panel/assets/{index-DdkIhfi-.js → index-Bos5_aMV.js} +1 -1
- package/src/assets/web-panel/assets/{index-DTxNy0ZU.js → index-C1C9i79A.js} +1 -1
- package/src/assets/web-panel/assets/{index-QBSeNVO3.js → index-CAhHirVH.js} +1 -1
- package/src/assets/web-panel/assets/{index-D4LfPvWA.js → index-CNIxXMmN.js} +1 -1
- package/src/assets/web-panel/assets/{index-C_enk9I_.js → index-CW93tZDv.js} +1 -1
- package/src/assets/web-panel/assets/{index-WE08gMJP.js → index-CWEuZWCK.js} +1 -1
- package/src/assets/web-panel/assets/{index-r2VI1Ikk.js → index-Cp6e-hGw.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dap9c3eD.js → index-CpjZhgNd.js} +1 -1
- package/src/assets/web-panel/assets/{index-DWdqx7zI.js → index-CzmQElZy.js} +1 -1
- package/src/assets/web-panel/assets/{index-BGbPnC5x.js → index-DCn8IcxV.js} +1 -1
- package/src/assets/web-panel/assets/{index-DiNUEpSQ.js → index-DE76D-kA.js} +1 -1
- package/src/assets/web-panel/assets/{index-DtkFqPVA.js → index-DaIz0NAW.js} +1 -1
- package/src/assets/web-panel/assets/{index-CGaXUsIs.js → index-Da_WBdLX.js} +1 -1
- package/src/assets/web-panel/assets/{index-B3ZX81mK.js → index-Dz49VOyQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BK3TiKVq.js → index-Q2SCX-MI.js} +1 -1
- package/src/assets/web-panel/assets/{index-CJmIQ9XR.js → index-RD6O-0C6.js} +1 -1
- package/src/assets/web-panel/assets/{index-CvrCCqJt.js → index-SQqOlR3d.js} +1 -1
- package/src/assets/web-panel/assets/{index-BI5hP_qy.js → index-ZFbps9po.js} +1 -1
- package/src/assets/web-panel/assets/{index-DeSgw-WV.js → index-ZxtP8jG7.js} +1 -1
- package/src/assets/web-panel/assets/{index-DMGmg497.js → index-bP_VlDb4.js} +1 -1
- package/src/assets/web-panel/assets/{index-BfFCQHL3.js → index-kf57LJ93.js} +1 -1
- package/src/assets/web-panel/assets/{index-OSzjTzGM.js → index-oxRrmFO9.js} +1 -1
- package/src/assets/web-panel/assets/{index-C2JvmYRc.js → index-p1_8SbI1.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-Dd7n7VgI.js → initDefaultProps-BWJktcg8.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BwxouRw1.js → motion-BEXBzUFV.js} +1 -1
- package/src/assets/web-panel/assets/{move-DObN0PG9.js → move-BUKwn2sx.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-B3nOUQc7.js → mtc-parser-FTI7btqQ.js} +1 -1
- package/src/assets/web-panel/assets/{omit-o9WU2Nbl.js → omit-CsLtSPH3.js} +1 -1
- package/src/assets/web-panel/assets/parsers-YNLm7sQ0.js +4 -0
- package/src/assets/web-panel/assets/{pickAttrs-CL_vvfQ_.js → pickAttrs-DWZxsT_S.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-CYrM2tyK.js → placementArrow-Bcfs43CX.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-k_06cQ96.js → responsiveObserve-a9bcC1p-.js} +1 -1
- package/src/assets/web-panel/assets/{slide-CPKG0pxS.js → slide-BDTzgOXN.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-BDDEeLTw.js → statusUtils-Iq1j_HUg.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-Cmb7RTh7.js → styleChecker-DAZEYxeh.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-e2IedC4N.js → useFlexGapSupport-DVkjyDrh.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-CE_gxVnm.js → useFs-wXTpNTHt.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-BkMIIKMz.js → usePersonalDataHub-CtQM_aZr.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DW886XV1.js → vnode-hjEoG85v.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-Dwo_adaf.js → zoom-BHVpyKg_.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 +14 -2
- package/src/commands/artifacts.js +235 -0
- package/src/commands/background-session.js +100 -10
- package/src/commands/cowork.js +86 -57
- package/src/commands/mcp.js +5 -0
- package/src/commands/plugin.js +145 -29
- package/src/commands/remote-control.js +295 -110
- package/src/commands/session-location.js +20 -1
- package/src/commands/session-message.js +171 -0
- package/src/commands/session.js +75 -69
- package/src/data/changelog.json +29 -3
- package/src/gateways/ws/message-dispatcher.js +57 -0
- package/src/harness/mcp-client.js +141 -10
- package/src/lib/artifact-access-ledger.js +1 -0
- package/src/lib/artifact-deletion-ledger.js +1 -0
- package/src/lib/artifact-recovery.js +970 -0
- package/src/lib/artifact-workbench-projection.js +171 -0
- package/src/lib/background-session-transport.js +153 -27
- package/src/lib/dynamic-workflow-runtime.js +408 -1
- package/src/lib/execution-location-target.js +4 -2
- package/src/lib/mcp-client.js +2 -0
- package/src/lib/mcp-headers-helper.js +47 -5
- package/src/lib/mcp-oauth.js +55 -6
- package/src/lib/mcp-stdio-executable-identity.js +16 -0
- package/src/lib/mcp-stdio-native-code-policy.js +74 -0
- package/src/lib/mcp-stdio-package-materialization.js +12 -3
- package/src/lib/mcp-tls.js +230 -0
- package/src/lib/output-styles.js +12 -0
- package/src/lib/plugin-runtime/install.js +614 -71
- package/src/lib/plugin-runtime/marketplace-archive-source.js +331 -0
- package/src/lib/plugin-runtime/marketplace-catalog.js +52 -6
- package/src/lib/plugin-runtime/marketplace-remote-artifacts.js +1 -0
- package/src/lib/plugin-runtime/marketplace-source-adapter.js +163 -0
- package/src/lib/plugin-runtime/marketplace-source-cache.js +11 -1
- package/src/lib/plugin-runtime/remote-source.js +435 -55
- package/src/lib/plugin-security.js +393 -41
- package/src/lib/plugin-source-identity.js +850 -0
- package/src/lib/process-execution-broker/index.js +112 -0
- package/src/lib/process-execution-broker/platform-sandbox.js +57 -3
- package/src/lib/process-execution-broker/workspace-transaction.js +26 -0
- package/src/lib/remote-approval-bridge.js +136 -46
- package/src/lib/remote-control.js +217 -31
- package/src/lib/session-message-fabric.js +1105 -0
- package/src/lib/session-projection.js +171 -12
- package/src/lib/session-runtime-retention.js +155 -0
- package/src/lib/settings-loader.cjs +29 -0
- package/src/repl/agent-repl.js +51 -14
- package/src/repl/permission-prompt.js +31 -8
- package/src/repl/repl-keybindings.js +55 -0
- package/src/runtime/agent-core.js +63 -2
- package/src/runtime/headless-runner.js +47 -66
- package/src/runtime/headless-stream.js +18 -24
- package/src/runtime/mcp-config.js +2 -0
- package/src/runtime/policies/agent-policy.js +2 -0
- package/src/assets/web-panel/assets/ChatBubbleRenderer-xijcWkJe.js +0 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-hDpWdiBc.js +0 -1
- package/src/assets/web-panel/assets/Projects-BC9KSDM6.js +0 -1
- package/src/assets/web-panel/assets/Providers-Dz-CAYYU.js +0 -1
- package/src/assets/web-panel/assets/devWarning-DJZ0gAMu.js +0 -1
- package/src/assets/web-panel/assets/index-Bizb4hkw.js +0 -1
- package/src/assets/web-panel/assets/index-OHSl-xCh.js +0 -1
- package/src/assets/web-panel/assets/parsers-UEvh_ShA.js +0 -4
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,7 @@ async function buildRegistrySetSelection(
|
|
|
281
282
|
const resolvedToken = resolveRegistryToken(url, { token, config });
|
|
282
283
|
const resolved = await fetchRegistry(url, {
|
|
283
284
|
token: resolvedToken,
|
|
285
|
+
managedPolicy,
|
|
284
286
|
allowInsecure,
|
|
285
287
|
offline,
|
|
286
288
|
expectedSha256: registryDigestPins.get(url),
|
|
@@ -301,6 +303,41 @@ async function buildRegistrySetSelection(
|
|
|
301
303
|
}),
|
|
302
304
|
);
|
|
303
305
|
const { VERSION } = await import("../constants.js");
|
|
306
|
+
// Select and authorize the highest-ranked candidate before inspecting the
|
|
307
|
+
// installed-plugin tree. Installed versions affect dependency diagnostics,
|
|
308
|
+
// but never candidate ordering; a blocked resolved source must therefore
|
|
309
|
+
// fail before any project/user plugin filesystem access.
|
|
310
|
+
const preliminaryCatalog = buildPluginMarketplaceCatalog({
|
|
311
|
+
sources,
|
|
312
|
+
installed: {},
|
|
313
|
+
hostVersion: VERSION,
|
|
314
|
+
strict,
|
|
315
|
+
});
|
|
316
|
+
const preliminarySelection = buildPluginMarketplaceCandidateSelection({
|
|
317
|
+
catalog: preliminaryCatalog,
|
|
318
|
+
name,
|
|
319
|
+
});
|
|
320
|
+
if (!preliminarySelection.selected) {
|
|
321
|
+
return {
|
|
322
|
+
catalog: preliminaryCatalog,
|
|
323
|
+
selection: preliminarySelection,
|
|
324
|
+
preflight: null,
|
|
325
|
+
resolved: null,
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
const sourceIndex = preliminarySelection.selected.registry.priority;
|
|
329
|
+
const entryIndex = preliminarySelection.selected.registry.entryIndex;
|
|
330
|
+
const source = sources[sourceIndex];
|
|
331
|
+
const entry = source?.registry?.plugins?.[entryIndex];
|
|
332
|
+
if (!entry || entry.name !== preliminarySelection.selected.name) {
|
|
333
|
+
throw new Error(
|
|
334
|
+
"selected registry entry no longer matches catalog authority",
|
|
335
|
+
);
|
|
336
|
+
}
|
|
337
|
+
const authorized = authorizeRegistryPluginEntry(source.registry, entry, {
|
|
338
|
+
registryUrl: registryUrls[sourceIndex],
|
|
339
|
+
cwd,
|
|
340
|
+
});
|
|
304
341
|
const catalog = buildPluginMarketplaceCatalog({
|
|
305
342
|
sources,
|
|
306
343
|
installed: await discoverInstalledPluginVersions(cwd),
|
|
@@ -311,31 +348,23 @@ async function buildRegistrySetSelection(
|
|
|
311
348
|
catalog,
|
|
312
349
|
name,
|
|
313
350
|
});
|
|
314
|
-
if (
|
|
315
|
-
|
|
351
|
+
if (
|
|
352
|
+
selection.selected?.registry.priority !== sourceIndex ||
|
|
353
|
+
selection.selected?.registry.entryIndex !== entryIndex
|
|
354
|
+
) {
|
|
355
|
+
throw new Error("selected registry entry changed during local preflight");
|
|
316
356
|
}
|
|
317
357
|
const preflight = buildPluginMarketplaceInstallPreflightFromSelection({
|
|
318
358
|
catalog,
|
|
319
359
|
selection,
|
|
320
360
|
}).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
361
|
return {
|
|
331
362
|
catalog,
|
|
332
363
|
selection,
|
|
333
364
|
preflight,
|
|
334
365
|
resolved: {
|
|
335
366
|
registryUrl: registryUrls[sourceIndex],
|
|
336
|
-
|
|
337
|
-
ref: entry.ref || null,
|
|
338
|
-
sha256: entry.sha256 || null,
|
|
367
|
+
...authorized,
|
|
339
368
|
entry,
|
|
340
369
|
fromCache: source.fromCache === true,
|
|
341
370
|
documentSha256: source.documentSha256 || null,
|
|
@@ -344,6 +373,59 @@ async function buildRegistrySetSelection(
|
|
|
344
373
|
};
|
|
345
374
|
}
|
|
346
375
|
|
|
376
|
+
async function materializeRegistrySelection(
|
|
377
|
+
url,
|
|
378
|
+
resolved,
|
|
379
|
+
options,
|
|
380
|
+
marketplacePreflight,
|
|
381
|
+
) {
|
|
382
|
+
const {
|
|
383
|
+
inspectRegistryEntrySource,
|
|
384
|
+
resolveRegistryEntrySource,
|
|
385
|
+
resolveRegistryToken,
|
|
386
|
+
} = await import("../lib/plugin-runtime/remote-source.js");
|
|
387
|
+
const inspected = inspectRegistryEntrySource(resolved.entry);
|
|
388
|
+
const expectedType = marketplacePreflight.package?.type || "git";
|
|
389
|
+
const sourceAuthority = (value) => {
|
|
390
|
+
try {
|
|
391
|
+
const parsed = new URL(String(value));
|
|
392
|
+
parsed.username = "";
|
|
393
|
+
parsed.password = "";
|
|
394
|
+
parsed.search = "";
|
|
395
|
+
parsed.hash = "";
|
|
396
|
+
return parsed.toString();
|
|
397
|
+
} catch {
|
|
398
|
+
return value;
|
|
399
|
+
}
|
|
400
|
+
};
|
|
401
|
+
if (
|
|
402
|
+
inspected.sourceType !== resolved.sourceType ||
|
|
403
|
+
inspected.sourceIdentity !== resolved.sourceIdentity ||
|
|
404
|
+
inspected.ref !== resolved.ref ||
|
|
405
|
+
inspected.sourceType !== expectedType ||
|
|
406
|
+
sourceAuthority(inspected.sourceIdentity) !==
|
|
407
|
+
marketplacePreflight.package?.source ||
|
|
408
|
+
inspected.ref !== (marketplacePreflight.package?.ref || null) ||
|
|
409
|
+
(inspected.sourceType === "archive" &&
|
|
410
|
+
inspected.archiveSpec.sha256 !==
|
|
411
|
+
marketplacePreflight.package?.archiveSha256)
|
|
412
|
+
) {
|
|
413
|
+
throw new Error(
|
|
414
|
+
"registry candidate preflight revision changed before source fetch",
|
|
415
|
+
);
|
|
416
|
+
}
|
|
417
|
+
if (resolved.sourceType !== "archive") return resolved;
|
|
418
|
+
const config = await loadOptionalPluginConfig();
|
|
419
|
+
const materialized = await resolveRegistryEntrySource(url, resolved.entry, {
|
|
420
|
+
registryResolutionAuthority: resolved.registryResolutionAuthority,
|
|
421
|
+
token: resolveRegistryToken(url, { token: options.token, config }),
|
|
422
|
+
allowInsecure: options.allowInsecureRegistry === true,
|
|
423
|
+
offline: options.offline === true,
|
|
424
|
+
...registryNetworkOptions(options),
|
|
425
|
+
});
|
|
426
|
+
return { ...resolved, ...materialized };
|
|
427
|
+
}
|
|
428
|
+
|
|
347
429
|
async function buildRegistryInstallPreflight(url, resolved, cwd) {
|
|
348
430
|
const { VERSION } = await import("../constants.js");
|
|
349
431
|
const { buildPluginMarketplaceInstallPreflight } =
|
|
@@ -364,6 +446,7 @@ function catalogAuthorityFromPreflight(
|
|
|
364
446
|
preflight,
|
|
365
447
|
impact = null,
|
|
366
448
|
remoteArtifactEvidence = null,
|
|
449
|
+
archiveSource = null,
|
|
367
450
|
) {
|
|
368
451
|
return {
|
|
369
452
|
catalogDigest: preflight.catalogDigest,
|
|
@@ -417,6 +500,7 @@ function catalogAuthorityFromPreflight(
|
|
|
417
500
|
: {}),
|
|
418
501
|
...(impact ? { updateImpactDigest: impact.impactDigest } : {}),
|
|
419
502
|
...(remoteArtifactEvidence ? { remoteArtifactEvidence } : {}),
|
|
503
|
+
...(archiveSource ? { archiveSource } : {}),
|
|
420
504
|
};
|
|
421
505
|
}
|
|
422
506
|
|
|
@@ -475,6 +559,10 @@ async function installedCatalogAuthorityMatches(
|
|
|
475
559
|
(!remoteArtifactEvidence ||
|
|
476
560
|
authority?.remoteArtifactEvidence?.evidenceDigest ===
|
|
477
561
|
remoteArtifactEvidence.evidenceDigest) &&
|
|
562
|
+
(preflight.package?.type !== "archive" ||
|
|
563
|
+
(authority?.archiveSource?.url === preflight.package.source &&
|
|
564
|
+
authority?.archiveSource?.archiveSha256 ===
|
|
565
|
+
preflight.package.archiveSha256)) &&
|
|
478
566
|
remoteSbomComparisonAuthorityMatches(
|
|
479
567
|
authority,
|
|
480
568
|
remoteArtifactEvidence,
|
|
@@ -1582,6 +1670,8 @@ export function registerPluginCommand(program) {
|
|
|
1582
1670
|
let marketplaceImpact = null;
|
|
1583
1671
|
let remoteArtifactRequest = null;
|
|
1584
1672
|
let remoteArtifacts = null;
|
|
1673
|
+
let archiveSourceAuthority = null;
|
|
1674
|
+
let registryResolutionAuthority = null;
|
|
1585
1675
|
const registryUrls = normalizeRegistryUrls(options.registry);
|
|
1586
1676
|
const { isRemoteSource, resolveRemoteSource } =
|
|
1587
1677
|
await import("../lib/plugin-runtime/remote-source.js");
|
|
@@ -1643,6 +1733,7 @@ export function registerPluginCommand(program) {
|
|
|
1643
1733
|
allowInsecure: options.allowInsecureRegistry === true,
|
|
1644
1734
|
offline: options.offline === true,
|
|
1645
1735
|
expectedSha256: registryDigestPins.get(url),
|
|
1736
|
+
materialize: false,
|
|
1646
1737
|
...registryNetworkOptions(options),
|
|
1647
1738
|
});
|
|
1648
1739
|
marketplacePreflight = await buildRegistryInstallPreflight(
|
|
@@ -1651,7 +1742,8 @@ export function registerPluginCommand(program) {
|
|
|
1651
1742
|
process.cwd(),
|
|
1652
1743
|
);
|
|
1653
1744
|
}
|
|
1654
|
-
|
|
1745
|
+
registryResolutionAuthority =
|
|
1746
|
+
resolved.registryResolutionAuthority || null;
|
|
1655
1747
|
integritySha = resolved.sha256;
|
|
1656
1748
|
if (registryManifestDigestConflict(integritySha, options.sha256)) {
|
|
1657
1749
|
throw new Error(
|
|
@@ -1708,6 +1800,16 @@ export function registerPluginCommand(program) {
|
|
|
1708
1800
|
"registry candidate preflight blocked: VERSION_DOWNGRADE_APPROVAL_REQUIRED; pass --allow-downgrade after reviewing cc plugin impact",
|
|
1709
1801
|
);
|
|
1710
1802
|
}
|
|
1803
|
+
resolved = await materializeRegistrySelection(
|
|
1804
|
+
url,
|
|
1805
|
+
resolved,
|
|
1806
|
+
options,
|
|
1807
|
+
marketplacePreflight,
|
|
1808
|
+
);
|
|
1809
|
+
installSource = resolved.source;
|
|
1810
|
+
archiveSourceAuthority = resolved.archiveAuthority || null;
|
|
1811
|
+
registryResolutionAuthority =
|
|
1812
|
+
resolved.registryResolutionAuthority || registryResolutionAuthority;
|
|
1711
1813
|
expectedIdentity = {
|
|
1712
1814
|
name:
|
|
1713
1815
|
typeof resolved.entry.name === "string"
|
|
@@ -1728,16 +1830,14 @@ export function registerPluginCommand(program) {
|
|
|
1728
1830
|
source: url,
|
|
1729
1831
|
registry: url,
|
|
1730
1832
|
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,
|
|
1833
|
+
resolvedSource: resolved.sourceIdentity || resolved.source,
|
|
1834
|
+
ref: resolved.ref || null,
|
|
1737
1835
|
offline: resolved.fromCache === true,
|
|
1738
1836
|
catalogAuthority: catalogAuthorityFromPreflight(
|
|
1739
1837
|
marketplacePreflight,
|
|
1740
1838
|
marketplaceImpact,
|
|
1839
|
+
null,
|
|
1840
|
+
archiveSourceAuthority,
|
|
1741
1841
|
),
|
|
1742
1842
|
};
|
|
1743
1843
|
if (resolved.fromCache) {
|
|
@@ -1790,6 +1890,7 @@ export function registerPluginCommand(program) {
|
|
|
1790
1890
|
marketplacePreflight,
|
|
1791
1891
|
marketplaceImpact,
|
|
1792
1892
|
remoteArtifacts.authority,
|
|
1893
|
+
archiveSourceAuthority,
|
|
1793
1894
|
);
|
|
1794
1895
|
}
|
|
1795
1896
|
}
|
|
@@ -1841,6 +1942,7 @@ export function registerPluginCommand(program) {
|
|
|
1841
1942
|
sourceMetadata,
|
|
1842
1943
|
expectedIdentity,
|
|
1843
1944
|
managedPolicy: managed,
|
|
1945
|
+
registryResolutionAuthority,
|
|
1844
1946
|
policySource: sourceMetadata?.registry || source,
|
|
1845
1947
|
remoteSbomBytes: remoteArtifacts?.sbomBytes || null,
|
|
1846
1948
|
offline: options.offline === true,
|
|
@@ -3330,6 +3432,8 @@ export function registerPluginCommand(program) {
|
|
|
3330
3432
|
let marketplaceImpact = null;
|
|
3331
3433
|
let remoteArtifactRequest = null;
|
|
3332
3434
|
let remoteArtifacts = null;
|
|
3435
|
+
let archiveSourceAuthority = null;
|
|
3436
|
+
let registryResolutionAuthority = null;
|
|
3333
3437
|
const registryUrls = normalizeRegistryUrls(options.registry);
|
|
3334
3438
|
const { isRemoteSource, resolveRemoteSource } =
|
|
3335
3439
|
await import("../lib/plugin-runtime/remote-source.js");
|
|
@@ -3391,6 +3495,7 @@ export function registerPluginCommand(program) {
|
|
|
3391
3495
|
allowInsecure: options.allowInsecureRegistry === true,
|
|
3392
3496
|
offline: options.offline === true,
|
|
3393
3497
|
expectedSha256: registryDigestPins.get(url),
|
|
3498
|
+
materialize: false,
|
|
3394
3499
|
...registryNetworkOptions(options),
|
|
3395
3500
|
});
|
|
3396
3501
|
marketplacePreflight = await buildRegistryInstallPreflight(
|
|
@@ -3399,7 +3504,8 @@ export function registerPluginCommand(program) {
|
|
|
3399
3504
|
process.cwd(),
|
|
3400
3505
|
);
|
|
3401
3506
|
}
|
|
3402
|
-
|
|
3507
|
+
registryResolutionAuthority =
|
|
3508
|
+
resolved.registryResolutionAuthority || null;
|
|
3403
3509
|
integritySha = resolved.sha256;
|
|
3404
3510
|
if (registryManifestDigestConflict(integritySha, options.sha256)) {
|
|
3405
3511
|
throw new Error(
|
|
@@ -3472,6 +3578,16 @@ export function registerPluginCommand(program) {
|
|
|
3472
3578
|
`registry candidate preflight blocked: UPDATE_IMPACT_DIGEST_MISMATCH (expected ${options.expectedImpactDigest}, actual ${marketplaceImpact.impactDigest})`,
|
|
3473
3579
|
);
|
|
3474
3580
|
}
|
|
3581
|
+
resolved = await materializeRegistrySelection(
|
|
3582
|
+
url,
|
|
3583
|
+
resolved,
|
|
3584
|
+
options,
|
|
3585
|
+
marketplacePreflight,
|
|
3586
|
+
);
|
|
3587
|
+
installSource = resolved.source;
|
|
3588
|
+
archiveSourceAuthority = resolved.archiveAuthority || null;
|
|
3589
|
+
registryResolutionAuthority =
|
|
3590
|
+
resolved.registryResolutionAuthority || registryResolutionAuthority;
|
|
3475
3591
|
expectedIdentity = {
|
|
3476
3592
|
name:
|
|
3477
3593
|
typeof resolved.entry.name === "string"
|
|
@@ -3492,16 +3608,14 @@ export function registerPluginCommand(program) {
|
|
|
3492
3608
|
source: url,
|
|
3493
3609
|
registry: url,
|
|
3494
3610
|
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,
|
|
3611
|
+
resolvedSource: resolved.sourceIdentity || resolved.source,
|
|
3612
|
+
ref: resolved.ref || null,
|
|
3501
3613
|
offline: resolved.fromCache === true,
|
|
3502
3614
|
catalogAuthority: catalogAuthorityFromPreflight(
|
|
3503
3615
|
marketplacePreflight,
|
|
3504
3616
|
marketplaceImpact,
|
|
3617
|
+
null,
|
|
3618
|
+
archiveSourceAuthority,
|
|
3505
3619
|
),
|
|
3506
3620
|
};
|
|
3507
3621
|
if (resolved.fromCache && !options.json) {
|
|
@@ -3554,6 +3668,7 @@ export function registerPluginCommand(program) {
|
|
|
3554
3668
|
marketplacePreflight,
|
|
3555
3669
|
marketplaceImpact,
|
|
3556
3670
|
remoteArtifacts.authority,
|
|
3671
|
+
archiveSourceAuthority,
|
|
3557
3672
|
);
|
|
3558
3673
|
}
|
|
3559
3674
|
}
|
|
@@ -3603,6 +3718,7 @@ export function registerPluginCommand(program) {
|
|
|
3603
3718
|
sourceMetadata,
|
|
3604
3719
|
expectedIdentity,
|
|
3605
3720
|
managedPolicy: managed,
|
|
3721
|
+
registryResolutionAuthority,
|
|
3606
3722
|
policySource: sourceMetadata?.registry || source,
|
|
3607
3723
|
remoteSbomBytes: remoteArtifacts?.sbomBytes || null,
|
|
3608
3724
|
offline: options.offline === true,
|