chainlesschain 0.163.8 → 0.165.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. package/package.json +7 -4
  2. package/scripts/macos-mcp-launcher-build.mjs +317 -0
  3. package/scripts/macos-mcp-launcher-postinstall.sh +54 -0
  4. package/scripts/macos-mcp-launcher-preinstall.sh +61 -0
  5. package/src/assets/web-panel/.build-hash +1 -1
  6. package/src/assets/web-panel/assets/{AIOps-CavM7W3k.js → AIOps-CYxFDrcm.js} +1 -1
  7. package/src/assets/web-panel/assets/{ActionButton-CUvZGabQ.js → ActionButton-CPBtdiU2.js} +1 -1
  8. package/src/assets/web-panel/assets/{Analytics-DeBnWnbe.js → Analytics-Dayq7Dp7.js} +3 -3
  9. package/src/assets/web-panel/assets/{AppLayout-DbI5kxvd.js → AppLayout-6U7bPb2s.js} +4 -4
  10. package/src/assets/web-panel/assets/{Artifacts-D93bigKm.js → Artifacts-D2Iqg_3D.js} +1 -1
  11. package/src/assets/web-panel/assets/{Audit-CBNvfUZa.js → Audit-CdoOB7WV.js} +1 -1
  12. package/src/assets/web-panel/assets/{BackgroundAgents-CJLyh_YU.js → BackgroundAgents-DrnAVB8w.js} +1 -1
  13. package/src/assets/web-panel/assets/{Backup-D_0yoehD.js → Backup-CesMi5cy.js} +1 -1
  14. package/src/assets/web-panel/assets/{BaseInput-TJxmbObW.js → BaseInput-DaX9ptax.js} +1 -1
  15. package/src/assets/web-panel/assets/{Chat-CE0dto1q.js → Chat-OrwOPxDS.js} +5 -5
  16. package/src/assets/web-panel/assets/{ChatBubbleRenderer-CZ5-yYiD.js → ChatBubbleRenderer-CvPZFRxM.js} +1 -1
  17. package/src/assets/web-panel/assets/{Checkbox-Ck1RVIVo.js → Checkbox-DiHbcysC.js} +1 -1
  18. package/src/assets/web-panel/assets/{Codegen-qpoyf6DK.js → Codegen-CbgCkaBJ.js} +1 -1
  19. package/src/assets/web-panel/assets/{Col-DUyPWjIE.js → Col-Du5hgrh4.js} +1 -1
  20. package/src/assets/web-panel/assets/{Community-D_S1BemS.js → Community-DsPOBW-p.js} +1 -1
  21. package/src/assets/web-panel/assets/{Compact-BjxeK-Gc.js → Compact-BwHIFkNC.js} +1 -1
  22. package/src/assets/web-panel/assets/{Compliance-Dd3CEJsu.js → Compliance-BvrDQSgd.js} +1 -1
  23. package/src/assets/web-panel/assets/{Cowork-B4QG7-ad.js → Cowork-gwAE6arx.js} +3 -3
  24. package/src/assets/web-panel/assets/{Cron-BtZnids5.js → Cron-DW-0l4uF.js} +2 -2
  25. package/src/assets/web-panel/assets/{Crosschain-CHPfCBFD.js → Crosschain-j-NsLesB.js} +1 -1
  26. package/src/assets/web-panel/assets/{DID-DT8DCEOK.js → DID-CibVEBOI.js} +2 -2
  27. package/src/assets/web-panel/assets/{Dashboard-COQab5_U.js → Dashboard-W4z9vSfe.js} +2 -2
  28. package/src/assets/web-panel/assets/{Dropdown-BY1PsQuU.js → Dropdown-DAcrkKxG.js} +1 -1
  29. package/src/assets/web-panel/assets/{EmailListRenderer-CsuAuaq3.js → EmailListRenderer-6GXah-89.js} +1 -1
  30. package/src/assets/web-panel/assets/{FamilyGuardDashboard-BqpinD-j.js → FamilyGuardDashboard-TKDCq8Ku.js} +1 -1
  31. package/src/assets/web-panel/assets/{Federation-D0gkfQFv.js → Federation-BXBLlcNm.js} +1 -1
  32. package/src/assets/web-panel/assets/{FormItemContext-BqgE-axK.js → FormItemContext-BoJJBkG3.js} +1 -1
  33. package/src/assets/web-panel/assets/{GenericCardRenderer-D0hJ2KvC.js → GenericCardRenderer-okjsl46v.js} +1 -1
  34. package/src/assets/web-panel/assets/{Git-CmMB0uPY.js → Git-Rvs7i6nn.js} +2 -2
  35. package/src/assets/web-panel/assets/{Governance-BnVEI0Dk.js → Governance-CHSUxXXS.js} +1 -1
  36. package/src/assets/web-panel/assets/{Inference-YTAMihRP.js → Inference-V3BlfxsB.js} +1 -1
  37. package/src/assets/web-panel/assets/{KnowledgeGraph-0ax7VHop.js → KnowledgeGraph-C_NlD4aR.js} +1 -1
  38. package/src/assets/web-panel/assets/{Logs-B9TRcokL.js → Logs-Nn4LNxhA.js} +2 -2
  39. package/src/assets/web-panel/assets/MarkdownRenderer-SVAgNnkt.js +1 -0
  40. package/src/assets/web-panel/assets/{Marketplace-B6CSuD_H.js → Marketplace-DEmjFcg-.js} +1 -1
  41. package/src/assets/web-panel/assets/{McpTools-CjMXvOVU.js → McpTools-DlopXipI.js} +3 -3
  42. package/src/assets/web-panel/assets/{Memory-CXRF71U3.js → Memory-BG3ynX60.js} +2 -2
  43. package/src/assets/web-panel/assets/{MobileBridge-DQgNp_oS.js → MobileBridge-DeRzWOfT.js} +1 -1
  44. package/src/assets/web-panel/assets/{MobileProjects-DlPwcCbq.js → MobileProjects-Tyd3o2A0.js} +1 -1
  45. package/src/assets/web-panel/assets/{Mtc-6hDTRPe1.js → Mtc-BoPbOv1C.js} +2 -2
  46. package/src/assets/web-panel/assets/{MtcAudit-BlVHU1DS.js → MtcAudit-un-rTHp7.js} +2 -2
  47. package/src/assets/web-panel/assets/{Multisig-DP9pzEbV.js → Multisig-Ds0oveEB.js} +3 -3
  48. package/src/assets/web-panel/assets/{NLProgramming-Djorh8EV.js → NLProgramming-D09JI-yY.js} +1 -1
  49. package/src/assets/web-panel/assets/{Notes-oLZ-JkUg.js → Notes-DTRhiKJn.js} +4 -4
  50. package/src/assets/web-panel/assets/{NotificationSettings-Cg288VH3.js → NotificationSettings-BAnnNCim.js} +1 -1
  51. package/src/assets/web-panel/assets/OrderTableRenderer-Yr-1fSYi.js +1 -0
  52. package/src/assets/web-panel/assets/{Organization-CBdo-bHs.js → Organization-S9EAolpj.js} +4 -4
  53. package/src/assets/web-panel/assets/{Overflow-qZdnVumx.js → Overflow-CqcLKqJ8.js} +1 -1
  54. package/src/assets/web-panel/assets/{P2P-D4kNfGNQ.js → P2P-Dw0F9EcU.js} +2 -2
  55. package/src/assets/web-panel/assets/{PdhVaultBrowser-DnlMemM7.js → PdhVaultBrowser-BDRwUevN.js} +5 -5
  56. package/src/assets/web-panel/assets/{Permissions-DHucHFBJ.js → Permissions-D3_c3nKB.js} +4 -4
  57. package/src/assets/web-panel/assets/{PersonalDataHub-BovlOIPR.js → PersonalDataHub-CxdMV98x.js} +4 -4
  58. package/src/assets/web-panel/assets/{Pipeline-Deru3CQY.js → Pipeline-CgjNQFLI.js} +1 -1
  59. package/src/assets/web-panel/assets/{Privacy-Bq5oTTbU.js → Privacy-BHghIIht.js} +1 -1
  60. package/src/assets/web-panel/assets/{ProjectInit-BfzxVWAz.js → ProjectInit-De6pqaKM.js} +2 -2
  61. package/src/assets/web-panel/assets/{ProjectSettings-CKC6XBtH.js → ProjectSettings-Bg4ZkNYQ.js} +2 -2
  62. package/src/assets/web-panel/assets/Projects-CP8vPvzs.js +1 -0
  63. package/src/assets/web-panel/assets/{Providers-C_jx4TWX.js → Providers-CUnHbNf-.js} +1 -1
  64. package/src/assets/web-panel/assets/{QrScannerModal-BdIHeVGC.js → QrScannerModal-DA2f3Wts.js} +1 -1
  65. package/src/assets/web-panel/assets/{QuickAsk-BwZwAcPD.js → QuickAsk-C1FeHDqp.js} +1 -1
  66. package/src/assets/web-panel/assets/{Recommend-BNTt0L-m.js → Recommend-B5guaUMN.js} +1 -1
  67. package/src/assets/web-panel/assets/RemoteSession-PDADSds3.js +5 -0
  68. package/src/assets/web-panel/assets/{Reputation-D6VpG32B.js → Reputation-eTlRhgvK.js} +1 -1
  69. package/src/assets/web-panel/assets/{Row-D_74OvQQ.js → Row-D7AqSGY0.js} +1 -1
  70. package/src/assets/web-panel/assets/{RssFeed-BTr0a-BQ.js → RssFeed-JiuLm4Ja.js} +3 -3
  71. package/src/assets/web-panel/assets/{Search-C3MCFoNU.js → Search-CwruahW3.js} +1 -1
  72. package/src/assets/web-panel/assets/{Security-CqW9aJ6s.js → Security-CdhqaR0b.js} +4 -4
  73. package/src/assets/web-panel/assets/{Services-Cw5GNaHF.js → Services-CU0ZIlcT.js} +2 -2
  74. package/src/assets/web-panel/assets/{Skeleton-DZps5qeY.js → Skeleton-CtduPfAb.js} +1 -1
  75. package/src/assets/web-panel/assets/{Skills-C6NQ1znT.js → Skills-CROXm6AY.js} +1 -1
  76. package/src/assets/web-panel/assets/{Sla-DFP8G2Sh.js → Sla-DiZiABFD.js} +1 -1
  77. package/src/assets/web-panel/assets/{SpeechSettings-ESt6MB6v.js → SpeechSettings-B5pLcXUw.js} +1 -1
  78. package/src/assets/web-panel/assets/{SyncSettings-BHnN98aM.js → SyncSettings-DBX6J1Oe.js} +2 -2
  79. package/src/assets/web-panel/assets/{Tasks-NiSCaOf-.js → Tasks-BLyRJd3-.js} +1 -1
  80. package/src/assets/web-panel/assets/{Templates-DsKFhW2C.js → Templates-BKa5qzmk.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tenant-CQ0E0ze5.js → Tenant-DnD3a4M6.js} +1 -1
  82. package/src/assets/web-panel/assets/{Terminal-D_rBu_by.js → Terminal-DEitQeTb.js} +2 -2
  83. package/src/assets/web-panel/assets/{TimelineRenderer-D3Vm4Po4.js → TimelineRenderer-CjHggTDq.js} +1 -1
  84. package/src/assets/web-panel/assets/{Tokens-DNTxRH6q.js → Tokens-CsGT7sfl.js} +1 -1
  85. package/src/assets/web-panel/assets/{Trigger-Dgprz1ms.js → Trigger-yr4rFDrW.js} +1 -1
  86. package/src/assets/web-panel/assets/{Trust-B2rUnVBD.js → Trust-CLvu1Sjp.js} +1 -1
  87. package/src/assets/web-panel/assets/{UkeySign-DEGQNc6_.js → UkeySign-B0m7yUP8.js} +1 -1
  88. package/src/assets/web-panel/assets/{VideoEditing-jlsAx3Eh.js → VideoEditing-C0VvP4lc.js} +1 -1
  89. package/src/assets/web-panel/assets/{Wallet-8jQih1ij.js → Wallet-kllBAG1M.js} +4 -4
  90. package/src/assets/web-panel/assets/{WebAuthn-XLeO6xIB.js → WebAuthn-C54UQNLx.js} +3 -3
  91. package/src/assets/web-panel/assets/{WorkflowEditor-De_dgDAG.js → WorkflowEditor-B7y8qSvU.js} +1 -1
  92. package/src/assets/web-panel/assets/{chat-CI19R_Sk.js → chat-DRzTh8CJ.js} +1 -1
  93. package/src/assets/web-panel/assets/{colors-DsYTOYN3.js → colors-BSMwSnCx.js} +1 -1
  94. package/src/assets/web-panel/assets/{compact-item-CM3-t_Qr.js → compact-item-BTg602H5.js} +1 -1
  95. package/src/assets/web-panel/assets/{createContext-BjxlBRZv.js → createContext-B6EGsdvp.js} +1 -1
  96. package/src/assets/web-panel/assets/devWarning-Dol8jLEP.js +1 -0
  97. package/src/assets/web-panel/assets/{hasIn-RDaWX_4i.js → hasIn-DDKqJ8RD.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-nAH87mQP.js → index-323Hhxxt.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-DIUnNOjG.js → index-BICn3Qh1.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DyIWssPC.js → index-BMuGd2--.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-DX7tuWVJ.js → index-BRqt4fO-.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-Cd3euP_4.js → index-BVTAl5N2.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-Cpqm1qfU.js → index-BsR7Y2NG.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-DcPFB8qJ.js → index-Bx044qDj.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-Cd9OJhHG.js → index-C1GFfuqN.js} +1 -1
  106. package/src/assets/web-panel/assets/index-C3QX5tOl.js +1 -0
  107. package/src/assets/web-panel/assets/{index-B-Z8eFUJ.js → index-C66NpWy5.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BlT2VAEK.js → index-CDTvsX8t.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-Dsij_KsN.js → index-CGNklbP6.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-C4gkzxkw.js → index-CHfLYwcW.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-D6sm5-Xq.js → index-CNxg61YP.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-C0yx-jtQ.js → index-CQlHFN_g.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-CjTrRt13.js → index-CUEU48o1.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-B7WBt_4T.js → index-CWGax2QW.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-IeiL9RKc.js → index-C_JzIXUq.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-CnHH7bnD.js → index-Cf23wVMs.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-BKJr-TZp.js → index-CmAInUkX.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-CiECJi-Q.js → index-CmAubjDi.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-BCnZyIMA.js → index-Co7oM1qr.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-Drlnwr8F.js → index-CwPUZbMI.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-9R6BxAr0.js → index-D1naNj4U.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-BGqqJfL0.js → index-D5CsBShd.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-Bi46Xu4u.js → index-DBT3YeQ9.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-DXXtGMUJ.js → index-DLdrHhML.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-B0PMlbMs.js → index-Dc77VR3H.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-D0zcy54x.js → index-Dfv2lKu3.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-BN6UPD2E.js → index-DiW0sDkz.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-Dxge-xWl.js → index-DpTHIRfZ.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-CyOGN6a5.js → index-DqFXGzzC.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-B9O9YyWE.js → index-XFe-1twF.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-BHNYPO0b.js → index-p2HYn89m.js} +3 -3
  132. package/src/assets/web-panel/assets/{index-CVQMeiwH.js → index-pqfux8vZ.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-pPL66J85.js → index-rjzk9z1Q.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-DoQA0-52.js → index-th2ihDc0.js} +1 -1
  135. package/src/assets/web-panel/assets/{index-B5REnKt8.js → index-u2YVld9W.js} +1 -1
  136. package/src/assets/web-panel/assets/index-xYybvEic.js +1 -0
  137. package/src/assets/web-panel/assets/{initDefaultProps-BTL88of4.js → initDefaultProps-C3Djh9fa.js} +1 -1
  138. package/src/assets/web-panel/assets/{motion-BUB2pXwB.js → motion-BzqFmbSe.js} +1 -1
  139. package/src/assets/web-panel/assets/{move-egCkkOMm.js → move-DJo_FFaW.js} +1 -1
  140. package/src/assets/web-panel/assets/{mtc-parser-DAWhZC8c.js → mtc-parser-_tlTiBvk.js} +1 -1
  141. package/src/assets/web-panel/assets/{omit-CvOxe_6d.js → omit-CB2ZyxUg.js} +1 -1
  142. package/src/assets/web-panel/assets/{pickAttrs-DZUSLZ5Z.js → pickAttrs-DZwIFD4u.js} +1 -1
  143. package/src/assets/web-panel/assets/{placementArrow-BERxGNMY.js → placementArrow-DxZY0dgk.js} +1 -1
  144. package/src/assets/web-panel/assets/{responsiveObserve-DZuDfZ9n.js → responsiveObserve-CzzGt7GL.js} +1 -1
  145. package/src/assets/web-panel/assets/{slide-DO756sgI.js → slide-BaIK52yz.js} +1 -1
  146. package/src/assets/web-panel/assets/{statusUtils-BRQlIz28.js → statusUtils-3-FHu9_M.js} +1 -1
  147. package/src/assets/web-panel/assets/{styleChecker-DCSfdybl.js → styleChecker-BkRT68fK.js} +1 -1
  148. package/src/assets/web-panel/assets/{useFlexGapSupport-LD8dWVve.js → useFlexGapSupport-DHYwKS-s.js} +1 -1
  149. package/src/assets/web-panel/assets/{useFs-BX9uW2LK.js → useFs-DVVUhV8p.js} +1 -1
  150. package/src/assets/web-panel/assets/{usePersonalDataHub-BPSlPuHU.js → usePersonalDataHub-CkrFKAzQ.js} +1 -1
  151. package/src/assets/web-panel/assets/{vnode-BmOILC9V.js → vnode-BuBLFz0c.js} +1 -1
  152. package/src/assets/web-panel/assets/{zoom-1iKowKGg.js → zoom-kpm6LtXU.js} +1 -1
  153. package/src/assets/web-panel/index.html +1 -1
  154. package/src/command-help-index.json +3 -3
  155. package/src/commands/cowork.js +418 -41
  156. package/src/commands/permissions.js +240 -16
  157. package/src/commands/plugin.js +1293 -56
  158. package/src/commands/session-location.js +276 -0
  159. package/src/commands/session.js +2 -0
  160. package/src/data/changelog.json +28 -2
  161. package/src/gateways/ws/action-protocol.js +316 -17
  162. package/src/gateways/ws/message-dispatcher.js +30 -0
  163. package/src/gateways/ws/remote-session-protocol.js +565 -35
  164. package/src/gateways/ws/ws-agent-handler.js +12 -0
  165. package/src/gateways/ws/ws-approval-gate.js +5 -0
  166. package/src/gateways/ws/ws-server.js +510 -50
  167. package/src/harness/jsonl-session-store.js +341 -24
  168. package/src/harness/mcp-client.js +8 -1
  169. package/src/harness/remote-session-audit.js +2 -0
  170. package/src/harness/remote-session-crypto.js +929 -21
  171. package/src/harness/remote-session-registry.js +945 -24
  172. package/src/harness/session-list-index.js +233 -14
  173. package/src/lib/agent-authority.js +6 -0
  174. package/src/lib/auto-mode-config.js +98 -3
  175. package/src/lib/background-agent-keeper-client.js +248 -0
  176. package/src/lib/background-agent-keeper-protocol.js +291 -0
  177. package/src/lib/background-agent-supervisor.js +1357 -85
  178. package/src/lib/background-interaction-resolver.js +12 -0
  179. package/src/lib/background-session-transport.js +23 -6
  180. package/src/lib/background-turn-bootstrap-protocol.js +190 -0
  181. package/src/lib/cowork-workflow.js +1188 -76
  182. package/src/lib/delivery-production-adapter.js +38 -2
  183. package/src/lib/dynamic-workflow-facade.js +1736 -0
  184. package/src/lib/execution-location-contract.js +551 -0
  185. package/src/lib/execution-location-runtime.js +130 -0
  186. package/src/lib/ide-context.js +94 -6
  187. package/src/lib/mcp-stdio-package-materialization.js +166 -14
  188. package/src/lib/packer/pkg-config-generator.js +2 -0
  189. package/src/lib/permission-authority.js +77 -0
  190. package/src/lib/permission-side-effect-center.js +495 -0
  191. package/src/lib/plugin-runtime/install.js +514 -13
  192. package/src/lib/plugin-runtime/marketplace-artifact-readback.js +900 -0
  193. package/src/lib/plugin-runtime/marketplace-catalog.js +1181 -0
  194. package/src/lib/plugin-runtime/marketplace-impact.js +408 -0
  195. package/src/lib/plugin-runtime/marketplace-remote-artifacts.js +1567 -0
  196. package/src/lib/plugin-security.js +60 -3
  197. package/src/lib/process-execution-broker/index.js +1095 -57
  198. package/src/lib/process-execution-broker/linux-bwrap-descriptor-launch.js +375 -0
  199. package/src/lib/process-execution-broker/linux-generic-bwrap-runtime.js +90 -16
  200. package/src/lib/process-execution-broker/linux-generic-bwrap.js +159 -18
  201. package/src/lib/process-execution-broker/macos-mcp-launcher-contract.js +278 -0
  202. package/src/lib/process-execution-broker/macos-mcp-launcher-protocol.json +23 -0
  203. package/src/lib/process-execution-broker/macos-mcp-launcher.c +1497 -0
  204. package/src/lib/process-execution-broker/mcp-fd-entry-bootstrap.js +37 -0
  205. package/src/lib/process-execution-broker/platform-sandbox.js +2330 -279
  206. package/src/lib/process-execution-broker/windows-sandbox-helper.dll +0 -0
  207. package/src/lib/process-execution-broker/windows-sandbox-helper.exe +0 -0
  208. package/src/lib/process-execution-broker/windows-sandbox.cs +50 -4
  209. package/src/lib/public-ide-capability-manifest.js +3 -0
  210. package/src/lib/remote-approval-bridge.js +777 -34
  211. package/src/lib/remote-control.js +2 -0
  212. package/src/lib/remote-membership-authority.js +632 -0
  213. package/src/lib/remote-membership-coordinator.js +2973 -0
  214. package/src/lib/remote-membership-host-store.js +1799 -0
  215. package/src/lib/runtime-provenance-ledger.js +171 -46
  216. package/src/lib/scoped-permission-store.js +369 -0
  217. package/src/lib/session-anti-rollback-anchor.js +262 -5
  218. package/src/lib/shell-approval.js +169 -6
  219. package/src/lib/sub-agent-context.js +4 -0
  220. package/src/lib/with-file-lock.js +73 -38
  221. package/src/lib/workflow-definition-contract.js +149 -0
  222. package/src/repl/agent-repl.js +111 -36
  223. package/src/repl/chat-repl.js +2 -0
  224. package/src/repl/clipboard-image.js +735 -16
  225. package/src/repl/ide-status.js +1 -1
  226. package/src/repl/prompt-interactions.js +59 -6
  227. package/src/repl/remote-approval.js +29 -7
  228. package/src/runtime/agent-core.js +1182 -155
  229. package/src/runtime/headless-runner.js +52 -30
  230. package/src/runtime/headless-stream.js +51 -28
  231. package/src/workers/background-agent-keeper.js +689 -0
  232. package/src/workers/background-agent-worker.js +365 -13
  233. package/src/workers/background-turn-bootstrap.js +170 -0
  234. package/src/assets/web-panel/assets/MarkdownRenderer-yySN5YNM.js +0 -1
  235. package/src/assets/web-panel/assets/OrderTableRenderer-Bb1O3Ofr.js +0 -1
  236. package/src/assets/web-panel/assets/Projects-CMolGhae.js +0 -1
  237. package/src/assets/web-panel/assets/RemoteSession-Biyn2-Ro.js +0 -5
  238. package/src/assets/web-panel/assets/devWarning-S1ld2LwU.js +0 -1
  239. package/src/assets/web-panel/assets/index-Drz6yq0m.js +0 -1
  240. package/src/assets/web-panel/assets/index-uWiUs7S_.js +0 -1
@@ -0,0 +1,291 @@
1
+ import { createHash } from "node:crypto";
2
+ import { lstatSync, mkdirSync, rmdirSync } from "node:fs";
3
+ import { posix } from "node:path";
4
+
5
+ export const BACKGROUND_AGENT_KEEPER_PROTOCOL_VERSION = 1;
6
+ export const BACKGROUND_AGENT_KEEPER_HELLO = "background-agent-keeper-hello";
7
+ export const BACKGROUND_AGENT_KEEPER_READY = "background-agent-keeper-ready";
8
+ export const BACKGROUND_AGENT_KEEPER_ARM = "background-agent-keeper-arm";
9
+ export const BACKGROUND_AGENT_KEEPER_ARMED = "background-agent-keeper-armed";
10
+ export const BACKGROUND_AGENT_KEEPER_RETIRE = "background-agent-keeper-retire";
11
+ export const BACKGROUND_AGENT_KEEPER_RETIRED =
12
+ "background-agent-keeper-retired";
13
+
14
+ // RETIRE is the only keeper request that performs destructive OS cleanup. Its
15
+ // deadline is deliberately independent from the short HELLO/ARM request
16
+ // deadline and is derived from every synchronous operation on the longest
17
+ // Windows path:
18
+ //
19
+ // 2 targets * (strict identity + taskkill + cleanup confirmation identity) +
20
+ // 2 cleanup-critical persistence retry windows + cleanup confirmation +
21
+ // scheduling margin = 120 seconds.
22
+ //
23
+ // Keeping these limits in the shared protocol contract prevents either side
24
+ // from silently reintroducing the old 10-second client / longer keeper race.
25
+ export const BACKGROUND_AGENT_KEEPER_CLEANUP_TARGET_LIMIT = 2;
26
+ export const BACKGROUND_AGENT_KEEPER_TASKKILL_TIMEOUT_MS = 10_000;
27
+ export const BACKGROUND_AGENT_KEEPER_WMIC_TIMEOUT_MS = 5_000;
28
+ export const BACKGROUND_AGENT_KEEPER_POWERSHELL_TIMEOUT_MS = 10_000;
29
+ export const BACKGROUND_AGENT_KEEPER_IDENTITY_PROBE_TIMEOUT_MS =
30
+ BACKGROUND_AGENT_KEEPER_WMIC_TIMEOUT_MS +
31
+ BACKGROUND_AGENT_KEEPER_POWERSHELL_TIMEOUT_MS;
32
+ export const BACKGROUND_AGENT_KEEPER_STATE_LOCK_TIMEOUT_MS = 5_000;
33
+ export const BACKGROUND_AGENT_KEEPER_PERSIST_RETRY_TIMEOUT_MS =
34
+ 3 * BACKGROUND_AGENT_KEEPER_STATE_LOCK_TIMEOUT_MS;
35
+ export const BACKGROUND_AGENT_KEEPER_CLEANUP_CONFIRM_TIMEOUT_MS = 2_000;
36
+ export const BACKGROUND_AGENT_KEEPER_RETIRE_TIMEOUT_MARGIN_MS = 8_000;
37
+ export const BACKGROUND_AGENT_KEEPER_RETIRE_TIMEOUT_MS =
38
+ BACKGROUND_AGENT_KEEPER_CLEANUP_TARGET_LIMIT *
39
+ (BACKGROUND_AGENT_KEEPER_TASKKILL_TIMEOUT_MS +
40
+ 2 * BACKGROUND_AGENT_KEEPER_IDENTITY_PROBE_TIMEOUT_MS) +
41
+ 2 * BACKGROUND_AGENT_KEEPER_PERSIST_RETRY_TIMEOUT_MS +
42
+ BACKGROUND_AGENT_KEEPER_CLEANUP_CONFIRM_TIMEOUT_MS +
43
+ BACKGROUND_AGENT_KEEPER_RETIRE_TIMEOUT_MARGIN_MS;
44
+
45
+ export function resolveBackgroundAgentKeeperRetireTimeoutMs(value) {
46
+ const requested = Number(value);
47
+ if (!Number.isFinite(requested) || requested <= 0) {
48
+ return BACKGROUND_AGENT_KEEPER_RETIRE_TIMEOUT_MS;
49
+ }
50
+ return Math.min(
51
+ BACKGROUND_AGENT_KEEPER_RETIRE_TIMEOUT_MS,
52
+ Math.max(1, Math.floor(requested)),
53
+ );
54
+ }
55
+
56
+ const SAFE_ID = /^[A-Za-z0-9_-]{1,256}$/u;
57
+ const SAFE_TOKEN = /^[a-f0-9]{64}$/u;
58
+ const POSIX_LOCAL_PIPE_DIRECTORY = /^cc-bg[ks]-[a-f0-9]{24}$/u;
59
+ const POSIX_LOCAL_PIPE_SOCKET = /^[a-f0-9]{32}\.sock$/u;
60
+
61
+ // Darwin's sockaddr_un.sun_path has 104 bytes including the trailing NUL.
62
+ // Linux allows a few more bytes, but the conservative cross-platform ceiling
63
+ // prevents a long state directory from being silently truncated into the same
64
+ // endpoint as a concurrent keeper.
65
+ export const POSIX_KEEPER_SOCKET_PATH_MAX_BYTES = 103;
66
+
67
+ function requiredSafeString(value, label, pattern = SAFE_ID) {
68
+ const normalized = typeof value === "string" ? value.trim() : "";
69
+ if (!pattern.test(normalized)) {
70
+ throw new TypeError(`invalid background agent keeper ${label}`);
71
+ }
72
+ return normalized;
73
+ }
74
+
75
+ function requiredPositiveInteger(value, label) {
76
+ const normalized = Number(value);
77
+ if (!Number.isSafeInteger(normalized) || normalized < 1) {
78
+ throw new TypeError(`invalid background agent keeper ${label}`);
79
+ }
80
+ return normalized;
81
+ }
82
+
83
+ function requiredTimestamp(value, label) {
84
+ const normalized = Number(value);
85
+ if (!Number.isFinite(normalized) || normalized <= 0) {
86
+ throw new TypeError(`invalid background agent keeper ${label}`);
87
+ }
88
+ return normalized;
89
+ }
90
+
91
+ function digestKeeperPath(value, length) {
92
+ return createHash("sha256").update(value).digest("hex").slice(0, length);
93
+ }
94
+
95
+ function requiredPosixDirectory(value, label) {
96
+ const normalized = typeof value === "string" ? value.trim() : "";
97
+ if (!normalized || normalized.includes("\0")) {
98
+ throw new TypeError(`invalid background agent keeper ${label}`);
99
+ }
100
+ return posix.resolve(normalized.replaceAll("\\", "/"));
101
+ }
102
+
103
+ function backgroundAgentPosixPipePath(
104
+ id,
105
+ directory,
106
+ options,
107
+ { candidateSuffix, fallbackPrefix, tooLongMessage },
108
+ ) {
109
+ const safeId = requiredSafeString(id, "id");
110
+ const stateDirectory = requiredPosixDirectory(directory, "state directory");
111
+ const candidate = posix.join(stateDirectory, `${safeId}${candidateSuffix}`);
112
+ if (
113
+ Buffer.byteLength(candidate, "utf8") <= POSIX_KEEPER_SOCKET_PATH_MAX_BYTES
114
+ ) {
115
+ return candidate;
116
+ }
117
+
118
+ // Keep the endpoint inside a private, state-root-specific namespace under
119
+ // the short POSIX /tmp alias. The full directory and id remain collision
120
+ // inputs even though neither long value appears in sockaddr_un.sun_path.
121
+ const uid =
122
+ options.uid ??
123
+ (typeof process.getuid === "function" ? process.getuid() : "unknown");
124
+ const shortTempDirectory = requiredPosixDirectory(
125
+ options.tempDirectory || "/tmp",
126
+ "short temp directory",
127
+ );
128
+ const namespace = digestKeeperPath(`${uid}\0${stateDirectory}`, 24);
129
+ const socketId = digestKeeperPath(safeId, 32);
130
+ const fallback = posix.join(
131
+ shortTempDirectory,
132
+ `${fallbackPrefix}-${namespace}`,
133
+ `${socketId}.sock`,
134
+ );
135
+ if (
136
+ Buffer.byteLength(fallback, "utf8") > POSIX_KEEPER_SOCKET_PATH_MAX_BYTES
137
+ ) {
138
+ throw new Error(tooLongMessage);
139
+ }
140
+ return fallback;
141
+ }
142
+
143
+ export function backgroundAgentKeeperPipePath(id, directory, options = {}) {
144
+ const safeId = requiredSafeString(id, "id");
145
+ const platform = options.platform || process.platform;
146
+ if (platform === "win32") {
147
+ return `\\\\.\\pipe\\cc-bg-keeper-${safeId}`;
148
+ }
149
+ return backgroundAgentPosixPipePath(id, directory, options, {
150
+ candidateSuffix: ".keeper.sock",
151
+ fallbackPrefix: "cc-bgk",
152
+ tooLongMessage: "background agent keeper fallback socket path is too long",
153
+ });
154
+ }
155
+
156
+ export function backgroundAgentSessionPipePath(id, directory, options = {}) {
157
+ const safeId = requiredSafeString(id, "id");
158
+ const platform = options.platform || process.platform;
159
+ if (platform === "win32") {
160
+ return `\\\\.\\pipe\\cc-bg-${safeId}`;
161
+ }
162
+ return backgroundAgentPosixPipePath(id, directory, options, {
163
+ candidateSuffix: ".sock",
164
+ fallbackPrefix: "cc-bgs",
165
+ tooLongMessage: "background agent session fallback socket path is too long",
166
+ });
167
+ }
168
+
169
+ function fallbackLocalPipeDirectory(pipePath) {
170
+ const normalized = posix.resolve(
171
+ String(pipePath || "").replaceAll("\\", "/"),
172
+ );
173
+ const directory = posix.dirname(normalized);
174
+ return POSIX_LOCAL_PIPE_DIRECTORY.test(posix.basename(directory)) &&
175
+ POSIX_LOCAL_PIPE_SOCKET.test(posix.basename(normalized))
176
+ ? directory
177
+ : null;
178
+ }
179
+
180
+ export function prepareBackgroundAgentLocalPipePath(
181
+ pipePath,
182
+ { platform = process.platform } = {},
183
+ ) {
184
+ if (platform === "win32") return pipePath;
185
+ const directory = fallbackLocalPipeDirectory(pipePath);
186
+ if (!directory) return pipePath;
187
+ try {
188
+ mkdirSync(directory, { mode: 0o700 });
189
+ } catch (error) {
190
+ if (error?.code !== "EEXIST") throw error;
191
+ }
192
+ const stat = lstatSync(directory);
193
+ const uid = typeof process.getuid === "function" ? process.getuid() : null;
194
+ if (
195
+ !stat.isDirectory() ||
196
+ stat.isSymbolicLink() ||
197
+ (uid !== null && stat.uid !== uid) ||
198
+ (stat.mode & 0o077) !== 0
199
+ ) {
200
+ throw new Error("background agent socket directory is not private");
201
+ }
202
+ return pipePath;
203
+ }
204
+
205
+ export function cleanupBackgroundAgentLocalPipeDirectory(
206
+ pipePath,
207
+ { platform = process.platform } = {},
208
+ ) {
209
+ if (platform === "win32") return false;
210
+ const directory = fallbackLocalPipeDirectory(pipePath);
211
+ if (!directory) return false;
212
+ try {
213
+ rmdirSync(directory);
214
+ return true;
215
+ } catch (error) {
216
+ if (error?.code === "ENOENT" || error?.code === "ENOTEMPTY") return false;
217
+ throw error;
218
+ }
219
+ }
220
+
221
+ export function prepareBackgroundAgentKeeperPipePath(pipePath, options) {
222
+ return prepareBackgroundAgentLocalPipePath(pipePath, options);
223
+ }
224
+
225
+ export function cleanupBackgroundAgentKeeperPipeDirectory(pipePath, options) {
226
+ return cleanupBackgroundAgentLocalPipeDirectory(pipePath, options);
227
+ }
228
+
229
+ export function normalizeBackgroundAgentKeeperAuthority(value = {}) {
230
+ return Object.freeze({
231
+ id: requiredSafeString(value.id, "id"),
232
+ workerGeneration: requiredSafeString(
233
+ value.workerGeneration,
234
+ "worker generation",
235
+ ),
236
+ });
237
+ }
238
+
239
+ export function normalizeBackgroundAgentKeeperHello(value = {}) {
240
+ return Object.freeze({
241
+ ...normalizeBackgroundAgentKeeperAuthority(value),
242
+ token: requiredSafeString(value.token, "token", SAFE_TOKEN),
243
+ workerPid: requiredPositiveInteger(value.workerPid, "worker pid"),
244
+ });
245
+ }
246
+
247
+ export function normalizeBackgroundAgentKeeperTurn(value = {}) {
248
+ return Object.freeze({
249
+ ...normalizeBackgroundAgentKeeperAuthority(value),
250
+ turnLaunchToken: requiredSafeString(
251
+ value.turnLaunchToken,
252
+ "turn launch token",
253
+ ),
254
+ attempt: requiredPositiveInteger(value.attempt, "turn attempt"),
255
+ agentPid: requiredPositiveInteger(value.agentPid, "agent pid"),
256
+ agentStartedAt: requiredTimestamp(
257
+ value.agentStartedAt,
258
+ "agent start anchor",
259
+ ),
260
+ agentRuntimePid: requiredPositiveInteger(
261
+ value.agentRuntimePid,
262
+ "agent runtime pid",
263
+ ),
264
+ agentRuntimeStartedAt: requiredTimestamp(
265
+ value.agentRuntimeStartedAt,
266
+ "agent runtime start anchor",
267
+ ),
268
+ });
269
+ }
270
+
271
+ export function sameBackgroundAgentKeeperTurn(left, right) {
272
+ let normalizedLeft;
273
+ let normalizedRight;
274
+ try {
275
+ normalizedLeft = normalizeBackgroundAgentKeeperTurn(left);
276
+ normalizedRight = normalizeBackgroundAgentKeeperTurn(right);
277
+ } catch {
278
+ return false;
279
+ }
280
+ return Object.keys(normalizedLeft).every(
281
+ (key) => normalizedLeft[key] === normalizedRight[key],
282
+ );
283
+ }
284
+
285
+ export function createBackgroundAgentKeeperMessage(type, payload = {}) {
286
+ return Object.freeze({
287
+ type,
288
+ protocolVersion: BACKGROUND_AGENT_KEEPER_PROTOCOL_VERSION,
289
+ ...payload,
290
+ });
291
+ }