chainlesschain 0.162.180 → 0.162.182

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 (263) hide show
  1. package/package.json +7 -3
  2. package/scripts/build-windows-sandbox-helper.ps1 +163 -0
  3. package/src/assets/web-panel/.build-hash +1 -1
  4. package/src/assets/web-panel/assets/{AIOps-D_TIL54O.js → AIOps-DzZ5_xoj.js} +1 -1
  5. package/src/assets/web-panel/assets/{ActionButton-eQwy9r-f.js → ActionButton-DeLXddIg.js} +1 -1
  6. package/src/assets/web-panel/assets/{Analytics-D2eNuDgT.js → Analytics-rvDCmet1.js} +3 -3
  7. package/src/assets/web-panel/assets/{AppLayout-CFhwOFsf.js → AppLayout-Yt6QVDnp.js} +5 -5
  8. package/src/assets/web-panel/assets/{Artifacts-CJUMw6PB.js → Artifacts-BS112K5L.js} +1 -1
  9. package/src/assets/web-panel/assets/{Audit-CDB9V58o.js → Audit-0wJuQrNu.js} +1 -1
  10. package/src/assets/web-panel/assets/{BackgroundAgents-TBppYFjN.js → BackgroundAgents-B90PMgbn.js} +1 -1
  11. package/src/assets/web-panel/assets/{Backup-CYEOUpzJ.js → Backup-TkgMglQQ.js} +1 -1
  12. package/src/assets/web-panel/assets/{BaseInput-C88fFT2u.js → BaseInput-CQVS9p1l.js} +1 -1
  13. package/src/assets/web-panel/assets/{Chat-mkr1vC3N.js → Chat-YTjQHoC7.js} +6 -6
  14. package/src/assets/web-panel/assets/ChatBubbleRenderer-PR074hUN.js +1 -0
  15. package/src/assets/web-panel/assets/{Checkbox-CVU4xqti.js → Checkbox-5bwaOabq.js} +1 -1
  16. package/src/assets/web-panel/assets/{Codegen-rrNcByz3.js → Codegen-BFmNQ_Xe.js} +1 -1
  17. package/src/assets/web-panel/assets/{Col-Cqu-zCvh.js → Col-BT_u4Dzp.js} +1 -1
  18. package/src/assets/web-panel/assets/{Community-RGRlSgXV.js → Community-CJP52u5b.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compact-DBm6epOK.js → Compact-BpzhJE9i.js} +1 -1
  20. package/src/assets/web-panel/assets/{Compliance-BgKw5iaW.js → Compliance-Cg7rfslp.js} +1 -1
  21. package/src/assets/web-panel/assets/{Cowork-BqQcNO3Z.js → Cowork-JisxL6Yy.js} +3 -3
  22. package/src/assets/web-panel/assets/{Cron-DO5gTFNb.js → Cron-Bu7Ug_MC.js} +2 -2
  23. package/src/assets/web-panel/assets/{Crosschain-B8hbJNuN.js → Crosschain-CvuqoLdj.js} +1 -1
  24. package/src/assets/web-panel/assets/{DID-B08bFJ2C.js → DID-C2u9G8Pu.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dashboard-xNdy_ifo.js → Dashboard-BFt5Yv3d.js} +2 -2
  26. package/src/assets/web-panel/assets/{Dropdown-D-KIZgWL.js → Dropdown-DIaT9Wxq.js} +1 -1
  27. package/src/assets/web-panel/assets/{EmailListRenderer-DKCvsaGo.js → EmailListRenderer-D_A601Y4.js} +1 -1
  28. package/src/assets/web-panel/assets/{FamilyGuardDashboard-D_cfqama.js → FamilyGuardDashboard--IyQ8I8w.js} +1 -1
  29. package/src/assets/web-panel/assets/{Federation-B-UqQD68.js → Federation-BihWHxuY.js} +1 -1
  30. package/src/assets/web-panel/assets/{FormItemContext-BWWvWuJW.js → FormItemContext-BB8dOXc_.js} +1 -1
  31. package/src/assets/web-panel/assets/{GenericCardRenderer-CPchx6N7.js → GenericCardRenderer-DQYhj1HH.js} +1 -1
  32. package/src/assets/web-panel/assets/{Git-Vx4co9Ff.js → Git-B-2QZxGf.js} +2 -2
  33. package/src/assets/web-panel/assets/{Governance-D4x0pp_m.js → Governance-CusSb-nG.js} +1 -1
  34. package/src/assets/web-panel/assets/{Inference-T3KvwPYR.js → Inference-BAjmvPPL.js} +1 -1
  35. package/src/assets/web-panel/assets/{KnowledgeGraph-Ddv3KUv3.js → KnowledgeGraph-DoNYWKYq.js} +1 -1
  36. package/src/assets/web-panel/assets/{Logs-DfH-Dkae.js → Logs-B8fKWD-n.js} +2 -2
  37. package/src/assets/web-panel/assets/{MarkdownRenderer-DHW3PbCq.js → MarkdownRenderer-BlJm1J7E.js} +1 -1
  38. package/src/assets/web-panel/assets/{Marketplace-tjgb0R3D.js → Marketplace-CyOscbSL.js} +1 -1
  39. package/src/assets/web-panel/assets/{McpTools-DHAk5nYX.js → McpTools-Ex6Om5da.js} +5 -5
  40. package/src/assets/web-panel/assets/{Memory-A2Yx7thM.js → Memory-CDcD8l8r.js} +2 -2
  41. package/src/assets/web-panel/assets/{MobileBridge-BEmTVfN5.js → MobileBridge-xfBqoFDg.js} +1 -1
  42. package/src/assets/web-panel/assets/{MobileProjects-DuFHUgE4.js → MobileProjects-BwObMMA2.js} +1 -1
  43. package/src/assets/web-panel/assets/{Mtc-BDSll0OZ.js → Mtc-CIWd36OV.js} +4 -4
  44. package/src/assets/web-panel/assets/{MtcAudit-CuBvluaS.js → MtcAudit-CPX0ouuA.js} +4 -4
  45. package/src/assets/web-panel/assets/{Multisig-BmXAA-Sb.js → Multisig-BDJsIUuW.js} +3 -3
  46. package/src/assets/web-panel/assets/{NLProgramming-ci2stZAe.js → NLProgramming-DEkbuD3N.js} +1 -1
  47. package/src/assets/web-panel/assets/{Notes-D-1RpqnS.js → Notes-DJpHRhH1.js} +3 -3
  48. package/src/assets/web-panel/assets/{NotificationSettings-C0GyitIT.js → NotificationSettings-C1UZ-Qd5.js} +1 -1
  49. package/src/assets/web-panel/assets/{OrderTableRenderer-U2bN-hj5.js → OrderTableRenderer-GlJtqLjT.js} +1 -1
  50. package/src/assets/web-panel/assets/{Organization-BNZgpPci.js → Organization-Bbhj0fac.js} +4 -4
  51. package/src/assets/web-panel/assets/{Overflow-CDidKmUN.js → Overflow-1H04x3kx.js} +1 -1
  52. package/src/assets/web-panel/assets/{P2P-BnreBaXq.js → P2P-CDpPe3et.js} +2 -2
  53. package/src/assets/web-panel/assets/{PdhVaultBrowser-DwJUxO9j.js → PdhVaultBrowser-MUX0Bpvw.js} +3 -3
  54. package/src/assets/web-panel/assets/{Permissions-BQGgJPH0.js → Permissions-A07-0Ci1.js} +4 -4
  55. package/src/assets/web-panel/assets/{PersonalDataHub-k_fSkCwL.js → PersonalDataHub-DhhDWxAZ.js} +5 -5
  56. package/src/assets/web-panel/assets/{Pipeline-WGqKMqau.js → Pipeline-CyfbJfe-.js} +1 -1
  57. package/src/assets/web-panel/assets/{Privacy-DtHj9Ymq.js → Privacy-CNFps3ED.js} +1 -1
  58. package/src/assets/web-panel/assets/{ProjectInit-B3wH2SFC.js → ProjectInit--T-u3Dr5.js} +2 -2
  59. package/src/assets/web-panel/assets/{ProjectSettings-Cd0cgcA1.js → ProjectSettings-DJmrK2fC.js} +2 -2
  60. package/src/assets/web-panel/assets/Projects-Qx_MdX9k.js +1 -0
  61. package/src/assets/web-panel/assets/{Providers-DTpxEXur.js → Providers-DLzzbOZd.js} +1 -1
  62. package/src/assets/web-panel/assets/{QrScannerModal-B2v6gR-C.js → QrScannerModal-CexOomKS.js} +1 -1
  63. package/src/assets/web-panel/assets/{QuickAsk-D3Nr9xXR.js → QuickAsk-QklGi19_.js} +1 -1
  64. package/src/assets/web-panel/assets/{Recommend-C9inoMky.js → Recommend-Bb9kwSw8.js} +1 -1
  65. package/src/assets/web-panel/assets/RemoteSession-DZuVNNN5.js +5 -0
  66. package/src/assets/web-panel/assets/{Reputation-41KFG646.js → Reputation-Dr5cLP0N.js} +1 -1
  67. package/src/assets/web-panel/assets/{Row-DqAaqqCv.js → Row-oCQHYv5t.js} +1 -1
  68. package/src/assets/web-panel/assets/{RssFeed-CMDpCDKc.js → RssFeed-IFDEykIR.js} +3 -3
  69. package/src/assets/web-panel/assets/{Search-B6mtegNL.js → Search-CspVIxDc.js} +1 -1
  70. package/src/assets/web-panel/assets/{Security-BaePFVZ8.js → Security-Bm66o_DH.js} +3 -3
  71. package/src/assets/web-panel/assets/{Services-DeG3Qscl.js → Services-DvanNqXl.js} +2 -2
  72. package/src/assets/web-panel/assets/{Skeleton-D_QP7F90.js → Skeleton-CHjEe9_O.js} +1 -1
  73. package/src/assets/web-panel/assets/{Skills-DLGyUgIA.js → Skills-Cb8jWjMX.js} +1 -1
  74. package/src/assets/web-panel/assets/{Sla-BN2pxW1Q.js → Sla-DxZm1491.js} +1 -1
  75. package/src/assets/web-panel/assets/{SpeechSettings-BWsZPd8B.js → SpeechSettings-DWxEEclC.js} +1 -1
  76. package/src/assets/web-panel/assets/{SyncSettings-VOZRPODW.js → SyncSettings-FIvOFw5p.js} +2 -2
  77. package/src/assets/web-panel/assets/Tasks-CyuLnDFR.js +1 -0
  78. package/src/assets/web-panel/assets/{Templates-eJSob-q0.js → Templates-CaNjzV_t.js} +1 -1
  79. package/src/assets/web-panel/assets/{Tenant-Bdwk8Rwy.js → Tenant-DjlP6TmH.js} +1 -1
  80. package/src/assets/web-panel/assets/Terminal-DwzGMniO.js +3 -0
  81. package/src/assets/web-panel/assets/{TimelineRenderer-D5qkbPKT.js → TimelineRenderer-DoZ8y7y8.js} +1 -1
  82. package/src/assets/web-panel/assets/{Tokens-DKgwn8hI.js → Tokens-390cg2TC.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trigger-HlEHniGM.js → Trigger-CLrtCj5_.js} +1 -1
  84. package/src/assets/web-panel/assets/{Trust-CdPcsBpN.js → Trust-DpESfSPn.js} +1 -1
  85. package/src/assets/web-panel/assets/{UkeySign-vAdXd-vG.js → UkeySign-CN6279O0.js} +1 -1
  86. package/src/assets/web-panel/assets/{VideoEditing-9hHBYFnH.js → VideoEditing-DPtAUlSe.js} +1 -1
  87. package/src/assets/web-panel/assets/{Wallet-Dxh5d1yR.js → Wallet-nKOMV_1n.js} +4 -4
  88. package/src/assets/web-panel/assets/{WebAuthn-BsFmLHkp.js → WebAuthn-HuXlSOc4.js} +5 -5
  89. package/src/assets/web-panel/assets/{WorkflowEditor-Cn0OIwLn.js → WorkflowEditor-CUfFjARi.js} +1 -1
  90. package/src/assets/web-panel/assets/chat-6Eq0PcZJ.js +1 -0
  91. package/src/assets/web-panel/assets/{colors-Du9jzLN0.js → colors-BP_Sf6Iy.js} +1 -1
  92. package/src/assets/web-panel/assets/{compact-item-DhEscfzw.js → compact-item-BufMKIh5.js} +1 -1
  93. package/src/assets/web-panel/assets/{createContext-CwzEfF3i.js → createContext-BBMXxWSW.js} +1 -1
  94. package/src/assets/web-panel/assets/devWarning-DgVKduH2.js +1 -0
  95. package/src/assets/web-panel/assets/{hasIn-DT_GSE6J.js → hasIn-fUK_tRO2.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-tND8-TDU.js → index-2A5ph8b2.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-B8s5FxJY.js → index-3FuwBewR.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-53z1YUxX.js → index-6GmBa4Kg.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-BFD0cEna.js → index-B2vS66eI.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-CQWxDOvM.js → index-B7Etk0Te.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-VeHs6qH0.js → index-B9WYSn4m.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-CGvgnfl9.js → index-BHy6yNiF.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-D3llLkYM.js → index-BMLHv389.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-Dny_ZnAO.js → index-BWKoBU8R.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-DzjzrOli.js → index-Bkg4ZePE.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-DN60VBn5.js → index-C44atv4k.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-v5HLYCVa.js → index-CE2DdTP2.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BF-ZCVGE.js → index-CGjmILDm.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-gFjYdstW.js → index-CW_G-MXw.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-NA2oBLSB.js → index-CZ6Yt17L.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-Mobw3PHs.js → index-CeASi4fr.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-DWL3SYN3.js → index-CgiECHu2.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-1LoutPJd.js → index-Cp8vhyZy.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-BnHhFnwt.js → index-CwSf5pnf.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-B6QDWRLk.js → index-D4_MuGkd.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-D-QkW1fp.js → index-D9vU25ij.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-C4SN3by5.js → index-DASluSqY.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-CyEhUJcu.js → index-DLpIs_P_.js} +1 -1
  119. package/src/assets/web-panel/assets/index-DOZTSoS7.js +1 -0
  120. package/src/assets/web-panel/assets/{index-BrkJ7JPm.js → index-DPdUNk1i.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-Cnok8mhZ.js → index-DVsqvI4M.js} +1 -1
  122. package/src/assets/web-panel/assets/index-DhpvjpqI.js +1 -0
  123. package/src/assets/web-panel/assets/{index-CAVW0cWM.js → index-DmkMXwnR.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-Cc9aPkv-.js → index-DocdRcbd.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-DnVVYKCE.js → index-Dyngbd29.js} +20 -20
  126. package/src/assets/web-panel/assets/{index-D8gt0j7r.js → index-GwdRUZ-x.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-BIYTjbv_.js → index-LvCBfTLo.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-DhXay17G.js → index-cpEli44X.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-BQWENaZf.js → index-fzaMtSJ8.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-DfRDyY1q.js → index-pum7HYBA.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-BgSR2WMG.js → index-t8N1tSeX.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-D5IytTND.js → index-uCbEN7cY.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-DtRwLhee.js → index-wKTLbKyc.js} +1 -1
  134. package/src/assets/web-panel/assets/{index-D4kZoXNr.js → index-wV6iGdpY.js} +1 -1
  135. package/src/assets/web-panel/assets/{initDefaultProps-Cvt59c10.js → initDefaultProps-V5Fo95FM.js} +1 -1
  136. package/src/assets/web-panel/assets/{motion-D15pPEzl.js → motion-BYWU0hUT.js} +1 -1
  137. package/src/assets/web-panel/assets/{move-N55KeXJ7.js → move-Cr1M-J2h.js} +1 -1
  138. package/src/assets/web-panel/assets/{mtc-parser-CyFO1bYP.js → mtc-parser-BysQKi2N.js} +1 -1
  139. package/src/assets/web-panel/assets/{omit-B5IXfxU2.js → omit-D1zHU8GC.js} +1 -1
  140. package/src/assets/web-panel/assets/{pickAttrs-CpVqsulV.js → pickAttrs-CUArxtfi.js} +1 -1
  141. package/src/assets/web-panel/assets/{placementArrow-ME36sMF3.js → placementArrow-ChoYEys0.js} +1 -1
  142. package/src/assets/web-panel/assets/{responsiveObserve-BXAIR1r-.js → responsiveObserve-BQRs3Mo7.js} +1 -1
  143. package/src/assets/web-panel/assets/{slide-BkOX3-Dp.js → slide-B8zbsCkg.js} +1 -1
  144. package/src/assets/web-panel/assets/{statusUtils-Cy4Aklpt.js → statusUtils-C2U8Gs6h.js} +1 -1
  145. package/src/assets/web-panel/assets/{styleChecker-gUd2T206.js → styleChecker-Dd8MgL_V.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFlexGapSupport-CaVD4o99.js → useFlexGapSupport-hknqY5NH.js} +1 -1
  147. package/src/assets/web-panel/assets/{useFs--pFGl0KD.js → useFs-CLTAmcfw.js} +1 -1
  148. package/src/assets/web-panel/assets/{usePersonalDataHub-D45iP86i.js → usePersonalDataHub-ByegHbiB.js} +1 -1
  149. package/src/assets/web-panel/assets/{vnode-BayoChH_.js → vnode-DqlAy5DP.js} +1 -1
  150. package/src/assets/web-panel/assets/{zoom-CpP38poi.js → zoom-DiXiztQn.js} +1 -1
  151. package/src/assets/web-panel/index.html +1 -1
  152. package/src/commands/agenda.js +115 -3
  153. package/src/commands/agent.js +10 -1
  154. package/src/commands/background-session.js +2 -1
  155. package/src/commands/context.js +69 -2
  156. package/src/data/changelog.json +26 -0
  157. package/src/gateways/terminal/PtyManager.js +45 -4
  158. package/src/gateways/ws/background-agent-protocol.js +38 -0
  159. package/src/gateways/ws/message-dispatcher.js +1 -0
  160. package/src/gateways/ws/remote-session-protocol.js +65 -6
  161. package/src/gateways/ws/ws-server.js +18 -2
  162. package/src/harness/background-task-manager.js +70 -2
  163. package/src/harness/feature-flags.js +15 -8
  164. package/src/harness/mcp-client.js +618 -43
  165. package/src/harness/worktree-isolator.js +14 -3
  166. package/src/lazy-dispatch.js +30 -1
  167. package/src/lib/agent-authority.js +22 -0
  168. package/src/lib/agent-core.js +3 -0
  169. package/src/lib/agent-sandbox.js +161 -0
  170. package/src/lib/agent-schedule-store.js +45 -22
  171. package/src/lib/agent-team/team-runner.js +22 -0
  172. package/src/lib/artifact-store.js +35 -0
  173. package/src/lib/async-hook-supervisor.cjs +13 -2
  174. package/src/lib/audit-mtc.js +3 -2
  175. package/src/lib/background-agent-supervisor.js +104 -3
  176. package/src/lib/background-interaction-journal.js +407 -0
  177. package/src/lib/background-interaction-resolver.js +23 -34
  178. package/src/lib/background-session-transport.js +12 -2
  179. package/src/lib/capability-manifest.js +41 -3
  180. package/src/lib/capability-negotiation.js +1 -1
  181. package/src/lib/channels/channel-manager.js +33 -0
  182. package/src/lib/channels/telegram-channel.js +23 -5
  183. package/src/lib/channels/webhook-channel.js +38 -15
  184. package/src/lib/chrome-connector.js +169 -23
  185. package/src/lib/config-manager.js +23 -9
  186. package/src/lib/context-breakdown.js +31 -0
  187. package/src/lib/cowork-cron.js +274 -32
  188. package/src/lib/cross-chain-mtc.js +3 -2
  189. package/src/lib/durable-security-store.js +124 -0
  190. package/src/lib/event-runtime-host.js +67 -6
  191. package/src/lib/event-runtime-store.js +163 -0
  192. package/src/lib/goal-store.js +32 -12
  193. package/src/lib/headless-manifest.js +2 -1
  194. package/src/lib/hook-environment.cjs +58 -0
  195. package/src/lib/hook-manager.js +12 -5
  196. package/src/lib/hook-runner.cjs +122 -28
  197. package/src/lib/hook-runner.js +7 -2
  198. package/src/lib/hooks-v2-producers.js +36 -0
  199. package/src/lib/hooks-v2-runtime.js +329 -52
  200. package/src/lib/interaction-adapter.js +60 -19
  201. package/src/lib/interaction-binding.js +64 -0
  202. package/src/lib/json-schema-output.js +439 -14
  203. package/src/lib/json-schema-validate.js +514 -883
  204. package/src/lib/lan-pairing-tokens.js +115 -57
  205. package/src/lib/lsp/__tests__/lsp-client.test.js +32 -0
  206. package/src/lib/lsp/__tests__/lsp-manager.test.js +25 -0
  207. package/src/lib/lsp/lsp-client.js +4 -0
  208. package/src/lib/lsp/lsp-manager.js +3 -0
  209. package/src/lib/lsp/lsp-server-registry.js +18 -0
  210. package/src/lib/mcp-client.js +1 -0
  211. package/src/lib/mcp-oauth.js +35 -21
  212. package/src/lib/packer/pkg-config-generator.js +3 -0
  213. package/src/lib/permission-decision.js +99 -0
  214. package/src/lib/plugin-monitor-supervisor.js +3 -0
  215. package/src/lib/plugin-runtime/bin.js +1148 -70
  216. package/src/lib/plugin-runtime/capabilities.js +50 -0
  217. package/src/lib/plugin-runtime/capability-consent.js +42 -35
  218. package/src/lib/plugin-runtime/hooks.js +36 -9
  219. package/src/lib/plugin-runtime/install.js +23 -7
  220. package/src/lib/plugin-runtime/lsp.js +4 -0
  221. package/src/lib/plugin-runtime/manifest.js +112 -8
  222. package/src/lib/plugin-runtime/mcp.js +30 -5
  223. package/src/lib/plugin-runtime/monitors.js +11 -0
  224. package/src/lib/plugin-runtime/plugin-options.js +94 -38
  225. package/src/lib/plugin-runtime/policy.js +29 -2
  226. package/src/lib/plugin-runtime/sandbox-policy.js +84 -0
  227. package/src/lib/plugin-runtime/scopes.js +27 -13
  228. package/src/lib/plugin-runtime/trust.js +36 -31
  229. package/src/lib/process-execution-broker/credential-agent.js +114 -16
  230. package/src/lib/process-execution-broker/credential-transport-worker.js +312 -0
  231. package/src/lib/process-execution-broker/credential-transport.js +378 -0
  232. package/src/lib/process-execution-broker/index.js +765 -49
  233. package/src/lib/process-execution-broker/platform-sandbox.js +4233 -138
  234. package/src/lib/process-execution-broker/windows-sandbox-helper.dll +0 -0
  235. package/src/lib/process-execution-broker/windows-sandbox-helper.exe +0 -0
  236. package/src/lib/process-execution-broker/windows-sandbox.cs +3856 -0
  237. package/src/lib/project-mcp-trust.js +21 -26
  238. package/src/lib/protocol-replay.js +19 -12
  239. package/src/lib/repl-bang-memorize.js +67 -10
  240. package/src/lib/settings-hooks.cjs +13 -0
  241. package/src/lib/skill-loader.js +83 -10
  242. package/src/lib/slash-commands.js +27 -4
  243. package/src/lib/sync-credentials.js +5 -4
  244. package/src/lib/turn-binding.js +8 -6
  245. package/src/repl/agent-repl.js +117 -31
  246. package/src/repl/repl-turn-binding.js +5 -2
  247. package/src/runtime/agent-core.js +699 -70
  248. package/src/runtime/agent-runtime.js +13 -1
  249. package/src/runtime/coding-agent-contract-shared.cjs +3 -3
  250. package/src/runtime/headless-runner.js +105 -7
  251. package/src/runtime/headless-stream.js +209 -23
  252. package/src/runtime/mcp-config.js +29 -17
  253. package/src/runtime/policies/agent-policy.js +2 -0
  254. package/src/workers/background-agent-worker.js +128 -13
  255. package/src/assets/web-panel/assets/ChatBubbleRenderer-C7bofJuA.js +0 -1
  256. package/src/assets/web-panel/assets/Projects-BbgmyQnS.js +0 -1
  257. package/src/assets/web-panel/assets/RemoteSession-Bqk3EYSu.js +0 -4
  258. package/src/assets/web-panel/assets/Tasks-3bDAUz8K.js +0 -1
  259. package/src/assets/web-panel/assets/Terminal-CsMLKIoV.js +0 -3
  260. package/src/assets/web-panel/assets/chat-CJ19O6Dh.js +0 -1
  261. package/src/assets/web-panel/assets/devWarning-BBMFnsja.js +0 -1
  262. package/src/assets/web-panel/assets/index-Do8JMV4N.js +0 -1
  263. package/src/assets/web-panel/assets/index-UYAJ6iNM.js +0 -1
@@ -0,0 +1,378 @@
1
+ /**
2
+ * Authenticated local transport for broker-issued credential references.
3
+ *
4
+ * A worker thread hosts the pipe so spawnSync children can resolve a reference
5
+ * while the broker's main JavaScript thread is blocked.
6
+ */
7
+
8
+ import crypto from "node:crypto";
9
+ import net from "node:net";
10
+ import os from "node:os";
11
+ import path from "node:path";
12
+ import { Worker } from "node:worker_threads";
13
+
14
+ const TRANSPORT_VERSION = "local-ipc-v1";
15
+ const DEFAULT_TIMEOUT_MS = 5000;
16
+ const MAX_RESPONSE_BYTES = 1024 * 1024;
17
+
18
+ function transportError(code, message) {
19
+ const error = new Error(message);
20
+ error.code = code;
21
+ return error;
22
+ }
23
+
24
+ export function credentialTransportEndpoint(agentId, options = {}) {
25
+ const platform = options.platform || process.platform;
26
+ const safeId = crypto
27
+ .createHash("sha256")
28
+ .update(String(agentId))
29
+ .digest("hex")
30
+ .slice(0, 24);
31
+ if (platform === "win32") return `\\\\.\\pipe\\cc-cred-${safeId}`;
32
+ return path.join(options.tmpdir || os.tmpdir(), `cc-cred-${safeId}.sock`);
33
+ }
34
+
35
+ export class CredentialTransport {
36
+ constructor(options = {}) {
37
+ if (!options.agentId) {
38
+ throw transportError(
39
+ "CC_CREDENTIAL_INVALID_REQUEST",
40
+ "Credential transport requires an agent id",
41
+ );
42
+ }
43
+ this.agentId = String(options.agentId);
44
+ this.platform = options.platform || process.platform;
45
+ this.endpoint =
46
+ options.endpoint ||
47
+ credentialTransportEndpoint(this.agentId, {
48
+ platform: this.platform,
49
+ tmpdir: options.tmpdir,
50
+ });
51
+ this.version = TRANSPORT_VERSION;
52
+ this.ready = false;
53
+ this.closed = false;
54
+ this.error = null;
55
+ this._onAudit =
56
+ typeof options.onAudit === "function" ? options.onAudit : () => {};
57
+ this._onSettlement =
58
+ typeof options.onSettlement === "function"
59
+ ? options.onSettlement
60
+ : () => {};
61
+ this._workerFactory =
62
+ options.workerFactory ||
63
+ ((url, workerOptions) => new Worker(url, workerOptions));
64
+
65
+ this._readyPromise = new Promise((resolve, reject) => {
66
+ this._resolveReady = resolve;
67
+ this._rejectReady = reject;
68
+ });
69
+ this._readyPromise.catch(() => {});
70
+
71
+ try {
72
+ this._worker = this._workerFactory(
73
+ new URL("./credential-transport-worker.js", import.meta.url),
74
+ {
75
+ type: "module",
76
+ workerData: {
77
+ agentId: this.agentId,
78
+ endpoint: this.endpoint,
79
+ platform: this.platform,
80
+ },
81
+ },
82
+ );
83
+ this._worker.on("message", (message) =>
84
+ this._handleWorkerMessage(message),
85
+ );
86
+ this._worker.on("error", (error) => this._handleWorkerFailure(error));
87
+ this._worker.on("exit", (code) => {
88
+ if (!this.closed && code !== 0) {
89
+ this._handleWorkerFailure(
90
+ transportError(
91
+ "CC_CREDENTIAL_TRANSPORT_UNAVAILABLE",
92
+ `Credential transport worker exited with code ${code}`,
93
+ ),
94
+ );
95
+ }
96
+ });
97
+ this._worker.unref?.();
98
+ } catch (error) {
99
+ this._handleWorkerFailure(error);
100
+ }
101
+ }
102
+
103
+ _handleWorkerMessage(message) {
104
+ if (message?.type === "ready") {
105
+ this.ready = true;
106
+ this._resolveReady(this);
107
+ return;
108
+ }
109
+ if (message?.type === "audit" && message.entry) {
110
+ this._onAudit(message.entry);
111
+ return;
112
+ }
113
+ if (message?.type === "settlement") {
114
+ this._onSettlement(message);
115
+ return;
116
+ }
117
+ if (message?.type === "fatal") {
118
+ this._handleWorkerFailure(
119
+ transportError(
120
+ message.error?.code || "CC_CREDENTIAL_TRANSPORT_UNAVAILABLE",
121
+ message.error?.message || "Credential transport failed",
122
+ ),
123
+ );
124
+ }
125
+ }
126
+
127
+ _handleWorkerFailure(error) {
128
+ if (this.error) return;
129
+ this.error = transportError(
130
+ error?.code || "CC_CREDENTIAL_TRANSPORT_UNAVAILABLE",
131
+ error?.message || "Credential transport is unavailable",
132
+ );
133
+ this.ready = false;
134
+ this._rejectReady(this.error);
135
+ }
136
+
137
+ isAvailable() {
138
+ return Boolean(this._worker && !this.closed && !this.error);
139
+ }
140
+
141
+ waitUntilReady() {
142
+ return this._readyPromise;
143
+ }
144
+
145
+ createCapabilityToken() {
146
+ if (!this.isAvailable()) {
147
+ throw (
148
+ this.error ||
149
+ transportError(
150
+ "CC_CREDENTIAL_TRANSPORT_UNAVAILABLE",
151
+ "Credential transport is unavailable",
152
+ )
153
+ );
154
+ }
155
+ return crypto.randomBytes(32).toString("base64url");
156
+ }
157
+
158
+ registerCredential(record) {
159
+ if (!this.isAvailable()) {
160
+ throw (
161
+ this.error ||
162
+ transportError(
163
+ "CC_CREDENTIAL_TRANSPORT_UNAVAILABLE",
164
+ "Credential transport is unavailable",
165
+ )
166
+ );
167
+ }
168
+ this._worker.postMessage({ type: "register", record });
169
+ }
170
+
171
+ updateCredential(refId, state) {
172
+ if (!this.isAvailable()) return;
173
+ this._worker.postMessage({
174
+ type: "update",
175
+ refId,
176
+ useCount: state.useCount,
177
+ status: state.status,
178
+ });
179
+ }
180
+
181
+ revokeCredential(refId) {
182
+ if (!this.isAvailable()) return;
183
+ this._worker.postMessage({ type: "revoke", refId });
184
+ }
185
+
186
+ async close() {
187
+ if (this.closed) return;
188
+ this.closed = true;
189
+ if (!this._worker) return;
190
+ const worker = this._worker;
191
+ await new Promise((resolve) => {
192
+ const timer = setTimeout(resolve, 1000);
193
+ const onMessage = (message) => {
194
+ if (message?.type !== "closed") return;
195
+ clearTimeout(timer);
196
+ worker.removeListener("message", onMessage);
197
+ resolve();
198
+ };
199
+ worker.on("message", onMessage);
200
+ worker.postMessage({ type: "close" });
201
+ });
202
+ await worker.terminate();
203
+ this.ready = false;
204
+ }
205
+
206
+ getInfo() {
207
+ return {
208
+ version: this.version,
209
+ endpoint: this.endpoint,
210
+ available: this.isAvailable(),
211
+ ready: this.ready,
212
+ error: this.error
213
+ ? {
214
+ code: this.error.code,
215
+ message: this.error.message,
216
+ }
217
+ : null,
218
+ };
219
+ }
220
+ }
221
+
222
+ function connectOnce(endpoint) {
223
+ return new Promise((resolve, reject) => {
224
+ const socket = net.connect(endpoint);
225
+ const onError = (error) => {
226
+ socket.removeListener("connect", onConnect);
227
+ reject(error);
228
+ };
229
+ const onConnect = () => {
230
+ socket.removeListener("error", onError);
231
+ resolve(socket);
232
+ };
233
+ socket.once("error", onError);
234
+ socket.once("connect", onConnect);
235
+ });
236
+ }
237
+
238
+ async function connectWithRetry(endpoint, deadline) {
239
+ let lastError = null;
240
+ while (Date.now() < deadline) {
241
+ try {
242
+ return await connectOnce(endpoint);
243
+ } catch (error) {
244
+ lastError = error;
245
+ const retryable = ["ENOENT", "ECONNREFUSED", "EPIPE"].includes(
246
+ error?.code,
247
+ );
248
+ if (!retryable) throw error;
249
+ await new Promise((resolve) => {
250
+ setTimeout(resolve, 25);
251
+ });
252
+ }
253
+ }
254
+ throw (
255
+ lastError ||
256
+ transportError(
257
+ "CC_CREDENTIAL_TRANSPORT_UNAVAILABLE",
258
+ "Credential transport connection timed out",
259
+ )
260
+ );
261
+ }
262
+
263
+ /**
264
+ * Resolve one reference using only the capability material inherited by the
265
+ * approved target process.
266
+ */
267
+ export async function resolveCredentialRefOverTransport(refId, options = {}) {
268
+ const env = options.env || process.env;
269
+ const endpoint = options.endpoint || env.CC_CREDENTIAL_ENDPOINT;
270
+ const capabilityToken =
271
+ options.capabilityToken || env.CC_CREDENTIAL_AUTH_TOKEN;
272
+ const agentId = options.agentId || env.CC_CREDENTIAL_AGENT_ID;
273
+ const processTarget =
274
+ options.process ||
275
+ options.processTarget ||
276
+ env.CC_CREDENTIAL_TARGET_PROCESS;
277
+ const host =
278
+ options.host !== undefined
279
+ ? options.host
280
+ : env.CC_CREDENTIAL_TARGET_HOST || null;
281
+ const timeoutMs = Math.max(
282
+ 1,
283
+ Number(options.timeoutMs || DEFAULT_TIMEOUT_MS),
284
+ );
285
+
286
+ if (!endpoint || !capabilityToken || !agentId || !processTarget || !refId) {
287
+ throw transportError(
288
+ "CC_CREDENTIAL_INVALID_REQUEST",
289
+ "Credential transport environment is incomplete",
290
+ );
291
+ }
292
+
293
+ const deadline = Date.now() + timeoutMs;
294
+ const socket = await connectWithRetry(endpoint, deadline);
295
+ return await new Promise((resolve, reject) => {
296
+ let settled = false;
297
+ let carry = "";
298
+ const finish = (error, value) => {
299
+ if (settled) return;
300
+ settled = true;
301
+ clearTimeout(timer);
302
+ socket.destroy();
303
+ if (error) reject(error);
304
+ else resolve(value);
305
+ };
306
+ const timer = setTimeout(
307
+ () => {
308
+ finish(
309
+ transportError(
310
+ "CC_CREDENTIAL_TRANSPORT_TIMEOUT",
311
+ "Credential transport response timed out",
312
+ ),
313
+ );
314
+ },
315
+ Math.max(1, deadline - Date.now()),
316
+ );
317
+ timer.unref?.();
318
+ socket.on("data", (chunk) => {
319
+ carry += chunk.toString("utf8");
320
+ if (Buffer.byteLength(carry, "utf8") > MAX_RESPONSE_BYTES) {
321
+ finish(
322
+ transportError(
323
+ "CC_CREDENTIAL_INVALID_REQUEST",
324
+ "Credential transport response is too large",
325
+ ),
326
+ );
327
+ return;
328
+ }
329
+ const newline = carry.indexOf("\n");
330
+ if (newline === -1) return;
331
+ let response;
332
+ try {
333
+ response = JSON.parse(carry.slice(0, newline).replace(/\r$/, ""));
334
+ } catch {
335
+ finish(
336
+ transportError(
337
+ "CC_CREDENTIAL_INVALID_REQUEST",
338
+ "Credential transport returned invalid JSON",
339
+ ),
340
+ );
341
+ return;
342
+ }
343
+ if (!response.ok) {
344
+ finish(
345
+ transportError(
346
+ response.code || "CC_CREDENTIAL_TRANSPORT_UNAVAILABLE",
347
+ response.message || "Credential transport denied the request",
348
+ ),
349
+ );
350
+ return;
351
+ }
352
+ finish(null, response.value);
353
+ });
354
+ socket.once("error", (error) => finish(error));
355
+ socket.once("close", () => {
356
+ if (!settled) {
357
+ finish(
358
+ transportError(
359
+ "CC_CREDENTIAL_TRANSPORT_UNAVAILABLE",
360
+ "Credential transport closed without a response",
361
+ ),
362
+ );
363
+ }
364
+ });
365
+ socket.write(
366
+ `${JSON.stringify({
367
+ type: "resolve",
368
+ refId,
369
+ agentId,
370
+ capabilityToken,
371
+ process: processTarget,
372
+ host,
373
+ })}\n`,
374
+ );
375
+ });
376
+ }
377
+
378
+ export { TRANSPORT_VERSION };