@xopcai/xopc 0.0.191 → 0.0.192

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 (346) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/telegram/xopc.extension.json +1 -1
  3. package/dist/gateway/static/root/assets/{activity-store-DstnJCS5.js → activity-store-B-tzXpDD.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DvEkT222.js → agent-avatar-dicebear-xOu0qNwc.js} +1 -1
  5. package/dist/gateway/static/root/assets/agents-CxuwvDk0.js +68 -0
  6. package/dist/gateway/static/root/assets/{api-BTL9kayv.js → api-fMItZb-h.js} +1 -1
  7. package/dist/gateway/static/root/assets/{app-management-settings-panel-COpP_pKN.js → app-management-settings-panel-D6Rv3OWI.js} +1 -1
  8. package/dist/gateway/static/root/assets/{appearance-settings-DTVNUEDq.js → appearance-settings-CKoNCwco.js} +1 -1
  9. package/dist/gateway/static/root/assets/apps-page-wAb5dnHZ.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-IpX6VA0o.js → archive-plugin-BokNQBwH.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-CKVFNUi1.js → attachment-load-Dx1HglsM.js} +1 -1
  12. package/dist/gateway/static/root/assets/automations-page-Drgazevs.js +6 -0
  13. package/dist/gateway/static/root/assets/{binary-plugins-BrfvfOS4.js → binary-plugins-CPYAflIG.js} +1 -1
  14. package/dist/gateway/static/root/assets/{block-editor-D9sEfg32.js → block-editor-BFLgl8SS.js} +47 -47
  15. package/dist/gateway/static/root/assets/browser-settings-page-DmYlFJW7.js +8 -0
  16. package/dist/gateway/static/root/assets/{browser-workflow-inputs-BixZ5lCR.js → browser-workflow-inputs-CqLnqA9z.js} +1 -1
  17. package/dist/gateway/static/root/assets/{browser-workflows-page-YEFuodJI.js → browser-workflows-page-Db5v3HtE.js} +2 -2
  18. package/dist/gateway/static/root/assets/capabilities-settings-panel-D7Z8T0o5.js +7 -0
  19. package/dist/gateway/static/root/assets/capability-presets-api-lov0J9A2.js +1 -0
  20. package/dist/gateway/static/root/assets/capability-presets-settings-panel-COjnwO0U.js +3 -0
  21. package/dist/gateway/static/root/assets/{channel-recipient-api-BThDGiO3.js → channel-recipient-api-DSJznouK.js} +1 -1
  22. package/dist/gateway/static/root/assets/channels-settings-DcRYBNN7.js +1 -0
  23. package/dist/gateway/static/root/assets/channels-status-swr-C2UYdebT.js +1 -0
  24. package/dist/gateway/static/root/assets/{code-editor-D4_k-6QN.js → code-editor-dFzqyDXS.js} +1 -1
  25. package/dist/gateway/static/root/assets/{connectors-api-BMMqC0_9.js → connectors-api-3ccRyS3L.js} +1 -1
  26. package/dist/gateway/static/root/assets/connectors-page-FVmvBG9H.js +2 -0
  27. package/dist/gateway/static/root/assets/{cron-expression-Bm8koRoD.js → cron-expression-C9hhCiuo.js} +1 -1
  28. package/dist/gateway/static/root/assets/dependency-picker-CTtZFZug.js +1 -0
  29. package/dist/gateway/static/root/assets/{desktop-pet-CMG3mcaJ.js → desktop-pet-DOUeNVmC.js} +1 -1
  30. package/dist/gateway/static/root/assets/{desktop-pet-settings-D8aaPb0x.js → desktop-pet-settings-D4704vtl.js} +1 -1
  31. package/dist/gateway/static/root/assets/{directory-picker-path-field-C95yW03b.js → directory-picker-path-field-DJDXeA1B.js} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-debug-page-DsG7Z9lV.js → extension-debug-page-C0n2NMF1.js} +1 -1
  33. package/dist/gateway/static/root/assets/{extension-page-CUAXEbAt.js → extension-page-vG-xxRNs.js} +1 -1
  34. package/dist/gateway/static/root/assets/extension-settings-page-CtuY2THd.js +1 -0
  35. package/dist/gateway/static/root/assets/{gateway-config-api-DL70Nakc.js → gateway-config-api-CZra7GuI.js} +1 -1
  36. package/dist/gateway/static/root/assets/{gateway-settings-BgDxQ08c.js → gateway-settings-Cz33jRkR.js} +1 -1
  37. package/dist/gateway/static/root/assets/{gateway-startup-retry-EO9mKvzE.js → gateway-startup-retry-BbVV0udv.js} +1 -1
  38. package/dist/gateway/static/root/assets/{heartbeat-settings-BX7q55uZ.js → heartbeat-settings-D2XMlA_U.js} +1 -1
  39. package/dist/gateway/static/root/assets/home-page-CPrHkPN6.js +3 -0
  40. package/dist/gateway/static/root/assets/html-workspace-editor-bXK5tq64.js +1 -0
  41. package/dist/gateway/static/root/assets/{image-generation-api-Bu7PyVSh.js → image-generation-api-BgrOvhaJ.js} +1 -1
  42. package/dist/gateway/static/root/assets/index-Cg7Xnlu3.css +1 -0
  43. package/dist/gateway/static/root/assets/index-DzmbmOGA.js +150 -0
  44. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-Dt6wS5zW.js → keyboard-shortcuts-settings-BfyAEG1G.js} +1 -1
  45. package/dist/gateway/static/root/assets/local-app-workbench-page-Clz47vSr.js +2 -0
  46. package/dist/gateway/static/root/assets/{local-apps-page-DcD3-N00.js → local-apps-page-BYalcRSY.js} +1 -1
  47. package/dist/gateway/static/root/assets/{locale-store-deR2zRaE.js → locale-store-VOY1wMO9.js} +1 -1
  48. package/dist/gateway/static/root/assets/logs-page-Cxq9WMf5.js +2 -0
  49. package/dist/gateway/static/root/assets/{management-settings-B6EVkJQy.js → management-settings-BQf-6s32.js} +1 -1
  50. package/dist/gateway/static/root/assets/{markdown-editor-BvUebh3C.js → markdown-editor-TWGaF7Xa.js} +2 -2
  51. package/dist/gateway/static/root/assets/{markdown-split-CHUjCnBh.js → markdown-split-Cy_2SN1Q.js} +1 -1
  52. package/dist/gateway/static/root/assets/{media-plugins-DRrtI2O0.js → media-plugins-CkDupqb2.js} +1 -1
  53. package/dist/gateway/static/root/assets/messages-DMJ-6-1m.js +3 -0
  54. package/dist/gateway/static/root/assets/{notes-page-fermYvpI.js → notes-page-kiGRR9jo.js} +1 -1
  55. package/dist/gateway/static/root/assets/notes-workbench-DkYkPGyB.js +4 -0
  56. package/dist/gateway/static/root/assets/{page-tabs-BO262zuu.js → page-tabs-CvzSdYVj.js} +1 -1
  57. package/dist/gateway/static/root/assets/{preview-open-alternatives-yZYTy-2e.js → preview-open-alternatives-kZ0nco7e.js} +1 -1
  58. package/dist/gateway/static/root/assets/{product-open-page-Dgy8XWhR.js → product-open-page-DgoieqQC.js} +1 -1
  59. package/dist/gateway/static/root/assets/project-detail-page-CeSjJd-N.js +1 -0
  60. package/dist/gateway/static/root/assets/projects-page-fZ1rm4b9.js +1 -0
  61. package/dist/gateway/static/root/assets/remote-access-hub-CbYI6KC8.js +1 -0
  62. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-Bud_NTEZ.js +5 -0
  63. package/dist/gateway/static/root/assets/{schema-form-DdE4gtw_.js → schema-form-GlbsCBmv.js} +1 -1
  64. package/dist/gateway/static/root/assets/sessions-page-sOJ_TnLm.js +1 -0
  65. package/dist/gateway/static/root/assets/settings-advanced-gate-BI0u77dt.js +1 -0
  66. package/dist/gateway/static/root/assets/{settings-form-section-CiYU8AvV.js → settings-form-section-CKLns16d.js} +1 -1
  67. package/dist/gateway/static/root/assets/{settings-loading-skeleton-Bv03cWib.js → settings-loading-skeleton-BDzpxgk0.js} +1 -1
  68. package/dist/gateway/static/root/assets/settings-page-BH0pF7QB.js +1 -0
  69. package/dist/gateway/static/root/assets/{settings-page-layout-t_Ox1slk.js → settings-page-layout-J793iqfm.js} +1 -1
  70. package/dist/gateway/static/root/assets/{setup-status-panel-HRG_lK4_.js → setup-status-panel-CGsml89P.js} +1 -1
  71. package/dist/gateway/static/root/assets/{share-preview-page-DF8gW6bo.js → share-preview-page-UTm_7r0l.js} +1 -1
  72. package/dist/gateway/static/root/assets/shares-settings-BM--lgUS.js +1 -0
  73. package/dist/gateway/static/root/assets/skill-reload-api-CGCOC-rV.js +1 -0
  74. package/dist/gateway/static/root/assets/skills-page-iLyaOl48.js +2 -0
  75. package/dist/gateway/static/root/assets/skills-page.utils-Bwid1TGB.js +1 -0
  76. package/dist/gateway/static/root/assets/style-TIDOdKy0.js +7 -0
  77. package/dist/gateway/static/root/assets/{system-settings-panel-Bv7GXFc6.js → system-settings-panel-BcB3p1e3.js} +1 -1
  78. package/dist/gateway/static/root/assets/task-detail-page-DQYEf08v.js +1 -0
  79. package/dist/gateway/static/root/assets/{theme-store-DnBOcGXi.js → theme-store-GVZOImyb.js} +1 -1
  80. package/dist/gateway/static/root/assets/{typed-models-lib-4XBsLEuv.js → typed-models-lib-CT2c85Ju.js} +1 -1
  81. package/dist/gateway/static/root/assets/{use-autosave-BN2QgFGn.js → use-autosave-CcvY7DTh.js} +1 -1
  82. package/dist/gateway/static/root/assets/user-context-page-CGI41bfO.js +1 -0
  83. package/dist/gateway/static/root/assets/{vendor-codemirror--gTq3YAI.js → vendor-codemirror-DRr7hFaD.js} +16 -16
  84. package/dist/gateway/static/root/assets/voice-api-key-field-Ricc3QGo.js +1 -0
  85. package/dist/gateway/static/root/assets/{work-discovery-overlay-nmEAafFl.js → work-discovery-overlay-BoomfqhX.js} +1 -1
  86. package/dist/gateway/static/root/assets/{work-discovery-page-C5Kwe_bc.js → work-discovery-page-mbnepbQk.js} +1 -1
  87. package/dist/gateway/static/root/assets/workflow-run-setup-panel-DSWG2xqL.js +3 -0
  88. package/dist/gateway/static/root/assets/workflows-page-DtV0ruyk.js +5 -0
  89. package/dist/gateway/static/root/index.html +7 -7
  90. package/dist/package.js +1 -1
  91. package/dist/src/agent/agent-manager.d.ts +2 -0
  92. package/dist/src/agent/agent-manager.js +76 -0
  93. package/dist/src/agent/background-review/prompts.d.ts +1 -1
  94. package/dist/src/agent/background-review/prompts.js +1 -1
  95. package/dist/src/agent/background-review/run-background-review.js +3 -12
  96. package/dist/src/agent/embedded/run-for-session.js +3 -0
  97. package/dist/src/agent/embedded/run-turn.js +4 -1
  98. package/dist/src/agent/embedded/session-runner.js +3 -4
  99. package/dist/src/agent/embedded/types.d.ts +10 -1
  100. package/dist/src/agent/embedded/xopc-stream-bridge.js +3 -2
  101. package/dist/src/agent/external-tools/mcp-provider.d.ts +1 -0
  102. package/dist/src/agent/external-tools/mcp-provider.js +21 -6
  103. package/dist/src/agent/image/generation/provider-registry.js +1 -0
  104. package/dist/src/agent/image/generation/providers/dashscope.js +20 -0
  105. package/dist/src/agent/image/generation/providers/fal.d.ts +1 -1
  106. package/dist/src/agent/image/generation/providers/fal.js +12 -6
  107. package/dist/src/agent/image/generation/providers/google.js +8 -0
  108. package/dist/src/agent/image/generation/providers/minimax.js +20 -0
  109. package/dist/src/agent/image/generation/providers/openai.js +36 -26
  110. package/dist/src/agent/image/generation/types.d.ts +13 -0
  111. package/dist/src/agent/mcp/bundle-mcp-gateway.d.ts +1 -0
  112. package/dist/src/agent/mcp/bundle-mcp-gateway.js +2 -1
  113. package/dist/src/agent/mcp/bundle-mcp-policy.d.ts +5 -1
  114. package/dist/src/agent/mcp/bundle-mcp-policy.js +11 -3
  115. package/dist/src/agent/mcp/bundle-mcp-runtime.js +3 -2
  116. package/dist/src/agent/mcp/bundle-mcp-types.d.ts +2 -1
  117. package/dist/src/agent/mcp/index.js +2 -2
  118. package/dist/src/agent/mcp/mcp-stdio-transport.js +1 -1
  119. package/dist/src/agent/mcp/mcp-transport.d.ts +2 -1
  120. package/dist/src/agent/mcp/mcp-transport.js +22 -4
  121. package/dist/src/agent/memory/compaction.js +19 -17
  122. package/dist/src/agent/memory/context-budget.js +2 -3
  123. package/dist/src/agent/memory/understanding/service.d.ts +1 -0
  124. package/dist/src/agent/memory/understanding/service.js +49 -20
  125. package/dist/src/agent/memory/understanding/types.d.ts +1 -0
  126. package/dist/src/agent/memory/user-context-coordinator.js +6 -0
  127. package/dist/src/agent/orchestration/agent-orchestrator.js +15 -1
  128. package/dist/src/agent/service/direct-turn-helpers.js +14 -5
  129. package/dist/src/agent/skills/index.d.ts +1 -1
  130. package/dist/src/agent/skills/index.js +2 -2
  131. package/dist/src/agent/skills/installer.d.ts +3 -10
  132. package/dist/src/agent/skills/installer.js +99 -156
  133. package/dist/src/agent/skills/marketplace/adapter.types.d.ts +3 -1
  134. package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js +30 -6
  135. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +21 -4
  136. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +7 -4
  137. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.d.ts +3 -0
  138. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +7 -1
  139. package/dist/src/agent/skills/marketplace/search.d.ts +2 -2
  140. package/dist/src/agent/skills/marketplace/search.js +52 -21
  141. package/dist/src/agent/skills/skills-marketplace.d.ts +1 -1
  142. package/dist/src/agent/skills/skills-marketplace.js +2 -2
  143. package/dist/src/agent/skills/types.d.ts +0 -8
  144. package/dist/src/agent/tools/exec-command.d.ts +1 -0
  145. package/dist/src/agent/tools/exec-command.js +2 -1
  146. package/dist/src/agent/tools/factory.d.ts +1 -0
  147. package/dist/src/agent/tools/factory.js +17 -2
  148. package/dist/src/agent/tools/managed-job-tool.d.ts +1 -1
  149. package/dist/src/agent/tools/managed-job-tool.js +3 -2
  150. package/dist/src/agent/tools/skill-install-tool.d.ts +2 -2
  151. package/dist/src/agent/tools/skill-install-tool.js +8 -4
  152. package/dist/src/agent/tools/skills-marketplace-search-tool.js +3 -2
  153. package/dist/src/agent/tools/workflow-tool.d.ts +1 -0
  154. package/dist/src/agent/tools/workflow-tool.js +14 -4
  155. package/dist/src/agent-manifest/schema.d.ts +20 -0
  156. package/dist/src/agent-manifest/schema.js +6 -1
  157. package/dist/src/browser/providers/cloakbrowser.js +1 -1
  158. package/dist/src/cli/command-loaders.js +1 -0
  159. package/dist/src/cli/command-manifest.js +4 -0
  160. package/dist/src/cli/commands/doctor/checks/node-version.js +3 -3
  161. package/dist/src/cli/commands/doctor/checks/tool-runtimes.d.ts +2 -0
  162. package/dist/src/cli/commands/doctor/checks/tool-runtimes.js +36 -0
  163. package/dist/src/cli/commands/doctor/flow.js +2 -0
  164. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  165. package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
  166. package/dist/src/cli/commands/models.js +0 -1
  167. package/dist/src/cli/commands/onboard/model.d.ts +16 -1
  168. package/dist/src/cli/commands/onboard/model.js +65 -4
  169. package/dist/src/cli/commands/onboard.js +13 -1
  170. package/dist/src/cli/commands/runtime.d.ts +1 -0
  171. package/dist/src/cli/commands/runtime.js +77 -0
  172. package/dist/src/cli/commands/setup.js +15 -1
  173. package/dist/src/cli/commands/skills.js +7 -4
  174. package/dist/src/cli/commands/update.js +1 -1
  175. package/dist/src/config/index.js +2 -2
  176. package/dist/src/config/schema.d.ts +125 -0
  177. package/dist/src/config/schema.js +77 -2
  178. package/dist/src/config/voice.d.ts +6 -0
  179. package/dist/src/config/voice.js +17 -0
  180. package/dist/src/extensions/install.js +1 -1
  181. package/dist/src/extensions/types/providers.d.ts +4 -0
  182. package/dist/src/gateway/capability-presets-admin.d.ts +9 -0
  183. package/dist/src/gateway/capability-presets-admin.js +24 -6
  184. package/dist/src/gateway/chat-stream/mapper.js +8 -4
  185. package/dist/src/gateway/chat-stream/protocol.d.ts +10 -1
  186. package/dist/src/gateway/heartbeat/service.js +1 -1
  187. package/dist/src/gateway/hono/lib/config-payload.d.ts +1 -0
  188. package/dist/src/gateway/hono/routes/commands-skills.js +2 -1
  189. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  190. package/dist/src/gateway/hono/routes/local-apps.js +1 -1
  191. package/dist/src/gateway/hono/routes/models.js +2 -3
  192. package/dist/src/gateway/hono/routes/runtime-tools.d.ts +3 -0
  193. package/dist/src/gateway/hono/routes/runtime-tools.js +142 -0
  194. package/dist/src/gateway/hono/routes/understanding-sources.js +2 -1
  195. package/dist/src/gateway/hono/routes/update.js +2 -2
  196. package/dist/src/gateway/hono/routes/voice.js +43 -2
  197. package/dist/src/gateway/hono/routes/workflows.js +1 -1
  198. package/dist/src/gateway/hono/routes/you.js +22 -25
  199. package/dist/src/gateway/image-generation-setup.d.ts +2 -3
  200. package/dist/src/gateway/image-generation-setup.js +39 -8
  201. package/dist/src/gateway/index.js +1 -1
  202. package/dist/src/gateway/run-loop.js +1 -1
  203. package/dist/src/gateway/service/marketplace-service.d.ts +1 -1
  204. package/dist/src/gateway/service/marketplace-service.js +2 -2
  205. package/dist/src/gateway/service.js +5 -5
  206. package/dist/src/heartbeat/index.js +1 -1
  207. package/dist/src/infra/gateway-processes.js +1 -1
  208. package/dist/src/infra/update-global.js +1 -1
  209. package/dist/src/infra/update-restart.js +1 -1
  210. package/dist/src/infra/update-runner.js +2 -2
  211. package/dist/src/infra/update-startup.js +1 -1
  212. package/dist/src/providers/extension-stream-bridge.js +8 -7
  213. package/dist/src/providers/model-catalog-store.d.ts +24 -4
  214. package/dist/src/providers/model-catalog-store.js +11 -0
  215. package/dist/src/providers/model-registry.js +1 -1
  216. package/dist/src/providers/prompt-cache-payload.d.ts +13 -0
  217. package/dist/src/providers/prompt-cache-payload.js +110 -0
  218. package/dist/src/providers/register-runtime-providers.js +1 -1
  219. package/dist/src/providers/xopc-cloud-model-source.js +52 -6
  220. package/dist/src/runtime-tools/archive.d.ts +8 -0
  221. package/dist/src/runtime-tools/archive.js +99 -0
  222. package/dist/src/runtime-tools/bootstrap.d.ts +16 -0
  223. package/dist/src/runtime-tools/bootstrap.js +33 -0
  224. package/dist/src/runtime-tools/catalog.d.ts +19 -0
  225. package/dist/src/runtime-tools/catalog.js +59 -0
  226. package/dist/src/runtime-tools/command.d.ts +15 -0
  227. package/dist/src/runtime-tools/command.js +59 -0
  228. package/dist/src/runtime-tools/download-source.d.ts +24 -0
  229. package/dist/src/runtime-tools/download-source.js +125 -0
  230. package/dist/src/runtime-tools/downloader.d.ts +21 -0
  231. package/dist/src/runtime-tools/downloader.js +137 -0
  232. package/dist/src/runtime-tools/environment.d.ts +20 -0
  233. package/dist/src/runtime-tools/environment.js +113 -0
  234. package/dist/src/runtime-tools/errors.d.ts +10 -0
  235. package/dist/src/runtime-tools/errors.js +14 -0
  236. package/dist/src/runtime-tools/index.d.ts +7 -0
  237. package/dist/src/runtime-tools/index.js +7 -0
  238. package/dist/src/runtime-tools/install-lock.d.ts +1 -0
  239. package/dist/src/runtime-tools/install-lock.js +50 -0
  240. package/dist/src/runtime-tools/manager.d.ts +20 -0
  241. package/dist/src/runtime-tools/manager.js +641 -0
  242. package/dist/src/runtime-tools/manifest-store.d.ts +3 -0
  243. package/dist/src/runtime-tools/manifest-store.js +26 -0
  244. package/dist/src/runtime-tools/network.d.ts +9 -0
  245. package/dist/src/runtime-tools/network.js +41 -0
  246. package/dist/src/runtime-tools/offline-bundle.d.ts +16 -0
  247. package/dist/src/runtime-tools/offline-bundle.js +41 -0
  248. package/dist/src/runtime-tools/paths.d.ts +7 -0
  249. package/dist/src/runtime-tools/paths.js +22 -0
  250. package/dist/src/runtime-tools/probe.d.ts +7 -0
  251. package/dist/src/runtime-tools/probe.js +71 -0
  252. package/dist/src/runtime-tools/prune.d.ts +10 -0
  253. package/dist/src/runtime-tools/prune.js +93 -0
  254. package/dist/src/runtime-tools/types.d.ts +70 -0
  255. package/dist/src/runtime-tools/types.js +1 -0
  256. package/dist/src/share/share-zip.js +1 -1
  257. package/dist/src/storage/sqlite/migrations/113_memory_evidence_single_source.sql +42 -20
  258. package/dist/src/tasks/home-query-service.js +1 -5
  259. package/dist/src/tasks/index.js +2 -2
  260. package/dist/src/tasks/project-operating-view-service.d.ts +2 -1
  261. package/dist/src/tasks/project-operating-view-service.js +6 -4
  262. package/dist/src/tasks/task-dependency-service.d.ts +2 -1
  263. package/dist/src/tasks/task-dependency-service.js +15 -0
  264. package/dist/src/tui/backends/gateway-realtime-backend.js +1 -1
  265. package/dist/src/tunnel/frpc-binary.js +1 -1
  266. package/dist/src/user-context/domain.d.ts +2 -1
  267. package/dist/src/user-context/domain.js +12 -1
  268. package/dist/src/user-context/manual-understanding.js +8 -10
  269. package/dist/src/user-context/planner.js +1 -6
  270. package/dist/src/user-context/sources/activity-clustering.d.ts +5 -0
  271. package/dist/src/user-context/sources/activity-clustering.js +130 -0
  272. package/dist/src/user-context/sources/catalog.js +26 -0
  273. package/dist/src/user-context/sources/local-source-contract.d.ts +3 -0
  274. package/dist/src/user-context/sources/local-source-contract.js +15 -0
  275. package/dist/src/user-context/sources/repository.js +7 -1
  276. package/dist/src/user-context/sources/types.d.ts +7 -1
  277. package/dist/src/user-context/understanding.d.ts +15 -0
  278. package/dist/src/user-context/understanding.js +24 -0
  279. package/dist/src/voice/local/model-files.js +1 -1
  280. package/dist/src/voice/metadata/builtin.js +99 -32
  281. package/dist/src/voice/metadata/types.d.ts +3 -0
  282. package/dist/src/voice/stt/availability.js +4 -1
  283. package/dist/src/voice/stt/config-slice.d.ts +0 -2
  284. package/dist/src/voice/stt/config-slice.js +1 -6
  285. package/dist/src/voice/stt/factory.js +2 -2
  286. package/dist/src/voice/stt/index.d.ts +2 -3
  287. package/dist/src/voice/stt/list-providers.js +1 -1
  288. package/dist/src/voice/stt/providers/alibaba-transcription.d.ts +0 -19
  289. package/dist/src/voice/stt/providers/alibaba-transcription.js +59 -132
  290. package/dist/src/voice/stt/providers/index.d.ts +1 -0
  291. package/dist/src/voice/stt/providers/index.js +2 -1
  292. package/dist/src/voice/stt/providers/openai-transcription.d.ts +2 -2
  293. package/dist/src/voice/stt/providers/openai-transcription.js +4 -4
  294. package/dist/src/voice/stt/providers/xopc-cloud-transcription.d.ts +2 -0
  295. package/dist/src/voice/stt/providers/xopc-cloud-transcription.js +49 -0
  296. package/dist/src/voice/stt/types.js +2 -2
  297. package/dist/src/voice/tts/providers/index.d.ts +1 -0
  298. package/dist/src/voice/tts/providers/index.js +2 -1
  299. package/dist/src/voice/tts/providers/xopc-cloud-speech.d.ts +2 -0
  300. package/dist/src/voice/tts/providers/xopc-cloud-speech.js +113 -0
  301. package/dist/src/voice/tts/types.d.ts +1 -1
  302. package/dist/src/work-discovery/analyzer.js +9 -4
  303. package/dist/src/work-discovery/candidate-discovery.d.ts +1 -0
  304. package/dist/src/work-discovery/candidate-discovery.js +3 -3
  305. package/dist/src/work-discovery/index.js +2 -2
  306. package/dist/src/work-discovery/service.d.ts +2 -1
  307. package/dist/src/work-discovery/service.js +126 -37
  308. package/dist/src/work-discovery/types.d.ts +1 -0
  309. package/dist/src/workflows/service/workflow-run-service.js +8 -0
  310. package/dist/src/workflows/service/workflow-run-service.types.d.ts +1 -1
  311. package/package.json +3 -3
  312. package/dist/gateway/static/root/assets/agents-CXyivfqY.js +0 -68
  313. package/dist/gateway/static/root/assets/apps-page-DsE67BSO.js +0 -1
  314. package/dist/gateway/static/root/assets/automations-page-D0TVev47.js +0 -6
  315. package/dist/gateway/static/root/assets/browser-settings-page-DpZzq8j2.js +0 -8
  316. package/dist/gateway/static/root/assets/capabilities-settings-panel-B9Cmcuff.js +0 -7
  317. package/dist/gateway/static/root/assets/capability-presets-api-BB8t4Ja7.js +0 -1
  318. package/dist/gateway/static/root/assets/capability-presets-settings-panel-C_EpuQtk.js +0 -1
  319. package/dist/gateway/static/root/assets/channels-settings-CvzD5qSv.js +0 -1
  320. package/dist/gateway/static/root/assets/channels-status-swr-Cz7SAAkm.js +0 -1
  321. package/dist/gateway/static/root/assets/connectors-page-BKrm7tJ9.js +0 -2
  322. package/dist/gateway/static/root/assets/extension-settings-page-CsR7QOJo.js +0 -1
  323. package/dist/gateway/static/root/assets/home-page-C08Nen5T.js +0 -3
  324. package/dist/gateway/static/root/assets/html-workspace-editor-C3DKAkMc.js +0 -1
  325. package/dist/gateway/static/root/assets/index-B-_CEvIX.js +0 -150
  326. package/dist/gateway/static/root/assets/index-D6e3tPL-.css +0 -1
  327. package/dist/gateway/static/root/assets/local-app-workbench-page-BQVC0tWq.js +0 -2
  328. package/dist/gateway/static/root/assets/logs-page-D6yvW-E4.js +0 -2
  329. package/dist/gateway/static/root/assets/messages-B4XqB8I6.js +0 -3
  330. package/dist/gateway/static/root/assets/notes-workbench-BVCwabjq.js +0 -4
  331. package/dist/gateway/static/root/assets/project-detail-page-CS4Ujor7.js +0 -1
  332. package/dist/gateway/static/root/assets/projects-page-DMtPC8c4.js +0 -1
  333. package/dist/gateway/static/root/assets/remote-access-hub-BpfHZT88.js +0 -1
  334. package/dist/gateway/static/root/assets/sessions-page-BZkyrJBM.js +0 -1
  335. package/dist/gateway/static/root/assets/settings-advanced-gate-DQlK0A4l.js +0 -1
  336. package/dist/gateway/static/root/assets/settings-page-C-LdINFj.js +0 -1
  337. package/dist/gateway/static/root/assets/shares-settings-v_iLhxxa.js +0 -1
  338. package/dist/gateway/static/root/assets/skill-reload-api-S-bjtsXX.js +0 -1
  339. package/dist/gateway/static/root/assets/skills-page-BiNBfaX5.js +0 -2
  340. package/dist/gateway/static/root/assets/skills-page.utils-DlnGtvAH.js +0 -1
  341. package/dist/gateway/static/root/assets/task-detail-page-BhQcOpnx.js +0 -1
  342. package/dist/gateway/static/root/assets/user-context-page-PtcY7BoJ.js +0 -1
  343. package/dist/gateway/static/root/assets/voice-api-key-field-DnhJtC5l.js +0 -1
  344. package/dist/gateway/static/root/assets/workflow-run-setup-panel-BnNWBDwz.js +0 -3
  345. package/dist/gateway/static/root/assets/workflows-page-Z_qzaohv.js +0 -11
  346. /package/dist/gateway/static/root/assets/{workflows-page-DLioOiRN.css → style-DLioOiRN.css} +0 -0
@@ -1,5 +1,6 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
+ import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
3
4
  import { init_providers, resolveModel } from "../../providers/index.js";
4
5
  import { resolveAgentTurnTimeoutMs } from "../orchestration/run-agent-turn-with-timeout.js";
5
6
  import { evaluateContextBudget } from "../memory/context-budget.js";
@@ -47,6 +48,7 @@ async function runEmbeddedTurnForSession(params) {
47
48
  const thinkingLevel = params.thinkingOverride ?? agent.state.thinkingLevel;
48
49
  const workspaceDir = agentManager.getResolvedWorkspaceForSession(sessionKey);
49
50
  const config = params.getConfig?.();
51
+ const cacheRetention = config ? resolveEffectiveAgentProfileForSession(config, sessionKey).manifest.runtime?.promptCacheRetention : void 0;
50
52
  const configuredTurnTimeoutMs = resolveAgentTurnTimeoutMs(config, sessionKey);
51
53
  const turnTimeoutMs = params.deadlineAtMs === void 0 ? configuredTurnTimeoutMs : Math.max(1, Math.min(configuredTurnTimeoutMs, params.deadlineAtMs - Date.now()));
52
54
  let userMessageForTurn = userMessage;
@@ -113,6 +115,7 @@ async function runEmbeddedTurnForSession(params) {
113
115
  tools,
114
116
  systemPrompt,
115
117
  thinkingLevel,
118
+ cacheRetention,
116
119
  workspaceDir,
117
120
  sessionStore,
118
121
  timeoutMs: turnTimeoutMs,
@@ -173,7 +173,10 @@ async function runXopcEmbeddedTurn(params) {
173
173
  tools: effectiveContext.tools
174
174
  } } : {}
175
175
  }, "Sending messages to AI");
176
- return streamFnWithXopcExtensions(streamModel, effectiveContext, options);
176
+ return streamFnWithXopcExtensions(streamModel, effectiveContext, {
177
+ ...options,
178
+ ...params.cacheRetention ? { cacheRetention: params.cacheRetention } : {}
179
+ });
177
180
  };
178
181
  session.agent.streamFunction = loggingStreamFn;
179
182
  if (onEvent) unsubscribe = subscribeEmbeddedSessionEvents(session, (event) => {
@@ -19,16 +19,15 @@ function providerCredentialRevision(providerId) {
19
19
  }
20
20
  function buildEmbeddedRunnerFingerprint(input) {
21
21
  const tools = [...input.toolNames].sort().join("\0");
22
- const promptMarker = `${input.systemPrompt.length}:${input.systemPrompt.slice(0, 128)}`;
23
- return [
22
+ return createHash("sha256").update([
24
23
  input.sessionId,
25
24
  input.workspaceDir,
26
25
  input.modelRef,
27
26
  tools,
28
- promptMarker,
27
+ input.systemPrompt,
29
28
  input.thinkingLevel,
30
29
  input.credentialRevision
31
- ].join("");
30
+ ].join("\0")).digest("base64url");
32
31
  }
33
32
  function isEmbeddedSessionRunnerEnabled() {
34
33
  const raw = process.env.XOPC_SESSION_RUNNER?.trim().toLowerCase();
@@ -1,5 +1,5 @@
1
1
  import type { AgentMessage, AgentToolResult, ThinkingLevel } from '@earendil-works/pi-agent-core';
2
- import type { AssistantMessageEvent, Model, Api, ImageContent } from '@earendil-works/pi-ai';
2
+ import type { AssistantMessageEvent, Model, Api, CacheRetention, ImageContent } from '@earendil-works/pi-ai';
3
3
  import type { SessionStore } from '../../session/store.js';
4
4
  export type EmbeddedStreamEvent = {
5
5
  type: 'agent_start';
@@ -62,6 +62,14 @@ export type EmbeddedStreamEvent = {
62
62
  content: string;
63
63
  kind: string;
64
64
  }>;
65
+ } | {
66
+ type: 'memory_candidate';
67
+ runId?: string;
68
+ records: Array<{
69
+ id: string;
70
+ content: string;
71
+ kind: string;
72
+ }>;
65
73
  } | {
66
74
  type: 'error';
67
75
  runId?: string;
@@ -83,6 +91,7 @@ export type RunXopcEmbeddedTurnParams = {
83
91
  tools: import('@earendil-works/pi-agent-core').AgentTool[];
84
92
  systemPrompt: string;
85
93
  thinkingLevel?: ThinkingLevel;
94
+ cacheRetention?: CacheRetention;
86
95
  workspaceDir: string;
87
96
  sessionStore: SessionStore;
88
97
  timeoutMs: number;
@@ -1,6 +1,7 @@
1
1
  import "../../providers/constants.js";
2
2
  import { init_providers } from "../../providers/index.js";
3
3
  import { createExtensionAwareStreamFn } from "../../providers/extension-stream-bridge.js";
4
+ import { preparePromptCacheContext, withPromptCachePayloadTransform } from "../../providers/prompt-cache-payload.js";
4
5
  //#region src/agent/embedded/xopc-stream-bridge.ts
5
6
  init_providers();
6
7
  /**
@@ -15,8 +16,8 @@ init_providers();
15
16
  function wrapStreamFnForXopcExtensions(originalStreamFn) {
16
17
  const extensionStreamFn = createExtensionAwareStreamFn();
17
18
  return ((model, context, options) => {
18
- if (model.baseUrl === "extension://provider-plugin") return extensionStreamFn(model, context, options);
19
- return originalStreamFn(model, context, options);
19
+ if (model.baseUrl === "extension://provider-plugin") return extensionStreamFn(model, preparePromptCacheContext(model, context), options);
20
+ return originalStreamFn(model, preparePromptCacheContext(model, context), withPromptCachePayloadTransform(model, context, options));
20
21
  });
21
22
  }
22
23
  //#endregion
@@ -25,5 +25,6 @@ export declare class McpToolProvider implements ExternalToolProvider {
25
25
  execute(toolRef: string, args: Record<string, unknown>, _approvalId: string | undefined, context: ExternalToolExecutionContext): Promise<AgentToolResult<Record<string, unknown>>>;
26
26
  private resolve;
27
27
  private isAllowed;
28
+ private executionSignal;
28
29
  private withRuntime;
29
30
  }
@@ -1,6 +1,6 @@
1
1
  import { resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
2
2
  import { externalToolRef, parseExternalToolRef } from "./refs.js";
3
- import { isMcpCatalogToolDenied, mcpToolPolicyId } from "../mcp/bundle-mcp-policy.js";
3
+ import { isMcpCatalogToolDenied, mcpToolPolicyId, resolveMcpToolPolicy } from "../mcp/bundle-mcp-policy.js";
4
4
  import { getOrCreateSessionMcpRuntime } from "../mcp/bundle-mcp-runtime.js";
5
5
  //#region src/agent/external-tools/mcp-provider.ts
6
6
  function policyToolId(tool) {
@@ -33,9 +33,9 @@ var McpToolProvider = class {
33
33
  async search(_query) {
34
34
  return this.withRuntime(async (runtime) => {
35
35
  return (await runtime.getCatalog()).tools.filter((tool) => this.isAllowed(tool)).map((tool) => ({
36
- toolRef: externalToolRef(this.source, tool.serverName, tool.toolName),
36
+ toolRef: externalToolRef(this.source, tool.safeServerName, tool.toolName),
37
37
  source: this.source,
38
- namespace: tool.serverName,
38
+ namespace: tool.safeServerName,
39
39
  title: tool.title || tool.toolName,
40
40
  summary: tool.description || tool.fallbackDescription
41
41
  }));
@@ -71,7 +71,7 @@ var McpToolProvider = class {
71
71
  if (!hook.allowed) throw new Error(hook.reason ?? "MCP tool call blocked by policy hook.");
72
72
  executionArgs = hook.params ?? args;
73
73
  }
74
- const result = await runtime.callTool(tool.serverName, tool.toolName, executionArgs, context.signal);
74
+ const result = await runtime.callTool(tool.serverName, tool.toolName, executionArgs, this.executionSignal(tool, context.signal));
75
75
  return toAgentToolResult({
76
76
  serverName: tool.serverName,
77
77
  toolName: tool.toolName,
@@ -82,7 +82,7 @@ var McpToolProvider = class {
82
82
  async resolve(runtime, toolRef) {
83
83
  const parsed = parseExternalToolRef(toolRef, this.source);
84
84
  if (!parsed) return void 0;
85
- const tool = (await runtime.getCatalog()).tools.find((candidate) => candidate.serverName === parsed.namespace && candidate.toolName === parsed.toolName);
85
+ const tool = (await runtime.getCatalog()).tools.find((candidate) => candidate.safeServerName === parsed.namespace && candidate.toolName === parsed.toolName);
86
86
  return tool && this.isAllowed(tool) ? tool : void 0;
87
87
  }
88
88
  isAllowed(tool) {
@@ -90,11 +90,26 @@ var McpToolProvider = class {
90
90
  const sessionKey = this.deps.getSessionKey();
91
91
  const profile = cfg && sessionKey ? resolveEffectiveAgentProfileForSession(cfg, sessionKey) : void 0;
92
92
  const policyName = policyToolId(tool);
93
- return !profile?.tools.denied.has(policyName) && !isMcpCatalogToolDenied({
93
+ return !(resolveMcpToolPolicy({
94
+ serverId: tool.safeServerName,
95
+ policyToolId: policyName
96
+ }, profile?.manifest.tools.mcp)?.scope === "readonly" && tool.annotations?.readOnlyHint !== true) && !profile?.tools.denied.has(policyName) && !isMcpCatalogToolDenied({
94
97
  serverId: tool.safeServerName,
95
98
  policyToolId: policyName
96
99
  }, profile?.manifest.tools.mcp);
97
100
  }
101
+ executionSignal(tool, signal) {
102
+ const cfg = this.deps.getConfig();
103
+ const sessionKey = this.deps.getSessionKey();
104
+ const profile = cfg && sessionKey ? resolveEffectiveAgentProfileForSession(cfg, sessionKey) : void 0;
105
+ const timeoutMs = resolveMcpToolPolicy({
106
+ serverId: tool.safeServerName,
107
+ policyToolId: policyToolId(tool)
108
+ }, profile?.manifest.tools.mcp)?.limits?.timeoutMs;
109
+ if (!timeoutMs) return signal;
110
+ const timeoutSignal = AbortSignal.timeout(timeoutMs);
111
+ return signal ? AbortSignal.any([signal, timeoutSignal]) : timeoutSignal;
112
+ }
98
113
  async withRuntime(run) {
99
114
  const cfg = this.deps.getConfig();
100
115
  const sessionKey = this.deps.getSessionKey();
@@ -77,6 +77,7 @@ function listImageGenerationProvidersSummary() {
77
77
  credentialMode: resolveImageGenerationCredentialMode(provider),
78
78
  ...provider.documentationUrl ? { documentationUrl: provider.documentationUrl } : {},
79
79
  ...provider.apiKeyUrl ? { apiKeyUrl: provider.apiKeyUrl } : {},
80
+ configFields: structuredClone(provider.configFields ?? []),
80
81
  defaultModel: provider.defaultModel,
81
82
  models: [...provider.models],
82
83
  capabilities: provider.capabilities,
@@ -211,6 +211,26 @@ function buildDashScopeImageGenerationProvider() {
211
211
  return {
212
212
  id: "dashscope",
213
213
  label: "Alibaba Model Studio",
214
+ documentationUrl: "https://www.alibabacloud.com/help/en/model-studio/wan-image-generation-and-editing-api-reference",
215
+ apiKeyUrl: "https://dashscope.console.aliyun.com/apiKey",
216
+ configFields: [{
217
+ key: "region",
218
+ label: "Service region",
219
+ type: "select",
220
+ required: true,
221
+ options: [{
222
+ value: "cn",
223
+ label: "China"
224
+ }, {
225
+ value: "intl",
226
+ label: "International"
227
+ }]
228
+ }, {
229
+ key: "baseUrl",
230
+ label: "Base URL",
231
+ type: "url",
232
+ placeholder: "https://…"
233
+ }],
214
234
  defaultModel: DASHSCOPE_DEFAULT_IMAGE_MODEL,
215
235
  models: [...DASHSCOPE_IMAGE_MODELS],
216
236
  capabilities: DASHSCOPE_CAPABILITIES,
@@ -1,5 +1,5 @@
1
1
  import type { ImageGenerationProvider, ImageGenerationRequest, ImageGenerationResult } from '../types.js';
2
- export declare const FAL_DEFAULT_IMAGE_MODEL = "fal-ai/flux/schnell";
2
+ export declare const FAL_DEFAULT_IMAGE_MODEL = "fal-ai/flux-2";
3
3
  export declare const FAL_IMAGE_MODELS: readonly string[];
4
4
  /**
5
5
  * Resolve Fal queue base URL precedence:
@@ -28,16 +28,14 @@ import "../../../../providers/auth-runtime/index.js";
28
28
  init_logger();
29
29
  const log = createLogger("ImageGen:Fal");
30
30
  const DEFAULT_FAL_QUEUE_BASE_URL = "https://queue.fal.run";
31
- const FAL_DEFAULT_IMAGE_MODEL = "fal-ai/flux/schnell";
31
+ const FAL_DEFAULT_IMAGE_MODEL = "fal-ai/flux-2";
32
32
  const DEFAULT_TIMEOUT_MS = 6e5;
33
33
  const DEFAULT_POLL_INTERVAL_MS = 1500;
34
34
  const MAX_POLL_INTERVAL_MS = 5e3;
35
35
  const FAL_IMAGE_MODELS = [
36
36
  FAL_DEFAULT_IMAGE_MODEL,
37
- "fal-ai/flux/dev",
38
- "fal-ai/flux-pro/v1.1",
39
- "fal-ai/flux-pro/v1.1-ultra",
40
- "fal-ai/nano-banana"
37
+ "fal-ai/flux-2-pro",
38
+ "fal-ai/nano-banana-2"
41
39
  ];
42
40
  const FAL_CAPABILITIES = {
43
41
  generate: {
@@ -240,7 +238,7 @@ async function downloadFalImages(params) {
240
238
  async function generateFalImages(params) {
241
239
  const { req, apiKey } = params;
242
240
  const baseUrl = resolveFalBaseUrl(req);
243
- const model = req.model?.trim() || "fal-ai/flux/schnell";
241
+ const model = req.model?.trim() || "fal-ai/flux-2";
244
242
  const submitUrl = `${baseUrl}/${model}`;
245
243
  const httpDefaults = resolveProviderHttpRequestConfig({
246
244
  providerId: "fal",
@@ -291,6 +289,14 @@ function buildFalImageGenerationProvider() {
291
289
  return {
292
290
  id: "fal",
293
291
  label: "Fal.ai",
292
+ documentationUrl: "https://docs.fal.ai/",
293
+ apiKeyUrl: "https://fal.ai/dashboard/keys",
294
+ configFields: [{
295
+ key: "baseUrl",
296
+ label: "Base URL",
297
+ type: "url",
298
+ placeholder: "https://queue.fal.run"
299
+ }],
294
300
  defaultModel: FAL_DEFAULT_IMAGE_MODEL,
295
301
  models: [...FAL_IMAGE_MODELS],
296
302
  capabilities: FAL_CAPABILITIES,
@@ -210,6 +210,14 @@ function buildGoogleImageGenerationProvider() {
210
210
  return {
211
211
  id: "google",
212
212
  label: "Google Gemini",
213
+ documentationUrl: "https://ai.google.dev/gemini-api/docs/image-generation",
214
+ apiKeyUrl: "https://aistudio.google.com/app/apikey",
215
+ configFields: [{
216
+ key: "baseUrl",
217
+ label: "Base URL",
218
+ type: "url",
219
+ placeholder: "https://generativelanguage.googleapis.com"
220
+ }],
213
221
  defaultModel: GOOGLE_DEFAULT_IMAGE_MODEL,
214
222
  models: [...GOOGLE_IMAGE_MODELS],
215
223
  capabilities: GOOGLE_CAPABILITIES,
@@ -169,6 +169,26 @@ function buildMinimaxImageGenerationProvider() {
169
169
  return {
170
170
  id: "minimax",
171
171
  label: "MiniMax",
172
+ documentationUrl: "https://platform.minimaxi.com/document/Image%20Generation",
173
+ apiKeyUrl: "https://platform.minimaxi.com/user-center/basic-information/interface-key",
174
+ configFields: [{
175
+ key: "region",
176
+ label: "Service region",
177
+ type: "select",
178
+ required: true,
179
+ options: [{
180
+ value: "cn",
181
+ label: "China"
182
+ }, {
183
+ value: "intl",
184
+ label: "International"
185
+ }]
186
+ }, {
187
+ key: "baseUrl",
188
+ label: "Base URL",
189
+ type: "url",
190
+ placeholder: "https://…"
191
+ }],
172
192
  defaultModel: MINIMAX_DEFAULT_IMAGE_MODEL,
173
193
  models: [...MINIMAX_IMAGE_MODELS],
174
194
  capabilities: MINIMAX_CAPABILITIES,
@@ -17,7 +17,7 @@ import { createOpenAiImagesProvider } from "../openai-images-provider.js";
17
17
  */
18
18
  const OPENAI_DEFAULT_BASE_URL = "https://api.openai.com/v1";
19
19
  /** Image models exposed by the OpenAI Images API. */
20
- const OPENAI_IMAGE_MODELS = ["gpt-image-2", "gpt-image-1.5"];
20
+ const OPENAI_IMAGE_MODELS = ["gpt-image-2"];
21
21
  const OPENAI_DEFAULT_IMAGE_MODEL = OPENAI_IMAGE_MODELS[0];
22
22
  const OPENAI_CAPABILITIES = {
23
23
  generate: {
@@ -93,32 +93,42 @@ function buildAzureEndpoint(azure) {
93
93
  };
94
94
  }
95
95
  function buildOpenAIImageGenerationProvider() {
96
- return createOpenAiImagesProvider({
97
- id: "openai",
98
- label: "OpenAI",
99
- defaultModel: OPENAI_DEFAULT_IMAGE_MODEL,
100
- models: [...OPENAI_IMAGE_MODELS],
101
- capabilities: OPENAI_CAPABILITIES,
102
- isConfigured: (ctx) => isProviderApiKeyConfigured({
103
- providerId: "openai",
104
- cfg: ctx.cfg,
105
- agentId: ctx.agentId
106
- }),
107
- resolveApiKey: (req) => {
108
- return resolveAuthProfileForProvider({
96
+ return {
97
+ ...createOpenAiImagesProvider({
98
+ id: "openai",
99
+ label: "OpenAI",
100
+ defaultModel: OPENAI_DEFAULT_IMAGE_MODEL,
101
+ models: [...OPENAI_IMAGE_MODELS],
102
+ capabilities: OPENAI_CAPABILITIES,
103
+ isConfigured: (ctx) => isProviderApiKeyConfigured({
109
104
  providerId: "openai",
110
- cfg: req.cfg,
111
- agentId: req.agentId,
112
- store: req.authStore
113
- }).apiKey ?? null;
114
- },
115
- resolveEndpoint: (req) => {
116
- const azure = resolveAzureSettings(req);
117
- if (azure) return buildAzureEndpoint(azure);
118
- return { baseUrl: resolveOpenAiBaseUrl(req) };
119
- },
120
- defaultTimeoutMs: 12e4
121
- });
105
+ cfg: ctx.cfg,
106
+ agentId: ctx.agentId
107
+ }),
108
+ resolveApiKey: (req) => {
109
+ return resolveAuthProfileForProvider({
110
+ providerId: "openai",
111
+ cfg: req.cfg,
112
+ agentId: req.agentId,
113
+ store: req.authStore
114
+ }).apiKey ?? null;
115
+ },
116
+ resolveEndpoint: (req) => {
117
+ const azure = resolveAzureSettings(req);
118
+ if (azure) return buildAzureEndpoint(azure);
119
+ return { baseUrl: resolveOpenAiBaseUrl(req) };
120
+ },
121
+ defaultTimeoutMs: 12e4
122
+ }),
123
+ documentationUrl: "https://platform.openai.com/docs/guides/image-generation",
124
+ apiKeyUrl: "https://platform.openai.com/api-keys",
125
+ configFields: [{
126
+ key: "baseUrl",
127
+ label: "Base URL",
128
+ type: "url",
129
+ placeholder: "https://api.openai.com/v1"
130
+ }]
131
+ };
122
132
  }
123
133
  //#endregion
124
134
  export { OPENAI_DEFAULT_IMAGE_MODEL, OPENAI_IMAGE_MODELS, buildOpenAIImageGenerationProvider };
@@ -48,6 +48,17 @@ export interface ImageGenerationProviderConfiguredContext {
48
48
  agentId?: string;
49
49
  agentDir?: string;
50
50
  }
51
+ export interface ImageGenerationProviderConfigField {
52
+ key: 'baseUrl' | 'region';
53
+ label: string;
54
+ type: 'url' | 'select';
55
+ required?: boolean;
56
+ placeholder?: string;
57
+ options?: Array<{
58
+ value: string;
59
+ label: string;
60
+ }>;
61
+ }
51
62
  export interface ImageGenerationProvider {
52
63
  id: string;
53
64
  label: string;
@@ -55,6 +66,7 @@ export interface ImageGenerationProvider {
55
66
  credentialMode?: 'api-key' | 'oauth' | 'none';
56
67
  documentationUrl?: string;
57
68
  apiKeyUrl?: string;
69
+ configFields?: ImageGenerationProviderConfigField[];
58
70
  defaultModel: string;
59
71
  models: string[];
60
72
  capabilities: ImageGenerationProviderCapabilities;
@@ -70,6 +82,7 @@ export interface ImageGenerationProviderSummary {
70
82
  credentialMode: 'api-key' | 'oauth' | 'none';
71
83
  documentationUrl?: string;
72
84
  apiKeyUrl?: string;
85
+ configFields: ImageGenerationProviderConfigField[];
73
86
  defaultModel: string;
74
87
  models: string[];
75
88
  capabilities: ImageGenerationProviderCapabilities;
@@ -3,6 +3,7 @@ export type McpGatewayToolEntry = {
3
3
  name: string;
4
4
  shortName: string;
5
5
  description: string;
6
+ readOnly: boolean;
6
7
  };
7
8
  export type McpGatewayResourceEntry = {
8
9
  uri: string;
@@ -6,7 +6,8 @@ function mapTools(tools, serverId) {
6
6
  return tools.filter((tool) => tool.serverName === serverId).map((tool) => ({
7
7
  name: mcpToolPolicyId(tool.safeServerName, tool.toolName),
8
8
  shortName: tool.toolName,
9
- description: tool.description || tool.title || tool.fallbackDescription
9
+ description: tool.description || tool.title || tool.fallbackDescription,
10
+ readOnly: tool.annotations?.readOnlyHint === true
10
11
  }));
11
12
  }
12
13
  function mapResources(resources, serverId) {
@@ -1,5 +1,9 @@
1
- import type { AgentManifest } from '../../agent-manifest/schema.js';
1
+ import type { AgentManifest, ToolPolicy } from '../../agent-manifest/schema.js';
2
2
  export declare function mcpToolPolicyId(serverId: string, toolName: string): string;
3
+ export declare function resolveMcpToolPolicy(identity: {
4
+ serverId: string;
5
+ policyToolId: string;
6
+ }, policy: AgentManifest['tools']['mcp']): ToolPolicy | undefined;
3
7
  export declare function isMcpCatalogToolDenied(identity: {
4
8
  serverId: string;
5
9
  policyToolId: string;
@@ -1,10 +1,18 @@
1
+ import { sanitizeServerName } from "./bundle-mcp-names.js";
1
2
  //#region src/agent/mcp/bundle-mcp-policy.ts
2
3
  function mcpToolPolicyId(serverId, toolName) {
3
4
  return `mcp:${encodeURIComponent(serverId)}:${encodeURIComponent(toolName)}`;
4
5
  }
6
+ function resolveMcpToolPolicy(identity, policy) {
7
+ const toolPolicy = policy?.tools?.[identity.policyToolId];
8
+ if (toolPolicy) return toolPolicy;
9
+ const directServerPolicy = policy?.servers?.[identity.serverId];
10
+ if (directServerPolicy) return directServerPolicy;
11
+ const usedNames = /* @__PURE__ */ new Set();
12
+ for (const [serverId, serverPolicy] of Object.entries(policy?.servers ?? {})) if (sanitizeServerName(serverId, usedNames) === identity.serverId) return serverPolicy;
13
+ }
5
14
  function isMcpCatalogToolDenied(identity, policy) {
6
- if (!policy) return false;
7
- return policy.servers?.[identity.serverId]?.mode === "deny" || policy.tools?.[identity.policyToolId]?.mode === "deny";
15
+ return resolveMcpToolPolicy(identity, policy)?.mode === "deny";
8
16
  }
9
17
  //#endregion
10
- export { isMcpCatalogToolDenied, mcpToolPolicyId };
18
+ export { isMcpCatalogToolDenied, mcpToolPolicyId, resolveMcpToolPolicy };
@@ -2,12 +2,12 @@ import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
3
  import { resolveGlobalSingleton } from "../../utils/global-singleton.js";
4
4
  import { init_string_coerce, normalizeOptionalString } from "../../utils/string-coerce.js";
5
+ import { sanitizeServerName } from "./bundle-mcp-names.js";
5
6
  import { redactSensitiveUrlLikeString } from "../../utils/redact-sensitive-url.js";
6
7
  import { loadEmbeddedMcpConfig } from "./embedded-mcp.js";
7
8
  import { resolveConnectorSecretReferences } from "../../connectors/secret-store.js";
8
9
  import { isMcpConfigRecord } from "./mcp-config-shared.js";
9
10
  import { resolveMcpTransport } from "./mcp-transport.js";
10
- import { sanitizeServerName } from "./bundle-mcp-names.js";
11
11
  import crypto from "node:crypto";
12
12
  import Ajv2020 from "ajv/dist/2020.js";
13
13
  import { Client } from "@modelcontextprotocol/sdk/client/index.js";
@@ -175,7 +175,7 @@ function createSessionMcpRuntime(params) {
175
175
  try {
176
176
  for (const [serverName, rawServer] of Object.entries(loaded.mcpServers)) {
177
177
  failIfDisposed();
178
- const resolved = resolveMcpTransport(serverName, await resolveConnectorSecretReferences(rawServer));
178
+ const resolved = await resolveMcpTransport(serverName, await resolveConnectorSecretReferences(rawServer), params.cfg);
179
179
  if (!resolved) continue;
180
180
  const safeServerName = sanitizeServerName(serverName, usedServerNames);
181
181
  if (safeServerName !== serverName) log.warn({
@@ -229,6 +229,7 @@ function createSessionMcpRuntime(params) {
229
229
  title: tool.title,
230
230
  description: normalizeOptionalString(tool.description) ?? normalizeOptionalString(tool.title),
231
231
  inputSchema: tool.inputSchema,
232
+ annotations: tool.annotations,
232
233
  fallbackDescription: `Provided by bundle MCP server "${serverName}" (${resolved.description}).`
233
234
  });
234
235
  }
@@ -1,4 +1,4 @@
1
- import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
1
+ import type { CallToolResult, ToolAnnotations } from "@modelcontextprotocol/sdk/types.js";
2
2
  import type { JsonSchemaType } from "@modelcontextprotocol/sdk/validation/types.js";
3
3
  import type { Config } from "../../config/schema.js";
4
4
  export type McpServerCatalog = {
@@ -15,6 +15,7 @@ export type McpCatalogTool = {
15
15
  title?: string;
16
16
  description?: string;
17
17
  inputSchema: JsonSchemaType;
18
+ annotations?: ToolAnnotations;
18
19
  fallbackDescription: string;
19
20
  };
20
21
  export type McpCatalogResource = {
@@ -1,6 +1,6 @@
1
- import { isMcpCatalogToolDenied, mcpToolPolicyId } from "./bundle-mcp-policy.js";
1
+ import { isMcpCatalogToolDenied, mcpToolPolicyId, resolveMcpToolPolicy } from "./bundle-mcp-policy.js";
2
2
  import { loadMergedBundleMcpConfig } from "./bundle-mcp-config.js";
3
3
  import { loadEmbeddedMcpConfig } from "./embedded-mcp.js";
4
4
  import { __testing, createSessionMcpRuntime, disposeAllSessionMcpRuntimes, disposeSessionMcpRuntime, getOrCreateSessionMcpRuntime, getSessionMcpRuntimeManager, retireSessionMcpRuntime, retireSessionMcpRuntimeForSessionKey } from "./bundle-mcp-runtime.js";
5
5
  import "./bundle-mcp-tools.js";
6
- export { __testing, createSessionMcpRuntime, disposeAllSessionMcpRuntimes, disposeSessionMcpRuntime, getOrCreateSessionMcpRuntime, getSessionMcpRuntimeManager, isMcpCatalogToolDenied, loadEmbeddedMcpConfig, loadMergedBundleMcpConfig, mcpToolPolicyId, retireSessionMcpRuntime, retireSessionMcpRuntimeForSessionKey };
6
+ export { __testing, createSessionMcpRuntime, disposeAllSessionMcpRuntimes, disposeSessionMcpRuntime, getOrCreateSessionMcpRuntime, getSessionMcpRuntimeManager, isMcpCatalogToolDenied, loadEmbeddedMcpConfig, loadMergedBundleMcpConfig, mcpToolPolicyId, resolveMcpToolPolicy, retireSessionMcpRuntime, retireSessionMcpRuntimeForSessionKey };
@@ -1,8 +1,8 @@
1
1
  import { killProcessTree } from "../../process/kill-tree.js";
2
2
  import { spawn } from "node:child_process";
3
+ import { getDefaultEnvironment } from "@modelcontextprotocol/sdk/client/stdio.js";
3
4
  import process from "node:process";
4
5
  import { PassThrough } from "node:stream";
5
- import { getDefaultEnvironment } from "@modelcontextprotocol/sdk/client/stdio.js";
6
6
  import { ReadBuffer, serializeMessage } from "@modelcontextprotocol/sdk/shared/stdio.js";
7
7
  //#region src/agent/mcp/mcp-stdio-transport.ts
8
8
  const CLOSE_TIMEOUT_MS = 2e3;
@@ -1,4 +1,5 @@
1
1
  import type { Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
2
+ import type { Config } from "../../config/schema.js";
2
3
  export type ResolvedMcpTransport = {
3
4
  transport: Transport;
4
5
  description: string;
@@ -7,4 +8,4 @@ export type ResolvedMcpTransport = {
7
8
  requestTimeoutMs: number;
8
9
  detachStderr?: () => void;
9
10
  };
10
- export declare function resolveMcpTransport(serverName: string, rawServer: unknown): ResolvedMcpTransport | null;
11
+ export declare function resolveMcpTransport(serverName: string, rawServer: unknown, config?: Config): Promise<ResolvedMcpTransport | null>;
@@ -1,12 +1,16 @@
1
+ import { init_paths_state, resolveStateDir } from "../../config/paths-state.js";
1
2
  import { createLogger } from "../../utils/logger/index.js";
2
3
  import { init_logger } from "../../utils/logger.js";
3
4
  import { init_string_coerce, normalizeOptionalString } from "../../utils/string-coerce.js";
5
+ import { buildRuntimeEnvironment, resolveRuntimeCommand } from "../../runtime-tools/environment.js";
4
6
  import { XopcStdioClientTransport } from "./mcp-stdio-transport.js";
5
7
  import { resolveMcpTransportConfig } from "./mcp-transport-config.js";
6
8
  import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
7
9
  import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
10
+ import { getDefaultEnvironment } from "@modelcontextprotocol/sdk/client/stdio.js";
8
11
  import { fetch } from "undici";
9
12
  //#region src/agent/mcp/mcp-transport.ts
13
+ init_paths_state();
10
14
  init_logger();
11
15
  init_string_coerce();
12
16
  const log = createLogger("Mcp:Transport");
@@ -44,20 +48,34 @@ function buildSseEventSourceFetch(headers) {
44
48
  });
45
49
  };
46
50
  }
47
- function resolveMcpTransport(serverName, rawServer) {
51
+ async function resolveMcpTransport(serverName, rawServer, config) {
48
52
  const resolved = resolveMcpTransportConfig(serverName, rawServer);
49
53
  if (!resolved) return null;
50
54
  if (resolved.kind === "stdio") {
51
- const transport = new XopcStdioClientTransport({
55
+ const command = config ? await resolveRuntimeCommand({
52
56
  command: resolved.command,
57
+ stateDir: resolveStateDir(),
58
+ config: config.runtimeTools,
59
+ allowProvision: true
60
+ }) : resolved.command;
61
+ const env = config ? (await buildRuntimeEnvironment({
62
+ stateDir: resolveStateDir(),
63
+ config: config.runtimeTools,
64
+ baseEnv: {
65
+ ...getDefaultEnvironment(),
66
+ ...resolved.env
67
+ }
68
+ })).env : resolved.env;
69
+ const transport = new XopcStdioClientTransport({
70
+ command,
53
71
  args: resolved.args,
54
- env: resolved.env,
72
+ env,
55
73
  cwd: resolved.cwd,
56
74
  stderr: "pipe"
57
75
  });
58
76
  return {
59
77
  transport,
60
- description: resolved.description,
78
+ description: command === resolved.command ? resolved.description : `${command}${resolved.args?.length ? ` ${resolved.args.join(" ")}` : ""}`,
61
79
  transportType: "stdio",
62
80
  connectionTimeoutMs: resolved.connectionTimeoutMs,
63
81
  requestTimeoutMs: resolved.requestTimeoutMs,