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
@@ -11,12 +11,15 @@ import {
11
11
  } from "./scheduler-kernel/contract.js";
12
12
 
13
13
  export const AUTOMATION_EXECUTE_PERMISSION = "automation:execute";
14
+ export const AUTOMATION_EXECUTION_AUTHORITY_SCHEMA_VERSION = 2;
15
+ export const AUTOMATION_EXECUTION_BOUNDARY_SCHEMA_VERSION = 1;
14
16
  export const AUTOMATION_MIN_BUDGET_WINDOW_MS = 60_000;
15
17
  export const AUTOMATION_MAX_BUDGET_WINDOW_MS = 31 * 24 * 60 * 60 * 1000;
16
18
  export const AUTOMATION_MAX_BUDGET_VALUE = 1_000_000;
17
19
 
18
20
  const CONNECTOR_PATTERN = /^[a-z0-9][a-z0-9_-]{0,63}$/u;
19
21
  const DIGEST_PATTERN = /^[0-9a-f]{64}$/u;
22
+ const AUTOMATION_EFFECTS = new Set(["read", "write", "destructive"]);
20
23
 
21
24
  function authorityError(code, message, details = undefined, cause = undefined) {
22
25
  const error = new SchedulerKernelError(
@@ -106,6 +109,7 @@ function normalizeFlowAuthorityInputs(flow) {
106
109
  );
107
110
  }
108
111
  const connectors = [];
112
+ const effects = [];
109
113
  let actionSteps = 0;
110
114
  for (let index = 0; index < flow.nodes.length; index += 1) {
111
115
  const node = flow.nodes[index];
@@ -118,17 +122,69 @@ function normalizeFlowAuthorityInputs(flow) {
118
122
  }
119
123
  if ((node.type || "action") !== "action") continue;
120
124
  actionSteps += 1;
121
- connectors.push(
122
- normalizeConnector(
123
- node.connector,
124
- `automationFlow.nodes[${index}].connector`,
125
- ),
125
+ const connector = normalizeConnector(
126
+ node.connector,
127
+ `automationFlow.nodes[${index}].connector`,
128
+ );
129
+ const action = normalizeIdentifier(
130
+ node.action,
131
+ `automationFlow.nodes[${index}].action`,
132
+ { maxLength: 96 },
126
133
  );
134
+ connectors.push(connector);
135
+ const rawEffect =
136
+ node.effect &&
137
+ typeof node.effect === "object" &&
138
+ !Array.isArray(node.effect)
139
+ ? node.effect
140
+ : {};
141
+ const effect = String(rawEffect.effect || "write").toLowerCase();
142
+ if (!AUTOMATION_EFFECTS.has(effect)) {
143
+ throw authorityError(
144
+ "AUTOMATION_EXECUTION_EFFECT_INVALID",
145
+ `automationFlow.nodes[${index}].effect.effect is invalid`,
146
+ );
147
+ }
148
+ const declaredScopes = Array.isArray(rawEffect.resourceScopes)
149
+ ? [
150
+ ...new Set(
151
+ rawEffect.resourceScopes.map((scope, scopeIndex) =>
152
+ normalizeIdentifier(
153
+ scope,
154
+ `automationFlow.nodes[${index}].effect.resourceScopes[${scopeIndex}]`,
155
+ { maxLength: 256 },
156
+ ),
157
+ ),
158
+ ),
159
+ ].sort()
160
+ : [];
161
+ // The current connector engine is intentionally a simulator and performs
162
+ // no outbound effect. Legacy flows therefore receive a deterministic,
163
+ // flow-local simulated scope. A future real connector must declare its
164
+ // actual resource scopes in the versioned flow definition before it can
165
+ // pass this same boundary contract.
166
+ const resourceScopes =
167
+ declaredScopes.length > 0
168
+ ? declaredScopes
169
+ : [
170
+ `automation-flow:${flowId}:node:${normalizeIdentifier(
171
+ node.id,
172
+ `automationFlow.nodes[${index}].id`,
173
+ )}:simulated`,
174
+ ];
175
+ effects.push({
176
+ nodeId: normalizeIdentifier(node.id, `automationFlow.nodes[${index}].id`),
177
+ connector,
178
+ action,
179
+ effect,
180
+ resourceScopes,
181
+ });
127
182
  }
128
183
  return {
129
184
  flowId,
130
185
  principalId,
131
186
  connectors: [...new Set(connectors)].sort(),
187
+ effects,
132
188
  actionSteps,
133
189
  };
134
190
  }
@@ -349,7 +405,7 @@ export function automationExecutionAuthoritySnapshot(db, flow) {
349
405
  );
350
406
  }
351
407
  return {
352
- schemaVersion: 1,
408
+ schemaVersion: AUTOMATION_EXECUTION_AUTHORITY_SCHEMA_VERSION,
353
409
  flowId: inputs.flowId,
354
410
  principalId: inputs.principalId,
355
411
  requiredPermissions: [
@@ -357,6 +413,10 @@ export function automationExecutionAuthoritySnapshot(db, flow) {
357
413
  ...inputs.connectors.map(automationConnectorPermission),
358
414
  ],
359
415
  connectors: inputs.connectors,
416
+ effectBoundary: {
417
+ schemaVersion: AUTOMATION_EXECUTION_BOUNDARY_SCHEMA_VERSION,
418
+ effects: inputs.effects,
419
+ },
360
420
  actionSteps: inputs.actionSteps,
361
421
  budget: normalizeAutomationExecutionBudget(budget),
362
422
  };
@@ -372,8 +432,16 @@ export function normalizeAutomationExecutionAuthoritySnapshot(value, flow) {
372
432
  const inputs = normalizeFlowAuthorityInputs(flow);
373
433
  const budget = normalizeAutomationExecutionBudget(value.budget);
374
434
  const requiredPermissions = automationRequiredPermissions(flow);
435
+ const expectedEffectBoundary = {
436
+ schemaVersion: AUTOMATION_EXECUTION_BOUNDARY_SCHEMA_VERSION,
437
+ effects: inputs.effects,
438
+ };
439
+ const hasEffectBoundary = Object.prototype.hasOwnProperty.call(
440
+ value,
441
+ "effectBoundary",
442
+ );
375
443
  const normalized = {
376
- schemaVersion: value.schemaVersion,
444
+ schemaVersion: Number(value.schemaVersion),
377
445
  flowId: normalizeIdentifier(value.flowId, "executionAuthority.flowId"),
378
446
  principalId: normalizeIdentifier(
379
447
  value.principalId,
@@ -395,11 +463,33 @@ export function normalizeAutomationExecutionAuthoritySnapshot(value, flow) {
395
463
  ),
396
464
  )
397
465
  : [],
466
+ effectBoundary:
467
+ value.effectBoundary &&
468
+ typeof value.effectBoundary === "object" &&
469
+ !Array.isArray(value.effectBoundary)
470
+ ? value.effectBoundary
471
+ : null,
398
472
  actionSteps: Number(value.actionSteps),
399
473
  budget,
400
474
  };
475
+ const boundaryMatches =
476
+ canonicalJson(
477
+ normalized.effectBoundary,
478
+ "executionAuthority.effectBoundary",
479
+ ) === canonicalJson(expectedEffectBoundary, "effectBoundary");
480
+ // Schema v1 is the pre-write-scope authority snapshot already persisted by
481
+ // released schedulers. It is accepted only for an otherwise exact flow and
482
+ // is upgraded in memory to the deterministic boundary derived from that
483
+ // immutable flow snapshot. New snapshots are v2 and must carry the boundary.
484
+ const compatibleSchema =
485
+ (normalized.schemaVersion === 1 &&
486
+ (!hasEffectBoundary || boundaryMatches)) ||
487
+ (normalized.schemaVersion ===
488
+ AUTOMATION_EXECUTION_AUTHORITY_SCHEMA_VERSION &&
489
+ hasEffectBoundary &&
490
+ boundaryMatches);
401
491
  const valid =
402
- normalized.schemaVersion === 1 &&
492
+ compatibleSchema &&
403
493
  normalized.flowId === inputs.flowId &&
404
494
  normalized.principalId === inputs.principalId &&
405
495
  canonicalJson(
@@ -416,7 +506,7 @@ export function normalizeAutomationExecutionAuthoritySnapshot(value, flow) {
416
506
  `automation execution authority does not match flow: ${inputs.flowId}`,
417
507
  );
418
508
  }
419
- return normalized;
509
+ return { ...normalized, effectBoundary: expectedEffectBoundary };
420
510
  }
421
511
 
422
512
  export function automationExecutionAuthorityDigest(snapshot, flow) {
@@ -424,12 +514,136 @@ export function automationExecutionAuthorityDigest(snapshot, flow) {
424
514
  snapshot,
425
515
  flow,
426
516
  );
517
+ const digestSnapshot =
518
+ normalized.schemaVersion === 1
519
+ ? {
520
+ schemaVersion: 1,
521
+ flowId: normalized.flowId,
522
+ principalId: normalized.principalId,
523
+ requiredPermissions: normalized.requiredPermissions,
524
+ connectors: normalized.connectors,
525
+ actionSteps: normalized.actionSteps,
526
+ budget: normalized.budget,
527
+ }
528
+ : normalized;
529
+ return createHash("sha256")
530
+ .update(
531
+ normalized.schemaVersion === 1
532
+ ? "chainlesschain.automation-execution-authority.v1\0"
533
+ : "chainlesschain.automation-execution-authority.v2\0",
534
+ "utf8",
535
+ )
536
+ .update(
537
+ canonicalJson(digestSnapshot, "automationExecutionAuthority"),
538
+ "utf8",
539
+ )
540
+ .digest("hex");
541
+ }
542
+
543
+ export function automationExecutionBoundary(snapshot, flow) {
544
+ const normalized = normalizeAutomationExecutionAuthoritySnapshot(
545
+ snapshot,
546
+ flow,
547
+ );
548
+ return structuredClone(normalized.effectBoundary);
549
+ }
550
+
551
+ export function automationExecutionBoundaryDigest(snapshot, flow) {
552
+ const boundary = automationExecutionBoundary(snapshot, flow);
427
553
  return createHash("sha256")
428
- .update("chainlesschain.automation-execution-authority.v1\0", "utf8")
429
- .update(canonicalJson(normalized, "automationExecutionAuthority"), "utf8")
554
+ .update("chainlesschain.automation-execution-boundary.v1\0", "utf8")
555
+ .update(canonicalJson(boundary, "automationExecutionBoundary"), "utf8")
430
556
  .digest("hex");
431
557
  }
432
558
 
559
+ export function assertAutomationRuntimeBoundary(
560
+ snapshot,
561
+ flow,
562
+ { nodeId, connector, action, effect, resourceScopes } = {},
563
+ ) {
564
+ const boundary = automationExecutionBoundary(snapshot, flow);
565
+ const id = normalizeIdentifier(nodeId, "runtimeEffect.nodeId");
566
+ const expected = boundary.effects.find((entry) => entry.nodeId === id);
567
+ const actual = {
568
+ nodeId: id,
569
+ connector: normalizeConnector(connector, "runtimeEffect.connector"),
570
+ action: normalizeIdentifier(action, "runtimeEffect.action", {
571
+ maxLength: 96,
572
+ }),
573
+ effect: String(effect || "").toLowerCase(),
574
+ resourceScopes: Array.isArray(resourceScopes)
575
+ ? [
576
+ ...new Set(
577
+ resourceScopes.map((scope, index) =>
578
+ normalizeIdentifier(
579
+ scope,
580
+ `runtimeEffect.resourceScopes[${index}]`,
581
+ { maxLength: 256 },
582
+ ),
583
+ ),
584
+ ),
585
+ ].sort()
586
+ : [],
587
+ };
588
+ if (
589
+ !expected ||
590
+ canonicalJson(actual, "runtimeEffect") !==
591
+ canonicalJson(expected, "expectedRuntimeEffect")
592
+ ) {
593
+ throw authorityError(
594
+ "AUTOMATION_EXECUTION_WRITE_SCOPE_DENIED",
595
+ `automation runtime effect exceeds its declared boundary: ${id}`,
596
+ { flowId: boundary.flowId || flow?.id || null, nodeId: id },
597
+ );
598
+ }
599
+ return actual;
600
+ }
601
+
602
+ export function classifyAutomationBoundaryError(error) {
603
+ const code = String(error?.code || "");
604
+ if (code === "AUTOMATION_EXECUTION_BUDGET_EXHAUSTED") {
605
+ return { category: "budget", code };
606
+ }
607
+ if (
608
+ code === "AUTOMATION_EXECUTION_BUDGET_REQUIRED" ||
609
+ code === "AUTOMATION_EXECUTION_BUDGET_INVALID" ||
610
+ code === "AUTOMATION_EXECUTION_BUDGET_STATE_INVALID" ||
611
+ code === "AUTOMATION_EXECUTION_AUTHORITY_STALE"
612
+ ) {
613
+ return { category: "budget", code };
614
+ }
615
+ if (
616
+ code === "AUTOMATION_EXECUTION_WRITE_SCOPE_DENIED" ||
617
+ code === "AUTOMATION_EXECUTION_WRITE_SCOPE_REQUIRED" ||
618
+ code === "AUTOMATION_EXECUTION_EFFECT_INVALID"
619
+ ) {
620
+ return { category: "write_scope", code };
621
+ }
622
+ if (code === "AUTOMATION_EXECUTION_PERMISSION_DENIED") {
623
+ const denied = Array.isArray(error?.details?.permissions)
624
+ ? error.details.permissions.map(String)
625
+ : [];
626
+ return {
627
+ category: denied.some((permission) =>
628
+ permission.startsWith("automation:connector:"),
629
+ )
630
+ ? "connector"
631
+ : "permission",
632
+ code,
633
+ };
634
+ }
635
+ if (
636
+ code === "AUTOMATION_EXECUTION_PRINCIPAL_REQUIRED" ||
637
+ code === "AUTOMATION_EXECUTION_AUTHORITY_INVALID"
638
+ ) {
639
+ return { category: "permission", code };
640
+ }
641
+ if (code === "AUTOMATION_EXECUTION_CONNECTOR_INVALID") {
642
+ return { category: "connector", code };
643
+ }
644
+ return null;
645
+ }
646
+
433
647
  export function automationSchedulerAuthority(snapshot, flow, capability) {
434
648
  const normalized = normalizeAutomationExecutionAuthoritySnapshot(
435
649
  snapshot,
@@ -608,7 +822,22 @@ export function reserveAutomationExecutionAuthority(
608
822
  const timestamp = normalizeEpochMs(Number(now()), "now");
609
823
  const reserve = db.transaction(() => {
610
824
  const current = automationExecutionAuthoritySnapshot(db, flow);
611
- const currentDigest = automationExecutionAuthorityDigest(current, flow);
825
+ const comparableCurrent =
826
+ normalized.schemaVersion === 1
827
+ ? {
828
+ schemaVersion: 1,
829
+ flowId: current.flowId,
830
+ principalId: current.principalId,
831
+ requiredPermissions: current.requiredPermissions,
832
+ connectors: current.connectors,
833
+ actionSteps: current.actionSteps,
834
+ budget: current.budget,
835
+ }
836
+ : current;
837
+ const currentDigest = automationExecutionAuthorityDigest(
838
+ comparableCurrent,
839
+ flow,
840
+ );
612
841
  if (currentDigest !== expectedDigest) {
613
842
  throw authorityError(
614
843
  "AUTOMATION_EXECUTION_AUTHORITY_STALE",