chainlesschain 0.164.0 → 0.165.2

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 (228) hide show
  1. package/README.md +248 -2
  2. package/package.json +7 -4
  3. package/src/assets/web-panel/.build-hash +1 -1
  4. package/src/assets/web-panel/assets/{AIOps-D2MEn7fI.js → AIOps-lS1R0Cza.js} +1 -1
  5. package/src/assets/web-panel/assets/{ActionButton-lCW_4Gf0.js → ActionButton-BmlgBPsj.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-Bs7i-nsS.js → Analytics-CNKczv1S.js} +3 -3
  7. package/src/assets/web-panel/assets/{AppLayout-CK7B6S_j.js → AppLayout-BuZGJARQ.js} +5 -5
  8. package/src/assets/web-panel/assets/{Artifacts-C8ILjpyo.js → Artifacts-Dm73Sl-O.js} +1 -1
  9. package/src/assets/web-panel/assets/{Audit-Bb9cNaWc.js → Audit-BGMW7A5e.js} +1 -1
  10. package/src/assets/web-panel/assets/{BackgroundAgents-sC9ooXIf.js → BackgroundAgents-BQ6M54JR.js} +1 -1
  11. package/src/assets/web-panel/assets/{Backup-D-DrsplT.js → Backup-DBzGP0bR.js} +1 -1
  12. package/src/assets/web-panel/assets/{BaseInput-uCNZpwSK.js → BaseInput-D1mLCoOV.js} +1 -1
  13. package/src/assets/web-panel/assets/{Chat-CsDK1uE9.js → Chat-BUfcN7p8.js} +6 -6
  14. package/src/assets/web-panel/assets/{ChatBubbleRenderer-OqSDt50w.js → ChatBubbleRenderer-CY5m8ZHg.js} +1 -1
  15. package/src/assets/web-panel/assets/{Checkbox-JhTXM1-K.js → Checkbox-Du0Yg5Pi.js} +1 -1
  16. package/src/assets/web-panel/assets/{Codegen-BbzZLnyD.js → Codegen-B2RXziHW.js} +1 -1
  17. package/src/assets/web-panel/assets/{Col-D4VW4m4j.js → Col-DWhekOrR.js} +1 -1
  18. package/src/assets/web-panel/assets/{Community-BXrYawxV.js → Community-HQhrkon4.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compact-DCihGy1u.js → Compact-izHNb4uz.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compliance-DlyZ-lk8.js → Compliance-BDwLy41-.js} +1 -1
  21. package/src/assets/web-panel/assets/{Cowork-DvGZrhbO.js → Cowork-DFJhLa7K.js} +3 -3
  22. package/src/assets/web-panel/assets/{Cron-DUncZi8h.js → Cron-DYY9RG7-.js} +2 -2
  23. package/src/assets/web-panel/assets/{Crosschain-C_hLuUcm.js → Crosschain-rr7tJTtv.js} +1 -1
  24. package/src/assets/web-panel/assets/{DID-b6YSUqxr.js → DID-D2sfHRLi.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dashboard-uvM15Cfb.js → Dashboard-q_eGdhha.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dropdown-D1-Nd4qY.js → Dropdown-Cufrh2Bz.js} +1 -1
  27. package/src/assets/web-panel/assets/{EmailListRenderer-8ApvL6Zc.js → EmailListRenderer-B-kdv10f.js} +1 -1
  28. package/src/assets/web-panel/assets/{FamilyGuardDashboard-LYJt8811.js → FamilyGuardDashboard-D21XjgfG.js} +1 -1
  29. package/src/assets/web-panel/assets/{Federation-BbI3HGpv.js → Federation-CAwRTLZH.js} +1 -1
  30. package/src/assets/web-panel/assets/{FormItemContext-DSoEKuFu.js → FormItemContext-vx3daNDF.js} +1 -1
  31. package/src/assets/web-panel/assets/{GenericCardRenderer-B0S9OWd5.js → GenericCardRenderer-CRWY2wU4.js} +1 -1
  32. package/src/assets/web-panel/assets/{Git-DIs9Zhf3.js → Git-Q6SwauyD.js} +2 -2
  33. package/src/assets/web-panel/assets/{Governance-jzZXrxcl.js → Governance-BJ1q4IQZ.js} +1 -1
  34. package/src/assets/web-panel/assets/{Inference-JUPjf2ZI.js → Inference-CSWjROgD.js} +1 -1
  35. package/src/assets/web-panel/assets/{KnowledgeGraph-DxnfJvlP.js → KnowledgeGraph-fzuQsWuY.js} +1 -1
  36. package/src/assets/web-panel/assets/{Logs-iXiz8BEE.js → Logs-DVF8Mnns.js} +2 -2
  37. package/src/assets/web-panel/assets/MarkdownRenderer-BLif4QSg.js +1 -0
  38. package/src/assets/web-panel/assets/{Marketplace-Y3Xch312.js → Marketplace-BQP7LOA4.js} +1 -1
  39. package/src/assets/web-panel/assets/{McpTools-D7kGGbO7.js → McpTools-BNlJCmNc.js} +4 -4
  40. package/src/assets/web-panel/assets/{Memory-Do_hVxzh.js → Memory-DLLg5WQ4.js} +2 -2
  41. package/src/assets/web-panel/assets/{MobileBridge-CtrR0Tas.js → MobileBridge-CR2skNAF.js} +1 -1
  42. package/src/assets/web-panel/assets/MobileProjects-BxVavObl.js +1 -0
  43. package/src/assets/web-panel/assets/{Mtc-qo5QCTGd.js → Mtc-B17pgqMI.js} +4 -4
  44. package/src/assets/web-panel/assets/{MtcAudit-cq5mnjYj.js → MtcAudit-4UmV5cIL.js} +2 -2
  45. package/src/assets/web-panel/assets/{Multisig-Bq0MAQHw.js → Multisig-DoMEXEcU.js} +3 -3
  46. package/src/assets/web-panel/assets/{NLProgramming-DdWE6Vi2.js → NLProgramming-h9DMXFX4.js} +1 -1
  47. package/src/assets/web-panel/assets/{Notes-BxMBFcIp.js → Notes-Cihn-xX8.js} +3 -3
  48. package/src/assets/web-panel/assets/{NotificationSettings-RTrAcbUe.js → NotificationSettings-BE6ZGa3R.js} +1 -1
  49. package/src/assets/web-panel/assets/{OrderTableRenderer-DJbpGqzT.js → OrderTableRenderer-CnwojoSI.js} +1 -1
  50. package/src/assets/web-panel/assets/{Organization-SQzIPdqC.js → Organization-B2vpwmjb.js} +4 -4
  51. package/src/assets/web-panel/assets/{Overflow-02yECh22.js → Overflow-C4z28R0-.js} +1 -1
  52. package/src/assets/web-panel/assets/{P2P-BNg4pNCM.js → P2P-BVlFkwhW.js} +2 -2
  53. package/src/assets/web-panel/assets/{PdhVaultBrowser-BxPJZsD3.js → PdhVaultBrowser-BXbEdL5B.js} +3 -3
  54. package/src/assets/web-panel/assets/{Permissions-CLnDnPAz.js → Permissions-C28xs4lp.js} +4 -4
  55. package/src/assets/web-panel/assets/{PersonalDataHub-C5m0AjGf.js → PersonalDataHub-Dgl_rBjM.js} +4 -4
  56. package/src/assets/web-panel/assets/{Pipeline-VwOf5Dhv.js → Pipeline-3QUIhrKI.js} +1 -1
  57. package/src/assets/web-panel/assets/{Privacy-CC0W2hZd.js → Privacy-8Gh33OZ5.js} +1 -1
  58. package/src/assets/web-panel/assets/{ProjectInit-Dz893Bob.js → ProjectInit-BNmg4tZi.js} +2 -2
  59. package/src/assets/web-panel/assets/{ProjectSettings-CxQkvl0k.js → ProjectSettings-vgMfeCf9.js} +2 -2
  60. package/src/assets/web-panel/assets/Projects-BhtAVilc.js +1 -0
  61. package/src/assets/web-panel/assets/{Providers-DeB9IkxK.js → Providers-CXoOa8eX.js} +1 -1
  62. package/src/assets/web-panel/assets/{QrScannerModal-OCeoaswn.js → QrScannerModal-BhfTF0oS.js} +1 -1
  63. package/src/assets/web-panel/assets/{QuickAsk-DenotaAj.js → QuickAsk-C746HEAj.js} +1 -1
  64. package/src/assets/web-panel/assets/{Recommend-Cies_jjI.js → Recommend-BSej8Eo0.js} +1 -1
  65. package/src/assets/web-panel/assets/RemoteSession-f3gmnlG3.js +5 -0
  66. package/src/assets/web-panel/assets/{Reputation-CW0mvxgZ.js → Reputation-CyvybpkN.js} +1 -1
  67. package/src/assets/web-panel/assets/{Row-SEd32qZU.js → Row-DwV2PeYn.js} +1 -1
  68. package/src/assets/web-panel/assets/{RssFeed-BSwnJ3Lm.js → RssFeed-11GrzjZy.js} +3 -3
  69. package/src/assets/web-panel/assets/{Search-xe2m8bkC.js → Search-BjKXkrAY.js} +1 -1
  70. package/src/assets/web-panel/assets/{Security-Mq2F9Nro.js → Security-eWiFb9Yk.js} +4 -4
  71. package/src/assets/web-panel/assets/{Services-BKGw2V3P.js → Services-CdCsMAtt.js} +2 -2
  72. package/src/assets/web-panel/assets/{Skeleton-DW95-Rxf.js → Skeleton-4Q2UTKQ5.js} +1 -1
  73. package/src/assets/web-panel/assets/{Skills-CHgChCv_.js → Skills-v4rtYrRj.js} +1 -1
  74. package/src/assets/web-panel/assets/{Sla-tKh6k3R7.js → Sla-CRhsFvd_.js} +1 -1
  75. package/src/assets/web-panel/assets/SpeechSettings-DLjKsDVu.js +1 -0
  76. package/src/assets/web-panel/assets/{SyncSettings-D0Fw8fVL.js → SyncSettings-D16zonl7.js} +2 -2
  77. package/src/assets/web-panel/assets/{Tasks-20x1GB3D.js → Tasks-Xxozz0i_.js} +1 -1
  78. package/src/assets/web-panel/assets/{Templates-DJ-lts-a.js → Templates-CXJpPtCT.js} +1 -1
  79. package/src/assets/web-panel/assets/{Tenant-BFdGpbs7.js → Tenant-XRV0L1ZF.js} +1 -1
  80. package/src/assets/web-panel/assets/{Terminal-Xpx61vHL.js → Terminal-CYuO1i_w.js} +2 -2
  81. package/src/assets/web-panel/assets/{TimelineRenderer-C6UIvyZQ.js → TimelineRenderer-BXqitWsu.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tokens-Dellq08f.js → Tokens-BvPrDHIy.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trigger-VKw8d0J-.js → Trigger-DhCrSTf5.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trust-DNftdKT5.js → Trust-DmsuZD6K.js} +1 -1
  85. package/src/assets/web-panel/assets/{UkeySign-DX9VAKJI.js → UkeySign-D_yrts5C.js} +1 -1
  86. package/src/assets/web-panel/assets/{VideoEditing-B2h3jO8q.js → VideoEditing-B01ihPrm.js} +1 -1
  87. package/src/assets/web-panel/assets/{Wallet-CjGkof7f.js → Wallet-DpUjKa-N.js} +4 -4
  88. package/src/assets/web-panel/assets/{WebAuthn-2Zfcu55P.js → WebAuthn-CL07yON6.js} +4 -4
  89. package/src/assets/web-panel/assets/{WorkflowEditor-B9eZ8UxZ.js → WorkflowEditor-CLMflnRr.js} +1 -1
  90. package/src/assets/web-panel/assets/{chat-CQNfD-YO.js → chat-DtUqe8h_.js} +1 -1
  91. package/src/assets/web-panel/assets/{colors-D4usyFT2.js → colors-DPKrgVfy.js} +1 -1
  92. package/src/assets/web-panel/assets/{compact-item-s4TpjvjX.js → compact-item-BTt2GtOm.js} +1 -1
  93. package/src/assets/web-panel/assets/{createContext-BRCSvYxj.js → createContext-D_VeUc1J.js} +1 -1
  94. package/src/assets/web-panel/assets/devWarning-Bj5nUW2v.js +1 -0
  95. package/src/assets/web-panel/assets/{hasIn-AdkUbkV-.js → hasIn-1kndiylj.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-BIoG5yYf.js → index-2eyAXE3d.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-nXyk8GZ9.js → index-4bna2_SR.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-B2V-eKfK.js → index-8nz_fmlj.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-D_XBHopw.js → index-B9KvcS7R.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-s_buFMEG.js → index-BAXfRKfG.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-DZT36ZYq.js → index-BHpBMWCh.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-BMcimU-2.js → index-BaZAbw9A.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-DzRjHxEv.js → index-BepLZwgB.js} +1 -1
  104. package/src/assets/web-panel/assets/{index--00U6vXZ.js → index-Bhudc_Ez.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-C7Y8Aluc.js → index-BlDNVgBt.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-BtobShro.js → index-By5n8up9.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-Cvyt-zhm.js → index-CHG-KcS4.js} +1 -1
  108. package/src/assets/web-panel/assets/index-CPcM-eqo.js +1 -0
  109. package/src/assets/web-panel/assets/{index-MMN9V6JF.js → index-CX81qSM4.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-Bad4VNvz.js → index-CauoBQkH.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-CCsM_Ybx.js → index-CcO04eDn.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-DARsAyUp.js → index-CtF7EN49.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-C5KAQFPQ.js → index-CzjkKUmR.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-RfMr79MW.js → index-D95OFht7.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-DdCB70SS.js → index-DFIZ_1Sf.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-CYdoQsa1.js → index-DG2MZQ3f.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-BPhkFZ1I.js → index-DJ8vXGOa.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-_IRVsV9X.js → index-Dbbymxpj.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-DVKfQ0Ux.js → index-DdkplL9R.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-CkwiSLhU.js → index-DfGl8CqG.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-CJVEOa4i.js → index-DfKBRdSS.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-C1mJtE6q.js → index-DsJCDUJG.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-BgiXR_-_.js → index-Dwqmtk65.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-CJCFe2Qf.js → index-DxdTdBix.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-C484EJiS.js → index-FzdwcSy2.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-B4JJCfQ2.js → index-GsoUQ2M7.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-CQhAVU5t.js → index-brCInrzq.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-CKC1t3Ic.js → index-dVc-CXY4.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-BQ3DXBtD.js → index-fk2Rjacw.js} +3 -3
  130. package/src/assets/web-panel/assets/{index-Cduu2Hhr.js → index-l1BETrDb.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-Bw2MEnUk.js → index-m31Ka8hZ.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-D2GjI2oe.js → index-ocf06EVQ.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-CJdQrZth.js → index-sDoMHTNA.js} +1 -1
  134. package/src/assets/web-panel/assets/index-xeSyVoRe.js +1 -0
  135. package/src/assets/web-panel/assets/{initDefaultProps-Blmpk7HL.js → initDefaultProps-CvyYJd7z.js} +1 -1
  136. package/src/assets/web-panel/assets/{motion-DPBJMv1n.js → motion-DYZkhUdz.js} +1 -1
  137. package/src/assets/web-panel/assets/{move-ButdzCM7.js → move-slnJRVT1.js} +1 -1
  138. package/src/assets/web-panel/assets/{mtc-parser-cyRC_QCe.js → mtc-parser-DVc0CKmy.js} +1 -1
  139. package/src/assets/web-panel/assets/{omit-1epSV7hz.js → omit-BCXAtHCq.js} +1 -1
  140. package/src/assets/web-panel/assets/{pickAttrs-DuPY8xJs.js → pickAttrs-DBsemz_K.js} +1 -1
  141. package/src/assets/web-panel/assets/{placementArrow-6XZqarhe.js → placementArrow-BRtkJ-nv.js} +1 -1
  142. package/src/assets/web-panel/assets/{responsiveObserve-B40pXBWM.js → responsiveObserve-Cebq7EZn.js} +1 -1
  143. package/src/assets/web-panel/assets/{slide-jbZ9Wu4n.js → slide-DT7qvId2.js} +1 -1
  144. package/src/assets/web-panel/assets/{statusUtils-BKQQcVy4.js → statusUtils-pQiITLkG.js} +1 -1
  145. package/src/assets/web-panel/assets/{styleChecker-NiKfWjUT.js → styleChecker-c-19BVKQ.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFlexGapSupport-bQUCvPeb.js → useFlexGapSupport-DsS5-0bE.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFs-CUGji7ph.js → useFs-CxGiMe5n.js} +1 -1
  148. package/src/assets/web-panel/assets/{usePersonalDataHub-4veyN2N2.js → usePersonalDataHub-D9btVID5.js} +1 -1
  149. package/src/assets/web-panel/assets/{vnode-1-nLug-Z.js → vnode-CUYFsFEN.js} +1 -1
  150. package/src/assets/web-panel/assets/{zoom-dhCeRDMo.js → zoom-CXmn_35j.js} +1 -1
  151. package/src/assets/web-panel/index.html +1 -1
  152. package/src/command-help-index.json +1 -1
  153. package/src/commands/cowork.js +559 -62
  154. package/src/commands/plugin.js +819 -64
  155. package/src/commands/session-location.js +318 -7
  156. package/src/constants.js +2 -2
  157. package/src/data/changelog.json +28 -2
  158. package/src/gateways/ws/action-protocol.js +293 -19
  159. package/src/gateways/ws/message-dispatcher.js +30 -0
  160. package/src/gateways/ws/remote-session-protocol.js +542 -35
  161. package/src/gateways/ws/ws-approval-gate.js +5 -0
  162. package/src/gateways/ws/ws-server.js +462 -38
  163. package/src/harness/jsonl-session-store.js +638 -2
  164. package/src/harness/prompt-compressor.js +4 -0
  165. package/src/harness/remote-session-audit.js +1 -0
  166. package/src/harness/remote-session-crypto.js +750 -50
  167. package/src/harness/remote-session-registry.js +795 -27
  168. package/src/lib/auto-mode-config.js +98 -3
  169. package/src/lib/background-agent-keeper-client.js +29 -0
  170. package/src/lib/background-agent-keeper-protocol.js +158 -10
  171. package/src/lib/background-agent-supervisor.js +870 -48
  172. package/src/lib/background-session-transport.js +23 -6
  173. package/src/lib/background-turn-bootstrap-protocol.js +64 -0
  174. package/src/lib/cowork-task-runner.js +70 -0
  175. package/src/lib/cowork-workflow.js +887 -62
  176. package/src/lib/delivery-production-adapter.js +38 -2
  177. package/src/lib/doctor-checkup.js +34 -10
  178. package/src/lib/dynamic-workflow-draft.js +535 -0
  179. package/src/lib/dynamic-workflow-facade.js +1105 -17
  180. package/src/lib/dynamic-workflow-runtime.js +2974 -0
  181. package/src/lib/execution-location-contract.js +111 -7
  182. package/src/lib/execution-location-runtime.js +3 -1
  183. package/src/lib/execution-location-target.js +910 -0
  184. package/src/lib/llm-providers.js +1 -0
  185. package/src/lib/mcp-call-ledger-store.js +35 -0
  186. package/src/lib/mcp-call-ledger.js +30 -0
  187. package/src/lib/mcp-stdio-package-materialization.js +1 -1
  188. package/src/lib/plugin-runtime/__tests__/remote-source.test.js +34 -16
  189. package/src/lib/plugin-runtime/install.js +4956 -657
  190. package/src/lib/plugin-runtime/manifest.js +3 -1
  191. package/src/lib/plugin-runtime/marketplace-artifact-readback.js +671 -31
  192. package/src/lib/plugin-runtime/marketplace-catalog.js +68 -2
  193. package/src/lib/plugin-runtime/marketplace-impact.js +208 -15
  194. package/src/lib/plugin-runtime/marketplace-network.js +317 -0
  195. package/src/lib/plugin-runtime/marketplace-pac-worker.js +15 -0
  196. package/src/lib/plugin-runtime/marketplace-remote-artifacts.js +25 -2
  197. package/src/lib/plugin-runtime/marketplace-source-cache.js +359 -0
  198. package/src/lib/plugin-runtime/policy.js +21 -6
  199. package/src/lib/plugin-runtime/publisher-trust.js +332 -0
  200. package/src/lib/plugin-runtime/remote-source.js +323 -27
  201. package/src/lib/plugin-runtime/scopes.js +317 -41
  202. package/src/lib/plugin-runtime/transaction-journal.js +806 -0
  203. package/src/lib/public-ide-capability-manifest.js +1 -1
  204. package/src/lib/remote-approval-bridge.js +745 -108
  205. package/src/lib/remote-control.js +2 -0
  206. package/src/lib/remote-membership-coordinator.js +612 -46
  207. package/src/lib/remote-membership-host-store.js +59 -10
  208. package/src/lib/runtime-provenance-ledger.js +171 -46
  209. package/src/lib/shell-approval.js +169 -6
  210. package/src/lib/sub-agent-context.js +268 -2
  211. package/src/lib/task-model-selector.js +1 -1
  212. package/src/lib/with-file-lock.js +167 -42
  213. package/src/repl/agent-repl.js +70 -29
  214. package/src/repl/remote-approval.js +29 -7
  215. package/src/runtime/agent-core.js +1695 -194
  216. package/src/runtime/headless-runner.js +22 -5
  217. package/src/runtime/headless-stream.js +19 -3
  218. package/src/workers/background-agent-keeper.js +279 -58
  219. package/src/workers/background-agent-worker.js +7 -0
  220. package/src/workers/background-turn-bootstrap.js +29 -2
  221. package/src/assets/web-panel/assets/MarkdownRenderer-GmB6DOr6.js +0 -1
  222. package/src/assets/web-panel/assets/MobileProjects-BL0Czcoj.js +0 -1
  223. package/src/assets/web-panel/assets/Projects-DDAjkUkT.js +0 -1
  224. package/src/assets/web-panel/assets/RemoteSession-Dxzl5n2T.js +0 -5
  225. package/src/assets/web-panel/assets/SpeechSettings-D6UL3dA5.js +0 -1
  226. package/src/assets/web-panel/assets/devWarning-DKJjSWRn.js +0 -1
  227. package/src/assets/web-panel/assets/index-C61cnl3K.js +0 -1
  228. package/src/assets/web-panel/assets/index-D4XFHxBr.js +0 -1
@@ -84,6 +84,7 @@ export const BUILT_IN_PROVIDERS = {
84
84
  baseUrl: "https://ark.cn-beijing.volces.com/api/v3",
85
85
  apiKeyEnv: "VOLCENGINE_API_KEY",
86
86
  models: [
87
+ "deepseek-v4-flash-260425",
87
88
  "doubao-seed-2-1-pro-260628",
88
89
  "doubao-seed-2-0-lite-260215",
89
90
  "doubao-seed-1-6-251015",
@@ -51,6 +51,8 @@ const TERMINAL = new Set([
51
51
  McpCallStatus.CANCELLED,
52
52
  ]);
53
53
  const PAYLOAD_DIGEST = /^sha256:[0-9a-f]{64}$/;
54
+ const WORKFLOW_EFFECT_ID = /^sha256:[0-9a-f]{64}$/;
55
+ const WORKFLOW_CHILD_EFFECT_PROTOCOL = "cc-workflow-child-effect/v1";
54
56
  const RAW_AUTHORITY_HASH = /^[0-9a-f]{64}$/;
55
57
  const OUTPUT_KINDS = new Set(MCP_CALL_LEDGER_OUTPUT_KINDS);
56
58
  const RECORD_FIELDS = new Set([
@@ -58,6 +60,10 @@ const RECORD_FIELDS = new Set([
58
60
  "ledgerId",
59
61
  "sessionId",
60
62
  "turnId",
63
+ "workflowEffectId",
64
+ "workflowChildEffectId",
65
+ "workflowChildSequence",
66
+ "workflowEffectProtocol",
61
67
  "toolName",
62
68
  "serverName",
63
69
  "inputDigest",
@@ -266,12 +272,35 @@ function canonicalRecord(record) {
266
272
  record.effectContract.source,
267
273
  MCP_CALL_LEDGER_PROTOCOL_LIMITS.identifier,
268
274
  );
275
+ const workflowFields = [
276
+ record.workflowEffectId,
277
+ record.workflowChildEffectId,
278
+ record.workflowChildSequence,
279
+ record.workflowEffectProtocol,
280
+ ];
281
+ const hasWorkflowBinding = workflowFields.some((value) => value != null);
282
+ const workflowBindingValid =
283
+ !hasWorkflowBinding ||
284
+ (WORKFLOW_EFFECT_ID.test(record.workflowEffectId || "") &&
285
+ WORKFLOW_EFFECT_ID.test(record.workflowChildEffectId || "") &&
286
+ Number.isSafeInteger(record.workflowChildSequence) &&
287
+ record.workflowChildSequence >= 1 &&
288
+ record.workflowEffectProtocol === WORKFLOW_CHILD_EFFECT_PROTOCOL);
289
+ const workflowBinding = hasWorkflowBinding
290
+ ? {
291
+ workflowEffectId: record.workflowEffectId,
292
+ workflowChildEffectId: record.workflowChildEffectId,
293
+ workflowChildSequence: record.workflowChildSequence,
294
+ workflowEffectProtocol: record.workflowEffectProtocol,
295
+ }
296
+ : {};
269
297
  const baseValid =
270
298
  record.schemaVersion === MCP_CALL_LEDGER_SCHEMA_VERSION &&
271
299
  isCanonicalProtocolText(
272
300
  record.ledgerId,
273
301
  MCP_CALL_LEDGER_PROTOCOL_LIMITS.ledgerId,
274
302
  ) &&
303
+ workflowBindingValid &&
275
304
  isCanonicalProtocolText(
276
305
  record.sessionId,
277
306
  MCP_CALL_LEDGER_PROTOCOL_LIMITS.identifier,
@@ -330,6 +359,7 @@ function canonicalRecord(record) {
330
359
  ledgerId: record.ledgerId,
331
360
  sessionId: record.sessionId,
332
361
  turnId: record.turnId,
362
+ ...workflowBinding,
333
363
  toolName: record.toolName,
334
364
  serverName: record.serverName,
335
365
  inputDigest: record.inputDigest,
@@ -361,6 +391,7 @@ function canonicalRecord(record) {
361
391
  ledgerId: record.ledgerId,
362
392
  sessionId: record.sessionId,
363
393
  turnId: record.turnId,
394
+ ...workflowBinding,
364
395
  toolName: record.toolName,
365
396
  serverName: record.serverName,
366
397
  inputDigest: record.inputDigest,
@@ -392,6 +423,10 @@ const IMMUTABLE_RECORD_FIELDS = Object.freeze([
392
423
  "ledgerId",
393
424
  "sessionId",
394
425
  "turnId",
426
+ "workflowEffectId",
427
+ "workflowChildEffectId",
428
+ "workflowChildSequence",
429
+ "workflowEffectProtocol",
395
430
  "toolName",
396
431
  "serverName",
397
432
  "inputDigest",
@@ -18,6 +18,9 @@ export const MCP_CALL_LEDGER_PROTOCOL_LIMITS = Object.freeze({
18
18
  networkScope: 512,
19
19
  });
20
20
 
21
+ const WORKFLOW_EFFECT_ID_RE = /^sha256:[a-f0-9]{64}$/;
22
+ const WORKFLOW_CHILD_EFFECT_PROTOCOL = "cc-workflow-child-effect/v1";
23
+
21
24
  export const MCP_CALL_LEDGER_OUTPUT_KINDS = Object.freeze([
22
25
  "array",
23
26
  "bigint",
@@ -296,6 +299,31 @@ function safeIdentifier(
296
299
  return normalizeMcpLedgerProtocolText(value, fallback, maxLength);
297
300
  }
298
301
 
302
+ function workflowEffectBinding(call) {
303
+ const fields = [
304
+ call.workflowEffectId,
305
+ call.workflowChildEffectId,
306
+ call.workflowChildSequence,
307
+ call.workflowEffectProtocol,
308
+ ];
309
+ if (fields.every((value) => value == null)) return null;
310
+ if (
311
+ !WORKFLOW_EFFECT_ID_RE.test(call.workflowEffectId || "") ||
312
+ !WORKFLOW_EFFECT_ID_RE.test(call.workflowChildEffectId || "") ||
313
+ !Number.isSafeInteger(call.workflowChildSequence) ||
314
+ call.workflowChildSequence < 1 ||
315
+ call.workflowEffectProtocol !== WORKFLOW_CHILD_EFFECT_PROTOCOL
316
+ ) {
317
+ throw new TypeError("MCP ledger workflow effect binding is malformed");
318
+ }
319
+ return Object.freeze({
320
+ workflowEffectId: call.workflowEffectId,
321
+ workflowChildEffectId: call.workflowChildEffectId,
322
+ workflowChildSequence: call.workflowChildSequence,
323
+ workflowEffectProtocol: call.workflowEffectProtocol,
324
+ });
325
+ }
326
+
299
327
  function nullableBoolean(value) {
300
328
  return typeof value === "boolean" ? value : null;
301
329
  }
@@ -589,6 +617,7 @@ export class McpCallLedger {
589
617
  const effectContract = normalizeMcpEffectContract(
590
618
  call.effectContract || call.effect || {},
591
619
  );
620
+ const effectBinding = workflowEffectBinding(call);
592
621
  const inputSnapshot = snapshotMcpJsonRpcInput(
593
622
  Object.prototype.hasOwnProperty.call(call, "input") ? call.input : {},
594
623
  );
@@ -609,6 +638,7 @@ export class McpCallLedger {
609
638
  null,
610
639
  MCP_CALL_LEDGER_PROTOCOL_LIMITS.identifier,
611
640
  ),
641
+ ...(effectBinding || {}),
612
642
  toolName,
613
643
  serverName,
614
644
  inputDigest: input.sha256,
@@ -74,7 +74,7 @@ const CAPSULE_EXECUTION_CONTEXT_ISOLATION =
74
74
  // manifest and is admissible only through the product's mandatory
75
75
  // filesystem/network/process-tree/code-snapshot OS sandbox contract.
76
76
  const CAPSULE_EXECUTION_CONTEXT_BUILTINS = new Set([
77
- "child_process",
77
+ "child_process", // spawn-inventory-audit: static-execution-context-builtin
78
78
  "cluster",
79
79
  "inspector",
80
80
  "inspector/promises",
@@ -5,6 +5,9 @@
5
5
  */
6
6
 
7
7
  import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
8
+ import fs from "node:fs";
9
+ import os from "node:os";
10
+ import path from "node:path";
8
11
  import {
9
12
  isRemoteSource,
10
13
  validateRegistry,
@@ -54,7 +57,7 @@ function okThenOffline(body) {
54
57
  if (calls === 1) {
55
58
  return { ok: true, status: 200, text: async () => JSON.stringify(body) };
56
59
  }
57
- throw new Error("ECONNREFUSED");
60
+ throw new TypeError("ECONNREFUSED");
58
61
  });
59
62
  }
60
63
 
@@ -164,15 +167,23 @@ describe("fetchRegistry", () => {
164
167
 
165
168
  it("falls back to the offline cache when the network fails", async () => {
166
169
  const fetch = okThenOffline(REGISTRY);
167
- install({ fetch });
168
- // 1st call populates the cache
169
- await fetchRegistry("https://h/r.json", { cacheDir: "/cache" });
170
- // 2nd call: network throws → served from cache
171
- const { registry, fromCache } = await fetchRegistry("https://h/r.json", {
172
- cacheDir: "/cache",
173
- });
174
- expect(fromCache).toBe(true);
175
- expect(registry.plugins).toHaveLength(2);
170
+ _deps.fetch = fetch;
171
+ const cacheDir = fs.mkdtempSync(
172
+ path.join(os.tmpdir(), "cc-plugin-registry-cache-"),
173
+ );
174
+ try {
175
+ // 1st call populates the immutable cache.
176
+ await fetchRegistry("https://h/r.json", { cacheDir });
177
+ // 2nd call: a transport error is served from the verified cache.
178
+ const { registry, fromCache } = await fetchRegistry(
179
+ "https://h/r.json",
180
+ { cacheDir },
181
+ );
182
+ expect(fromCache).toBe(true);
183
+ expect(registry.plugins).toHaveLength(2);
184
+ } finally {
185
+ fs.rmSync(cacheDir, { recursive: true, force: true });
186
+ }
176
187
  });
177
188
 
178
189
  it("throws on HTTP error with no cache", async () => {
@@ -190,12 +201,12 @@ describe("fetchRegistry", () => {
190
201
 
191
202
  it("throws when offline and nothing is cached", async () => {
192
203
  const fetch = vi.fn(async () => {
193
- throw new Error("ENOTFOUND");
204
+ throw new TypeError("ENOTFOUND");
194
205
  });
195
206
  install({ fetch });
196
207
  await expect(
197
208
  fetchRegistry("https://h/r.json", { cacheDir: "/cache" }),
198
- ).rejects.toThrow(/no offline cache/);
209
+ ).rejects.toThrow(/no verified immutable cache/);
199
210
  });
200
211
  });
201
212
 
@@ -245,12 +256,19 @@ describe("listRegistryPlugins", () => {
245
256
  });
246
257
 
247
258
  describe("registryCachePath", () => {
248
- it("is stable and content-addressed by URL", () => {
249
- const a = registryCachePath("https://h/r.json", "/cache");
250
- const b = registryCachePath("https://h/r.json", "/cache");
251
- const c = registryCachePath("https://h/OTHER.json", "/cache");
259
+ it("is stable and content-addressed by URL and document digest", () => {
260
+ const digest = "a".repeat(64);
261
+ const a = registryCachePath("https://h/r.json", "/cache", digest);
262
+ const b = registryCachePath("https://h/r.json", "/cache", digest);
263
+ const c = registryCachePath("https://h/OTHER.json", "/cache", digest);
264
+ const d = registryCachePath(
265
+ "https://h/r.json",
266
+ "/cache",
267
+ "b".repeat(64),
268
+ );
252
269
  expect(a).toBe(b);
253
270
  expect(a).not.toBe(c);
271
+ expect(a).not.toBe(d);
254
272
  expect(a.endsWith(".json")).toBe(true);
255
273
  });
256
274
  });