chainlesschain 0.163.7 → 0.164.0

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 (252) hide show
  1. package/package.json +5 -1
  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/assets/{AIOps-axqQfwv8.js → AIOps-D2MEn7fI.js} +1 -1
  6. package/src/assets/web-panel/assets/{ActionButton-DV-Ro0By.js → ActionButton-lCW_4Gf0.js} +1 -1
  7. package/src/assets/web-panel/assets/{Analytics-Bt72WEVu.js → Analytics-Bs7i-nsS.js} +3 -3
  8. package/src/assets/web-panel/assets/{AppLayout-BtepG55E.js → AppLayout-CK7B6S_j.js} +5 -5
  9. package/src/assets/web-panel/assets/{Artifacts-B7KaJ7S_.js → Artifacts-C8ILjpyo.js} +1 -1
  10. package/src/assets/web-panel/assets/{Audit-FNFaUg7A.js → Audit-Bb9cNaWc.js} +1 -1
  11. package/src/assets/web-panel/assets/{BackgroundAgents-DFb6J2wQ.js → BackgroundAgents-sC9ooXIf.js} +1 -1
  12. package/src/assets/web-panel/assets/{Backup-CC7YBhyj.js → Backup-D-DrsplT.js} +1 -1
  13. package/src/assets/web-panel/assets/{BaseInput-RkgTNVtj.js → BaseInput-uCNZpwSK.js} +1 -1
  14. package/src/assets/web-panel/assets/{Chat-hHEmGZy-.js → Chat-CsDK1uE9.js} +6 -6
  15. package/src/assets/web-panel/assets/{ChatBubbleRenderer-CAP9YhHv.js → ChatBubbleRenderer-OqSDt50w.js} +1 -1
  16. package/src/assets/web-panel/assets/{Checkbox-z5wXOQP1.js → Checkbox-JhTXM1-K.js} +1 -1
  17. package/src/assets/web-panel/assets/{Codegen-DVaDJnxy.js → Codegen-BbzZLnyD.js} +1 -1
  18. package/src/assets/web-panel/assets/{Col-CJmaRDR5.js → Col-D4VW4m4j.js} +1 -1
  19. package/src/assets/web-panel/assets/{Community-DF29_2bI.js → Community-BXrYawxV.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compact-DtkQkBzn.js → Compact-DCihGy1u.js} +1 -1
  21. package/src/assets/web-panel/assets/{Compliance-xoHDxp7I.js → Compliance-DlyZ-lk8.js} +1 -1
  22. package/src/assets/web-panel/assets/{Cowork-BUm-R7ht.js → Cowork-DvGZrhbO.js} +2 -2
  23. package/src/assets/web-panel/assets/{Cron-Cgl14ZkB.js → Cron-DUncZi8h.js} +2 -2
  24. package/src/assets/web-panel/assets/{Crosschain-BNcbmoqh.js → Crosschain-C_hLuUcm.js} +1 -1
  25. package/src/assets/web-panel/assets/{DID-Bwja0Zo9.js → DID-b6YSUqxr.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dashboard-Bk5XjEdJ.js → Dashboard-uvM15Cfb.js} +2 -2
  27. package/src/assets/web-panel/assets/{Dropdown-Ci36Oitq.js → Dropdown-D1-Nd4qY.js} +1 -1
  28. package/src/assets/web-panel/assets/{EmailListRenderer--U04ZN4q.js → EmailListRenderer-8ApvL6Zc.js} +1 -1
  29. package/src/assets/web-panel/assets/{FamilyGuardDashboard-B2gNPR2s.js → FamilyGuardDashboard-LYJt8811.js} +1 -1
  30. package/src/assets/web-panel/assets/{Federation-C4KghYn7.js → Federation-BbI3HGpv.js} +1 -1
  31. package/src/assets/web-panel/assets/{FormItemContext-QL7x_Q_0.js → FormItemContext-DSoEKuFu.js} +1 -1
  32. package/src/assets/web-panel/assets/{GenericCardRenderer-F3Ryltwm.js → GenericCardRenderer-B0S9OWd5.js} +1 -1
  33. package/src/assets/web-panel/assets/{Git-2HassK5k.js → Git-DIs9Zhf3.js} +2 -2
  34. package/src/assets/web-panel/assets/{Governance-DoBIp7oe.js → Governance-jzZXrxcl.js} +1 -1
  35. package/src/assets/web-panel/assets/{Inference--W01QhZ-.js → Inference-JUPjf2ZI.js} +1 -1
  36. package/src/assets/web-panel/assets/{KnowledgeGraph-DmvwqGpT.js → KnowledgeGraph-DxnfJvlP.js} +1 -1
  37. package/src/assets/web-panel/assets/{Logs-BBJ4yAel.js → Logs-iXiz8BEE.js} +2 -2
  38. package/src/assets/web-panel/assets/{MarkdownRenderer-BLCZMzhJ.js → MarkdownRenderer-GmB6DOr6.js} +1 -1
  39. package/src/assets/web-panel/assets/{Marketplace-D5lNngSI.js → Marketplace-Y3Xch312.js} +1 -1
  40. package/src/assets/web-panel/assets/{McpTools-CkEVOMKH.js → McpTools-D7kGGbO7.js} +4 -4
  41. package/src/assets/web-panel/assets/{Memory-B1Ow1xVE.js → Memory-Do_hVxzh.js} +2 -2
  42. package/src/assets/web-panel/assets/{MobileBridge-SgYbUfb6.js → MobileBridge-CtrR0Tas.js} +1 -1
  43. package/src/assets/web-panel/assets/MobileProjects-BL0Czcoj.js +1 -0
  44. package/src/assets/web-panel/assets/{Mtc-DcTXSSma.js → Mtc-qo5QCTGd.js} +2 -2
  45. package/src/assets/web-panel/assets/{MtcAudit-Dt3WG4oj.js → MtcAudit-cq5mnjYj.js} +2 -2
  46. package/src/assets/web-panel/assets/{Multisig-B9B38UZx.js → Multisig-Bq0MAQHw.js} +3 -3
  47. package/src/assets/web-panel/assets/{NLProgramming-B0S4GGvG.js → NLProgramming-DdWE6Vi2.js} +1 -1
  48. package/src/assets/web-panel/assets/{Notes-DZ5U58Ng.js → Notes-BxMBFcIp.js} +3 -3
  49. package/src/assets/web-panel/assets/{NotificationSettings-PjL5ZW34.js → NotificationSettings-RTrAcbUe.js} +1 -1
  50. package/src/assets/web-panel/assets/{OrderTableRenderer-DrAX2ESt.js → OrderTableRenderer-DJbpGqzT.js} +1 -1
  51. package/src/assets/web-panel/assets/{Organization-Cv1GYs-c.js → Organization-SQzIPdqC.js} +4 -4
  52. package/src/assets/web-panel/assets/{Overflow-Bbkp_PL3.js → Overflow-02yECh22.js} +1 -1
  53. package/src/assets/web-panel/assets/{P2P-BD8QUgoZ.js → P2P-BNg4pNCM.js} +2 -2
  54. package/src/assets/web-panel/assets/{PdhVaultBrowser-BO-2PeaB.js → PdhVaultBrowser-BxPJZsD3.js} +3 -3
  55. package/src/assets/web-panel/assets/{Permissions-D_OPVa02.js → Permissions-CLnDnPAz.js} +4 -4
  56. package/src/assets/web-panel/assets/{PersonalDataHub-mh-pEmaB.js → PersonalDataHub-C5m0AjGf.js} +4 -4
  57. package/src/assets/web-panel/assets/{Pipeline-6JC2EDdb.js → Pipeline-VwOf5Dhv.js} +1 -1
  58. package/src/assets/web-panel/assets/{Privacy-CUshzUAG.js → Privacy-CC0W2hZd.js} +1 -1
  59. package/src/assets/web-panel/assets/{ProjectInit-Cs2Aalri.js → ProjectInit-Dz893Bob.js} +2 -2
  60. package/src/assets/web-panel/assets/{ProjectSettings-1ak49tcj.js → ProjectSettings-CxQkvl0k.js} +2 -2
  61. package/src/assets/web-panel/assets/Projects-DDAjkUkT.js +1 -0
  62. package/src/assets/web-panel/assets/{Providers-CXXxvafH.js → Providers-DeB9IkxK.js} +1 -1
  63. package/src/assets/web-panel/assets/{QrScannerModal-PTcDsF58.js → QrScannerModal-OCeoaswn.js} +1 -1
  64. package/src/assets/web-panel/assets/{QuickAsk-CDwucrJw.js → QuickAsk-DenotaAj.js} +1 -1
  65. package/src/assets/web-panel/assets/{Recommend-CJlLVRXR.js → Recommend-Cies_jjI.js} +1 -1
  66. package/src/assets/web-panel/assets/{RemoteSession-DlN-ETsO.js → RemoteSession-Dxzl5n2T.js} +3 -3
  67. package/src/assets/web-panel/assets/{Reputation-DI23LR6m.js → Reputation-CW0mvxgZ.js} +1 -1
  68. package/src/assets/web-panel/assets/{Row-Cl7UQMrM.js → Row-SEd32qZU.js} +1 -1
  69. package/src/assets/web-panel/assets/{RssFeed-CexHNfh8.js → RssFeed-BSwnJ3Lm.js} +3 -3
  70. package/src/assets/web-panel/assets/{Search-BneBWvRN.js → Search-xe2m8bkC.js} +1 -1
  71. package/src/assets/web-panel/assets/{Security-DX7Phgrp.js → Security-Mq2F9Nro.js} +4 -4
  72. package/src/assets/web-panel/assets/{Services-BWXO8Mte.js → Services-BKGw2V3P.js} +2 -2
  73. package/src/assets/web-panel/assets/{Skeleton-DCyOjKPJ.js → Skeleton-DW95-Rxf.js} +1 -1
  74. package/src/assets/web-panel/assets/{Skills-CXqERsTB.js → Skills-CHgChCv_.js} +1 -1
  75. package/src/assets/web-panel/assets/{Sla-bhbrbz8E.js → Sla-tKh6k3R7.js} +1 -1
  76. package/src/assets/web-panel/assets/{SpeechSettings-3IPU0HBZ.js → SpeechSettings-D6UL3dA5.js} +1 -1
  77. package/src/assets/web-panel/assets/{SyncSettings-DBNTQLbM.js → SyncSettings-D0Fw8fVL.js} +2 -2
  78. package/src/assets/web-panel/assets/{Tasks-quP0bkN-.js → Tasks-20x1GB3D.js} +1 -1
  79. package/src/assets/web-panel/assets/{Templates-BouWmgho.js → Templates-DJ-lts-a.js} +1 -1
  80. package/src/assets/web-panel/assets/{Tenant-qv0D9s7z.js → Tenant-BFdGpbs7.js} +1 -1
  81. package/src/assets/web-panel/assets/{Terminal-BxvbE8BB.js → Terminal-Xpx61vHL.js} +2 -2
  82. package/src/assets/web-panel/assets/{TimelineRenderer-D-IeLnJ2.js → TimelineRenderer-C6UIvyZQ.js} +1 -1
  83. package/src/assets/web-panel/assets/{Tokens-CFMKKyVG.js → Tokens-Dellq08f.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trigger-L8as3UuJ.js → Trigger-VKw8d0J-.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trust-MxmA4VZG.js → Trust-DNftdKT5.js} +1 -1
  86. package/src/assets/web-panel/assets/{UkeySign-C0VvJYRi.js → UkeySign-DX9VAKJI.js} +1 -1
  87. package/src/assets/web-panel/assets/{VideoEditing-Bf5QZj8N.js → VideoEditing-B2h3jO8q.js} +1 -1
  88. package/src/assets/web-panel/assets/{Wallet-BIJ9riRz.js → Wallet-CjGkof7f.js} +4 -4
  89. package/src/assets/web-panel/assets/{WebAuthn-B8p9Mhkw.js → WebAuthn-2Zfcu55P.js} +4 -4
  90. package/src/assets/web-panel/assets/{WorkflowEditor-BVsuaPen.js → WorkflowEditor-B9eZ8UxZ.js} +1 -1
  91. package/src/assets/web-panel/assets/{chat-BfkjoKpV.js → chat-CQNfD-YO.js} +1 -1
  92. package/src/assets/web-panel/assets/{colors-DeAlsWK8.js → colors-D4usyFT2.js} +1 -1
  93. package/src/assets/web-panel/assets/{compact-item-Cs97bz5j.js → compact-item-s4TpjvjX.js} +1 -1
  94. package/src/assets/web-panel/assets/{createContext-BqbG60LH.js → createContext-BRCSvYxj.js} +1 -1
  95. package/src/assets/web-panel/assets/devWarning-DKJjSWRn.js +1 -0
  96. package/src/assets/web-panel/assets/{hasIn-i_RY0b1X.js → hasIn-AdkUbkV-.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-BOVkf1K3.js → index--00U6vXZ.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-B-3tEpTc.js → index-B2V-eKfK.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-D2B4VPyP.js → index-B4JJCfQ2.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-BkBi5TmC.js → index-BIoG5yYf.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-79V_zv1s.js → index-BMcimU-2.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-U4f5izHz.js → index-BPhkFZ1I.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-DiSkx4UB.js → index-BQ3DXBtD.js} +3 -3
  104. package/src/assets/web-panel/assets/{index-dIHr4B_u.js → index-Bad4VNvz.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-CIG8fQ2_.js → index-BgiXR_-_.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-DqBgBpgp.js → index-BtobShro.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-ZxO_-E8a.js → index-Bw2MEnUk.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-DUUrv141.js → index-C1mJtE6q.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-Bm7lLR4c.js → index-C484EJiS.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-COdGA-8n.js → index-C5KAQFPQ.js} +1 -1
  111. package/src/assets/web-panel/assets/index-C61cnl3K.js +1 -0
  112. package/src/assets/web-panel/assets/{index-CED2PL_y.js → index-C7Y8Aluc.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-YXgLng0K.js → index-CCsM_Ybx.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-0-agYlWL.js → index-CJCFe2Qf.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-B5UkyA3c.js → index-CJVEOa4i.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-B1CbOH1i.js → index-CJdQrZth.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-s1opAL-M.js → index-CKC1t3Ic.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-yObj1O4n.js → index-CQhAVU5t.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-CgsqdnRV.js → index-CYdoQsa1.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-Dk7-v4hP.js → index-Cduu2Hhr.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-B-JVTrpr.js → index-CkwiSLhU.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-CeWoNHau.js → index-Cvyt-zhm.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-CE2VtTlp.js → index-D2GjI2oe.js} +1 -1
  124. package/src/assets/web-panel/assets/index-D4XFHxBr.js +1 -0
  125. package/src/assets/web-panel/assets/{index-DmbfhJUP.js → index-DARsAyUp.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-BESLFt4q.js → index-DVKfQ0Ux.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-PT_5sBMA.js → index-DZT36ZYq.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-gyFpvL7l.js → index-D_XBHopw.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-BYUVuwKt.js → index-DdCB70SS.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-BcUXAB2s.js → index-DzRjHxEv.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-Dk2qouAz.js → index-MMN9V6JF.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-D9evtvg2.js → index-RfMr79MW.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-BuLQobzW.js → index-_IRVsV9X.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-Cf3WCLmy.js → index-nXyk8GZ9.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-CG3PRyAL.js → index-s_buFMEG.js} +1 -1
  136. package/src/assets/web-panel/assets/{initDefaultProps-C9h9yKL3.js → initDefaultProps-Blmpk7HL.js} +1 -1
  137. package/src/assets/web-panel/assets/{motion-BvmLsPdu.js → motion-DPBJMv1n.js} +1 -1
  138. package/src/assets/web-panel/assets/{move-CoL4ekU1.js → move-ButdzCM7.js} +1 -1
  139. package/src/assets/web-panel/assets/{mtc-parser-C4pMy6xV.js → mtc-parser-cyRC_QCe.js} +1 -1
  140. package/src/assets/web-panel/assets/{omit-DPuJfNxx.js → omit-1epSV7hz.js} +1 -1
  141. package/src/assets/web-panel/assets/{pickAttrs-D0KEeaK2.js → pickAttrs-DuPY8xJs.js} +1 -1
  142. package/src/assets/web-panel/assets/{placementArrow-BpkyINxt.js → placementArrow-6XZqarhe.js} +1 -1
  143. package/src/assets/web-panel/assets/{responsiveObserve-DQI_wOq8.js → responsiveObserve-B40pXBWM.js} +1 -1
  144. package/src/assets/web-panel/assets/{slide-DYfdDiRg.js → slide-jbZ9Wu4n.js} +1 -1
  145. package/src/assets/web-panel/assets/{statusUtils-B5dtvb0D.js → statusUtils-BKQQcVy4.js} +1 -1
  146. package/src/assets/web-panel/assets/{styleChecker-CF310mSj.js → styleChecker-NiKfWjUT.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFlexGapSupport-D1Qp4BLp.js → useFlexGapSupport-bQUCvPeb.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFs-C7_iyvJK.js → useFs-CUGji7ph.js} +1 -1
  149. package/src/assets/web-panel/assets/{usePersonalDataHub-DZUt_fIm.js → usePersonalDataHub-4veyN2N2.js} +1 -1
  150. package/src/assets/web-panel/assets/{vnode-D3dsi0lZ.js → vnode-1-nLug-Z.js} +1 -1
  151. package/src/assets/web-panel/assets/{zoom-WdbOlvdQ.js → zoom-dhCeRDMo.js} +1 -1
  152. package/src/assets/web-panel/index.html +1 -1
  153. package/src/command-help-index.json +6 -6
  154. package/src/commands/automation.js +103 -1
  155. package/src/commands/cowork.js +174 -19
  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/commands/team-merge-review.js +937 -0
  161. package/src/commands/team.js +2 -0
  162. package/src/data/changelog.json +27 -1
  163. package/src/gateways/ws/action-protocol.js +35 -10
  164. package/src/gateways/ws/remote-session-protocol.js +24 -1
  165. package/src/gateways/ws/ws-agent-handler.js +12 -0
  166. package/src/gateways/ws/ws-server.js +48 -12
  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 +1 -0
  170. package/src/harness/remote-session-crypto.js +210 -2
  171. package/src/harness/remote-session-registry.js +159 -6
  172. package/src/harness/session-list-index.js +233 -14
  173. package/src/lib/agent-authority.js +6 -0
  174. package/src/lib/agent-schedule-store.js +139 -28
  175. package/src/lib/agent-team/team-merge-review-store.js +765 -0
  176. package/src/lib/agent-team/team-merge-review-transaction.js +1223 -0
  177. package/src/lib/agent-team/team-merge-review.js +1847 -0
  178. package/src/lib/automation-center-incidents.js +314 -0
  179. package/src/lib/automation-center-runtime.js +448 -0
  180. package/src/lib/automation-center.js +182 -38
  181. package/src/lib/automation-engine.js +41 -0
  182. package/src/lib/automation-execution-authority.js +241 -12
  183. package/src/lib/automation-execution-incident.js +737 -0
  184. package/src/lib/background-agent-keeper-client.js +248 -0
  185. package/src/lib/background-agent-keeper-protocol.js +147 -0
  186. package/src/lib/background-agent-supervisor.js +520 -40
  187. package/src/lib/background-interaction-resolver.js +12 -0
  188. package/src/lib/background-turn-bootstrap-protocol.js +126 -0
  189. package/src/lib/cowork-cron.js +85 -14
  190. package/src/lib/cowork-workflow.js +336 -16
  191. package/src/lib/dynamic-workflow-facade.js +648 -0
  192. package/src/lib/execution-location-contract.js +551 -0
  193. package/src/lib/execution-location-runtime.js +130 -0
  194. package/src/lib/ide-context.js +94 -6
  195. package/src/lib/mcp-stdio-package-materialization.js +166 -14
  196. package/src/lib/packer/pkg-config-generator.js +2 -0
  197. package/src/lib/permission-authority.js +77 -0
  198. package/src/lib/permission-side-effect-center.js +495 -0
  199. package/src/lib/plugin-runtime/install.js +514 -13
  200. package/src/lib/plugin-runtime/marketplace-artifact-readback.js +900 -0
  201. package/src/lib/plugin-runtime/marketplace-catalog.js +1181 -0
  202. package/src/lib/plugin-runtime/marketplace-impact.js +408 -0
  203. package/src/lib/plugin-runtime/marketplace-remote-artifacts.js +1567 -0
  204. package/src/lib/plugin-security.js +60 -3
  205. package/src/lib/process-execution-broker/index.js +1095 -57
  206. package/src/lib/process-execution-broker/linux-bwrap-descriptor-launch.js +375 -0
  207. package/src/lib/process-execution-broker/linux-generic-bwrap-runtime.js +90 -16
  208. package/src/lib/process-execution-broker/linux-generic-bwrap.js +159 -18
  209. package/src/lib/process-execution-broker/macos-mcp-launcher-contract.js +278 -0
  210. package/src/lib/process-execution-broker/macos-mcp-launcher-protocol.json +23 -0
  211. package/src/lib/process-execution-broker/macos-mcp-launcher.c +1497 -0
  212. package/src/lib/process-execution-broker/mcp-fd-entry-bootstrap.js +37 -0
  213. package/src/lib/process-execution-broker/platform-sandbox.js +2330 -279
  214. package/src/lib/process-execution-broker/windows-sandbox-helper.dll +0 -0
  215. package/src/lib/process-execution-broker/windows-sandbox-helper.exe +0 -0
  216. package/src/lib/process-execution-broker/windows-sandbox.cs +50 -4
  217. package/src/lib/public-ide-capability-manifest.js +3 -0
  218. package/src/lib/remote-approval-bridge.js +123 -17
  219. package/src/lib/remote-membership-authority.js +632 -0
  220. package/src/lib/remote-membership-coordinator.js +2409 -0
  221. package/src/lib/remote-membership-host-store.js +1750 -0
  222. package/src/lib/scheduler-kernel/agenda-adapter.js +17 -7
  223. package/src/lib/scheduler-kernel/automation-adapter.js +105 -11
  224. package/src/lib/scheduler-kernel/automation-event-adapter.js +87 -11
  225. package/src/lib/scheduler-kernel/contract.js +91 -0
  226. package/src/lib/scheduler-kernel/cowork-cron-adapter.js +12 -1
  227. package/src/lib/scheduler-kernel/loop-adapter.js +7 -1
  228. package/src/lib/scheduler-kernel/routine-adapter.js +7 -1
  229. package/src/lib/scheduler-kernel/runtime-control-capabilities.js +31 -0
  230. package/src/lib/scheduler-kernel/runtime.js +176 -3
  231. package/src/lib/scheduler-kernel/store.js +1253 -45
  232. package/src/lib/scoped-permission-store.js +369 -0
  233. package/src/lib/session-anti-rollback-anchor.js +262 -5
  234. package/src/lib/sub-agent-context.js +4 -0
  235. package/src/lib/workflow-definition-contract.js +149 -0
  236. package/src/repl/agent-repl.js +41 -7
  237. package/src/repl/chat-repl.js +2 -0
  238. package/src/repl/clipboard-image.js +735 -16
  239. package/src/repl/ide-status.js +1 -1
  240. package/src/repl/prompt-interactions.js +59 -6
  241. package/src/runtime/agent-core.js +93 -3
  242. package/src/runtime/headless-runner.js +30 -25
  243. package/src/runtime/headless-stream.js +32 -25
  244. package/src/runtime/mcp-config.js +81 -10
  245. package/src/workers/background-agent-keeper.js +498 -0
  246. package/src/workers/background-agent-worker.js +358 -13
  247. package/src/workers/background-turn-bootstrap.js +143 -0
  248. package/src/assets/web-panel/assets/MobileProjects-BWdOvQAj.js +0 -1
  249. package/src/assets/web-panel/assets/Projects-BV4oApsm.js +0 -1
  250. package/src/assets/web-panel/assets/devWarning-DPty0mGN.js +0 -1
  251. package/src/assets/web-panel/assets/index-Bt7g0Vq_.js +0 -1
  252. package/src/assets/web-panel/assets/index-ChVT0p9u.js +0 -1
@@ -1,10 +1,22 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import {
3
+ assertAutomationRuntimeBoundary,
3
4
  automationExecutionAuthorityDigest,
4
5
  automationExecutionAuthoritySnapshot,
6
+ classifyAutomationBoundaryError,
5
7
  inspectAutomationExecutionAuthority,
6
8
  reserveAutomationExecutionAuthority,
7
9
  } from "./automation-execution-authority.js";
10
+ import {
11
+ listAutomationExecutionIncidents,
12
+ upsertAutomationExecutionIncident,
13
+ } from "./automation-execution-incident.js";
14
+ import { projectAutomationCenterIncident } from "./automation-center-incidents.js";
15
+ import {
16
+ AUTOMATION_CENTER_RUNTIME_SCHEMA,
17
+ AUTOMATION_CENTER_RUNTIME_SCHEMA_VERSION,
18
+ buildAutomationCenterRuntimeProjection,
19
+ } from "./automation-center-runtime.js";
8
20
  import {
9
21
  EXECUTION_STATUS,
10
22
  FLOW_STATUS,
@@ -23,11 +35,12 @@ import {
23
35
  canonicalJson,
24
36
  normalizeIdentifier,
25
37
  } from "./scheduler-kernel/contract.js";
38
+ import { resolveAutomationCenterRuntimeControl } from "./scheduler-kernel/runtime-control-capabilities.js";
26
39
  import { RoutineStore } from "./routine-store.js";
27
40
  import { buildRoutineCenterProjection } from "./automation-center-routines.js";
28
41
 
29
- export const AUTOMATION_CENTER_SCHEMA = "chainlesschain.automation-center/v2";
30
- export const AUTOMATION_CENTER_SCHEMA_VERSION = 2;
42
+ export const AUTOMATION_CENTER_SCHEMA = "chainlesschain.automation-center/v3";
43
+ export const AUTOMATION_CENTER_SCHEMA_VERSION = 3;
31
44
  export const AUTOMATION_CENTER_ACTIONS = Object.freeze([
32
45
  "run_now",
33
46
  "retry_failed",
@@ -45,7 +58,7 @@ function centerError(code, message, details = undefined) {
45
58
 
46
59
  function digest(value) {
47
60
  return `sha256:${createHash("sha256")
48
- .update("chainlesschain.automation-center.v2\0", "utf8")
61
+ .update("chainlesschain.automation-center.v3\0", "utf8")
49
62
  .update(canonicalJson(value, "automationCenter"), "utf8")
50
63
  .digest("hex")}`;
51
64
  }
@@ -183,6 +196,10 @@ function projectFlow(db, flow, { historyLimit, now }) {
183
196
  flowId: flow.id,
184
197
  limit: historyLimit,
185
198
  }).map(projectExecution);
199
+ const incidents = listAutomationExecutionIncidents(db, {
200
+ flowId: flow.id,
201
+ limit: historyLimit,
202
+ }).map(projectAutomationCenterIncident);
186
203
  const security = projectSecurity(db, flow, now);
187
204
  const content = {
188
205
  kind: "flow",
@@ -194,6 +211,7 @@ function projectFlow(db, flow, { historyLimit, now }) {
194
211
  updatedAt: flow.updatedAt || null,
195
212
  triggers,
196
213
  history,
214
+ incidents,
197
215
  security,
198
216
  };
199
217
  const revision = digest(content);
@@ -266,6 +284,8 @@ export function buildAutomationCenterProjection(
266
284
  historyLimit = 20,
267
285
  now = Date.now,
268
286
  routineStore = new RoutineStore(),
287
+ schedulerStore = null,
288
+ runtimeCapabilityForKind = resolveAutomationCenterRuntimeControl,
269
289
  } = {},
270
290
  ) {
271
291
  if (typeof now !== "function") {
@@ -283,16 +303,34 @@ export function buildAutomationCenterProjection(
283
303
  limit: boundedLimit,
284
304
  historyLimit: boundedHistory,
285
305
  });
306
+ const runtime = schedulerStore
307
+ ? buildAutomationCenterRuntimeProjection(schedulerStore, {
308
+ capabilityForKind: runtimeCapabilityForKind,
309
+ limit: Math.min(200, boundedLimit),
310
+ })
311
+ : {
312
+ schema: AUTOMATION_CENTER_RUNTIME_SCHEMA,
313
+ schemaVersion: AUTOMATION_CENTER_RUNTIME_SCHEMA_VERSION,
314
+ items: [],
315
+ };
286
316
  const items = [...flows, ...routineProjection.items];
287
317
  const summary = {
288
318
  total: items.length,
289
319
  flows: flows.length,
290
320
  routines: routineProjection.items.length,
321
+ runtimeRunning: runtime.items.filter((item) => item.status === "running")
322
+ .length,
323
+ runtimePauseRequested: runtime.items.filter(
324
+ (item) => item.status === "pause_requested",
325
+ ).length,
326
+ runtimePaused: runtime.items.filter((item) => item.status === "paused")
327
+ .length,
291
328
  active: items.filter((item) => item.status === FLOW_STATUS.ACTIVE).length,
292
329
  paused: items.filter((item) => item.status === FLOW_STATUS.PAUSED).length,
293
330
  needsAttention: items.filter(
294
331
  (item) =>
295
332
  item.security.ready !== true ||
333
+ item.incidents?.some((incident) => incident.status === "open") ||
296
334
  item.history[0]?.status === EXECUTION_STATUS.FAILED ||
297
335
  item.history[0]?.status === "failed",
298
336
  ).length,
@@ -315,10 +353,16 @@ export function buildAutomationCenterProjection(
315
353
  id: item.id,
316
354
  revision: item.revision,
317
355
  })),
356
+ // The root revision protects the exact sanitized runtime capability and
357
+ // action previews consumed by IDEs, not only the occurrence state. A
358
+ // capability downgrade must therefore invalidate a previously rendered
359
+ // pause/resume action even when fence/controlRevision are unchanged.
360
+ runtime,
318
361
  }),
319
362
  summary,
320
363
  mutations: { createRoutine: routineProjection.createRoutine },
321
364
  items,
365
+ runtime,
322
366
  };
323
367
  }
324
368
 
@@ -328,7 +372,62 @@ function executionIdFor(flowId, requestedAction, revision) {
328
372
  .digest("hex")}`;
329
373
  }
330
374
 
331
- export function runAutomationCenterAction(
375
+ function manualIncidentBoundary(error, authority) {
376
+ const classified = classifyAutomationBoundaryError(error);
377
+ if (!classified) return null;
378
+ return {
379
+ classified,
380
+ boundary: {
381
+ ...(Array.isArray(error?.details?.permissions)
382
+ ? {
383
+ deniedPermissions: error.details.permissions
384
+ .map(String)
385
+ .slice(0, 32),
386
+ }
387
+ : {}),
388
+ ...(authority?.budget?.revision === undefined
389
+ ? {}
390
+ : { budgetRevision: authority.budget.revision }),
391
+ ...(Array.isArray(authority?.connectors)
392
+ ? { connectors: authority.connectors }
393
+ : {}),
394
+ },
395
+ details: { reasonCode: classified.code, retryable: false },
396
+ };
397
+ }
398
+
399
+ const DURABLE_CENTER_REJECTION = Symbol("durable-center-rejection");
400
+
401
+ function persistManualExecutionIncident(
402
+ db,
403
+ { flow, executionId, occurrenceId, requestedAction, authority, error, now },
404
+ ) {
405
+ const evidence = manualIncidentBoundary(error, authority);
406
+ if (!evidence) return false;
407
+ const authorityDigest = automationExecutionAuthorityDigest(authority, flow);
408
+ upsertAutomationExecutionIncident(
409
+ db,
410
+ {
411
+ runId: executionId,
412
+ flowId: flow.id,
413
+ occurrenceId,
414
+ triggerType: TRIGGER_TYPE.MANUAL,
415
+ category: evidence.classified.category,
416
+ code: evidence.classified.code,
417
+ authorityDigest,
418
+ boundary: evidence.boundary,
419
+ details: { ...evidence.details, actionId: requestedAction },
420
+ },
421
+ { now },
422
+ );
423
+ return true;
424
+ }
425
+
426
+ function durableCenterRejection(error) {
427
+ return { [DURABLE_CENTER_REJECTION]: error };
428
+ }
429
+
430
+ function runAutomationCenterActionLocked(
332
431
  db,
333
432
  { flowId, action: requestedAction, expectedRevision, now = Date.now } = {},
334
433
  ) {
@@ -372,38 +471,44 @@ export function runAutomationCenterAction(
372
471
  } else if (requestedAction === "disable") {
373
472
  result = updateFlowStatus(db, id, FLOW_STATUS.ARCHIVED);
374
473
  } else if (requestedAction === "delete") {
375
- if (typeof db.transaction !== "function") {
376
- throw centerError(
377
- "AUTOMATION_CENTER_TRANSACTION_REQUIRED",
378
- "deleting an automation flow requires a transactional database",
379
- );
380
- }
381
- result = db
382
- .transaction(() => {
383
- db.prepare(
384
- "DELETE FROM auto_execution_budget_reservations WHERE flow_id = ?",
385
- ).run(id);
386
- db.prepare(
387
- "DELETE FROM auto_execution_budget_usage WHERE flow_id = ?",
388
- ).run(id);
389
- db.prepare("DELETE FROM auto_execution_budgets WHERE flow_id = ?").run(
390
- id,
391
- );
392
- deleteFlow(db, id);
393
- return { deleted: true };
394
- })
395
- .immediate();
474
+ db.prepare(
475
+ "DELETE FROM auto_execution_budget_reservations WHERE flow_id = ?",
476
+ ).run(id);
477
+ db.prepare("DELETE FROM auto_execution_budget_usage WHERE flow_id = ?").run(
478
+ id,
479
+ );
480
+ db.prepare("DELETE FROM auto_execution_budgets WHERE flow_id = ?").run(id);
481
+ deleteFlow(db, id);
482
+ result = { deleted: true };
396
483
  } else {
397
484
  const authority = automationExecutionAuthoritySnapshot(db, flow);
485
+ const executionId = executionIdFor(id, requestedAction, item.revision);
398
486
  const occurrenceId = `automation-center:${requestedAction}:${id}:${item.revision.slice("sha256:".length)}`;
399
- reserveAutomationExecutionAuthority(
400
- db,
401
- flow,
402
- occurrenceId,
403
- authority,
404
- automationExecutionAuthorityDigest(authority, flow),
405
- { now },
406
- );
487
+ try {
488
+ reserveAutomationExecutionAuthority(
489
+ db,
490
+ flow,
491
+ occurrenceId,
492
+ authority,
493
+ automationExecutionAuthorityDigest(authority, flow),
494
+ { now },
495
+ );
496
+ } catch (error) {
497
+ if (
498
+ persistManualExecutionIncident(db, {
499
+ flow,
500
+ executionId,
501
+ occurrenceId,
502
+ requestedAction,
503
+ authority,
504
+ error,
505
+ now,
506
+ })
507
+ ) {
508
+ return durableCenterRejection(error);
509
+ }
510
+ throw error;
511
+ }
407
512
  let inputData = { source: "automation-center" };
408
513
  if (requestedAction === "retry_failed") {
409
514
  const failed = getExecution(db, item.history[0].id);
@@ -416,11 +521,30 @@ export function runAutomationCenterAction(
416
521
  retryOf = failed.id;
417
522
  inputData = failed.inputData;
418
523
  }
419
- result = executeFlow(db, id, {
420
- triggerType: TRIGGER_TYPE.MANUAL,
421
- inputData,
422
- executionId: executionIdFor(id, requestedAction, item.revision),
423
- });
524
+ try {
525
+ result = executeFlow(db, id, {
526
+ triggerType: TRIGGER_TYPE.MANUAL,
527
+ inputData,
528
+ executionId,
529
+ executionAuthority: authority,
530
+ assertRuntimeBoundary: assertAutomationRuntimeBoundary,
531
+ });
532
+ } catch (error) {
533
+ if (
534
+ persistManualExecutionIncident(db, {
535
+ flow,
536
+ executionId,
537
+ occurrenceId,
538
+ requestedAction,
539
+ authority,
540
+ error,
541
+ now,
542
+ })
543
+ ) {
544
+ return durableCenterRejection(error);
545
+ }
546
+ throw error;
547
+ }
424
548
  }
425
549
  return {
426
550
  schema: "chainlesschain.automation-center-action/v1",
@@ -433,3 +557,23 @@ export function runAutomationCenterAction(
433
557
  result,
434
558
  };
435
559
  }
560
+
561
+ export function runAutomationCenterAction(db, options = {}) {
562
+ if (!db || typeof db.transaction !== "function") {
563
+ throw centerError(
564
+ "AUTOMATION_CENTER_TRANSACTION_REQUIRED",
565
+ "automation center actions require transactional database support",
566
+ );
567
+ }
568
+ // BEGIN IMMEDIATE makes the rendered revision recheck and its mutation one
569
+ // cross-process critical section. Boundary rejections are returned as a
570
+ // sentinel so their durable incident commits before the original error is
571
+ // surfaced to the caller.
572
+ const outcome = db
573
+ .transaction(() => runAutomationCenterActionLocked(db, options))
574
+ .immediate();
575
+ if (outcome?.[DURABLE_CENTER_REJECTION]) {
576
+ throw outcome[DURABLE_CENTER_REJECTION];
577
+ }
578
+ return outcome;
579
+ }
@@ -1131,6 +1131,24 @@ function _topoOrder(nodes, edges) {
1131
1131
  return result.map((id) => indexById.get(id));
1132
1132
  }
1133
1133
 
1134
+ function _runtimeEffectForNode(flow, node) {
1135
+ return {
1136
+ nodeId: node.id,
1137
+ connector: node.connector,
1138
+ action: node.action,
1139
+ effect:
1140
+ node.effect && typeof node.effect === "object"
1141
+ ? node.effect.effect || "write"
1142
+ : "write",
1143
+ resourceScopes:
1144
+ node.effect &&
1145
+ typeof node.effect === "object" &&
1146
+ Array.isArray(node.effect.resourceScopes)
1147
+ ? node.effect.resourceScopes
1148
+ : [`automation-flow:${flow.id}:node:${node.id}:simulated`],
1149
+ };
1150
+ }
1151
+
1134
1152
  export function executeFlow(db, flowId, options = {}) {
1135
1153
  const flow = getFlow(db, flowId);
1136
1154
  if (!flow) throw new Error(`Flow not found: ${flowId}`);
@@ -1140,6 +1158,8 @@ export function executeFlow(db, flowId, options = {}) {
1140
1158
  triggerType = TRIGGER_TYPE.MANUAL,
1141
1159
  testMode = false,
1142
1160
  executionId,
1161
+ executionAuthority = null,
1162
+ assertRuntimeBoundary = null,
1143
1163
  } = options;
1144
1164
  const execId =
1145
1165
  executionId === undefined
@@ -1149,6 +1169,20 @@ export function executeFlow(db, flowId, options = {}) {
1149
1169
  if (existing) {
1150
1170
  return _resolveExistingExecution(existing, { flowId, triggerType });
1151
1171
  }
1172
+ // Validate every declared action boundary before creating an execution row
1173
+ // or invoking the first effect. The per-node assertion below remains as the
1174
+ // final send-time check, while this complete preflight guarantees that a
1175
+ // later node cannot discover an undeclared write after earlier nodes ran.
1176
+ if (assertRuntimeBoundary) {
1177
+ for (const node of flow.nodes) {
1178
+ if ((node.type || "action") !== "action") continue;
1179
+ assertRuntimeBoundary(
1180
+ executionAuthority,
1181
+ flow,
1182
+ _runtimeEffectForNode(flow, node),
1183
+ );
1184
+ }
1185
+ }
1152
1186
  const startedAt = _now();
1153
1187
  const startMs = Date.now();
1154
1188
 
@@ -1203,6 +1237,13 @@ export function executeFlow(db, flowId, options = {}) {
1203
1237
  Object.assign(merged, stepInputs.get(pe.from) || {});
1204
1238
  }
1205
1239
  }
1240
+ if ((node.type || "action") === "action" && assertRuntimeBoundary) {
1241
+ assertRuntimeBoundary(
1242
+ executionAuthority,
1243
+ flow,
1244
+ _runtimeEffectForNode(flow, node),
1245
+ );
1246
+ }
1206
1247
  const output = _simulateNodeOutput(node, merged);
1207
1248
  stepInputs.set(node.id, output.output || output);
1208
1249
  stepsLog.push({