chainlesschain 0.165.6 → 0.165.9

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 (251) hide show
  1. package/package.json +2 -1
  2. package/src/assets/web-panel/.build-hash +1 -1
  3. package/src/assets/web-panel/assets/{AIOps-vfoDb6HZ.js → AIOps-DxwjrnEA.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-Cm5f7p93.js → ActionButton-JdbYowzn.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-yRuvgWxa.js → Analytics-C06GCahv.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-BROsC4h1.js → AppLayout-BUVEEyi1.js} +4 -4
  7. package/src/assets/web-panel/assets/{Artifacts-CimHApb1.js → Artifacts-D_ORzkJd.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-DI8kr8zI.js → Audit-8o_Y5ejG.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-DSLzKy-n.js → BackgroundAgents-DrkHd5VU.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-DkH_n2r1.js → Backup-CKBZCX11.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-CKSrUoRA.js → BaseInput-C8HkI399.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-ClwfMXUS.js → Chat-zb2H2Wux.js} +6 -6
  13. package/src/assets/web-panel/assets/{ChatBubbleRenderer-CjMaqfL7.js → ChatBubbleRenderer-BDcNpU_F.js} +1 -1
  14. package/src/assets/web-panel/assets/{Checkbox-BYTehcQG.js → Checkbox-MwPtQmNz.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-B8AMcp6J.js → Codegen-3p5QCkFK.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-BNSogPo3.js → Col-BPLlhn52.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-JxPvGb8O.js → Community-C-3dBNOM.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-DF7bFAgE.js → Compact-BUcy-F_b.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-Bvhqnwrq.js → Compliance-CI8NxT8m.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-BDS0CJvM.js → Cowork-DaDEBS-Q.js} +3 -3
  21. package/src/assets/web-panel/assets/{Cron-DqvRfxoQ.js → Cron-BSv9HXu5.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-CDcIvnqS.js → Crosschain-yuiKlJmv.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-D7jaUxU3.js → DID-D6LfldB0.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-B5A18wEV.js → Dashboard-CBhLqG61.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-_6IVkGag.js → Dropdown-BG8pIl3O.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-C9PeiKCG.js → EmailListRenderer-CY92VIE6.js} +1 -1
  27. package/src/assets/web-panel/assets/{FamilyGuardDashboard-DXjuEHrX.js → FamilyGuardDashboard-1Q_ehauM.js} +1 -1
  28. package/src/assets/web-panel/assets/{Federation-B4IAR9zv.js → Federation-D3XirJIU.js} +1 -1
  29. package/src/assets/web-panel/assets/{FormItemContext-CxQeSNx1.js → FormItemContext-DfI9UuGZ.js} +1 -1
  30. package/src/assets/web-panel/assets/{GenericCardRenderer-B8GS-Y3N.js → GenericCardRenderer-IeCZk2m7.js} +1 -1
  31. package/src/assets/web-panel/assets/{Git-BS8SouUX.js → Git-DzK4IJAZ.js} +2 -2
  32. package/src/assets/web-panel/assets/{Governance-Dq9aYb5Q.js → Governance-BHf5KfmQ.js} +1 -1
  33. package/src/assets/web-panel/assets/{Inference-BrCEe9AJ.js → Inference-BmaxSALS.js} +1 -1
  34. package/src/assets/web-panel/assets/{KnowledgeGraph-DybOpiY2.js → KnowledgeGraph-BgePFLA9.js} +1 -1
  35. package/src/assets/web-panel/assets/{Logs-DBpzbRfx.js → Logs-nqgxpOc4.js} +2 -2
  36. package/src/assets/web-panel/assets/MarkdownRenderer-xkX6izBt.js +1 -0
  37. package/src/assets/web-panel/assets/{Marketplace-Cc7CCSCu.js → Marketplace-Bu8to-86.js} +1 -1
  38. package/src/assets/web-panel/assets/McpTools-BFWTzEk0.js +4 -0
  39. package/src/assets/web-panel/assets/{Memory-KCqlp9ol.js → Memory-B026G2GA.js} +2 -2
  40. package/src/assets/web-panel/assets/{MobileBridge-Bys84ySN.js → MobileBridge-CM2Eeg6I.js} +1 -1
  41. package/src/assets/web-panel/assets/{MobileProjects-B-6qU-je.js → MobileProjects-B79Ob3hy.js} +1 -1
  42. package/src/assets/web-panel/assets/{Mtc-BgY-fvCq.js → Mtc-CxevSZuV.js} +4 -4
  43. package/src/assets/web-panel/assets/{MtcAudit-B8pCmqQJ.js → MtcAudit-X396cPEX.js} +4 -4
  44. package/src/assets/web-panel/assets/{Multisig-BbOmYutA.js → Multisig-HWIB_aZ1.js} +3 -3
  45. package/src/assets/web-panel/assets/{NLProgramming-BocLQz_M.js → NLProgramming-gnYD1Xwy.js} +1 -1
  46. package/src/assets/web-panel/assets/{Notes-CSwbxEop.js → Notes-Dn2Gf_J1.js} +3 -3
  47. package/src/assets/web-panel/assets/{NotificationSettings-CqFNSYG3.js → NotificationSettings-BRKBQ5rq.js} +1 -1
  48. package/src/assets/web-panel/assets/{OrderTableRenderer-C6gMfAk7.js → OrderTableRenderer-Dy___Cgo.js} +1 -1
  49. package/src/assets/web-panel/assets/{Organization-QrDXVdMJ.js → Organization-cqfccxnt.js} +4 -4
  50. package/src/assets/web-panel/assets/{Overflow-Cxntotjt.js → Overflow-CSX4FHN3.js} +1 -1
  51. package/src/assets/web-panel/assets/{P2P-CIdBOwNq.js → P2P-Bwa4aghp.js} +2 -2
  52. package/src/assets/web-panel/assets/{PdhVaultBrowser-CT5aP8rD.js → PdhVaultBrowser-Dhszyjig.js} +3 -3
  53. package/src/assets/web-panel/assets/{Permissions-DH7OM8XU.js → Permissions-CXzTyk6e.js} +4 -4
  54. package/src/assets/web-panel/assets/{PersonalDataHub-CnJqbWce.js → PersonalDataHub-CFCAAJbb.js} +4 -4
  55. package/src/assets/web-panel/assets/{Pipeline-5C3HG1kH.js → Pipeline-BPJbx6xt.js} +1 -1
  56. package/src/assets/web-panel/assets/{Privacy-B4yIp7xK.js → Privacy-BbiXvEHz.js} +1 -1
  57. package/src/assets/web-panel/assets/{ProjectInit-BMvt-2M0.js → ProjectInit-B-s7-wSD.js} +2 -2
  58. package/src/assets/web-panel/assets/{ProjectSettings-CvSTEMRG.js → ProjectSettings-Dyug206y.js} +2 -2
  59. package/src/assets/web-panel/assets/{Projects-BKBJxEek.js → Projects-BtAI5Fwo.js} +1 -1
  60. package/src/assets/web-panel/assets/{Providers-BdwUqFWN.js → Providers-JpIPmz6N.js} +1 -1
  61. package/src/assets/web-panel/assets/{QrScannerModal-DtnCKlTm.js → QrScannerModal-CZdoN64A.js} +1 -1
  62. package/src/assets/web-panel/assets/{QuickAsk-sTbgwyNr.js → QuickAsk-BwvnoRIT.js} +1 -1
  63. package/src/assets/web-panel/assets/{Recommend-Bzr14gSb.js → Recommend-ASMlMQrD.js} +1 -1
  64. package/src/assets/web-panel/assets/{RemoteSession-C_TF5IaJ.js → RemoteSession-BiJzKFKi.js} +3 -3
  65. package/src/assets/web-panel/assets/{Reputation-GCAM4H2K.js → Reputation-C80TWLIO.js} +1 -1
  66. package/src/assets/web-panel/assets/{Row-Dir0r6OQ.js → Row-C1VNmjmX.js} +1 -1
  67. package/src/assets/web-panel/assets/{RssFeed-CpGnlecX.js → RssFeed-T2MyGUlG.js} +3 -3
  68. package/src/assets/web-panel/assets/{Search-DMMamC6u.js → Search-DXM6O83L.js} +1 -1
  69. package/src/assets/web-panel/assets/{Security-yqay5yG-.js → Security-nv69kU7W.js} +3 -3
  70. package/src/assets/web-panel/assets/{Services-C5i2wh9G.js → Services-AyHWe7Qj.js} +2 -2
  71. package/src/assets/web-panel/assets/{Skeleton-vUqk35yj.js → Skeleton-D6PWLxFI.js} +1 -1
  72. package/src/assets/web-panel/assets/{Skills-DzcSkhot.js → Skills-BqVeOmNQ.js} +1 -1
  73. package/src/assets/web-panel/assets/{Sla-CB6qbYNr.js → Sla-BegIPl9M.js} +1 -1
  74. package/src/assets/web-panel/assets/{SpeechSettings-BHUI7cox.js → SpeechSettings-CKJn3xk-.js} +1 -1
  75. package/src/assets/web-panel/assets/{SyncSettings-D-RrsxTJ.js → SyncSettings-Th4cnAMl.js} +2 -2
  76. package/src/assets/web-panel/assets/{Tasks-DFxdOJiq.js → Tasks-BuKfBroh.js} +1 -1
  77. package/src/assets/web-panel/assets/{Templates-SKAob_Aq.js → Templates-CMuWN8Ac.js} +1 -1
  78. package/src/assets/web-panel/assets/{Tenant-BPfsfHQ-.js → Tenant-C4je8E8Q.js} +1 -1
  79. package/src/assets/web-panel/assets/{Terminal-8iw7FpUf.js → Terminal-agJESOcO.js} +2 -2
  80. package/src/assets/web-panel/assets/{TimelineRenderer-C4Gjj5Su.js → TimelineRenderer-D2qDuVZ_.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tokens-COYhN18e.js → Tokens-Cvmn99rH.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trigger-B-JzXcf6.js → Trigger-D_QYIHH8.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trust-BJ5bg0nI.js → Trust-BmzvQLnX.js} +1 -1
  84. package/src/assets/web-panel/assets/{UkeySign-BG_ByRMf.js → UkeySign-D_LopHwH.js} +1 -1
  85. package/src/assets/web-panel/assets/{VideoEditing-B3kOnSiU.js → VideoEditing-DoWl3PhQ.js} +1 -1
  86. package/src/assets/web-panel/assets/{Wallet-CcoGFnK7.js → Wallet-5NYcAkxe.js} +4 -4
  87. package/src/assets/web-panel/assets/{WebAuthn-DdT8vRC_.js → WebAuthn-B-_Q3ewp.js} +4 -4
  88. package/src/assets/web-panel/assets/{WorkflowEditor-CZu3M9N8.js → WorkflowEditor-CHET-gi2.js} +1 -1
  89. package/src/assets/web-panel/assets/{chat-DxJt3Qba.js → chat-C6nvb-n6.js} +1 -1
  90. package/src/assets/web-panel/assets/{colors-DdYfwJaB.js → colors-CTDE9LTX.js} +1 -1
  91. package/src/assets/web-panel/assets/{compact-item-BG3SUzwj.js → compact-item-KnemdF8D.js} +1 -1
  92. package/src/assets/web-panel/assets/{createContext-By51z2-1.js → createContext-DUJR3Uek.js} +1 -1
  93. package/src/assets/web-panel/assets/devWarning-1DqLH1KX.js +1 -0
  94. package/src/assets/web-panel/assets/{hasIn-B0apZ3KJ.js → hasIn-CFNTaby8.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-ZxtP8jG7.js → index-65HO56Bv.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-Da_WBdLX.js → index-B8RtbSkV.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-BBPf3TpM.js → index-BHqSqnW7.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-BP94CrBV.js → index-BTetEUWd.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-p1_8SbI1.js → index-BXWg1crv.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-BWF8_mkx.js → index-BdiC4LOs.js} +1 -1
  101. package/src/assets/web-panel/assets/index-BhJtcPWo.js +1 -0
  102. package/src/assets/web-panel/assets/{index-SQqOlR3d.js → index-BuizJo2E.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-CpjZhgNd.js → index-BwZM1rod.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-CzmQElZy.js → index-C96N9xeL.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-bP_VlDb4.js → index-CHfUdnJH.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-ZFbps9po.js → index-CKvBF3Ov.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-DaIz0NAW.js → index-CSD9_I2_.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BewKYrX9.js → index-Cc7dbl_p.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-CNIxXMmN.js → index-CcF0D7UZ.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-Q2SCX-MI.js → index-Ceu92a8D.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-DE76D-kA.js → index-CnLpuTAU.js} +1 -1
  112. package/src/assets/web-panel/assets/index-Cq8MWPDT.js +1 -0
  113. package/src/assets/web-panel/assets/{index-BkvcEo4p.js → index-CquKnw5r.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-Cp6e-hGw.js → index-CyEtHvEE.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-BLIbGOLX.js → index-DF-fcTvQ.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-DCn8IcxV.js → index-DF1Y0Vuw.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-Bissefox.js → index-DJyPeBBk.js} +3 -3
  118. package/src/assets/web-panel/assets/{index-BZ_0qm4g.js → index-DP-PbO11.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-kf57LJ93.js → index-DZgCRMxk.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-BYINoRLK.js → index-DfJzS3Qa.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-3jWkIu5j.js → index-DqPpJkte.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-B5rLiEo0.js → index-DzReoLyh.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-CW93tZDv.js → index-JGTiDeOW.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-C1C9i79A.js → index-NUR0If7O.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-CAhHirVH.js → index-NtAcnJYW.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-RD6O-0C6.js → index-OmuhFYKE.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-oxRrmFO9.js → index-Wlc7o_C8.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-B3rWuPMW.js → index-bxTPfdri.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-BIrJfqO4.js → index-k6uorYmf.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-BfWYsB9t.js → index-ox6mIwE2.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-Bos5_aMV.js → index-rVDD7AAR.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-CWEuZWCK.js → index-u0h6QqVV.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-Dz49VOyQ.js → index-v-mtxmWH.js} +1 -1
  134. package/src/assets/web-panel/assets/{initDefaultProps-BWJktcg8.js → initDefaultProps-qEt8dI-t.js} +1 -1
  135. package/src/assets/web-panel/assets/{motion-BEXBzUFV.js → motion-DetKPWy-.js} +1 -1
  136. package/src/assets/web-panel/assets/{move-BUKwn2sx.js → move-BeNYeDV2.js} +1 -1
  137. package/src/assets/web-panel/assets/{mtc-parser-FTI7btqQ.js → mtc-parser-C0q0MK_T.js} +1 -1
  138. package/src/assets/web-panel/assets/{omit-CsLtSPH3.js → omit-DLKkrKpE.js} +1 -1
  139. package/src/assets/web-panel/assets/{pickAttrs-DWZxsT_S.js → pickAttrs-Bw1tWsY8.js} +1 -1
  140. package/src/assets/web-panel/assets/{placementArrow-Bcfs43CX.js → placementArrow-DeesBLbd.js} +1 -1
  141. package/src/assets/web-panel/assets/{responsiveObserve-a9bcC1p-.js → responsiveObserve-bqLhxHhn.js} +1 -1
  142. package/src/assets/web-panel/assets/{slide-BDTzgOXN.js → slide-DGCXRoQm.js} +1 -1
  143. package/src/assets/web-panel/assets/{statusUtils-Iq1j_HUg.js → statusUtils-H-re3Egl.js} +1 -1
  144. package/src/assets/web-panel/assets/{styleChecker-DAZEYxeh.js → styleChecker-BXg4qGX_.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFlexGapSupport-DVkjyDrh.js → useFlexGapSupport-CKLb2KA6.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFs-wXTpNTHt.js → useFs-CTAhHeyw.js} +1 -1
  147. package/src/assets/web-panel/assets/{usePersonalDataHub-CtQM_aZr.js → usePersonalDataHub-BQ4pDh5g.js} +1 -1
  148. package/src/assets/web-panel/assets/{vnode-hjEoG85v.js → vnode-jrSK6j4j.js} +1 -1
  149. package/src/assets/web-panel/assets/{zoom-BHVpyKg_.js → zoom-fOQE24pw.js} +1 -1
  150. package/src/assets/web-panel/index.html +1 -1
  151. package/src/command-help-index.json +3 -3
  152. package/src/commands/agent.js +91 -60
  153. package/src/commands/git.js +39 -0
  154. package/src/commands/plugin.js +17 -2
  155. package/src/commands/session-group.js +131 -0
  156. package/src/commands/session-location.js +48 -0
  157. package/src/commands/session.js +11 -0
  158. package/src/commands/sync-providers.js +4 -1
  159. package/src/commands/update.js +1 -0
  160. package/src/data/changelog.json +40 -1
  161. package/src/gateways/ws/mcp-topic-handlers.js +167 -0
  162. package/src/gateways/ws/ws-agent-handler.js +20 -12
  163. package/src/harness/jsonl-session-store.js +279 -37
  164. package/src/harness/mcp-client.js +701 -91
  165. package/src/harness/session-index.js +15 -4
  166. package/src/lib/agent-network.js +166 -29
  167. package/src/lib/agent-router.js +62 -6
  168. package/src/lib/agent-sandbox.js +7 -1
  169. package/src/lib/agent-worktree.js +8 -1
  170. package/src/lib/auto-mode-safety-classifier.js +3 -17
  171. package/src/lib/background-agent-keeper-protocol.js +26 -6
  172. package/src/lib/background-agent-supervisor.js +17 -1
  173. package/src/lib/browser-evidence.js +1405 -0
  174. package/src/lib/chrome-connector.js +465 -79
  175. package/src/lib/claude-code-bridge.js +159 -54
  176. package/src/lib/claude-project-auto-memory.js +481 -0
  177. package/src/lib/claude-project-storage-layout.js +104 -0
  178. package/src/lib/cloud/cloud-client.js +40 -0
  179. package/src/lib/cowork-workflow.js +69 -6
  180. package/src/lib/execution-location-local-supervisor.mjs +226 -0
  181. package/src/lib/execution-location-runner-lifecycle.js +991 -0
  182. package/src/lib/execution-location-target-preflight.js +333 -0
  183. package/src/lib/execution-location-target.js +783 -13
  184. package/src/lib/external-agent-adapters.js +269 -0
  185. package/src/lib/file-lines.js +6 -1
  186. package/src/lib/gateway-client-resilience.js +571 -0
  187. package/src/lib/gitlab-mr-worktree.js +176 -0
  188. package/src/lib/hooks-v2-producers.js +119 -15
  189. package/src/lib/hooks-v2-workspace-context.js +44 -1
  190. package/src/lib/host-resource-budget.js +295 -0
  191. package/src/lib/ide-context.js +15 -2
  192. package/src/lib/ipfs-storage.js +127 -25
  193. package/src/lib/llm-config-defaults.js +43 -0
  194. package/src/lib/mcp-lifecycle-authority.js +887 -0
  195. package/src/lib/mcp-oauth.js +101 -20
  196. package/src/lib/mcp-tls.js +103 -3
  197. package/src/lib/orchestrator.js +47 -0
  198. package/src/lib/paths.js +260 -32
  199. package/src/lib/permission-request.js +48 -0
  200. package/src/lib/plugin-runtime/bin.js +3 -1
  201. package/src/lib/plugin-runtime/hooks.js +3 -1
  202. package/src/lib/plugin-runtime/install.js +117 -1
  203. package/src/lib/plugin-runtime/lsp.js +4 -4
  204. package/src/lib/plugin-runtime/marketplace-archive-source.js +40 -5
  205. package/src/lib/plugin-runtime/marketplace-catalog.js +13 -2
  206. package/src/lib/plugin-runtime/marketplace-command-descriptor.js +343 -0
  207. package/src/lib/plugin-runtime/marketplace-command-source.js +580 -0
  208. package/src/lib/plugin-runtime/marketplace-source-adapter.js +33 -8
  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 +151 -6
  212. package/src/lib/plugin-runtime/settings.js +3 -1
  213. package/src/lib/plugin-runtime/trust.js +274 -13
  214. package/src/lib/process-execution-broker/credential-agent.js +210 -41
  215. package/src/lib/process-execution-broker/index.js +15 -1
  216. package/src/lib/process-execution-broker/linux-cgroup-v2.js +391 -0
  217. package/src/lib/process-execution-broker/platform-sandbox.js +50 -28
  218. package/src/lib/project-mcp-trust.js +165 -10
  219. package/src/lib/resume-session.js +9 -6
  220. package/src/lib/session-core-singletons.js +26 -11
  221. package/src/lib/session-host-lease.js +52 -16
  222. package/src/lib/session-lifecycle-scope.js +153 -0
  223. package/src/lib/session-message-fabric.js +168 -21
  224. package/src/lib/session-projection.js +244 -4
  225. package/src/lib/session-store-guard.js +3 -1
  226. package/src/lib/session-workbench-store.js +466 -0
  227. package/src/lib/shell-approval.js +7 -5
  228. package/src/lib/spellcheck.js +211 -0
  229. package/src/lib/sub-agent-context.js +9 -9
  230. package/src/lib/sync-cli-db.js +485 -129
  231. package/src/lib/sync-credentials.js +31 -20
  232. package/src/lib/web-fetch.js +112 -40
  233. package/src/lib/web-search.js +127 -61
  234. package/src/lib/workflow-engine.js +42 -11
  235. package/src/lib/workspace-trust.js +793 -0
  236. package/src/repl/agent-repl.js +124 -5
  237. package/src/repl/permission-prompt.js +10 -12
  238. package/src/runtime/agent-core.js +311 -18
  239. package/src/runtime/agent-runtime.js +12 -1
  240. package/src/runtime/bootstrap.js +37 -13
  241. package/src/runtime/coding-agent-contract-shared.cjs +11 -4
  242. package/src/runtime/headless-runner.js +234 -36
  243. package/src/runtime/headless-stream.js +181 -6
  244. package/src/runtime/mcp-config.js +298 -8
  245. package/src/runtime/policies/agent-policy.js +8 -0
  246. package/src/runtime/status-diagnostics-lite.js +9 -1
  247. package/src/assets/web-panel/assets/MarkdownRenderer-CFyt8iUd.js +0 -1
  248. package/src/assets/web-panel/assets/McpTools-DFaIhOfu.js +0 -7
  249. package/src/assets/web-panel/assets/devWarning-DorRZcI9.js +0 -1
  250. package/src/assets/web-panel/assets/index-BETiL0a3.js +0 -1
  251. package/src/assets/web-panel/assets/index-BhAVHuW8.js +0 -1
@@ -569,10 +569,23 @@ export function normalizeDiffReviewAudit(value, binding = {}) {
569
569
  */
570
570
  export async function requestIdeDiffApproval(mcp, req = {}) {
571
571
  if (!hasIdeOpenDiff(mcp)) return null;
572
- if (!req.path || typeof req.modifiedText !== "string") return null;
572
+ // The IDE bridge accepts a workspace path, never a Git object/blob-shaped
573
+ // value. Reject malformed paths before contacting the privileged bridge.
574
+ if (
575
+ typeof req.path !== "string" ||
576
+ req.path.trim().length === 0 ||
577
+ typeof req.modifiedText !== "string"
578
+ ) {
579
+ return null;
580
+ }
573
581
  const operation = req.operation || "modify";
574
582
  if (!DIFF_REVIEW_OPERATIONS.has(operation)) return null;
575
- if (operation === "rename" && !req.targetPath) return null;
583
+ if (
584
+ operation === "rename" &&
585
+ (typeof req.targetPath !== "string" || req.targetPath.trim().length === 0)
586
+ ) {
587
+ return null;
588
+ }
576
589
  const exec = mcp.externalToolExecutors.mcp__ide__openDiff;
577
590
  const reviewContext = Object.fromEntries(
578
591
  Object.entries({
@@ -21,6 +21,35 @@
21
21
  */
22
22
 
23
23
  import crypto from "crypto";
24
+ import { createSecretStore } from "./secret-store.js";
25
+
26
+ let configuredIpfsSecretStore = null;
27
+
28
+ export function setIpfsSecretStore(secretStore) {
29
+ if (
30
+ !secretStore ||
31
+ typeof secretStore.set !== "function" ||
32
+ typeof secretStore.get !== "function" ||
33
+ typeof secretStore.delete !== "function"
34
+ ) {
35
+ throw new TypeError("IPFS storage requires a SecretStore");
36
+ }
37
+ configuredIpfsSecretStore = secretStore;
38
+ }
39
+
40
+ function getIpfsSecretStore() {
41
+ if (!configuredIpfsSecretStore) {
42
+ configuredIpfsSecretStore = createSecretStore({
43
+ service: "chainlesschain-ipfs-dek",
44
+ });
45
+ }
46
+ return configuredIpfsSecretStore;
47
+ }
48
+
49
+ function _encryptionKeyRef(cid) {
50
+ const digest = crypto.createHash("sha256").update(cid).digest("hex");
51
+ return `ipfs/dek/${digest}`;
52
+ }
24
53
 
25
54
  /* ── Constants ──────────────────────────────────────────── */
26
55
 
@@ -91,7 +120,8 @@ export function ensureIpfsTables(db) {
91
120
  mime_type TEXT,
92
121
  pinned INTEGER DEFAULT 0,
93
122
  encrypted INTEGER DEFAULT 0,
94
- encryption_key TEXT,
123
+ encryption_key TEXT DEFAULT '',
124
+ encryption_key_ref TEXT,
95
125
  knowledge_id TEXT,
96
126
  metadata TEXT,
97
127
  payload TEXT,
@@ -105,9 +135,63 @@ export function ensureIpfsTables(db) {
105
135
  updated_at INTEGER NOT NULL
106
136
  )`);
107
137
 
138
+ const columns = db.prepare("PRAGMA table_info(ipfs_content)").all();
139
+ if (
140
+ columns.length > 0 &&
141
+ !columns.some((entry) => entry.name === "encryption_key_ref")
142
+ ) {
143
+ db.exec("ALTER TABLE ipfs_content ADD COLUMN encryption_key_ref TEXT");
144
+ }
145
+
146
+ migrateIpfsEncryptionKeys(db);
147
+
108
148
  _loadAll(db);
109
149
  }
110
150
 
151
+ export function migrateIpfsEncryptionKeys(db, { dryRun = false } = {}) {
152
+ db.exec("PRAGMA secure_delete = ON");
153
+ const rows = db
154
+ .prepare("SELECT cid, encryption_key, encryption_key_ref FROM ipfs_content")
155
+ .all()
156
+ .filter((row) => row.encryption_key && !row.encryption_key_ref);
157
+ if (dryRun) {
158
+ return { pending: rows.length, migrated: 0, dryRun: true };
159
+ }
160
+
161
+ if (rows.length > 0 && typeof db.transaction !== "function") {
162
+ throw new Error(
163
+ "IPFS data-key migration requires transactional database support",
164
+ );
165
+ }
166
+
167
+ const secretStore = rows.length > 0 ? getIpfsSecretStore() : null;
168
+ const stagedKeyRefs = [];
169
+ try {
170
+ for (const row of rows) {
171
+ const keyRef = _encryptionKeyRef(row.cid);
172
+ secretStore.set(keyRef, row.encryption_key);
173
+ stagedKeyRefs.push(keyRef);
174
+ }
175
+ const applyMigration = db.transaction(() => {
176
+ for (const row of rows) {
177
+ const keyRef = _encryptionKeyRef(row.cid);
178
+ db.prepare(
179
+ "UPDATE ipfs_content SET encryption_key = ?, encryption_key_ref = ? WHERE cid = ?",
180
+ ).run("", keyRef, row.cid);
181
+ }
182
+ });
183
+ applyMigration();
184
+ } catch (error) {
185
+ for (const keyRef of stagedKeyRefs) secretStore.delete(keyRef);
186
+ throw error;
187
+ }
188
+ return {
189
+ pending: rows.length,
190
+ migrated: rows.length,
191
+ dryRun: false,
192
+ };
193
+ }
194
+
111
195
  function _loadAll(db) {
112
196
  _content.clear();
113
197
  _knowledgeLinks.clear();
@@ -263,6 +347,7 @@ export function addContent(
263
347
  }
264
348
 
265
349
  const cid = _computeCid(payload);
350
+ const encryptionKeyRef = encryptionKey ? _encryptionKeyRef(cid) : null;
266
351
 
267
352
  // Idempotent: if CID exists, just update flags
268
353
  const existing = _content.get(cid);
@@ -301,7 +386,8 @@ export function addContent(
301
386
  mime_type: mimeType || null,
302
387
  pinned: pin ? 1 : 0,
303
388
  encrypted: encrypt ? 1 : 0,
304
- encryption_key: encryptionKey,
389
+ encryption_key: "",
390
+ encryption_key_ref: encryptionKeyRef,
305
391
  knowledge_id: knowledgeId || null,
306
392
  metadata: metadataJson,
307
393
  payload: payloadBase64,
@@ -309,24 +395,33 @@ export function addContent(
309
395
  updated_at: now,
310
396
  };
311
397
 
312
- db.prepare(
313
- `INSERT INTO ipfs_content (id, cid, filename, size, mime_type, pinned, encrypted, encryption_key, knowledge_id, metadata, payload, created_at, updated_at)
314
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
315
- ).run(
316
- id,
317
- cid,
318
- entry.filename,
319
- size,
320
- entry.mime_type,
321
- entry.pinned,
322
- entry.encrypted,
323
- entry.encryption_key,
324
- entry.knowledge_id,
325
- entry.metadata,
326
- entry.payload,
327
- now,
328
- now,
329
- );
398
+ if (encryptionKeyRef) {
399
+ getIpfsSecretStore().set(encryptionKeyRef, encryptionKey);
400
+ }
401
+ try {
402
+ db.prepare(
403
+ `INSERT INTO ipfs_content (id, cid, filename, size, mime_type, pinned, encrypted, encryption_key, encryption_key_ref, knowledge_id, metadata, payload, created_at, updated_at)
404
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,
405
+ ).run(
406
+ id,
407
+ cid,
408
+ entry.filename,
409
+ size,
410
+ entry.mime_type,
411
+ entry.pinned,
412
+ entry.encrypted,
413
+ entry.encryption_key,
414
+ entry.encryption_key_ref,
415
+ entry.knowledge_id,
416
+ entry.metadata,
417
+ entry.payload,
418
+ now,
419
+ now,
420
+ );
421
+ } catch (error) {
422
+ if (encryptionKeyRef) getIpfsSecretStore().delete(encryptionKeyRef);
423
+ throw error;
424
+ }
330
425
 
331
426
  _content.set(cid, entry);
332
427
  if (knowledgeId) {
@@ -350,9 +445,12 @@ export function getContent(db, cid, { asString } = {}) {
350
445
  if (!entry) return null;
351
446
 
352
447
  let buffer = Buffer.from(entry.payload, "base64");
353
- if (entry.encrypted && entry.encryption_key) {
448
+ if (entry.encrypted) {
354
449
  try {
355
- buffer = _decrypt(buffer, entry.encryption_key);
450
+ if (!entry.encryption_key_ref) return null;
451
+ const encryptionKey = getIpfsSecretStore().get(entry.encryption_key_ref);
452
+ if (!encryptionKey) return null;
453
+ buffer = _decrypt(buffer, encryptionKey);
356
454
  } catch (_e) {
357
455
  return null;
358
456
  }
@@ -395,7 +493,7 @@ export function listContent(db, { pinned, knowledgeId, limit = 50 } = {}) {
395
493
  .sort((a, b) => b.created_at - a.created_at)
396
494
  .slice(0, limit)
397
495
  .map((c) => {
398
- const { payload, encryption_key, ...rest } = c;
496
+ const { payload, encryption_key, encryption_key_ref, ...rest } = c;
399
497
  return rest;
400
498
  });
401
499
  }
@@ -446,7 +544,7 @@ export function listPins(db, { limit = 50, sortBy = "created_at" } = {}) {
446
544
  .sort(sorter)
447
545
  .slice(0, limit)
448
546
  .map((c) => {
449
- const { payload, encryption_key, ...rest } = c;
547
+ const { payload, encryption_key, encryption_key_ref, ...rest } = c;
450
548
  return rest;
451
549
  });
452
550
  }
@@ -501,8 +599,12 @@ export function garbageCollect(db) {
501
599
  }
502
600
  }
503
601
  for (const cid of toRemove) {
602
+ const entry = _content.get(cid);
504
603
  _content.delete(cid);
505
604
  db.prepare("DELETE FROM ipfs_content WHERE cid = ?").run(cid);
605
+ if (entry?.encryption_key_ref) {
606
+ getIpfsSecretStore().delete(entry.encryption_key_ref);
607
+ }
506
608
  }
507
609
  // Clean up knowledge links pointing to removed CIDs
508
610
  for (const [kid, set] of _knowledgeLinks) {
@@ -555,7 +657,7 @@ export function getKnowledgeAttachments(db, knowledgeId) {
555
657
  .map((cid) => _content.get(cid))
556
658
  .filter(Boolean)
557
659
  .map((c) => {
558
- const { payload, encryption_key, ...rest } = c;
660
+ const { payload, encryption_key, encryption_key_ref, ...rest } = c;
559
661
  return rest;
560
662
  });
561
663
  }
@@ -104,3 +104,46 @@ export function applyConfigLlmDefaults(options = {}, cfgLlm = {}, opts = {}) {
104
104
  backfillApiKey(options, cfgLlm);
105
105
  return options;
106
106
  }
107
+
108
+ function optionalModel(value) {
109
+ if (typeof value !== "string") return null;
110
+ const model = value.trim();
111
+ return model || null;
112
+ }
113
+
114
+ /**
115
+ * Resolve the model precedence used by `cc agent` without allowing a default
116
+ * from one source to silently outrank an explicit choice from another:
117
+ *
118
+ * CLI --model > ANTHROPIC_MODEL > settings.model > config/organization model
119
+ * > ANTHROPIC_DEFAULT_MODEL (new sessions only) > runtime provider default.
120
+ *
121
+ * Environment values are supplied by the caller from the process startup
122
+ * environment, before settings-file `env` entries are merged. That prevents a
123
+ * checked-in settings file from impersonating a launcher-level override.
124
+ */
125
+ export function applyAgentModelDefaults(options = {}, cfgLlm = {}, opts = {}) {
126
+ const explicitModel = optionalModel(opts.explicitModel);
127
+ const environmentModel = optionalModel(opts.anthropicModel);
128
+ const settingsModel = optionalModel(opts.settingsModel);
129
+ const defaultModel = optionalModel(opts.anthropicDefaultModel);
130
+
131
+ if (!explicitModel) {
132
+ if (environmentModel) {
133
+ options.model = environmentModel;
134
+ } else if (settingsModel) {
135
+ options.model = settingsModel;
136
+ }
137
+ }
138
+
139
+ applyConfigLlmDefaults(options, cfgLlm, {
140
+ // Reuse the existing config/provider wiring, but do not let its configured
141
+ // model overwrite one selected by a higher-priority source above.
142
+ explicitModel: explicitModel || environmentModel || settingsModel,
143
+ });
144
+
145
+ if (!options.model && opts.isNewSession !== false && defaultModel) {
146
+ options.model = defaultModel;
147
+ }
148
+ return options;
149
+ }