@xopcai/xopc 0.0.251 → 0.0.253

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 (376) hide show
  1. package/README.md +8 -5
  2. package/README.zh-CN.md +8 -5
  3. package/dist/browser-ext/dist/background.js +358 -768
  4. package/dist/browser-ext/manifest.json +1 -2
  5. package/dist/extensions/telegram/src/inbound-processor.js +2 -2
  6. package/dist/extensions/telegram/src/plugin.js +3 -2
  7. package/dist/extensions/telegram/xopc.extension.json +1 -1
  8. package/dist/gateway/static/root/assets/{activity-store-DfBjTSo9.js → activity-store-CeS1bgXP.js} +1 -1
  9. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-Bo_dmLv8.js → agent-avatar-dicebear-BdF3HhCW.js} +1 -1
  10. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-Bs34Kp0K.js +1 -0
  11. package/dist/gateway/static/root/assets/{agents-yuUn8n-f.js → agents-DARlgjTm.js} +1 -1
  12. package/dist/gateway/static/root/assets/{api-zxpcJfgj.js → api-zMPeC0yU.js} +1 -1
  13. package/dist/gateway/static/root/assets/{app-management-settings-panel-Cz56nrVF.js → app-management-settings-panel-BaAFln8W.js} +1 -1
  14. package/dist/gateway/static/root/assets/{appearance-settings-DxSws5U4.js → appearance-settings-CXvsoBlw.js} +1 -1
  15. package/dist/gateway/static/root/assets/apps-page-BhgvfBJT.js +1 -0
  16. package/dist/gateway/static/root/assets/{archive-plugin-7k15-hqo.js → archive-plugin-C0o_mVQI.js} +1 -1
  17. package/dist/gateway/static/root/assets/{attachment-load-B-SFpjd9.js → attachment-load-B5Ry3tGL.js} +1 -1
  18. package/dist/gateway/static/root/assets/{automations-page-Qy36j19q.js → automations-page-DY5QAEQd.js} +1 -1
  19. package/dist/gateway/static/root/assets/automations-workspace-BzX4lILP.js +6 -0
  20. package/dist/gateway/static/root/assets/{binary-plugins-CPOZQt8F.js → binary-plugins-BydpEgBA.js} +1 -1
  21. package/dist/gateway/static/root/assets/{block-editor-DhvVlIp9.js → block-editor-D0CpUOMo.js} +3 -3
  22. package/dist/gateway/static/root/assets/browser-automation-inputs-DzbTsGI6.js +1 -0
  23. package/dist/gateway/static/root/assets/browser-automations-page-D7fZYjni.js +3 -0
  24. package/dist/gateway/static/root/assets/browser-settings-page-BBdMqxl0.js +3 -0
  25. package/dist/gateway/static/root/assets/capabilities-settings-panel-D_WfftDW.js +7 -0
  26. package/dist/gateway/static/root/assets/channels-settings-bdRLT9KA.js +1 -0
  27. package/dist/gateway/static/root/assets/{channels-status-swr-CX-yWwLD.js → channels-status-swr-BGGRTkn6.js} +1 -1
  28. package/dist/gateway/static/root/assets/{chat-terminal-dock-1PJoxRuV.js → chat-terminal-dock-_CP4nvlg.js} +2 -2
  29. package/dist/gateway/static/root/assets/connectors-page-CPDjU5wU.js +2 -0
  30. package/dist/gateway/static/root/assets/{cron-expression-CBCc6zFA.js → cron-expression-g2U8Rllf.js} +1 -1
  31. package/dist/gateway/static/root/assets/{date-picker-u8K5Kt_N.js → date-picker-SmVlhtj_.js} +1 -1
  32. package/dist/gateway/static/root/assets/{dependency-picker-y_i_cnpz.js → dependency-picker-D-0gcbbM.js} +1 -1
  33. package/dist/gateway/static/root/assets/{desktop-pet-DyL0JxLm.js → desktop-pet-Cl3JRIu6.js} +1 -1
  34. package/dist/gateway/static/root/assets/{desktop-pet-settings-d2d_IsyP.js → desktop-pet-settings-D7kvWQ9H.js} +1 -1
  35. package/dist/gateway/static/root/assets/{extension-debug-page-DqIBKJwl.js → extension-debug-page-DtP2tJHY.js} +1 -1
  36. package/dist/gateway/static/root/assets/{extension-page-DUW1xxj2.js → extension-page-CphZDdoT.js} +1 -1
  37. package/dist/gateway/static/root/assets/{extension-settings-page-BHY9qaNw.js → extension-settings-page-CsxVLV4-.js} +1 -1
  38. package/dist/gateway/static/root/assets/{gateway-config-swr-CMNbl0FZ.js → gateway-config-swr-BW3Bx-aV.js} +1 -1
  39. package/dist/gateway/static/root/assets/gateway-settings-DxBZ05dX.js +1 -0
  40. package/dist/gateway/static/root/assets/{gateway-startup-retry-CR7Xg8As.js → gateway-startup-retry-DAq74TZe.js} +1 -1
  41. package/dist/gateway/static/root/assets/{heartbeat-settings-7CD9iPR7.js → heartbeat-settings-DWcKsIoZ.js} +1 -1
  42. package/dist/gateway/static/root/assets/home-page-BdvLZKQZ.js +1 -0
  43. package/dist/gateway/static/root/assets/{image-generation-api-C5mn73ca.js → image-generation-api-MPuaXDRs.js} +1 -1
  44. package/dist/gateway/static/root/assets/index-C7RDs6S-.js +74 -0
  45. package/dist/gateway/static/root/assets/index-Cu8xqZQ9.css +2 -0
  46. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BtlqMleF.js → keyboard-shortcuts-settings-CfhaTqgE.js} +1 -1
  47. package/dist/gateway/static/root/assets/{local-app-workbench-page-BjxfkjxE.js → local-app-workbench-page-CR6asX7L.js} +2 -2
  48. package/dist/gateway/static/root/assets/{local-apps-page-B7xqQe2s.js → local-apps-page-g01W3kEK.js} +1 -1
  49. package/dist/gateway/static/root/assets/{locale-store-CF4erhjB.js → locale-store-BkeaPZpn.js} +1 -1
  50. package/dist/gateway/static/root/assets/{logs-page-kACaPZKL.js → logs-page-ZP4QTWoC.js} +2 -2
  51. package/dist/gateway/static/root/assets/{management-settings-A432siER.js → management-settings-DeGxJF_Z.js} +1 -1
  52. package/dist/gateway/static/root/assets/markdown-view-Ca7BRBLL.js +201 -0
  53. package/dist/gateway/static/root/assets/{media-plugins-CpvYiauZ.js → media-plugins-FmOhmzlD.js} +1 -1
  54. package/dist/gateway/static/root/assets/messages-C72stReU.js +3 -0
  55. package/dist/gateway/static/root/assets/{mobile-pairing-wizard-DyjVGngO.js → mobile-pairing-wizard-BXNbn05L.js} +1 -1
  56. package/dist/gateway/static/root/assets/note-detail-panel-EeVeF4II.js +5 -0
  57. package/dist/gateway/static/root/assets/notes-page-D7bMff96.js +8 -0
  58. package/dist/gateway/static/root/assets/{page-tabs-B3FKzjR6.js → page-tabs-pyukZ1PJ.js} +1 -1
  59. package/dist/gateway/static/root/assets/{preview-open-alternatives-DnjrwAHD.js → preview-open-alternatives-slFHoMUe.js} +1 -1
  60. package/dist/gateway/static/root/assets/{product-open-page-COcr_NUJ.js → product-open-page-CXa3FNNk.js} +1 -1
  61. package/dist/gateway/static/root/assets/project-detail-page-BDF88VdN.js +1 -0
  62. package/dist/gateway/static/root/assets/projects-page-DeTD6pu1.js +1 -0
  63. package/dist/gateway/static/root/assets/{registry-api-BsRBlji7.js → registry-api-CviQoUBf.js} +1 -1
  64. package/dist/gateway/static/root/assets/remote-access-hub-CxKrdQ6a.js +1 -0
  65. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-LO4wZ_dO.js → runtime-tools-settings-panel-O9D9o7-O.js} +2 -2
  66. package/dist/gateway/static/root/assets/{schema-form-crcj4-Pm.js → schema-form-8FesicnL.js} +1 -1
  67. package/dist/gateway/static/root/assets/sessions-page-DUFJN-2t.js +1 -0
  68. package/dist/gateway/static/root/assets/settings-advanced-gate-CcSYDjaH.js +1 -0
  69. package/dist/gateway/static/root/assets/{settings-form-section-Bl4MvTmq.js → settings-form-section-CBic9TFH.js} +1 -1
  70. package/dist/gateway/static/root/assets/{settings-page-DplrjZ6x.js → settings-page-Xz66_Mjg.js} +1 -1
  71. package/dist/gateway/static/root/assets/setup-status-panel-C6DuwrP5.js +1 -0
  72. package/dist/gateway/static/root/assets/{share-preview-page-CJP1kURj.js → share-preview-page--JpjwB58.js} +1 -1
  73. package/dist/gateway/static/root/assets/{shares-settings-CemgzEi4.js → shares-settings-CovcdHSC.js} +1 -1
  74. package/dist/gateway/static/root/assets/skill-reload-api-CrHagTsE.js +1 -0
  75. package/dist/gateway/static/root/assets/{skills-page-DsjcKg9Q.js → skills-page-fVKExKv5.js} +1 -1
  76. package/dist/gateway/static/root/assets/{skills-page.utils-D6gWBbvy.js → skills-page.utils-Yv9u3uJp.js} +1 -1
  77. package/dist/gateway/static/root/assets/{system-settings-panel-_eCXfqCo.js → system-settings-panel-CCWjVdc2.js} +1 -1
  78. package/dist/gateway/static/root/assets/{task-detail-page-D0Z_K5JT.js → task-detail-page-I8hueJnG.js} +1 -1
  79. package/dist/gateway/static/root/assets/{theme-store-BOgkc_9D.js → theme-store-BtkaVpMm.js} +1 -1
  80. package/dist/gateway/static/root/assets/{tunnel-api-W5mktxl1.js → tunnel-api-C__W9BaN.js} +1 -1
  81. package/dist/gateway/static/root/assets/{use-autosave-Na2DYzT3.js → use-autosave-Dow9RRcq.js} +1 -1
  82. package/dist/gateway/static/root/assets/user-model-page-CU6nxmoM.js +2 -0
  83. package/dist/gateway/static/root/assets/{voice-api-key-field-OXweUxS_.js → voice-api-key-field-CvF3lEyx.js} +1 -1
  84. package/dist/gateway/static/root/assets/{voice-config-api-C-ryeIxj.js → voice-config-api-BEUVAyM6.js} +1 -1
  85. package/dist/gateway/static/root/assets/{work-discovery-overlay-BqOsO47I.js → work-discovery-overlay-B9PDfReq.js} +1 -1
  86. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-B9S_lfT1.js → workflow-run-setup-panel-kWGFkhjz.js} +2 -2
  87. package/dist/gateway/static/root/assets/workflows-page-B4Is5E42.js +5 -0
  88. package/dist/gateway/static/root/index.html +10 -10
  89. package/dist/package.js +1 -1
  90. package/dist/packages/gateway-contract/src/new-session.js +9 -0
  91. package/dist/packages/realtime-protocol/src/voice.js +6 -1
  92. package/dist/src/agent/agent-manager.d.ts +2 -1
  93. package/dist/src/agent/agent-manager.js +26 -8
  94. package/dist/src/agent/background-review/run-background-review.js +1 -1
  95. package/dist/src/agent/coding/repository-instructions.js +2 -2
  96. package/dist/src/agent/coding/workspace-revision.js +2 -2
  97. package/dist/src/agent/commands/command-isolation.js +2 -2
  98. package/dist/src/agent/embedded/execution-context.d.ts +2 -1
  99. package/dist/src/agent/embedded/execution-context.js +10 -4
  100. package/dist/src/agent/embedded/index.d.ts +1 -1
  101. package/dist/src/agent/embedded/index.js +2 -2
  102. package/dist/src/agent/embedded/model-runtime.js +1 -1
  103. package/dist/src/agent/embedded/run-for-session.js +5 -4
  104. package/dist/src/agent/embedded/run-turn.js +22 -3
  105. package/dist/src/agent/embedded/types.d.ts +1 -1
  106. package/dist/src/agent/external-tools/composio-provider.d.ts +1 -0
  107. package/dist/src/agent/external-tools/composio-provider.js +64 -34
  108. package/dist/src/agent/external-tools/search-error.js +5 -3
  109. package/dist/src/agent/image/tool-model-config.js +1 -1
  110. package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +1 -1
  111. package/dist/src/agent/service/direct-turn-helpers.js +6 -3
  112. package/dist/src/agent/service/process-direct-streaming.js +6 -3
  113. package/dist/src/agent/service.d.ts +2 -0
  114. package/dist/src/agent/service.js +25 -10
  115. package/dist/src/agent/service.types.d.ts +2 -1
  116. package/dist/src/agent/session/session-inspector.js +1 -1
  117. package/dist/src/agent/skills/hub-lock.js +1 -1
  118. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +4 -0
  119. package/dist/src/agent/tasks/task-judge-service.js +3 -3
  120. package/dist/src/agent/tool-manuals/browser.d.ts +1 -1
  121. package/dist/src/agent/tool-manuals/browser.js +15 -226
  122. package/dist/src/agent/tools/browser/tool/browser-use-tool.d.ts +4 -21
  123. package/dist/src/agent/tools/browser/tool/browser-use-tool.js +48 -165
  124. package/dist/src/agent/tools/browser/tool/schemas.d.ts +203 -16
  125. package/dist/src/agent/tools/browser/tool/schemas.js +146 -16
  126. package/dist/src/agent/tools/browser-automation-tool.d.ts +121 -0
  127. package/dist/src/agent/tools/browser-automation-tool.js +197 -0
  128. package/dist/src/agent/tools/clarify-tool.d.ts +17 -3
  129. package/dist/src/agent/tools/clarify-tool.js +27 -32
  130. package/dist/src/agent/tools/cli-clarify.js +23 -8
  131. package/dist/src/agent/tools/factory.d.ts +6 -9
  132. package/dist/src/agent/tools/factory.js +42 -59
  133. package/dist/src/agent/tools/index.d.ts +2 -2
  134. package/dist/src/agent/tools/index.js +3 -3
  135. package/dist/src/agent/tools/review-workspace.js +2 -2
  136. package/dist/src/ai-assist/text-assist.js +1 -1
  137. package/dist/src/auth/credentials.js +2 -2
  138. package/dist/src/auth/oauth/xopc-cloud.js +3 -1
  139. package/dist/src/auth/profiles/store.js +1 -1
  140. package/dist/src/auth/sync-provider-auth.js +2 -2
  141. package/dist/src/automations/domain/defaults.js +1 -1
  142. package/dist/src/automations/domain/types.d.ts +5 -5
  143. package/dist/src/automations/domain/validation.d.ts +16 -16
  144. package/dist/src/automations/domain/validation.js +3 -3
  145. package/dist/src/automations/draft/automation-draft-validator.d.ts +4 -4
  146. package/dist/src/automations/draft/automation-draft-validator.js +1 -1
  147. package/dist/src/automations/service/action-executor.d.ts +1 -1
  148. package/dist/src/automations/service/action-executor.js +7 -7
  149. package/dist/src/browser/{recipes → automations}/index.d.ts +1 -0
  150. package/dist/src/browser/automations/index.js +4 -0
  151. package/dist/src/browser/automations/repository.d.ts +13 -0
  152. package/dist/src/browser/automations/repository.js +60 -0
  153. package/dist/src/browser/automations/runner.d.ts +17 -0
  154. package/dist/src/browser/automations/runner.js +173 -0
  155. package/dist/src/browser/automations/runtime-service.d.ts +6 -0
  156. package/dist/src/browser/automations/runtime-service.js +37 -0
  157. package/dist/src/browser/automations/schema.d.ts +144 -0
  158. package/dist/src/browser/automations/schema.js +135 -0
  159. package/dist/src/browser/automations/service.d.ts +146 -0
  160. package/dist/src/browser/automations/service.js +168 -0
  161. package/dist/src/browser/automations/types.d.ts +90 -0
  162. package/dist/src/browser/cache-dir-policy.d.ts +1 -1
  163. package/dist/src/browser/cache-dir-policy.js +1 -4
  164. package/dist/src/browser/drivers/browser-driver.d.ts +17 -0
  165. package/dist/src/browser/drivers/create-driver.d.ts +3 -0
  166. package/dist/src/browser/drivers/create-driver.js +84 -0
  167. package/dist/src/browser/drivers/extension-driver.d.ts +20 -0
  168. package/dist/src/browser/drivers/extension-driver.js +47 -0
  169. package/dist/src/browser/drivers/playwright-driver.d.ts +38 -0
  170. package/dist/src/browser/drivers/playwright-driver.js +406 -0
  171. package/dist/src/browser/index.d.ts +10 -15
  172. package/dist/src/browser/index.js +10 -15
  173. package/dist/src/browser/install-lock.d.ts +1 -2
  174. package/dist/src/browser/install-lock.js +3 -9
  175. package/dist/src/browser/install-progress.d.ts +1 -1
  176. package/dist/src/browser/observation/format.d.ts +2 -0
  177. package/dist/src/browser/observation/format.js +26 -0
  178. package/dist/src/browser/policy/approval-store.d.ts +17 -0
  179. package/dist/src/browser/policy/approval-store.js +62 -0
  180. package/dist/src/browser/policy/browser-policy.d.ts +3 -0
  181. package/dist/src/browser/policy/browser-policy.js +27 -0
  182. package/dist/src/browser/providers/browser-ext-install.d.ts +1 -1
  183. package/dist/src/browser/providers/browser-ext-install.js +4 -6
  184. package/dist/src/browser/providers/browser-use.js +1 -1
  185. package/dist/src/browser/providers/browserbase.js +1 -1
  186. package/dist/src/browser/providers/extension-ws-acquire.d.ts +1 -4
  187. package/dist/src/browser/providers/extension-ws-acquire.js +1 -13
  188. package/dist/src/browser/providers/extension.d.ts +3 -22
  189. package/dist/src/browser/providers/extension.js +7 -15
  190. package/dist/src/browser/providers/index.d.ts +2 -2
  191. package/dist/src/browser/providers/index.js +3 -3
  192. package/dist/src/browser/providers/types.d.ts +0 -94
  193. package/dist/src/browser/readiness.d.ts +4 -22
  194. package/dist/src/browser/readiness.js +55 -118
  195. package/dist/src/browser/runtime/browser-runtime.d.ts +30 -0
  196. package/dist/src/browser/runtime/browser-runtime.js +362 -0
  197. package/dist/src/browser/url-policy.d.ts +3 -3
  198. package/dist/src/browser/url-policy.js +7 -6
  199. package/dist/src/browser/verification/expectation.d.ts +2 -0
  200. package/dist/src/browser/verification/expectation.js +17 -0
  201. package/dist/src/cli/command-loaders.js +1 -0
  202. package/dist/src/cli/command-manifest.js +5 -1
  203. package/dist/src/cli/commands/browser-cli-helpers.d.ts +0 -6
  204. package/dist/src/cli/commands/browser-cli-helpers.js +11 -144
  205. package/dist/src/cli/commands/browser.d.ts +0 -5
  206. package/dist/src/cli/commands/browser.js +11 -152
  207. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  208. package/dist/src/cli/commands/doctor/checks/node-version.js +25 -9
  209. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  210. package/dist/src/cli/commands/models.js +1 -1
  211. package/dist/src/cli/commands/platform.d.ts +1 -0
  212. package/dist/src/cli/commands/platform.js +111 -0
  213. package/dist/src/config/index.js +4 -4
  214. package/dist/src/config/loader.js +10 -4
  215. package/dist/src/config/models-json.js +1 -1
  216. package/dist/src/config/schema.d.ts +131 -84
  217. package/dist/src/config/schema.js +112 -59
  218. package/dist/src/connectors/composio-sessions.js +1 -3
  219. package/dist/src/extensions/lockfile.js +1 -1
  220. package/dist/src/extensions/marketplace.js +4 -0
  221. package/dist/src/gateway/agents-admin.js +1 -1
  222. package/dist/src/gateway/chat-stream/mapper.js +5 -1
  223. package/dist/src/gateway/chat-stream/protocol.d.ts +5 -1
  224. package/dist/src/gateway/clarify-runtime.d.ts +7 -5
  225. package/dist/src/gateway/clarify-runtime.js +8 -11
  226. package/dist/src/gateway/ephemeral-clarification-waiter.d.ts +17 -0
  227. package/dist/src/gateway/ephemeral-clarification-waiter.js +46 -0
  228. package/dist/src/gateway/file-path-classifier.js +1 -1
  229. package/dist/src/gateway/heartbeat/service.js +1 -1
  230. package/dist/src/gateway/hono/lib/config-payload.d.ts +12 -26
  231. package/dist/src/gateway/hono/lib/config-payload.js +11 -40
  232. package/dist/src/gateway/hono/routes/agent-stream.js +44 -18
  233. package/dist/src/gateway/hono/routes/browser-automations.d.ts +3 -0
  234. package/dist/src/gateway/hono/routes/browser-automations.js +77 -0
  235. package/dist/src/gateway/hono/routes/browser-install.js +0 -32
  236. package/dist/src/gateway/hono/routes/browser.d.ts +0 -17
  237. package/dist/src/gateway/hono/routes/browser.js +46 -568
  238. package/dist/src/gateway/hono/routes/config-patch/misc.js +8 -1
  239. package/dist/src/gateway/hono/routes/config.js +0 -11
  240. package/dist/src/gateway/hono/routes/lazy-bundles.js +5 -5
  241. package/dist/src/gateway/hono/routes/models.js +1 -1
  242. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +10 -2
  243. package/dist/src/gateway/hono/routes/side-chats.js +24 -4
  244. package/dist/src/gateway/security/gateway-scopes.js +1 -1
  245. package/dist/src/gateway/service/agent-runner.d.ts +25 -36
  246. package/dist/src/gateway/service/agent-runner.js +103 -32
  247. package/dist/src/gateway/service/config-coordinator.js +1 -1
  248. package/dist/src/gateway/service/run-gateway-agent.js +5 -2
  249. package/dist/src/gateway/service/session-input-coordinator.js +4 -1
  250. package/dist/src/gateway/service/sessions-api.js +1 -1
  251. package/dist/src/gateway/service.d.ts +8 -8
  252. package/dist/src/gateway/service.js +50 -37
  253. package/dist/src/gateway/side-chat/manager.d.ts +2 -1
  254. package/dist/src/gateway/side-chat/manager.js +5 -4
  255. package/dist/src/gateway/side-chat/run-service.d.ts +5 -1
  256. package/dist/src/gateway/side-chat/run-service.js +24 -23
  257. package/dist/src/gateway/side-chat/types.d.ts +3 -1
  258. package/dist/src/heartbeat/index.js +1 -1
  259. package/dist/src/platform/client.d.ts +121 -0
  260. package/dist/src/platform/client.js +108 -0
  261. package/dist/src/platform/contracts.d.ts +194 -0
  262. package/dist/src/platform/contracts.js +150 -0
  263. package/dist/src/platform/index.d.ts +4 -0
  264. package/dist/src/platform/index.js +9 -0
  265. package/dist/src/platform/resolution.d.ts +4 -0
  266. package/dist/src/platform/resolution.js +16 -0
  267. package/dist/src/platform/worker.d.ts +6 -0
  268. package/dist/src/platform/worker.js +75 -0
  269. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
  270. package/dist/src/providers/index.js +2 -2
  271. package/dist/src/providers/model-registry.js +1 -1
  272. package/dist/src/providers/register-runtime-providers.js +1 -1
  273. package/dist/src/providers/xopc-cloud-config.js +3 -1
  274. package/dist/src/session/session-context-for-llm.js +41 -1
  275. package/dist/src/share/hosted-session-share.js +3 -1
  276. package/dist/src/share/share-thumbnail.js +1 -1
  277. package/dist/src/storage/sqlite/clarification-wait-repository.d.ts +41 -0
  278. package/dist/src/storage/sqlite/clarification-wait-repository.js +418 -0
  279. package/dist/src/storage/sqlite/index.d.ts +2 -1
  280. package/dist/src/storage/sqlite/index.js +2 -1
  281. package/dist/src/storage/sqlite/migrations/153_browser_control_v2.sql +45 -0
  282. package/dist/src/storage/sqlite/migrations/154_session_clarification_waits.sql +60 -0
  283. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  284. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  285. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  286. package/dist/src/storage/sqlite/schema.js +1 -1
  287. package/dist/src/storage/sqlite/schema.sql +16 -20
  288. package/dist/src/storage/sqlite/session-input-repository.d.ts +11 -6
  289. package/dist/src/tasks/home-query-service.js +1 -1
  290. package/dist/src/tui/tui-startup-resources.js +1 -1
  291. package/dist/src/tui/tui.js +1 -1
  292. package/dist/src/tunnel/env.js +3 -1
  293. package/dist/src/voice/realtime/agentEngine.js +7 -2
  294. package/dist/src/voice/realtime/runtime.types.d.ts +5 -0
  295. package/dist/src/work-discovery/service.js +1 -1
  296. package/dist/src/workflows/service/workflow-run-service.js +1 -1
  297. package/package.json +7 -7
  298. package/skills/creative/hatch-pet/SKILL.md +1 -1
  299. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-kILWelNb.js +0 -1
  300. package/dist/gateway/static/root/assets/apps-page-BnizTdgs.js +0 -1
  301. package/dist/gateway/static/root/assets/automations-workspace-CZRKqSqY.js +0 -6
  302. package/dist/gateway/static/root/assets/browser-settings-page-pN5LbChY.js +0 -8
  303. package/dist/gateway/static/root/assets/browser-workflow-inputs-BX1-uM9L.js +0 -1
  304. package/dist/gateway/static/root/assets/browser-workflows-page-C65MI57t.js +0 -3
  305. package/dist/gateway/static/root/assets/capabilities-settings-panel-CJw2e16J.js +0 -7
  306. package/dist/gateway/static/root/assets/channels-settings-CRgjb4Ck.js +0 -1
  307. package/dist/gateway/static/root/assets/connectors-page-Dcpdy06y.js +0 -2
  308. package/dist/gateway/static/root/assets/gateway-config-api-e3BRcgDx.js +0 -1
  309. package/dist/gateway/static/root/assets/gateway-settings-Cheo0Rkc.js +0 -1
  310. package/dist/gateway/static/root/assets/home-page-DVrTRqNc.js +0 -1
  311. package/dist/gateway/static/root/assets/index-B7CX4Qob.css +0 -2
  312. package/dist/gateway/static/root/assets/index-BHrpyJ4t.js +0 -72
  313. package/dist/gateway/static/root/assets/markdown-view-CQvzsE24.js +0 -201
  314. package/dist/gateway/static/root/assets/messages-Cf5hpZE6.js +0 -3
  315. package/dist/gateway/static/root/assets/note-detail-panel-CUd8O4K7.js +0 -5
  316. package/dist/gateway/static/root/assets/notes-page-BLQwd39W.js +0 -8
  317. package/dist/gateway/static/root/assets/project-detail-page-NttW338u.js +0 -1
  318. package/dist/gateway/static/root/assets/projects-page-BzH8pjEz.js +0 -1
  319. package/dist/gateway/static/root/assets/remote-access-hub-BxpjSDnL.js +0 -1
  320. package/dist/gateway/static/root/assets/sessions-page-BLMaibOb.js +0 -1
  321. package/dist/gateway/static/root/assets/settings-advanced-gate-BRvvKhoH.js +0 -1
  322. package/dist/gateway/static/root/assets/setup-status-panel-DTOsxQC1.js +0 -1
  323. package/dist/gateway/static/root/assets/skill-reload-api-BWYanBlQ.js +0 -1
  324. package/dist/gateway/static/root/assets/user-model-page-B_-SNat-.js +0 -2
  325. package/dist/gateway/static/root/assets/workflows-page-CNOT2Coo.js +0 -5
  326. package/dist/src/agent/tools/browser-recipe-tool.d.ts +0 -12
  327. package/dist/src/agent/tools/browser-recipe-tool.js +0 -113
  328. package/dist/src/browser/actions/extension-registry-bridge.d.ts +0 -5
  329. package/dist/src/browser/actions/extension-registry-bridge.js +0 -312
  330. package/dist/src/browser/actions/registry.d.ts +0 -5
  331. package/dist/src/browser/actions/registry.js +0 -741
  332. package/dist/src/browser/actions/types.d.ts +0 -65
  333. package/dist/src/browser/backend-from-config.d.ts +0 -22
  334. package/dist/src/browser/backend-from-config.js +0 -99
  335. package/dist/src/browser/browser-command-timeout.d.ts +0 -2
  336. package/dist/src/browser/browser-command-timeout.js +0 -11
  337. package/dist/src/browser/cdp-local-launcher.d.ts +0 -35
  338. package/dist/src/browser/cdp-local-launcher.js +0 -154
  339. package/dist/src/browser/cdp-supervisor.d.ts +0 -58
  340. package/dist/src/browser/cdp-supervisor.js +0 -133
  341. package/dist/src/browser/humanize.d.ts +0 -80
  342. package/dist/src/browser/humanize.js +0 -363
  343. package/dist/src/browser/manager.d.ts +0 -50
  344. package/dist/src/browser/manager.js +0 -251
  345. package/dist/src/browser/pipeline/output.d.ts +0 -35
  346. package/dist/src/browser/pipeline/output.js +0 -74
  347. package/dist/src/browser/pipeline/runner.d.ts +0 -27
  348. package/dist/src/browser/pipeline/runner.js +0 -453
  349. package/dist/src/browser/pipeline/schema.d.ts +0 -42
  350. package/dist/src/browser/pipeline/schema.js +0 -116
  351. package/dist/src/browser/pipeline/template.d.ts +0 -30
  352. package/dist/src/browser/pipeline/template.js +0 -112
  353. package/dist/src/browser/providers/cloakbrowser.d.ts +0 -83
  354. package/dist/src/browser/providers/cloakbrowser.js +0 -612
  355. package/dist/src/browser/recipes/index.js +0 -3
  356. package/dist/src/browser/recipes/repository.d.ts +0 -13
  357. package/dist/src/browser/recipes/repository.js +0 -81
  358. package/dist/src/browser/recipes/runtime-service.d.ts +0 -6
  359. package/dist/src/browser/recipes/runtime-service.js +0 -30
  360. package/dist/src/browser/recipes/service.d.ts +0 -36
  361. package/dist/src/browser/recipes/service.js +0 -186
  362. package/dist/src/browser/recipes/types.d.ts +0 -36
  363. package/dist/src/browser/schemas.d.ts +0 -53
  364. package/dist/src/browser/schemas.js +0 -68
  365. package/dist/src/browser/session-lifecycle.d.ts +0 -40
  366. package/dist/src/browser/session-lifecycle.js +0 -136
  367. package/dist/src/browser/snapshot-helpers.d.ts +0 -24
  368. package/dist/src/browser/snapshot-helpers.js +0 -70
  369. package/dist/src/browser/stealth.d.ts +0 -46
  370. package/dist/src/browser/stealth.js +0 -163
  371. package/dist/src/gateway/clarify-bridge.d.ts +0 -46
  372. package/dist/src/gateway/clarify-bridge.js +0 -111
  373. package/dist/src/gateway/hono/routes/browser-workflows.d.ts +0 -3
  374. package/dist/src/gateway/hono/routes/browser-workflows.js +0 -78
  375. /package/dist/src/browser/{actions → automations}/types.js +0 -0
  376. /package/dist/src/browser/{recipes/types.js → drivers/browser-driver.js} +0 -0
@@ -11,7 +11,7 @@
11
11
  <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png?v=20260713-1" />
12
12
  <link rel="manifest" href="/site.webmanifest?v=20260713-1" />
13
13
  <title>XOPC — Keep what matters moving.</title>
14
- <script type="module" crossorigin src="/assets/index-BHrpyJ4t.js"></script>
14
+ <script type="module" crossorigin src="/assets/index-C7RDs6S-.js"></script>
15
15
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-aKtaBQYM.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-zJ_50EbN.js">
17
17
  <link rel="modulepreload" crossorigin href="/assets/vendor-react-BOUWij0V.js">
@@ -25,13 +25,13 @@
25
25
  <link rel="modulepreload" crossorigin href="/assets/download-Dk-ZjtO6.js">
26
26
  <link rel="modulepreload" crossorigin href="/assets/plus-Q2yW6OE7.js">
27
27
  <link rel="modulepreload" crossorigin href="/assets/x-B_N4OPjy.js">
28
- <link rel="modulepreload" crossorigin href="/assets/messages-Cf5hpZE6.js">
29
- <link rel="modulepreload" crossorigin href="/assets/locale-store-CF4erhjB.js">
28
+ <link rel="modulepreload" crossorigin href="/assets/messages-C72stReU.js">
29
+ <link rel="modulepreload" crossorigin href="/assets/locale-store-BkeaPZpn.js">
30
30
  <link rel="modulepreload" crossorigin href="/assets/cn-JdwAhgNB.js">
31
31
  <link rel="modulepreload" crossorigin href="/assets/schemas-BHS7bo06.js">
32
32
  <link rel="modulepreload" crossorigin href="/assets/product-delivery-CV4pDOtG.js">
33
33
  <link rel="modulepreload" crossorigin href="/assets/copy-to-clipboard-HOJ79TWv.js">
34
- <link rel="modulepreload" crossorigin href="/assets/markdown-view-CQvzsE24.js">
34
+ <link rel="modulepreload" crossorigin href="/assets/markdown-view-Ca7BRBLL.js">
35
35
  <link rel="modulepreload" crossorigin href="/assets/dist-DLmwHyAh.js">
36
36
  <link rel="modulepreload" crossorigin href="/assets/vendor-swr-BIWyz7Rc.js">
37
37
  <link rel="modulepreload" crossorigin href="/assets/check-DUBLcKHA.js">
@@ -48,15 +48,15 @@
48
48
  <link rel="modulepreload" crossorigin href="/assets/files-BArWTfr7.js">
49
49
  <link rel="modulepreload" crossorigin href="/assets/tool-activity-R8V9l6nk.js">
50
50
  <link rel="modulepreload" crossorigin href="/assets/button-CtTvuElV.js">
51
- <link rel="modulepreload" crossorigin href="/assets/gateway-startup-retry-CR7Xg8As.js">
52
- <link rel="modulepreload" crossorigin href="/assets/registry-api-BsRBlji7.js">
51
+ <link rel="modulepreload" crossorigin href="/assets/gateway-startup-retry-DAq74TZe.js">
52
+ <link rel="modulepreload" crossorigin href="/assets/registry-api-CviQoUBf.js">
53
53
  <link rel="modulepreload" crossorigin href="/assets/config-reload-event-Bjh2zoKp.js">
54
- <link rel="modulepreload" crossorigin href="/assets/gateway-config-swr-CMNbl0FZ.js">
54
+ <link rel="modulepreload" crossorigin href="/assets/gateway-config-swr-BW3Bx-aV.js">
55
55
  <link rel="modulepreload" crossorigin href="/assets/electron-env-DH5wF8X8.js">
56
- <link rel="modulepreload" crossorigin href="/assets/activity-store-DfBjTSo9.js">
57
- <link rel="modulepreload" crossorigin href="/assets/theme-store-BOgkc_9D.js">
56
+ <link rel="modulepreload" crossorigin href="/assets/activity-store-CeS1bgXP.js">
57
+ <link rel="modulepreload" crossorigin href="/assets/theme-store-BtkaVpMm.js">
58
58
  <link rel="stylesheet" crossorigin href="/assets/markdown-view-Y68dCxuc.css">
59
- <link rel="stylesheet" crossorigin href="/assets/index-B7CX4Qob.css">
59
+ <link rel="stylesheet" crossorigin href="/assets/index-Cu8xqZQ9.css">
60
60
  </head>
61
61
  <body>
62
62
  <div id="root"></div>
package/dist/package.js CHANGED
@@ -1,4 +1,4 @@
1
1
  //#region package.json
2
- var version = "0.0.251";
2
+ var version = "0.0.253";
3
3
  //#endregion
4
4
  export { version };
@@ -11,6 +11,7 @@ function createDefaultNewSessionPreferences() {
11
11
  return {
12
12
  version: 1,
13
13
  modelByAgent: {},
14
+ executionModeByProject: {},
14
15
  lastChatScope: noProjectScope()
15
16
  };
16
17
  }
@@ -43,6 +44,13 @@ function parseModelPreferences(value) {
43
44
  }
44
45
  return result;
45
46
  }
47
+ function parseExecutionModePreferences(value) {
48
+ if (!value || typeof value !== "object" || Array.isArray(value)) return {};
49
+ return Object.fromEntries(Object.entries(value).flatMap(([rawProjectId, rawMode]) => {
50
+ const projectId = normalized(rawProjectId);
51
+ return projectId && (rawMode === "local_checkout" || rawMode === "managed_worktree") ? [[projectId, rawMode]] : [];
52
+ }));
53
+ }
46
54
  function parseNewSessionPreferences(value) {
47
55
  const fallback = createDefaultNewSessionPreferences();
48
56
  if (!value || typeof value !== "object" || Array.isArray(value)) return fallback;
@@ -53,6 +61,7 @@ function parseNewSessionPreferences(value) {
53
61
  version: 1,
54
62
  ...selectedAgentId ? { selectedAgentId } : {},
55
63
  modelByAgent: parseModelPreferences(record.modelByAgent),
64
+ executionModeByProject: parseExecutionModePreferences(record.executionModeByProject),
56
65
  lastChatScope: parseProjectScope(record.lastChatScope) ?? noProjectScope()
57
66
  };
58
67
  }
@@ -159,8 +159,13 @@ z.discriminatedUnion("type", [
159
159
  serverEnvelope("response.clarification", z.strictObject({
160
160
  responseId: z.string().min(1).max(160),
161
161
  requestId: z.string().min(1).max(160),
162
+ kind: z.enum(["input", "approval"]),
162
163
  question: z.string().min(1).max(8e3),
163
- choices: z.array(z.string().max(1e3)).max(20).optional()
164
+ choices: z.array(z.string().max(1e3)).max(20).optional(),
165
+ suggestedAnswer: z.string().max(1e3).optional(),
166
+ version: z.number().int().positive(),
167
+ createdAt: z.number().nonnegative(),
168
+ expiresAt: z.number().nonnegative().optional()
164
169
  })),
165
170
  serverEnvelope("response.text.delta", z.strictObject({
166
171
  responseId: z.string().min(1).max(160),
@@ -94,7 +94,8 @@ export interface AgentManagerConfig {
94
94
  };
95
95
  /** Gateway: exposes AutomationService for the `automation` tool. */
96
96
  getAutomationService?: () => AutomationService | undefined;
97
- getBrowserRecipeService?: () => import('../browser/recipes/index.js').BrowserRecipeService | undefined;
97
+ getBrowserAutomationService?: () => import('../browser/automations/index.js').BrowserAutomationService | undefined;
98
+ emitBrowserEvent?: (type: string, payload: unknown) => void;
98
99
  /** Gateway: exposes first-class xopc product objects for the `xopc_use` tool. */
99
100
  getNotesService?: () => NotesService | undefined;
100
101
  getProjectService?: () => ProjectService | undefined;
@@ -2,25 +2,27 @@ import { resolveStateDir } from "../config/paths-state.js";
2
2
  import { createLogger } from "../utils/logger/index.js";
3
3
  import { init_logger } from "../utils/logger.js";
4
4
  import { isXopcDatabaseOpen } from "../storage/sqlite/connection.js";
5
+ import { consumeClarificationApproval } from "../storage/sqlite/clarification-wait-repository.js";
5
6
  import { getInteractionState } from "../storage/sqlite/interaction-state-repository.js";
6
7
  import { getSessionMetadata } from "../storage/sqlite/session-repository.js";
7
8
  import "../storage/sqlite/index.js";
8
9
  import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
10
+ import { applyConfigOverrides } from "../config/runtime-overrides.js";
9
11
  import { expandWorkspacePathString, init_workspace_path } from "../config/workspace-path.js";
10
12
  import { init_agent_scope, resolveAgentProfileDir } from "./agent-scope.js";
11
- import { init_paths, resolveBundledSkillsDir } from "../config/paths.js";
12
- import { CredentialResolver, init_credentials } from "../auth/credentials.js";
13
13
  import { init_session_key, parseSessionKey } from "../routing/session-key.js";
14
+ import { resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
15
+ import { init_paths, resolveBundledSkillsDir } from "../config/paths.js";
14
16
  import { init_sync_provider_auth, resolveProviderApiKeySync } from "../auth/sync-provider-auth.js";
17
+ import { CredentialResolver, init_credentials } from "../auth/credentials.js";
15
18
  import { getApiKeySync, getDefaultModelSync, init_providers, resolveModel } from "../providers/index.js";
16
19
  import { createExtensionAwareStreamFn } from "../providers/extension-stream-bridge.js";
17
- import { applyConfigOverrides } from "../config/runtime-overrides.js";
18
- import { resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
19
20
  import { extractTextContent } from "./context/workspace.js";
20
21
  import { buildExecutionScopeContextForPrompt } from "./context/execution-scope.js";
21
22
  import { clearBootstrapSnapshot } from "./bootstrap/bootstrap-cache.js";
22
23
  import { resolveBootstrapContextSync } from "./bootstrap/bootstrap-files.js";
23
24
  import { loadProjectAgentsContextFile } from "./bootstrap/project-agents-context.js";
25
+ import { getEmbeddedExecutionRunId } from "./embedded/execution-context.js";
24
26
  import { parseExternalToolRef } from "./external-tools/refs.js";
25
27
  import { mcpToolPolicyId } from "./mcp/bundle-mcp-policy.js";
26
28
  import { disposeAllSessionMcpRuntimes, retireSessionMcpRuntimeForSessionKey } from "./mcp/bundle-mcp-runtime.js";
@@ -47,6 +49,7 @@ import { maybeRequestChannelExecApproval } from "../channels/exec-approval-runti
47
49
  import { SkillFilesystemWatcher } from "./skills/filesystem-watcher.js";
48
50
  import { ProjectTrustStore, hasTrustRequiringProjectResources } from "../project-trust/trust-store.js";
49
51
  import { basename, resolve, sep } from "node:path";
52
+ import { createHash } from "node:crypto";
50
53
  import { Agent } from "@earendil-works/pi-agent-core";
51
54
  //#region src/agent/agent-manager.ts
52
55
  /**
@@ -245,7 +248,8 @@ var AgentManager = class {
245
248
  getSessionStore: this.config.getSessionStore,
246
249
  gatewayClarify: this.config.gatewayClarify,
247
250
  getAutomationService: this.config.getAutomationService,
248
- getBrowserRecipeService: this.config.getBrowserRecipeService,
251
+ getBrowserAutomationService: this.config.getBrowserAutomationService,
252
+ emitBrowserEvent: this.config.emitBrowserEvent,
249
253
  getNotesService: this.config.getNotesService,
250
254
  getProjectService: this.config.getProjectService,
251
255
  getLocalAppService: this.config.getLocalAppService,
@@ -1067,12 +1071,26 @@ var AgentManager = class {
1067
1071
  async requestToolConfirmation(sessionKey, toolName, detail) {
1068
1072
  const request = this.config.gatewayClarify?.requestClarification;
1069
1073
  if (!request) return false;
1070
- return await request(sessionKey, {
1074
+ const approvalKey = createHash("sha256").update(`${toolName}\0${detail}`).digest("hex");
1075
+ const existing = consumeClarificationApproval(sessionKey, approvalKey);
1076
+ if (existing) return existing === "approved";
1077
+ const runId = getEmbeddedExecutionRunId();
1078
+ if (!runId) return false;
1079
+ const result = await request({
1080
+ sessionKey,
1081
+ runId,
1082
+ toolCallId: `approval:${approvalKey}`
1083
+ }, {
1071
1084
  kind: "approval",
1072
1085
  question: `Allow ${toolName} to run once?\n${detail.slice(0, 500)}`,
1073
1086
  choices: ["Allow once", "Deny"],
1074
- default: "Deny"
1075
- }).catch(() => "Deny") === "Allow once";
1087
+ suggestedAnswer: "Deny",
1088
+ approvalKey
1089
+ }).catch(() => ({
1090
+ status: "answered",
1091
+ answer: "Deny"
1092
+ }));
1093
+ return result.status === "answered" && result.answer === "Allow once";
1076
1094
  }
1077
1095
  refreshDynamicContextIfChanged(instance) {
1078
1096
  const nextProjectContext = this.buildExecutionScopeContext(instance.sessionKey);
@@ -4,10 +4,10 @@ import { finishContextExtractionRun } from "../../storage/sqlite/context-extract
4
4
  import { getSessionMetadata } from "../../storage/sqlite/session-repository.js";
5
5
  import { loadCompactionSourceSnapshot } from "../../storage/sqlite/transcript-repository.js";
6
6
  import "../../storage/sqlite/index.js";
7
+ import { extractProfileAgentId } from "../../config/agent-profile.js";
7
8
  import { init_sync_provider_auth, resolveProviderApiKeySync } from "../../auth/sync-provider-auth.js";
8
9
  import { getApiKeySync, init_providers, resolveModel } from "../../providers/index.js";
9
10
  import { createExtensionAwareStreamFn } from "../../providers/extension-stream-bridge.js";
10
- import { extractProfileAgentId } from "../../config/agent-profile.js";
11
11
  import { extractTextContent } from "../context/workspace.js";
12
12
  import { listUserAssertions } from "../../user-model/repository.js";
13
13
  import { readAgentMessageContent } from "../memory/agent-message-access.js";
@@ -3,7 +3,7 @@ import { execFile } from "node:child_process";
3
3
  import { readFile, realpath, stat } from "node:fs/promises";
4
4
  import { promisify } from "node:util";
5
5
  //#region src/agent/coding/repository-instructions.ts
6
- const exec$1 = promisify(execFile);
6
+ const exec = promisify(execFile);
7
7
  function inside(root, path) {
8
8
  const rel = relative(root, path);
9
9
  return rel !== ".." && !rel.startsWith(`..${sep}`) && !isAbsolute(rel);
@@ -27,7 +27,7 @@ var RepositoryInstructions = class RepositoryInstructions {
27
27
  } catch {}
28
28
  const canonicalWorkspace = root;
29
29
  try {
30
- root = await realpath((await exec$1("git", ["rev-parse", "--show-toplevel"], {
30
+ root = await realpath((await exec("git", ["rev-parse", "--show-toplevel"], {
31
31
  cwd: root,
32
32
  timeout: 5e3
33
33
  })).stdout.trim());
@@ -4,11 +4,11 @@ import { createHash } from "node:crypto";
4
4
  import { lstat, readFile, readlink, realpath } from "node:fs/promises";
5
5
  import { promisify } from "node:util";
6
6
  //#region src/agent/coding/workspace-revision.ts
7
- const exec$1 = promisify(execFile);
7
+ const exec = promisify(execFile);
8
8
  /** A content fingerprint, including user changes and untracked files, without changing Git state. */
9
9
  async function readWorkspaceRevision(workspace) {
10
10
  let cwd = workspace;
11
- const git = async (args) => (await exec$1("git", [
11
+ const git = async (args) => (await exec("git", [
12
12
  "-c",
13
13
  "core.fsmonitor=false",
14
14
  ...args
@@ -3,7 +3,7 @@ import { execFile } from "node:child_process";
3
3
  import { realpath } from "node:fs/promises";
4
4
  import { promisify } from "node:util";
5
5
  //#region src/agent/commands/command-isolation.ts
6
- const exec$1 = promisify(execFile);
6
+ const exec = promisify(execFile);
7
7
  /** Docker is opt-in and never falls back to host execution or pulls an image implicitly. */
8
8
  async function isolatedCommand(input) {
9
9
  if (!input.isolation || input.isolation.mode === "host") return {
@@ -59,7 +59,7 @@ async function isolatedCommand(input) {
59
59
  }
60
60
  async function removeCommandContainer(name) {
61
61
  if (!/^xopc-command-[a-f0-9-]{36}$/.test(name)) throw new Error("Invalid command container name");
62
- await exec$1("docker", [
62
+ await exec("docker", [
63
63
  "rm",
64
64
  "--force",
65
65
  name
@@ -1,2 +1,3 @@
1
- export declare function runWithEmbeddedExecutionSession<T>(sessionKey: string, run: () => T): T;
1
+ export declare function runWithEmbeddedExecutionSession<T>(sessionKey: string, run: () => T, runId?: string): T;
2
2
  export declare function getEmbeddedExecutionSession(): string | undefined;
3
+ export declare function getEmbeddedExecutionRunId(): string | undefined;
@@ -1,11 +1,17 @@
1
1
  import { AsyncLocalStorage } from "node:async_hooks";
2
2
  //#region src/agent/embedded/execution-context.ts
3
3
  const executionSessionStorage = new AsyncLocalStorage();
4
- function runWithEmbeddedExecutionSession(sessionKey, run) {
5
- return executionSessionStorage.run(sessionKey, run);
4
+ function runWithEmbeddedExecutionSession(sessionKey, run, runId) {
5
+ return executionSessionStorage.run({
6
+ sessionKey,
7
+ runId
8
+ }, run);
6
9
  }
7
10
  function getEmbeddedExecutionSession() {
8
- return executionSessionStorage.getStore();
11
+ return executionSessionStorage.getStore()?.sessionKey;
12
+ }
13
+ function getEmbeddedExecutionRunId() {
14
+ return executionSessionStorage.getStore()?.runId;
9
15
  }
10
16
  //#endregion
11
- export { getEmbeddedExecutionSession, runWithEmbeddedExecutionSession };
17
+ export { getEmbeddedExecutionRunId, getEmbeddedExecutionSession, runWithEmbeddedExecutionSession };
@@ -4,7 +4,7 @@ export { installSessionToolResultGuard, guardSessionManager, getRawSessionAppend
4
4
  export { repairAssistantUsageInSessionManager } from './session-manager-init.js';
5
5
  export { openSqliteHydratingSessionManager } from './sqlite-hydrating-session-manager.js';
6
6
  export { createSqliteTranscriptRuntime, InMemoryTranscriptRuntime, type EmbeddedTranscriptRuntime, } from './transcript-runtime.js';
7
- export { getEmbeddedExecutionSession, runWithEmbeddedExecutionSession } from './execution-context.js';
7
+ export { getEmbeddedExecutionRunId, getEmbeddedExecutionSession, runWithEmbeddedExecutionSession, } from './execution-context.js';
8
8
  export { acquireEmbeddedSessionRunner, buildEmbeddedRunnerFingerprint, evictAllEmbeddedSessionRunners, evictEmbeddedSessionRunner, getEmbeddedSessionRunnerIdleTtlMs, getEmbeddedSessionRunnerStats, isEmbeddedSessionRunnerEnabled, resetEmbeddedSessionRunnerForTest, } from './session-runner.js';
9
9
  export { DEFAULT_MAX_LIVE_TOOL_RESULT_CHARS, resolveLiveToolResultMaxChars, truncateToolResultMessage, } from './tool-result-truncation.js';
10
10
  export { runXopcEmbeddedTurn, abortEmbeddedRun, queueEmbeddedSteer } from './run-turn.js';
@@ -1,4 +1,4 @@
1
- import { getEmbeddedExecutionSession, runWithEmbeddedExecutionSession } from "./execution-context.js";
1
+ import { getEmbeddedExecutionRunId, getEmbeddedExecutionSession, runWithEmbeddedExecutionSession } from "./execution-context.js";
2
2
  import { abortEmbeddedRun, getEmbeddedRunBySessionKey, queueEmbeddedSteer } from "./runs.js";
3
3
  import { DEFAULT_MAX_LIVE_TOOL_RESULT_CHARS, resolveLiveToolResultMaxChars, truncateToolResultMessage } from "./tool-result-truncation.js";
4
4
  import { getRawSessionAppendMessage, guardSessionManager, installSessionToolResultGuard } from "./session-tool-result-guard.js";
@@ -9,4 +9,4 @@ import { InMemoryTranscriptRuntime, createSqliteTranscriptRuntime } from "./tran
9
9
  import { runXopcEmbeddedTurn } from "./run-turn.js";
10
10
  import { runEmbeddedTurnForSession } from "./run-for-session.js";
11
11
  import { CURRENT_SESSION_VERSION, PiTranscriptManager } from "./pi-transcript.js";
12
- export { CURRENT_SESSION_VERSION, DEFAULT_MAX_LIVE_TOOL_RESULT_CHARS, InMemoryTranscriptRuntime, PiTranscriptManager, abortEmbeddedRun, acquireEmbeddedSessionRunner, buildEmbeddedRunnerFingerprint, createSqliteTranscriptRuntime, evictAllEmbeddedSessionRunners, evictEmbeddedSessionRunner, getEmbeddedExecutionSession, getEmbeddedRunBySessionKey, getEmbeddedSessionRunnerIdleTtlMs, getEmbeddedSessionRunnerStats, getRawSessionAppendMessage, guardSessionManager, installSessionToolResultGuard, isEmbeddedSessionRunnerEnabled, openSqliteHydratingSessionManager, queueEmbeddedSteer, repairAssistantUsageInSessionManager, resetEmbeddedSessionRunnerForTest, resolveLiveToolResultMaxChars, runEmbeddedTurnForSession, runWithEmbeddedExecutionSession, runXopcEmbeddedTurn, truncateToolResultMessage };
12
+ export { CURRENT_SESSION_VERSION, DEFAULT_MAX_LIVE_TOOL_RESULT_CHARS, InMemoryTranscriptRuntime, PiTranscriptManager, abortEmbeddedRun, acquireEmbeddedSessionRunner, buildEmbeddedRunnerFingerprint, createSqliteTranscriptRuntime, evictAllEmbeddedSessionRunners, evictEmbeddedSessionRunner, getEmbeddedExecutionRunId, getEmbeddedExecutionSession, getEmbeddedRunBySessionKey, getEmbeddedSessionRunnerIdleTtlMs, getEmbeddedSessionRunnerStats, getRawSessionAppendMessage, guardSessionManager, installSessionToolResultGuard, isEmbeddedSessionRunnerEnabled, openSqliteHydratingSessionManager, queueEmbeddedSteer, repairAssistantUsageInSessionManager, resetEmbeddedSessionRunnerForTest, resolveLiveToolResultMaxChars, runEmbeddedTurnForSession, runWithEmbeddedExecutionSession, runXopcEmbeddedTurn, truncateToolResultMessage };
@@ -1,6 +1,6 @@
1
1
  import { init_paths, resolveModelsJsonPath } from "../../config/paths.js";
2
- import { CredentialResolver, init_credentials } from "../../auth/credentials.js";
3
2
  import { init_sync_provider_auth, resolveProviderApiKeySync } from "../../auth/sync-provider-auth.js";
3
+ import { CredentialResolver, init_credentials } from "../../auth/credentials.js";
4
4
  import { XopcModelCredentialStore, init_model_credential_store } from "../../auth/model-credential-store.js";
5
5
  import { init_register_bundled_oauth_flows, registerBundledOAuthFlows } from "../../providers/register-bundled-oauth-flows.js";
6
6
  import { init_register_runtime_providers, registerRuntimeProviders } from "../../providers/register-runtime-providers.js";
@@ -1,8 +1,9 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
3
  import { parseTurnOutcome } from "../../../packages/gateway-contract/src/turn-outcome.js";
4
- import { init_providers, resolveModel } from "../../providers/index.js";
5
4
  import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
5
+ import { init_providers, resolveModel } from "../../providers/index.js";
6
+ import { runWithEmbeddedExecutionSession } from "./execution-context.js";
6
7
  import { resolveAgentTurnTimeoutMs } from "../orchestration/run-agent-turn-with-timeout.js";
7
8
  import { resolvePromptCachePolicy } from "../../providers/prompt-cache-plan.js";
8
9
  import { evaluateContextBudget } from "../memory/context-budget.js";
@@ -27,7 +28,7 @@ async function runEmbeddedTurnForSession(params) {
27
28
  parentSignal: params.abortSignal
28
29
  });
29
30
  const finish = async (result) => {
30
- if (result.stopReason === "connection_required") return result;
31
+ if (result.stopReason === "connection_required" || result.stopReason === "clarification_required") return result;
31
32
  try {
32
33
  const rows = await sessionStore.loadTranscriptRows(sessionKey);
33
34
  const hasTurn = rows.some((source) => {
@@ -180,7 +181,7 @@ async function runEmbeddedTurnForSession(params) {
180
181
  total: resolvedCandidates.length
181
182
  }, "Agent model fallback started");
182
183
  try {
183
- const turnResult = await runXopcEmbeddedTurn({
184
+ const turnResult = await runWithEmbeddedExecutionSession(sessionKey, () => runXopcEmbeddedTurn({
184
185
  sessionKey,
185
186
  runId,
186
187
  userMessage: userMessageForTurn,
@@ -199,7 +200,7 @@ async function runEmbeddedTurnForSession(params) {
199
200
  onEvent: params.onEvent,
200
201
  onAgentEvent: (event) => agentManager.emitRuntimeEvent(sessionKey, event),
201
202
  resumeLastUserMessage
202
- });
203
+ }), runId);
203
204
  if (turnResult.ok) {
204
205
  if (isFallbackAttempt) log.info({
205
206
  sessionKey,
@@ -1,5 +1,6 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { getClarificationResumeInput, isClarificationSuspended } from "../../storage/sqlite/clarification-wait-repository.js";
3
4
  import { getConnectionResumeInput, isConnectionSuspended } from "../../storage/sqlite/connection-wait-repository.js";
4
5
  import { EmbeddedRunConflictError, abortEmbeddedRun, acquireEmbeddedRunLease, queueEmbeddedSteer } from "./runs.js";
5
6
  import { lastAssistantPlainText, subscribeEmbeddedSessionEvents } from "./subscribe-session.js";
@@ -235,6 +236,7 @@ async function runXopcEmbeddedTurn(params) {
235
236
  });
236
237
  let policyStopped = false;
237
238
  let connectionStopped = false;
239
+ let clarificationStopped = false;
238
240
  params.turnPolicy?.reset();
239
241
  session.agent.beforeToolCall = async (context, signal) => {
240
242
  if (connectionStopped) return {
@@ -242,6 +244,11 @@ async function runXopcEmbeddedTurn(params) {
242
244
  reason: "Waiting for the user to connect an app.",
243
245
  terminate: true
244
246
  };
247
+ if (clarificationStopped) return {
248
+ block: true,
249
+ reason: "Waiting for the user to answer.",
250
+ terminate: true
251
+ };
245
252
  const decision = await params.turnPolicy?.beforeToolCall(context, signal);
246
253
  if (decision?.block) {
247
254
  policyStopped ||= decision.terminate === true;
@@ -259,6 +266,7 @@ async function runXopcEmbeddedTurn(params) {
259
266
  };
260
267
  session.agent.afterToolCall = async (context) => {
261
268
  connectionStopped ||= isConnectionSuspended(sessionKey, runId);
269
+ clarificationStopped ||= isClarificationSuspended(sessionKey, runId);
262
270
  const scoped = context.toolCall.name === "read_file" ? await instructions.forTool(context.toolCall.name, context.args) : "";
263
271
  const checked = await verification.afterTool(context);
264
272
  if (scoped) checked.result.content.unshift({
@@ -273,7 +281,7 @@ async function runXopcEmbeddedTurn(params) {
273
281
  };
274
282
  session.agent.shouldStopAfterTurn = (context) => {
275
283
  policyStopped ||= params.turnPolicy?.shouldStopAfterTurn(context) ?? false;
276
- return policyStopped || connectionStopped;
284
+ return policyStopped || connectionStopped || clarificationStopped;
277
285
  };
278
286
  unsubscribe = subscribeEmbeddedSessionEvents(session, (event) => {
279
287
  if (event.type === "message_end" && event.message.role === "assistant") recordPromptCacheTouch(sessionKey, resolvedModel, event.message.usage);
@@ -290,11 +298,17 @@ async function runXopcEmbeddedTurn(params) {
290
298
  try {
291
299
  await runAgentTurnWithTimeout(session.agent, async () => {
292
300
  const connectionResume = getConnectionResumeInput(sessionKey, runId);
301
+ const clarificationResume = getClarificationResumeInput(sessionKey, runId);
293
302
  if (connectionResume) await session.sendCustomMessage({
294
303
  customType: "connection_resume",
295
304
  content: connectionResume.content,
296
305
  display: false
297
306
  }, { triggerTurn: true });
307
+ else if (clarificationResume) await session.sendCustomMessage({
308
+ customType: "clarification_resume",
309
+ content: clarificationResume.content,
310
+ display: false
311
+ }, { triggerTurn: true });
298
312
  else if (params.resumeLastUserMessage) await session.agent.continue();
299
313
  else {
300
314
  const text = userMessageToPromptText(userMessage);
@@ -302,7 +316,8 @@ async function runXopcEmbeddedTurn(params) {
302
316
  await session.prompt(text, images.length > 0 ? { images } : void 0);
303
317
  }
304
318
  await session.agent.waitForIdle();
305
- if (connectionStopped) return;
319
+ clarificationStopped ||= isClarificationSuspended(sessionKey, runId);
320
+ if (connectionStopped || clarificationStopped) return;
306
321
  await maybeRetryTurnAfterTransientLlmFailure(session.agent, {
307
322
  sessionKey,
308
323
  log,
@@ -330,6 +345,10 @@ async function runXopcEmbeddedTurn(params) {
330
345
  runId,
331
346
  sessionKey
332
347
  });
348
+ if (clarificationStopped) runner.piSm.appendCustomEntry("clarification_required", {
349
+ runId,
350
+ sessionKey
351
+ });
333
352
  runner.piSm.appendCustomEntry("coding_verification", {
334
353
  runId,
335
354
  workspace: workspaceDir,
@@ -356,7 +375,7 @@ async function runXopcEmbeddedTurn(params) {
356
375
  });
357
376
  return {
358
377
  ok: true,
359
- ...connectionStopped ? { stopReason: "connection_required" } : {},
378
+ ...connectionStopped ? { stopReason: "connection_required" } : clarificationStopped ? { stopReason: "clarification_required" } : {},
360
379
  lastAssistantText: lastAssistantPlainText(session)
361
380
  };
362
381
  } finally {
@@ -89,7 +89,7 @@ export type RunXopcEmbeddedTurnParams = {
89
89
  };
90
90
  export type RunXopcEmbeddedTurnResult = {
91
91
  ok: boolean;
92
- stopReason?: 'connection_required';
92
+ stopReason?: 'connection_required' | 'clarification_required';
93
93
  /** False for harness failures that must not trigger another model attempt. */
94
94
  retryable?: boolean;
95
95
  errorMessage?: string;
@@ -19,6 +19,7 @@ export declare class ComposioToolProvider implements ExternalToolProvider {
19
19
  private readonly deps;
20
20
  readonly source: "composio";
21
21
  private readonly adapter;
22
+ private readonly unavailableToolkits;
22
23
  constructor(deps: ComposioToolProviderDeps);
23
24
  search(query: string): Promise<ExternalToolSearchHit[]>;
24
25
  describe(toolRef: string): Promise<ExternalToolDescriptor | undefined>;
@@ -1,3 +1,5 @@
1
+ import { createLogger } from "../../utils/logger/index.js";
2
+ import { init_logger } from "../../utils/logger.js";
1
3
  import { connectionBinding, connectionBindings, publishConnectionWait, requireSessionConnection } from "../../storage/sqlite/connection-wait-repository.js";
2
4
  import { consumeConnectorApproval, createConnectorApproval, getConnectorApproval, getConnectorInstallation, listConnectorActionMetadata, listConnectorConnections, listConnectorInstallations, upsertConnectorActionMetadata, upsertConnectorInstallation } from "../../storage/sqlite/connector-repository.js";
3
5
  import "../../storage/sqlite/index.js";
@@ -10,7 +12,9 @@ import { connectorPrincipalForSession } from "../../connectors/principal.js";
10
12
  import { ExternalToolSearchError } from "./search-error.js";
11
13
  import { externalToolRef, parseExternalToolRef } from "./refs.js";
12
14
  //#region src/agent/external-tools/composio-provider.ts
15
+ init_logger();
13
16
  const CONNECTION_ARGUMENT = "xopcConnectionId";
17
+ const log = createLogger("ComposioToolProvider");
14
18
  function textResult(value) {
15
19
  return {
16
20
  content: [{
@@ -108,47 +112,73 @@ function actionInputSchema(action) {
108
112
  var ComposioToolProvider = class {
109
113
  source = "composio";
110
114
  adapter;
115
+ unavailableToolkits = /* @__PURE__ */ new Set();
111
116
  constructor(deps) {
112
117
  this.deps = deps;
113
118
  this.adapter = deps.adapter ?? new ComposioSessionsAdapter();
114
119
  }
115
120
  async search(query) {
116
121
  const available = this.availableInstallations();
117
- const toolkits = available.installations.map(toolkitFromInstallation);
118
- if (toolkits.length === 0) return [];
119
- let phase = "create_session";
120
- let result;
121
- try {
122
- const session = await this.adapter.createSession({
123
- principalId: available.principalId,
124
- toolkits,
125
- authConfigs: getConfiguredComposioAuthConfigs(this.deps.getConfig(), toolkits)
126
- });
127
- phase = "search";
128
- result = await session.search({
129
- query,
130
- toolkits
131
- });
132
- } catch (cause) {
133
- throw new ExternalToolSearchError(phase, toolkits, cause);
134
- }
135
- const schemas = result && typeof result === "object" && !Array.isArray(result) ? result.toolSchemas : void 0;
122
+ if (available.installations.length === 0) return [];
123
+ const settled = await Promise.allSettled(available.installations.map(async (installation) => {
124
+ const toolkit = toolkitFromInstallation(installation);
125
+ let phase = "create_session";
126
+ try {
127
+ const session = await this.adapter.createSession({
128
+ principalId: available.principalId,
129
+ toolkits: [toolkit],
130
+ authConfigs: getConfiguredComposioAuthConfigs(this.deps.getConfig(), [toolkit])
131
+ });
132
+ phase = "search";
133
+ return {
134
+ installation,
135
+ toolkit,
136
+ result: await session.search({
137
+ query,
138
+ toolkits: [toolkit]
139
+ })
140
+ };
141
+ } catch (cause) {
142
+ throw new ExternalToolSearchError(phase, [toolkit], cause);
143
+ }
144
+ }));
136
145
  const hits = [];
137
- if (!schemas || typeof schemas !== "object" || Array.isArray(schemas)) return hits;
138
- for (const [actionId, schema] of Object.entries(schemas)) {
139
- const toolkit = toolkitForAction(actionId, toolkits);
140
- if (!toolkit || !isComposioActionAllowedByCatalog(actionId)) continue;
141
- const installation = available.installations.find((candidate) => toolkitFromInstallation(candidate) === toolkit);
142
- if (!installation) continue;
143
- if (!isToolInputSchema(schema && typeof schema === "object" ? schema.inputSchema : void 0)) continue;
144
- upsertConnectorActionMetadata(contractFromSearch(installation.connectorId, toolkit, actionId, schema));
145
- hits.push({
146
- toolRef: externalToolRef(this.source, installation.id, actionId),
147
- source: this.source,
148
- namespace: toolkit,
149
- title: actionId,
150
- summary: schemaSummary(schema, `Run ${actionId} in ${toolkit}.`)
151
- });
146
+ const failures = [];
147
+ for (const attempt of settled) {
148
+ if (attempt.status === "rejected") {
149
+ failures.push(attempt.reason instanceof ExternalToolSearchError ? attempt.reason : new ExternalToolSearchError("search", [], attempt.reason));
150
+ continue;
151
+ }
152
+ const { installation, toolkit, result } = attempt.value;
153
+ this.unavailableToolkits.delete(toolkit);
154
+ const schemas = result && typeof result === "object" && !Array.isArray(result) ? result.toolSchemas : void 0;
155
+ if (!schemas || typeof schemas !== "object" || Array.isArray(schemas)) continue;
156
+ for (const [actionId, schema] of Object.entries(schemas)) {
157
+ if (toolkitForAction(actionId, [toolkit]) !== toolkit || !isComposioActionAllowedByCatalog(actionId)) continue;
158
+ if (!isToolInputSchema(schema && typeof schema === "object" ? schema.inputSchema : void 0)) continue;
159
+ upsertConnectorActionMetadata(contractFromSearch(installation.connectorId, toolkit, actionId, schema));
160
+ hits.push({
161
+ toolRef: externalToolRef(this.source, installation.id, actionId),
162
+ source: this.source,
163
+ namespace: toolkit,
164
+ title: actionId,
165
+ summary: schemaSummary(schema, `Run ${actionId} in ${toolkit}.`)
166
+ });
167
+ }
168
+ }
169
+ if (failures.length === settled.length) {
170
+ const first = failures[0];
171
+ throw new ExternalToolSearchError(first.phase, [...new Set(failures.flatMap((failure) => failure.toolkits))], first);
172
+ }
173
+ if (failures.length > 0) {
174
+ const failedToolkits = [...new Set(failures.flatMap((failure) => failure.toolkits))];
175
+ const newlyUnavailable = failedToolkits.filter((toolkit) => !this.unavailableToolkits.has(toolkit));
176
+ failedToolkits.forEach((toolkit) => this.unavailableToolkits.add(toolkit));
177
+ if (newlyUnavailable.length > 0) log.warn({
178
+ failedToolkits: newlyUnavailable,
179
+ failureCount: newlyUnavailable.length,
180
+ err: failures[0]
181
+ }, `Composio tool discovery skipped ${newlyUnavailable.length} unavailable toolkit${newlyUnavailable.length === 1 ? "" : "s"}`);
152
182
  }
153
183
  return hits;
154
184
  }
@@ -13,15 +13,17 @@ function searchFailureDetails(error) {
13
13
  phase: error.phase,
14
14
  toolkits: error.toolkits
15
15
  } : { phase: "search" };
16
+ const pending = [error];
16
17
  const visited = /* @__PURE__ */ new Set();
17
- let current = error;
18
- while (current && typeof current === "object" && !visited.has(current)) {
18
+ while (pending.length > 0) {
19
+ const current = pending.shift();
20
+ if (!current || typeof current !== "object" || visited.has(current)) continue;
19
21
  visited.add(current);
20
22
  const row = current;
21
23
  if (details.code === void 0 && (typeof row.code === "number" || typeof row.code === "string" && /^[a-zA-Z0-9_.-]{1,100}$/.test(row.code))) details.code = row.code;
22
24
  const status = row.status ?? row.statusCode;
23
25
  if (details.status === void 0 && typeof status === "number") details.status = status;
24
- current = row.cause;
26
+ pending.push(row.cause, row.error);
25
27
  }
26
28
  return details;
27
29
  }
@@ -1,7 +1,7 @@
1
1
  import { getAgentDefaultImageModelConfig, getAgentDefaultModelRef, init_schema, parseModelRef } from "../../config/schema.js";
2
2
  import { init_agent_scope, resolveDefaultAgentId } from "../agent-scope.js";
3
- import { getDefaultModelSync, getModelsByProvider, init_providers, isProviderConfiguredSync, resolveModel } from "../../providers/index.js";
4
3
  import { resolveEffectiveAgentConfigForAgent } from "../../config/agent-profile.js";
4
+ import { getDefaultModelSync, getModelsByProvider, init_providers, isProviderConfiguredSync, resolveModel } from "../../providers/index.js";
5
5
  import { resolveAgentModelFallbackValues, resolveAgentModelPrimaryValue } from "../../config/model-input.js";
6
6
  import { buildCapabilityPlansForConfig } from "../../capabilities/readiness/from-config.js";
7
7
  import "../../capabilities/readiness/index.js";