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