@xopcai/xopc 0.0.161 → 0.0.163

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 (334) hide show
  1. package/README.md +4 -2
  2. package/README.zh-CN.md +4 -2
  3. package/dist/browser-ext/manifest.json +1 -1
  4. package/dist/extensions/telegram/xopc.extension.json +1 -1
  5. package/dist/gateway/static/root/assets/{activity-store-o7GRljfD.js → activity-store-Xj95LzTv.js} +1 -1
  6. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-9R3szLMc.js → agent-avatar-dicebear-C-QeUFwU.js} +1 -1
  7. package/dist/gateway/static/root/assets/agents-DVKlWKJE.js +2 -0
  8. package/dist/gateway/static/root/assets/{api-jSTqFMq9.js → api-BTLmAm1_.js} +1 -1
  9. package/dist/gateway/static/root/assets/{app-management-settings-panel-D81cyE76.js → app-management-settings-panel-zc6Gf-S5.js} +1 -1
  10. package/dist/gateway/static/root/assets/{appearance-settings-Ct6bZQCV.js → appearance-settings-0fMLnOWn.js} +1 -1
  11. package/dist/gateway/static/root/assets/apps-page-BZXEJDIV.js +1 -0
  12. package/dist/gateway/static/root/assets/{archive-plugin-CfD7AZKn.js → archive-plugin-DOiR_E21.js} +1 -1
  13. package/dist/gateway/static/root/assets/{attachment-load-CP_Gaxt3.js → attachment-load-BxmYl1D1.js} +1 -1
  14. package/dist/gateway/static/root/assets/{automation-suggestion-card-BGKM_NDZ.js → automation-suggestion-card-BhZOirad.js} +1 -1
  15. package/dist/gateway/static/root/assets/automations-page-B8CnkoXv.js +6 -0
  16. package/dist/gateway/static/root/assets/{binary-plugins-IPr2EVnS.js → binary-plugins-DTTKsvgk.js} +1 -1
  17. package/dist/gateway/static/root/assets/{block-editor-B6aHEGA6.js → block-editor-C7se7iqg.js} +46 -46
  18. package/dist/gateway/static/root/assets/browser-settings-page-BCPWKI9V.js +8 -0
  19. package/dist/gateway/static/root/assets/browser-workflow-inputs-kxmStCcv.js +1 -0
  20. package/dist/gateway/static/root/assets/browser-workflows-page-CwYf9OM_.js +3 -0
  21. package/dist/gateway/static/root/assets/capabilities-settings-panel-C7lr_mX2.js +2 -0
  22. package/dist/gateway/static/root/assets/{capability-presets-api-CCX9-LjU.js → capability-presets-api-BZKh2cWX.js} +1 -1
  23. package/dist/gateway/static/root/assets/capability-presets-settings-panel-Ble9kHRu.js +2 -0
  24. package/dist/gateway/static/root/assets/{channel-recipient-api-MmLMLDWf.js → channel-recipient-api-r7tdbnJE.js} +1 -1
  25. package/dist/gateway/static/root/assets/channels-settings-CtQQQHrv.js +1 -0
  26. package/dist/gateway/static/root/assets/channels-status-swr-_VirfMKW.js +1 -0
  27. package/dist/gateway/static/root/assets/{connector-logo-BbjzIs87.js → connector-logo-BpnQYAxA.js} +1 -1
  28. package/dist/gateway/static/root/assets/connectors-page-BXWJSJeY.js +2 -0
  29. package/dist/gateway/static/root/assets/{desktop-pet-CYH5ZSXy.js → desktop-pet-B86W4a5c.js} +1 -1
  30. package/dist/gateway/static/root/assets/{desktop-pet-settings-DQLqGLc0.js → desktop-pet-settings-uv8Grtgk.js} +1 -1
  31. package/dist/gateway/static/root/assets/{directory-picker-path-field-ClsiXhmz.js → directory-picker-path-field-C4TTvf7p.js} +1 -1
  32. package/dist/gateway/static/root/assets/{dreaming-settings-CjMPPdzg.js → dreaming-settings-CzJAUPvM.js} +3 -3
  33. package/dist/gateway/static/root/assets/{extension-debug-page-57eizjhB.js → extension-debug-page-Ci2mOYUt.js} +1 -1
  34. package/dist/gateway/static/root/assets/{extension-page-CsbSb3u1.js → extension-page-DeXdmhXQ.js} +1 -1
  35. package/dist/gateway/static/root/assets/extension-settings-page-C93vaOsU.js +1 -0
  36. package/dist/gateway/static/root/assets/{gateway-config-api-DIPJuzBZ.js → gateway-config-api-C31Hlblp.js} +1 -1
  37. package/dist/gateway/static/root/assets/{gateway-settings-CDLqAQY7.js → gateway-settings-D3zS6RZh.js} +1 -1
  38. package/dist/gateway/static/root/assets/{gateway-startup-retry-DrfSJtvT.js → gateway-startup-retry-CSRvCqxh.js} +1 -1
  39. package/dist/gateway/static/root/assets/goal-create-dialog-CWp2b7__.js +1 -0
  40. package/dist/gateway/static/root/assets/goal-detail-page-Dtm29FxD.js +4 -0
  41. package/dist/gateway/static/root/assets/{goals-config-api-lGC10UkU.js → goals-config-api-D4wYNRrf.js} +1 -1
  42. package/dist/gateway/static/root/assets/goals-page-jMzBJs6e.js +2 -0
  43. package/dist/gateway/static/root/assets/{goals-settings-BWq0pdrA.js → goals-settings-Bx2jVvhQ.js} +1 -1
  44. package/dist/gateway/static/root/assets/{heartbeat-settings-D4o8BJVv.js → heartbeat-settings-BEIF1eXy.js} +1 -1
  45. package/dist/gateway/static/root/assets/index-BXtJvaQl.css +1 -0
  46. package/dist/gateway/static/root/assets/index-HZdBKfk_.js +199 -0
  47. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-6T2QYehS.js → keyboard-shortcuts-settings-DOEDpvTM.js} +1 -1
  48. package/dist/gateway/static/root/assets/local-app-workbench-page-CseW9jD3.js +2 -0
  49. package/dist/gateway/static/root/assets/{local-apps-page-DCjg2K9f.js → local-apps-page-B0OpGpxv.js} +1 -1
  50. package/dist/gateway/static/root/assets/{locale-store-Dar-xqQr.js → locale-store-Ys6RP7Be.js} +1 -1
  51. package/dist/gateway/static/root/assets/logs-page-DVqPbth5.js +7 -0
  52. package/dist/gateway/static/root/assets/{markdown-split-rt1XO43g.js → markdown-split-CEZwysCH.js} +1 -1
  53. package/dist/gateway/static/root/assets/{media-plugins-Bwo8CJuh.js → media-plugins-CpGKE7B0.js} +1 -1
  54. package/dist/gateway/static/root/assets/messages-BzI9Wx30.js +5 -0
  55. package/dist/gateway/static/root/assets/{notes-page-Dp-pkX7d.js → notes-page-CdiuDZ5a.js} +1 -1
  56. package/dist/gateway/static/root/assets/notes-workbench-mrc3xtpn.js +4 -0
  57. package/dist/gateway/static/root/assets/{page-tabs-CzZ4iKOb.js → page-tabs-BkH5AVV2.js} +1 -1
  58. package/dist/gateway/static/root/assets/{preview-open-alternatives-3E_Qa-58.js → preview-open-alternatives-CQai8f9D.js} +1 -1
  59. package/dist/gateway/static/root/assets/{product-open-page-B2T48Sbt.js → product-open-page-B2kSdB2b.js} +1 -1
  60. package/dist/gateway/static/root/assets/project-detail-page-CfhPJLkH.js +1 -0
  61. package/dist/gateway/static/root/assets/projects-page-BfMoKjdm.js +1 -0
  62. package/dist/gateway/static/root/assets/remote-access-hub-CrDtcsZ9.js +1 -0
  63. package/dist/gateway/static/root/assets/save-bar-controls-NGYnO7n7.js +1 -0
  64. package/dist/gateway/static/root/assets/schedule-field-nLOphnv3.js +1 -0
  65. package/dist/gateway/static/root/assets/{schema-form-DC-iU5IG.js → schema-form-D0e90ndE.js} +1 -1
  66. package/dist/gateway/static/root/assets/sessions-page-D3DbF3dV.js +1 -0
  67. package/dist/gateway/static/root/assets/settings-advanced-gate-BZp0O2dH.js +1 -0
  68. package/dist/gateway/static/root/assets/{settings-form-section-CNqF6IwY.js → settings-form-section-X2Sl-EAk.js} +1 -1
  69. package/dist/gateway/static/root/assets/{settings-loading-skeleton-DkvwitK_.js → settings-loading-skeleton-DOnUabm7.js} +1 -1
  70. package/dist/gateway/static/root/assets/settings-page-C4UUNi1n.js +1 -0
  71. package/dist/gateway/static/root/assets/{settings-page-layout-DWvNgISx.js → settings-page-layout-C1yYqbT6.js} +1 -1
  72. package/dist/gateway/static/root/assets/setup-status-panel-84iao4DZ.js +1 -0
  73. package/dist/gateway/static/root/assets/{share-preview-page-DGpSPW-n.js → share-preview-page-Cfy_pH7V.js} +1 -1
  74. package/dist/gateway/static/root/assets/shares-settings-DtcwQvRG.js +1 -0
  75. package/dist/gateway/static/root/assets/skill-reload-api-L7j5Gc8Z.js +1 -0
  76. package/dist/gateway/static/root/assets/skills-page-1Ps8PjsP.js +2 -0
  77. package/dist/gateway/static/root/assets/{system-settings-panel-8TxxSbUw.js → system-settings-panel-Da81RJ6G.js} +1 -1
  78. package/dist/gateway/static/root/assets/{theme-store-B5FzMWOx.js → theme-store-DflSp9o4.js} +1 -1
  79. package/dist/gateway/static/root/assets/time-picker-BIkOW-2L.js +1 -0
  80. package/dist/gateway/static/root/assets/{typed-models-lib-DEGtSA5h.js → typed-models-lib--HptwFcD.js} +1 -1
  81. package/dist/gateway/static/root/assets/{use-channel-catalog-BDU6FneG.js → use-channel-catalog-CMHY4ZfW.js} +1 -1
  82. package/dist/gateway/static/root/assets/user-context-page-BYAAs2iW.js +1 -0
  83. package/dist/gateway/static/root/assets/voice-api-key-field-nvIZerol.js +1 -0
  84. package/dist/gateway/static/root/assets/work-discovery-page-J35JkJ7_.js +1 -0
  85. package/dist/gateway/static/root/assets/work-item-detail-page-C4wYDYqV.js +1 -0
  86. package/dist/gateway/static/root/assets/work-page-DMvitV6c.js +1 -0
  87. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-Cwi8Pz7n.js → workflow-run-setup-panel-D96MHABy.js} +2 -2
  88. package/dist/gateway/static/root/assets/workflows-page-JMN0nMbM.js +11 -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 +1 -0
  92. package/dist/src/agent/agent-manager.js +1 -0
  93. package/dist/src/agent/client-error-format.d.ts +1 -1
  94. package/dist/src/agent/client-error-format.js +9 -5
  95. package/dist/src/agent/embedded/run-for-session.js +38 -31
  96. package/dist/src/agent/embedded/session-runner.d.ts +1 -0
  97. package/dist/src/agent/embedded/session-runner.js +12 -4
  98. package/dist/src/agent/failover-error.d.ts +1 -1
  99. package/dist/src/agent/image/generation/openai-compatible-image-provider.d.ts +2 -6
  100. package/dist/src/agent/image/generation/openai-compatible-image-provider.js +1 -3
  101. package/dist/src/agent/image/generation/provider-registry.d.ts +5 -46
  102. package/dist/src/agent/image/generation/provider-registry.js +24 -73
  103. package/dist/{extensions/dashscope/src/image-generation-provider.d.ts → src/agent/image/generation/providers/dashscope.d.ts} +3 -6
  104. package/dist/{extensions/dashscope/src/image-generation-provider.js → src/agent/image/generation/providers/dashscope.js} +36 -59
  105. package/dist/{extensions/fal/src/image-generation-provider.d.ts → src/agent/image/generation/providers/fal.d.ts} +1 -1
  106. package/dist/{extensions/fal/src/image-generation-provider.js → src/agent/image/generation/providers/fal.js} +19 -29
  107. package/dist/{extensions/google/src/image-generation-provider.d.ts → src/agent/image/generation/providers/google.d.ts} +2 -2
  108. package/dist/{extensions/google/src/image-generation-provider.js → src/agent/image/generation/providers/google.js} +23 -30
  109. package/dist/{extensions/minimax/src/image-generation-provider.d.ts → src/agent/image/generation/providers/minimax.d.ts} +2 -5
  110. package/dist/{extensions/minimax/src/image-generation-provider.js → src/agent/image/generation/providers/minimax.js} +35 -51
  111. package/dist/{extensions/openai/src/image-generation-provider.d.ts → src/agent/image/generation/providers/openai.d.ts} +2 -2
  112. package/dist/{extensions/openai/src/image-generation-provider.js → src/agent/image/generation/providers/openai.js} +13 -38
  113. package/dist/src/agent/image/generation/runtime-types.d.ts +1 -0
  114. package/dist/src/agent/image/generation/runtime.d.ts +1 -3
  115. package/dist/src/agent/image/generation/runtime.js +6 -6
  116. package/dist/src/agent/image/generation/types.d.ts +23 -3
  117. package/dist/src/agent/image/index.d.ts +1 -1
  118. package/dist/src/agent/image/index.js +2 -2
  119. package/dist/src/agent/media-generation/runtime-shared.d.ts +2 -0
  120. package/dist/src/agent/media-generation/runtime-shared.js +1 -0
  121. package/dist/src/agent/outcomes/task-evaluation.d.ts +20 -0
  122. package/dist/src/agent/outcomes/task-evaluation.js +48 -0
  123. package/dist/src/agent/outcomes/task-verifier.d.ts +29 -0
  124. package/dist/src/agent/outcomes/task-verifier.js +71 -0
  125. package/dist/src/agent/prompt/memory/index.js +1 -1
  126. package/dist/src/agent/prompt/service-prompt-builder.js +32 -1
  127. package/dist/src/agent/service.js +1 -0
  128. package/dist/src/agent/service.types.d.ts +1 -0
  129. package/dist/src/agent/tools/browser/tool/browser-use-tool.d.ts +1 -7
  130. package/dist/src/agent/tools/browser/tool/browser-use-tool.js +2 -73
  131. package/dist/src/agent/tools/browser/tool/schemas.d.ts +1 -13
  132. package/dist/src/agent/tools/browser/tool/schemas.js +1 -9
  133. package/dist/src/agent/tools/browser-recipe-tool.d.ts +12 -0
  134. package/dist/src/agent/tools/browser-recipe-tool.js +113 -0
  135. package/dist/src/agent/tools/factory.d.ts +2 -0
  136. package/dist/src/agent/tools/factory.js +6 -1
  137. package/dist/src/agent/tools/image-generate-tool.d.ts +2 -0
  138. package/dist/src/agent/tools/image-generate-tool.js +14 -7
  139. package/dist/src/agent/tools/index.d.ts +1 -0
  140. package/dist/src/agent/tools/index.js +2 -1
  141. package/dist/src/auth/sync-provider-auth.d.ts +3 -0
  142. package/dist/src/auth/sync-provider-auth.js +12 -1
  143. package/dist/src/automations/domain/types.d.ts +13 -0
  144. package/dist/src/automations/domain/validation.d.ts +44 -24
  145. package/dist/src/automations/domain/validation.js +27 -18
  146. package/dist/src/automations/draft/automation-draft-validator.d.ts +6 -1
  147. package/dist/src/automations/draft/automation-draft-validator.js +1 -0
  148. package/dist/src/automations/service/action-executor.d.ts +1 -0
  149. package/dist/src/automations/service/action-executor.js +22 -0
  150. package/dist/src/browser/index.d.ts +0 -1
  151. package/dist/src/browser/index.js +1 -2
  152. package/dist/src/browser/pipeline/runner.d.ts +9 -2
  153. package/dist/src/browser/pipeline/runner.js +151 -105
  154. package/dist/src/browser/pipeline/schema.d.ts +21 -15
  155. package/dist/src/browser/pipeline/schema.js +93 -99
  156. package/dist/src/browser/recipes/index.d.ts +3 -0
  157. package/dist/src/browser/recipes/index.js +3 -0
  158. package/dist/src/browser/recipes/repository.d.ts +13 -0
  159. package/dist/src/browser/recipes/repository.js +81 -0
  160. package/dist/src/browser/recipes/runtime-service.d.ts +6 -0
  161. package/dist/src/browser/recipes/runtime-service.js +30 -0
  162. package/dist/src/browser/recipes/service.d.ts +36 -0
  163. package/dist/src/browser/recipes/service.js +186 -0
  164. package/dist/src/browser/recipes/types.d.ts +36 -0
  165. package/dist/src/cli/commands/browser-cli-helpers.js +6 -12
  166. package/dist/src/cli/commands/browser.js +4 -3
  167. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  168. package/dist/src/cli/commands/models.js +2 -5
  169. package/dist/src/cli/commands/onboard/model.js +3 -2
  170. package/dist/src/cli/commands/setup-shared/types.d.ts +1 -1
  171. package/dist/src/config/agent-profile.js +1 -1
  172. package/dist/src/config/index.js +2 -2
  173. package/dist/src/config/models-json.d.ts +6 -0
  174. package/dist/src/config/models-json.js +2 -6
  175. package/dist/src/config/schema.d.ts +29 -18
  176. package/dist/src/config/schema.js +44 -33
  177. package/dist/src/gateway/agents-admin.js +1 -1
  178. package/dist/src/gateway/hono/app.js +12 -6
  179. package/dist/src/gateway/hono/lib/config-payload.d.ts +1 -1
  180. package/dist/src/gateway/hono/lib/safe-providers-config.d.ts +0 -3
  181. package/dist/src/gateway/hono/lib/safe-providers-config.js +1 -3
  182. package/dist/src/gateway/hono/middleware/strict-rate-limit.d.ts +4 -0
  183. package/dist/src/gateway/hono/middleware/strict-rate-limit.js +8 -1
  184. package/dist/src/gateway/hono/routes/browser-workflows.d.ts +3 -0
  185. package/dist/src/gateway/hono/routes/browser-workflows.js +78 -0
  186. package/dist/src/gateway/hono/routes/config-patch/misc.js +2 -11
  187. package/dist/src/gateway/hono/routes/deps.d.ts +1 -0
  188. package/dist/src/gateway/hono/routes/home.js +1 -0
  189. package/dist/src/gateway/hono/routes/index.js +4 -0
  190. package/dist/src/gateway/hono/routes/interaction-state.d.ts +3 -0
  191. package/dist/src/gateway/hono/routes/interaction-state.js +45 -0
  192. package/dist/src/gateway/hono/routes/lazy-bundles.js +17 -2
  193. package/dist/src/gateway/hono/routes/memory.js +33 -4
  194. package/dist/src/gateway/hono/routes/models.js +151 -129
  195. package/dist/src/gateway/hono/routes/task-outcomes.d.ts +3 -0
  196. package/dist/src/gateway/hono/routes/task-outcomes.js +109 -0
  197. package/dist/src/gateway/hono/routes/you.d.ts +10 -2
  198. package/dist/src/gateway/hono/routes/you.js +184 -28
  199. package/dist/src/gateway/image-generation-setup.d.ts +40 -0
  200. package/dist/src/gateway/image-generation-setup.js +130 -0
  201. package/dist/src/gateway/rate-limit/buckets.d.ts +3 -0
  202. package/dist/src/gateway/rate-limit/buckets.js +12 -0
  203. package/dist/src/gateway/service/run-gateway-agent.js +84 -0
  204. package/dist/src/gateway/service.d.ts +6 -0
  205. package/dist/src/gateway/service.js +24 -0
  206. package/dist/src/media-shared/http/private-network.d.ts +1 -1
  207. package/dist/src/media-shared/http/private-network.js +1 -1
  208. package/dist/src/proactive/insight-repository.d.ts +2 -0
  209. package/dist/src/proactive/insight-repository.js +5 -2
  210. package/dist/src/proactive/run-processor.js +22 -1
  211. package/dist/src/proactive/types.d.ts +2 -0
  212. package/dist/src/proactive/value-score.d.ts +13 -0
  213. package/dist/src/proactive/value-score.js +30 -0
  214. package/dist/src/providers/auth-runtime/resolve-api-key.d.ts +2 -4
  215. package/dist/src/providers/auth-runtime/resolve-api-key.js +2 -4
  216. package/dist/src/providers/auth-runtime/resolve-auth.d.ts +3 -4
  217. package/dist/src/providers/auth-runtime/resolve-auth.js +18 -18
  218. package/dist/src/providers/domestic-presets.d.ts +22 -0
  219. package/dist/src/providers/domestic-presets.js +25 -0
  220. package/dist/src/providers/model-catalog-store.d.ts +71 -0
  221. package/dist/src/providers/model-catalog-store.js +102 -0
  222. package/dist/src/providers/model-catalog-sync-service.d.ts +41 -0
  223. package/dist/src/providers/model-catalog-sync-service.js +142 -0
  224. package/dist/src/providers/model-reference-auditor.d.ts +14 -0
  225. package/dist/src/providers/model-reference-auditor.js +71 -0
  226. package/dist/src/providers/model-registry.d.ts +4 -1
  227. package/dist/src/providers/model-registry.js +35 -2
  228. package/dist/src/providers/presentation.js +2 -0
  229. package/dist/src/providers/xopc-cloud-connection.d.ts +51 -0
  230. package/dist/src/providers/xopc-cloud-connection.js +196 -0
  231. package/dist/src/session/index.d.ts +1 -1
  232. package/dist/src/session/index.js +2 -2
  233. package/dist/src/session/session-title.d.ts +2 -0
  234. package/dist/src/session/session-title.js +24 -3
  235. package/dist/src/share/share-types.js +5 -5
  236. package/dist/src/share/site-share-types.d.ts +1 -1
  237. package/dist/src/share/site-share-types.js +5 -5
  238. package/dist/src/storage/sqlite/index.d.ts +3 -0
  239. package/dist/src/storage/sqlite/index.js +4 -1
  240. package/dist/src/storage/sqlite/interaction-state-repository.d.ts +17 -0
  241. package/dist/src/storage/sqlite/interaction-state-repository.js +60 -0
  242. package/dist/src/storage/sqlite/memory-records-repository.js +1 -1
  243. package/dist/src/storage/sqlite/migrations/053_browser_recipes.sql +45 -0
  244. package/dist/src/storage/sqlite/migrations/054_task_outcomes.sql +24 -0
  245. package/dist/src/storage/sqlite/migrations/055_relationship_settings.sql +14 -0
  246. package/dist/src/storage/sqlite/migrations/056_task_verification.sql +6 -0
  247. package/dist/src/storage/sqlite/migrations/057_interaction_states.sql +11 -0
  248. package/dist/src/storage/sqlite/migrations/058_proactive_value.sql +3 -0
  249. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  250. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  251. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  252. package/dist/src/storage/sqlite/relationship-settings-repository.d.ts +17 -0
  253. package/dist/src/storage/sqlite/relationship-settings-repository.js +64 -0
  254. package/dist/src/storage/sqlite/schema.js +1 -1
  255. package/dist/src/storage/sqlite/schema.sql +46 -0
  256. package/dist/src/storage/sqlite/task-outcome-repository.d.ts +90 -0
  257. package/dist/src/storage/sqlite/task-outcome-repository.js +138 -0
  258. package/dist/src/user-context/interaction-state.d.ts +13 -0
  259. package/dist/src/user-context/interaction-state.js +69 -0
  260. package/dist/src/user-context/memory-use-audit.d.ts +10 -0
  261. package/dist/src/user-context/memory-use-audit.js +25 -0
  262. package/dist/src/user-context/personal-playbook.d.ts +11 -0
  263. package/dist/src/user-context/personal-playbook.js +41 -0
  264. package/dist/src/user-context/projection.d.ts +4 -0
  265. package/dist/src/user-context/projection.js +5 -1
  266. package/dist/src/user-context/relationship-continuity.d.ts +14 -0
  267. package/dist/src/user-context/relationship-continuity.js +51 -0
  268. package/package.json +5 -7
  269. package/dist/extensions/dashscope/src/index.d.ts +0 -4
  270. package/dist/extensions/dashscope/src/index.js +0 -2
  271. package/dist/extensions/dashscope/xopc.extension.json +0 -15
  272. package/dist/extensions/fal/src/index.d.ts +0 -4
  273. package/dist/extensions/fal/src/index.js +0 -2
  274. package/dist/extensions/fal/xopc.extension.json +0 -14
  275. package/dist/extensions/google/src/index.d.ts +0 -4
  276. package/dist/extensions/google/src/index.js +0 -2
  277. package/dist/extensions/google/xopc.extension.json +0 -14
  278. package/dist/extensions/minimax/src/index.d.ts +0 -4
  279. package/dist/extensions/minimax/src/index.js +0 -2
  280. package/dist/extensions/minimax/xopc.extension.json +0 -15
  281. package/dist/extensions/openai/src/index.d.ts +0 -4
  282. package/dist/extensions/openai/src/index.js +0 -2
  283. package/dist/extensions/openai/xopc.extension.json +0 -14
  284. package/dist/gateway/static/root/assets/action-boundary-settings-panel-BIVBUiNT.js +0 -1
  285. package/dist/gateway/static/root/assets/agents-_qbUaYbs.js +0 -2
  286. package/dist/gateway/static/root/assets/apps-page-0sPqD0FK.js +0 -1
  287. package/dist/gateway/static/root/assets/automations-page-BxWBuBsE.js +0 -6
  288. package/dist/gateway/static/root/assets/browser-settings-page-C499b9AH.js +0 -8
  289. package/dist/gateway/static/root/assets/capability-presets-settings-panel-Dva9SiPK.js +0 -2
  290. package/dist/gateway/static/root/assets/channels-settings-DNAU7u9o.js +0 -1
  291. package/dist/gateway/static/root/assets/channels-status-swr-CIOH7tgn.js +0 -1
  292. package/dist/gateway/static/root/assets/connectors-page-TwiBp8vY.js +0 -2
  293. package/dist/gateway/static/root/assets/extension-settings-page-DKA9-lyP.js +0 -1
  294. package/dist/gateway/static/root/assets/goal-create-dialog-Q3B0E-0s.js +0 -1
  295. package/dist/gateway/static/root/assets/goal-detail-page-C5VAK04G.js +0 -4
  296. package/dist/gateway/static/root/assets/goals-page-BJb-5IYw.js +0 -2
  297. package/dist/gateway/static/root/assets/index-CkUHH170.css +0 -1
  298. package/dist/gateway/static/root/assets/index-vq_cJZJC.js +0 -199
  299. package/dist/gateway/static/root/assets/local-app-workbench-page-euH17Kvb.js +0 -2
  300. package/dist/gateway/static/root/assets/logs-page-CyYCBqym.js +0 -7
  301. package/dist/gateway/static/root/assets/messages-CxySDn9d.js +0 -5
  302. package/dist/gateway/static/root/assets/models-hub-panel-DObxxjc9.js +0 -2
  303. package/dist/gateway/static/root/assets/notes-workbench-CCb4RXcZ.js +0 -4
  304. package/dist/gateway/static/root/assets/project-detail-page-BvEcriRC.js +0 -1
  305. package/dist/gateway/static/root/assets/projects-page-B_e79MRJ.js +0 -1
  306. package/dist/gateway/static/root/assets/remote-access-hub-DGcqnYfR.js +0 -1
  307. package/dist/gateway/static/root/assets/save-bar-controls-CkeKasGm.js +0 -1
  308. package/dist/gateway/static/root/assets/schedule-field-TkqUL3wm.js +0 -1
  309. package/dist/gateway/static/root/assets/sessions-page-DQZhrDJ8.js +0 -1
  310. package/dist/gateway/static/root/assets/settings-advanced-gate-BkdeN99Y.js +0 -1
  311. package/dist/gateway/static/root/assets/settings-collapsible-section-Dpqth3oA.js +0 -1
  312. package/dist/gateway/static/root/assets/settings-page-qPG7I2zd.js +0 -1
  313. package/dist/gateway/static/root/assets/setup-status-panel-lwRAh9aw.js +0 -1
  314. package/dist/gateway/static/root/assets/shares-settings-BGj9IVUr.js +0 -1
  315. package/dist/gateway/static/root/assets/skill-reload-api-B2UBAs5U.js +0 -1
  316. package/dist/gateway/static/root/assets/skills-page-DdjzFZ8I.js +0 -2
  317. package/dist/gateway/static/root/assets/user-context-page-BTTZpAGV.js +0 -1
  318. package/dist/gateway/static/root/assets/voice-api-key-field-DuDQd-WU.js +0 -1
  319. package/dist/gateway/static/root/assets/work-discovery-page-BUVkVCsW.js +0 -1
  320. package/dist/gateway/static/root/assets/work-item-detail-page-DeEPPu4n.js +0 -1
  321. package/dist/gateway/static/root/assets/work-page-DQNUyTUq.js +0 -1
  322. package/dist/gateway/static/root/assets/workflows-page-BIy4wrzO.js +0 -11
  323. package/dist/src/agent/image/generation/bundled-registry.d.ts +0 -18
  324. package/dist/src/agent/image/generation/bundled-registry.js +0 -35
  325. package/dist/src/agent/image/generation/bundled.d.ts +0 -10
  326. package/dist/src/agent/image/generation/bundled.js +0 -15
  327. package/dist/src/agent/image/generation/image-provider-ui.d.ts +0 -20
  328. package/dist/src/browser/pipeline/source.d.ts +0 -9
  329. package/dist/src/browser/pipeline/source.js +0 -77
  330. package/dist/src/gateway/image-capabilities.d.ts +0 -28
  331. package/dist/src/gateway/image-capabilities.js +0 -78
  332. package/dist/src/generated/bundled-image-generation-providers.d.ts +0 -14
  333. package/dist/src/generated/bundled-image-generation-providers.js +0 -17
  334. /package/dist/src/{agent/image/generation/image-provider-ui.js → browser/recipes/types.js} +0 -0
@@ -782,16 +782,16 @@ export declare const WorkspaceConfigSchema: z.ZodOptional<z.ZodObject<{
782
782
  }, z.core.$strip>>;
783
783
  export type WorkspaceConfig = z.infer<typeof WorkspaceConfigSchema>;
784
784
  export declare const GatewayBindModeSchema: z.ZodEnum<{
785
- custom: "custom";
786
785
  auto: "auto";
786
+ custom: "custom";
787
787
  loopback: "loopback";
788
788
  lan: "lan";
789
789
  tailnet: "tailnet";
790
790
  }>;
791
791
  export declare const GatewayConfigSchema: z.ZodDefault<z.ZodObject<{
792
792
  bind: z.ZodOptional<z.ZodEnum<{
793
- custom: "custom";
794
793
  auto: "auto";
794
+ custom: "custom";
795
795
  loopback: "loopback";
796
796
  lan: "lan";
797
797
  tailnet: "tailnet";
@@ -934,6 +934,11 @@ export declare const GatewayConfigSchema: z.ZodDefault<z.ZodObject<{
934
934
  export declare const ModelsDevConfigSchema: z.ZodDefault<z.ZodObject<{
935
935
  enabled: z.ZodDefault<z.ZodBoolean>;
936
936
  }, z.core.$strip>>;
937
+ export declare const ModelCatalogConfigSchema: z.ZodDefault<z.ZodObject<{
938
+ enabled: z.ZodDefault<z.ZodBoolean>;
939
+ refreshOnStartup: z.ZodDefault<z.ZodBoolean>;
940
+ intervalHours: z.ZodDefault<z.ZodNumber>;
941
+ }, z.core.$strict>>;
937
942
  export declare const STTProviderConfigSchema: z.ZodObject<{
938
943
  apiKey: z.ZodOptional<z.ZodString>;
939
944
  model: z.ZodOptional<z.ZodString>;
@@ -1247,15 +1252,14 @@ export declare const ProviderRequestOverridesSchema: z.ZodObject<{
1247
1252
  }, z.core.$strict>;
1248
1253
  /**
1249
1254
  * Generic per-vendor provider config — used by image / audio / video
1250
- * capability providers via `cfg.providers.<id>`. Kept loose (`.strict()` but
1251
- * everything optional) so adding a new vendor never requires a config
1252
- * migration.
1255
+ * capability providers via `cfg.providers.<id>`.
1253
1256
  */
1254
1257
  export declare const ProviderAuthConfigSchema: z.ZodObject<{
1255
- apiKey: z.ZodOptional<z.ZodString>;
1256
1258
  baseUrl: z.ZodOptional<z.ZodString>;
1257
- region: z.ZodOptional<z.ZodString>;
1258
- imageBaseUrl: z.ZodOptional<z.ZodString>;
1259
+ region: z.ZodOptional<z.ZodEnum<{
1260
+ cn: "cn";
1261
+ intl: "intl";
1262
+ }>>;
1259
1263
  request: z.ZodOptional<z.ZodObject<{
1260
1264
  timeoutMs: z.ZodOptional<z.ZodNumber>;
1261
1265
  headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -1268,15 +1272,16 @@ export declare const ProviderAuthConfigSchema: z.ZodObject<{
1268
1272
  }, z.core.$strict>;
1269
1273
  export type ProviderAuthConfig = z.infer<typeof ProviderAuthConfigSchema>;
1270
1274
  /**
1271
- * `cfg.providers.<id>` is keyed by provider id (`openai`, `dashscope`,
1272
- * `minimax`, `google`, `fal`, …). Every entry is optional and validated by
1275
+ * `cfg.providers.<id>` stores non-secret connection settings. Credentials
1276
+ * live in the credential store or environment. Every entry is validated by
1273
1277
  * {@link ProviderAuthConfigSchema}.
1274
1278
  */
1275
1279
  export declare const ProvidersConfigSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
1276
- apiKey: z.ZodOptional<z.ZodString>;
1277
1280
  baseUrl: z.ZodOptional<z.ZodString>;
1278
- region: z.ZodOptional<z.ZodString>;
1279
- imageBaseUrl: z.ZodOptional<z.ZodString>;
1281
+ region: z.ZodOptional<z.ZodEnum<{
1282
+ cn: "cn";
1283
+ intl: "intl";
1284
+ }>>;
1280
1285
  request: z.ZodOptional<z.ZodObject<{
1281
1286
  timeoutMs: z.ZodOptional<z.ZodNumber>;
1282
1287
  headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -1951,8 +1956,8 @@ export declare const ConfigSchema: z.ZodDefault<z.ZodObject<{
1951
1956
  channels: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
1952
1957
  gateway: z.ZodDefault<z.ZodObject<{
1953
1958
  bind: z.ZodOptional<z.ZodEnum<{
1954
- custom: "custom";
1955
1959
  auto: "auto";
1960
+ custom: "custom";
1956
1961
  loopback: "loopback";
1957
1962
  lan: "lan";
1958
1963
  tailnet: "tailnet";
@@ -2330,10 +2335,11 @@ export declare const ConfigSchema: z.ZodDefault<z.ZodObject<{
2330
2335
  }, z.core.$strict>>;
2331
2336
  extensions: z.ZodDefault<z.ZodType<Record<string, unknown>, unknown, z.core.$ZodTypeInternals<Record<string, unknown>, unknown>>>;
2332
2337
  providers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
2333
- apiKey: z.ZodOptional<z.ZodString>;
2334
2338
  baseUrl: z.ZodOptional<z.ZodString>;
2335
- region: z.ZodOptional<z.ZodString>;
2336
- imageBaseUrl: z.ZodOptional<z.ZodString>;
2339
+ region: z.ZodOptional<z.ZodEnum<{
2340
+ cn: "cn";
2341
+ intl: "intl";
2342
+ }>>;
2337
2343
  request: z.ZodOptional<z.ZodObject<{
2338
2344
  timeoutMs: z.ZodOptional<z.ZodNumber>;
2339
2345
  headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
@@ -2347,6 +2353,11 @@ export declare const ConfigSchema: z.ZodDefault<z.ZodObject<{
2347
2353
  modelsDev: z.ZodDefault<z.ZodObject<{
2348
2354
  enabled: z.ZodDefault<z.ZodBoolean>;
2349
2355
  }, z.core.$strip>>;
2356
+ modelCatalog: z.ZodDefault<z.ZodObject<{
2357
+ enabled: z.ZodDefault<z.ZodBoolean>;
2358
+ refreshOnStartup: z.ZodDefault<z.ZodBoolean>;
2359
+ intervalHours: z.ZodDefault<z.ZodNumber>;
2360
+ }, z.core.$strict>>;
2350
2361
  messages: z.ZodOptional<z.ZodObject<{
2351
2362
  tts: z.ZodOptional<z.ZodObject<{
2352
2363
  enabled: z.ZodDefault<z.ZodBoolean>;
@@ -2446,6 +2457,6 @@ export interface ParsedModelRef {
2446
2457
  }
2447
2458
  export declare function getAgentDefaultModelRef(config: Config): string | undefined;
2448
2459
  export declare function getAgentDefaultImageModelConfig(config: Config): AgentModelConfig | undefined;
2449
- export declare function getAgentDefaultImageGenerationModelConfig(config: Config): AgentImageGenerationModelConfig | undefined;
2460
+ export declare function getAgentDefaultImageGenerationModelConfig(config: Config, agentId: string): AgentImageGenerationModelConfig | undefined;
2450
2461
  /** `provider/model` or null when invalid. */
2451
2462
  export declare function parseModelRef(ref: string): ParsedModelRef | null;
@@ -26,9 +26,9 @@ function getAgentDefaultModelRef(config) {
26
26
  applyModels(agent.models);
27
27
  return modelRef;
28
28
  }
29
- function getAgentDefaultModelsConfig(config) {
29
+ function getAgentDefaultModelsConfig(config, requestedAgentId) {
30
30
  const list = Array.isArray(config.agents?.list) ? config.agents.list : [];
31
- const defaultId = config.agents?.default?.trim() || list.find((entry) => entry.default === true)?.id?.trim() || list[0]?.id;
31
+ const defaultId = requestedAgentId?.trim() || config.agents?.default?.trim() || list.find((entry) => entry.default === true)?.id?.trim() || list[0]?.id;
32
32
  const agent = list.find((entry) => entry.enabled !== false && entry.id === defaultId) ?? list[0];
33
33
  if (!agent) return void 0;
34
34
  let modelConfig;
@@ -51,8 +51,8 @@ function getAgentDefaultModelsConfig(config) {
51
51
  function getAgentDefaultImageModelConfig(config) {
52
52
  return getAgentDefaultModelsConfig(config)?.imageModel;
53
53
  }
54
- function getAgentDefaultImageGenerationModelConfig(config) {
55
- return getAgentDefaultModelsConfig(config)?.imageGenerationModel;
54
+ function getAgentDefaultImageGenerationModelConfig(config, agentId) {
55
+ return getAgentDefaultModelsConfig(config, agentId)?.imageGenerationModel;
56
56
  }
57
57
  /** `provider/model` or null when invalid. */
58
58
  function parseModelRef(ref) {
@@ -64,7 +64,7 @@ function parseModelRef(ref) {
64
64
  model: trimmed.slice(idx + 1).trim()
65
65
  };
66
66
  }
67
- var AgentModelRefSchema, AgentImageGenerationModelSchema, AgentTypedModelRoleSchema, AgentTypedModelRolesSchema, AgentModelsSchema, AgentsConfigSchema, BrowserCloudConfigSchema, BrowserExtensionConfigSchema, BrowserCloakConfigSchema, BrowserConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, SessionDmScopeSchema, SessionStorageConfigSchema, SessionResetModeSchema, SessionResetConfigSchema, SessionResetByTypeSchema, SessionScopeSchema, SessionConfigSchema, ChannelsConfigSchema, SearchProviderEntrySchema, WebSearchConfigSchema, WebsiteBlocklistSchema, WebToolsConfigSchema, ToolsConfigSchema, GatewayAuthRateLimitSchema, GatewaySecuritySchema, GatewayTrustedProxySchema, GatewayAuthSchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayRemoteSchema, GatewayTlsSchema, GatewayModeSchema, HeartbeatConfigSchema, GatewayChannelConnectDeferModeSchema, TunnelConsentSchema, TunnelConfigSchema, WorkspaceImportConfigSchema, WorkspaceConfigSchema, GatewayBindModeSchema, GatewayConfigSchema, ModelsDevConfigSchema, SttProviderConfigCatchallSchema, STTProviderConfigSchema, STTFallbackConfigSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, STTConfigSchema, TtsProviderConfigCatchallSchema, TTSProviderConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSEdgeConfigSchema, TTSSummarizationConfigSchema, TTSConfigSchema, VoiceRefinementConfigSchema, VoiceConfigSchema, MessagesConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProviderAuthConfigSchema, ProvidersConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, UpdateAutoConfigSchema, GoalNotificationEventSchema, GoalNotificationTargetSchema, GoalNotificationsConfigSchema, GoalsConfigSchema, UpdateConfigSchema, CommandsConfigSchema, TuiConfigSchema, McpHttpUrlSchema, ConnectorSecretReferenceSchema, McpConfigScalarSchema, McpServerSchema, McpConfigSchema, CodeIntelligenceConfigSchema, ConnectorsConfigSchema, ExperimentalConfigSchema, ConfigSchema;
67
+ var AgentModelRefSchema, AgentImageGenerationModelSchema, AgentTypedModelRoleSchema, AgentTypedModelRolesSchema, AgentModelsSchema, AgentsConfigSchema, BrowserCloudConfigSchema, BrowserExtensionConfigSchema, BrowserCloakConfigSchema, BrowserConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, SessionDmScopeSchema, SessionStorageConfigSchema, SessionResetModeSchema, SessionResetConfigSchema, SessionResetByTypeSchema, SessionScopeSchema, SessionConfigSchema, ChannelsConfigSchema, SearchProviderEntrySchema, WebSearchConfigSchema, WebsiteBlocklistSchema, WebToolsConfigSchema, ToolsConfigSchema, GatewayAuthRateLimitSchema, GatewaySecuritySchema, GatewayTrustedProxySchema, GatewayAuthSchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayRemoteSchema, GatewayTlsSchema, GatewayModeSchema, HeartbeatConfigSchema, GatewayChannelConnectDeferModeSchema, TunnelConsentSchema, TunnelConfigSchema, WorkspaceImportConfigSchema, WorkspaceConfigSchema, GatewayBindModeSchema, GatewayConfigSchema, ModelsDevConfigSchema, ModelCatalogConfigSchema, SttProviderConfigCatchallSchema, STTProviderConfigSchema, STTFallbackConfigSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, STTConfigSchema, TtsProviderConfigCatchallSchema, TTSProviderConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSEdgeConfigSchema, TTSSummarizationConfigSchema, TTSConfigSchema, VoiceRefinementConfigSchema, VoiceConfigSchema, MessagesConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProviderAuthConfigSchema, ProvidersConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, UpdateAutoConfigSchema, GoalNotificationEventSchema, GoalNotificationTargetSchema, GoalNotificationsConfigSchema, GoalsConfigSchema, UpdateConfigSchema, CommandsConfigSchema, TuiConfigSchema, McpHttpUrlSchema, ConnectorSecretReferenceSchema, McpConfigScalarSchema, McpServerSchema, McpConfigSchema, CodeIntelligenceConfigSchema, ConnectorsConfigSchema, ExperimentalConfigSchema, ConfigSchema;
68
68
  var init_schema = __esmMin((() => {
69
69
  init_schema$1();
70
70
  init_preset_chain();
@@ -510,12 +510,12 @@ strict: z.boolean().optional() }).optional();
510
510
  enabled: z.boolean().default(true),
511
511
  /** Default TTL in ms (default 24h). */
512
512
  defaultTtlMs: z.number().min(6e4).max(6048e5).default(864e5),
513
- /** Maximum TTL in ms (default 7 days). */
514
- maxTtlMs: z.number().min(6e4).max(2592e6).default(6048e5),
515
- /** Maximum concurrent active shares (default 100). */
516
- maxActiveShares: z.number().min(1).max(1e4).default(100),
517
- /** Maximum shareable file size in bytes (default 100MB). */
518
- maxFileSize: z.number().min(1048576).max(10737418240).default(104857600),
513
+ /** Maximum TTL in ms (default 30 days). */
514
+ maxTtlMs: z.number().min(6e4).max(2592e6).default(2592e6),
515
+ /** Maximum concurrent active shares (default 500). */
516
+ maxActiveShares: z.number().min(1).max(1e4).default(500),
517
+ /** Maximum shareable file size in bytes (default 500 MB). */
518
+ maxFileSize: z.number().min(1048576).max(10737418240).default(524288e3),
519
519
  /** MIME types allowed for inline preview (?inline=1). */
520
520
  inlinePreviewMimes: z.array(z.string()).default([
521
521
  "image/png",
@@ -532,10 +532,10 @@ strict: z.boolean().optional() }).optional();
532
532
  /** Folder-sharing controls (browse + ZIP). */
533
533
  directory: z.object({
534
534
  enabled: z.boolean().default(true),
535
- /** Maximum folder size in bytes at scan time (default 1 GB). */
536
- maxFolderSize: z.number().int().min(1048576).max(10737418240).default(1073741824),
535
+ /** Maximum folder size in bytes at scan time (default 2 GB). */
536
+ maxFolderSize: z.number().int().min(1048576).max(10737418240).default(2147483648),
537
537
  /** Maximum number of entries scanned for a single folder share. */
538
- maxFileCount: z.number().int().min(1).max(1e5).default(1e3),
538
+ maxFileCount: z.number().int().min(1).max(1e5).default(1e4),
539
539
  /** Traversal depth cap (defense against recursive symlinks). */
540
540
  maxDepth: z.number().int().min(1).max(64).default(20),
541
541
  /** In-memory directory listing cache TTL. */
@@ -544,8 +544,8 @@ strict: z.boolean().optional() }).optional();
544
544
  zipConcurrency: z.number().int().min(1).max(8).default(1)
545
545
  }).default({
546
546
  enabled: true,
547
- maxFolderSize: 1073741824,
548
- maxFileCount: 1e3,
547
+ maxFolderSize: 2147483648,
548
+ maxFileCount: 1e4,
549
549
  maxDepth: 20,
550
550
  listingCacheMs: 6e4,
551
551
  zipConcurrency: 1
@@ -556,24 +556,24 @@ strict: z.boolean().optional() }).optional();
556
556
  enabled: z.boolean().default(true),
557
557
  /** Public host suffix that subdomain shares are served under. */
558
558
  publicHostSuffix: z.string().min(1).default("share.xopc.ai"),
559
- /** Default TTL in ms (default 6h, shorter than file shares — live app surface). */
560
- defaultTtlMs: z.number().int().min(6e4).max(6048e5).default(216e5),
561
- /** Maximum TTL in ms (default 7 days). */
562
- maxTtlMs: z.number().int().min(6e4).max(2592e6).default(6048e5),
563
- /** Maximum concurrent active site shares. */
564
- maxActiveSites: z.number().int().min(1).max(1e3).default(5),
559
+ /** Default TTL in ms (default 24h). */
560
+ defaultTtlMs: z.number().int().min(6e4).max(6048e5).default(864e5),
561
+ /** Maximum TTL in ms (default 30 days). */
562
+ maxTtlMs: z.number().int().min(6e4).max(2592e6).default(2592e6),
563
+ /** Maximum concurrent active site shares (default 50). */
564
+ maxActiveSites: z.number().int().min(1).max(1e3).default(50),
565
565
  static: z.object({
566
566
  enabled: z.boolean().default(true),
567
567
  /** Maximum total bytes of files served per static site. */
568
- maxRootDirSize: z.number().int().min(1048576).max(10737418240).default(524288e3),
568
+ maxRootDirSize: z.number().int().min(1048576).max(10737418240).default(1073741824),
569
569
  /** Maximum file count under root dir. */
570
- maxFileCount: z.number().int().min(1).max(1e5).default(1e4),
570
+ maxFileCount: z.number().int().min(1).max(1e5).default(2e4),
571
571
  /** Whether HTML/CSS rewrite of absolute paths is on by default. */
572
572
  rewriteEnabledByDefault: z.boolean().default(false)
573
573
  }).default({
574
574
  enabled: true,
575
- maxRootDirSize: 524288e3,
576
- maxFileCount: 1e4,
575
+ maxRootDirSize: 1073741824,
576
+ maxFileCount: 2e4,
577
577
  rewriteEnabledByDefault: false
578
578
  }),
579
579
  proxy: z.object({
@@ -645,6 +645,15 @@ strict: z.boolean().optional() }).optional();
645
645
  skillsStoreBaseUrl: "https://store.xopc.ai"
646
646
  });
647
647
  ModelsDevConfigSchema = z.object({ enabled: z.boolean().default(true) }).default({ enabled: true });
648
+ ModelCatalogConfigSchema = z.object({
649
+ enabled: z.boolean().default(true),
650
+ refreshOnStartup: z.boolean().default(true),
651
+ intervalHours: z.number().min(.25).default(6)
652
+ }).strict().default({
653
+ enabled: true,
654
+ refreshOnStartup: true,
655
+ intervalHours: 6
656
+ });
648
657
  SttProviderConfigCatchallSchema = z.union([
649
658
  z.string(),
650
659
  z.number(),
@@ -804,14 +813,10 @@ tts: TTSConfigSchema.optional() }).optional();
804
813
  headers: z.record(z.string(), z.string()).optional()
805
814
  }).strict();
806
815
  ProviderAuthConfigSchema = z.object({
807
- /** Static API key (api-key / azure-key modes). */
808
- apiKey: z.string().optional(),
809
816
  /** Override the default REST base URL. */
810
817
  baseUrl: z.string().url().optional(),
811
- /** Vendor region (DashScope: `beijing` / `singapore`; AWS: region id). */
812
- region: z.string().optional(),
813
- /** Image-only base URL override (DashScope splits image vs LLM). */
814
- imageBaseUrl: z.string().url().optional(),
818
+ /** Provider deployment region. */
819
+ region: z.enum(["cn", "intl"]).optional(),
815
820
  /** Per-vendor request overrides. */
816
821
  request: ProviderRequestOverridesSchema.optional(),
817
822
  /** Azure OpenAI deployment overrides; only consumed by OpenAI image provider. */
@@ -1015,6 +1020,7 @@ workDiscoveryOnboarding: z.boolean().default(true) }).strict().default({ workDis
1015
1020
  /** Per-vendor capability provider config (image / audio / video). */
1016
1021
  providers: ProvidersConfigSchema.optional(),
1017
1022
  modelsDev: ModelsDevConfigSchema,
1023
+ modelCatalog: ModelCatalogConfigSchema,
1018
1024
  /** Delivery / presentation concerns (currently `tts`). */
1019
1025
  messages: MessagesConfigSchema,
1020
1026
  /** User-facing voice input behavior beyond provider selection. */
@@ -1168,9 +1174,14 @@ workDiscoveryOnboarding: z.boolean().default(true) }).strict().default({ workDis
1168
1174
  slots: {}
1169
1175
  },
1170
1176
  modelsDev: { enabled: true },
1177
+ modelCatalog: {
1178
+ enabled: true,
1179
+ refreshOnStartup: true,
1180
+ intervalHours: 6
1181
+ },
1171
1182
  tui: {}
1172
1183
  });
1173
1184
  }));
1174
1185
  //#endregion
1175
1186
  init_schema();
1176
- export { AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentTypedModelRoleSchema, AgentsConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, BrowserConfigSchema, ChannelsConfigSchema, CodeIntelligenceConfigSchema, CommandsConfigSchema, ConfigSchema, ConnectorsConfigSchema, ExperimentalConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GoalNotificationEventSchema, GoalNotificationTargetSchema, GoalNotificationsConfigSchema, GoalsConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelsDevConfigSchema, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionResetByTypeSchema, SessionResetConfigSchema, SessionResetModeSchema, SessionScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TuiConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, VoiceConfigSchema, VoiceRefinementConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WeixinAccountConfigSchema, WeixinConfigSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, getAgentDefaultImageGenerationModelConfig, getAgentDefaultImageModelConfig, getAgentDefaultModelRef, init_schema, parseModelRef };
1187
+ export { AgentImageGenerationModelSchema, AgentModelRefSchema, AgentModelsSchema, AgentTypedModelRoleSchema, AgentsConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, BrowserConfigSchema, ChannelsConfigSchema, CodeIntelligenceConfigSchema, CommandsConfigSchema, ConfigSchema, ConnectorsConfigSchema, ExperimentalConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, GatewayAuthRateLimitSchema, GatewayAuthSchema, GatewayBindModeSchema, GatewayChannelConnectDeferModeSchema, GatewayConfigSchema, GatewayModeSchema, GatewayRemoteSchema, GatewaySecuritySchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayTlsSchema, GatewayTrustedProxySchema, GoalNotificationEventSchema, GoalNotificationTargetSchema, GoalNotificationsConfigSchema, GoalsConfigSchema, HeartbeatConfigSchema, McpConfigSchema, McpServerSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, MessagesConfigSchema, ModelCatalogConfigSchema, ModelsDevConfigSchema, ProviderAuthConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProvidersConfigSchema, STTConfigSchema, STTFallbackConfigSchema, STTProviderConfigSchema, SearchProviderEntrySchema, SessionConfigSchema, SessionDmScopeSchema, SessionResetByTypeSchema, SessionResetConfigSchema, SessionResetModeSchema, SessionScopeSchema, SessionStorageConfigSchema, TTSConfigSchema, TTSEdgeConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSProviderConfigSchema, TTSSummarizationConfigSchema, TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema, ToolsConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, TuiConfigSchema, TunnelConfigSchema, TunnelConsentSchema, UpdateAutoConfigSchema, UpdateConfigSchema, VoiceConfigSchema, VoiceRefinementConfigSchema, WebSearchConfigSchema, WebToolsConfigSchema, WebsiteBlocklistSchema, WeixinAccountConfigSchema, WeixinConfigSchema, WorkspaceConfigSchema, WorkspaceImportConfigSchema, getAgentDefaultImageGenerationModelConfig, getAgentDefaultImageModelConfig, getAgentDefaultModelRef, init_schema, parseModelRef };
@@ -1,5 +1,5 @@
1
- import { resolveEffectiveAgentManifest } from "../agent-manifest/resolver.js";
2
1
  import { init_agent_scope, listAgentEntries, normalizeAgentId, resolveAgentDir, resolveAgentProfileDir, resolveAgentWorkspaceDir, resolveDefaultAgentId, resolveUserPath, validateAgentIdForNewAgent } from "../agent/agent-scope.js";
2
+ import { resolveEffectiveAgentManifest } from "../agent-manifest/resolver.js";
3
3
  import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
4
4
  import { WORKSPACE_FILES, init_paths, resolveUserProfilePath } from "../config/paths.js";
5
5
  import { AGENT_PROFILE_MARKDOWN_SYSTEM_FILES, REQUIRED_AGENT_PROFILE_MARKDOWN_FILE_SET } from "../agent/context/workspace.js";
@@ -12,7 +12,7 @@ import { buildGatewayConsoleCspHeader } from "../security/csp.js";
12
12
  import { checkBrowserOrigin } from "../security/origin-check.js";
13
13
  import { auth } from "./middleware/auth.js";
14
14
  import { operatorScopes } from "./middleware/scopes.js";
15
- import { createChannelRateLimitMiddleware, createStrictRateLimitMiddleware } from "./middleware/strict-rate-limit.js";
15
+ import { createChannelRateLimitMiddleware, createStrictRateLimitMiddleware, createXopcCloudPollRateLimitMiddleware } from "./middleware/strict-rate-limit.js";
16
16
  import { logContextMiddleware } from "./middleware/log-context.js";
17
17
  import { logger } from "./middleware/logger.js";
18
18
  import { routeErrorMiddleware } from "./middleware/route-errors.js";
@@ -204,16 +204,22 @@ function createHonoApp(config) {
204
204
  })
205
205
  }));
206
206
  authenticated.use(operatorScopes());
207
+ const strictRateLimitMiddleware = createStrictRateLimitMiddleware({ getTrustedProxyContext: () => ({
208
+ trustedProxies: service.currentConfig.gateway?.trustedProxies,
209
+ allowRealIpFallback: service.currentConfig.gateway?.allowRealIpFallback === true
210
+ }) });
211
+ const channelRateLimitMiddleware = createChannelRateLimitMiddleware({ getTrustedProxyContext: () => ({
212
+ trustedProxies: service.currentConfig.gateway?.trustedProxies,
213
+ allowRealIpFallback: service.currentConfig.gateway?.allowRealIpFallback === true
214
+ }) });
207
215
  registerAuthenticatedRoutes(app, authenticated, {
208
216
  service,
209
- strictRateLimitMiddleware: createStrictRateLimitMiddleware({ getTrustedProxyContext: () => ({
210
- trustedProxies: service.currentConfig.gateway?.trustedProxies,
211
- allowRealIpFallback: service.currentConfig.gateway?.allowRealIpFallback === true
212
- }) }),
213
- channelRateLimitMiddleware: createChannelRateLimitMiddleware({ getTrustedProxyContext: () => ({
217
+ strictRateLimitMiddleware,
218
+ xopcCloudPollRateLimitMiddleware: createXopcCloudPollRateLimitMiddleware({ getTrustedProxyContext: () => ({
214
219
  trustedProxies: service.currentConfig.gateway?.trustedProxies,
215
220
  allowRealIpFallback: service.currentConfig.gateway?.allowRealIpFallback === true
216
221
  }) }),
222
+ channelRateLimitMiddleware,
217
223
  sseConfig: {
218
224
  service,
219
225
  maxSseConnections: service.currentConfig.gateway.maxSseConnections
@@ -209,7 +209,7 @@ export declare function buildSafeWebConfigPayload(service: GatewayService, optio
209
209
  /** Masked `cfg.providers` for capability keys (image / STT / etc.). */
210
210
  providersConfig: Record<string, import("./safe-providers-config.js").SafeProviderAuthEntry>;
211
211
  gateway: {
212
- bind: "custom" | "auto" | "loopback" | "lan" | "tailnet";
212
+ bind: "auto" | "custom" | "loopback" | "lan" | "tailnet";
213
213
  customBindHost: string;
214
214
  port: number;
215
215
  corsOrigins: string[];
@@ -1,13 +1,10 @@
1
1
  import type { Config } from '../../../config/schema.js';
2
2
  /**
3
3
  * Per-vendor slice of {@link Config.providers} safe for GET `/api/config`.
4
- * Secrets are never sent verbatim; `apiKey` is length-preserving bullets when set, else empty.
5
4
  */
6
5
  export type SafeProviderAuthEntry = {
7
- apiKey: string;
8
6
  region?: string;
9
7
  baseUrl?: string;
10
- imageBaseUrl?: string;
11
8
  };
12
9
  /**
13
10
  * Build a redacted `providersConfig` map for the gateway console (image / audio / video keys).
@@ -1,4 +1,3 @@
1
- import { maskSecretLength } from "./mask-secret-length.js";
2
1
  //#region src/gateway/hono/lib/safe-providers-config.ts
3
2
  /**
4
3
  * Build a redacted `providersConfig` map for the gateway console (image / audio / video keys).
@@ -10,10 +9,9 @@ function buildSafeProvidersConfigForWeb(providers) {
10
9
  if (!id) continue;
11
10
  if (!raw || typeof raw !== "object" || Array.isArray(raw)) continue;
12
11
  const o = raw;
13
- const entry = { apiKey: typeof o.apiKey === "string" && o.apiKey.trim() ? maskSecretLength(o.apiKey) : "" };
12
+ const entry = {};
14
13
  if (typeof o.region === "string" && o.region.trim()) entry.region = o.region.trim();
15
14
  if (typeof o.baseUrl === "string" && o.baseUrl.trim()) entry.baseUrl = o.baseUrl.trim();
16
- if (typeof o.imageBaseUrl === "string" && o.imageBaseUrl.trim()) entry.imageBaseUrl = o.imageBaseUrl.trim();
17
15
  out[id] = entry;
18
16
  }
19
17
  return out;
@@ -12,6 +12,10 @@ export declare function createStrictRateLimitMiddleware(deps: StrictRateLimitDep
12
12
  error: string;
13
13
  code: string;
14
14
  }, 429, "json">>;
15
+ export declare function createXopcCloudPollRateLimitMiddleware(deps: StrictRateLimitDeps): import("hono").MiddlewareHandler<any, string, {}, Response & import("hono").TypedResponse<{
16
+ error: string;
17
+ code: string;
18
+ }, 429, "json">>;
15
19
  export declare function createChannelRateLimitMiddleware(deps: StrictRateLimitDeps): import("hono").MiddlewareHandler<any, string, {}, Response & import("hono").TypedResponse<{
16
20
  error: string;
17
21
  code: string;
@@ -63,6 +63,13 @@ function createStrictRateLimitMiddleware(deps) {
63
63
  reason: "strict_rate_limit_exceeded"
64
64
  });
65
65
  }
66
+ function createXopcCloudPollRateLimitMiddleware(deps) {
67
+ return createClientRateLimitMiddleware(deps, {
68
+ limiter: () => buckets.xopcCloudPoll(),
69
+ exceededMessage: "XOPC Cloud polling rate limit exceeded",
70
+ reason: "xopc_cloud_poll_rate_limit_exceeded"
71
+ });
72
+ }
66
73
  function createChannelRateLimitMiddleware(deps) {
67
74
  return createClientRateLimitMiddleware(deps, {
68
75
  limiter: () => buckets.channelApi(),
@@ -71,4 +78,4 @@ function createChannelRateLimitMiddleware(deps) {
71
78
  });
72
79
  }
73
80
  //#endregion
74
- export { createChannelRateLimitMiddleware, createStrictRateLimitMiddleware };
81
+ export { createChannelRateLimitMiddleware, createStrictRateLimitMiddleware, createXopcCloudPollRateLimitMiddleware };
@@ -0,0 +1,3 @@
1
+ import type { Hono } from 'hono';
2
+ import type { AuthenticatedRouteDeps } from './deps.js';
3
+ export declare function registerBrowserWorkflowRoutes(authenticated: Hono, deps: AuthenticatedRouteDeps): void;
@@ -0,0 +1,78 @@
1
+ //#region src/gateway/hono/routes/browser-workflows.ts
2
+ function presentWorkflow(service, recipe) {
3
+ const inputs = service.validate(recipe.yaml).document?.args ?? {};
4
+ return {
5
+ id: recipe.id,
6
+ name: recipe.name,
7
+ description: recipe.description,
8
+ enabled: recipe.status === "published",
9
+ risk: recipe.risk,
10
+ domains: recipe.domains,
11
+ inputs,
12
+ createdAtMs: recipe.createdAtMs,
13
+ updatedAtMs: recipe.updatedAtMs
14
+ };
15
+ }
16
+ function presentRun(run) {
17
+ return {
18
+ id: run.id,
19
+ workflowId: run.recipeId,
20
+ status: run.status,
21
+ inputs: run.args,
22
+ result: run.result,
23
+ error: run.error,
24
+ createdAtMs: run.createdAtMs,
25
+ startedAtMs: run.startedAtMs,
26
+ endedAtMs: run.endedAtMs,
27
+ durationMs: run.durationMs
28
+ };
29
+ }
30
+ function registerBrowserWorkflowRoutes(authenticated, deps) {
31
+ const service = deps.service.browserRecipes;
32
+ authenticated.get("/api/browser/workflows", (c) => c.json({ workflows: service.list().map((recipe) => presentWorkflow(service, recipe)) }));
33
+ authenticated.get("/api/browser/workflows/:id", (c) => {
34
+ const recipe = service.get(c.req.param("id"));
35
+ return recipe ? c.json({ workflow: presentWorkflow(service, recipe) }) : c.json({ error: "Browser automation not found" }, 404);
36
+ });
37
+ authenticated.patch("/api/browser/workflows/:id", deps.strictRateLimitMiddleware, async (c) => {
38
+ try {
39
+ const current = service.get(c.req.param("id"));
40
+ if (!current) return c.json({ error: "Browser automation not found" }, 404);
41
+ const body = await c.req.json().catch(() => null);
42
+ if (typeof body?.enabled !== "boolean") return c.json({ error: "enabled must be a boolean" }, 400);
43
+ const workflow = service.save({
44
+ yaml: current.yaml,
45
+ status: body.enabled ? "published" : "disabled",
46
+ expectedId: current.id
47
+ });
48
+ return c.json({ workflow: presentWorkflow(service, workflow) });
49
+ } catch (error) {
50
+ return c.json({ error: error instanceof Error ? error.message : String(error) }, 400);
51
+ }
52
+ });
53
+ authenticated.delete("/api/browser/workflows/:id", deps.strictRateLimitMiddleware, (c) => {
54
+ try {
55
+ return c.json({ removed: service.remove(c.req.param("id")) });
56
+ } catch (error) {
57
+ return c.json({ error: error instanceof Error ? error.message : String(error) }, 409);
58
+ }
59
+ });
60
+ authenticated.post("/api/browser/workflows/:id/run", deps.strictRateLimitMiddleware, async (c) => {
61
+ try {
62
+ const body = await c.req.json().catch(() => ({}));
63
+ if (body.inputs !== void 0 && (!body.inputs || typeof body.inputs !== "object" || Array.isArray(body.inputs))) return c.json({ error: "inputs must be an object" }, 400);
64
+ const run = service.startRun(c.req.param("id"), body.inputs ?? {});
65
+ return c.json({ run: presentRun(run) }, 202);
66
+ } catch (error) {
67
+ return c.json({ error: error instanceof Error ? error.message : String(error) }, 400);
68
+ }
69
+ });
70
+ authenticated.get("/api/browser/workflow-runs", (c) => c.json({ runs: service.listRuns(c.req.query("workflowId")).map(presentRun) }));
71
+ authenticated.get("/api/browser/workflow-runs/:id", (c) => {
72
+ const run = service.getRun(c.req.param("id"));
73
+ return run ? c.json({ run: presentRun(run) }) : c.json({ error: "Run not found" }, 404);
74
+ });
75
+ authenticated.post("/api/browser/workflow-runs/:id/cancel", deps.strictRateLimitMiddleware, (c) => c.json({ cancelled: service.cancel(c.req.param("id")) }));
76
+ }
77
+ //#endregion
78
+ export { registerBrowserWorkflowRoutes };
@@ -72,17 +72,8 @@ async function applyMiscPatch(config, body) {
72
72
  if (!raw || typeof raw !== "object" || Array.isArray(raw)) continue;
73
73
  const next = cfgProviders[vendorId] ?? {};
74
74
  const patch = raw;
75
- for (const field of [
76
- "apiKey",
77
- "baseUrl",
78
- "region",
79
- "imageBaseUrl"
80
- ]) if (patch[field] === null || patch[field] === "") delete next[field];
81
- else if (typeof patch[field] === "string") {
82
- const trimmed = patch[field].trim();
83
- if (field === "apiKey" && isMaskedSecretPatchValue(trimmed)) continue;
84
- next[field] = trimmed;
85
- }
75
+ for (const field of ["baseUrl", "region"]) if (patch[field] === null || patch[field] === "") delete next[field];
76
+ else if (typeof patch[field] === "string") next[field] = patch[field].trim();
86
77
  if (patch.azure === null) delete next.azure;
87
78
  else if (patch.azure && typeof patch.azure === "object" && !Array.isArray(patch.azure)) next.azure = {
88
79
  ...next.azure ?? {},
@@ -4,6 +4,7 @@ import type { SSEHandlerConfig } from '../sse.js';
4
4
  export interface AuthenticatedRouteDeps {
5
5
  service: GatewayService;
6
6
  strictRateLimitMiddleware: MiddlewareHandler;
7
+ xopcCloudPollRateLimitMiddleware: MiddlewareHandler;
7
8
  channelRateLimitMiddleware?: MiddlewareHandler;
8
9
  sseConfig: SSEHandlerConfig;
9
10
  }
@@ -59,6 +59,7 @@ function triggerLabel(automation) {
59
59
  }
60
60
  function actionLabel(automation) {
61
61
  if (automation.action.kind === "workflow") return `workflow:${automation.action.workflowId}`;
62
+ if (automation.action.kind === "browser_recipe") return `browser-workflow:${automation.action.recipeId}`;
62
63
  return automation.action.agentId ? `agent:${automation.action.agentId}` : "agent";
63
64
  }
64
65
  function toHomeAutomation(automation) {
@@ -6,6 +6,8 @@ import { registerMemoryRoutes } from "./memory.js";
6
6
  import { registerProjectsRoutes } from "./projects.js";
7
7
  import { registerSearchRoutes } from "./search.js";
8
8
  import { registerMobileRoutes } from "./mobile.js";
9
+ import { registerTaskOutcomeRoutes } from "./task-outcomes.js";
10
+ import { registerInteractionStateRoutes } from "./interaction-state.js";
9
11
  import { registerLocalAppsRoutes } from "./local-apps.js";
10
12
  import { registerWorkDiscoveryRoutes } from "./work-discovery.js";
11
13
  import { mountAppLazyRoutePrefixes, registerAuthenticatedLazyRouteFallback } from "./lazy-fallback.js";
@@ -21,6 +23,8 @@ function registerCoreAuthenticatedRoutes(authenticated, deps) {
21
23
  registerWorkDiscoveryRoutes(authenticated, deps);
22
24
  registerSearchRoutes(authenticated, deps);
23
25
  registerMobileRoutes(authenticated, deps);
26
+ registerTaskOutcomeRoutes(authenticated, deps);
27
+ registerInteractionStateRoutes(authenticated, deps);
24
28
  }
25
29
  function registerAuthenticatedRoutes(app, authenticated, deps) {
26
30
  registerCoreAuthenticatedRoutes(authenticated, deps);
@@ -0,0 +1,3 @@
1
+ import type { Hono } from 'hono';
2
+ import type { AuthenticatedRouteDeps } from './deps.js';
3
+ export declare function registerInteractionStateRoutes(authenticated: Hono, deps: AuthenticatedRouteDeps): void;
@@ -0,0 +1,45 @@
1
+ import { getInteractionState, setInteractionState } from "../../../storage/sqlite/interaction-state-repository.js";
2
+ import "../../../storage/sqlite/index.js";
3
+ //#region src/gateway/hono/routes/interaction-state.ts
4
+ const SUPPORT_NEEDS = new Set([
5
+ "listen",
6
+ "clarify",
7
+ "advise",
8
+ "act",
9
+ "unknown"
10
+ ]);
11
+ function registerInteractionStateRoutes(authenticated, deps) {
12
+ authenticated.get("/api/interaction-state", (c) => {
13
+ const sessionKey = c.req.query("sessionKey")?.trim() ?? "";
14
+ if (!sessionKey) return c.json({ error: "sessionKey is required" }, 400);
15
+ const state = getInteractionState(sessionKey);
16
+ return state ? c.json({
17
+ ok: true,
18
+ state
19
+ }) : c.json({
20
+ ok: false,
21
+ error: "Interaction state not found"
22
+ }, 404);
23
+ });
24
+ authenticated.patch("/api/interaction-state", deps.strictRateLimitMiddleware, async (c) => {
25
+ const body = await c.req.json().catch(() => null);
26
+ const sessionKey = body && typeof body === "object" && typeof body.sessionKey === "string" ? body.sessionKey.trim() : "";
27
+ const supportNeed = body && typeof body === "object" && SUPPORT_NEEDS.has(body.supportNeed) ? body.supportNeed : void 0;
28
+ if (!sessionKey || !supportNeed) return c.json({ error: "sessionKey and a valid supportNeed are required" }, 400);
29
+ const state = setInteractionState({
30
+ sessionKey,
31
+ signal: {
32
+ supportNeed,
33
+ confidence: 1,
34
+ source: "explicit",
35
+ repairStatus: "none"
36
+ }
37
+ });
38
+ return c.json({
39
+ ok: true,
40
+ state
41
+ });
42
+ });
43
+ }
44
+ //#endregion
45
+ export { registerInteractionStateRoutes };