chainlesschain 0.163.2 → 0.163.4

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 (222) hide show
  1. package/package.json +3 -2
  2. package/scripts/command-lifecycle-report.mjs +330 -38
  3. package/src/assets/web-panel/assets/{AIOps-DnGsmsqJ.js → AIOps-DB5X7qqV.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-CrO6fcQ7.js → ActionButton-DxHRtKLk.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-DsBdOaP2.js → Analytics-DIH5QrxT.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-DmQslKUB.js → AppLayout-uu0oxVz7.js} +5 -5
  7. package/src/assets/web-panel/assets/{Artifacts-BvyrT_QQ.js → Artifacts-BNSMiW9Y.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-prndoLiC.js → Audit-DcAzB4_x.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-DOTFyA55.js → BackgroundAgents-ClSsvjIc.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-9zOnPp_8.js → Backup-BMciY0js.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-C4PC6sAG.js → BaseInput-Hn3b57Sh.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-BBAF-W9v.js → Chat-CoSlC53V.js} +6 -6
  13. package/src/assets/web-panel/assets/{ChatBubbleRenderer-CWhvvloO.js → ChatBubbleRenderer-CFevJ3So.js} +1 -1
  14. package/src/assets/web-panel/assets/{Checkbox-BI9iculd.js → Checkbox-B4L4Eu4w.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-3DP9BCKb.js → Codegen-C77FgRxF.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-df-2TnJX.js → Col-BrLtJLH3.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-CHs8gG_A.js → Community-Be7pXXhA.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-CDfF6q7V.js → Compact-DuGPecjo.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-CthrDnO7.js → Compliance-CzS66mjP.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-HjIqsWJw.js → Cowork-CEhjCoyK.js} +2 -2
  21. package/src/assets/web-panel/assets/{Cron-BKc196fb.js → Cron-D7ir8Vja.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-CJnjdc8W.js → Crosschain-BcXmuLxf.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-BHUy-8Q2.js → DID-Cto1dtBy.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-QDB7sKeY.js → Dashboard-B7KjgwOX.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-DStcVK11.js → Dropdown-COMqxijg.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-BwSUskMJ.js → EmailListRenderer-BZrya-nf.js} +1 -1
  27. package/src/assets/web-panel/assets/{FamilyGuardDashboard-DgF_kurT.js → FamilyGuardDashboard-AmVeMq0J.js} +1 -1
  28. package/src/assets/web-panel/assets/{Federation-k8wvv-wN.js → Federation-kZU8c-27.js} +1 -1
  29. package/src/assets/web-panel/assets/{FormItemContext-C11qoq2r.js → FormItemContext-sOV22v2-.js} +1 -1
  30. package/src/assets/web-panel/assets/{GenericCardRenderer-BIIpr9kg.js → GenericCardRenderer-BUuLtGCz.js} +1 -1
  31. package/src/assets/web-panel/assets/{Git-BlA1exTe.js → Git-K-ZxsLsH.js} +2 -2
  32. package/src/assets/web-panel/assets/{Governance-CYa1ZYM4.js → Governance-D3OEnawI.js} +1 -1
  33. package/src/assets/web-panel/assets/{Inference-6_kKVIt6.js → Inference-Bll0gRmP.js} +1 -1
  34. package/src/assets/web-panel/assets/{KnowledgeGraph-CB4AwxYy.js → KnowledgeGraph-DBXwjr53.js} +1 -1
  35. package/src/assets/web-panel/assets/{Logs-xf7nHFAe.js → Logs-CEzPwEfP.js} +2 -2
  36. package/src/assets/web-panel/assets/{MarkdownRenderer-Bf3DEqP6.js → MarkdownRenderer-CLmCbHx6.js} +1 -1
  37. package/src/assets/web-panel/assets/{Marketplace-aPg8e4Jt.js → Marketplace-BYyRyOPz.js} +1 -1
  38. package/src/assets/web-panel/assets/{McpTools-C-TNlVUf.js → McpTools-DVu8w_rM.js} +5 -5
  39. package/src/assets/web-panel/assets/{Memory-DMTPIpGa.js → Memory-tenuZ_hO.js} +2 -2
  40. package/src/assets/web-panel/assets/{MobileBridge-BxyvveRq.js → MobileBridge-Bxgy4ozS.js} +1 -1
  41. package/src/assets/web-panel/assets/{MobileProjects-DyPCrAyQ.js → MobileProjects-Dgx1D6sc.js} +1 -1
  42. package/src/assets/web-panel/assets/{Mtc-BdhqNXp6.js → Mtc-CRfJ8r8j.js} +5 -5
  43. package/src/assets/web-panel/assets/{MtcAudit-Cz-HFxzW.js → MtcAudit-BBJq4Aiz.js} +5 -5
  44. package/src/assets/web-panel/assets/{Multisig-CIUaFNsx.js → Multisig-B3ii9lai.js} +3 -3
  45. package/src/assets/web-panel/assets/{NLProgramming-CWe6-J17.js → NLProgramming-FIi-Cubv.js} +1 -1
  46. package/src/assets/web-panel/assets/{Notes-vYAKeviU.js → Notes-DIq8MPf1.js} +3 -3
  47. package/src/assets/web-panel/assets/{NotificationSettings-DQL9-2d7.js → NotificationSettings-BFOD9eGd.js} +1 -1
  48. package/src/assets/web-panel/assets/{OrderTableRenderer-DnXj1jBn.js → OrderTableRenderer--41u7vre.js} +1 -1
  49. package/src/assets/web-panel/assets/{Organization-B3spU8AN.js → Organization-B_0AWztW.js} +2 -2
  50. package/src/assets/web-panel/assets/{Overflow-DgEwo7vm.js → Overflow-B6I7TuXv.js} +1 -1
  51. package/src/assets/web-panel/assets/{P2P-hujMRH8X.js → P2P-Cdf6qens.js} +2 -2
  52. package/src/assets/web-panel/assets/{PdhVaultBrowser-C_qhdg9h.js → PdhVaultBrowser-B_0FcQJY.js} +3 -3
  53. package/src/assets/web-panel/assets/{Permissions-vp7LMcSf.js → Permissions-6nFBjsQp.js} +4 -4
  54. package/src/assets/web-panel/assets/{PersonalDataHub-Dxr5Hgnq.js → PersonalDataHub-nQYV7xpn.js} +3 -3
  55. package/src/assets/web-panel/assets/{Pipeline-DEPZqqH4.js → Pipeline-CBVod5jm.js} +1 -1
  56. package/src/assets/web-panel/assets/{Privacy-DTpDiKPe.js → Privacy-D52jW1Nt.js} +1 -1
  57. package/src/assets/web-panel/assets/{ProjectInit-jDJsRWmF.js → ProjectInit-Bdx3BYhf.js} +2 -2
  58. package/src/assets/web-panel/assets/{ProjectSettings-Dhor5RWH.js → ProjectSettings-b7xr4DUa.js} +2 -2
  59. package/src/assets/web-panel/assets/Projects-DhfifCKx.js +1 -0
  60. package/src/assets/web-panel/assets/Providers-Dy_PgDMr.js +1 -0
  61. package/src/assets/web-panel/assets/{QrScannerModal-CjIw-wIb.js → QrScannerModal-FQKSmc3e.js} +1 -1
  62. package/src/assets/web-panel/assets/{QuickAsk-DX6jcqoi.js → QuickAsk-CSTrhzcF.js} +1 -1
  63. package/src/assets/web-panel/assets/{Recommend-DopXkhar.js → Recommend-CxMABOUh.js} +1 -1
  64. package/src/assets/web-panel/assets/{RemoteSession-BLvqJE9c.js → RemoteSession-Cv2T8yRa.js} +2 -2
  65. package/src/assets/web-panel/assets/{Reputation-DhRj2Me7.js → Reputation-CE1k4Vvu.js} +1 -1
  66. package/src/assets/web-panel/assets/{Row-DQ53vuPq.js → Row-BNgNcAV_.js} +1 -1
  67. package/src/assets/web-panel/assets/{RssFeed-BslvwiBD.js → RssFeed-5ZiBZ3ph.js} +3 -3
  68. package/src/assets/web-panel/assets/{Search-DJKBDNKZ.js → Search-mDOIF1UV.js} +1 -1
  69. package/src/assets/web-panel/assets/{Security-COhpxHER.js → Security-CtuCTC-e.js} +3 -3
  70. package/src/assets/web-panel/assets/{Services-dbulD6cI.js → Services-DxFO2Zg7.js} +2 -2
  71. package/src/assets/web-panel/assets/{Skeleton-ciIVNfhC.js → Skeleton-CKmKkH9y.js} +1 -1
  72. package/src/assets/web-panel/assets/{Skills-AiRTkTCk.js → Skills-Bmzl9qkk.js} +1 -1
  73. package/src/assets/web-panel/assets/{Sla-DDMcWYBc.js → Sla-9RqaWHOC.js} +1 -1
  74. package/src/assets/web-panel/assets/{SpeechSettings-BPxWbpXO.js → SpeechSettings-CGdzFIYw.js} +1 -1
  75. package/src/assets/web-panel/assets/{SyncSettings-BoEOXCyg.js → SyncSettings-CvNuCeBT.js} +2 -2
  76. package/src/assets/web-panel/assets/Tasks-B_sLdcnw.js +1 -0
  77. package/src/assets/web-panel/assets/{Templates-UowY8Ixe.js → Templates-D9_YijdK.js} +1 -1
  78. package/src/assets/web-panel/assets/{Tenant-DauSLQXN.js → Tenant-Cuc7BUSP.js} +1 -1
  79. package/src/assets/web-panel/assets/{Terminal-DBj7Jneq.js → Terminal-6VYRnJgd.js} +2 -2
  80. package/src/assets/web-panel/assets/{TimelineRenderer-UMrPwoZC.js → TimelineRenderer-GtK8xd8Y.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tokens-4ea96-bn.js → Tokens-BZ94Lt5W.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trigger--ISCqt4b.js → Trigger-DEcZgDaX.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trust-D4GVimRJ.js → Trust-CC3z9THe.js} +1 -1
  84. package/src/assets/web-panel/assets/{UkeySign-Ci-nXRQc.js → UkeySign-Cvtw8cV3.js} +1 -1
  85. package/src/assets/web-panel/assets/{VideoEditing-Cjk7mKPw.js → VideoEditing-CL4e6Bn3.js} +1 -1
  86. package/src/assets/web-panel/assets/{Wallet-BgOLOO3Z.js → Wallet-ycEemP27.js} +2 -2
  87. package/src/assets/web-panel/assets/{WebAuthn-CCX0K29i.js → WebAuthn-DgZ4X_aw.js} +5 -5
  88. package/src/assets/web-panel/assets/{WorkflowEditor-Ch3zgIsE.js → WorkflowEditor-D0qMhSv7.js} +1 -1
  89. package/src/assets/web-panel/assets/{chat-DKOU_2Vb.js → chat-DsAg01Zn.js} +1 -1
  90. package/src/assets/web-panel/assets/{colors-6OVo4u3C.js → colors-B0oqAhrQ.js} +1 -1
  91. package/src/assets/web-panel/assets/{compact-item-BH78Hlsq.js → compact-item-CmX0Rabz.js} +1 -1
  92. package/src/assets/web-panel/assets/{createContext-CFRpSbbC.js → createContext-Be4cn1Ub.js} +1 -1
  93. package/src/assets/web-panel/assets/devWarning-CP2qzG6D.js +1 -0
  94. package/src/assets/web-panel/assets/{hasIn-DNQhgcVi.js → hasIn-D5v12kVq.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-BkN3iTTp.js → index-0eWLkQKT.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-CkNEMANR.js → index-301ogenv.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-D3RtTT4K.js → index-5LGY0JbG.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-dDkoL4Pe.js → index-7VKDn-t1.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-BHa4WyTZ.js → index-8WvYGnON.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-CaYqY35Z.js → index-B1YGjOWC.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-bKm3TUDp.js → index-B3mUHuVc.js} +1 -1
  102. package/src/assets/web-panel/assets/{index--rq90rL9.js → index-BA4oulaP.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-DaDgdJYj.js → index-BBREnn1V.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-B_Z-YoxX.js → index-BBvyHguy.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-CkqHgG-b.js → index-BKmsS2jj.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-CrcLHN2F.js → index-BRIqLy1m.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-BaVE6E8y.js → index-BXGSbelg.js} +3 -3
  108. package/src/assets/web-panel/assets/{index-BYrnm5Ob.js → index-BaE0Ui07.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-BDSR7ecX.js → index-BoAIAZ5C.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-CNuCHHQT.js → index-BqltWojQ.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-Eag8e_mA.js → index-CGiIyTZw.js} +1 -1
  112. package/src/assets/web-panel/assets/index-CKB0vbJU.js +1 -0
  113. package/src/assets/web-panel/assets/{index-BepBTpa8.js → index-CZ2wUEgr.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-HNGGVF6o.js → index-CZpfzcuy.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-AuBhLqOm.js → index-Ckrk3pIV.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-7TC3S8SN.js → index-CqoCZ5vR.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-CFPJ8yzF.js → index-CyWBir7N.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-Bb6kDrUx.js → index-CyyGTMKd.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-DKN2noIF.js → index-D0BSkxYQ.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-Du0rnksC.js → index-D5YVopyr.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-BxRy5LPR.js → index-DKUBj36_.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-sm7W8AXy.js → index-DM724NgU.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-BujsOZfc.js → index-DQRsQen0.js} +1 -1
  124. package/src/assets/web-panel/assets/index-DgoXmwqB.js +1 -0
  125. package/src/assets/web-panel/assets/{index-Y9MJv28e.js → index-DikJ0Qqe.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-caye7AOE.js → index-Dn2dSdXx.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-cdf7fd7d.js → index-DyUaFWEk.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-BnnXQot_.js → index-Hfe_dEGx.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-DvHGtNnF.js → index-_JjRLSD0.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-nbfHl1oV.js → index-frSojpHj.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-Cu3L4r5l.js → index-jK3ax6Z6.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-D84id2Y4.js → index-qMuZ-NRR.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-hPY0fFrd.js → index-q_fQ94SE.js} +1 -1
  134. package/src/assets/web-panel/assets/{initDefaultProps-BZ9w6jPL.js → initDefaultProps-D4VdhJ9_.js} +1 -1
  135. package/src/assets/web-panel/assets/{motion-BnwUiOho.js → motion-CZJA0MQW.js} +1 -1
  136. package/src/assets/web-panel/assets/{move-ByUKJnNm.js → move-BqEs7Sb1.js} +1 -1
  137. package/src/assets/web-panel/assets/{mtc-parser-V7yK1KEl.js → mtc-parser-BpHEtsu1.js} +1 -1
  138. package/src/assets/web-panel/assets/{omit-BEXBBt4j.js → omit-BW94tY9W.js} +1 -1
  139. package/src/assets/web-panel/assets/{pickAttrs-qDm_46Gi.js → pickAttrs-BnBjPWP9.js} +1 -1
  140. package/src/assets/web-panel/assets/{placementArrow-BIbhEo_0.js → placementArrow-uUkjQ_hu.js} +1 -1
  141. package/src/assets/web-panel/assets/{responsiveObserve-NbPbDgA_.js → responsiveObserve-B-klUqXK.js} +1 -1
  142. package/src/assets/web-panel/assets/{slide-BnUWglZ0.js → slide-CvY1cNAs.js} +1 -1
  143. package/src/assets/web-panel/assets/{statusUtils-BX8_wZI5.js → statusUtils-Ix5sEDT2.js} +1 -1
  144. package/src/assets/web-panel/assets/{styleChecker-BV4OycQX.js → styleChecker-C8qcXOne.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFlexGapSupport-Od_H5llY.js → useFlexGapSupport-KNF6Kj8f.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFs-BWI-PyiX.js → useFs-DGJr345n.js} +1 -1
  147. package/src/assets/web-panel/assets/{usePersonalDataHub-BqMuhG3g.js → usePersonalDataHub-BboN99rI.js} +1 -1
  148. package/src/assets/web-panel/assets/{vnode-DNd23z6f.js → vnode-Bgt8Vgte.js} +1 -1
  149. package/src/assets/web-panel/assets/{zoom-Cjaxnm7l.js → zoom-BhJtErgt.js} +1 -1
  150. package/src/assets/web-panel/index.html +1 -1
  151. package/src/command-help-index.json +2 -2
  152. package/src/commands/agenda.js +6 -5
  153. package/src/commands/agent.js +237 -75
  154. package/src/commands/agents.js +6 -0
  155. package/src/commands/artifacts.js +98 -0
  156. package/src/commands/background-session.js +11 -1
  157. package/src/commands/mcp.js +218 -31
  158. package/src/commands/review.js +221 -22
  159. package/src/commands/session-mcp-recovery.js +5 -5
  160. package/src/data/changelog.json +27 -1
  161. package/src/gateways/ws/ws-agent-handler.js +492 -14
  162. package/src/harness/jsonl-session-store.js +39 -1
  163. package/src/harness/mcp-client.js +414 -71
  164. package/src/harness/prompt-compressor.js +24 -0
  165. package/src/harness/provider-backed-compaction.js +205 -0
  166. package/src/harness/worktree-isolator.js +26 -3
  167. package/src/lib/agent-worktree.js +41 -2
  168. package/src/lib/app-preview.js +3 -0
  169. package/src/lib/background-agent-supervisor.js +790 -186
  170. package/src/lib/background-command-argv.js +318 -0
  171. package/src/lib/background-launch-profile.js +1 -0
  172. package/src/lib/background-phase-reporter.js +22 -2
  173. package/src/lib/background-worktree-policy.js +109 -0
  174. package/src/lib/command-lifecycle-report.js +1340 -145
  175. package/src/lib/cowork-mcp-tools.js +51 -6
  176. package/src/lib/cowork-task-runner.js +1 -0
  177. package/src/lib/delivery-coordinator.js +30 -5
  178. package/src/lib/delivery-production-adapter.js +1777 -0
  179. package/src/lib/delivery-production-runner.js +240 -0
  180. package/src/lib/durable-security-store.js +29 -17
  181. package/src/lib/execution-trace/trace-context.cjs +179 -0
  182. package/src/lib/execution-trace/trace-context.js +8 -175
  183. package/src/lib/mcp-call-ledger-store.js +58 -6
  184. package/src/lib/mcp-headers-helper.js +76 -8
  185. package/src/lib/mcp-host-recovery-runtime.js +2 -0
  186. package/src/lib/mcp-ledger-recovery-admission.js +39 -3
  187. package/src/lib/mcp-recovery-adjudication.js +256 -19
  188. package/src/lib/mcp-sandbox-policy.js +184 -0
  189. package/src/lib/mcp-stdio-capsule-builder-worker.cjs +495 -0
  190. package/src/lib/mcp-stdio-executable-identity.js +33 -2
  191. package/src/lib/mcp-stdio-execution-authority.js +163 -0
  192. package/src/lib/mcp-stdio-immutable-vfs-resolver.cjs +830 -0
  193. package/src/lib/mcp-stdio-package-materialization.js +721 -333
  194. package/src/lib/mcp-stdio-workspace-authority.js +252 -0
  195. package/src/lib/observability/index.js +2 -0
  196. package/src/lib/observability/otlp-exporter.js +2 -2
  197. package/src/lib/packer/pack-update-applier.js +8 -1
  198. package/src/lib/packer/pkg-config-generator.js +34 -0
  199. package/src/lib/plugin-runtime/sandbox-policy.js +42 -2
  200. package/src/lib/process-execution-broker/index.js +213 -109
  201. package/src/lib/process-execution-broker/platform-sandbox.js +1024 -169
  202. package/src/lib/process-tree-termination.js +17 -1
  203. package/src/lib/scheduler-kernel/contract.js +315 -0
  204. package/src/lib/scheduler-kernel/store.js +1345 -0
  205. package/src/lib/session-host-lease.js +403 -30
  206. package/src/lib/session-persistence-failure.js +4 -1
  207. package/src/lib/skill-mcp.js +65 -4
  208. package/src/lib/sub-agent-context.js +8 -0
  209. package/src/lib/web-fetch.js +4 -4
  210. package/src/repl/agent-repl.js +285 -38
  211. package/src/runtime/agent-core.js +1044 -90
  212. package/src/runtime/agent-runtime.js +61 -8
  213. package/src/runtime/headless-runner.js +260 -166
  214. package/src/runtime/headless-stream.js +254 -25
  215. package/src/runtime/mcp-config.js +235 -28
  216. package/src/workers/background-agent-worker.js +492 -71
  217. package/src/assets/web-panel/assets/Projects-08xUDZGt.js +0 -1
  218. package/src/assets/web-panel/assets/Providers-BGs47s1a.js +0 -1
  219. package/src/assets/web-panel/assets/Tasks-CEYFJwmr.js +0 -1
  220. package/src/assets/web-panel/assets/devWarning-DEMblAIm.js +0 -1
  221. package/src/assets/web-panel/assets/index-BTvq-36D.js +0 -1
  222. package/src/assets/web-panel/assets/index-hUpvk6Jl.js +0 -1
@@ -73,7 +73,7 @@ const _ipcBus = null;
73
73
  function getTraceCtx() {
74
74
  if (!_traceCtx) {
75
75
  try {
76
- _traceCtx = require("../execution-trace/trace-context.js");
76
+ _traceCtx = require("../execution-trace/trace-context.cjs");
77
77
  } catch {
78
78
  _traceCtx = null;
79
79
  }
@@ -1218,6 +1218,7 @@ class ProcessExecutionBroker extends EventEmitter {
1218
1218
  "entrySnapshotAtomic",
1219
1219
  "runtimeLaunchAtomic",
1220
1220
  "mcpCapsuleCodeSnapshot",
1221
+ "runtimeDetachedChildSpawnVerified",
1221
1222
  ]) {
1222
1223
  if (
1223
1224
  plan.runtimeProbe[field] !== undefined &&
@@ -1237,6 +1238,7 @@ class ProcessExecutionBroker extends EventEmitter {
1237
1238
  "runtimeSnapshotBytes",
1238
1239
  "runtimeAttestedBytes",
1239
1240
  "entrySnapshotBytes",
1241
+ "capabilityCount",
1240
1242
  ]) {
1241
1243
  if (
1242
1244
  plan.runtimeProbe[field] !== undefined &&
@@ -1320,6 +1322,20 @@ class ProcessExecutionBroker extends EventEmitter {
1320
1322
  "pluginTreeSnapshotContractBound",
1321
1323
  "pluginTreeSnapshotAtomic",
1322
1324
  ];
1325
+ const nodePluginTreeSnapshotEvidence =
1326
+ plan.runtimeProbe.kind === "linux-bwrap-plugin-node-policy-v1" &&
1327
+ plan.runtimeProbe.targetRuntime === "node" &&
1328
+ plan.runtimeProbe.contentSnapshotScope === "plugin-entry-source";
1329
+ const nativePluginRuntimeEvidence =
1330
+ (plan.runtimeProbe.kind ===
1331
+ "linux-bwrap-plugin-native-static-elf-policy-v1" &&
1332
+ plan.runtimeProbe.targetRuntime === "native-static-elf") ||
1333
+ (plan.runtimeProbe.kind ===
1334
+ "linux-bwrap-plugin-native-dynamic-elf-policy-v1" &&
1335
+ plan.runtimeProbe.targetRuntime === "native-dynamic-elf");
1336
+ const nativePluginTreeSnapshotEvidence =
1337
+ nativePluginRuntimeEvidence &&
1338
+ plan.runtimeProbe.contentSnapshotScope === "plugin-entry-executable";
1323
1339
  if (
1324
1340
  pluginTreeSnapshot &&
1325
1341
  (plan.applied !== true ||
@@ -1334,11 +1350,10 @@ class ProcessExecutionBroker extends EventEmitter {
1334
1350
  plan.runtimeProbe.attempted !== true ||
1335
1351
  plan.runtimeProbe.runnable !== true ||
1336
1352
  plan.runtimeProbe.reason !== null ||
1337
- plan.runtimeProbe.kind !== "linux-bwrap-plugin-node-policy-v1" ||
1353
+ (!nodePluginTreeSnapshotEvidence &&
1354
+ !nativePluginTreeSnapshotEvidence) ||
1338
1355
  plan.runtimeProbe.probeRuntime !== "node" ||
1339
- plan.runtimeProbe.targetRuntime !== "node" ||
1340
1356
  plan.runtimeProbe.contentSnapshot !== true ||
1341
- plan.runtimeProbe.contentSnapshotScope !== "plugin-entry-source" ||
1342
1357
  plan.runtimeProbe.contentSnapshotMechanism !==
1343
1358
  "verified-o_tmpfile-copy-bwrap-ro-bind-data-v1" ||
1344
1359
  plan.runtimeProbe.handleAtomic !== false ||
@@ -1382,6 +1397,18 @@ class ProcessExecutionBroker extends EventEmitter {
1382
1397
  "Sandbox runtime probe plugin tree snapshot evidence requires pluginTreeContentSnapshot",
1383
1398
  );
1384
1399
  }
1400
+ const successfulNativeProbe =
1401
+ plan.applied === true &&
1402
+ plan.runtimeProbe.attempted === true &&
1403
+ plan.runtimeProbe.runnable === true &&
1404
+ plan.runtimeProbe.reason === null &&
1405
+ nativePluginRuntimeEvidence;
1406
+ if (successfulNativeProbe && !pluginTreeSnapshot) {
1407
+ throw this._sandboxError(
1408
+ "invalid_sandbox_plan",
1409
+ "Successful Linux native plugin evidence requires a complete plugin tree snapshot",
1410
+ );
1411
+ }
1385
1412
  const supervisorStringFields = [
1386
1413
  "supervisorBindingScope",
1387
1414
  "supervisorDescriptorBindingMechanism",
@@ -1733,6 +1760,7 @@ class ProcessExecutionBroker extends EventEmitter {
1733
1760
  plan.runtimeProbe.runtimeLaunchAtomic === true &&
1734
1761
  plan.runtimeProbe.runtimeLaunchMechanism ===
1735
1762
  "bwrap-descriptor-mount-node-runtime-exec-v1" &&
1763
+ plan.runtimeProbe.runtimeDetachedChildSpawnVerified === true &&
1736
1764
  plan.runtimeProbe.supervisorDescriptorBound === true &&
1737
1765
  plan.runtimeProbe.pluginTreeContentSnapshot === true &&
1738
1766
  plan.runtimeProbe.runtimeLaunchPath ===
@@ -1769,6 +1797,7 @@ class ProcessExecutionBroker extends EventEmitter {
1769
1797
  (backend === "windows-appcontainer-job-restricted-token" &&
1770
1798
  plan.runtimeProbe.kind ===
1771
1799
  "windows-appcontainer-launch-attestation-v1" &&
1800
+ plan.runtimeProbe.capabilityCount === 0 &&
1772
1801
  policyAttested === true &&
1773
1802
  policyDigest !== null)) &&
1774
1803
  plan.runtimeProbe.contentSnapshotScope ===
@@ -1804,6 +1833,17 @@ class ProcessExecutionBroker extends EventEmitter {
1804
1833
  );
1805
1834
  }
1806
1835
  }
1836
+ if (
1837
+ plan.runtimeProbe.kind ===
1838
+ "windows-appcontainer-launch-attestation-v1" &&
1839
+ plan.runtimeProbe.runnable === true &&
1840
+ plan.runtimeProbe.capabilityCount !== 0
1841
+ ) {
1842
+ throw this._sandboxError(
1843
+ "invalid_sandbox_plan",
1844
+ "Windows AppContainer runtime evidence must attest zero capabilities",
1845
+ );
1846
+ }
1807
1847
  const genericWorkspaceEvidenceFields = [
1808
1848
  "contractDigest",
1809
1849
  "policyDigest",
@@ -2078,6 +2118,9 @@ class ProcessExecutionBroker extends EventEmitter {
2078
2118
  ...(plan.runtimeProbe.targetRuntime !== undefined
2079
2119
  ? { targetRuntime: plan.runtimeProbe.targetRuntime }
2080
2120
  : {}),
2121
+ ...(plan.runtimeProbe.capabilityCount !== undefined
2122
+ ? { capabilityCount: plan.runtimeProbe.capabilityCount }
2123
+ : {}),
2081
2124
  ...(plan.runtimeProbe.contentSnapshot !== undefined
2082
2125
  ? { contentSnapshot: plan.runtimeProbe.contentSnapshot }
2083
2126
  : {}),
@@ -2090,6 +2133,12 @@ class ProcessExecutionBroker extends EventEmitter {
2090
2133
  ...(plan.runtimeProbe.runtimeLaunchAtomic !== undefined
2091
2134
  ? { runtimeLaunchAtomic: plan.runtimeProbe.runtimeLaunchAtomic }
2092
2135
  : {}),
2136
+ ...(plan.runtimeProbe.runtimeDetachedChildSpawnVerified !== undefined
2137
+ ? {
2138
+ runtimeDetachedChildSpawnVerified:
2139
+ plan.runtimeProbe.runtimeDetachedChildSpawnVerified,
2140
+ }
2141
+ : {}),
2093
2142
  ...(plan.runtimeProbe.runtimeLaunchMechanism !== undefined
2094
2143
  ? {
2095
2144
  runtimeLaunchMechanism: plan.runtimeProbe.runtimeLaunchMechanism,
@@ -2585,12 +2634,6 @@ class ProcessExecutionBroker extends EventEmitter {
2585
2634
  }
2586
2635
 
2587
2636
  _createWorkspaceProcessCloseFence(auditEntry, proc) {
2588
- if (
2589
- !Array.isArray(auditEntry.workspaceTransactionIds) ||
2590
- auditEntry.workspaceTransactionIds.length === 0
2591
- ) {
2592
- return null;
2593
- }
2594
2637
  return new Promise((resolve) => {
2595
2638
  if (typeof proc?.once === "function") {
2596
2639
  proc.once("close", (exitCode, signal) => {
@@ -2612,6 +2655,54 @@ class ProcessExecutionBroker extends EventEmitter {
2612
2655
  });
2613
2656
  }
2614
2657
 
2658
+ _postSpawnOwnershipError(
2659
+ error,
2660
+ { proc, auditEntry, workspaceProcessClosed, cleanup },
2661
+ ) {
2662
+ let failure =
2663
+ error instanceof Error
2664
+ ? error
2665
+ : new Error(String(error || "spawn failed"));
2666
+ if (
2667
+ failure.processTerminationRequested !== true &&
2668
+ failure.workspaceTerminationRequested !== true
2669
+ ) {
2670
+ try {
2671
+ if (typeof proc?.once === "function") proc.once("error", () => {});
2672
+ } catch {
2673
+ // Listener installation failure is itself post-spawn evidence.
2674
+ }
2675
+ try {
2676
+ proc?.kill?.("SIGKILL");
2677
+ } catch {
2678
+ // The close fence remains the only settlement authority.
2679
+ }
2680
+ }
2681
+ try {
2682
+ cleanup?.();
2683
+ } catch {
2684
+ // Ownership evidence must survive cleanup reporting failures.
2685
+ }
2686
+ const attach = (target) => {
2687
+ target.auditEntry = auditEntry;
2688
+ target.spawnedProcess = proc;
2689
+ target.workspaceProcessClosed = workspaceProcessClosed;
2690
+ target.workspaceTerminationRequested = true;
2691
+ return target;
2692
+ };
2693
+ try {
2694
+ return attach(failure);
2695
+ } catch {
2696
+ const wrapped = new Error(failure.message || "post-spawn failure", {
2697
+ cause: failure,
2698
+ });
2699
+ wrapped.name = failure.name || wrapped.name;
2700
+ if (failure.code !== undefined) wrapped.code = failure.code;
2701
+ failure = wrapped;
2702
+ return attach(failure);
2703
+ }
2704
+ }
2705
+
2615
2706
  _runPostSpawnSandbox(proc, plan, auditEntry) {
2616
2707
  if (!plan.applied || !plan.postSpawn.required) {
2617
2708
  this._applySandboxAudit(auditEntry, plan, plan.applied);
@@ -2855,10 +2946,15 @@ class ProcessExecutionBroker extends EventEmitter {
2855
2946
 
2856
2947
  _getTraceContext() {
2857
2948
  const traceCtx = getTraceCtx();
2858
- if (traceCtx && traceCtx.activeContext) {
2859
- return traceCtx.activeContext.value || null;
2860
- }
2861
- return null;
2949
+ const activeContext = traceCtx?.traceContext?.getCurrentContext?.() || null;
2950
+ if (!activeContext) return null;
2951
+ return {
2952
+ ...activeContext,
2953
+ traceparent: traceCtx.traceContext.formatTraceparent(
2954
+ activeContext.traceId,
2955
+ activeContext.spanId,
2956
+ ),
2957
+ };
2862
2958
  }
2863
2959
 
2864
2960
  _writeRplEntry(auditEntry, status = "started", error = null) {
@@ -3328,6 +3424,7 @@ class ProcessExecutionBroker extends EventEmitter {
3328
3424
  // Use native spawn from _native (set by patch-child-process.js)
3329
3425
  const nativeSpawnFn = this._native?.spawn || nativeSpawn;
3330
3426
  let proc;
3427
+ let workspaceProcessClosed = null;
3331
3428
  try {
3332
3429
  if (mcpStdioExecutableIdentityAuthority !== undefined) {
3333
3430
  const admitted = consumeMcpStdioExecutableIdentityAuthority(
@@ -3341,16 +3438,20 @@ class ProcessExecutionBroker extends EventEmitter {
3341
3438
  auditEntry.mcpStdioExecutableIdentityDigest = admitted.identityDigest;
3342
3439
  }
3343
3440
  proc = nativeSpawnFn(command, args, optsForSpawn);
3441
+ workspaceProcessClosed = this._createWorkspaceProcessCloseFence(
3442
+ auditEntry,
3443
+ proc,
3444
+ );
3344
3445
  this._bindWorkspaceTransactionProcess(auditEntry, proc);
3345
3446
  } catch (spawnError) {
3346
- if (proc && typeof proc.kill === "function") {
3347
- try {
3348
- proc.kill("SIGKILL");
3349
- } catch {
3350
- // The transaction remains unsettled if shutdown cannot be proven.
3351
- }
3352
- }
3353
- if (!proc) {
3447
+ if (proc) {
3448
+ throw this._postSpawnOwnershipError(spawnError, {
3449
+ proc,
3450
+ auditEntry,
3451
+ workspaceProcessClosed,
3452
+ cleanup: sandboxPlan.cleanup,
3453
+ });
3454
+ } else {
3354
3455
  try {
3355
3456
  this._settleWorkspaceTransactionSpawn(auditEntry, {
3356
3457
  error: spawnError.message,
@@ -3363,102 +3464,105 @@ class ProcessExecutionBroker extends EventEmitter {
3363
3464
  throw spawnError;
3364
3465
  }
3365
3466
  auditEntry.pid = proc.pid;
3366
- const workspaceProcessClosed = this._createWorkspaceProcessCloseFence(
3367
- auditEntry,
3368
- proc,
3369
- );
3370
- const cleanupSandbox = this._scheduleSandboxCleanup(
3371
- proc,
3372
- sandboxPlan.cleanup,
3373
- );
3374
- if (
3375
- sandboxPlan.applied === true &&
3376
- (sandboxPlan.backend === "linux-bwrap-workspace" ||
3377
- sandboxPlan.backend === "linux-bwrap" ||
3378
- sandboxPlan.backend === "linux-fd-code-snapshot") &&
3379
- sandboxPlan.postSpawn.required === false
3380
- ) {
3381
- // child_process.spawn() has synchronously duplicated every stdio entry
3382
- // into the launched process before returning. The generic/direct bwrap
3383
- // backends and the MCP anonymous-code snapshot backend are complete
3384
- // pre-spawn plans with no parent-side enforcement handle. Retaining
3385
- // their pinned descriptors until a long-lived process exits would turn
3386
- // each child into an avoidable FD leak.
3387
- cleanupSandbox();
3388
- }
3467
+ let cleanupSandbox = sandboxPlan.cleanup;
3389
3468
  try {
3390
- this._runPostSpawnSandbox(proc, sandboxPlan, auditEntry);
3391
- this._updateWorkspaceTransactionProcessGuarantees(auditEntry);
3392
- auditEntry.pid = proc.pid;
3393
- if (Number.isSafeInteger(proc.sandboxWrapperPid)) {
3394
- auditEntry.sandboxWrapperPid = proc.sandboxWrapperPid;
3395
- }
3396
- if (Number.isSafeInteger(proc.sandboxTargetPid)) {
3397
- auditEntry.sandboxTargetPid = proc.sandboxTargetPid;
3469
+ cleanupSandbox = this._scheduleSandboxCleanup(proc, sandboxPlan.cleanup);
3470
+ if (
3471
+ sandboxPlan.applied === true &&
3472
+ (sandboxPlan.backend === "linux-bwrap-workspace" ||
3473
+ sandboxPlan.backend === "linux-bwrap" ||
3474
+ sandboxPlan.backend === "linux-fd-code-snapshot") &&
3475
+ sandboxPlan.postSpawn.required === false
3476
+ ) {
3477
+ // child_process.spawn() has synchronously duplicated every stdio entry
3478
+ // into the launched process before returning. The generic/direct bwrap
3479
+ // backends and the MCP anonymous-code snapshot backend are complete
3480
+ // pre-spawn plans with no parent-side enforcement handle. Retaining
3481
+ // their pinned descriptors until a long-lived process exits would turn
3482
+ // each child into an avoidable FD leak.
3483
+ cleanupSandbox();
3398
3484
  }
3399
- } catch (postSpawnError) {
3400
- if (postSpawnError.processTerminationRequested !== true) {
3401
- try {
3402
- proc.kill?.("SIGKILL");
3403
- } catch {
3404
- // The close fence remains pending and recovery stays fail-closed.
3485
+ try {
3486
+ this._runPostSpawnSandbox(proc, sandboxPlan, auditEntry);
3487
+ this._updateWorkspaceTransactionProcessGuarantees(auditEntry);
3488
+ auditEntry.pid = proc.pid;
3489
+ if (Number.isSafeInteger(proc.sandboxWrapperPid)) {
3490
+ auditEntry.sandboxWrapperPid = proc.sandboxWrapperPid;
3491
+ }
3492
+ if (Number.isSafeInteger(proc.sandboxTargetPid)) {
3493
+ auditEntry.sandboxTargetPid = proc.sandboxTargetPid;
3494
+ }
3495
+ } catch (postSpawnError) {
3496
+ if (postSpawnError.processTerminationRequested !== true) {
3497
+ try {
3498
+ proc.kill?.("SIGKILL");
3499
+ } catch {
3500
+ // The close fence remains pending and recovery stays fail-closed.
3501
+ }
3405
3502
  }
3503
+ cleanupSandbox();
3504
+ this._recordSandboxDenial(auditEntry, postSpawnError, startTime);
3505
+ postSpawnError.auditEntry = auditEntry;
3506
+ postSpawnError.spawnedProcess = proc;
3507
+ postSpawnError.workspaceProcessClosed = workspaceProcessClosed;
3508
+ postSpawnError.workspaceTerminationRequested = true;
3509
+ throw postSpawnError;
3406
3510
  }
3407
- cleanupSandbox();
3408
- this._recordSandboxDenial(auditEntry, postSpawnError, startTime);
3409
- postSpawnError.auditEntry = auditEntry;
3410
- postSpawnError.spawnedProcess = proc;
3411
- postSpawnError.workspaceProcessClosed = workspaceProcessClosed;
3412
- postSpawnError.workspaceTerminationRequested = true;
3413
- throw postSpawnError;
3414
- }
3415
-
3416
- this._recordAudit(auditEntry);
3417
- this._writeRplEntry(auditEntry, "started");
3418
- this._emitHooksEvent("tool:start", {
3419
- executionId,
3420
- toolName: origin,
3421
- command,
3422
- args: [...auditEntry.args],
3423
- cwd,
3424
- pid: proc.pid,
3425
- component: origin,
3426
- });
3427
3511
 
3428
- proc.on("exit", (code, signal) => {
3429
- const endTime = Date.now();
3430
- auditEntry.exitCode = code;
3431
- auditEntry.signal = signal;
3432
- auditEntry.endTime = endTime;
3433
- auditEntry.durationMs = endTime - startTime;
3434
- this._writeRplEntry(auditEntry, "completed");
3435
- this._emitHooksEvent("tool:end", {
3512
+ this._recordAudit(auditEntry);
3513
+ this._writeRplEntry(auditEntry, "started");
3514
+ this._emitHooksEvent("tool:start", {
3436
3515
  executionId,
3437
- success: code === 0,
3438
- exitCode: code,
3439
- signal,
3440
- durationMs: auditEntry.durationMs,
3516
+ toolName: origin,
3517
+ command,
3518
+ args: [...auditEntry.args],
3519
+ cwd,
3520
+ pid: proc.pid,
3441
3521
  component: origin,
3442
3522
  });
3443
- this.emit("exit", auditEntry);
3444
- });
3445
- proc.on("error", (err) => {
3446
- auditEntry.error = err.message;
3447
- auditEntry.endTime = Date.now();
3448
- auditEntry.durationMs = auditEntry.endTime - startTime;
3449
- this._writeRplEntry(auditEntry, "error", err);
3450
- this._emitHooksEvent("tool:end", {
3451
- executionId,
3452
- success: false,
3453
- error: err.message,
3454
- component: origin,
3523
+
3524
+ proc.on("exit", (code, signal) => {
3525
+ const endTime = Date.now();
3526
+ auditEntry.exitCode = code;
3527
+ auditEntry.signal = signal;
3528
+ auditEntry.endTime = endTime;
3529
+ auditEntry.durationMs = endTime - startTime;
3530
+ this._writeRplEntry(auditEntry, "completed");
3531
+ this._emitHooksEvent("tool:end", {
3532
+ executionId,
3533
+ success: code === 0,
3534
+ exitCode: code,
3535
+ signal,
3536
+ durationMs: auditEntry.durationMs,
3537
+ component: origin,
3538
+ });
3539
+ this.emit("exit", auditEntry);
3455
3540
  });
3456
- // EventEmitter treats an unhandled `error` event as an exception. A
3457
- // process ENOENT must reach the child-process listener/callback instead
3458
- // of crashing callers that did not subscribe to broker diagnostics.
3459
- if (this.listenerCount("error") > 0) this.emit("error", auditEntry);
3460
- });
3461
- return proc;
3541
+ proc.on("error", (err) => {
3542
+ auditEntry.error = err.message;
3543
+ auditEntry.endTime = Date.now();
3544
+ auditEntry.durationMs = auditEntry.endTime - startTime;
3545
+ this._writeRplEntry(auditEntry, "error", err);
3546
+ this._emitHooksEvent("tool:end", {
3547
+ executionId,
3548
+ success: false,
3549
+ error: err.message,
3550
+ component: origin,
3551
+ });
3552
+ // EventEmitter treats an unhandled `error` event as an exception. A
3553
+ // process ENOENT must reach the child-process listener/callback instead
3554
+ // of crashing callers that did not subscribe to broker diagnostics.
3555
+ if (this.listenerCount("error") > 0) this.emit("error", auditEntry);
3556
+ });
3557
+ return proc;
3558
+ } catch (postNativeError) {
3559
+ throw this._postSpawnOwnershipError(postNativeError, {
3560
+ proc,
3561
+ auditEntry,
3562
+ workspaceProcessClosed,
3563
+ cleanup: cleanupSandbox,
3564
+ });
3565
+ }
3462
3566
  }
3463
3567
 
3464
3568
  spawnSync(command, args, options = {}) {