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,248 @@
1
+ import net from "node:net";
2
+ import { randomBytes } from "node:crypto";
3
+ import { createNdjsonReader } from "./background-session-transport.js";
4
+ import {
5
+ BACKGROUND_AGENT_KEEPER_ARM,
6
+ BACKGROUND_AGENT_KEEPER_ARMED,
7
+ BACKGROUND_AGENT_KEEPER_HELLO,
8
+ BACKGROUND_AGENT_KEEPER_PROTOCOL_VERSION,
9
+ BACKGROUND_AGENT_KEEPER_READY,
10
+ BACKGROUND_AGENT_KEEPER_RETIRE,
11
+ BACKGROUND_AGENT_KEEPER_RETIRED,
12
+ createBackgroundAgentKeeperMessage,
13
+ normalizeBackgroundAgentKeeperHello,
14
+ normalizeBackgroundAgentKeeperTurn,
15
+ resolveBackgroundAgentKeeperRetireTimeoutMs,
16
+ sameBackgroundAgentKeeperTurn,
17
+ } from "./background-agent-keeper-protocol.js";
18
+
19
+ const DEFAULT_CONNECT_TIMEOUT_MS = 30_000;
20
+ const DEFAULT_REQUEST_TIMEOUT_MS = 10_000;
21
+
22
+ function keeperError(message, code = "BACKGROUND_AGENT_KEEPER_UNAVAILABLE") {
23
+ const error = new Error(message);
24
+ error.code = code;
25
+ return error;
26
+ }
27
+
28
+ function writeMessage(socket, message) {
29
+ if (!socket || socket.destroyed) {
30
+ throw keeperError("background agent keeper channel is closed");
31
+ }
32
+ socket.write(`${JSON.stringify(message)}\n`);
33
+ }
34
+
35
+ function connectOnce(pipePath) {
36
+ return new Promise((resolve, reject) => {
37
+ const socket = net.createConnection(pipePath);
38
+ const onError = (error) => {
39
+ socket.destroy();
40
+ reject(error);
41
+ };
42
+ socket.once("error", onError);
43
+ socket.once("connect", () => {
44
+ socket.removeListener("error", onError);
45
+ resolve(socket);
46
+ });
47
+ });
48
+ }
49
+
50
+ async function connectWithDeadline(pipePath, timeoutMs) {
51
+ const deadline = Date.now() + timeoutMs;
52
+ let lastError = null;
53
+ while (Date.now() < deadline) {
54
+ try {
55
+ return await connectOnce(pipePath);
56
+ } catch (error) {
57
+ lastError = error;
58
+ await new Promise((resolve) => setTimeout(resolve, 25));
59
+ }
60
+ }
61
+ throw keeperError(
62
+ `timed out connecting to background agent keeper: ${lastError?.message || "unavailable"}`,
63
+ );
64
+ }
65
+
66
+ export async function connectBackgroundAgentKeeper(options = {}) {
67
+ const hello = normalizeBackgroundAgentKeeperHello(options);
68
+ const connectTimeoutMs = Math.max(
69
+ 1,
70
+ Number(options.connectTimeoutMs) || DEFAULT_CONNECT_TIMEOUT_MS,
71
+ );
72
+ const requestTimeoutMs = Math.max(
73
+ 1,
74
+ Number(options.requestTimeoutMs) || DEFAULT_REQUEST_TIMEOUT_MS,
75
+ );
76
+ const retireTimeoutMs = resolveBackgroundAgentKeeperRetireTimeoutMs(
77
+ options.retireTimeoutMs,
78
+ );
79
+ const socket = await connectWithDeadline(options.pipePath, connectTimeoutMs);
80
+ const pending = new Map();
81
+ let ready = false;
82
+ let closing = false;
83
+ let activeTurn = null;
84
+ let readyResolve;
85
+ let readyReject;
86
+ const readyPromise = new Promise((resolve, reject) => {
87
+ readyResolve = resolve;
88
+ readyReject = reject;
89
+ });
90
+
91
+ const failPending = (error) => {
92
+ readyReject(error);
93
+ for (const entry of pending.values()) {
94
+ clearTimeout(entry.timer);
95
+ entry.reject(error);
96
+ }
97
+ pending.clear();
98
+ };
99
+
100
+ socket.on(
101
+ "data",
102
+ createNdjsonReader(
103
+ (message) => {
104
+ if (
105
+ message?.protocolVersion !== BACKGROUND_AGENT_KEEPER_PROTOCOL_VERSION
106
+ ) {
107
+ socket.destroy(
108
+ keeperError("background agent keeper protocol mismatch"),
109
+ );
110
+ return;
111
+ }
112
+ if (!ready) {
113
+ if (
114
+ message.type !== BACKGROUND_AGENT_KEEPER_READY ||
115
+ message.id !== hello.id ||
116
+ message.workerGeneration !== hello.workerGeneration
117
+ ) {
118
+ socket.destroy(
119
+ keeperError("background agent keeper ready binding mismatch"),
120
+ );
121
+ return;
122
+ }
123
+ ready = true;
124
+ readyResolve();
125
+ return;
126
+ }
127
+ const entry = pending.get(message.requestId);
128
+ if (!entry) return;
129
+ if (message.type === "background-agent-keeper-error") {
130
+ pending.delete(message.requestId);
131
+ clearTimeout(entry.timer);
132
+ entry.reject(
133
+ keeperError(
134
+ message.message || "background agent keeper rejected request",
135
+ message.code || "BACKGROUND_AGENT_KEEPER_REJECTED",
136
+ ),
137
+ );
138
+ return;
139
+ }
140
+ if (message.type !== entry.expectedType) return;
141
+ if (!sameBackgroundAgentKeeperTurn(message, entry.turn)) {
142
+ socket.destroy(
143
+ keeperError("background agent keeper response binding mismatch"),
144
+ );
145
+ return;
146
+ }
147
+ pending.delete(message.requestId);
148
+ clearTimeout(entry.timer);
149
+ entry.resolve(message);
150
+ },
151
+ (error) => socket.destroy(error),
152
+ ),
153
+ );
154
+ socket.on("error", (error) => failPending(error));
155
+ socket.on("close", () => {
156
+ const error = keeperError("background agent keeper channel disconnected");
157
+ failPending(error);
158
+ if (!closing) options.onDisconnect?.(error, activeTurn);
159
+ });
160
+
161
+ writeMessage(
162
+ socket,
163
+ createBackgroundAgentKeeperMessage(BACKGROUND_AGENT_KEEPER_HELLO, hello),
164
+ );
165
+ const helloTimer = setTimeout(
166
+ () =>
167
+ socket.destroy(
168
+ keeperError("timed out waiting for background agent keeper ready"),
169
+ ),
170
+ requestTimeoutMs,
171
+ );
172
+ helloTimer.unref?.();
173
+ await readyPromise.finally(() => clearTimeout(helloTimer));
174
+
175
+ const request = (
176
+ type,
177
+ expectedType,
178
+ turnValue,
179
+ timeoutMs = requestTimeoutMs,
180
+ ) => {
181
+ const turn = normalizeBackgroundAgentKeeperTurn(turnValue);
182
+ const requestId = randomBytes(16).toString("hex");
183
+ return new Promise((resolve, reject) => {
184
+ const timer = setTimeout(() => {
185
+ pending.delete(requestId);
186
+ reject(
187
+ keeperError(
188
+ `timed out waiting for background agent keeper ${type} after ${timeoutMs}ms`,
189
+ ),
190
+ );
191
+ }, timeoutMs);
192
+ timer.unref?.();
193
+ pending.set(requestId, { expectedType, reject, resolve, timer, turn });
194
+ try {
195
+ writeMessage(
196
+ socket,
197
+ createBackgroundAgentKeeperMessage(type, { requestId, ...turn }),
198
+ );
199
+ } catch (error) {
200
+ pending.delete(requestId);
201
+ clearTimeout(timer);
202
+ reject(error);
203
+ }
204
+ });
205
+ };
206
+
207
+ return Object.freeze({
208
+ async arm(turn) {
209
+ const normalized = normalizeBackgroundAgentKeeperTurn(turn);
210
+ if (activeTurn) {
211
+ throw keeperError(
212
+ "background agent keeper is already armed",
213
+ "BACKGROUND_AGENT_KEEPER_BUSY",
214
+ );
215
+ }
216
+ await request(
217
+ BACKGROUND_AGENT_KEEPER_ARM,
218
+ BACKGROUND_AGENT_KEEPER_ARMED,
219
+ normalized,
220
+ );
221
+ activeTurn = normalized;
222
+ return normalized;
223
+ },
224
+ async retire(turn) {
225
+ const normalized = normalizeBackgroundAgentKeeperTurn(turn);
226
+ if (!sameBackgroundAgentKeeperTurn(normalized, activeTurn)) {
227
+ throw keeperError(
228
+ "background agent keeper retire binding mismatch",
229
+ "BACKGROUND_AGENT_KEEPER_BINDING_MISMATCH",
230
+ );
231
+ }
232
+ await request(
233
+ BACKGROUND_AGENT_KEEPER_RETIRE,
234
+ BACKGROUND_AGENT_KEEPER_RETIRED,
235
+ normalized,
236
+ retireTimeoutMs,
237
+ );
238
+ activeTurn = null;
239
+ return true;
240
+ },
241
+ close() {
242
+ if (closing) return;
243
+ closing = true;
244
+ socket.end();
245
+ },
246
+ activeTurn: () => activeTurn,
247
+ });
248
+ }
@@ -0,0 +1,147 @@
1
+ import { join } from "node:path";
2
+
3
+ export const BACKGROUND_AGENT_KEEPER_PROTOCOL_VERSION = 1;
4
+ export const BACKGROUND_AGENT_KEEPER_HELLO = "background-agent-keeper-hello";
5
+ export const BACKGROUND_AGENT_KEEPER_READY = "background-agent-keeper-ready";
6
+ export const BACKGROUND_AGENT_KEEPER_ARM = "background-agent-keeper-arm";
7
+ export const BACKGROUND_AGENT_KEEPER_ARMED = "background-agent-keeper-armed";
8
+ export const BACKGROUND_AGENT_KEEPER_RETIRE = "background-agent-keeper-retire";
9
+ export const BACKGROUND_AGENT_KEEPER_RETIRED =
10
+ "background-agent-keeper-retired";
11
+
12
+ // RETIRE is the only keeper request that performs destructive OS cleanup. Its
13
+ // deadline is deliberately independent from the short HELLO/ARM request
14
+ // deadline and is derived from every synchronous operation on the longest
15
+ // Windows path:
16
+ //
17
+ // 2 targets * (taskkill + WMIC + PowerShell) +
18
+ // 2 durable state-lock acquisitions + cleanup confirmation + scheduling
19
+ // margin = 70 seconds.
20
+ //
21
+ // Keeping these limits in the shared protocol contract prevents either side
22
+ // from silently reintroducing the old 10-second client / longer keeper race.
23
+ export const BACKGROUND_AGENT_KEEPER_CLEANUP_TARGET_LIMIT = 2;
24
+ export const BACKGROUND_AGENT_KEEPER_TASKKILL_TIMEOUT_MS = 10_000;
25
+ export const BACKGROUND_AGENT_KEEPER_WMIC_TIMEOUT_MS = 5_000;
26
+ export const BACKGROUND_AGENT_KEEPER_POWERSHELL_TIMEOUT_MS = 10_000;
27
+ export const BACKGROUND_AGENT_KEEPER_STATE_LOCK_TIMEOUT_MS = 5_000;
28
+ export const BACKGROUND_AGENT_KEEPER_CLEANUP_CONFIRM_TIMEOUT_MS = 2_000;
29
+ export const BACKGROUND_AGENT_KEEPER_RETIRE_TIMEOUT_MARGIN_MS = 8_000;
30
+ export const BACKGROUND_AGENT_KEEPER_RETIRE_TIMEOUT_MS =
31
+ BACKGROUND_AGENT_KEEPER_CLEANUP_TARGET_LIMIT *
32
+ (BACKGROUND_AGENT_KEEPER_TASKKILL_TIMEOUT_MS +
33
+ BACKGROUND_AGENT_KEEPER_WMIC_TIMEOUT_MS +
34
+ BACKGROUND_AGENT_KEEPER_POWERSHELL_TIMEOUT_MS) +
35
+ 2 * BACKGROUND_AGENT_KEEPER_STATE_LOCK_TIMEOUT_MS +
36
+ BACKGROUND_AGENT_KEEPER_CLEANUP_CONFIRM_TIMEOUT_MS +
37
+ BACKGROUND_AGENT_KEEPER_RETIRE_TIMEOUT_MARGIN_MS;
38
+
39
+ export function resolveBackgroundAgentKeeperRetireTimeoutMs(value) {
40
+ const requested = Number(value);
41
+ if (!Number.isFinite(requested) || requested <= 0) {
42
+ return BACKGROUND_AGENT_KEEPER_RETIRE_TIMEOUT_MS;
43
+ }
44
+ return Math.min(
45
+ BACKGROUND_AGENT_KEEPER_RETIRE_TIMEOUT_MS,
46
+ Math.max(1, Math.floor(requested)),
47
+ );
48
+ }
49
+
50
+ const SAFE_ID = /^[A-Za-z0-9_-]{1,256}$/u;
51
+ const SAFE_TOKEN = /^[a-f0-9]{64}$/u;
52
+
53
+ function requiredSafeString(value, label, pattern = SAFE_ID) {
54
+ const normalized = typeof value === "string" ? value.trim() : "";
55
+ if (!pattern.test(normalized)) {
56
+ throw new TypeError(`invalid background agent keeper ${label}`);
57
+ }
58
+ return normalized;
59
+ }
60
+
61
+ function requiredPositiveInteger(value, label) {
62
+ const normalized = Number(value);
63
+ if (!Number.isSafeInteger(normalized) || normalized < 1) {
64
+ throw new TypeError(`invalid background agent keeper ${label}`);
65
+ }
66
+ return normalized;
67
+ }
68
+
69
+ function requiredTimestamp(value, label) {
70
+ const normalized = Number(value);
71
+ if (!Number.isFinite(normalized) || normalized <= 0) {
72
+ throw new TypeError(`invalid background agent keeper ${label}`);
73
+ }
74
+ return normalized;
75
+ }
76
+
77
+ export function backgroundAgentKeeperPipePath(id, directory) {
78
+ const safeId = requiredSafeString(id, "id");
79
+ if (process.platform === "win32") {
80
+ return `\\\\.\\pipe\\cc-bg-keeper-${safeId}`;
81
+ }
82
+ return join(directory, `${safeId}.keeper.sock`);
83
+ }
84
+
85
+ export function normalizeBackgroundAgentKeeperAuthority(value = {}) {
86
+ return Object.freeze({
87
+ id: requiredSafeString(value.id, "id"),
88
+ workerGeneration: requiredSafeString(
89
+ value.workerGeneration,
90
+ "worker generation",
91
+ ),
92
+ });
93
+ }
94
+
95
+ export function normalizeBackgroundAgentKeeperHello(value = {}) {
96
+ return Object.freeze({
97
+ ...normalizeBackgroundAgentKeeperAuthority(value),
98
+ token: requiredSafeString(value.token, "token", SAFE_TOKEN),
99
+ workerPid: requiredPositiveInteger(value.workerPid, "worker pid"),
100
+ });
101
+ }
102
+
103
+ export function normalizeBackgroundAgentKeeperTurn(value = {}) {
104
+ return Object.freeze({
105
+ ...normalizeBackgroundAgentKeeperAuthority(value),
106
+ turnLaunchToken: requiredSafeString(
107
+ value.turnLaunchToken,
108
+ "turn launch token",
109
+ ),
110
+ attempt: requiredPositiveInteger(value.attempt, "turn attempt"),
111
+ agentPid: requiredPositiveInteger(value.agentPid, "agent pid"),
112
+ agentStartedAt: requiredTimestamp(
113
+ value.agentStartedAt,
114
+ "agent start anchor",
115
+ ),
116
+ agentRuntimePid: requiredPositiveInteger(
117
+ value.agentRuntimePid,
118
+ "agent runtime pid",
119
+ ),
120
+ agentRuntimeStartedAt: requiredTimestamp(
121
+ value.agentRuntimeStartedAt,
122
+ "agent runtime start anchor",
123
+ ),
124
+ });
125
+ }
126
+
127
+ export function sameBackgroundAgentKeeperTurn(left, right) {
128
+ let normalizedLeft;
129
+ let normalizedRight;
130
+ try {
131
+ normalizedLeft = normalizeBackgroundAgentKeeperTurn(left);
132
+ normalizedRight = normalizeBackgroundAgentKeeperTurn(right);
133
+ } catch {
134
+ return false;
135
+ }
136
+ return Object.keys(normalizedLeft).every(
137
+ (key) => normalizedLeft[key] === normalizedRight[key],
138
+ );
139
+ }
140
+
141
+ export function createBackgroundAgentKeeperMessage(type, payload = {}) {
142
+ return Object.freeze({
143
+ type,
144
+ protocolVersion: BACKGROUND_AGENT_KEEPER_PROTOCOL_VERSION,
145
+ ...payload,
146
+ });
147
+ }