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
@@ -0,0 +1,448 @@
1
+ import { createHash } from "node:crypto";
2
+ import {
3
+ RUNTIME_PAUSE_RESUME,
4
+ SchedulerKernelError,
5
+ canonicalJson,
6
+ normalizeIdentifier,
7
+ normalizeRuntimeControlCapability,
8
+ } from "./scheduler-kernel/contract.js";
9
+ import {
10
+ RUNTIME_CONTROL_JOB_KINDS,
11
+ RUNTIME_CONTROL_OCCURRENCE_STATUSES,
12
+ } from "./scheduler-kernel/store.js";
13
+
14
+ export const AUTOMATION_CENTER_RUNTIME_SCHEMA =
15
+ "chainlesschain.automation-center-runtime/v1";
16
+ export const AUTOMATION_CENTER_RUNTIME_ACTION_ERROR_SCHEMA =
17
+ "chainlesschain.automation-center-runtime-action-error/v1";
18
+ export const AUTOMATION_CENTER_RUNTIME_SCHEMA_VERSION = 1;
19
+
20
+ const ACTIONS = Object.freeze(["pause", "resume"]);
21
+ const ACTION_SET = new Set(ACTIONS);
22
+ const SAFE_RUNTIME_ERROR_CODES = new Set([
23
+ "AUTOMATION_CENTER_RUNTIME_STORE_REQUIRED",
24
+ "AUTOMATION_CENTER_RUNTIME_CAPABILITY_REQUIRED",
25
+ "AUTOMATION_CENTER_RUNTIME_INVALID_ARGUMENT",
26
+ "AUTOMATION_CENTER_RUNTIME_ACTION_UNSUPPORTED",
27
+ "AUTOMATION_CENTER_RUNTIME_NOT_FOUND",
28
+ "AUTOMATION_CENTER_RUNTIME_KIND_UNSUPPORTED",
29
+ "AUTOMATION_CENTER_RUNTIME_TERMINAL",
30
+ "AUTOMATION_CENTER_RUNTIME_FENCE_CONFLICT",
31
+ "AUTOMATION_CENTER_RUNTIME_CAPABILITY_UNSUPPORTED",
32
+ "AUTOMATION_CENTER_RUNTIME_CAPABILITY_MISMATCH",
33
+ "AUTOMATION_CENTER_RUNTIME_REVISION_CONFLICT",
34
+ "AUTOMATION_CENTER_RUNTIME_STATE_CONFLICT",
35
+ ]);
36
+ const OCCURRENCE_ID_PATTERN = /^occ_[0-9a-f]{64}$/u;
37
+ const JOB_KIND_SET = new Set(RUNTIME_CONTROL_JOB_KINDS);
38
+ const TERMINAL_STATUSES = new Set(["succeeded", "dead_letter"]);
39
+
40
+ function runtimeError(code, message, details = undefined) {
41
+ const error = new SchedulerKernelError(code, message, details);
42
+ error.retryable = false;
43
+ return error;
44
+ }
45
+
46
+ function requireStore(schedulerStore) {
47
+ if (
48
+ !schedulerStore ||
49
+ typeof schedulerStore.listRuntimeControlOccurrences !== "function" ||
50
+ typeof schedulerStore.getOccurrence !== "function" ||
51
+ typeof schedulerStore.getOccurrenceControl !== "function" ||
52
+ typeof schedulerStore.getJob !== "function"
53
+ ) {
54
+ throw runtimeError(
55
+ "AUTOMATION_CENTER_RUNTIME_STORE_REQUIRED",
56
+ "A scheduler store with runtime-control reads is required",
57
+ );
58
+ }
59
+ return schedulerStore;
60
+ }
61
+
62
+ function requireCapabilityResolver(capabilityForKind) {
63
+ if (typeof capabilityForKind !== "function") {
64
+ throw runtimeError(
65
+ "AUTOMATION_CENTER_RUNTIME_CAPABILITY_REQUIRED",
66
+ "A runtime-control capability resolver is required",
67
+ );
68
+ }
69
+ return capabilityForKind;
70
+ }
71
+
72
+ function capabilityFor(resolver, jobKind) {
73
+ return normalizeRuntimeControlCapability(resolver(jobKind));
74
+ }
75
+
76
+ function supportsRuntimeControl(capability) {
77
+ return (
78
+ capability.pauseResume === RUNTIME_PAUSE_RESUME.CHECKPOINT_V1 &&
79
+ capability.safePoints.length > 0
80
+ );
81
+ }
82
+
83
+ function assertExpectedInteger(value, field, { positive = false } = {}) {
84
+ const minimum = positive ? 1 : 0;
85
+ if (!Number.isSafeInteger(value) || value < minimum) {
86
+ throw runtimeError(
87
+ "AUTOMATION_CENTER_RUNTIME_INVALID_ARGUMENT",
88
+ `${field} must be a ${positive ? "positive" : "non-negative"} integer`,
89
+ );
90
+ }
91
+ return value;
92
+ }
93
+
94
+ function actionPreview(item, action) {
95
+ return {
96
+ executor: "cli",
97
+ argv: [
98
+ "automation",
99
+ "center-runtime-action",
100
+ item.id,
101
+ action,
102
+ "--expected-fence",
103
+ String(item.fence),
104
+ "--expected-control-revision",
105
+ String(item.control?.revision ?? 0),
106
+ "--json",
107
+ ],
108
+ mutates: true,
109
+ };
110
+ }
111
+
112
+ function projectedAction(item, capability, action) {
113
+ if (!supportsRuntimeControl(capability)) {
114
+ return {
115
+ id: action,
116
+ available: false,
117
+ reason: "runtime_control_unsupported",
118
+ preview: null,
119
+ };
120
+ }
121
+ const available =
122
+ (action === "pause" && item.runtimeStatus === "running") ||
123
+ (action === "resume" && item.runtimeStatus === "paused");
124
+ let reason = null;
125
+ if (!available) {
126
+ if (action === "pause") {
127
+ reason =
128
+ item.runtimeStatus === "pause_requested"
129
+ ? "pause_already_requested"
130
+ : item.runtimeStatus === "paused"
131
+ ? "already_paused"
132
+ : "occurrence_not_running";
133
+ } else {
134
+ reason = "occurrence_not_paused";
135
+ }
136
+ }
137
+ return {
138
+ id: action,
139
+ available,
140
+ reason,
141
+ preview: available ? actionPreview(item, action) : null,
142
+ };
143
+ }
144
+
145
+ function projectOccurrence(item, resolver) {
146
+ const capability = capabilityFor(resolver, item.jobKind);
147
+ return {
148
+ id: item.id,
149
+ jobId: item.jobId,
150
+ jobKind: item.jobKind,
151
+ status: item.runtimeStatus,
152
+ occurrenceStatus: item.occurrenceStatus,
153
+ scheduledFor: item.scheduledFor,
154
+ attempt: item.attempt,
155
+ maxAttempts: item.maxAttempts,
156
+ fence: item.fence,
157
+ controlRevision: item.control?.revision ?? 0,
158
+ createdAt: item.createdAt,
159
+ updatedAt: item.updatedAt,
160
+ runtimeControl: supportsRuntimeControl(capability)
161
+ ? {
162
+ pauseResume: capability.pauseResume,
163
+ safePoints: [...capability.safePoints],
164
+ }
165
+ : null,
166
+ actions: ACTIONS.map((action) => projectedAction(item, capability, action)),
167
+ };
168
+ }
169
+
170
+ export function buildAutomationCenterRuntimeProjection(
171
+ schedulerStore,
172
+ {
173
+ capabilityForKind,
174
+ statuses = RUNTIME_CONTROL_OCCURRENCE_STATUSES,
175
+ jobKinds = RUNTIME_CONTROL_JOB_KINDS,
176
+ limit = 50,
177
+ } = {},
178
+ ) {
179
+ const store = requireStore(schedulerStore);
180
+ const resolver = requireCapabilityResolver(capabilityForKind);
181
+ const items = store
182
+ .listRuntimeControlOccurrences({ statuses, jobKinds, limit })
183
+ .map((item) => projectOccurrence(item, resolver));
184
+ return {
185
+ schema: AUTOMATION_CENTER_RUNTIME_SCHEMA,
186
+ schemaVersion: AUTOMATION_CENTER_RUNTIME_SCHEMA_VERSION,
187
+ items,
188
+ };
189
+ }
190
+
191
+ function deterministicRequestId({
192
+ occurrenceId,
193
+ action,
194
+ expectedFence,
195
+ capability,
196
+ expectedControlRevision,
197
+ }) {
198
+ const digest = createHash("sha256")
199
+ .update("chainlesschain.automation-center-runtime.request.v1\0", "utf8")
200
+ .update(
201
+ canonicalJson(
202
+ {
203
+ action,
204
+ capability,
205
+ expectedControlRevision,
206
+ expectedFence,
207
+ occurrenceId,
208
+ },
209
+ "automationCenterRuntime.request",
210
+ ),
211
+ "utf8",
212
+ )
213
+ .digest("hex");
214
+ return `automation-center-runtime:${action}:${digest}`;
215
+ }
216
+
217
+ function sameCapability(left, right) {
218
+ return (
219
+ canonicalJson(left, "runtimeControl.persisted") ===
220
+ canonicalJson(right, "runtimeControl.current")
221
+ );
222
+ }
223
+
224
+ function sanitizeActionResult({
225
+ action,
226
+ requestId,
227
+ deduplicated,
228
+ occurrence,
229
+ control,
230
+ jobKind,
231
+ }) {
232
+ return {
233
+ schema: AUTOMATION_CENTER_RUNTIME_SCHEMA,
234
+ schemaVersion: AUTOMATION_CENTER_RUNTIME_SCHEMA_VERSION,
235
+ authority: "cli",
236
+ ok: true,
237
+ action,
238
+ requestId,
239
+ deduplicated: deduplicated === true,
240
+ occurrence: {
241
+ id: occurrence.id,
242
+ jobId: occurrence.jobId,
243
+ jobKind,
244
+ status: occurrence.status,
245
+ attempt: occurrence.attempt,
246
+ maxAttempts: occurrence.maxAttempts,
247
+ fence: occurrence.fence,
248
+ scheduledFor: occurrence.scheduledFor,
249
+ updatedAt: occurrence.updatedAt,
250
+ },
251
+ control: {
252
+ state: control.state,
253
+ revision: control.revision,
254
+ expectedFence: control.expectedFence,
255
+ requestedAt: control.requestedAt,
256
+ pausedAt: control.pausedAt,
257
+ resumedAt: control.resumedAt,
258
+ updatedAt: control.updatedAt,
259
+ },
260
+ };
261
+ }
262
+
263
+ export function runAutomationCenterRuntimeAction(
264
+ schedulerStore,
265
+ {
266
+ capabilityForKind,
267
+ occurrenceId,
268
+ action,
269
+ expectedFence,
270
+ expectedControlRevision,
271
+ } = {},
272
+ ) {
273
+ const store = requireStore(schedulerStore);
274
+ const resolver = requireCapabilityResolver(capabilityForKind);
275
+ const id = normalizeIdentifier(occurrenceId, "occurrenceId");
276
+ const normalizedAction = normalizeIdentifier(action, "action", {
277
+ maxLength: 16,
278
+ });
279
+ if (!ACTION_SET.has(normalizedAction)) {
280
+ throw runtimeError(
281
+ "AUTOMATION_CENTER_RUNTIME_ACTION_UNSUPPORTED",
282
+ "Runtime action must be pause or resume",
283
+ );
284
+ }
285
+ const fence = assertExpectedInteger(expectedFence, "expectedFence", {
286
+ positive: true,
287
+ });
288
+ const revision = assertExpectedInteger(
289
+ expectedControlRevision,
290
+ "expectedControlRevision",
291
+ );
292
+
293
+ // Every mutation starts from fresh durable evidence. Full occurrence/job
294
+ // records stay inside this trusted boundary and are never returned.
295
+ const occurrence = store.getOccurrence(id);
296
+ if (!occurrence) {
297
+ throw runtimeError(
298
+ "AUTOMATION_CENTER_RUNTIME_NOT_FOUND",
299
+ `Scheduler occurrence does not exist: ${id}`,
300
+ );
301
+ }
302
+ const job = store.getJob(occurrence.jobId);
303
+ if (!job || !JOB_KIND_SET.has(job.kind)) {
304
+ throw runtimeError(
305
+ "AUTOMATION_CENTER_RUNTIME_KIND_UNSUPPORTED",
306
+ "Scheduler occurrence kind is not Automation Center controllable",
307
+ );
308
+ }
309
+ if (TERMINAL_STATUSES.has(occurrence.status)) {
310
+ throw runtimeError(
311
+ "AUTOMATION_CENTER_RUNTIME_TERMINAL",
312
+ `Scheduler occurrence is terminal: ${id}`,
313
+ );
314
+ }
315
+ if (occurrence.fence !== fence) {
316
+ throw runtimeError(
317
+ "AUTOMATION_CENTER_RUNTIME_FENCE_CONFLICT",
318
+ `Scheduler occurrence fence changed: ${id}`,
319
+ { expectedFence: fence, actualFence: occurrence.fence },
320
+ );
321
+ }
322
+
323
+ const capability = capabilityFor(resolver, job.kind);
324
+ if (!supportsRuntimeControl(capability)) {
325
+ throw runtimeError(
326
+ "AUTOMATION_CENTER_RUNTIME_CAPABILITY_UNSUPPORTED",
327
+ "Scheduler runtime does not declare checkpoint pause/resume",
328
+ );
329
+ }
330
+ const control = store.getOccurrenceControl(id);
331
+ if (control && !sameCapability(control.capability, capability)) {
332
+ throw runtimeError(
333
+ "AUTOMATION_CENTER_RUNTIME_CAPABILITY_MISMATCH",
334
+ `Scheduler runtime-control capability changed: ${id}`,
335
+ );
336
+ }
337
+ const requestId = deterministicRequestId({
338
+ occurrenceId: id,
339
+ action: normalizedAction,
340
+ expectedFence: fence,
341
+ capability,
342
+ expectedControlRevision: revision,
343
+ });
344
+
345
+ const priorRequestId =
346
+ normalizedAction === "pause"
347
+ ? control?.pauseRequestId
348
+ : control?.resumeRequestId;
349
+ if (priorRequestId === requestId) {
350
+ return sanitizeActionResult({
351
+ action: normalizedAction,
352
+ requestId,
353
+ deduplicated: true,
354
+ occurrence,
355
+ control,
356
+ jobKind: job.kind,
357
+ });
358
+ }
359
+
360
+ const actualRevision = control?.revision ?? 0;
361
+ if (actualRevision !== revision) {
362
+ throw runtimeError(
363
+ "AUTOMATION_CENTER_RUNTIME_REVISION_CONFLICT",
364
+ `Scheduler occurrence control revision changed: ${id}`,
365
+ { expectedRevision: revision, actualRevision },
366
+ );
367
+ }
368
+
369
+ let result;
370
+ if (normalizedAction === "pause") {
371
+ if (occurrence.status !== "running" || control !== null) {
372
+ throw runtimeError(
373
+ "AUTOMATION_CENTER_RUNTIME_STATE_CONFLICT",
374
+ `Scheduler occurrence is not pausable: ${id}`,
375
+ );
376
+ }
377
+ const nextControl = store.requestOccurrencePause({
378
+ occurrenceId: id,
379
+ expectedFence: fence,
380
+ expectedRevision: revision,
381
+ requestId,
382
+ capability,
383
+ });
384
+ result = {
385
+ occurrence: store.getOccurrence(id),
386
+ control: nextControl,
387
+ deduplicated: nextControl.deduplicated,
388
+ };
389
+ } else {
390
+ if (
391
+ occurrence.status !== "retry_wait" ||
392
+ control?.state !== "paused" ||
393
+ control.expectedFence !== fence
394
+ ) {
395
+ throw runtimeError(
396
+ "AUTOMATION_CENTER_RUNTIME_STATE_CONFLICT",
397
+ `Scheduler occurrence is not resumable: ${id}`,
398
+ );
399
+ }
400
+ result = store.resumeOccurrence({
401
+ occurrenceId: id,
402
+ expectedRevision: revision,
403
+ requestId,
404
+ });
405
+ result.deduplicated = result.control.deduplicated;
406
+ }
407
+
408
+ return sanitizeActionResult({
409
+ action: normalizedAction,
410
+ requestId,
411
+ deduplicated: result.deduplicated,
412
+ occurrence: result.occurrence,
413
+ control: result.control,
414
+ jobKind: job.kind,
415
+ });
416
+ }
417
+
418
+ export function automationCenterRuntimeActionErrorEnvelope(
419
+ error,
420
+ { occurrenceId = null, action = null } = {},
421
+ ) {
422
+ const candidateCode =
423
+ typeof error?.code === "string"
424
+ ? error.code.slice(0, 128)
425
+ : "AUTOMATION_CENTER_RUNTIME_ACTION_FAILED";
426
+ const code = SAFE_RUNTIME_ERROR_CODES.has(candidateCode)
427
+ ? candidateCode
428
+ : "AUTOMATION_CENTER_RUNTIME_ACTION_FAILED";
429
+ return {
430
+ schema: AUTOMATION_CENTER_RUNTIME_ACTION_ERROR_SCHEMA,
431
+ schemaVersion: AUTOMATION_CENTER_RUNTIME_SCHEMA_VERSION,
432
+ authority: "cli",
433
+ ok: false,
434
+ occurrenceId:
435
+ typeof occurrenceId === "string" &&
436
+ OCCURRENCE_ID_PATTERN.test(occurrenceId)
437
+ ? occurrenceId
438
+ : null,
439
+ action: ACTION_SET.has(action) ? action : null,
440
+ error: {
441
+ code,
442
+ // Runtime error details can contain fences and internal scheduler state.
443
+ // Keep the IDE-facing error envelope intentionally minimal.
444
+ message: "Automation Center runtime action failed",
445
+ retryable: error?.retryable === true,
446
+ },
447
+ };
448
+ }