@xopcai/xopc 0.0.324 → 0.0.329

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 (325) hide show
  1. package/README.md +4 -3
  2. package/README.zh-CN.md +4 -3
  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/{agent-avatar-dicebear-B-Gczr_A.js → agent-avatar-dicebear-Bs1qnnhD.js} +1 -1
  6. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-DHJyAT7t.js +1 -0
  7. package/dist/gateway/static/root/assets/agent-plugin-dialog-DLKj_iIh.js +1 -0
  8. package/dist/gateway/static/root/assets/agents-SXZ5O0g4.js +70 -0
  9. package/dist/gateway/static/root/assets/{app-management-settings-panel-BwWdVRlb.js → app-management-settings-panel-BrIji9B5.js} +1 -1
  10. package/dist/gateway/static/root/assets/{appearance-settings-EoXNDO1j.js → appearance-settings-Uts-MQ7K.js} +1 -1
  11. package/dist/gateway/static/root/assets/apps-page-DcclVdxW.js +1 -0
  12. package/dist/gateway/static/root/assets/{archive-plugin-B_T0uMvL.js → archive-plugin-_EzRfBuI.js} +1 -1
  13. package/dist/gateway/static/root/assets/{attachment-load-D9DDwxd2.js → attachment-load-CHg7_XFl.js} +1 -1
  14. package/dist/gateway/static/root/assets/{automations-page-jI9vNr2r.js → automations-page-CGMErk_w.js} +1 -1
  15. package/dist/gateway/static/root/assets/automations-workspace-Cc4yqiF6.js +7 -0
  16. package/dist/gateway/static/root/assets/{binary-plugins-Dzsxh9OL.js → binary-plugins-D3WB-tVn.js} +1 -1
  17. package/dist/gateway/static/root/assets/{block-editor-CWUUgWWk.js → block-editor-Cm1W-14I.js} +53 -53
  18. package/dist/gateway/static/root/assets/box-DvYoGszj.js +1 -0
  19. package/dist/gateway/static/root/assets/braces-Cfmtagno.js +1 -0
  20. package/dist/gateway/static/root/assets/{browser-automation-inputs-DSWXq9lI.js → browser-automation-inputs-VnvK-GQP.js} +1 -1
  21. package/dist/gateway/static/root/assets/browser-automations-page-CZYCvSSU.js +3 -0
  22. package/dist/gateway/static/root/assets/browser-settings-page-DDz9PE6m.js +3 -0
  23. package/dist/gateway/static/root/assets/calendar-clock-D-quYVPe.js +1 -0
  24. package/dist/gateway/static/root/assets/capabilities-page-DH3aDk53.js +2 -0
  25. package/dist/gateway/static/root/assets/capabilities-settings-panel-C8jMZAJl.js +8 -0
  26. package/dist/gateway/static/root/assets/capability-discover-page-CgGvsf3t.js +1 -0
  27. package/dist/gateway/static/root/assets/capability-header-actions-C3chJDQu.js +1 -0
  28. package/dist/gateway/static/root/assets/capability-icon-BYm2-nS-.js +1 -0
  29. package/dist/gateway/static/root/assets/channels-CuVS_KsY.js +1 -0
  30. package/dist/gateway/static/root/assets/{chat-terminal-dock-WXZrEB3K.js → chat-terminal-dock-ClbmjCL2.js} +2 -2
  31. package/dist/gateway/static/root/assets/chevron-left-DqFhpbvK.js +1 -0
  32. package/dist/gateway/static/root/assets/clock-3-DnrAnuyZ.js +1 -0
  33. package/dist/gateway/static/root/assets/computer-settings-page-BfZaf516.js +1 -0
  34. package/dist/gateway/static/root/assets/connector-service-page-F-fYNIx8.js +1 -0
  35. package/dist/gateway/static/root/assets/connectors-page-B4SLpvSL.js +2 -0
  36. package/dist/gateway/static/root/assets/date-picker-DXQTsUJn.js +1 -0
  37. package/dist/gateway/static/root/assets/dependency-picker-B_z3zihW.js +1 -0
  38. package/dist/gateway/static/root/assets/{desktop-pet-DPVPqFlh.js → desktop-pet-C1TZzKS3.js} +1 -1
  39. package/dist/gateway/static/root/assets/desktop-pet-settings-B5JGIfqn.js +1 -0
  40. package/dist/gateway/static/root/assets/device-pairing-wizard-DFYK_Ywf.js +1 -0
  41. package/dist/gateway/static/root/assets/directory-picker-path-field-BfxaNwMB.js +1 -0
  42. package/dist/gateway/static/root/assets/ellipsis-0k4rZLoy.js +1 -0
  43. package/dist/gateway/static/root/assets/{extension-debug-page-cuG5Lnwf.js → extension-debug-page-Bs8_FYCm.js} +1 -1
  44. package/dist/gateway/static/root/assets/extension-marketplace-api-DqV4YRYs.js +1 -0
  45. package/dist/gateway/static/root/assets/{extension-page-BCTAXdyE.js → extension-page-DH5vFbBw.js} +1 -1
  46. package/dist/gateway/static/root/assets/{extension-settings-page-kadW_icu.js → extension-settings-page-hGKovxxC.js} +1 -1
  47. package/dist/gateway/static/root/assets/external-link-DjqjBmc3.js +1 -0
  48. package/dist/gateway/static/root/assets/eye-CABVeTq0.js +1 -0
  49. package/dist/gateway/static/root/assets/folder-open-CyzJ19I9.js +1 -0
  50. package/dist/gateway/static/root/assets/{gateway-config-swr-CoQVulMd.js → gateway-config-swr-BYMrbKZE.js} +1 -1
  51. package/dist/gateway/static/root/assets/gateway-settings-BIsiP-JI.js +1 -0
  52. package/dist/gateway/static/root/assets/{gateway-startup-retry-B5GJ-CQV.js → gateway-startup-retry-DMqYXHAn.js} +1 -1
  53. package/dist/gateway/static/root/assets/gauge-C78eD2BA.js +1 -0
  54. package/dist/gateway/static/root/assets/git-branch-Dh9uxTot.js +1 -0
  55. package/dist/gateway/static/root/assets/globe-DSSGFWFn.js +1 -0
  56. package/dist/gateway/static/root/assets/home-page-CoBivEvx.js +1 -0
  57. package/dist/gateway/static/root/assets/image-Cwyalflz.js +1 -0
  58. package/dist/gateway/static/root/assets/{image-generation-api-DvWDkbk1.js → image-generation-api-D1sQGaJz.js} +1 -1
  59. package/dist/gateway/static/root/assets/imports-page-rssb4rjP.js +1 -0
  60. package/dist/gateway/static/root/assets/inbox-DNoSz682.js +1 -0
  61. package/dist/gateway/static/root/assets/index-C4QN4gCi.css +1 -0
  62. package/dist/gateway/static/root/assets/index-Cr4SINLG.js +121 -0
  63. package/dist/gateway/static/root/assets/is-masked-secret-DOkL5b_X.js +1 -0
  64. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-C1fKIjz4.js → keyboard-shortcuts-settings-CMitbles.js} +1 -1
  65. package/dist/gateway/static/root/assets/layout-grid-CEVZdVFU.js +1 -0
  66. package/dist/gateway/static/root/assets/link-2-D_ZKYUW7.js +1 -0
  67. package/dist/gateway/static/root/assets/list-BBGUdmkF.js +1 -0
  68. package/dist/gateway/static/root/assets/loader-circle-CifKLtgG.js +1 -0
  69. package/dist/gateway/static/root/assets/local-app-workbench-page-Di82Oacm.js +1 -0
  70. package/dist/gateway/static/root/assets/local-apps-page-CCvA9d9L.js +1 -0
  71. package/dist/gateway/static/root/assets/{locale-store-BPZR8x9b.js → locale-store-BSkKhYkc.js} +1 -1
  72. package/dist/gateway/static/root/assets/lock-keyhole-DEK5kH0u.js +1 -0
  73. package/dist/gateway/static/root/assets/logs-page-BK8ol1q0.js +2 -0
  74. package/dist/gateway/static/root/assets/management-settings-CebXkEtB.js +1 -0
  75. package/dist/gateway/static/root/assets/{markdown-view-Dft8ASFD.js → markdown-view-DXubGEic.js} +2 -2
  76. package/dist/gateway/static/root/assets/{media-plugins-Cjj-fidX.js → media-plugins-DLJrmU9J.js} +1 -1
  77. package/dist/gateway/static/root/assets/message-circle-Badhj-4D.js +1 -0
  78. package/dist/gateway/static/root/assets/message-square-fVE7Ghj1.js +1 -0
  79. package/dist/gateway/static/root/assets/message-square-plus-XP0tGdlV.js +1 -0
  80. package/dist/gateway/static/root/assets/messages-D0G_sZvA.js +3 -0
  81. package/dist/gateway/static/root/assets/minimize-2-DtOGrlpo.js +1 -0
  82. package/dist/gateway/static/root/assets/models-hub-cache-B0EUPwTv.js +1 -0
  83. package/dist/gateway/static/root/assets/network-BUQLY1BV.js +1 -0
  84. package/dist/gateway/static/root/assets/note-detail-panel-xsKDIJdK.js +5 -0
  85. package/dist/gateway/static/root/assets/note-image-lightbox-1qg2v-9j.js +1 -0
  86. package/dist/gateway/static/root/assets/notes-page-BFm7XnWH.js +8 -0
  87. package/dist/gateway/static/root/assets/page-context-capture-button-C3JiQEKD.js +1 -0
  88. package/dist/gateway/static/root/assets/paperclip-f1HujQY1.js +1 -0
  89. package/dist/gateway/static/root/assets/pencil-DmIY3Oa-.js +1 -0
  90. package/dist/gateway/static/root/assets/power-ZI-pBczI.js +1 -0
  91. package/dist/gateway/static/root/assets/preview-open-alternatives-buk_gdip.js +1 -0
  92. package/dist/gateway/static/root/assets/{product-open-page-DlpCi5zT.js → product-open-page-DwEEO0Ak.js} +1 -1
  93. package/dist/gateway/static/root/assets/project-detail-page-CRQGCRSU.js +1 -0
  94. package/dist/gateway/static/root/assets/projects-page-DcqylysA.js +1 -0
  95. package/dist/gateway/static/root/assets/{registry-api-DWWO6ajd.js → registry-api-tx8XCHOs.js} +1 -1
  96. package/dist/gateway/static/root/assets/remote-access-hub-Cq5MaiRW.js +1 -0
  97. package/dist/gateway/static/root/assets/rotate-cw-LIg3Am9S.js +1 -0
  98. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-BT_ANpaT.js → runtime-tools-settings-panel-De7HmmBu.js} +2 -2
  99. package/dist/gateway/static/root/assets/scenes-page-GXJ-b3dO.js +2 -0
  100. package/dist/gateway/static/root/assets/{schema-form-BcqsqSsV.js → schema-form-DPMEuj5D.js} +1 -1
  101. package/dist/gateway/static/root/assets/search-DA7gz22f.js +1 -0
  102. package/dist/gateway/static/root/assets/server-BlHCBjiE.js +1 -0
  103. package/dist/gateway/static/root/assets/sessions-page-C6FwYIRA.js +1 -0
  104. package/dist/gateway/static/root/assets/settings-advanced-gate-BEyQiZs0.js +1 -0
  105. package/dist/gateway/static/root/assets/settings-form-section-DM0D-BQ_.js +1 -0
  106. package/dist/gateway/static/root/assets/{settings-page-B65vii9U.js → settings-page-CWS9yOH3.js} +1 -1
  107. package/dist/gateway/static/root/assets/settings-page-layout-X1x-2Cp9.js +1 -0
  108. package/dist/gateway/static/root/assets/setup-status-panel-BhGKiTPf.js +1 -0
  109. package/dist/gateway/static/root/assets/{share-preview-page-BS8o58NJ.js → share-preview-page-CcRi2yGy.js} +1 -1
  110. package/dist/gateway/static/root/assets/shares-settings-DNmcCBfX.js +1 -0
  111. package/dist/gateway/static/root/assets/skill-api-BCAV_F1P.js +1 -0
  112. package/dist/gateway/static/root/assets/skill-card-icon-BrrpZ3Mw.js +1 -0
  113. package/dist/gateway/static/root/assets/skill-reload-api-BEV2WXGk.js +1 -0
  114. package/dist/gateway/static/root/assets/skills-page-C8zOGpKw.js +2 -0
  115. package/dist/gateway/static/root/assets/star-BUWJqJ5c.js +1 -0
  116. package/dist/gateway/static/root/assets/stethoscope-DRqTAtjD.js +1 -0
  117. package/dist/gateway/static/root/assets/store-SzD1Jvgm.js +1 -0
  118. package/dist/gateway/static/root/assets/system-settings-panel-C_lajq9u.js +1 -0
  119. package/dist/gateway/static/root/assets/task-detail-page-Dk8Bmlhw.js +1 -0
  120. package/dist/gateway/static/root/assets/tunnel-api-CYvKiE_f.js +1 -0
  121. package/dist/gateway/static/root/assets/upload-rrb46c3c.js +1 -0
  122. package/dist/gateway/static/root/assets/use-autosave-ZTHe1zCM.js +1 -0
  123. package/dist/gateway/static/root/assets/user-model-page-C_SPNZbP.js +2 -0
  124. package/dist/gateway/static/root/assets/user-round-C9jxPhMR.js +1 -0
  125. package/dist/gateway/static/root/assets/{voice-api-key-field-DJV-qERt.js → voice-api-key-field-C8Kpkct-.js} +1 -1
  126. package/dist/gateway/static/root/assets/voice-config-api-BvzxINUk.js +1 -0
  127. package/dist/gateway/static/root/assets/wand-sparkles-DWuJz5ya.js +1 -0
  128. package/dist/gateway/static/root/assets/{work-discovery-overlay-DcHhy54L.js → work-discovery-overlay-ClB6T-dm.js} +1 -1
  129. package/dist/gateway/static/root/assets/workflow-run-setup-panel-X0Cyh2AR.js +3 -0
  130. package/dist/gateway/static/root/assets/workflows-page-BrL6dzf0.js +6 -0
  131. package/dist/gateway/static/root/connector-icons/SOURCES.md +1 -0
  132. package/dist/gateway/static/root/connector-icons/wecom.svg +9 -0
  133. package/dist/gateway/static/root/index.html +26 -8
  134. package/dist/package.js +1 -1
  135. package/dist/src/agent/agent-instance-gateway.d.ts +2 -2
  136. package/dist/src/agent/agent-manager.d.ts +4 -2
  137. package/dist/src/agent/agent-manager.js +58 -19
  138. package/dist/src/agent/background-review/coordinator.d.ts +2 -7
  139. package/dist/src/agent/background-review/coordinator.js +17 -34
  140. package/dist/src/agent/background-review/prompts.d.ts +13 -5
  141. package/dist/src/agent/background-review/prompts.js +17 -12
  142. package/dist/src/agent/background-review/run-background-review.d.ts +3 -3
  143. package/dist/src/agent/background-review/run-background-review.js +58 -43
  144. package/dist/src/agent/context/execution-context.js +5 -2
  145. package/dist/src/agent/mcp/index.js +1 -1
  146. package/dist/src/agent/mcp/mcp-transport.js +2 -2
  147. package/dist/src/agent/mcp/oauth/index.js +1 -1
  148. package/dist/src/agent/mcp/oauth/mcp-oauth-manager.js +2 -2
  149. package/dist/src/agent/mcp/oauth/mcp-oauth-provider.js +1 -1
  150. package/dist/src/agent/orchestration/agent-orchestrator.js +1 -1
  151. package/dist/src/agent/prompt/sections/tooling.js +3 -0
  152. package/dist/src/agent/service/direct-turn-helpers.js +1 -1
  153. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.d.ts +12 -0
  154. package/dist/src/agent/tools/user-context-tool.js +29 -4
  155. package/dist/src/automations/domain/types.d.ts +7 -1
  156. package/dist/src/automations/service/action-executor.d.ts +2 -2
  157. package/dist/src/automations/service/action-executor.js +36 -13
  158. package/dist/src/automations/service/automation-service.js +2 -1
  159. package/dist/src/browser/automations/index.js +2 -2
  160. package/dist/src/browser/automations/service.d.ts +11 -2
  161. package/dist/src/browser/automations/service.js +19 -5
  162. package/dist/src/capabilities/readiness/from-config.d.ts +0 -1
  163. package/dist/src/capabilities/readiness/from-config.js +2 -4
  164. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  165. package/dist/src/cli/commands/extension-agent-plugin.js +2 -1
  166. package/dist/src/config/schema.js +4 -4
  167. package/dist/src/connectors/china-catalog.js +5 -1
  168. package/dist/src/connectors/connected-source-ingestion.js +6 -1
  169. package/dist/src/connectors/connected-source-observations.d.ts +10 -0
  170. package/dist/src/connectors/connected-source-observations.js +80 -0
  171. package/dist/src/connectors/connected-source-understanding.js +198 -8
  172. package/dist/src/connectors/learning-coordinator.js +63 -26
  173. package/dist/src/connectors/learning-recipes.js +19 -2
  174. package/dist/src/discussions/audio-repair.d.ts +1 -1
  175. package/dist/src/discussions/live-worker.js +1 -3
  176. package/dist/src/discussions/recording.js +2 -2
  177. package/dist/src/discussions/sealer.js +2 -2
  178. package/dist/src/extensions/agent-plugins/auth.d.ts +2 -2
  179. package/dist/src/extensions/agent-plugins/auth.js +6 -35
  180. package/dist/src/extensions/agent-plugins/credentials.d.ts +2 -0
  181. package/dist/src/extensions/agent-plugins/credentials.js +37 -0
  182. package/dist/src/extensions/agent-plugins/plugin-oauth-scope.d.ts +1 -0
  183. package/dist/src/extensions/agent-plugins/plugin-oauth-scope.js +8 -0
  184. package/dist/src/extensions/marketplace.d.ts +4 -0
  185. package/dist/src/extensions/marketplace.js +4 -0
  186. package/dist/src/gateway/file-space-service.d.ts +9 -2
  187. package/dist/src/gateway/hono/routes/agent-plugins.js +2 -1
  188. package/dist/src/gateway/hono/routes/config.js +0 -3
  189. package/dist/src/gateway/hono/routes/connectors.js +3 -10
  190. package/dist/src/gateway/hono/routes/context-sources.d.ts +0 -1
  191. package/dist/src/gateway/hono/routes/context-sources.js +12 -15
  192. package/dist/src/gateway/hono/routes/status.js +0 -1
  193. package/dist/src/gateway/hono/routes/user-model.js +21 -3
  194. package/dist/src/gateway/hono/routes/voice.js +0 -67
  195. package/dist/src/gateway/service.js +6 -4
  196. package/dist/src/media-understanding/types.d.ts +1 -1
  197. package/dist/src/memory-maintenance/service.d.ts +1 -0
  198. package/dist/src/memory-maintenance/service.js +13 -0
  199. package/dist/src/migrations/retired-local-stt.d.ts +2 -0
  200. package/dist/src/migrations/retired-local-stt.js +52 -0
  201. package/dist/src/migrations/runner.js +2 -1
  202. package/dist/src/session/turn-outcome-projector.js +1 -1
  203. package/dist/src/storage/sqlite/connection.js +1 -0
  204. package/dist/src/storage/sqlite/migrations/207_user_model_policy_contract.sql +121 -0
  205. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  206. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  207. package/dist/src/storage/sqlite/schema.js +1 -1
  208. package/dist/src/storage/sqlite/sql-assets.d.ts +1 -0
  209. package/dist/src/storage/sqlite/sql-assets.js +7 -4
  210. package/dist/src/tasks/index.js +2 -2
  211. package/dist/src/tasks/task-application-service.d.ts +1 -0
  212. package/dist/src/tasks/task-application-service.js +4 -2
  213. package/dist/src/tasks/task-context-assembler.js +10 -1
  214. package/dist/src/tasks/task-run-dispatcher.d.ts +1 -0
  215. package/dist/src/tasks/task-run-dispatcher.js +15 -2
  216. package/dist/src/user-context/sources/consent-repository.d.ts +7 -0
  217. package/dist/src/user-context/sources/consent-repository.js +81 -0
  218. package/dist/src/user-context/sources/index.d.ts +1 -0
  219. package/dist/src/user-context/sources/index.js +2 -1
  220. package/dist/src/user-context/sources/repository.js +73 -1
  221. package/dist/src/user-context/sources/types.d.ts +16 -0
  222. package/dist/src/user-model/action-rule-suggestions.d.ts +11 -0
  223. package/dist/src/user-model/action-rule-suggestions.js +29 -0
  224. package/dist/src/user-model/bootstrap.js +1 -1
  225. package/dist/src/user-model/capture/executor.js +83 -7
  226. package/dist/src/user-model/capture/semantic.d.ts +5 -2
  227. package/dist/src/user-model/capture/semantic.js +27 -11
  228. package/dist/src/user-model/domain.d.ts +26 -0
  229. package/dist/src/user-model/domain.js +40 -2
  230. package/dist/src/user-model/index.d.ts +2 -0
  231. package/dist/src/user-model/index.js +6 -4
  232. package/dist/src/user-model/maintenance-policy.d.ts +1 -0
  233. package/dist/src/user-model/maintenance-policy.js +13 -0
  234. package/dist/src/user-model/observation-repository.d.ts +48 -0
  235. package/dist/src/user-model/observation-repository.js +100 -0
  236. package/dist/src/user-model/repository.d.ts +5 -0
  237. package/dist/src/user-model/repository.js +121 -10
  238. package/dist/src/user-model/usage-policy.d.ts +5 -2
  239. package/dist/src/user-model/usage-policy.js +2 -2
  240. package/dist/src/voice/audio/normalize.d.ts +1 -1
  241. package/dist/src/voice/audio/normalize.js +1 -1
  242. package/dist/src/voice/{local → audio}/wav.js +1 -1
  243. package/dist/src/voice/language-profile.js +10 -16
  244. package/dist/src/voice/metadata/builtin.js +0 -46
  245. package/dist/src/voice/stt/providers/index.d.ts +0 -1
  246. package/dist/src/voice/stt/providers/index.js +1 -2
  247. package/dist/src/voice/stt/types.js +3 -4
  248. package/dist/src/voice/tts/merge-config.js +1 -1
  249. package/dist/src/voice/tts/speech-registry.d.ts +1 -1
  250. package/dist/src/voice/tts/types.d.ts +1 -1
  251. package/dist/src/work-discovery/analyzer.js +6 -5
  252. package/dist/src/work-discovery/service.js +2 -2
  253. package/dist/src/work-discovery/types.d.ts +1 -1
  254. package/dist/src/workflows/context/workflow-context.js +5 -1
  255. package/dist/src/workflows/index.js +2 -2
  256. package/dist/src/workflows/service/workflow-run-service.d.ts +1 -0
  257. package/dist/src/workflows/service/workflow-run-service.js +13 -4
  258. package/package.json +13 -17
  259. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CxcIHW_Z.js +0 -1
  260. package/dist/gateway/static/root/assets/agent-plugin-dialog-CNuqJcHQ.js +0 -1
  261. package/dist/gateway/static/root/assets/agents-CPpmkx7O.js +0 -1
  262. package/dist/gateway/static/root/assets/apps-page-6xEgLDv8.js +0 -1
  263. package/dist/gateway/static/root/assets/automations-workspace-rztQnZDk.js +0 -7
  264. package/dist/gateway/static/root/assets/browser-automations-page-D96o3bDY.js +0 -3
  265. package/dist/gateway/static/root/assets/browser-settings-page-DUQzQ3ic.js +0 -3
  266. package/dist/gateway/static/root/assets/capabilities-settings-panel-CKWtXof8.js +0 -8
  267. package/dist/gateway/static/root/assets/channels-settings-C8ducWB7.js +0 -1
  268. package/dist/gateway/static/root/assets/computer-settings-page-uy9YDwxJ.js +0 -1
  269. package/dist/gateway/static/root/assets/connector-service-page-BpF0SjB9.js +0 -1
  270. package/dist/gateway/static/root/assets/connectors-page-eZTfIMWI.js +0 -2
  271. package/dist/gateway/static/root/assets/date-picker-Do1dl0La.js +0 -1
  272. package/dist/gateway/static/root/assets/dependency-picker-BhS8s080.js +0 -1
  273. package/dist/gateway/static/root/assets/desktop-pet-settings-Dv3vG9HZ.js +0 -1
  274. package/dist/gateway/static/root/assets/device-pairing-wizard-DdvO1O6W.js +0 -1
  275. package/dist/gateway/static/root/assets/gateway-settings-CLZyN-u9.js +0 -1
  276. package/dist/gateway/static/root/assets/home-page-BSqg-JE9.js +0 -1
  277. package/dist/gateway/static/root/assets/imports-page-_pddpuej.js +0 -1
  278. package/dist/gateway/static/root/assets/index-BKL5tg2f.css +0 -1
  279. package/dist/gateway/static/root/assets/index-CJuypaNt.js +0 -121
  280. package/dist/gateway/static/root/assets/local-app-workbench-page-DXFnYiA0.js +0 -1
  281. package/dist/gateway/static/root/assets/local-apps-page-CkXKS5xe.js +0 -1
  282. package/dist/gateway/static/root/assets/logs-page-C33z-ife.js +0 -2
  283. package/dist/gateway/static/root/assets/management-settings-8eDZb0uS.js +0 -1
  284. package/dist/gateway/static/root/assets/messages-kFWhF6_t.js +0 -3
  285. package/dist/gateway/static/root/assets/note-detail-panel-C95RtLuL.js +0 -5
  286. package/dist/gateway/static/root/assets/notes-page-kFxknjMR.js +0 -8
  287. package/dist/gateway/static/root/assets/page-context-capture-button-OUL3fEYh.js +0 -1
  288. package/dist/gateway/static/root/assets/page-tabs-CVbY7_N5.js +0 -1
  289. package/dist/gateway/static/root/assets/preview-open-alternatives-CKiIby0r.js +0 -1
  290. package/dist/gateway/static/root/assets/project-detail-page-LPAxUszX.js +0 -1
  291. package/dist/gateway/static/root/assets/projects-page-Cbyb4hyy.js +0 -1
  292. package/dist/gateway/static/root/assets/remote-access-hub-BtDFZc6g.js +0 -1
  293. package/dist/gateway/static/root/assets/scenes-page-CJlc-mg1.js +0 -2
  294. package/dist/gateway/static/root/assets/sessions-page-CUo6-iV2.js +0 -1
  295. package/dist/gateway/static/root/assets/settings-advanced-gate-XeSxPjP7.js +0 -1
  296. package/dist/gateway/static/root/assets/settings-form-section-Dol9j_pF.js +0 -1
  297. package/dist/gateway/static/root/assets/settings-page-layout-eqTUTW2L.js +0 -1
  298. package/dist/gateway/static/root/assets/setup-status-panel-BCt__prc.js +0 -1
  299. package/dist/gateway/static/root/assets/shares-settings-BsjSqEnw.js +0 -1
  300. package/dist/gateway/static/root/assets/skill-reload-api-evN7gs0S.js +0 -1
  301. package/dist/gateway/static/root/assets/skills-page-BifYwEhe.js +0 -2
  302. package/dist/gateway/static/root/assets/skills-page.utils-DOk-iOvN.js +0 -1
  303. package/dist/gateway/static/root/assets/system-settings-panel-CcSvoHfY.js +0 -1
  304. package/dist/gateway/static/root/assets/task-detail-page-pCRG7Jb3.js +0 -1
  305. package/dist/gateway/static/root/assets/tunnel-api-DDGMf44u.js +0 -1
  306. package/dist/gateway/static/root/assets/use-autosave-DiIkxIq7.js +0 -1
  307. package/dist/gateway/static/root/assets/user-model-page-CvYeM0Ml.js +0 -2
  308. package/dist/gateway/static/root/assets/voice-config-api-BaxITrwZ.js +0 -1
  309. package/dist/gateway/static/root/assets/workflow-run-setup-panel-DbVtLh0R.js +0 -3
  310. package/dist/gateway/static/root/assets/workflows-page-CT8ouKcB.js +0 -6
  311. package/dist/src/voice/local/model-files.d.ts +0 -14
  312. package/dist/src/voice/local/model-files.js +0 -92
  313. package/dist/src/voice/local/model-manager.d.ts +0 -18
  314. package/dist/src/voice/local/model-manager.js +0 -133
  315. package/dist/src/voice/local/models.d.ts +0 -28
  316. package/dist/src/voice/local/models.js +0 -99
  317. package/dist/src/voice/local/provider-switch.d.ts +0 -4
  318. package/dist/src/voice/local/provider-switch.js +0 -36
  319. package/dist/src/voice/local/runtime-client.d.ts +0 -28
  320. package/dist/src/voice/local/runtime-client.js +0 -183
  321. package/dist/src/voice/local/runtime-worker.d.ts +0 -1
  322. package/dist/src/voice/local/runtime-worker.js +0 -271
  323. package/dist/src/voice/stt/providers/local-transcription.d.ts +0 -2
  324. package/dist/src/voice/stt/providers/local-transcription.js +0 -53
  325. /package/dist/src/voice/{local → audio}/wav.d.ts +0 -0
@@ -13,6 +13,10 @@ export interface RegistryEntry {
13
13
  verified?: boolean;
14
14
  homepage?: string;
15
15
  author?: string;
16
+ branding?: {
17
+ iconUrl: string;
18
+ iconSha256: string;
19
+ };
16
20
  }
17
21
  export interface ExtensionRegistryFile {
18
22
  version: number;
@@ -67,6 +67,10 @@ async function fetchExtensionCatalogFromStore() {
67
67
  npmPackage: name,
68
68
  version: typeof it.latestVersion === "string" ? it.latestVersion : void 0,
69
69
  author,
70
+ ...typeof it.branding?.iconUrl === "string" && typeof it.branding.iconSha256 === "string" ? { branding: {
71
+ iconUrl: it.branding.iconUrl,
72
+ iconSha256: it.branding.iconSha256
73
+ } } : {},
70
74
  verified: author === "xopcai"
71
75
  });
72
76
  }
@@ -1,4 +1,11 @@
1
1
  import { FileSpaceService } from '../files/file-service.js';
2
- import type { GatewayService } from './service.js';
2
+ type GatewayFileSpaceHost = {
3
+ currentConfig: ConstructorParameters<typeof FileSpaceService>[0] extends () => infer T ? T : never;
4
+ projects: ConstructorParameters<typeof FileSpaceService>[1];
5
+ sessions: {
6
+ getEffectiveWorkspacePath(conversationId: string): Promise<string>;
7
+ };
8
+ };
3
9
  /** Share the file registry, including session-specific spaces, across gateway routes. */
4
- export declare function getGatewayFileSpaceService(service: GatewayService): FileSpaceService;
10
+ export declare function getGatewayFileSpaceService(service: GatewayFileSpaceHost): FileSpaceService;
11
+ export {};
@@ -1,8 +1,9 @@
1
1
  import { AgentPluginStore } from "../../../extensions/agent-plugins/store.js";
2
- import { removePluginCredentials, savePluginAuthBinding } from "../../../extensions/agent-plugins/auth.js";
2
+ import { savePluginAuthBinding } from "../../../extensions/agent-plugins/auth.js";
3
3
  import { disposeAllSessionMcpRuntimes } from "../../../agent/mcp/bundle-mcp-runtime.js";
4
4
  import { withAgentPluginSource } from "../../../extensions/agent-plugins/sources.js";
5
5
  import { agentPluginInventoryRow } from "../../../extensions/agent-plugins/inventory.js";
6
+ import { removePluginCredentials } from "../../../extensions/agent-plugins/credentials.js";
6
7
  import { z } from "zod";
7
8
  //#region src/gateway/hono/routes/agent-plugins.ts
8
9
  const sourceBody = z.strictObject({
@@ -1,6 +1,5 @@
1
1
  import { enumerateLanGatewayCandidates } from "../../host.js";
2
2
  import { getTunnelService } from "../../../tunnel/tunnel-service.js";
3
- import { prepareLocalVoiceModelAfterProviderSwitch } from "../../../voice/local/provider-switch.js";
4
3
  import { buildSafeWebConfigPayload } from "../lib/config-payload.js";
5
4
  import { applyChannelsPatch } from "./config-patch/channels.js";
6
5
  import { applyGatewayPatch } from "./config-patch/gateway.js";
@@ -37,7 +36,6 @@ function registerConfigRoutes(authenticated, deps) {
37
36
  authenticated.patch("/api/config", strictRateLimitMiddleware, async (c) => {
38
37
  const body = await c.req.json();
39
38
  const config = service.currentConfig;
40
- const previousSttProvider = config.tools?.media?.audio?.provider;
41
39
  applyChannelsPatch(config, body);
42
40
  const gatewayResult = applyGatewayPatch(config, body);
43
41
  if (gatewayResult.ok === false) return c.json({
@@ -68,7 +66,6 @@ function registerConfigRoutes(authenticated, deps) {
68
66
  ok: false,
69
67
  error: result.error
70
68
  }, 500);
71
- prepareLocalVoiceModelAfterProviderSwitch(previousSttProvider, service.currentConfig);
72
69
  const safeConfig = await buildSafeWebConfigPayload(service, { locale: localeFromRequest(c) });
73
70
  return c.json({
74
71
  ok: true,
@@ -28,12 +28,11 @@ import { composioLogoResponse } from "../../../connectors/composio-logo.js";
28
28
  import { inspectManagedComposioStatus } from "../../../connectors/composio-managed-client.js";
29
29
  import { appendComposioTriggerEvent, listComposioTriggerEvents } from "../../../connectors/composio-triggers.js";
30
30
  import { ingestLocalFolderSource } from "../../../connectors/connected-source-ingestion.js";
31
- import { previewConnectorDefinition, testConnectorInstance } from "../../../connectors/health.js";
32
31
  import { listUnderstandingSourceGrants, revokeUnderstandingSourceGrant } from "../../../user-context/sources/repository.js";
32
+ import { previewConnectorDefinition, testConnectorInstance } from "../../../connectors/health.js";
33
33
  import { setConnectorEnabled } from "../../../connectors/lifecycle.js";
34
34
  import { projectComposioConnectionStatus } from "../../../connectors/runtime-status.js";
35
35
  import { getGatewayPrincipal } from "../../security/gateway-principal.js";
36
- import { markContextSourceAssertionsForReview } from "./context-sources.js";
37
36
  import { registerCliConnectorRoutes } from "./cli-connectors.js";
38
37
  //#region src/gateway/hono/routes/connectors.ts
39
38
  init_logger();
@@ -289,10 +288,7 @@ function registerConnectorRoutes(authenticated, deps) {
289
288
  if (connectionId && !policy.scanEnabled) {
290
289
  service.setConnectorLearningPaused(connectionId, true);
291
290
  const grant = listUnderstandingSourceGrants().find((item) => item.sourceKey === `connector-account:${account.id}`);
292
- if (grant) {
293
- markContextSourceAssertionsForReview(grant.id);
294
- revokeUnderstandingSourceGrant(grant.id);
295
- }
291
+ if (grant) revokeUnderstandingSourceGrant(grant.id);
296
292
  } else if (connectionId && previous?.scanEnabled === false) {
297
293
  if (service.setConnectorLearningPaused(connectionId, false) === 0) service.requestConnectorLearning(connectionId, {
298
294
  mode: "incremental",
@@ -381,10 +377,7 @@ function registerConnectorRoutes(authenticated, deps) {
381
377
  await revokeComposioConnection(connectionId);
382
378
  if (connection?.accountId) {
383
379
  const grant = listUnderstandingSourceGrants().find((item) => item.sourceKey === `connector-account:${connection.accountId}`);
384
- if (grant) {
385
- markContextSourceAssertionsForReview(grant.id);
386
- revokeUnderstandingSourceGrant(grant.id);
387
- }
380
+ if (grant) revokeUnderstandingSourceGrant(grant.id);
388
381
  }
389
382
  return c.json({
390
383
  ok: true,
@@ -1,4 +1,3 @@
1
1
  import type { Hono } from 'hono';
2
2
  import type { AuthenticatedRouteDeps } from './deps.js';
3
- export declare function markContextSourceAssertionsForReview(grantId: string): number;
4
3
  export declare function registerContextSourceRoutes(authenticated: Hono, deps: AuthenticatedRouteDeps): void;
@@ -3,10 +3,11 @@ import { getConnectorAccount } from "../../../storage/sqlite/connector-account-r
3
3
  import { countKnowledgeSourceItems, deleteKnowledgeSourceItems } from "../../../storage/sqlite/knowledge-repository.js";
4
4
  import { init_sqlite } from "../../../storage/sqlite/index.js";
5
5
  import { init_agent_scope, resolveDefaultAgentId } from "../../../agent/agent-scope.js";
6
- import { setAssertionStatus } from "../../../user-model/repository.js";
6
+ import { listUserModelObservations } from "../../../user-model/observation-repository.js";
7
7
  import "../../../user-model/index.js";
8
- import { listConnectedContentCandidates, readConnectedContent } from "../../../connectors/content-enrichment.js";
8
+ import { getActiveUnderstandingConsent } from "../../../user-context/sources/consent-repository.js";
9
9
  import { getUnderstandingSourceGrant, listUnderstandingSourceGrants, listUnderstandingSourceRuns, revokeUnderstandingSourceGrant, updateUnderstandingSourceGrantPolicies } from "../../../user-context/sources/repository.js";
10
+ import { listConnectedContentCandidates, readConnectedContent } from "../../../connectors/content-enrichment.js";
10
11
  import { listUnderstandingSourceDefinitions } from "../../../user-context/sources/catalog.js";
11
12
  //#region src/gateway/hono/routes/context-sources.ts
12
13
  init_agent_scope();
@@ -27,16 +28,6 @@ function assertionIdsForSource(instanceId) {
27
28
  FROM user_assertion_evidence ae JOIN context_evidence e ON e.evidence_id = ae.evidence_id
28
29
  WHERE e.source_instance_id = ?`).all(instanceId).map((row) => row.assertion_id);
29
30
  }
30
- function markContextSourceAssertionsForReview(grantId) {
31
- const grant = getUnderstandingSourceGrant(grantId);
32
- const instanceId = grant ? sourceInstanceId(grant) : void 0;
33
- const ids = instanceId ? assertionIdsForSource(instanceId) : [];
34
- for (const id of ids) setAssertionStatus(id, "needs_review", {
35
- actor: "runtime",
36
- reason: "Its context source was revoked."
37
- });
38
- return ids.length;
39
- }
40
31
  function registerContextSourceRoutes(authenticated, deps) {
41
32
  const service = deps.service.workDiscovery;
42
33
  const limited = deps.strictRateLimitMiddleware;
@@ -49,6 +40,7 @@ function registerContextSourceRoutes(authenticated, deps) {
49
40
  const grants = listUnderstandingSourceGrants({ includeRevoked: c.req.query("includeRevoked") === "true" });
50
41
  return c.json({
51
42
  grants,
43
+ consents: Object.fromEntries(grants.map((grant) => [grant.id, getActiveUnderstandingConsent(grant.id)])),
52
44
  latestRuns: Object.fromEntries(grants.flatMap((grant) => {
53
45
  const run = listUnderstandingSourceRuns(grant.id, 1)[0];
54
46
  return run ? [[grant.id, run]] : [];
@@ -79,15 +71,20 @@ function registerContextSourceRoutes(authenticated, deps) {
79
71
  const current = getUnderstandingSourceGrant(c.req.param("grantId"));
80
72
  if (!current) return c.json({ error: "Context source not found" }, 404);
81
73
  const instanceId = sourceInstanceId(current);
82
- const affectedAssertions = markContextSourceAssertionsForReview(current.id);
74
+ const affectedAssertions = instanceId ? assertionIdsForSource(instanceId).length : 0;
83
75
  const rawDeleted = c.req.query("deleteRaw") === "true" && instanceId ? deleteKnowledgeSourceItems(instanceId) : 0;
76
+ const observationsDeleted = listUserModelObservations({
77
+ sourceGrantId: current.id,
78
+ limit: 2e3
79
+ }).length;
84
80
  const accountId = typeof current.config.accountId === "string" ? current.config.accountId : void 0;
85
81
  const connectionId = accountId ? getConnectorAccount(accountId)?.currentConnectionId : void 0;
86
82
  if (connectionId) deps.service.setConnectorLearningPaused(connectionId, true);
87
83
  return c.json({
88
84
  grant: revokeUnderstandingSourceGrant(current.id),
89
85
  affectedAssertions,
90
- rawDeleted
86
+ rawDeleted,
87
+ observationsDeleted
91
88
  });
92
89
  });
93
90
  authenticated.get("/api/context-sources/content-candidates", (c) => c.json({ candidates: listConnectedContentCandidates({ agentId: resolveDefaultAgentId() }) }));
@@ -134,4 +131,4 @@ function registerContextSourceRoutes(authenticated, deps) {
134
131
  });
135
132
  }
136
133
  //#endregion
137
- export { markContextSourceAssertionsForReview, registerContextSourceRoutes };
134
+ export { registerContextSourceRoutes };
@@ -82,7 +82,6 @@ function buildStatusPayload(service) {
82
82
  sttAvailable: sttConfig ? isSTTAvailable(sttConfig) : false,
83
83
  sttEnabled: sttConfig?.enabled === true,
84
84
  sttProvider: sttConfig?.provider ?? null,
85
- localModelId: sttConfig?.provider === "xopc-local" && typeof sttConfig.providers?.["xopc-local"]?.model === "string" ? sttConfig.providers["xopc-local"].model : null,
86
85
  refineAvailable: isRefineAvailable(config)
87
86
  }
88
87
  };
@@ -2,8 +2,10 @@ import { init_transaction, runSqliteWriteTransaction } from "../../../storage/sq
2
2
  import { createCollaborationRule, getCollaborationRule, init_collaboration_rule_repository, listCollaborationRules, setCollaborationRuleStatus } from "../../../storage/sqlite/collaboration-rule-repository.js";
3
3
  import { KnowledgeReviewConflictError, deleteKnowledgeItem, getKnowledgeItem, listKnowledgeItems, reviewKnowledgeItem, searchKnowledgeItems } from "../../../knowledge-memory/repository.js";
4
4
  import "../../../knowledge-memory/index.js";
5
- import { createPriorityWindow, createUserGoal, listPriorityWindows, listUserGoals, setUserGoalStatus, updatePriorityWindow, updateUserGoal } from "../../../user-model/goals.js";
6
5
  import { deleteUserAssertion, getAssertionSlot, getUserAssertion, listUserAssertionSources, listUserAssertions, reconcileAssertion, setAssertionStatus } from "../../../user-model/repository.js";
6
+ import { listActionRuleSuggestions } from "../../../user-model/action-rule-suggestions.js";
7
+ import { createPriorityWindow, createUserGoal, listPriorityWindows, listUserGoals, setUserGoalStatus, updatePriorityWindow, updateUserGoal } from "../../../user-model/goals.js";
8
+ import { listUserAssertionEdges, listUserModelObservations } from "../../../user-model/observation-repository.js";
7
9
  import { applyUserProfilePatch, getUserProfileSnapshot } from "../../../user-model/profile.js";
8
10
  import { bootstrapUserModel } from "../../../user-model/bootstrap.js";
9
11
  import { canUseAssertion } from "../../../user-model/usage-policy.js";
@@ -11,6 +13,7 @@ import "../../../user-model/index.js";
11
13
  import { listMemoryMaintenanceRuns } from "../../../memory-maintenance/service.js";
12
14
  import "../../../memory-maintenance/index.js";
13
15
  import { getExecutionContextAudit, recordExecutionContextFeedback } from "../../../agent/context/audit.js";
16
+ import { getActiveUnderstandingConsent } from "../../../user-context/sources/consent-repository.js";
14
17
  import { listUnderstandingSourceGrants } from "../../../user-context/sources/repository.js";
15
18
  import { userInfo } from "node:os";
16
19
  //#region src/gateway/hono/routes/user-model.ts
@@ -122,7 +125,10 @@ function assertionView(assertion, sources = listUserAssertionSources([assertion.
122
125
  subject: slot.subject,
123
126
  scope: slot.scope,
124
127
  sources,
125
- usable: canUseAssertion(assertion)
128
+ usable: canUseAssertion(assertion, Date.now(), {
129
+ use: "answer",
130
+ ...assertion.allowedAgentIds?.[0] ? { agentId: assertion.allowedAgentIds[0] } : {}
131
+ })
126
132
  };
127
133
  }
128
134
  function registerUserModelRoutes(authenticated, deps) {
@@ -153,13 +159,17 @@ function registerUserModelRoutes(authenticated, deps) {
153
159
  adapterId: source.adapterId,
154
160
  category: source.category,
155
161
  displayName: source.displayName,
156
- ...source.lastCollectedAt ? { lastCollectedAt: source.lastCollectedAt } : {}
162
+ ...source.lastCollectedAt ? { lastCollectedAt: source.lastCollectedAt } : {},
163
+ consent: getActiveUnderstandingConsent(source.id)
157
164
  }));
158
165
  return c.json({
159
166
  assertions,
167
+ assertionEdges: listUserAssertionEdges(assertions.map((item) => item.id)),
168
+ observations: listUserModelObservations({ limit: 500 }),
160
169
  goals,
161
170
  priorities,
162
171
  rules: listCollaborationRules(),
172
+ ruleSuggestions: listActionRuleSuggestions(),
163
173
  knowledge,
164
174
  maintenance: { lastRun: listMemoryMaintenanceRuns(1)[0] ?? null },
165
175
  profile,
@@ -311,9 +321,17 @@ function registerUserModelRoutes(authenticated, deps) {
311
321
  volatility: current.volatility,
312
322
  sensitivity: current.sensitivity,
313
323
  disclosurePolicy: current.disclosurePolicy,
324
+ domain: current.domain,
325
+ layer: current.layer,
326
+ sensitivityCategories: current.sensitivityCategories,
327
+ purposeIds: current.purposeIds,
328
+ allowedUses: current.allowedUses,
329
+ allowedAgentIds: current.allowedAgentIds,
330
+ deleteAfter: current.deleteAfter,
314
331
  applicability: current.applicability,
315
332
  ...current.validFrom === void 0 ? {} : { validFrom: current.validFrom },
316
333
  ...current.validTo === void 0 ? {} : { validTo: current.validTo },
334
+ ...current.reviewAt === void 0 ? {} : { reviewAt: current.reviewAt },
317
335
  observedAt: Date.now(),
318
336
  createdBy: "user",
319
337
  correctionOfAssertionId: current.id
@@ -2,8 +2,6 @@ import { voiceSelectionSchema } from "../../../../packages/realtime-protocol/src
2
2
  import { createVoiceSessionRequestSchema, init_voice } from "../../../../packages/realtime-protocol/src/voice.js";
3
3
  import { getDefaultModelSync, init_providers, resolveModel } from "../../../providers/index.js";
4
4
  import { completeWithResolvedCredentials } from "../../../providers/model-call.js";
5
- import { getLocalVoiceRuntimeClient } from "../../../voice/local/runtime-client.js";
6
- import { getAudioDecoderStatus } from "../../../voice/audio/normalize.js";
7
5
  import { resolveSttProviderConfigSlice } from "../../../voice/stt/config-slice.js";
8
6
  import { STTTranscriptionError, transcribe } from "../../../voice/stt/transcribe-core.js";
9
7
  import { isSTTAvailable } from "../../../voice/stt/availability.js";
@@ -21,7 +19,6 @@ import { VoiceSessionCreationError, resolveStreamingStt, resolveStreamingTts } f
21
19
  import { getGatewayPrincipal } from "../../security/gateway-principal.js";
22
20
  import { createGatewayRouteLogger } from "../lib/route-logger.js";
23
21
  import { selectPlatformVoice, voiceSettingsCatalog } from "../../../voice/platform-settings.js";
24
- import { listLocalVoiceModelStatuses, removeLocalVoiceModel, startLocalVoiceModelInstall } from "../../../voice/local/model-manager.js";
25
22
  import { listTtsProvidersForApi } from "../../../voice/tts/list-providers.js";
26
23
  import { z } from "zod";
27
24
  //#region src/gateway/hono/routes/voice.ts
@@ -410,70 +407,6 @@ function registerVoiceRoutes(authenticated, deps) {
410
407
  payload
411
408
  });
412
409
  });
413
- authenticated.get("/api/voice/local/status", async (c) => {
414
- const config = service.currentConfig;
415
- const sttConfig = mergeSttConfigFromAppConfig(config.tools?.media?.audio, config.tools?.media);
416
- const modelId = typeof sttConfig.providers?.["xopc-local"]?.model === "string" ? sttConfig.providers["xopc-local"].model : "sensevoice-small";
417
- const models = await listLocalVoiceModelStatuses();
418
- const decoder = getAudioDecoderStatus();
419
- try {
420
- const runtime = await getLocalVoiceRuntimeClient().request("health", { modelId }, {
421
- timeoutMs: 1e4,
422
- stopOnTimeout: false
423
- });
424
- return c.json({
425
- ok: true,
426
- payload: {
427
- runtime: {
428
- ...runtime,
429
- ready: true
430
- },
431
- decoder,
432
- models
433
- }
434
- });
435
- } catch (error) {
436
- const message = error instanceof Error ? error.message : String(error);
437
- return c.json({
438
- ok: true,
439
- payload: {
440
- runtime: {
441
- ready: false,
442
- error: message
443
- },
444
- decoder,
445
- models
446
- }
447
- });
448
- }
449
- });
450
- authenticated.post("/api/voice/local/models/:modelId/install", strictRateLimitMiddleware, (c) => {
451
- try {
452
- const status = startLocalVoiceModelInstall(c.req.param("modelId"));
453
- return c.json({
454
- ok: true,
455
- payload: { model: status }
456
- }, 202);
457
- } catch (error) {
458
- const message = error instanceof Error ? error.message : String(error);
459
- return c.json({
460
- ok: false,
461
- error: { message }
462
- }, 400);
463
- }
464
- });
465
- authenticated.delete("/api/voice/local/models/:modelId", strictRateLimitMiddleware, async (c) => {
466
- try {
467
- await removeLocalVoiceModel(c.req.param("modelId"));
468
- return c.json({ ok: true });
469
- } catch (error) {
470
- const message = error instanceof Error ? error.message : String(error);
471
- return c.json({
472
- ok: false,
473
- error: { message }
474
- }, 400);
475
- }
476
- });
477
410
  /**
478
411
  * POST /api/voice/reveal-api-key — return plaintext voice provider apiKey from config file only.
479
412
  * Body: `{ kind: 'stt' | 'tts', provider: string }`
@@ -699,7 +699,7 @@ var GatewayService = class {
699
699
  prepareAgentSession: (input) => prepareAutomationAgentSession(this.sessionIndex.getStore(), this.projects, input),
700
700
  workflowRunService: this.createWorkflowRunService(),
701
701
  browserAutomationService: this.browserAutomations,
702
- executeTaskCommand: ({ taskId, idempotencyKey, command }) => {
702
+ executeTaskCommand: ({ taskId, idempotencyKey, command, triggerEvent }) => {
703
703
  const task = new TaskRepository().get(taskId);
704
704
  if (!task) return {
705
705
  ok: false,
@@ -713,7 +713,8 @@ var GatewayService = class {
713
713
  actor: {
714
714
  kind: "system",
715
715
  id: "automation"
716
- }
716
+ },
717
+ ...triggerEvent ? { triggerContext: { automationTrigger: triggerEvent } } : {}
717
718
  });
718
719
  if (result.ok && result.runId) this.dispatchTaskRuns();
719
720
  if (result.ok === false) return {
@@ -1206,7 +1207,7 @@ var GatewayService = class {
1206
1207
  prepareAgentSession: (input) => prepareAutomationAgentSession(this.sessionIndex.getStore(), this.projects, input),
1207
1208
  workflowRunService: this.createWorkflowRunService(),
1208
1209
  browserAutomationService: this.browserAutomations,
1209
- executeTaskCommand: ({ taskId, idempotencyKey, command }) => {
1210
+ executeTaskCommand: ({ taskId, idempotencyKey, command, triggerEvent }) => {
1210
1211
  const task = new TaskRepository().get(taskId);
1211
1212
  if (!task) return {
1212
1213
  ok: false,
@@ -1220,7 +1221,8 @@ var GatewayService = class {
1220
1221
  actor: {
1221
1222
  kind: "system",
1222
1223
  id: "automation"
1223
- }
1224
+ },
1225
+ ...triggerEvent ? { triggerContext: { automationTrigger: triggerEvent } } : {}
1224
1226
  });
1225
1227
  if (result.ok && result.runId) this.dispatchTaskRuns();
1226
1228
  if (result.ok === false) return {
@@ -228,7 +228,7 @@ export interface MediaUnderstandingProvider {
228
228
  * Defaults to true.
229
229
  */
230
230
  requiresApiKey?: boolean;
231
- /** Optional runtime readiness check for bundled providers such as local STT. */
231
+ /** Optional runtime readiness check for providers whose backing service may be unavailable. */
232
232
  isConfigured?: (options?: {
233
233
  model?: string;
234
234
  }) => boolean;
@@ -5,6 +5,7 @@ export interface MemoryMaintenanceMetrics {
5
5
  needsReview: number;
6
6
  activated: number;
7
7
  expiredPriorities: number;
8
+ expiredObservations: number;
8
9
  archived: number;
9
10
  repairedIndexes: number;
10
11
  }
@@ -12,6 +12,7 @@ function emptyMetrics() {
12
12
  needsReview: 0,
13
13
  activated: 0,
14
14
  expiredPriorities: 0,
15
+ expiredObservations: 0,
15
16
  archived: 0,
16
17
  repairedIndexes: 0
17
18
  };
@@ -33,6 +34,17 @@ function addDecision(db, runId, objectType, objectId, action, reason, before, af
33
34
  decision_id, run_id, object_type, object_id, action, reason, before_json, after_json, created_at
34
35
  ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(randomUUID(), runId, objectType, objectId, action, reason, before === void 0 ? null : JSON.stringify(before), after === void 0 ? null : JSON.stringify(after), now);
35
36
  }
37
+ function purgeExpiredObservations(db, runId, principalId, now, limit, metrics) {
38
+ const rows = db.prepare(`SELECT observation_id, delete_after FROM user_model_observations
39
+ WHERE principal_id = ? AND delete_after IS NOT NULL AND delete_after <= ?
40
+ ORDER BY delete_after, observation_id LIMIT ?`).all(principalId, now, limit);
41
+ metrics.scanned += rows.length;
42
+ for (const row of rows) {
43
+ db.prepare("DELETE FROM user_model_observations WHERE observation_id = ?").run(row.observation_id);
44
+ addDecision(db, runId, "evidence", row.observation_id, "deleted", "observation_retention_expired", row, void 0, now);
45
+ metrics.expiredObservations += 1;
46
+ }
47
+ }
36
48
  function transitionAssertions(db, runId, principalId, now, limit, metrics) {
37
49
  const rows = db.prepare(`SELECT a.assertion_id, a.status FROM user_assertions a
38
50
  JOIN user_assertion_slots s ON s.slot_id = a.slot_id
@@ -211,6 +223,7 @@ function runMemoryMaintenance(input) {
211
223
  transitionAssertions(db, runId, principalId, now, limit, metrics);
212
224
  transitionPriorities(db, runId, principalId, now, limit, metrics);
213
225
  transitionKnowledge(db, runId, principalId, now, limit, metrics);
226
+ purgeExpiredObservations(db, runId, principalId, now, limit, metrics);
214
227
  if (input.jobType === "daily_reconciliation" || input.jobType === "manual_repair") {
215
228
  reconcileEvidence(db, runId, principalId, now, limit, evidenceThreshold, metrics);
216
229
  activateKnowledge(db, runId, principalId, now, limit, metrics);
@@ -0,0 +1,2 @@
1
+ import type { Migration } from './types.js';
2
+ export declare const retiredLocalSttMigration: Migration;
@@ -0,0 +1,52 @@
1
+ import { isGatewayConfigLockedByAnotherProcessSync } from "../gateway/lock.js";
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ //#region src/migrations/retired-local-stt.ts
4
+ const id = "retire-builtin-local-stt";
5
+ function migratedConfig(ctx) {
6
+ if (!existsSync(ctx.configPath)) return null;
7
+ const config = JSON.parse(readFileSync(ctx.configPath, "utf8"));
8
+ const tools = config.tools;
9
+ if (!tools || typeof tools !== "object" || Array.isArray(tools)) return null;
10
+ const media = tools.media;
11
+ if (!media || typeof media !== "object" || Array.isArray(media)) return null;
12
+ const audio = media.audio;
13
+ if (!audio || typeof audio !== "object" || Array.isArray(audio)) return null;
14
+ const stt = audio;
15
+ if (stt.provider !== "xopc-local" && stt.provider !== "local") return null;
16
+ stt.enabled = false;
17
+ stt.provider = "openai";
18
+ stt.fallback = {
19
+ enabled: false,
20
+ order: []
21
+ };
22
+ return config;
23
+ }
24
+ function item(status) {
25
+ return {
26
+ id,
27
+ title: "Retire built-in local speech recognition",
28
+ kind: "config",
29
+ safety: "auto",
30
+ status,
31
+ message: "Disable the removed xopc-local STT provider. Select an installed STT extension or another provider before enabling voice input again."
32
+ };
33
+ }
34
+ const retiredLocalSttMigration = {
35
+ id,
36
+ kind: "config",
37
+ safety: "auto",
38
+ detect: (ctx) => migratedConfig(ctx) ? item("planned") : null,
39
+ apply: (ctx) => {
40
+ if (isGatewayConfigLockedByAnotherProcessSync(ctx.configPath)) return {
41
+ ...item("skipped"),
42
+ message: "Deferred local STT retirement until the running gateway restarts."
43
+ };
44
+ const config = migratedConfig(ctx);
45
+ return config ? {
46
+ ...item("applied"),
47
+ details: { config }
48
+ } : item("not_needed");
49
+ }
50
+ };
51
+ //#endregion
52
+ export { retiredLocalSttMigration };
@@ -3,6 +3,7 @@ import { init_logger } from "../utils/logger.js";
3
3
  import { ConfigSchema, init_schema } from "../config/schema.js";
4
4
  import { listRegisteredMigrations } from "./registry.js";
5
5
  import { memoryConfigMigration } from "./memory-config.js";
6
+ import { retiredLocalSttMigration } from "./retired-local-stt.js";
6
7
  import { dirname, join } from "node:path";
7
8
  import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from "node:fs";
8
9
  //#region src/migrations/runner.ts
@@ -11,7 +12,7 @@ init_logger();
11
12
  const log = createLogger("Migrations");
12
13
  const MIGRATION_LEDGER_FILENAME = "migrations.json";
13
14
  const CONFIG_BACKUP_COUNT = 10;
14
- const CORE_MIGRATIONS = [memoryConfigMigration];
15
+ const CORE_MIGRATIONS = [memoryConfigMigration, retiredLocalSttMigration];
15
16
  function listAllMigrations() {
16
17
  return [...CORE_MIGRATIONS, ...listRegisteredMigrations().map((entry) => entry.migration)];
17
18
  }
@@ -90,7 +90,7 @@ function projectTurnOutcome(params) {
90
90
  }) : [];
91
91
  for (const item of explicit) deliverables.set(item.artifactId, item);
92
92
  const delivery = parseProductDeliveryEnvelope(details.delivery);
93
- if (delivery) for (const reference of [delivery.primary, ...delivery.related ?? []]) {
93
+ if (delivery && delivery.operation !== "opened") for (const reference of [delivery.primary, ...delivery.related ?? []]) {
94
94
  if (!reference) continue;
95
95
  const item = fileDeliverable(reference, delivery.operation === "failed");
96
96
  if (item) deliverables.set(item.artifactId, item);
@@ -142,6 +142,7 @@ function configureSqliteConnectionPragmas(db, options = {}) {
142
142
  };
143
143
  }
144
144
  function ensureDatabasePermissions(pathname) {
145
+ if (pathname === ":memory:") return;
145
146
  const dir = pathname.slice(0, Math.max(pathname.lastIndexOf("/"), pathname.lastIndexOf("\\")));
146
147
  if (dir) {
147
148
  fs.mkdirSync(dir, { recursive: true });