chainlesschain 0.163.8 → 0.165.1

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 (240) hide show
  1. package/package.json +7 -4
  2. package/scripts/macos-mcp-launcher-build.mjs +317 -0
  3. package/scripts/macos-mcp-launcher-postinstall.sh +54 -0
  4. package/scripts/macos-mcp-launcher-preinstall.sh +61 -0
  5. package/src/assets/web-panel/.build-hash +1 -1
  6. package/src/assets/web-panel/assets/{AIOps-CavM7W3k.js → AIOps-CYxFDrcm.js} +1 -1
  7. package/src/assets/web-panel/assets/{ActionButton-CUvZGabQ.js → ActionButton-CPBtdiU2.js} +1 -1
  8. package/src/assets/web-panel/assets/{Analytics-DeBnWnbe.js → Analytics-Dayq7Dp7.js} +3 -3
  9. package/src/assets/web-panel/assets/{AppLayout-DbI5kxvd.js → AppLayout-6U7bPb2s.js} +4 -4
  10. package/src/assets/web-panel/assets/{Artifacts-D93bigKm.js → Artifacts-D2Iqg_3D.js} +1 -1
  11. package/src/assets/web-panel/assets/{Audit-CBNvfUZa.js → Audit-CdoOB7WV.js} +1 -1
  12. package/src/assets/web-panel/assets/{BackgroundAgents-CJLyh_YU.js → BackgroundAgents-DrnAVB8w.js} +1 -1
  13. package/src/assets/web-panel/assets/{Backup-D_0yoehD.js → Backup-CesMi5cy.js} +1 -1
  14. package/src/assets/web-panel/assets/{BaseInput-TJxmbObW.js → BaseInput-DaX9ptax.js} +1 -1
  15. package/src/assets/web-panel/assets/{Chat-CE0dto1q.js → Chat-OrwOPxDS.js} +5 -5
  16. package/src/assets/web-panel/assets/{ChatBubbleRenderer-CZ5-yYiD.js → ChatBubbleRenderer-CvPZFRxM.js} +1 -1
  17. package/src/assets/web-panel/assets/{Checkbox-Ck1RVIVo.js → Checkbox-DiHbcysC.js} +1 -1
  18. package/src/assets/web-panel/assets/{Codegen-qpoyf6DK.js → Codegen-CbgCkaBJ.js} +1 -1
  19. package/src/assets/web-panel/assets/{Col-DUyPWjIE.js → Col-Du5hgrh4.js} +1 -1
  20. package/src/assets/web-panel/assets/{Community-D_S1BemS.js → Community-DsPOBW-p.js} +1 -1
  21. package/src/assets/web-panel/assets/{Compact-BjxeK-Gc.js → Compact-BwHIFkNC.js} +1 -1
  22. package/src/assets/web-panel/assets/{Compliance-Dd3CEJsu.js → Compliance-BvrDQSgd.js} +1 -1
  23. package/src/assets/web-panel/assets/{Cowork-B4QG7-ad.js → Cowork-gwAE6arx.js} +3 -3
  24. package/src/assets/web-panel/assets/{Cron-BtZnids5.js → Cron-DW-0l4uF.js} +2 -2
  25. package/src/assets/web-panel/assets/{Crosschain-CHPfCBFD.js → Crosschain-j-NsLesB.js} +1 -1
  26. package/src/assets/web-panel/assets/{DID-DT8DCEOK.js → DID-CibVEBOI.js} +2 -2
  27. package/src/assets/web-panel/assets/{Dashboard-COQab5_U.js → Dashboard-W4z9vSfe.js} +2 -2
  28. package/src/assets/web-panel/assets/{Dropdown-BY1PsQuU.js → Dropdown-DAcrkKxG.js} +1 -1
  29. package/src/assets/web-panel/assets/{EmailListRenderer-CsuAuaq3.js → EmailListRenderer-6GXah-89.js} +1 -1
  30. package/src/assets/web-panel/assets/{FamilyGuardDashboard-BqpinD-j.js → FamilyGuardDashboard-TKDCq8Ku.js} +1 -1
  31. package/src/assets/web-panel/assets/{Federation-D0gkfQFv.js → Federation-BXBLlcNm.js} +1 -1
  32. package/src/assets/web-panel/assets/{FormItemContext-BqgE-axK.js → FormItemContext-BoJJBkG3.js} +1 -1
  33. package/src/assets/web-panel/assets/{GenericCardRenderer-D0hJ2KvC.js → GenericCardRenderer-okjsl46v.js} +1 -1
  34. package/src/assets/web-panel/assets/{Git-CmMB0uPY.js → Git-Rvs7i6nn.js} +2 -2
  35. package/src/assets/web-panel/assets/{Governance-BnVEI0Dk.js → Governance-CHSUxXXS.js} +1 -1
  36. package/src/assets/web-panel/assets/{Inference-YTAMihRP.js → Inference-V3BlfxsB.js} +1 -1
  37. package/src/assets/web-panel/assets/{KnowledgeGraph-0ax7VHop.js → KnowledgeGraph-C_NlD4aR.js} +1 -1
  38. package/src/assets/web-panel/assets/{Logs-B9TRcokL.js → Logs-Nn4LNxhA.js} +2 -2
  39. package/src/assets/web-panel/assets/MarkdownRenderer-SVAgNnkt.js +1 -0
  40. package/src/assets/web-panel/assets/{Marketplace-B6CSuD_H.js → Marketplace-DEmjFcg-.js} +1 -1
  41. package/src/assets/web-panel/assets/{McpTools-CjMXvOVU.js → McpTools-DlopXipI.js} +3 -3
  42. package/src/assets/web-panel/assets/{Memory-CXRF71U3.js → Memory-BG3ynX60.js} +2 -2
  43. package/src/assets/web-panel/assets/{MobileBridge-DQgNp_oS.js → MobileBridge-DeRzWOfT.js} +1 -1
  44. package/src/assets/web-panel/assets/{MobileProjects-DlPwcCbq.js → MobileProjects-Tyd3o2A0.js} +1 -1
  45. package/src/assets/web-panel/assets/{Mtc-6hDTRPe1.js → Mtc-BoPbOv1C.js} +2 -2
  46. package/src/assets/web-panel/assets/{MtcAudit-BlVHU1DS.js → MtcAudit-un-rTHp7.js} +2 -2
  47. package/src/assets/web-panel/assets/{Multisig-DP9pzEbV.js → Multisig-Ds0oveEB.js} +3 -3
  48. package/src/assets/web-panel/assets/{NLProgramming-Djorh8EV.js → NLProgramming-D09JI-yY.js} +1 -1
  49. package/src/assets/web-panel/assets/{Notes-oLZ-JkUg.js → Notes-DTRhiKJn.js} +4 -4
  50. package/src/assets/web-panel/assets/{NotificationSettings-Cg288VH3.js → NotificationSettings-BAnnNCim.js} +1 -1
  51. package/src/assets/web-panel/assets/OrderTableRenderer-Yr-1fSYi.js +1 -0
  52. package/src/assets/web-panel/assets/{Organization-CBdo-bHs.js → Organization-S9EAolpj.js} +4 -4
  53. package/src/assets/web-panel/assets/{Overflow-qZdnVumx.js → Overflow-CqcLKqJ8.js} +1 -1
  54. package/src/assets/web-panel/assets/{P2P-D4kNfGNQ.js → P2P-Dw0F9EcU.js} +2 -2
  55. package/src/assets/web-panel/assets/{PdhVaultBrowser-DnlMemM7.js → PdhVaultBrowser-BDRwUevN.js} +5 -5
  56. package/src/assets/web-panel/assets/{Permissions-DHucHFBJ.js → Permissions-D3_c3nKB.js} +4 -4
  57. package/src/assets/web-panel/assets/{PersonalDataHub-BovlOIPR.js → PersonalDataHub-CxdMV98x.js} +4 -4
  58. package/src/assets/web-panel/assets/{Pipeline-Deru3CQY.js → Pipeline-CgjNQFLI.js} +1 -1
  59. package/src/assets/web-panel/assets/{Privacy-Bq5oTTbU.js → Privacy-BHghIIht.js} +1 -1
  60. package/src/assets/web-panel/assets/{ProjectInit-BfzxVWAz.js → ProjectInit-De6pqaKM.js} +2 -2
  61. package/src/assets/web-panel/assets/{ProjectSettings-CKC6XBtH.js → ProjectSettings-Bg4ZkNYQ.js} +2 -2
  62. package/src/assets/web-panel/assets/Projects-CP8vPvzs.js +1 -0
  63. package/src/assets/web-panel/assets/{Providers-C_jx4TWX.js → Providers-CUnHbNf-.js} +1 -1
  64. package/src/assets/web-panel/assets/{QrScannerModal-BdIHeVGC.js → QrScannerModal-DA2f3Wts.js} +1 -1
  65. package/src/assets/web-panel/assets/{QuickAsk-BwZwAcPD.js → QuickAsk-C1FeHDqp.js} +1 -1
  66. package/src/assets/web-panel/assets/{Recommend-BNTt0L-m.js → Recommend-B5guaUMN.js} +1 -1
  67. package/src/assets/web-panel/assets/RemoteSession-PDADSds3.js +5 -0
  68. package/src/assets/web-panel/assets/{Reputation-D6VpG32B.js → Reputation-eTlRhgvK.js} +1 -1
  69. package/src/assets/web-panel/assets/{Row-D_74OvQQ.js → Row-D7AqSGY0.js} +1 -1
  70. package/src/assets/web-panel/assets/{RssFeed-BTr0a-BQ.js → RssFeed-JiuLm4Ja.js} +3 -3
  71. package/src/assets/web-panel/assets/{Search-C3MCFoNU.js → Search-CwruahW3.js} +1 -1
  72. package/src/assets/web-panel/assets/{Security-CqW9aJ6s.js → Security-CdhqaR0b.js} +4 -4
  73. package/src/assets/web-panel/assets/{Services-Cw5GNaHF.js → Services-CU0ZIlcT.js} +2 -2
  74. package/src/assets/web-panel/assets/{Skeleton-DZps5qeY.js → Skeleton-CtduPfAb.js} +1 -1
  75. package/src/assets/web-panel/assets/{Skills-C6NQ1znT.js → Skills-CROXm6AY.js} +1 -1
  76. package/src/assets/web-panel/assets/{Sla-DFP8G2Sh.js → Sla-DiZiABFD.js} +1 -1
  77. package/src/assets/web-panel/assets/{SpeechSettings-ESt6MB6v.js → SpeechSettings-B5pLcXUw.js} +1 -1
  78. package/src/assets/web-panel/assets/{SyncSettings-BHnN98aM.js → SyncSettings-DBX6J1Oe.js} +2 -2
  79. package/src/assets/web-panel/assets/{Tasks-NiSCaOf-.js → Tasks-BLyRJd3-.js} +1 -1
  80. package/src/assets/web-panel/assets/{Templates-DsKFhW2C.js → Templates-BKa5qzmk.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tenant-CQ0E0ze5.js → Tenant-DnD3a4M6.js} +1 -1
  82. package/src/assets/web-panel/assets/{Terminal-D_rBu_by.js → Terminal-DEitQeTb.js} +2 -2
  83. package/src/assets/web-panel/assets/{TimelineRenderer-D3Vm4Po4.js → TimelineRenderer-CjHggTDq.js} +1 -1
  84. package/src/assets/web-panel/assets/{Tokens-DNTxRH6q.js → Tokens-CsGT7sfl.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trigger-Dgprz1ms.js → Trigger-yr4rFDrW.js} +1 -1
  86. package/src/assets/web-panel/assets/{Trust-B2rUnVBD.js → Trust-CLvu1Sjp.js} +1 -1
  87. package/src/assets/web-panel/assets/{UkeySign-DEGQNc6_.js → UkeySign-B0m7yUP8.js} +1 -1
  88. package/src/assets/web-panel/assets/{VideoEditing-jlsAx3Eh.js → VideoEditing-C0VvP4lc.js} +1 -1
  89. package/src/assets/web-panel/assets/{Wallet-8jQih1ij.js → Wallet-kllBAG1M.js} +4 -4
  90. package/src/assets/web-panel/assets/{WebAuthn-XLeO6xIB.js → WebAuthn-C54UQNLx.js} +3 -3
  91. package/src/assets/web-panel/assets/{WorkflowEditor-De_dgDAG.js → WorkflowEditor-B7y8qSvU.js} +1 -1
  92. package/src/assets/web-panel/assets/{chat-CI19R_Sk.js → chat-DRzTh8CJ.js} +1 -1
  93. package/src/assets/web-panel/assets/{colors-DsYTOYN3.js → colors-BSMwSnCx.js} +1 -1
  94. package/src/assets/web-panel/assets/{compact-item-CM3-t_Qr.js → compact-item-BTg602H5.js} +1 -1
  95. package/src/assets/web-panel/assets/{createContext-BjxlBRZv.js → createContext-B6EGsdvp.js} +1 -1
  96. package/src/assets/web-panel/assets/devWarning-Dol8jLEP.js +1 -0
  97. package/src/assets/web-panel/assets/{hasIn-RDaWX_4i.js → hasIn-DDKqJ8RD.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-nAH87mQP.js → index-323Hhxxt.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-DIUnNOjG.js → index-BICn3Qh1.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DyIWssPC.js → index-BMuGd2--.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-DX7tuWVJ.js → index-BRqt4fO-.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-Cd3euP_4.js → index-BVTAl5N2.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-Cpqm1qfU.js → index-BsR7Y2NG.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-DcPFB8qJ.js → index-Bx044qDj.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-Cd9OJhHG.js → index-C1GFfuqN.js} +1 -1
  106. package/src/assets/web-panel/assets/index-C3QX5tOl.js +1 -0
  107. package/src/assets/web-panel/assets/{index-B-Z8eFUJ.js → index-C66NpWy5.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BlT2VAEK.js → index-CDTvsX8t.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-Dsij_KsN.js → index-CGNklbP6.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-C4gkzxkw.js → index-CHfLYwcW.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-D6sm5-Xq.js → index-CNxg61YP.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-C0yx-jtQ.js → index-CQlHFN_g.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-CjTrRt13.js → index-CUEU48o1.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-B7WBt_4T.js → index-CWGax2QW.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-IeiL9RKc.js → index-C_JzIXUq.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-CnHH7bnD.js → index-Cf23wVMs.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-BKJr-TZp.js → index-CmAInUkX.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-CiECJi-Q.js → index-CmAubjDi.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-BCnZyIMA.js → index-Co7oM1qr.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-Drlnwr8F.js → index-CwPUZbMI.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-9R6BxAr0.js → index-D1naNj4U.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-BGqqJfL0.js → index-D5CsBShd.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-Bi46Xu4u.js → index-DBT3YeQ9.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-DXXtGMUJ.js → index-DLdrHhML.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-B0PMlbMs.js → index-Dc77VR3H.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-D0zcy54x.js → index-Dfv2lKu3.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-BN6UPD2E.js → index-DiW0sDkz.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-Dxge-xWl.js → index-DpTHIRfZ.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-CyOGN6a5.js → index-DqFXGzzC.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-B9O9YyWE.js → index-XFe-1twF.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-BHNYPO0b.js → index-p2HYn89m.js} +3 -3
  132. package/src/assets/web-panel/assets/{index-CVQMeiwH.js → index-pqfux8vZ.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-pPL66J85.js → index-rjzk9z1Q.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-DoQA0-52.js → index-th2ihDc0.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-B5REnKt8.js → index-u2YVld9W.js} +1 -1
  136. package/src/assets/web-panel/assets/index-xYybvEic.js +1 -0
  137. package/src/assets/web-panel/assets/{initDefaultProps-BTL88of4.js → initDefaultProps-C3Djh9fa.js} +1 -1
  138. package/src/assets/web-panel/assets/{motion-BUB2pXwB.js → motion-BzqFmbSe.js} +1 -1
  139. package/src/assets/web-panel/assets/{move-egCkkOMm.js → move-DJo_FFaW.js} +1 -1
  140. package/src/assets/web-panel/assets/{mtc-parser-DAWhZC8c.js → mtc-parser-_tlTiBvk.js} +1 -1
  141. package/src/assets/web-panel/assets/{omit-CvOxe_6d.js → omit-CB2ZyxUg.js} +1 -1
  142. package/src/assets/web-panel/assets/{pickAttrs-DZUSLZ5Z.js → pickAttrs-DZwIFD4u.js} +1 -1
  143. package/src/assets/web-panel/assets/{placementArrow-BERxGNMY.js → placementArrow-DxZY0dgk.js} +1 -1
  144. package/src/assets/web-panel/assets/{responsiveObserve-DZuDfZ9n.js → responsiveObserve-CzzGt7GL.js} +1 -1
  145. package/src/assets/web-panel/assets/{slide-DO756sgI.js → slide-BaIK52yz.js} +1 -1
  146. package/src/assets/web-panel/assets/{statusUtils-BRQlIz28.js → statusUtils-3-FHu9_M.js} +1 -1
  147. package/src/assets/web-panel/assets/{styleChecker-DCSfdybl.js → styleChecker-BkRT68fK.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFlexGapSupport-LD8dWVve.js → useFlexGapSupport-DHYwKS-s.js} +1 -1
  149. package/src/assets/web-panel/assets/{useFs-BX9uW2LK.js → useFs-DVVUhV8p.js} +1 -1
  150. package/src/assets/web-panel/assets/{usePersonalDataHub-BPSlPuHU.js → usePersonalDataHub-CkrFKAzQ.js} +1 -1
  151. package/src/assets/web-panel/assets/{vnode-BmOILC9V.js → vnode-BuBLFz0c.js} +1 -1
  152. package/src/assets/web-panel/assets/{zoom-1iKowKGg.js → zoom-kpm6LtXU.js} +1 -1
  153. package/src/assets/web-panel/index.html +1 -1
  154. package/src/command-help-index.json +3 -3
  155. package/src/commands/cowork.js +418 -41
  156. package/src/commands/permissions.js +240 -16
  157. package/src/commands/plugin.js +1293 -56
  158. package/src/commands/session-location.js +276 -0
  159. package/src/commands/session.js +2 -0
  160. package/src/data/changelog.json +28 -2
  161. package/src/gateways/ws/action-protocol.js +316 -17
  162. package/src/gateways/ws/message-dispatcher.js +30 -0
  163. package/src/gateways/ws/remote-session-protocol.js +565 -35
  164. package/src/gateways/ws/ws-agent-handler.js +12 -0
  165. package/src/gateways/ws/ws-approval-gate.js +5 -0
  166. package/src/gateways/ws/ws-server.js +510 -50
  167. package/src/harness/jsonl-session-store.js +341 -24
  168. package/src/harness/mcp-client.js +8 -1
  169. package/src/harness/remote-session-audit.js +2 -0
  170. package/src/harness/remote-session-crypto.js +929 -21
  171. package/src/harness/remote-session-registry.js +945 -24
  172. package/src/harness/session-list-index.js +233 -14
  173. package/src/lib/agent-authority.js +6 -0
  174. package/src/lib/auto-mode-config.js +98 -3
  175. package/src/lib/background-agent-keeper-client.js +248 -0
  176. package/src/lib/background-agent-keeper-protocol.js +291 -0
  177. package/src/lib/background-agent-supervisor.js +1357 -85
  178. package/src/lib/background-interaction-resolver.js +12 -0
  179. package/src/lib/background-session-transport.js +23 -6
  180. package/src/lib/background-turn-bootstrap-protocol.js +190 -0
  181. package/src/lib/cowork-workflow.js +1188 -76
  182. package/src/lib/delivery-production-adapter.js +38 -2
  183. package/src/lib/dynamic-workflow-facade.js +1736 -0
  184. package/src/lib/execution-location-contract.js +551 -0
  185. package/src/lib/execution-location-runtime.js +130 -0
  186. package/src/lib/ide-context.js +94 -6
  187. package/src/lib/mcp-stdio-package-materialization.js +166 -14
  188. package/src/lib/packer/pkg-config-generator.js +2 -0
  189. package/src/lib/permission-authority.js +77 -0
  190. package/src/lib/permission-side-effect-center.js +495 -0
  191. package/src/lib/plugin-runtime/install.js +514 -13
  192. package/src/lib/plugin-runtime/marketplace-artifact-readback.js +900 -0
  193. package/src/lib/plugin-runtime/marketplace-catalog.js +1181 -0
  194. package/src/lib/plugin-runtime/marketplace-impact.js +408 -0
  195. package/src/lib/plugin-runtime/marketplace-remote-artifacts.js +1567 -0
  196. package/src/lib/plugin-security.js +60 -3
  197. package/src/lib/process-execution-broker/index.js +1095 -57
  198. package/src/lib/process-execution-broker/linux-bwrap-descriptor-launch.js +375 -0
  199. package/src/lib/process-execution-broker/linux-generic-bwrap-runtime.js +90 -16
  200. package/src/lib/process-execution-broker/linux-generic-bwrap.js +159 -18
  201. package/src/lib/process-execution-broker/macos-mcp-launcher-contract.js +278 -0
  202. package/src/lib/process-execution-broker/macos-mcp-launcher-protocol.json +23 -0
  203. package/src/lib/process-execution-broker/macos-mcp-launcher.c +1497 -0
  204. package/src/lib/process-execution-broker/mcp-fd-entry-bootstrap.js +37 -0
  205. package/src/lib/process-execution-broker/platform-sandbox.js +2330 -279
  206. package/src/lib/process-execution-broker/windows-sandbox-helper.dll +0 -0
  207. package/src/lib/process-execution-broker/windows-sandbox-helper.exe +0 -0
  208. package/src/lib/process-execution-broker/windows-sandbox.cs +50 -4
  209. package/src/lib/public-ide-capability-manifest.js +3 -0
  210. package/src/lib/remote-approval-bridge.js +777 -34
  211. package/src/lib/remote-control.js +2 -0
  212. package/src/lib/remote-membership-authority.js +632 -0
  213. package/src/lib/remote-membership-coordinator.js +2973 -0
  214. package/src/lib/remote-membership-host-store.js +1799 -0
  215. package/src/lib/runtime-provenance-ledger.js +171 -46
  216. package/src/lib/scoped-permission-store.js +369 -0
  217. package/src/lib/session-anti-rollback-anchor.js +262 -5
  218. package/src/lib/shell-approval.js +169 -6
  219. package/src/lib/sub-agent-context.js +4 -0
  220. package/src/lib/with-file-lock.js +73 -38
  221. package/src/lib/workflow-definition-contract.js +149 -0
  222. package/src/repl/agent-repl.js +111 -36
  223. package/src/repl/chat-repl.js +2 -0
  224. package/src/repl/clipboard-image.js +735 -16
  225. package/src/repl/ide-status.js +1 -1
  226. package/src/repl/prompt-interactions.js +59 -6
  227. package/src/repl/remote-approval.js +29 -7
  228. package/src/runtime/agent-core.js +1182 -155
  229. package/src/runtime/headless-runner.js +52 -30
  230. package/src/runtime/headless-stream.js +51 -28
  231. package/src/workers/background-agent-keeper.js +689 -0
  232. package/src/workers/background-agent-worker.js +365 -13
  233. package/src/workers/background-turn-bootstrap.js +170 -0
  234. package/src/assets/web-panel/assets/MarkdownRenderer-yySN5YNM.js +0 -1
  235. package/src/assets/web-panel/assets/OrderTableRenderer-Bb1O3Ofr.js +0 -1
  236. package/src/assets/web-panel/assets/Projects-CMolGhae.js +0 -1
  237. package/src/assets/web-panel/assets/RemoteSession-Biyn2-Ro.js +0 -5
  238. package/src/assets/web-panel/assets/devWarning-S1ld2LwU.js +0 -1
  239. package/src/assets/web-panel/assets/index-Drz6yq0m.js +0 -1
  240. package/src/assets/web-panel/assets/index-uWiUs7S_.js +0 -1
@@ -9,7 +9,111 @@ import fs from "fs";
9
9
  import path from "path";
10
10
  import { logger } from "../lib/logger.js";
11
11
 
12
- export function registerCoworkCommand(program) {
12
+ const SESSION_EXECUTION_LOCATION_AUTHORITY_SCHEMA =
13
+ "cc-session-execution-location-authority/v1";
14
+
15
+ function workflowAuthorityError(code, message) {
16
+ const error = new Error(message);
17
+ error.code = code;
18
+ error.executionStarted = false;
19
+ return error;
20
+ }
21
+
22
+ function requireWorkflowExecutionAuthoritySession(sessionId) {
23
+ if (typeof sessionId !== "string" || sessionId.trim() === "") {
24
+ throw workflowAuthorityError(
25
+ "CC_DYNAMIC_WORKFLOW_EXECUTION_AUTHORITY_MISSING",
26
+ "--execution-authority-session <id> is required",
27
+ );
28
+ }
29
+ return sessionId;
30
+ }
31
+
32
+ function projectWorkflowExecutionAuthority(sessionId, verifiedProof) {
33
+ requireWorkflowExecutionAuthoritySession(sessionId);
34
+ let proof;
35
+ try {
36
+ proof = structuredClone(verifiedProof);
37
+ } catch {
38
+ throw workflowAuthorityError(
39
+ "CC_DYNAMIC_WORKFLOW_EXECUTION_AUTHORITY_INVALID",
40
+ "verified execution authority could not be safely snapshotted",
41
+ );
42
+ }
43
+ if (proof?.sessionId !== sessionId) {
44
+ throw workflowAuthorityError(
45
+ "CC_DYNAMIC_WORKFLOW_EXECUTION_AUTHORITY_SESSION_MISMATCH",
46
+ "verified execution authority does not match the requested session",
47
+ );
48
+ }
49
+ return Object.freeze({
50
+ schema: SESSION_EXECUTION_LOCATION_AUTHORITY_SCHEMA,
51
+ authority: "verified-session-start",
52
+ sessionId: proof.sessionId,
53
+ headHash: proof.headHash,
54
+ eventCount: proof.eventCount,
55
+ binding: proof.binding,
56
+ });
57
+ }
58
+
59
+ function renderWorkflowPreflight(preflight) {
60
+ const color = preflight.allowed ? chalk.green : chalk.red;
61
+ logger.log(color(preflight.allowed ? "READY" : "BLOCKED"));
62
+ logger.log(` definition: ${preflight.definition.definitionDigest}`);
63
+ logger.log(
64
+ ` task calls: ${preflight.scale.worstCaseTaskCalls ?? "unknown"}`,
65
+ );
66
+ logger.log(
67
+ ` tokens/USD: ${preflight.cost.projectedTokens ?? "unknown"} / ${preflight.cost.projectedUsd ?? "unknown"}`,
68
+ );
69
+ for (const blocker of preflight.blockers) {
70
+ logger.log(chalk.red(` blocker: ${blocker}`));
71
+ }
72
+ for (const warning of preflight.warnings) {
73
+ logger.log(chalk.yellow(` warning: ${warning}`));
74
+ }
75
+ }
76
+
77
+ async function loadCoworkWorkflowRecord(cwd, id, definitionDigest) {
78
+ const { getWorkflowRecord, getWorkflowVersion } =
79
+ await import("../lib/cowork-workflow.js");
80
+ return definitionDigest
81
+ ? getWorkflowVersion(cwd, id, definitionDigest)
82
+ : getWorkflowRecord(cwd, id);
83
+ }
84
+
85
+ function verifyWorkflowRunAuthorities(
86
+ cwd,
87
+ { workflowId, definitionDigest, executionAuthoritySessionId },
88
+ deps,
89
+ ) {
90
+ const definitionAuthority = deps.getWorkflowVersion(
91
+ cwd,
92
+ workflowId,
93
+ definitionDigest,
94
+ );
95
+ if (
96
+ !definitionAuthority ||
97
+ definitionAuthority.definitionDigest !== definitionDigest
98
+ ) {
99
+ throw workflowAuthorityError(
100
+ "CC_DYNAMIC_WORKFLOW_DEFINITION_AUTHORITY_DRIFT",
101
+ "the exact admitted workflow definition version is no longer available",
102
+ );
103
+ }
104
+ const executionLocationAuthority = projectWorkflowExecutionAuthority(
105
+ executionAuthoritySessionId,
106
+ deps.getVerifiedSessionExecutionLocationAuthority(
107
+ executionAuthoritySessionId,
108
+ ),
109
+ );
110
+ return Object.freeze({
111
+ definitionAuthority,
112
+ executionLocationAuthority,
113
+ });
114
+ }
115
+
116
+ export function registerCoworkCommand(program, commandDeps = {}) {
13
117
  const cowork = program
14
118
  .command("cowork")
15
119
  .description(
@@ -799,6 +903,188 @@ export function registerCoworkCommand(program) {
799
903
  console.log(JSON.stringify(wf, null, 2));
800
904
  });
801
905
 
906
+ workflow
907
+ .command("versions <id>")
908
+ .description("List immutable saved definition versions")
909
+ .option("--json", "Machine-readable JSON output")
910
+ .action(async (id, options) => {
911
+ try {
912
+ const { listWorkflowVersions } =
913
+ await import("../lib/cowork-workflow.js");
914
+ const versions = listWorkflowVersions(process.cwd(), id);
915
+ if (options.json) {
916
+ console.log(JSON.stringify(versions, null, 2));
917
+ return;
918
+ }
919
+ if (versions.length === 0) {
920
+ logger.log(chalk.gray(`No versioned definitions found for '${id}'.`));
921
+ return;
922
+ }
923
+ logger.log(chalk.bold(`${versions.length} immutable version(s):`));
924
+ for (const version of versions) {
925
+ logger.log(` ${version.definitionDigest} ${version.name}`);
926
+ }
927
+ } catch (err) {
928
+ logger.error(err.message);
929
+ process.exitCode = 1;
930
+ }
931
+ });
932
+
933
+ workflow
934
+ .command("manifest <id>")
935
+ .description(
936
+ "Project a versioned, digest-bound workflow definition and DAG plan",
937
+ )
938
+ .option(
939
+ "--definition-digest <sha256>",
940
+ "Inspect an immutable saved definition version",
941
+ )
942
+ .option("--json", "Machine-readable JSON output")
943
+ .action(async (id, options) => {
944
+ try {
945
+ const [{ createDynamicWorkflowManifest }, record] = await Promise.all([
946
+ import("../lib/dynamic-workflow-facade.js"),
947
+ loadCoworkWorkflowRecord(process.cwd(), id, options.definitionDigest),
948
+ ]);
949
+ if (!record) {
950
+ logger.error(`Workflow not found: ${id}`);
951
+ process.exitCode = 1;
952
+ return;
953
+ }
954
+ const projected = createDynamicWorkflowManifest(record.definition);
955
+ const manifest = Object.freeze({
956
+ ...projected,
957
+ definitionAuthority: Object.freeze({
958
+ status: record.status,
959
+ recordSchema: record.recordSchema,
960
+ definitionSchema: record.definitionSchema,
961
+ definitionDigest: record.definitionDigest,
962
+ }),
963
+ });
964
+ if (options.json) {
965
+ console.log(JSON.stringify(manifest, null, 2));
966
+ return;
967
+ }
968
+ logger.log(chalk.bold(`${manifest.definition.name}`));
969
+ logger.log(` schema: ${manifest.schema}`);
970
+ logger.log(` digest: ${manifest.definitionDigest}`);
971
+ logger.log(` authority: ${record.status}`);
972
+ logger.log(` adapter: ${manifest.adapter}`);
973
+ logger.log(` plan: ${manifest.plan.mode}`);
974
+ logger.log(
975
+ ` task calls: ${manifest.plan.worstCaseTaskCalls ?? "unknown"}`,
976
+ );
977
+ logger.log(
978
+ ` resumable: ${manifest.runtimeClaims.durablePauseResume ? "yes" : "no"}`,
979
+ );
980
+ } catch (err) {
981
+ logger.error(err.message);
982
+ process.exitCode = 1;
983
+ }
984
+ });
985
+
986
+ workflow
987
+ .command("preflight <id>")
988
+ .description(
989
+ "Evaluate capability, permission, sandbox, scale, and cost gates",
990
+ )
991
+ .option(
992
+ "--definition-digest <sha256>",
993
+ "Preflight an immutable saved definition version",
994
+ )
995
+ .option(
996
+ "--execution-authority-session <id>",
997
+ "Verified session whose start event anchors execution authority",
998
+ )
999
+ .option("--max-parallel <n>", "Requested maximum parallel steps", "4")
1000
+ .option("--json", "Machine-readable JSON output")
1001
+ .action(async (id, options) => {
1002
+ try {
1003
+ const [
1004
+ { buildDynamicWorkflowRunAdmission },
1005
+ { getWorkflowVersion },
1006
+ { getVerifiedSessionExecutionLocationAuthority },
1007
+ record,
1008
+ ] = await Promise.all([
1009
+ import("../lib/dynamic-workflow-facade.js"),
1010
+ import("../lib/cowork-workflow.js"),
1011
+ import("../harness/jsonl-session-store.js"),
1012
+ loadCoworkWorkflowRecord(process.cwd(), id, options.definitionDigest),
1013
+ ]);
1014
+ if (!record) {
1015
+ if (options.json) {
1016
+ console.log(
1017
+ JSON.stringify(
1018
+ {
1019
+ schema: "cc-dynamic-workflow-run-admission-error/v1",
1020
+ allowed: false,
1021
+ executionStarted: false,
1022
+ code: "WORKFLOW_NOT_FOUND",
1023
+ message: `Workflow not found: ${id}`,
1024
+ },
1025
+ null,
1026
+ 2,
1027
+ ),
1028
+ );
1029
+ } else {
1030
+ logger.error(`Workflow not found: ${id}`);
1031
+ }
1032
+ process.exitCode = 1;
1033
+ return;
1034
+ }
1035
+ const executionAuthoritySessionId =
1036
+ requireWorkflowExecutionAuthoritySession(
1037
+ options.executionAuthoritySession,
1038
+ );
1039
+ const admission = buildDynamicWorkflowRunAdmission(
1040
+ {
1041
+ definitionAuthority: record,
1042
+ executionAuthoritySessionId,
1043
+ maxParallel: options.maxParallel,
1044
+ execution: {
1045
+ cwd: process.cwd(),
1046
+ continueOnError: false,
1047
+ pipeline: record.definition.pipeline === true,
1048
+ },
1049
+ },
1050
+ {
1051
+ verifyAuthorities: (lookup) =>
1052
+ verifyWorkflowRunAuthorities(process.cwd(), lookup, {
1053
+ getWorkflowVersion,
1054
+ getVerifiedSessionExecutionLocationAuthority,
1055
+ }),
1056
+ },
1057
+ );
1058
+ const preflight = admission.preflight;
1059
+ if (options.json) {
1060
+ console.log(JSON.stringify(preflight, null, 2));
1061
+ } else {
1062
+ renderWorkflowPreflight(preflight);
1063
+ }
1064
+ process.exitCode = admission.allowed ? 0 : 2;
1065
+ } catch (err) {
1066
+ const code = err.code || "WORKFLOW_PREFLIGHT_BLOCKED";
1067
+ if (options.json) {
1068
+ console.log(
1069
+ JSON.stringify(
1070
+ {
1071
+ schema: "cc-dynamic-workflow-run-admission-error/v1",
1072
+ allowed: false,
1073
+ executionStarted: false,
1074
+ code,
1075
+ message: err.message,
1076
+ },
1077
+ null,
1078
+ 2,
1079
+ ),
1080
+ );
1081
+ } else {
1082
+ logger.error(`${code}: ${err.message}`);
1083
+ }
1084
+ process.exitCode = 2;
1085
+ }
1086
+ });
1087
+
802
1088
  workflow
803
1089
  .command("add <file>")
804
1090
  .description("Add a workflow from a JSON definition file")
@@ -832,6 +1118,14 @@ export function registerCoworkCommand(program) {
832
1118
  workflow
833
1119
  .command("run <id>")
834
1120
  .description("Execute a saved workflow end-to-end")
1121
+ .option(
1122
+ "--definition-digest <sha256>",
1123
+ "Replay an immutable saved definition version",
1124
+ )
1125
+ .option(
1126
+ "--execution-authority-session <id>",
1127
+ "Verified session whose start event anchors execution authority",
1128
+ )
835
1129
  .option("--continue-on-error", "Keep running after a step fails", false)
836
1130
  .option("--max-parallel <n>", "Max parallel steps per batch", "4")
837
1131
  .option(
@@ -840,46 +1134,127 @@ export function registerCoworkCommand(program) {
840
1134
  false,
841
1135
  )
842
1136
  .action(async (id, options) => {
843
- const [
844
- { getWorkflow, executeWorkflow, _deps: wfDeps },
845
- { runCoworkTask },
846
- ] = await Promise.all([
847
- import("../lib/cowork-workflow.js"),
848
- import("../lib/cowork-task-runner.js"),
849
- ]);
850
- const wf = getWorkflow(process.cwd(), id);
851
- if (!wf) {
852
- logger.error(`Workflow not found: ${id}`);
853
- process.exit(1);
854
- }
855
- wfDeps.runTask = runCoworkTask;
856
-
857
- logger.log(
858
- chalk.bold(
859
- `\nExecuting workflow '${wf.name}' (${wf.steps.length} steps)...`,
860
- ),
861
- );
1137
+ let executionStarted = false;
862
1138
  try {
863
- const result = await executeWorkflow({
864
- workflow: wf,
865
- cwd: process.cwd(),
866
- maxParallel: parseInt(options.maxParallel, 10) || 4,
867
- continueOnError: !!options.continueOnError,
868
- // undefined (not false) when the flag is absent, so a workflow-level
869
- // `pipeline: true` in the JSON definition still takes effect.
870
- pipeline: options.pipeline ? true : undefined,
871
- onStepStart: ({ stepId }) =>
872
- logger.log(chalk.gray(` → step ${stepId} ...`)),
873
- onStepComplete: (out) => {
874
- const flag =
875
- out.status === "completed"
876
- ? chalk.green("✓")
877
- : out.status === "skipped"
878
- ? chalk.gray("—")
879
- : chalk.red("✗");
880
- logger.log(` ${flag} ${out.id} (${out.status})`);
1139
+ let workflowExecutionAuthorityModule;
1140
+ if (Object.hasOwn(commandDeps, "workflowExecutionAuthorityProvider")) {
1141
+ const descriptor = Object.getOwnPropertyDescriptor(
1142
+ commandDeps,
1143
+ "workflowExecutionAuthorityProvider",
1144
+ );
1145
+ if (!descriptor || !Object.hasOwn(descriptor, "value")) {
1146
+ throw new Error(
1147
+ "Cowork workflow authority provider seam must be a data property",
1148
+ );
1149
+ }
1150
+ workflowExecutionAuthorityModule = Promise.resolve({
1151
+ getVerifiedSessionExecutionLocationAuthority: descriptor.value,
1152
+ });
1153
+ } else {
1154
+ workflowExecutionAuthorityModule =
1155
+ import("../harness/jsonl-session-store.js");
1156
+ }
1157
+ let workflowRunTaskModule;
1158
+ if (Object.hasOwn(commandDeps, "workflowRunTask")) {
1159
+ const descriptor = Object.getOwnPropertyDescriptor(
1160
+ commandDeps,
1161
+ "workflowRunTask",
1162
+ );
1163
+ if (!descriptor || !Object.hasOwn(descriptor, "value")) {
1164
+ throw new Error(
1165
+ "Cowork workflow task runner seam must be a data property",
1166
+ );
1167
+ }
1168
+ workflowRunTaskModule = Promise.resolve({
1169
+ runCoworkTask: descriptor.value,
1170
+ });
1171
+ } else {
1172
+ workflowRunTaskModule = import("../lib/cowork-task-runner.js");
1173
+ }
1174
+ const [
1175
+ { executeWorkflow: executeCoworkWorkflow, getWorkflowVersion },
1176
+ { executeDynamicWorkflowWithAdmission },
1177
+ { getVerifiedSessionExecutionLocationAuthority },
1178
+ { runCoworkTask },
1179
+ ] = await Promise.all([
1180
+ import("../lib/cowork-workflow.js"),
1181
+ import("../lib/dynamic-workflow-facade.js"),
1182
+ workflowExecutionAuthorityModule,
1183
+ workflowRunTaskModule,
1184
+ ]);
1185
+ if (typeof runCoworkTask !== "function") {
1186
+ throw new Error("Cowork workflow task runner is unavailable");
1187
+ }
1188
+ if (
1189
+ typeof getVerifiedSessionExecutionLocationAuthority !== "function"
1190
+ ) {
1191
+ throw new Error(
1192
+ "Cowork workflow execution authority provider is unavailable",
1193
+ );
1194
+ }
1195
+ const record = await loadCoworkWorkflowRecord(
1196
+ process.cwd(),
1197
+ id,
1198
+ options.definitionDigest,
1199
+ );
1200
+ if (!record) {
1201
+ logger.error(`Workflow not found: ${id}`);
1202
+ process.exitCode = 1;
1203
+ return;
1204
+ }
1205
+ const wf = record.definition;
1206
+ const executionAuthoritySessionId =
1207
+ requireWorkflowExecutionAuthoritySession(
1208
+ options.executionAuthoritySession,
1209
+ );
1210
+ const outcome = await executeDynamicWorkflowWithAdmission(
1211
+ {
1212
+ definitionAuthority: record,
1213
+ executionAuthoritySessionId,
1214
+ maxParallel: options.maxParallel,
1215
+ execution: {
1216
+ cwd: process.cwd(),
1217
+ continueOnError: !!options.continueOnError,
1218
+ // Omit (rather than pass undefined) when absent so a
1219
+ // workflow-level `pipeline: true` remains authoritative.
1220
+ ...(options.pipeline ? { pipeline: true } : {}),
1221
+ onStepStart: ({ stepId }) =>
1222
+ logger.log(chalk.gray(` → step ${stepId} ...`)),
1223
+ onStepComplete: (out) => {
1224
+ const flag =
1225
+ out.status === "completed"
1226
+ ? chalk.green("✓")
1227
+ : out.status === "skipped"
1228
+ ? chalk.gray("—")
1229
+ : chalk.red("✗");
1230
+ logger.log(` ${flag} ${out.id} (${out.status})`);
1231
+ },
1232
+ },
1233
+ onAdmitted: () => {
1234
+ executionStarted = true;
1235
+ logger.log(
1236
+ chalk.bold(
1237
+ `\nExecuting workflow '${wf.name}' (${wf.steps.length} steps, ${record.definitionDigest})...`,
1238
+ ),
1239
+ );
1240
+ },
881
1241
  },
882
- });
1242
+ {
1243
+ verifyAuthorities: (lookup) =>
1244
+ verifyWorkflowRunAuthorities(process.cwd(), lookup, {
1245
+ getWorkflowVersion,
1246
+ getVerifiedSessionExecutionLocationAuthority,
1247
+ }),
1248
+ executeWorkflow: (execution) =>
1249
+ executeCoworkWorkflow({ ...execution, runTask: runCoworkTask }),
1250
+ },
1251
+ );
1252
+ if (!outcome.allowed) {
1253
+ renderWorkflowPreflight(outcome.preflight);
1254
+ process.exitCode = 2;
1255
+ return;
1256
+ }
1257
+ const result = outcome.record;
883
1258
  const color =
884
1259
  result.status === "completed"
885
1260
  ? chalk.green
@@ -887,9 +1262,11 @@ export function registerCoworkCommand(program) {
887
1262
  ? chalk.yellow
888
1263
  : chalk.red;
889
1264
  logger.log(color(`\nWorkflow ${result.status}.\n`));
1265
+ process.exitCode = result.status === "completed" ? 0 : 1;
890
1266
  } catch (err) {
891
- logger.error(err.message);
892
- process.exit(1);
1267
+ logger.error(`${err.code || "WORKFLOW_RUN_FAILED"}: ${err.message}`);
1268
+ process.exitCode =
1269
+ executionStarted || err.executionStarted === true ? 1 : 2;
893
1270
  }
894
1271
  });
895
1272