@xopcai/xopc 0.0.190 → 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 (342) 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-9vAbkroX.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-DkFeIdBf.js → app-management-settings-panel-D6Rv3OWI.js} +1 -1
  8. package/dist/gateway/static/root/assets/{appearance-settings-Bxs8Fpaj.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-Ch2RmLCC.js → archive-plugin-BokNQBwH.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-BhMQM_Ky.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-D6CqlymH.js → binary-plugins-CPYAflIG.js} +1 -1
  14. package/dist/gateway/static/root/assets/{block-editor-ClL6HEg9.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-BYy48VhN.js → browser-workflow-inputs-CqLnqA9z.js} +1 -1
  17. package/dist/gateway/static/root/assets/{browser-workflows-page-zgLibuMH.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-DS9ED-EL.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-CkgsvhtW.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-Cv8rGhYW.js → desktop-pet-DOUeNVmC.js} +1 -1
  30. package/dist/gateway/static/root/assets/{desktop-pet-settings-CIeJdwfV.js → desktop-pet-settings-D4704vtl.js} +1 -1
  31. package/dist/gateway/static/root/assets/{directory-picker-path-field-D8jXEiAY.js → directory-picker-path-field-DJDXeA1B.js} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-debug-page-CCZ9u6TZ.js → extension-debug-page-C0n2NMF1.js} +1 -1
  33. package/dist/gateway/static/root/assets/{extension-page-CV36ILRG.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-D4_r5iJM.js → gateway-config-api-CZra7GuI.js} +1 -1
  36. package/dist/gateway/static/root/assets/{gateway-settings-CYlntpBH.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-D4SyWob8.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-BMhCuVBZ.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-ijIe7_y2.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--V_fovKD.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-Dt9-in6W.js → markdown-split-Cy_2SN1Q.js} +1 -1
  52. package/dist/gateway/static/root/assets/{media-plugins-B3pj_iO0.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-DZ366lIT.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-C5ge434C.js → page-tabs-CvzSdYVj.js} +1 -1
  57. package/dist/gateway/static/root/assets/{preview-open-alternatives-BFa9DgSV.js → preview-open-alternatives-kZ0nco7e.js} +1 -1
  58. package/dist/gateway/static/root/assets/{product-open-page-Dc9CcWdu.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-B84DckWe.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-Dp9itvdy.js → settings-form-section-CKLns16d.js} +1 -1
  67. package/dist/gateway/static/root/assets/{settings-loading-skeleton-CCtlhoy7.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-EQIOJa_L.js → settings-page-layout-J793iqfm.js} +1 -1
  70. package/dist/gateway/static/root/assets/{setup-status-panel-Cwi-SPja.js → setup-status-panel-CGsml89P.js} +1 -1
  71. package/dist/gateway/static/root/assets/{share-preview-page-C4_B2jvf.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-Dpx2ags2.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-DULmTHUB.js → typed-models-lib-CT2c85Ju.js} +1 -1
  81. package/dist/gateway/static/root/assets/{use-autosave-BrjVk5VH.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-Wr-uF7VA.js → work-discovery-overlay-BoomfqhX.js} +1 -1
  86. package/dist/gateway/static/root/assets/{work-discovery-page-BWds95sL.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/openai-images-provider.d.ts +1 -1
  104. package/dist/src/agent/image/generation/openai-images-provider.js +1 -1
  105. package/dist/src/agent/image/generation/provider-registry.d.ts +2 -0
  106. package/dist/src/agent/image/generation/provider-registry.js +21 -10
  107. package/dist/src/agent/image/generation/providers/dashscope.js +20 -0
  108. package/dist/src/agent/image/generation/providers/fal.d.ts +1 -1
  109. package/dist/src/agent/image/generation/providers/fal.js +12 -6
  110. package/dist/src/agent/image/generation/providers/google.js +8 -0
  111. package/dist/src/agent/image/generation/providers/minimax.js +20 -0
  112. package/dist/src/agent/image/generation/providers/openai.js +36 -26
  113. package/dist/src/agent/image/generation/providers/xopc-cloud.d.ts +2 -0
  114. package/dist/src/agent/image/generation/providers/xopc-cloud.js +74 -0
  115. package/dist/src/agent/image/generation/types.d.ts +15 -2
  116. package/dist/src/agent/mcp/bundle-mcp-gateway.d.ts +1 -0
  117. package/dist/src/agent/mcp/bundle-mcp-gateway.js +2 -1
  118. package/dist/src/agent/mcp/bundle-mcp-policy.d.ts +5 -1
  119. package/dist/src/agent/mcp/bundle-mcp-policy.js +11 -3
  120. package/dist/src/agent/mcp/bundle-mcp-runtime.js +3 -2
  121. package/dist/src/agent/mcp/bundle-mcp-types.d.ts +2 -1
  122. package/dist/src/agent/mcp/index.js +2 -2
  123. package/dist/src/agent/mcp/mcp-stdio-transport.js +1 -1
  124. package/dist/src/agent/mcp/mcp-transport.d.ts +2 -1
  125. package/dist/src/agent/mcp/mcp-transport.js +22 -4
  126. package/dist/src/agent/memory/compaction.js +19 -17
  127. package/dist/src/agent/memory/context-budget.js +2 -3
  128. package/dist/src/agent/memory/understanding/service.d.ts +1 -0
  129. package/dist/src/agent/memory/understanding/service.js +49 -20
  130. package/dist/src/agent/memory/understanding/types.d.ts +1 -0
  131. package/dist/src/agent/memory/user-context-coordinator.js +6 -0
  132. package/dist/src/agent/orchestration/agent-orchestrator.js +15 -1
  133. package/dist/src/agent/service/direct-turn-helpers.js +14 -5
  134. package/dist/src/agent/skills/index.d.ts +1 -1
  135. package/dist/src/agent/skills/index.js +2 -2
  136. package/dist/src/agent/skills/installer.d.ts +3 -10
  137. package/dist/src/agent/skills/installer.js +99 -156
  138. package/dist/src/agent/skills/marketplace/adapter.types.d.ts +3 -1
  139. package/dist/src/agent/skills/marketplace/adapters/clawhub/adapter.js +30 -6
  140. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +21 -4
  141. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +7 -4
  142. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.d.ts +3 -0
  143. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +7 -1
  144. package/dist/src/agent/skills/marketplace/search.d.ts +2 -2
  145. package/dist/src/agent/skills/marketplace/search.js +52 -21
  146. package/dist/src/agent/skills/skills-marketplace.d.ts +1 -1
  147. package/dist/src/agent/skills/skills-marketplace.js +2 -2
  148. package/dist/src/agent/skills/types.d.ts +0 -8
  149. package/dist/src/agent/tools/exec-command.d.ts +1 -0
  150. package/dist/src/agent/tools/exec-command.js +2 -1
  151. package/dist/src/agent/tools/factory.d.ts +1 -0
  152. package/dist/src/agent/tools/factory.js +17 -2
  153. package/dist/src/agent/tools/managed-job-tool.d.ts +1 -1
  154. package/dist/src/agent/tools/managed-job-tool.js +3 -2
  155. package/dist/src/agent/tools/skill-install-tool.d.ts +2 -2
  156. package/dist/src/agent/tools/skill-install-tool.js +8 -4
  157. package/dist/src/agent/tools/skills-marketplace-search-tool.js +3 -2
  158. package/dist/src/agent/tools/workflow-tool.d.ts +1 -0
  159. package/dist/src/agent/tools/workflow-tool.js +14 -4
  160. package/dist/src/agent-manifest/schema.d.ts +20 -0
  161. package/dist/src/agent-manifest/schema.js +6 -1
  162. package/dist/src/browser/providers/cloakbrowser.js +1 -1
  163. package/dist/src/cli/command-loaders.js +1 -0
  164. package/dist/src/cli/command-manifest.js +4 -0
  165. package/dist/src/cli/commands/doctor/checks/node-version.js +3 -3
  166. package/dist/src/cli/commands/doctor/checks/tool-runtimes.d.ts +2 -0
  167. package/dist/src/cli/commands/doctor/checks/tool-runtimes.js +36 -0
  168. package/dist/src/cli/commands/doctor/flow.js +2 -0
  169. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  170. package/dist/src/cli/commands/models.js +0 -1
  171. package/dist/src/cli/commands/onboard/model.d.ts +18 -0
  172. package/dist/src/cli/commands/onboard/model.js +81 -5
  173. package/dist/src/cli/commands/onboard.js +13 -1
  174. package/dist/src/cli/commands/runtime.d.ts +1 -0
  175. package/dist/src/cli/commands/runtime.js +77 -0
  176. package/dist/src/cli/commands/setup.js +15 -1
  177. package/dist/src/cli/commands/skills.js +7 -4
  178. package/dist/src/config/agent-profile.js +1 -1
  179. package/dist/src/config/index.js +2 -2
  180. package/dist/src/config/schema.d.ts +125 -0
  181. package/dist/src/config/schema.js +77 -2
  182. package/dist/src/config/voice.d.ts +6 -0
  183. package/dist/src/config/voice.js +17 -0
  184. package/dist/src/extensions/install.js +1 -1
  185. package/dist/src/extensions/types/providers.d.ts +4 -0
  186. package/dist/src/gateway/agents-admin.js +1 -1
  187. package/dist/src/gateway/capability-presets-admin.d.ts +9 -0
  188. package/dist/src/gateway/capability-presets-admin.js +24 -6
  189. package/dist/src/gateway/chat-stream/mapper.js +8 -4
  190. package/dist/src/gateway/chat-stream/protocol.d.ts +10 -1
  191. package/dist/src/gateway/heartbeat/service.js +1 -1
  192. package/dist/src/gateway/hono/lib/config-payload.d.ts +1 -0
  193. package/dist/src/gateway/hono/routes/commands-skills.js +2 -1
  194. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  195. package/dist/src/gateway/hono/routes/models.js +11 -11
  196. package/dist/src/gateway/hono/routes/runtime-tools.d.ts +3 -0
  197. package/dist/src/gateway/hono/routes/runtime-tools.js +142 -0
  198. package/dist/src/gateway/hono/routes/understanding-sources.js +2 -1
  199. package/dist/src/gateway/hono/routes/voice.js +43 -2
  200. package/dist/src/gateway/hono/routes/workflows.js +1 -1
  201. package/dist/src/gateway/hono/routes/you.js +22 -25
  202. package/dist/src/gateway/image-generation-setup.d.ts +2 -3
  203. package/dist/src/gateway/image-generation-setup.js +39 -8
  204. package/dist/src/gateway/service/marketplace-service.d.ts +1 -1
  205. package/dist/src/gateway/service/marketplace-service.js +2 -2
  206. package/dist/src/heartbeat/index.js +1 -1
  207. package/dist/src/infra/update-global.js +1 -1
  208. package/dist/src/providers/extension-stream-bridge.js +8 -7
  209. package/dist/src/providers/model-catalog-store.d.ts +35 -0
  210. package/dist/src/providers/model-catalog-store.js +25 -1
  211. package/dist/src/providers/model-catalog-sync-service.js +6 -0
  212. package/dist/src/providers/model-registry.js +4 -4
  213. package/dist/src/providers/prompt-cache-payload.d.ts +13 -0
  214. package/dist/src/providers/prompt-cache-payload.js +110 -0
  215. package/dist/src/providers/register-runtime-providers.js +4 -4
  216. package/dist/src/providers/xopc-cloud-model-source.js +101 -8
  217. package/dist/src/runtime-tools/archive.d.ts +8 -0
  218. package/dist/src/runtime-tools/archive.js +99 -0
  219. package/dist/src/runtime-tools/bootstrap.d.ts +16 -0
  220. package/dist/src/runtime-tools/bootstrap.js +33 -0
  221. package/dist/src/runtime-tools/catalog.d.ts +19 -0
  222. package/dist/src/runtime-tools/catalog.js +59 -0
  223. package/dist/src/runtime-tools/command.d.ts +15 -0
  224. package/dist/src/runtime-tools/command.js +59 -0
  225. package/dist/src/runtime-tools/download-source.d.ts +24 -0
  226. package/dist/src/runtime-tools/download-source.js +125 -0
  227. package/dist/src/runtime-tools/downloader.d.ts +21 -0
  228. package/dist/src/runtime-tools/downloader.js +137 -0
  229. package/dist/src/runtime-tools/environment.d.ts +20 -0
  230. package/dist/src/runtime-tools/environment.js +113 -0
  231. package/dist/src/runtime-tools/errors.d.ts +10 -0
  232. package/dist/src/runtime-tools/errors.js +14 -0
  233. package/dist/src/runtime-tools/index.d.ts +7 -0
  234. package/dist/src/runtime-tools/index.js +7 -0
  235. package/dist/src/runtime-tools/install-lock.d.ts +1 -0
  236. package/dist/src/runtime-tools/install-lock.js +50 -0
  237. package/dist/src/runtime-tools/manager.d.ts +20 -0
  238. package/dist/src/runtime-tools/manager.js +641 -0
  239. package/dist/src/runtime-tools/manifest-store.d.ts +3 -0
  240. package/dist/src/runtime-tools/manifest-store.js +26 -0
  241. package/dist/src/runtime-tools/network.d.ts +9 -0
  242. package/dist/src/runtime-tools/network.js +41 -0
  243. package/dist/src/runtime-tools/offline-bundle.d.ts +16 -0
  244. package/dist/src/runtime-tools/offline-bundle.js +41 -0
  245. package/dist/src/runtime-tools/paths.d.ts +7 -0
  246. package/dist/src/runtime-tools/paths.js +22 -0
  247. package/dist/src/runtime-tools/probe.d.ts +7 -0
  248. package/dist/src/runtime-tools/probe.js +71 -0
  249. package/dist/src/runtime-tools/prune.d.ts +10 -0
  250. package/dist/src/runtime-tools/prune.js +93 -0
  251. package/dist/src/runtime-tools/types.d.ts +70 -0
  252. package/dist/src/runtime-tools/types.js +1 -0
  253. package/dist/src/share/share-zip.js +1 -1
  254. package/dist/src/storage/sqlite/migrations/113_memory_evidence_single_source.sql +42 -20
  255. package/dist/src/tasks/home-query-service.js +1 -5
  256. package/dist/src/tasks/index.js +2 -2
  257. package/dist/src/tasks/project-operating-view-service.d.ts +2 -1
  258. package/dist/src/tasks/project-operating-view-service.js +6 -4
  259. package/dist/src/tasks/task-dependency-service.d.ts +2 -1
  260. package/dist/src/tasks/task-dependency-service.js +15 -0
  261. package/dist/src/tunnel/frpc-binary.js +1 -1
  262. package/dist/src/user-context/domain.d.ts +2 -1
  263. package/dist/src/user-context/domain.js +12 -1
  264. package/dist/src/user-context/manual-understanding.js +8 -10
  265. package/dist/src/user-context/planner.js +1 -6
  266. package/dist/src/user-context/sources/activity-clustering.d.ts +5 -0
  267. package/dist/src/user-context/sources/activity-clustering.js +130 -0
  268. package/dist/src/user-context/sources/catalog.js +26 -0
  269. package/dist/src/user-context/sources/local-source-contract.d.ts +3 -0
  270. package/dist/src/user-context/sources/local-source-contract.js +15 -0
  271. package/dist/src/user-context/sources/repository.js +7 -1
  272. package/dist/src/user-context/sources/types.d.ts +7 -1
  273. package/dist/src/user-context/understanding.d.ts +15 -0
  274. package/dist/src/user-context/understanding.js +24 -0
  275. package/dist/src/voice/local/model-files.js +1 -1
  276. package/dist/src/voice/metadata/builtin.js +99 -32
  277. package/dist/src/voice/metadata/types.d.ts +3 -0
  278. package/dist/src/voice/stt/availability.js +4 -1
  279. package/dist/src/voice/stt/config-slice.d.ts +0 -2
  280. package/dist/src/voice/stt/config-slice.js +1 -6
  281. package/dist/src/voice/stt/factory.js +2 -2
  282. package/dist/src/voice/stt/index.d.ts +2 -3
  283. package/dist/src/voice/stt/list-providers.js +1 -1
  284. package/dist/src/voice/stt/providers/alibaba-transcription.d.ts +0 -19
  285. package/dist/src/voice/stt/providers/alibaba-transcription.js +59 -132
  286. package/dist/src/voice/stt/providers/index.d.ts +1 -0
  287. package/dist/src/voice/stt/providers/index.js +2 -1
  288. package/dist/src/voice/stt/providers/openai-transcription.d.ts +2 -2
  289. package/dist/src/voice/stt/providers/openai-transcription.js +4 -4
  290. package/dist/src/voice/stt/providers/xopc-cloud-transcription.d.ts +2 -0
  291. package/dist/src/voice/stt/providers/xopc-cloud-transcription.js +49 -0
  292. package/dist/src/voice/stt/types.js +2 -2
  293. package/dist/src/voice/tts/providers/index.d.ts +1 -0
  294. package/dist/src/voice/tts/providers/index.js +2 -1
  295. package/dist/src/voice/tts/providers/xopc-cloud-speech.d.ts +2 -0
  296. package/dist/src/voice/tts/providers/xopc-cloud-speech.js +113 -0
  297. package/dist/src/voice/tts/types.d.ts +1 -1
  298. package/dist/src/work-discovery/analyzer.js +9 -4
  299. package/dist/src/work-discovery/candidate-discovery.d.ts +1 -0
  300. package/dist/src/work-discovery/candidate-discovery.js +3 -3
  301. package/dist/src/work-discovery/index.js +2 -2
  302. package/dist/src/work-discovery/service.d.ts +2 -1
  303. package/dist/src/work-discovery/service.js +126 -37
  304. package/dist/src/work-discovery/types.d.ts +1 -0
  305. package/dist/src/workflows/service/workflow-run-service.js +8 -0
  306. package/dist/src/workflows/service/workflow-run-service.types.d.ts +1 -1
  307. package/package.json +1 -1
  308. package/dist/gateway/static/root/assets/agents-D1t4SfMQ.js +0 -68
  309. package/dist/gateway/static/root/assets/apps-page-Cgrgu5OW.js +0 -1
  310. package/dist/gateway/static/root/assets/automations-page-CtJxstKh.js +0 -6
  311. package/dist/gateway/static/root/assets/browser-settings-page-DW99iDmD.js +0 -8
  312. package/dist/gateway/static/root/assets/capabilities-settings-panel-CHUrT9EB.js +0 -7
  313. package/dist/gateway/static/root/assets/capability-presets-api-BB8t4Ja7.js +0 -1
  314. package/dist/gateway/static/root/assets/capability-presets-settings-panel-Cycrv0YV.js +0 -1
  315. package/dist/gateway/static/root/assets/channels-settings-V96gPUAU.js +0 -1
  316. package/dist/gateway/static/root/assets/channels-status-swr-Cz7SAAkm.js +0 -1
  317. package/dist/gateway/static/root/assets/connectors-page-BhlyQoQI.js +0 -2
  318. package/dist/gateway/static/root/assets/extension-settings-page-IyQrSILY.js +0 -1
  319. package/dist/gateway/static/root/assets/home-page-B2Kagoh8.js +0 -3
  320. package/dist/gateway/static/root/assets/html-workspace-editor-C3DKAkMc.js +0 -1
  321. package/dist/gateway/static/root/assets/index-CYT5DOzr.js +0 -150
  322. package/dist/gateway/static/root/assets/index-D6e3tPL-.css +0 -1
  323. package/dist/gateway/static/root/assets/local-app-workbench-page-BHYbFjqy.js +0 -2
  324. package/dist/gateway/static/root/assets/logs-page-IIn8Tess.js +0 -2
  325. package/dist/gateway/static/root/assets/messages-B4XqB8I6.js +0 -3
  326. package/dist/gateway/static/root/assets/notes-workbench-S2sBVOLw.js +0 -4
  327. package/dist/gateway/static/root/assets/project-detail-page-BilzoCJ7.js +0 -1
  328. package/dist/gateway/static/root/assets/projects-page-BoQUyacP.js +0 -1
  329. package/dist/gateway/static/root/assets/remote-access-hub-DUyUaCRF.js +0 -1
  330. package/dist/gateway/static/root/assets/sessions-page-Dzxlq1F0.js +0 -1
  331. package/dist/gateway/static/root/assets/settings-advanced-gate-TzwlZxU6.js +0 -1
  332. package/dist/gateway/static/root/assets/settings-page-DQmMKf8r.js +0 -1
  333. package/dist/gateway/static/root/assets/shares-settings-CkyuGlZK.js +0 -1
  334. package/dist/gateway/static/root/assets/skill-reload-api-BJCePQK5.js +0 -1
  335. package/dist/gateway/static/root/assets/skills-page-BYWLfmJi.js +0 -2
  336. package/dist/gateway/static/root/assets/skills-page.utils-Jhm24i4h.js +0 -1
  337. package/dist/gateway/static/root/assets/task-detail-page-DLAdxI6e.js +0 -1
  338. package/dist/gateway/static/root/assets/user-context-page-9AAFpGAL.js +0 -1
  339. package/dist/gateway/static/root/assets/voice-api-key-field-BISTPfq_.js +0 -1
  340. package/dist/gateway/static/root/assets/workflow-run-setup-panel-DHqHP8_6.js +0 -3
  341. package/dist/gateway/static/root/assets/workflows-page-0b4_DFHr.js +0 -11
  342. /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();
@@ -43,7 +43,7 @@ export interface OpenAiImagesProviderOptions {
43
43
  /** Sync env / cfg lookup that decides if the provider has any usable credential. */
44
44
  isConfigured: (ctx: ImageGenerationProviderConfiguredContext) => boolean;
45
45
  /** Resolve API key for one request. May return null when using OAuth/header auth. */
46
- resolveApiKey: (req: ImageGenerationRequest) => string | null | undefined;
46
+ resolveApiKey: (req: ImageGenerationRequest) => string | null | undefined | Promise<string | null | undefined>;
47
47
  /** Resolve endpoint info per-request (region, baseUrl override, Azure deployment, …). */
48
48
  resolveEndpoint: (req: ImageGenerationRequest) => OpenAiImagesEndpointResolution;
49
49
  /** Default per-call timeout. Combined with provider-level config in provider-http. */
@@ -26,7 +26,7 @@ function createOpenAiImagesProvider(options) {
26
26
  capabilities: options.capabilities,
27
27
  isConfigured: options.isConfigured,
28
28
  async generateImage(req) {
29
- const apiKey = options.resolveApiKey(req) ?? null;
29
+ const apiKey = await options.resolveApiKey(req) ?? null;
30
30
  const endpoint = options.resolveEndpoint(req);
31
31
  const httpDefaults = resolveProviderHttpRequestConfig({
32
32
  providerId: options.id,
@@ -2,6 +2,8 @@ import type { ModelsJsonConfig } from '../../../config/models-json.js';
2
2
  import type { ImageGenerationProvider, ImageGenerationProviderSummary } from './types.js';
3
3
  export declare function reloadImageGenerationProviders(config?: ModelsJsonConfig): void;
4
4
  export declare function getImageGenerationProvider(providerId: string): ImageGenerationProvider | undefined;
5
+ /** Resolve the auth mode consistently for provider objects and catalog summaries. */
6
+ export declare function resolveImageGenerationCredentialMode(provider: Pick<ImageGenerationProvider, 'credentialMode'>): NonNullable<ImageGenerationProvider['credentialMode']>;
5
7
  export declare function listImageGenerationProviders(): ImageGenerationProvider[];
6
8
  export declare function listImageGenerationProvidersSummary(): ImageGenerationProviderSummary[];
7
9
  export type { ImageGenerationProvider, ImageGenerationProviderSummary } from './types.js';
@@ -7,24 +7,30 @@ import { buildFalImageGenerationProvider } from "./providers/fal.js";
7
7
  import { buildGoogleImageGenerationProvider } from "./providers/google.js";
8
8
  import { buildMinimaxImageGenerationProvider } from "./providers/minimax.js";
9
9
  import { buildOpenAIImageGenerationProvider } from "./providers/openai.js";
10
+ import { buildXopcCloudImageGenerationProvider } from "./providers/xopc-cloud.js";
10
11
  //#region src/agent/image/generation/provider-registry.ts
11
12
  init_models_json();
12
13
  init_logger();
13
14
  const log = createLogger("ImageGenerationRegistry");
14
- const builtInProviders = [
15
- buildOpenAIImageGenerationProvider(),
16
- buildDashScopeImageGenerationProvider(),
17
- buildMinimaxImageGenerationProvider(),
18
- buildGoogleImageGenerationProvider(),
19
- buildFalImageGenerationProvider()
20
- ];
21
- let providers = [...builtInProviders];
15
+ function buildBuiltInProviders() {
16
+ const cloud = buildXopcCloudImageGenerationProvider();
17
+ return [
18
+ ...cloud ? [cloud] : [],
19
+ buildOpenAIImageGenerationProvider(),
20
+ buildDashScopeImageGenerationProvider(),
21
+ buildMinimaxImageGenerationProvider(),
22
+ buildGoogleImageGenerationProvider(),
23
+ buildFalImageGenerationProvider()
24
+ ];
25
+ }
26
+ let providers = buildBuiltInProviders();
22
27
  let providersById = new Map(providers.map((provider) => [provider.id, provider]));
23
28
  let customProvidersLoaded = false;
24
29
  function ensureCustomProvidersLoaded() {
25
30
  if (!customProvidersLoaded) reloadImageGenerationProviders();
26
31
  }
27
32
  function reloadImageGenerationProviders(config) {
33
+ const builtInProviders = buildBuiltInProviders();
28
34
  let resolved = config;
29
35
  if (!resolved) {
30
36
  const loaded = loadModelsJson();
@@ -54,6 +60,10 @@ function getImageGenerationProvider(providerId) {
54
60
  ensureCustomProvidersLoaded();
55
61
  return providersById.get(providerId);
56
62
  }
63
+ /** Resolve the auth mode consistently for provider objects and catalog summaries. */
64
+ function resolveImageGenerationCredentialMode(provider) {
65
+ return provider.credentialMode ?? "api-key";
66
+ }
57
67
  function listImageGenerationProviders() {
58
68
  ensureCustomProvidersLoaded();
59
69
  return [...providers];
@@ -64,9 +74,10 @@ function listImageGenerationProvidersSummary() {
64
74
  id: provider.id,
65
75
  label: provider.label,
66
76
  source: provider.source ?? "builtin",
67
- credentialMode: provider.credentialMode ?? "api-key",
77
+ credentialMode: resolveImageGenerationCredentialMode(provider),
68
78
  ...provider.documentationUrl ? { documentationUrl: provider.documentationUrl } : {},
69
79
  ...provider.apiKeyUrl ? { apiKeyUrl: provider.apiKeyUrl } : {},
80
+ configFields: structuredClone(provider.configFields ?? []),
70
81
  defaultModel: provider.defaultModel,
71
82
  models: [...provider.models],
72
83
  capabilities: provider.capabilities,
@@ -74,4 +85,4 @@ function listImageGenerationProvidersSummary() {
74
85
  }));
75
86
  }
76
87
  //#endregion
77
- export { getImageGenerationProvider, listImageGenerationProviders, listImageGenerationProvidersSummary, reloadImageGenerationProviders };
88
+ export { getImageGenerationProvider, listImageGenerationProviders, listImageGenerationProvidersSummary, reloadImageGenerationProviders, resolveImageGenerationCredentialMode };
@@ -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 };
@@ -0,0 +1,2 @@
1
+ import type { ImageGenerationProvider } from '../types.js';
2
+ export declare function buildXopcCloudImageGenerationProvider(): ImageGenerationProvider | undefined;
@@ -0,0 +1,74 @@
1
+ import { getModelCatalogStore, init_model_catalog_store } from "../../../../providers/model-catalog-store.js";
2
+ import { init_xopc_cloud_config, resolveXopcModelRouterUrl } from "../../../../providers/xopc-cloud-config.js";
3
+ import { getProviderAuthService, init_provider_auth_service } from "../../../../providers/provider-auth-service.js";
4
+ import { createOpenAiImagesProvider } from "../openai-images-provider.js";
5
+ //#region src/agent/image/generation/providers/xopc-cloud.ts
6
+ init_model_catalog_store();
7
+ init_provider_auth_service();
8
+ init_xopc_cloud_config();
9
+ function buildXopcCloudImageGenerationProvider() {
10
+ const source = getModelCatalogStore().getSource("xopc-cloud");
11
+ const models = source?.models.filter((model) => model.availability === "available" && model.kind === "image" && model.operations.includes("images.generate")) ?? [];
12
+ if (models.length === 0) return void 0;
13
+ const modelCapabilities = Object.fromEntries(models.map((model) => [model.id, toProviderCapabilities(model)]));
14
+ const defaultModel = models[0].id;
15
+ const baseUrl = source?.baseUrl ?? resolveXopcModelRouterUrl();
16
+ const executors = new Map(models.map((model) => [model.id, createOpenAiImagesProvider({
17
+ id: "xopc-cloud",
18
+ label: "XOPC Model Service",
19
+ defaultModel: model.id,
20
+ models: [model.id],
21
+ capabilities: modelCapabilities[model.id],
22
+ isConfigured: () => true,
23
+ resolveApiKey: (request) => getProviderAuthService().resolveApiKey("xopc-cloud", request.signal),
24
+ resolveEndpoint: () => ({ baseUrl }),
25
+ ...model.imageGeneration?.sizes[0] ? { defaultSize: model.imageGeneration.sizes[0] } : {}
26
+ })]));
27
+ return {
28
+ id: "xopc-cloud",
29
+ label: "XOPC Model Service",
30
+ credentialMode: "oauth",
31
+ defaultModel,
32
+ models: models.map((model) => model.id),
33
+ capabilities: modelCapabilities[defaultModel],
34
+ modelCapabilities,
35
+ isConfigured: () => true,
36
+ async generateImage(request) {
37
+ const executor = executors.get(request.model);
38
+ if (!executor) throw new Error(`Image model is not available from XOPC Model Service: ${request.model}`);
39
+ const geometry = modelCapabilities[request.model]?.geometry;
40
+ const size = request.size ?? (request.aspectRatio && geometry?.aspectRatios?.includes(request.aspectRatio) ? request.aspectRatio : void 0) ?? (request.resolution && geometry?.resolutions?.includes(request.resolution) ? request.resolution : void 0);
41
+ return executor.generateImage({
42
+ ...request,
43
+ ...size ? { size } : {}
44
+ });
45
+ }
46
+ };
47
+ }
48
+ function toProviderCapabilities(model) {
49
+ const image = model.imageGeneration;
50
+ return {
51
+ generate: {
52
+ maxCount: image?.maxCount ?? 1,
53
+ supportsSize: Boolean(image?.sizes.length),
54
+ supportsAspectRatio: Boolean(image?.aspectRatios?.length)
55
+ },
56
+ edit: {
57
+ enabled: model.operations.includes("images.edit"),
58
+ maxInputImages: image?.maxInputImages ?? 0,
59
+ supportsSize: Boolean(image?.sizes.length),
60
+ supportsAspectRatio: Boolean(image?.aspectRatios?.length)
61
+ },
62
+ geometry: {
63
+ sizes: image?.sizes ?? [],
64
+ aspectRatios: image?.aspectRatios ?? []
65
+ },
66
+ output: {
67
+ qualities: image?.qualities ?? [],
68
+ formats: image?.formats ?? [],
69
+ backgrounds: image?.backgrounds ?? []
70
+ }
71
+ };
72
+ }
73
+ //#endregion
74
+ export { buildXopcCloudImageGenerationProvider };
@@ -48,13 +48,25 @@ 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;
54
65
  source?: 'builtin' | 'custom';
55
- credentialMode?: 'api-key' | 'none';
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;
@@ -67,9 +79,10 @@ export interface ImageGenerationProviderSummary {
67
79
  id: string;
68
80
  label: string;
69
81
  source: 'builtin' | 'custom';
70
- credentialMode: 'api-key' | 'none';
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 };