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
@@ -0,0 +1,252 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { isProxy } from "node:util/types";
4
+ import { resolveHostHooksV2WorkspaceBinding } from "./hooks-v2-workspace-context.js";
5
+ import { normalizeMcpSandboxPolicy } from "./mcp-sandbox-policy.js";
6
+ import { resolvePluginWorkspaceAuthority } from "./plugin-runtime/sandbox-policy.js";
7
+ import { resolveProjectMcpWorkspaceAuthority } from "./project-mcp-trust.js";
8
+
9
+ export const MCP_STDIO_SANDBOX_WORKSPACE_REQUIRED_CODE =
10
+ "CC_MCP_STDIO_SANDBOX_WORKSPACE_REQUIRED";
11
+ export const MCP_STDIO_SANDBOX_CWD_INVALID_CODE =
12
+ "CC_MCP_STDIO_SANDBOX_CWD_INVALID";
13
+
14
+ function workspaceError(code, message, cause) {
15
+ const error = new Error(message, cause ? { cause } : undefined);
16
+ error.code = code;
17
+ return error;
18
+ }
19
+
20
+ function dataProperty(owner, key, fallback) {
21
+ if (!owner || typeof owner !== "object" || isProxy(owner)) {
22
+ throw workspaceError(
23
+ MCP_STDIO_SANDBOX_WORKSPACE_REQUIRED_CODE,
24
+ "MCP stdio sandbox config must be a non-Proxy object",
25
+ );
26
+ }
27
+ const descriptor = Object.getOwnPropertyDescriptor(owner, key);
28
+ if (!descriptor) return fallback;
29
+ if (!("value" in descriptor)) {
30
+ throw workspaceError(
31
+ MCP_STDIO_SANDBOX_WORKSPACE_REQUIRED_CODE,
32
+ `MCP stdio sandbox config.${key} must be an own data property`,
33
+ );
34
+ }
35
+ return descriptor.value;
36
+ }
37
+
38
+ function canonicalDirectory(value, label) {
39
+ if (typeof value !== "string" || value.length === 0 || value.includes("\0")) {
40
+ throw workspaceError(
41
+ MCP_STDIO_SANDBOX_CWD_INVALID_CODE,
42
+ `${label} must be a non-empty directory path`,
43
+ );
44
+ }
45
+ try {
46
+ const canonical = fs.realpathSync.native(path.resolve(value));
47
+ if (!fs.statSync(canonical).isDirectory()) {
48
+ throw new Error("not a directory");
49
+ }
50
+ return canonical;
51
+ } catch (cause) {
52
+ throw workspaceError(
53
+ MCP_STDIO_SANDBOX_CWD_INVALID_CODE,
54
+ `${label} must resolve to an existing directory`,
55
+ cause,
56
+ );
57
+ }
58
+ }
59
+
60
+ function isPathInside(root, candidate) {
61
+ const relative = path.relative(root, candidate);
62
+ return (
63
+ relative === "" ||
64
+ (relative !== ".." &&
65
+ !relative.startsWith(`..${path.sep}`) &&
66
+ !path.isAbsolute(relative))
67
+ );
68
+ }
69
+
70
+ function sandboxPolicyFromConfig(config, serverName) {
71
+ const raw = dataProperty(config, "sandboxPolicy", null);
72
+ return normalizeMcpSandboxPolicy(raw, {
73
+ label: `MCP stdio server "${serverName}" sandboxPolicy`,
74
+ });
75
+ }
76
+
77
+ function pluginRootFromConfig(config, deps) {
78
+ if (dataProperty(config, "origin", null) !== "plugin:mcp") return null;
79
+ const resolvePlugin =
80
+ deps.resolvePluginWorkspaceAuthority || resolvePluginWorkspaceAuthority;
81
+ return resolvePlugin(dataProperty(config, "pluginWorkspaceAuthority", null), {
82
+ origin: "plugin:mcp",
83
+ pluginId: dataProperty(config, "pluginId", null),
84
+ pluginVersion: dataProperty(config, "pluginVersion", null),
85
+ pluginSource: dataProperty(config, "pluginSource", null),
86
+ });
87
+ }
88
+
89
+ function isProjectFileSource(configScope, configSource) {
90
+ return (
91
+ configScope === "project" &&
92
+ typeof configSource === "string" &&
93
+ path.basename(configSource).toLowerCase() === ".mcp.json"
94
+ );
95
+ }
96
+
97
+ function requirePublicWorkspaceRoot(
98
+ serverName,
99
+ config,
100
+ workspaceBinding,
101
+ deps,
102
+ ) {
103
+ const resolveHost =
104
+ deps.resolveHostWorkspaceBinding || resolveHostHooksV2WorkspaceBinding;
105
+ const binding = resolveHost(workspaceBinding);
106
+ if (!binding?.workspaceRoot) {
107
+ throw workspaceError(
108
+ MCP_STDIO_SANDBOX_WORKSPACE_REQUIRED_CODE,
109
+ `Policy-bearing MCP stdio server "${serverName}" requires a trusted host workspace`,
110
+ );
111
+ }
112
+ const hostRoot = canonicalDirectory(
113
+ binding.workspaceRoot,
114
+ `MCP stdio server "${serverName}" host workspace`,
115
+ );
116
+ const configScope = dataProperty(config, "configScope", null);
117
+ const projectPath = dataProperty(config, "projectPath", null);
118
+ const configSource = dataProperty(config, "configSource", null);
119
+ const projectAuthority = dataProperty(
120
+ config,
121
+ "projectMcpWorkspaceAuthority",
122
+ null,
123
+ );
124
+ const projectFileSource = isProjectFileSource(configScope, configSource);
125
+
126
+ if (
127
+ configScope === "project" &&
128
+ (projectFileSource || projectAuthority) &&
129
+ !projectPath
130
+ ) {
131
+ throw workspaceError(
132
+ MCP_STDIO_SANDBOX_WORKSPACE_REQUIRED_CODE,
133
+ `Project MCP stdio server "${serverName}" is missing its project workspace`,
134
+ );
135
+ }
136
+
137
+ if ((configScope === "local" || configScope === "project") && projectPath) {
138
+ const projectRoot = canonicalDirectory(
139
+ projectPath,
140
+ `MCP stdio server "${serverName}" project workspace`,
141
+ );
142
+ if (!isPathInside(projectRoot, hostRoot)) {
143
+ throw workspaceError(
144
+ MCP_STDIO_SANDBOX_WORKSPACE_REQUIRED_CODE,
145
+ `MCP stdio server "${serverName}" does not belong to the trusted host workspace`,
146
+ );
147
+ }
148
+
149
+ if (projectAuthority || projectFileSource) {
150
+ const resolveProject =
151
+ deps.resolveProjectMcpWorkspaceAuthority ||
152
+ resolveProjectMcpWorkspaceAuthority;
153
+ const authorityRoot = resolveProject(projectAuthority, {
154
+ configSource,
155
+ serverName,
156
+ url: dataProperty(config, "url", null),
157
+ transport: dataProperty(config, "transport", null),
158
+ headersHelper: dataProperty(config, "headersHelper", null),
159
+ });
160
+ let canonicalAuthorityRoot = null;
161
+ try {
162
+ canonicalAuthorityRoot = authorityRoot
163
+ ? canonicalDirectory(
164
+ authorityRoot,
165
+ `MCP stdio server "${serverName}" project authority`,
166
+ )
167
+ : null;
168
+ } catch {
169
+ canonicalAuthorityRoot = null;
170
+ }
171
+ if (canonicalAuthorityRoot !== projectRoot) {
172
+ throw workspaceError(
173
+ MCP_STDIO_SANDBOX_WORKSPACE_REQUIRED_CODE,
174
+ `Project MCP stdio server "${serverName}" is missing its trusted file authority`,
175
+ );
176
+ }
177
+ }
178
+ }
179
+
180
+ return hostRoot;
181
+ }
182
+
183
+ function requestedWorkingDirectory(config, trustedRoot, serverName) {
184
+ const requested = dataProperty(config, "cwd", null);
185
+ if (requested == null || requested === "") return trustedRoot;
186
+ if (typeof requested !== "string" || requested.includes("\0")) {
187
+ throw workspaceError(
188
+ MCP_STDIO_SANDBOX_CWD_INVALID_CODE,
189
+ `MCP stdio server "${serverName}" cwd must be a path`,
190
+ );
191
+ }
192
+ const candidate = canonicalDirectory(
193
+ path.isAbsolute(requested)
194
+ ? requested
195
+ : path.resolve(trustedRoot, requested),
196
+ `MCP stdio server "${serverName}" cwd`,
197
+ );
198
+ if (!isPathInside(trustedRoot, candidate)) {
199
+ throw workspaceError(
200
+ MCP_STDIO_SANDBOX_CWD_INVALID_CODE,
201
+ `MCP stdio server "${serverName}" cwd escapes its trusted workspace`,
202
+ );
203
+ }
204
+ return candidate;
205
+ }
206
+
207
+ /**
208
+ * Resolve source-declared MCP isolation against an opaque host/plugin
209
+ * workspace capability. A policy-bearing launch never derives authority from
210
+ * process.cwd(); the selected cwd is canonical, existing, and contained by the
211
+ * trusted root before executable identity or Broker contract issuance.
212
+ */
213
+ export function resolveMcpStdioSandboxContext(
214
+ { serverName, config, workspaceBinding },
215
+ deps = {},
216
+ ) {
217
+ const name = String(serverName || "unknown");
218
+ const sandboxPolicy = sandboxPolicyFromConfig(config, name);
219
+ const pluginWorkspaceRoot = pluginRootFromConfig(config, deps);
220
+
221
+ if (!sandboxPolicy) {
222
+ return Object.freeze({
223
+ sandboxPolicy: null,
224
+ pluginWorkspaceRoot,
225
+ workingDirectory: pluginWorkspaceRoot,
226
+ });
227
+ }
228
+
229
+ if (
230
+ dataProperty(config, "origin", null) === "plugin:mcp" &&
231
+ !pluginWorkspaceRoot
232
+ ) {
233
+ throw workspaceError(
234
+ MCP_STDIO_SANDBOX_WORKSPACE_REQUIRED_CODE,
235
+ `Plugin MCP stdio server "${name}" is missing its trusted workspace authority`,
236
+ );
237
+ }
238
+
239
+ const trustedRoot = pluginWorkspaceRoot
240
+ ? canonicalDirectory(
241
+ pluginWorkspaceRoot,
242
+ `Plugin MCP stdio server "${name}" workspace`,
243
+ )
244
+ : requirePublicWorkspaceRoot(name, config, workspaceBinding, deps);
245
+ const workingDirectory = requestedWorkingDirectory(config, trustedRoot, name);
246
+
247
+ return Object.freeze({
248
+ sandboxPolicy,
249
+ pluginWorkspaceRoot,
250
+ workingDirectory,
251
+ });
252
+ }
@@ -186,6 +186,7 @@ export class ObservabilityRuntime {
186
186
  unit: "{invocation}",
187
187
  value: 1,
188
188
  monotonic: true,
189
+ aggregationTemporality: 1,
189
190
  attributes,
190
191
  },
191
192
  {
@@ -194,6 +195,7 @@ export class ObservabilityRuntime {
194
195
  unit: "ms",
195
196
  count: 1,
196
197
  sum: durationMs,
198
+ aggregationTemporality: 1,
197
199
  attributes,
198
200
  },
199
201
  ]);
@@ -924,7 +924,7 @@ export class OtlpExporter {
924
924
  description: metric.description || "",
925
925
  unit: metric.unit || "1",
926
926
  histogram: {
927
- aggregationTemporality: 2,
927
+ aggregationTemporality: metric.aggregationTemporality === 1 ? 1 : 2,
928
928
  dataPoints: [
929
929
  {
930
930
  ...point,
@@ -945,7 +945,7 @@ export class OtlpExporter {
945
945
  : { asDouble: Number(metric.value) || 0 };
946
946
  const data = { dataPoints: [{ ...point, ...number }] };
947
947
  if (metric.type === "sum" || metric.type === "counter") {
948
- data.aggregationTemporality = 2;
948
+ data.aggregationTemporality = metric.aggregationTemporality === 1 ? 1 : 2;
949
949
  data.isMonotonic = metric.monotonic !== false;
950
950
  return {
951
951
  name: metric.name,
@@ -46,6 +46,13 @@ export const _deps = {
46
46
  tmpdir: () => os.tmpdir(),
47
47
  };
48
48
 
49
+ // A real Windows sidecar performs path, lock-token and digest checks before it
50
+ // publishes the readiness marker. Loaded hosted runners have exceeded the old
51
+ // 10 second allowance while still completing successfully. Keep the parent in
52
+ // charge of the lock until the marker is verified, but give the safety
53
+ // preflight a bounded budget that also covers heavily contended machines.
54
+ export const WINDOWS_SIDECAR_READY_TIMEOUT_MS = 30_000;
55
+
49
56
  export async function scheduleReplace(ctx = {}) {
50
57
  const {
51
58
  newExePath,
@@ -778,7 +785,7 @@ function scheduleWindowsTransaction(ctx) {
778
785
  waitForReadyImpl({
779
786
  readyPath,
780
787
  transactionId,
781
- timeoutMs: 10_000,
788
+ timeoutMs: WINDOWS_SIDECAR_READY_TIMEOUT_MS,
782
789
  child,
783
790
  }),
784
791
  ) && !childError;
@@ -18,8 +18,41 @@
18
18
  */
19
19
 
20
20
  import fs from "node:fs";
21
+ import { createRequire } from "node:module";
21
22
  import path from "node:path";
22
23
 
24
+ function capsuleBuilderAssets(cliRoot) {
25
+ const requireFromCli = createRequire(path.join(cliRoot, "package.json"));
26
+ const realpath = fs.realpathSync.native || fs.realpathSync;
27
+ let packageJsonPath;
28
+ try {
29
+ packageJsonPath = realpath(
30
+ requireFromCli.resolve("esbuild-wasm/package.json"),
31
+ );
32
+ } catch (cause) {
33
+ throw new Error(
34
+ `Cannot resolve the pinned esbuild-wasm package for pkg assets: ${cause.message}`,
35
+ );
36
+ }
37
+ const packageRoot = path.dirname(packageJsonPath);
38
+ const sourceAssets = [
39
+ packageJsonPath,
40
+ path.join(packageRoot, "lib", "browser.js"),
41
+ path.join(packageRoot, "esbuild.wasm"),
42
+ path.join(cliRoot, "src", "lib", "mcp-stdio-capsule-builder-worker.cjs"),
43
+ path.join(cliRoot, "src", "lib", "mcp-stdio-immutable-vfs-resolver.cjs"),
44
+ ];
45
+ for (const asset of sourceAssets) {
46
+ const stat = fs.lstatSync(asset);
47
+ if (stat.isSymbolicLink() || !stat.isFile()) {
48
+ throw new Error(
49
+ `Pinned capsule builder pkg asset is not a regular file: ${asset}`,
50
+ );
51
+ }
52
+ }
53
+ return sourceAssets.map((asset) => realpath(asset));
54
+ }
55
+
23
56
  /**
24
57
  * @param {object} ctx
25
58
  * @param {string} ctx.cliRoot packages/cli/
@@ -396,6 +429,7 @@ export function generatePkgConfig(ctx) {
396
429
  `${posixify(cliRoot)}/src/lib/process-execution-broker/windows-sandbox-helper.exe`,
397
430
  `${posixify(cliRoot)}/src/lib/process-execution-broker/windows-sandbox.cs`,
398
431
  `${posixify(cliRoot)}/install/install.ps1`,
432
+ ...capsuleBuilderAssets(cliRoot).map(posixify),
399
433
  ];
400
434
  if (prebuildsDir) assets.push(`${posixify(prebuildsDir)}/**/*`);
401
435
  // Project mode: bundle the collected .chainlesschain/ snapshot as an asset.
@@ -20,6 +20,28 @@ const SUPPORTED_BOUNDARIES = new Set(PLUGIN_SANDBOX_BOUNDARIES);
20
20
  const PLUGIN_WORKSPACE_AUTHORITY_KIND = "trusted-plugin-workspace";
21
21
  const pluginWorkspaceAuthorities = new WeakMap();
22
22
 
23
+ function directoryGeneration(stat) {
24
+ return stat.birthtimeNs > 0n
25
+ ? `birth:${stat.birthtimeNs.toString()}`
26
+ : `ctime:${stat.ctimeNs.toString()}`;
27
+ }
28
+
29
+ function directoryIdentity(stat) {
30
+ return Object.freeze({
31
+ device: stat.dev,
32
+ inode: stat.ino,
33
+ generation: directoryGeneration(stat),
34
+ });
35
+ }
36
+
37
+ function sameDirectoryIdentity(left, right) {
38
+ return (
39
+ left.device === right.dev &&
40
+ left.inode === right.ino &&
41
+ left.generation === directoryGeneration(right)
42
+ );
43
+ }
44
+
23
45
  function invalidPolicy(message) {
24
46
  const error = new Error(message);
25
47
  error.code = "ERR_PLUGIN_SANDBOX_POLICY_INVALID";
@@ -69,7 +91,7 @@ export function issuePluginWorkspaceAuthority(value = {}) {
69
91
  try {
70
92
  const implementation = fs.realpathSync.native || fs.realpathSync;
71
93
  canonicalRoot = implementation.call(fs.realpathSync, requestedRoot);
72
- stat = fs.statSync(canonicalRoot);
94
+ stat = fs.statSync(canonicalRoot, { bigint: true });
73
95
  } catch {
74
96
  throw invalidPolicy("trusted plugin workspace root is unavailable");
75
97
  }
@@ -92,7 +114,11 @@ export function issuePluginWorkspaceAuthority(value = {}) {
92
114
  });
93
115
  pluginWorkspaceAuthorities.set(
94
116
  authority,
95
- Object.freeze({ root: canonicalRoot, provenance }),
117
+ Object.freeze({
118
+ root: canonicalRoot,
119
+ identity: directoryIdentity(stat),
120
+ provenance,
121
+ }),
96
122
  );
97
123
  return authority;
98
124
  }
@@ -117,6 +143,20 @@ export function resolvePluginWorkspaceAuthority(authority, provenance = {}) {
117
143
  ) {
118
144
  return null;
119
145
  }
146
+ try {
147
+ const implementation = fs.realpathSync.native || fs.realpathSync;
148
+ const currentRoot = implementation.call(fs.realpathSync, binding.root);
149
+ const currentStat = fs.statSync(currentRoot, { bigint: true });
150
+ if (
151
+ currentRoot !== binding.root ||
152
+ !currentStat.isDirectory() ||
153
+ !sameDirectoryIdentity(binding.identity, currentStat)
154
+ ) {
155
+ return null;
156
+ }
157
+ } catch {
158
+ return null;
159
+ }
120
160
  return binding.root;
121
161
  }
122
162