chainlesschain 0.162.197 → 0.162.200

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 (233) hide show
  1. package/bin/chainlesschain.js +14 -6
  2. package/package.json +4 -1
  3. package/scripts/command-lifecycle-report.mjs +94 -0
  4. package/src/assets/web-panel/assets/{AIOps-D3Gu1a5d.js → AIOps-DcQ0bWKy.js} +1 -1
  5. package/src/assets/web-panel/assets/{ActionButton-DrwAoKaz.js → ActionButton-GecwfFPt.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-C7Q-gd_3.js → Analytics-CD6iSt9v.js} +3 -3
  7. package/src/assets/web-panel/assets/{AppLayout-DgBtae-n.js → AppLayout-CDEtuEYf.js} +5 -5
  8. package/src/assets/web-panel/assets/{Artifacts-pQ6LcA-W.js → Artifacts-DS3jAjeW.js} +1 -1
  9. package/src/assets/web-panel/assets/{Audit-DK61tocB.js → Audit-CcSJA048.js} +1 -1
  10. package/src/assets/web-panel/assets/{BackgroundAgents-BOKgDFRh.js → BackgroundAgents-DRo9Morb.js} +1 -1
  11. package/src/assets/web-panel/assets/{Backup-Bo9G4vTP.js → Backup-Vw5MrWft.js} +1 -1
  12. package/src/assets/web-panel/assets/{BaseInput-Do_dE9_v.js → BaseInput-DNHIu823.js} +1 -1
  13. package/src/assets/web-panel/assets/{Chat-COVvZzOL.js → Chat-DvAsO8-b.js} +4 -4
  14. package/src/assets/web-panel/assets/ChatBubbleRenderer-9aDuObay.js +1 -0
  15. package/src/assets/web-panel/assets/{Checkbox-Z9MJMolt.js → Checkbox-CKCa7tvn.js} +1 -1
  16. package/src/assets/web-panel/assets/{Codegen-BVzWKVbf.js → Codegen-CIFvZdaT.js} +1 -1
  17. package/src/assets/web-panel/assets/{Col-C8MnYcbT.js → Col-C79yz7bK.js} +1 -1
  18. package/src/assets/web-panel/assets/{Community-DQxqw15l.js → Community-DVvZskLJ.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compact-BAUmrh3y.js → Compact-oaew61hV.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compliance-jPAkQ3zK.js → Compliance-DqA7wmRx.js} +1 -1
  21. package/src/assets/web-panel/assets/{Cowork-BBQyxbh8.js → Cowork-B-qGadxa.js} +3 -3
  22. package/src/assets/web-panel/assets/{Cron-W5koq8Z5.js → Cron-CUlCl4sS.js} +2 -2
  23. package/src/assets/web-panel/assets/{Crosschain-BQhnu5hS.js → Crosschain-CNOlr9DU.js} +1 -1
  24. package/src/assets/web-panel/assets/{DID-DD7PlI18.js → DID-DJqFCT_3.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dashboard-w_ILuwKI.js → Dashboard-CznGpphf.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dropdown-qiDUAyAo.js → Dropdown-_cJw218E.js} +1 -1
  27. package/src/assets/web-panel/assets/{EmailListRenderer-PDeBcI5H.js → EmailListRenderer-Dr-1BZ9C.js} +1 -1
  28. package/src/assets/web-panel/assets/{FamilyGuardDashboard-SuArscRM.js → FamilyGuardDashboard-Dxf4xtSk.js} +1 -1
  29. package/src/assets/web-panel/assets/{Federation-BCovZaUn.js → Federation-DOiG3i_1.js} +1 -1
  30. package/src/assets/web-panel/assets/{FormItemContext-DjlFdVFk.js → FormItemContext-BzbMcFB9.js} +1 -1
  31. package/src/assets/web-panel/assets/{GenericCardRenderer-DoEZ7fcS.js → GenericCardRenderer-VbBrYttP.js} +1 -1
  32. package/src/assets/web-panel/assets/{Git-CV0-6GPI.js → Git-CLG8E6ED.js} +2 -2
  33. package/src/assets/web-panel/assets/{Governance-B_SFN50w.js → Governance-LGJQfk_q.js} +1 -1
  34. package/src/assets/web-panel/assets/{Inference-heI0Eo6k.js → Inference-DlQKx9lF.js} +1 -1
  35. package/src/assets/web-panel/assets/{KnowledgeGraph-Cz5INS5p.js → KnowledgeGraph-DU8vEouV.js} +1 -1
  36. package/src/assets/web-panel/assets/{Logs-BSFxiHkg.js → Logs-FZIQOdln.js} +2 -2
  37. package/src/assets/web-panel/assets/MarkdownRenderer-BJNWIrbw.js +1 -0
  38. package/src/assets/web-panel/assets/{Marketplace-0TWTpE7k.js → Marketplace-C_xd-zZI.js} +1 -1
  39. package/src/assets/web-panel/assets/{McpTools-CV4-wBLm.js → McpTools-q-YktphS.js} +5 -5
  40. package/src/assets/web-panel/assets/{Memory-x5bH5rw5.js → Memory-Cq9OhDin.js} +2 -2
  41. package/src/assets/web-panel/assets/{MobileBridge-DaBmUu9G.js → MobileBridge-B03_R98T.js} +1 -1
  42. package/src/assets/web-panel/assets/MobileProjects-DZrk-qmF.js +1 -0
  43. package/src/assets/web-panel/assets/{Mtc-B_zKEBif.js → Mtc-BidCKW28.js} +5 -5
  44. package/src/assets/web-panel/assets/{MtcAudit-BCfKD2yg.js → MtcAudit-r-iaMVM7.js} +2 -2
  45. package/src/assets/web-panel/assets/{Multisig-DgYfj6c_.js → Multisig-CgTUFvff.js} +3 -3
  46. package/src/assets/web-panel/assets/{NLProgramming-Dz09lFUm.js → NLProgramming-B7NvzfAV.js} +1 -1
  47. package/src/assets/web-panel/assets/{Notes-Cuj6ugBE.js → Notes-80CWNqJI.js} +3 -3
  48. package/src/assets/web-panel/assets/{NotificationSettings-DK2WXjhg.js → NotificationSettings-0H6xdiY3.js} +1 -1
  49. package/src/assets/web-panel/assets/{OrderTableRenderer-D1IAOQoo.js → OrderTableRenderer-CKP4AFWy.js} +1 -1
  50. package/src/assets/web-panel/assets/{Organization-9fqnPvTw.js → Organization-B8sxCV_h.js} +4 -4
  51. package/src/assets/web-panel/assets/{Overflow-n5xHkhow.js → Overflow-CW9JBBhQ.js} +1 -1
  52. package/src/assets/web-panel/assets/{P2P-B5AUWwH-.js → P2P-bdSQV7oZ.js} +2 -2
  53. package/src/assets/web-panel/assets/{PdhVaultBrowser-CoUDV6dy.js → PdhVaultBrowser-DQad42nW.js} +4 -4
  54. package/src/assets/web-panel/assets/{Permissions-DPRmQf_H.js → Permissions-CueexxTR.js} +4 -4
  55. package/src/assets/web-panel/assets/{PersonalDataHub-B37bsbEN.js → PersonalDataHub-fqxflhR8.js} +6 -6
  56. package/src/assets/web-panel/assets/{Pipeline-CCAuPqu9.js → Pipeline-KFwwnIMC.js} +1 -1
  57. package/src/assets/web-panel/assets/{Privacy-B81msZdv.js → Privacy-ClnD9buY.js} +1 -1
  58. package/src/assets/web-panel/assets/{ProjectInit-B-Py2NbF.js → ProjectInit-CZEz6sm3.js} +2 -2
  59. package/src/assets/web-panel/assets/{ProjectSettings-CYsneiRB.js → ProjectSettings-B6NzpmOI.js} +2 -2
  60. package/src/assets/web-panel/assets/{Projects-Y975Mh6R.js → Projects-DYyuwPCs.js} +1 -1
  61. package/src/assets/web-panel/assets/Providers-C3tz_jdh.js +1 -0
  62. package/src/assets/web-panel/assets/{QrScannerModal-Bj_6gJ0l.js → QrScannerModal-BzuOBbqB.js} +1 -1
  63. package/src/assets/web-panel/assets/{QuickAsk-BgpBCMPE.js → QuickAsk-CmNO9qSj.js} +1 -1
  64. package/src/assets/web-panel/assets/{Recommend-DhUW3YUA.js → Recommend-VJNj3_NF.js} +1 -1
  65. package/src/assets/web-panel/assets/{RemoteSession-DdeyfbkA.js → RemoteSession-CrbdbSBF.js} +2 -2
  66. package/src/assets/web-panel/assets/{Reputation-fxW421xd.js → Reputation-DTyMd45j.js} +1 -1
  67. package/src/assets/web-panel/assets/{Row-De73w1og.js → Row-DHrQ-Icz.js} +1 -1
  68. package/src/assets/web-panel/assets/{RssFeed-3US_Q_lj.js → RssFeed-DqWxY9c5.js} +2 -2
  69. package/src/assets/web-panel/assets/{Search-DbZ_DU74.js → Search-ctF1Ks3J.js} +1 -1
  70. package/src/assets/web-panel/assets/{Security-DoIU1vMF.js → Security-BrQz8uo5.js} +4 -4
  71. package/src/assets/web-panel/assets/{Services-DB_RGqpc.js → Services-D4scVFar.js} +2 -2
  72. package/src/assets/web-panel/assets/{Skeleton-DnzLaayC.js → Skeleton-oUScaOjv.js} +1 -1
  73. package/src/assets/web-panel/assets/{Skills-VzVXHENF.js → Skills-CL-y0eLt.js} +1 -1
  74. package/src/assets/web-panel/assets/{Sla-DMfvjCAI.js → Sla-DQExhwXj.js} +1 -1
  75. package/src/assets/web-panel/assets/{SpeechSettings-DQQOYWbF.js → SpeechSettings-iNp_I7kN.js} +1 -1
  76. package/src/assets/web-panel/assets/{SyncSettings-Bmx3FG1P.js → SyncSettings-CTDlMo0A.js} +2 -2
  77. package/src/assets/web-panel/assets/{Tasks-DOQyfb-2.js → Tasks-4kb8l3sc.js} +1 -1
  78. package/src/assets/web-panel/assets/{Templates-D6hTRT7c.js → Templates-BXcL9oXW.js} +1 -1
  79. package/src/assets/web-panel/assets/{Tenant-CTPQZAzs.js → Tenant-DLE8eS0D.js} +1 -1
  80. package/src/assets/web-panel/assets/{Terminal-B7vII3oH.js → Terminal-DGpUZPPK.js} +2 -2
  81. package/src/assets/web-panel/assets/{TimelineRenderer-BkiFJeXV.js → TimelineRenderer-C1pWXGPC.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tokens-BPPdQMNo.js → Tokens-BYfbfqhZ.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trigger-BxG8JAEI.js → Trigger-K9YfLOCw.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trust-DHD7nMpM.js → Trust-Ctkq77Hy.js} +1 -1
  85. package/src/assets/web-panel/assets/{UkeySign-B4BJpU47.js → UkeySign-C6_CSe9J.js} +1 -1
  86. package/src/assets/web-panel/assets/{VideoEditing-CRiGpFx2.js → VideoEditing-Be3rpOWs.js} +1 -1
  87. package/src/assets/web-panel/assets/{Wallet-BSDSNiem.js → Wallet-D0UIplxk.js} +4 -4
  88. package/src/assets/web-panel/assets/{WebAuthn-DLTUh5Zv.js → WebAuthn-CF9bM9I3.js} +5 -5
  89. package/src/assets/web-panel/assets/{WorkflowEditor-tW2MwjhD.js → WorkflowEditor-D0H1XVPY.js} +1 -1
  90. package/src/assets/web-panel/assets/{chat-SgsLQ3FC.js → chat-Cgzzbe0o.js} +1 -1
  91. package/src/assets/web-panel/assets/{colors-BHjjLIKO.js → colors-BwNxEVS0.js} +1 -1
  92. package/src/assets/web-panel/assets/{compact-item-VceErdKq.js → compact-item-D60Z4Hhs.js} +1 -1
  93. package/src/assets/web-panel/assets/{createContext-BZ332MYl.js → createContext-MFk58XB0.js} +1 -1
  94. package/src/assets/web-panel/assets/devWarning-BJiw369i.js +1 -0
  95. package/src/assets/web-panel/assets/{hasIn-CBTjJOjn.js → hasIn-CRj2SvGO.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-DaCCy6lq.js → index--s45_1cb.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-CMVvxIS8.js → index--tquQ2ZG.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-BhXZEUAc.js → index-1T1rhokn.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-BQSmZGgs.js → index-B-M82_rx.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-BeiqkxJG.js → index-BE_el1Zs.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-29wVzi-k.js → index-BhRkR7IO.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-iYQNU9za.js → index-Bo0y96-K.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-BRWhLbWF.js → index-CJgu5JUK.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-BPXFLYdW.js → index-CLWwdebO.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-Cr4rjlW5.js → index-CNAK5QG_.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-CaIS_TNX.js → index-CQjJjPRD.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-1n7xjKDU.js → index-CTDbAfae.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BETEjuNr.js → index-CVI_9sRK.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-By5jBtkV.js → index-CY14oMQK.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-DgPvuIn2.js → index-CbiTJkZf.js} +1 -1
  111. package/src/assets/web-panel/assets/index-CiMouosn.js +1 -0
  112. package/src/assets/web-panel/assets/{index-CawpdGTW.js → index-CqWpxMqx.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-_PHrIO4O.js → index-CvB8lYUR.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-BOtvPdHt.js → index-D51XwtCY.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-CrUgDQkf.js → index-D6HvK_1O.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-BY1wexYG.js → index-D9jVIwLJ.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-C_B9rFQE.js → index-DA4tE98u.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-B5KAGxNo.js → index-DBwOtXw0.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-BC1xuQgX.js → index-DKdNzTIb.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-B2u26AS3.js → index-DRySdmvN.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-DePOeMDM.js → index-DWzyTev7.js} +1 -1
  122. package/src/assets/web-panel/assets/index-DXcKlwy7.js +1 -0
  123. package/src/assets/web-panel/assets/{index-BTlc-Bve.js → index-DYjs7jAP.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-CLc19alH.js → index-DbROzMBp.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-fU7wNHDB.js → index-DhFtk5PR.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-D_SePDWj.js → index-Di2AbMLg.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-vIXOpcjD.js → index-DvmocQsM.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-BcUenmCX.js → index-Dw-o0zEF.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-DUkVN794.js → index-DysPoP38.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-CtjLcCNU.js → index-LX9pJxm_.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-B40dQn0G.js → index-OI_fXWx0.js} +3 -3
  132. package/src/assets/web-panel/assets/{index-FJ3zC9LK.js → index-eDTOX8Xj.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-DdefYBSw.js → index-gWKDsTzF.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-CpumS98o.js → index-q_GDUVAA.js} +1 -1
  135. package/src/assets/web-panel/assets/{initDefaultProps-D1oZNz0D.js → initDefaultProps-C61kZqEd.js} +1 -1
  136. package/src/assets/web-panel/assets/{motion-C8k6doMO.js → motion-DZnT5U1L.js} +1 -1
  137. package/src/assets/web-panel/assets/{move-DJ4qSbYt.js → move-L8wzwbel.js} +1 -1
  138. package/src/assets/web-panel/assets/{mtc-parser-CdpJD85j.js → mtc-parser-DLdYSejc.js} +1 -1
  139. package/src/assets/web-panel/assets/{omit-B0V4slKA.js → omit-D53cbS59.js} +1 -1
  140. package/src/assets/web-panel/assets/{pickAttrs-Di5NiW1F.js → pickAttrs-Bbc5HPtu.js} +1 -1
  141. package/src/assets/web-panel/assets/{placementArrow-B5OMHgEM.js → placementArrow-BkvmO860.js} +1 -1
  142. package/src/assets/web-panel/assets/{responsiveObserve-C6U9IWql.js → responsiveObserve-u2y1ryS1.js} +1 -1
  143. package/src/assets/web-panel/assets/{slide-BMyTH3rN.js → slide-BBqj7svU.js} +1 -1
  144. package/src/assets/web-panel/assets/{statusUtils-C7d6BG7Z.js → statusUtils-GN0mqu2d.js} +1 -1
  145. package/src/assets/web-panel/assets/{styleChecker-CR50QnQy.js → styleChecker-BvwPKoBT.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFlexGapSupport-DBEeoMb8.js → useFlexGapSupport-CCt8tnfY.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFs-3r099cjv.js → useFs-DXAxl2SV.js} +1 -1
  148. package/src/assets/web-panel/assets/{usePersonalDataHub-C5IYNdTK.js → usePersonalDataHub-DihlR2dj.js} +1 -1
  149. package/src/assets/web-panel/assets/{vnode-DmEOLRHf.js → vnode-D7BOX2gi.js} +1 -1
  150. package/src/assets/web-panel/assets/{zoom-DnpUiVCB.js → zoom-CVbO-nL7.js} +1 -1
  151. package/src/assets/web-panel/index.html +1 -1
  152. package/src/command-help-index.json +4 -4
  153. package/src/commands/agent.js +3 -3
  154. package/src/commands/background-session.js +145 -0
  155. package/src/commands/mcp.js +244 -7
  156. package/src/commands/serve.js +1 -1
  157. package/src/commands/session-show.js +129 -0
  158. package/src/commands/session.js +97 -145
  159. package/src/commands/skill.js +87 -50
  160. package/src/data/changelog.json +40 -1
  161. package/src/gateways/ws/session-protocol.js +14 -4
  162. package/src/gateways/ws/ws-agent-handler.js +39 -1
  163. package/src/harness/jsonl-session-store.js +1547 -127
  164. package/src/harness/mcp-client.js +2690 -409
  165. package/src/harness/session-index.js +80 -80
  166. package/src/harness/session-list-index.js +210 -7
  167. package/src/lazy-dispatch.js +76 -8
  168. package/src/lib/abort-utils.js +68 -0
  169. package/src/lib/agent-core.js +1 -59
  170. package/src/lib/background-interaction-journal.js +2 -2
  171. package/src/lib/chat-core.js +24 -6
  172. package/src/lib/command-lifecycle-report.js +516 -0
  173. package/src/lib/cowork-mcp-tools.js +47 -2
  174. package/src/lib/cowork-task-runner.js +11 -3
  175. package/src/lib/doctor-checkup.js +9 -7
  176. package/src/lib/learning/skill-improver.js +21 -2
  177. package/src/lib/mcp-call-ledger-store.js +116 -3
  178. package/src/lib/mcp-call-ledger.js +59 -14
  179. package/src/lib/mcp-client.js +1 -0
  180. package/src/lib/mcp-stdio-environment.js +48 -0
  181. package/src/lib/mcp-stdio-executable-identity.js +1133 -0
  182. package/src/lib/mcp-stdio-execution-authority.js +363 -0
  183. package/src/lib/mcp-stdio-package-materialization.js +1424 -0
  184. package/src/lib/mcp-tool-metadata.js +436 -0
  185. package/src/lib/mcp-tool-result.js +367 -0
  186. package/src/lib/observability/index.js +71 -0
  187. package/src/lib/packer/native-update-state.js +979 -1
  188. package/src/lib/packer/pack-update-applier.js +1050 -125
  189. package/src/lib/packer/pkg-config-generator.js +1 -0
  190. package/src/lib/paths.js +53 -0
  191. package/src/lib/pr-link-ledger.js +8 -27
  192. package/src/lib/pr-link-store.js +26 -0
  193. package/src/lib/process-execution-broker/index.js +192 -35
  194. package/src/lib/process-execution-broker/platform-sandbox.js +291 -24
  195. package/src/lib/process-tree-termination.js +253 -0
  196. package/src/lib/recent-session.js +17 -17
  197. package/src/lib/secure-file-identity.js +47 -0
  198. package/src/lib/secure-fs.js +21 -2
  199. package/src/lib/session-anti-rollback-anchor.js +766 -0
  200. package/src/lib/session-host-lease.js +492 -0
  201. package/src/lib/session-host-snapshot.js +9 -5
  202. package/src/lib/session-persistence-failure.js +109 -0
  203. package/src/lib/session-picker.js +26 -3
  204. package/src/lib/session-projection.js +5 -1
  205. package/src/lib/session-search.js +25 -11
  206. package/src/lib/session-tail.js +31 -1
  207. package/src/lib/side-effect-ledger-store.js +2 -2
  208. package/src/lib/skill-budget.js +222 -0
  209. package/src/lib/skill-execution-authority.js +385 -0
  210. package/src/lib/skill-execution-identity.js +39 -2
  211. package/src/lib/skill-loader.js +322 -86
  212. package/src/lib/skill-mcp.js +43 -1
  213. package/src/lib/turn-binding-store.js +2 -2
  214. package/src/repl/agent-repl.js +483 -77
  215. package/src/repl/bg-dashboard.js +81 -28
  216. package/src/repl/chat-repl.js +77 -12
  217. package/src/runtime/agent-core.js +428 -113
  218. package/src/runtime/agent-runtime.js +26 -3
  219. package/src/runtime/cleanup-deadline.js +143 -0
  220. package/src/runtime/headless-runner.js +494 -149
  221. package/src/runtime/headless-stream.js +504 -75
  222. package/src/runtime/mcp-config.js +157 -10
  223. package/src/runtime/mcp-tool-search.js +0 -0
  224. package/src/runtime/output-backpressure.js +419 -0
  225. package/src/runtime/pipe-safety.js +56 -21
  226. package/src/assets/web-panel/assets/ChatBubbleRenderer-BUUyJ5QO.js +0 -1
  227. package/src/assets/web-panel/assets/MarkdownRenderer-1mNozZ8v.js +0 -1
  228. package/src/assets/web-panel/assets/MobileProjects-DqnoFPgR.js +0 -1
  229. package/src/assets/web-panel/assets/Providers-uO-10aP1.js +0 -1
  230. package/src/assets/web-panel/assets/devWarning-DosMaL-k.js +0 -1
  231. package/src/assets/web-panel/assets/index-0O5ePnUq.js +0 -1
  232. package/src/assets/web-panel/assets/index-ChAzPigF.js +0 -1
  233. package/src/lib/skill-process-broker.js +0 -85
@@ -39,6 +39,19 @@ import {
39
39
  checkProjectMcpTrust,
40
40
  issueProjectMcpWorkspaceAuthority,
41
41
  } from "../lib/project-mcp-trust.js";
42
+ import {
43
+ consumeMcpStdioExecutionAuthority,
44
+ MCP_STDIO_LOCAL_CODE_TRUST_REQUIRED_CODE,
45
+ issueMcpStdioExecutionAuthority,
46
+ materializeApprovedMcpStdioInvocation,
47
+ resolveMcpStdioExecutionApproval,
48
+ } from "../lib/mcp-stdio-execution-authority.js";
49
+ import { prepareMcpStdioExecutableIdentity } from "../lib/mcp-stdio-executable-identity.js";
50
+ import {
51
+ materializeMcpStdioNpmPackage,
52
+ parseExactNpmPackageSpec,
53
+ } from "../lib/mcp-stdio-package-materialization.js";
54
+ import { executionBroker } from "../lib/process-execution-broker/index.js";
42
55
  import {
43
56
  CATALOG as REGISTRY_CATALOG,
44
57
  CATEGORIES as REGISTRY_CATEGORIES,
@@ -77,6 +90,32 @@ export function isHeadlessEnv(env = process.env, platform = process.platform) {
77
90
 
78
91
  // Singleton MCP client for session reuse
79
92
  let mcpClient = null;
93
+ const PROJECT_MCP_FILE_TRUST = Symbol("projectMcpFileTrust");
94
+
95
+ export function authorizeMcpRowForConnect(row, overrides = {}) {
96
+ const config = { ...row, ...overrides };
97
+ if (inferTransport(config) !== "stdio") return config;
98
+ if (row?.[PROJECT_MCP_FILE_TRUST] === false) {
99
+ const error = new Error(
100
+ `Project MCP server "${String(row?.name)}" can execute local code; trust the current .mcp.json before connecting`,
101
+ );
102
+ error.code = MCP_STDIO_LOCAL_CODE_TRUST_REQUIRED_CODE;
103
+ throw error;
104
+ }
105
+ const approvalKind =
106
+ row?.configScope === "managed"
107
+ ? "managed-settings"
108
+ : row?.configScope === "project"
109
+ ? "project-config"
110
+ : "registered-config";
111
+ config.mcpStdioExecutionAuthority = issueMcpStdioExecutionAuthority({
112
+ serverName: row.name,
113
+ config,
114
+ approvalKind,
115
+ approvalSource: `${row?.configScope || "user"}:${row?.configSource || "database"}:${row.name}`,
116
+ });
117
+ return config;
118
+ }
80
119
 
81
120
  function commandWorkspaceBinding() {
82
121
  return registerHostHooksV2Workspace(projectMcpLocation(process.cwd()).root);
@@ -150,7 +189,7 @@ async function connectForQuery(program, serverName) {
150
189
  for (const row of rows) {
151
190
  if (!row) continue;
152
191
  try {
153
- await client.connect(row.name, row);
192
+ await client.connect(row.name, authorizeMcpRowForConnect(row));
154
193
  connected.push(row.name);
155
194
  } catch (err) {
156
195
  logger.log(
@@ -339,6 +378,7 @@ export function readProjectMcpRows(cwd = process.cwd()) {
339
378
  configSource: file,
340
379
  projectPath: root,
341
380
  };
381
+ Object.defineProperty(row, PROJECT_MCP_FILE_TRUST, { value: trusted });
342
382
  if (trusted && row.headersHelper) {
343
383
  row.projectMcpWorkspaceAuthority = issueProjectMcpWorkspaceAuthority({
344
384
  file,
@@ -773,6 +813,198 @@ export function registerMcpCommand(program) {
773
813
  }
774
814
  });
775
815
 
816
+ mcp
817
+ .command("materialize-package <name>")
818
+ .description(
819
+ "Replace one exact JavaScript package launcher with a content-addressed, guarded dependency capsule",
820
+ )
821
+ .requiredOption(
822
+ "--package <name@version>",
823
+ "Exact npm registry package version to install (ranges and tags are rejected)",
824
+ )
825
+ .option(
826
+ "--bin <name>",
827
+ "Select one exported bin when the package has several",
828
+ )
829
+ .option(
830
+ "--scope <scope>",
831
+ `Configuration scope: ${MCP_CONFIG_SCOPES.join(" | ")}`,
832
+ )
833
+ .option(
834
+ "--json",
835
+ "Output the materialized generation and closure identity as JSON",
836
+ )
837
+ .action(async (name, options) => {
838
+ try {
839
+ const exact = parseExactNpmPackageSpec(options.package);
840
+ const ctx = await bootstrap({ verbose: program.opts().verbose });
841
+ if (!ctx.db) throw new Error("Database not available");
842
+ const configStore = new MCPServerConfig(ctx.db.getDatabase());
843
+ const scope = options.scope
844
+ ? normalizeMcpConfigScope(options.scope)
845
+ : undefined;
846
+ const rows = await effectiveMcpRows(configStore, { scope });
847
+ const row = rows.find((entry) => entry.name === name);
848
+ if (!row) {
849
+ throw new Error(
850
+ `${notFoundWithSuggestion(
851
+ name,
852
+ rows.map((entry) => entry.name),
853
+ { noun: "Server" },
854
+ )}. Use 'mcp add' first.`,
855
+ );
856
+ }
857
+ if (inferTransport(row) !== "stdio") {
858
+ throw new Error(
859
+ `MCP server "${name}" does not use the stdio transport`,
860
+ );
861
+ }
862
+
863
+ const authorized = authorizeMcpRowForConnect(row);
864
+ const approval = consumeMcpStdioExecutionAuthority(
865
+ authorized.mcpStdioExecutionAuthority,
866
+ { serverName: name, config: authorized },
867
+ );
868
+ const invocation = materializeApprovedMcpStdioInvocation(approval);
869
+ const approvalRecord = resolveMcpStdioExecutionApproval(approval);
870
+ const materialized = materializeMcpStdioNpmPackage({
871
+ approvalRecord,
872
+ config: invocation,
873
+ packageSpec: exact.spec,
874
+ ...(options.bin ? { binName: options.bin } : {}),
875
+ env: process.env,
876
+ processBrokerRunSync: (command, args, spawnOptions) =>
877
+ executionBroker.spawnSync(command, args, {
878
+ ...spawnOptions,
879
+ origin: `mcp:package-materialization:${name}`,
880
+ policy: "allow",
881
+ scope: "mcp",
882
+ shell: false,
883
+ }),
884
+ });
885
+ const prepared = prepareMcpStdioExecutableIdentity({
886
+ serverName: name,
887
+ config: invocation,
888
+ approval,
889
+ cwd: process.cwd(),
890
+ env: process.env,
891
+ retrust: true,
892
+ });
893
+ const result = {
894
+ name,
895
+ package: exact.spec,
896
+ generation: materialized.generation,
897
+ manifestDigest: materialized.manifestDigest,
898
+ identityDigest: prepared.identityDigest,
899
+ closure: materialized.identity,
900
+ command: prepared.identity.command,
901
+ entrypoints: prepared.identity.entrypoints,
902
+ };
903
+ if (options.json) {
904
+ console.log(JSON.stringify(result, null, 2));
905
+ } else {
906
+ logger.log(
907
+ chalk.green(
908
+ `Materialized and trusted ${exact.spec} for MCP server "${name}".`,
909
+ ),
910
+ );
911
+ logger.log(
912
+ ` ${chalk.gray("Generation:")} ${materialized.generation}`,
913
+ );
914
+ logger.log(
915
+ ` ${chalk.gray("Dependency closure:")} sha256:${materialized.identity.closureDigest} (${materialized.identity.fileCount} files, ${materialized.identity.totalBytes} bytes)`,
916
+ );
917
+ logger.log(
918
+ ` ${chalk.gray("Execution capsule:")} sha256:${materialized.identity.capsule.sha256} (${materialized.identity.capsule.bytes} bytes, ${materialized.identity.capsule.inputCount} bundled inputs)`,
919
+ );
920
+ }
921
+ await shutdown();
922
+ } catch (err) {
923
+ logger.error(`Failed: ${err.message}`);
924
+ process.exitCode = 1;
925
+ await shutdown();
926
+ }
927
+ });
928
+
929
+ mcp
930
+ .command("trust-executable <name>")
931
+ .description(
932
+ "Review and trust the current executable and interpreter-entrypoint bytes for one stdio MCP server",
933
+ )
934
+ .option(
935
+ "--scope <scope>",
936
+ `Configuration scope: ${MCP_CONFIG_SCOPES.join(" | ")}`,
937
+ )
938
+ .option("--json", "Output the trusted paths and SHA-256 identities as JSON")
939
+ .action(async (name, options) => {
940
+ try {
941
+ const ctx = await bootstrap({ verbose: program.opts().verbose });
942
+ if (!ctx.db) throw new Error("Database not available");
943
+ const configStore = new MCPServerConfig(ctx.db.getDatabase());
944
+ const scope = options.scope
945
+ ? normalizeMcpConfigScope(options.scope)
946
+ : undefined;
947
+ const rows = await effectiveMcpRows(configStore, { scope });
948
+ const row = rows.find((entry) => entry.name === name);
949
+ if (!row) {
950
+ throw new Error(
951
+ `${notFoundWithSuggestion(
952
+ name,
953
+ rows.map((entry) => entry.name),
954
+ { noun: "Server" },
955
+ )}. Use 'mcp add' first.`,
956
+ );
957
+ }
958
+ if (inferTransport(row) !== "stdio") {
959
+ throw new Error(
960
+ `MCP server "${name}" does not use the stdio transport`,
961
+ );
962
+ }
963
+
964
+ const authorized = authorizeMcpRowForConnect(row);
965
+ const approval = consumeMcpStdioExecutionAuthority(
966
+ authorized.mcpStdioExecutionAuthority,
967
+ { serverName: name, config: authorized },
968
+ );
969
+ const invocation = materializeApprovedMcpStdioInvocation(approval);
970
+ const prepared = prepareMcpStdioExecutableIdentity({
971
+ serverName: name,
972
+ config: invocation,
973
+ approval,
974
+ cwd: process.cwd(),
975
+ env: process.env,
976
+ retrust: true,
977
+ });
978
+ const result = {
979
+ name,
980
+ status: prepared.trustStatus,
981
+ identityDigest: prepared.identityDigest,
982
+ command: prepared.identity.command,
983
+ entrypoints: prepared.identity.entrypoints,
984
+ };
985
+ if (options.json) {
986
+ console.log(JSON.stringify(result, null, 2));
987
+ } else {
988
+ logger.log(
989
+ chalk.green(`Trusted MCP stdio executable identity for "${name}".`),
990
+ );
991
+ logger.log(
992
+ ` ${chalk.gray("Command:")} ${result.command.realPath} sha256:${result.command.sha256}`,
993
+ );
994
+ for (const entrypoint of result.entrypoints) {
995
+ logger.log(
996
+ ` ${chalk.gray(`${entrypoint.role}:`)} ${entrypoint.realPath} sha256:${entrypoint.sha256}`,
997
+ );
998
+ }
999
+ }
1000
+ await shutdown();
1001
+ } catch (err) {
1002
+ logger.error(`Failed: ${err.message}`);
1003
+ process.exitCode = 1;
1004
+ await shutdown();
1005
+ }
1006
+ });
1007
+
776
1008
  // mcp add — add/update a server config
777
1009
  mcp
778
1010
  .command("add")
@@ -1207,11 +1439,13 @@ export function registerMcpCommand(program) {
1207
1439
  workspaceBinding: commandWorkspaceBinding(),
1208
1440
  });
1209
1441
  try {
1210
- const connected = await client.connect(row.name, {
1211
- ...row,
1212
- connectTimeoutMs: timeoutMs,
1213
- requestTimeoutMs: timeoutMs,
1214
- });
1442
+ const connected = await client.connect(
1443
+ row.name,
1444
+ authorizeMcpRowForConnect(row, {
1445
+ connectTimeoutMs: timeoutMs,
1446
+ requestTimeoutMs: timeoutMs,
1447
+ }),
1448
+ );
1215
1449
  diagnostics.push({
1216
1450
  ...record,
1217
1451
  ok: true,
@@ -1301,7 +1535,10 @@ export function registerMcpCommand(program) {
1301
1535
  const spinner = ora(`Connecting to ${name}...`).start();
1302
1536
  const client = getClient();
1303
1537
 
1304
- const result = await client.connect(name, serverConfig);
1538
+ const result = await client.connect(
1539
+ name,
1540
+ authorizeMcpRowForConnect(serverConfig),
1541
+ );
1305
1542
  spinner.stop();
1306
1543
 
1307
1544
  if (options.json) {
@@ -41,7 +41,7 @@ export function registerServeCommand(program) {
41
41
  )
42
42
  .option(
43
43
  "--bundle <path>",
44
- "Agent bundle directory — applies AGENTS.md, MCP, and approval policy to all sessions",
44
+ "Agent bundle directory; may execute local MCP commands from mcp.json",
45
45
  )
46
46
  .action(async (opts) => {
47
47
  try {
@@ -0,0 +1,129 @@
1
+ import chalk from "chalk";
2
+ import { numericOption } from "../lib/cli-numeric.js";
3
+ import { logger } from "../lib/logger.js";
4
+ import { getPrLinks } from "../lib/pr-link-store.js";
5
+ import {
6
+ getJsonlSessionMetadata,
7
+ rebuildMessages,
8
+ resolveSessionAuthority,
9
+ } from "../harness/jsonl-session-store.js";
10
+
11
+ export function registerSessionShowSubcommand(session, program) {
12
+ session
13
+ .command("show")
14
+ .description("Show a session's messages")
15
+ .argument("<id>", "Session ID (or prefix)")
16
+ .option("-n, --limit <n>", "Max messages to show")
17
+ .option("--json", "Output as JSON")
18
+ .action(async (id, options) => {
19
+ let ctx = null;
20
+ let shutdown = null;
21
+ try {
22
+ let sess = null;
23
+
24
+ // The feature flag controls creation/migration, not authority. Once a
25
+ // canonical namespace witness exists it must fence the legacy DB even
26
+ // if JSONL_SESSION is later disabled.
27
+ const authority = resolveSessionAuthority(id);
28
+ const jsonlId = authority?.readable ? authority.id : null;
29
+ if (authority && !authority.readable) {
30
+ logger.error(
31
+ `Session ${authority.id} has canonical persistence evidence but no readable transcript (${authority.presence}).`,
32
+ );
33
+ process.exitCode = 1;
34
+ return;
35
+ }
36
+ if (jsonlId) {
37
+ const metadata = getJsonlSessionMetadata(jsonlId);
38
+ const messages = rebuildMessages(jsonlId);
39
+ sess = {
40
+ id: jsonlId,
41
+ title: metadata?.title || "Untitled",
42
+ provider: metadata?.provider || "",
43
+ model: metadata?.model || "",
44
+ message_count: messages.length,
45
+ messages,
46
+ _store: "jsonl",
47
+ };
48
+ }
49
+
50
+ // Keep SQLite and the application bootstrap outside the canonical
51
+ // JSONL read path. Legacy sessions still retain the original fallback.
52
+ if (!sess) {
53
+ const runtime = await import("../runtime/bootstrap.js");
54
+ const sessionManager = await import("../lib/session-manager.js");
55
+ shutdown = runtime.shutdown;
56
+ ctx = await runtime.bootstrap({ verbose: program.opts().verbose });
57
+ if (ctx?.db) {
58
+ sess = sessionManager.getSession(ctx.db.getDatabase(), id);
59
+ }
60
+ }
61
+
62
+ if (!sess) {
63
+ logger.error(`Session not found: ${id}`);
64
+ process.exitCode = 1;
65
+ return;
66
+ }
67
+
68
+ try {
69
+ const prLinks = getPrLinks(sess.id);
70
+ if (prLinks.length > 0) sess.prLinks = prLinks;
71
+ } catch {
72
+ // PR decoration is cosmetic.
73
+ }
74
+
75
+ if (options.json) {
76
+ console.log(JSON.stringify(sess, null, 2));
77
+ return;
78
+ }
79
+
80
+ logger.log(chalk.bold(sess.title));
81
+ logger.log(
82
+ chalk.gray(
83
+ `ID: ${sess.id} Provider: ${sess.provider} Model: ${sess.model} Messages: ${sess.message_count}`,
84
+ ),
85
+ );
86
+ if (sess.prLinks) {
87
+ for (const pr of sess.prLinks) {
88
+ logger.log(
89
+ chalk.magenta(
90
+ `PR: #${pr.number}${pr.state ? ` ${pr.state}` : ""}${pr.url ? ` ${pr.url}` : ""}`,
91
+ ),
92
+ );
93
+ }
94
+ }
95
+ logger.log("");
96
+
97
+ let messages = sess.messages;
98
+ if (options.limit) {
99
+ messages = messages.slice(
100
+ -numericOption(options.limit, {
101
+ name: "--limit",
102
+ integer: true,
103
+ min: 1,
104
+ }),
105
+ );
106
+ }
107
+
108
+ for (const message of messages) {
109
+ if (message.role === "system") continue;
110
+ const label =
111
+ message.role === "user" ? chalk.green("you> ") : chalk.blue("ai> ");
112
+ logger.log(`${label}${(message.content || "").substring(0, 500)}`);
113
+ logger.log("");
114
+ }
115
+ } catch (error) {
116
+ logger.error(`Failed: ${error.message}`);
117
+ process.exitCode = 1;
118
+ } finally {
119
+ if (ctx && shutdown) await shutdown();
120
+ }
121
+ });
122
+ }
123
+
124
+ export function registerSessionShowCommand(program) {
125
+ const session = program
126
+ .command("session")
127
+ .description("Conversation session management");
128
+ registerSessionShowSubcommand(session, program);
129
+ }