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.
Files changed (214) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/.build-hash +1 -1
  3. package/src/assets/web-panel/assets/{AIOps-C__nnraW.js → AIOps-vfoDb6HZ.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-CsKWHEZ-.js → ActionButton-Cm5f7p93.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-BhIjfjWO.js → Analytics-yRuvgWxa.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-BjuXFzWZ.js → AppLayout-BROsC4h1.js} +4 -4
  7. package/src/assets/web-panel/assets/{Artifacts-k6whDkZJ.js → Artifacts-CimHApb1.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-C4FBMYRh.js → Audit-DI8kr8zI.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-C_vRrSXk.js → BackgroundAgents-DSLzKy-n.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-CngFZeVp.js → Backup-DkH_n2r1.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-B_H9EBRm.js → BaseInput-CKSrUoRA.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-DLEC5kt7.js → Chat-ClwfMXUS.js} +3 -3
  13. package/src/assets/web-panel/assets/ChatBubbleRenderer-CjMaqfL7.js +1 -0
  14. package/src/assets/web-panel/assets/{Checkbox-m3ClR4xh.js → Checkbox-BYTehcQG.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-CmLSFrgp.js → Codegen-B8AMcp6J.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-DFGQteHN.js → Col-BNSogPo3.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-EUUVORHE.js → Community-JxPvGb8O.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-2PSg0Yr7.js → Compact-DF7bFAgE.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-CcKur7gB.js → Compliance-Bvhqnwrq.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-DK_Fezfa.js → Cowork-BDS0CJvM.js} +3 -3
  21. package/src/assets/web-panel/assets/{Cron-Dbw89xl7.js → Cron-DqvRfxoQ.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-CH66h_Ec.js → Crosschain-CDcIvnqS.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-D1igRb17.js → DID-D7jaUxU3.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-DVAsrobk.js → Dashboard-B5A18wEV.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-Dl7W8AQs.js → Dropdown-_6IVkGag.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-D5tpaEQC.js → EmailListRenderer-C9PeiKCG.js} +1 -1
  27. package/src/assets/web-panel/assets/{FamilyGuardDashboard-O_VQf8gq.js → FamilyGuardDashboard-DXjuEHrX.js} +1 -1
  28. package/src/assets/web-panel/assets/{Federation-BTVcgS9n.js → Federation-B4IAR9zv.js} +1 -1
  29. package/src/assets/web-panel/assets/{FormItemContext-BRnkJAIz.js → FormItemContext-CxQeSNx1.js} +1 -1
  30. package/src/assets/web-panel/assets/{GenericCardRenderer-8OWSCkDj.js → GenericCardRenderer-B8GS-Y3N.js} +1 -1
  31. package/src/assets/web-panel/assets/{Git-WXLYTQj2.js → Git-BS8SouUX.js} +2 -2
  32. package/src/assets/web-panel/assets/{Governance-BezaUhtc.js → Governance-Dq9aYb5Q.js} +1 -1
  33. package/src/assets/web-panel/assets/{Inference-CuRay3Gu.js → Inference-BrCEe9AJ.js} +1 -1
  34. package/src/assets/web-panel/assets/{KnowledgeGraph-DfWLDW1m.js → KnowledgeGraph-DybOpiY2.js} +1 -1
  35. package/src/assets/web-panel/assets/{Logs-C55y2pPY.js → Logs-DBpzbRfx.js} +2 -2
  36. package/src/assets/web-panel/assets/MarkdownRenderer-CFyt8iUd.js +1 -0
  37. package/src/assets/web-panel/assets/{Marketplace-Dk08Uycg.js → Marketplace-Cc7CCSCu.js} +1 -1
  38. package/src/assets/web-panel/assets/{McpTools-C11fSB5V.js → McpTools-DFaIhOfu.js} +3 -3
  39. package/src/assets/web-panel/assets/{Memory-mr0eZc97.js → Memory-KCqlp9ol.js} +2 -2
  40. package/src/assets/web-panel/assets/{MobileBridge-C0iCSRbb.js → MobileBridge-Bys84ySN.js} +1 -1
  41. package/src/assets/web-panel/assets/{MobileProjects-CY-xMG8Z.js → MobileProjects-B-6qU-je.js} +1 -1
  42. package/src/assets/web-panel/assets/{Mtc-Bplqc_Wc.js → Mtc-BgY-fvCq.js} +4 -4
  43. package/src/assets/web-panel/assets/{MtcAudit-BlzwsoSM.js → MtcAudit-B8pCmqQJ.js} +4 -4
  44. package/src/assets/web-panel/assets/{Multisig-BBLmTty6.js → Multisig-BbOmYutA.js} +3 -3
  45. package/src/assets/web-panel/assets/{NLProgramming-DtT1uf1W.js → NLProgramming-BocLQz_M.js} +1 -1
  46. package/src/assets/web-panel/assets/{Notes-DcqQAxTK.js → Notes-CSwbxEop.js} +3 -3
  47. package/src/assets/web-panel/assets/{NotificationSettings-cb0kWoZe.js → NotificationSettings-CqFNSYG3.js} +1 -1
  48. package/src/assets/web-panel/assets/{OrderTableRenderer-kw9HZQNN.js → OrderTableRenderer-C6gMfAk7.js} +1 -1
  49. package/src/assets/web-panel/assets/{Organization-DlTlbkUN.js → Organization-QrDXVdMJ.js} +4 -4
  50. package/src/assets/web-panel/assets/{Overflow-pp1qs-oY.js → Overflow-Cxntotjt.js} +1 -1
  51. package/src/assets/web-panel/assets/{P2P-BESLnyYz.js → P2P-CIdBOwNq.js} +2 -2
  52. package/src/assets/web-panel/assets/{PdhVaultBrowser-B-J1mGuf.js → PdhVaultBrowser-CT5aP8rD.js} +3 -3
  53. package/src/assets/web-panel/assets/{Permissions-B36PeT1_.js → Permissions-DH7OM8XU.js} +4 -4
  54. package/src/assets/web-panel/assets/{PersonalDataHub-CTK2ad-3.js → PersonalDataHub-CnJqbWce.js} +3 -3
  55. package/src/assets/web-panel/assets/{Pipeline-zJNGXsac.js → Pipeline-5C3HG1kH.js} +1 -1
  56. package/src/assets/web-panel/assets/{Privacy-b9fz0Qf0.js → Privacy-B4yIp7xK.js} +1 -1
  57. package/src/assets/web-panel/assets/{ProjectInit-DjZbZgiB.js → ProjectInit-BMvt-2M0.js} +2 -2
  58. package/src/assets/web-panel/assets/{ProjectSettings-C-hHJXlD.js → ProjectSettings-CvSTEMRG.js} +2 -2
  59. package/src/assets/web-panel/assets/Projects-BKBJxEek.js +1 -0
  60. package/src/assets/web-panel/assets/Providers-BdwUqFWN.js +1 -0
  61. package/src/assets/web-panel/assets/{QrScannerModal-A0yoQ3-3.js → QrScannerModal-DtnCKlTm.js} +1 -1
  62. package/src/assets/web-panel/assets/{QuickAsk-DrFgFJNC.js → QuickAsk-sTbgwyNr.js} +1 -1
  63. package/src/assets/web-panel/assets/{Recommend-KC8hF1g4.js → Recommend-Bzr14gSb.js} +1 -1
  64. package/src/assets/web-panel/assets/{RemoteSession-DGTPIk6u.js → RemoteSession-C_TF5IaJ.js} +2 -2
  65. package/src/assets/web-panel/assets/{Reputation-QmbwM7Yk.js → Reputation-GCAM4H2K.js} +1 -1
  66. package/src/assets/web-panel/assets/{Row-BxjJylia.js → Row-Dir0r6OQ.js} +1 -1
  67. package/src/assets/web-panel/assets/{RssFeed-B7Wda1J6.js → RssFeed-CpGnlecX.js} +2 -2
  68. package/src/assets/web-panel/assets/{Search-_plQ_YSA.js → Search-DMMamC6u.js} +1 -1
  69. package/src/assets/web-panel/assets/{Security-CD2YJZfx.js → Security-yqay5yG-.js} +4 -4
  70. package/src/assets/web-panel/assets/{Services-qQE7NmwE.js → Services-C5i2wh9G.js} +2 -2
  71. package/src/assets/web-panel/assets/{Skeleton-DgQqkFf7.js → Skeleton-vUqk35yj.js} +1 -1
  72. package/src/assets/web-panel/assets/{Skills-C4C0oFFt.js → Skills-DzcSkhot.js} +1 -1
  73. package/src/assets/web-panel/assets/{Sla-Px2N2B5c.js → Sla-CB6qbYNr.js} +1 -1
  74. package/src/assets/web-panel/assets/{SpeechSettings-DN6C3lQd.js → SpeechSettings-BHUI7cox.js} +1 -1
  75. package/src/assets/web-panel/assets/{SyncSettings-jm5aH_m7.js → SyncSettings-D-RrsxTJ.js} +2 -2
  76. package/src/assets/web-panel/assets/{Tasks-DlkJcv67.js → Tasks-DFxdOJiq.js} +1 -1
  77. package/src/assets/web-panel/assets/{Templates-DyrTHUBs.js → Templates-SKAob_Aq.js} +1 -1
  78. package/src/assets/web-panel/assets/{Tenant-mC434PtL.js → Tenant-BPfsfHQ-.js} +1 -1
  79. package/src/assets/web-panel/assets/{Terminal-o0_s3NgK.js → Terminal-8iw7FpUf.js} +2 -2
  80. package/src/assets/web-panel/assets/{TimelineRenderer-DAGlAXOw.js → TimelineRenderer-C4Gjj5Su.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tokens-BnulS_bs.js → Tokens-COYhN18e.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trigger-suQbVXYM.js → Trigger-B-JzXcf6.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trust-DbIJAPo5.js → Trust-BJ5bg0nI.js} +1 -1
  84. package/src/assets/web-panel/assets/{UkeySign-CQNpbIHi.js → UkeySign-BG_ByRMf.js} +1 -1
  85. package/src/assets/web-panel/assets/{VideoEditing-D8aWCERk.js → VideoEditing-B3kOnSiU.js} +1 -1
  86. package/src/assets/web-panel/assets/{Wallet-CuLpYfZc.js → Wallet-CcoGFnK7.js} +2 -2
  87. package/src/assets/web-panel/assets/{WebAuthn-CsfG8ZMc.js → WebAuthn-DdT8vRC_.js} +4 -4
  88. package/src/assets/web-panel/assets/{WorkflowEditor-BYsEAZbd.js → WorkflowEditor-CZu3M9N8.js} +1 -1
  89. package/src/assets/web-panel/assets/{chat-FT4Um3-I.js → chat-DxJt3Qba.js} +1 -1
  90. package/src/assets/web-panel/assets/{colors-CKbS_Wlt.js → colors-DdYfwJaB.js} +1 -1
  91. package/src/assets/web-panel/assets/{compact-item-CFJtzuJM.js → compact-item-BG3SUzwj.js} +1 -1
  92. package/src/assets/web-panel/assets/{createContext-B9kSRW6K.js → createContext-By51z2-1.js} +1 -1
  93. package/src/assets/web-panel/assets/devWarning-DorRZcI9.js +1 -0
  94. package/src/assets/web-panel/assets/{hasIn-DR-x0Xpi.js → hasIn-B0apZ3KJ.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-DjEP7WkH.js → index-3jWkIu5j.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-7jHr_A_k.js → index-B3rWuPMW.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-DcfxhKXR.js → index-B5rLiEo0.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-tqSEHPRT.js → index-BBPf3TpM.js} +1 -1
  99. package/src/assets/web-panel/assets/index-BETiL0a3.js +1 -0
  100. package/src/assets/web-panel/assets/{index-Cr2FLUsD.js → index-BIrJfqO4.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-Bt4fS2eL.js → index-BLIbGOLX.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-BwR7yc2h.js → index-BP94CrBV.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-BVPU43b1.js → index-BWF8_mkx.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-DShSkww-.js → index-BYINoRLK.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-Bzz0C1BZ.js → index-BZ_0qm4g.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-KqDaCApw.js → index-BewKYrX9.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-BW-t9n-q.js → index-BfWYsB9t.js} +1 -1
  108. package/src/assets/web-panel/assets/index-BhAVHuW8.js +1 -0
  109. package/src/assets/web-panel/assets/{index-B7osrXqy.js → index-Bissefox.js} +3 -3
  110. package/src/assets/web-panel/assets/{index-DW4BWjTk.js → index-BkvcEo4p.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-DdkIhfi-.js → index-Bos5_aMV.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-DTxNy0ZU.js → index-C1C9i79A.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-QBSeNVO3.js → index-CAhHirVH.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-D4LfPvWA.js → index-CNIxXMmN.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-C_enk9I_.js → index-CW93tZDv.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-WE08gMJP.js → index-CWEuZWCK.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-r2VI1Ikk.js → index-Cp6e-hGw.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-Dap9c3eD.js → index-CpjZhgNd.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-DWdqx7zI.js → index-CzmQElZy.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-BGbPnC5x.js → index-DCn8IcxV.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-DiNUEpSQ.js → index-DE76D-kA.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-DtkFqPVA.js → index-DaIz0NAW.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-CGaXUsIs.js → index-Da_WBdLX.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-B3ZX81mK.js → index-Dz49VOyQ.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-BK3TiKVq.js → index-Q2SCX-MI.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-CJmIQ9XR.js → index-RD6O-0C6.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-CvrCCqJt.js → index-SQqOlR3d.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-BI5hP_qy.js → index-ZFbps9po.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-DeSgw-WV.js → index-ZxtP8jG7.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-DMGmg497.js → index-bP_VlDb4.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-BfFCQHL3.js → index-kf57LJ93.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-OSzjTzGM.js → index-oxRrmFO9.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-C2JvmYRc.js → index-p1_8SbI1.js} +1 -1
  134. package/src/assets/web-panel/assets/{initDefaultProps-Dd7n7VgI.js → initDefaultProps-BWJktcg8.js} +1 -1
  135. package/src/assets/web-panel/assets/{motion-BwxouRw1.js → motion-BEXBzUFV.js} +1 -1
  136. package/src/assets/web-panel/assets/{move-DObN0PG9.js → move-BUKwn2sx.js} +1 -1
  137. package/src/assets/web-panel/assets/{mtc-parser-B3nOUQc7.js → mtc-parser-FTI7btqQ.js} +1 -1
  138. package/src/assets/web-panel/assets/{omit-o9WU2Nbl.js → omit-CsLtSPH3.js} +1 -1
  139. package/src/assets/web-panel/assets/parsers-YNLm7sQ0.js +4 -0
  140. package/src/assets/web-panel/assets/{pickAttrs-CL_vvfQ_.js → pickAttrs-DWZxsT_S.js} +1 -1
  141. package/src/assets/web-panel/assets/{placementArrow-CYrM2tyK.js → placementArrow-Bcfs43CX.js} +1 -1
  142. package/src/assets/web-panel/assets/{responsiveObserve-k_06cQ96.js → responsiveObserve-a9bcC1p-.js} +1 -1
  143. package/src/assets/web-panel/assets/{slide-CPKG0pxS.js → slide-BDTzgOXN.js} +1 -1
  144. package/src/assets/web-panel/assets/{statusUtils-BDDEeLTw.js → statusUtils-Iq1j_HUg.js} +1 -1
  145. package/src/assets/web-panel/assets/{styleChecker-Cmb7RTh7.js → styleChecker-DAZEYxeh.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFlexGapSupport-e2IedC4N.js → useFlexGapSupport-DVkjyDrh.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFs-CE_gxVnm.js → useFs-wXTpNTHt.js} +1 -1
  148. package/src/assets/web-panel/assets/{usePersonalDataHub-BkMIIKMz.js → usePersonalDataHub-CtQM_aZr.js} +1 -1
  149. package/src/assets/web-panel/assets/{vnode-DW886XV1.js → vnode-hjEoG85v.js} +1 -1
  150. package/src/assets/web-panel/assets/{zoom-Dwo_adaf.js → zoom-BHVpyKg_.js} +1 -1
  151. package/src/assets/web-panel/index.html +1 -1
  152. package/src/command-help-index.json +3 -3
  153. package/src/commands/agent.js +14 -2
  154. package/src/commands/artifacts.js +235 -0
  155. package/src/commands/background-session.js +100 -10
  156. package/src/commands/cowork.js +86 -57
  157. package/src/commands/mcp.js +5 -0
  158. package/src/commands/plugin.js +145 -29
  159. package/src/commands/remote-control.js +295 -110
  160. package/src/commands/session-location.js +20 -1
  161. package/src/commands/session-message.js +171 -0
  162. package/src/commands/session.js +75 -69
  163. package/src/data/changelog.json +29 -3
  164. package/src/gateways/ws/message-dispatcher.js +57 -0
  165. package/src/harness/mcp-client.js +141 -10
  166. package/src/lib/artifact-access-ledger.js +1 -0
  167. package/src/lib/artifact-deletion-ledger.js +1 -0
  168. package/src/lib/artifact-recovery.js +970 -0
  169. package/src/lib/artifact-workbench-projection.js +171 -0
  170. package/src/lib/background-session-transport.js +153 -27
  171. package/src/lib/dynamic-workflow-runtime.js +408 -1
  172. package/src/lib/execution-location-target.js +4 -2
  173. package/src/lib/mcp-client.js +2 -0
  174. package/src/lib/mcp-headers-helper.js +47 -5
  175. package/src/lib/mcp-oauth.js +55 -6
  176. package/src/lib/mcp-stdio-executable-identity.js +16 -0
  177. package/src/lib/mcp-stdio-native-code-policy.js +74 -0
  178. package/src/lib/mcp-stdio-package-materialization.js +12 -3
  179. package/src/lib/mcp-tls.js +230 -0
  180. package/src/lib/output-styles.js +12 -0
  181. package/src/lib/plugin-runtime/install.js +614 -71
  182. package/src/lib/plugin-runtime/marketplace-archive-source.js +331 -0
  183. package/src/lib/plugin-runtime/marketplace-catalog.js +52 -6
  184. package/src/lib/plugin-runtime/marketplace-remote-artifacts.js +1 -0
  185. package/src/lib/plugin-runtime/marketplace-source-adapter.js +163 -0
  186. package/src/lib/plugin-runtime/marketplace-source-cache.js +11 -1
  187. package/src/lib/plugin-runtime/remote-source.js +435 -55
  188. package/src/lib/plugin-security.js +393 -41
  189. package/src/lib/plugin-source-identity.js +850 -0
  190. package/src/lib/process-execution-broker/index.js +112 -0
  191. package/src/lib/process-execution-broker/platform-sandbox.js +57 -3
  192. package/src/lib/process-execution-broker/workspace-transaction.js +26 -0
  193. package/src/lib/remote-approval-bridge.js +136 -46
  194. package/src/lib/remote-control.js +217 -31
  195. package/src/lib/session-message-fabric.js +1105 -0
  196. package/src/lib/session-projection.js +171 -12
  197. package/src/lib/session-runtime-retention.js +155 -0
  198. package/src/lib/settings-loader.cjs +29 -0
  199. package/src/repl/agent-repl.js +51 -14
  200. package/src/repl/permission-prompt.js +31 -8
  201. package/src/repl/repl-keybindings.js +55 -0
  202. package/src/runtime/agent-core.js +63 -2
  203. package/src/runtime/headless-runner.js +47 -66
  204. package/src/runtime/headless-stream.js +18 -24
  205. package/src/runtime/mcp-config.js +2 -0
  206. package/src/runtime/policies/agent-policy.js +2 -0
  207. package/src/assets/web-panel/assets/ChatBubbleRenderer-xijcWkJe.js +0 -1
  208. package/src/assets/web-panel/assets/MarkdownRenderer-hDpWdiBc.js +0 -1
  209. package/src/assets/web-panel/assets/Projects-BC9KSDM6.js +0 -1
  210. package/src/assets/web-panel/assets/Providers-Dz-CAYYU.js +0 -1
  211. package/src/assets/web-panel/assets/devWarning-DJZ0gAMu.js +0 -1
  212. package/src/assets/web-panel/assets/index-Bizb4hkw.js +0 -1
  213. package/src/assets/web-panel/assets/index-OHSl-xCh.js +0 -1
  214. package/src/assets/web-panel/assets/parsers-UEvh_ShA.js +0 -4
@@ -258,7 +258,8 @@ async function buildRegistrySetSelection(
258
258
  caFile,
259
259
  } = {},
260
260
  ) {
261
- const { fetchRegistry, resolveRegistryToken } =
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 (!selection.selected) {
315
- return { catalog, selection, preflight: null, resolved: null };
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
- source: entry.ref ? `${entry.source}#${entry.ref}` : entry.source,
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
- installSource = resolved.source;
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
- installSource = resolved.source;
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,