@xopcai/xopc 0.0.144 → 0.0.145

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 (353) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/feishu/src/workflow-progress.js +1 -1
  3. package/dist/extensions/telegram/src/adapters/streaming-adapter.js +1 -1
  4. package/dist/extensions/telegram/src/inbound-processor.js +1 -1
  5. package/dist/extensions/telegram/src/plugin.js +1 -1
  6. package/dist/extensions/telegram/src/routing-integration.js +2 -2
  7. package/dist/extensions/telegram/src/workflow-progress.js +1 -1
  8. package/dist/extensions/telegram/xopc.extension.json +1 -1
  9. package/dist/extensions/weixin/src/api/api.js +1 -1
  10. package/dist/extensions/weixin/src/plugin.js +1 -1
  11. package/dist/extensions/weixin/src/workflow-progress.js +1 -1
  12. package/dist/gateway/static/root/assets/Combination-DolwnuKi.js +41 -0
  13. package/dist/gateway/static/root/assets/{activity-center-store-jITiX2vJ.js → activity-center-store-3l9ahUqb.js} +1 -1
  14. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-EAVnrCAs.js → agent-avatar-dicebear-BEUxdhZx.js} +1 -1
  15. package/dist/gateway/static/root/assets/agents-1bpT0xRO.js +2 -0
  16. package/dist/gateway/static/root/assets/app-management-settings-panel-CRHSZJWi.js +1 -0
  17. package/dist/gateway/static/root/assets/{appearance-settings-DSkm9bp_.js → appearance-settings-BunADYJb.js} +1 -1
  18. package/dist/gateway/static/root/assets/apps-page-Cc4JgVUQ.js +1 -0
  19. package/dist/gateway/static/root/assets/{archive-plugin-C99N0vV6.js → archive-plugin-B6vTkH2A.js} +1 -1
  20. package/dist/gateway/static/root/assets/{attachment-load-CHTDqME5.js → attachment-load-BjZXzaNv.js} +1 -1
  21. package/dist/gateway/static/root/assets/{automation-suggestion-card-CBt6U3-S.js → automation-suggestion-card-ZDA-Stg1.js} +1 -1
  22. package/dist/gateway/static/root/assets/automations-page-mb0fdVpq.js +6 -0
  23. package/dist/gateway/static/root/assets/{binary-plugins-BRtxOLlM.js → binary-plugins-DYZfLvPz.js} +1 -1
  24. package/dist/gateway/static/root/assets/{block-editor-CUlXfgXd.js → block-editor-C3MUlYC9.js} +46 -46
  25. package/dist/gateway/static/root/assets/browser-settings-page-Bb0xhaMN.js +8 -0
  26. package/dist/gateway/static/root/assets/capability-presets-api-BV76yN9a.js +1 -0
  27. package/dist/gateway/static/root/assets/capability-presets-settings-panel-CUcGKZqC.js +2 -0
  28. package/dist/gateway/static/root/assets/channel-recipient-api-fTlTnWB4.js +1 -0
  29. package/dist/gateway/static/root/assets/channels-settings-BlSDMGdy.js +1 -0
  30. package/dist/gateway/static/root/assets/channels-status-swr-CJauF1CW.js +1 -0
  31. package/dist/gateway/static/root/assets/{code-editor--tMO38Tr.js → code-editor-D4_k-6QN.js} +1 -1
  32. package/dist/gateway/static/root/assets/connector-logo-BVFNT2zW.js +1 -0
  33. package/dist/gateway/static/root/assets/connectors-page-CMgAFGvb.js +2 -0
  34. package/dist/gateway/static/root/assets/copy-to-clipboard-HOJ79TWv.js +1 -0
  35. package/dist/gateway/static/root/assets/{desktop-pet-C-Drhqyk.js → desktop-pet-_jUmoXd3.js} +1 -1
  36. package/dist/gateway/static/root/assets/{desktop-pet-settings-CRGiolqF.js → desktop-pet-settings-DwGOy4AQ.js} +1 -1
  37. package/dist/gateway/static/root/assets/{directory-picker-path-field-Dw1L3M84.js → directory-picker-path-field-akvF0F-u.js} +1 -1
  38. package/dist/gateway/static/root/assets/{dist-SwiI0Xu3.js → dist-C99RGfAH.js} +1 -1
  39. package/dist/gateway/static/root/assets/dreaming-settings-BLetQiYY.js +3 -0
  40. package/dist/gateway/static/root/assets/{extension-debug-page-Dcl8LJG_.js → extension-debug-page-Cof2ncxE.js} +1 -1
  41. package/dist/gateway/static/root/assets/{extension-page-i_BXmO_x.js → extension-page-CwWktRNz.js} +1 -1
  42. package/dist/gateway/static/root/assets/extension-settings-page-CuggWOIl.js +1 -0
  43. package/dist/gateway/static/root/assets/gateway-config-api-B7sxIbza.js +1 -0
  44. package/dist/gateway/static/root/assets/gateway-settings-DIv0eKMf.js +1 -0
  45. package/dist/gateway/static/root/assets/gateway-startup-retry-DtoLihQE.js +1 -0
  46. package/dist/gateway/static/root/assets/goal-create-dialog-C4Kw0mfS.js +1 -0
  47. package/dist/gateway/static/root/assets/goal-detail-page-BMmzYpZL.js +4 -0
  48. package/dist/gateway/static/root/assets/goals-config-api-B0jm5JaA.js +1 -0
  49. package/dist/gateway/static/root/assets/goals-page-CGeT77PC.js +2 -0
  50. package/dist/gateway/static/root/assets/goals-settings-N5_iL7es.js +1 -0
  51. package/dist/gateway/static/root/assets/heartbeat-settings-XzH3lbRR.js +1 -0
  52. package/dist/gateway/static/root/assets/{html-workspace-editor-COqmtESs.js → html-workspace-editor-C3DKAkMc.js} +1 -1
  53. package/dist/gateway/static/root/assets/index-CSLF84-Q.css +1 -0
  54. package/dist/gateway/static/root/assets/index-I-ZCenVw.js +259 -0
  55. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-x_v0nrIi.js +1 -0
  56. package/dist/gateway/static/root/assets/locale-store-CiM-D9jA.js +1 -0
  57. package/dist/gateway/static/root/assets/logs-page-BSh1t8cD.js +7 -0
  58. package/dist/gateway/static/root/assets/markdown-editor-BvUebh3C.js +2 -0
  59. package/dist/gateway/static/root/assets/{markdown-split-BTRFTK0w.js → markdown-split-5rJx5flj.js} +1 -1
  60. package/dist/gateway/static/root/assets/{media-plugins-BABfIZPU.js → media-plugins-DYXccwAd.js} +1 -1
  61. package/dist/gateway/static/root/assets/messages-Cb1VMeqP.js +5 -0
  62. package/dist/gateway/static/root/assets/models-hub-panel-BNpTenAI.js +2 -0
  63. package/dist/gateway/static/root/assets/{notes-page-88QBHW9a.js → notes-page-BgLyndCO.js} +1 -1
  64. package/dist/gateway/static/root/assets/notes-workbench-teklkhcE.js +4 -0
  65. package/dist/gateway/static/root/assets/{page-tabs-je95DZOf.js → page-tabs-6Al9_sGz.js} +1 -1
  66. package/dist/gateway/static/root/assets/{preview-open-alternatives-BJbwi7Rc.js → preview-open-alternatives-Cm3G72Hv.js} +1 -1
  67. package/dist/gateway/static/root/assets/project-detail-page-CCB_dKoh.js +1 -0
  68. package/dist/gateway/static/root/assets/projects-page-VOAFAHYj.js +1 -0
  69. package/dist/gateway/static/root/assets/remote-access-hub-USYu64Ru.js +1 -0
  70. package/dist/gateway/static/root/assets/{save-bar-controls-qWMQ9mod.js → save-bar-controls-BYtfzu_F.js} +1 -1
  71. package/dist/gateway/static/root/assets/{schedule-field-kxd270Gs.js → schedule-field-CvIRc6yK.js} +1 -1
  72. package/dist/gateway/static/root/assets/{schema-form-DLnD-MuD.js → schema-form-CQuKx0n7.js} +1 -1
  73. package/dist/gateway/static/root/assets/sessions-page-oGC8O5h_.js +1 -0
  74. package/dist/gateway/static/root/assets/settings-advanced-gate-D4rP66R1.js +1 -0
  75. package/dist/gateway/static/root/assets/{settings-collapsible-section-DQprvu5J.js → settings-collapsible-section-CF3HHM-t.js} +1 -1
  76. package/dist/gateway/static/root/assets/{settings-form-section-Cqq7Y98y.js → settings-form-section-CwWjoRN6.js} +1 -1
  77. package/dist/gateway/static/root/assets/{settings-loading-skeleton-b6rXULL5.js → settings-loading-skeleton-aUFmJa13.js} +1 -1
  78. package/dist/gateway/static/root/assets/{settings-page-BtBVz3cX.js → settings-page-B2UUU9TF.js} +1 -1
  79. package/dist/gateway/static/root/assets/{settings-page-layout-BNJbtklV.js → settings-page-layout-DqpbTWqI.js} +1 -1
  80. package/dist/gateway/static/root/assets/setup-status-panel-Ck9keROI.js +1 -0
  81. package/dist/gateway/static/root/assets/share-preview-page-BOhlPsS1.js +2 -0
  82. package/dist/gateway/static/root/assets/shares-settings-BYLsCuqj.js +1 -0
  83. package/dist/gateway/static/root/assets/skill-reload-api-BNHUyVML.js +1 -0
  84. package/dist/gateway/static/root/assets/skills-page-CpXbQH4n.js +2 -0
  85. package/dist/gateway/static/root/assets/{system-settings-panel-Cq9J7i7v.js → system-settings-panel-CWxSvuwD.js} +1 -1
  86. package/dist/gateway/static/root/assets/{theme-store-Bt6vAkSB.js → theme-store-C9Dxcppm.js} +1 -1
  87. package/dist/gateway/static/root/assets/{typed-models-lib-CdSwi1gT.js → typed-models-lib-qROAvqTw.js} +1 -1
  88. package/dist/gateway/static/root/assets/use-channel-catalog-DE9cpn4G.js +1 -0
  89. package/dist/gateway/static/root/assets/user-context-page-DbNEK4Yp.js +1 -0
  90. package/dist/gateway/static/root/assets/user-profile-fields-editor-CWxc0ghP.js +1 -0
  91. package/dist/gateway/static/root/assets/{user-profile-settings-panel-B8hlamVB.js → user-profile-settings-panel-DW-Up6vt.js} +1 -1
  92. package/dist/gateway/static/root/assets/{utils-Dx01V8qF.js → utils-D53uRXVr.js} +1 -1
  93. package/dist/gateway/static/root/assets/{vendor-codemirror-C1WKjCk5.js → vendor-codemirror--gTq3YAI.js} +17 -17
  94. package/dist/gateway/static/root/assets/voice-api-key-field-Cs7MOrg0.js +1 -0
  95. package/dist/gateway/static/root/assets/work-item-detail-page-D1ziG1Pp.js +1 -0
  96. package/dist/gateway/static/root/assets/workflow-run-setup-panel-D_x9ELJp.js +3 -0
  97. package/dist/gateway/static/root/assets/workflows-page-DHGV_n6i.js +11 -0
  98. package/dist/gateway/static/root/index.html +10 -10
  99. package/dist/package.js +1 -1
  100. package/dist/src/activity/emitter.js +1 -1
  101. package/dist/src/agent/agent-manager.js +4 -4
  102. package/dist/src/agent/code-intelligence/binary.js +1 -1
  103. package/dist/src/agent/context/project-context.js +2 -2
  104. package/dist/src/agent/context/workspace-seed.js +2 -2
  105. package/dist/src/agent/embedded/run-for-session.js +1 -1
  106. package/dist/src/agent/embedded/session-runner.js +3 -3
  107. package/dist/src/agent/embedded/session-runner.js.map +1 -1
  108. package/dist/src/agent/embedded/xopc-auth-storage.d.ts +3 -1
  109. package/dist/src/agent/embedded/xopc-auth-storage.js +11 -1
  110. package/dist/src/agent/embedded/xopc-auth-storage.js.map +1 -1
  111. package/dist/src/agent/goals/post-turn.js +2 -2
  112. package/dist/src/agent/ipc/bus.js +1 -1
  113. package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
  114. package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
  115. package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
  116. package/dist/src/agent/mcp/mcp-transport.js +1 -1
  117. package/dist/src/agent/memory/dreaming/config.js +1 -1
  118. package/dist/src/agent/memory/plugin-discovery.js +1 -1
  119. package/dist/src/agent/models/manager.js +1 -1
  120. package/dist/src/agent/orchestration/agent-orchestrator.js +1 -1
  121. package/dist/src/agent/service.js +3 -3
  122. package/dist/src/agent/session/session-inspector.js +2 -2
  123. package/dist/src/agent/skills/hub-pull.js +1 -1
  124. package/dist/src/agent/tools/composio-tool.js +1 -1
  125. package/dist/src/agent/tools/goal-tool.js +2 -2
  126. package/dist/src/agent/tools/workflow-tool.js +1 -1
  127. package/dist/src/agent/tools/xopc-use-tool.js +1 -1
  128. package/dist/src/agent/workspace-runtime/registry.js +2 -2
  129. package/dist/src/agent-runtime/index.js +1 -1
  130. package/dist/src/agent-runtime/runtime-profile.js +1 -1
  131. package/dist/src/automations/api/routes.js +1 -1
  132. package/dist/src/automations/service/action-executor.js +2 -2
  133. package/dist/src/browser/cdp-local-launcher.js +1 -1
  134. package/dist/src/browser/providers/browser-ext-install.js +3 -3
  135. package/dist/src/browser/providers/cloakbrowser.js +2 -2
  136. package/dist/src/browser/providers/playwright-doctor.js +1 -1
  137. package/dist/src/browser/stealth.js +1 -1
  138. package/dist/src/capabilities/store-connector.js +1 -1
  139. package/dist/src/chat-commands/agent-edit.js +1 -1
  140. package/dist/src/chat-commands/builtins/config.js +1 -1
  141. package/dist/src/chat-commands/builtins/goal.js +2 -2
  142. package/dist/src/chat-commands/context.js +1 -1
  143. package/dist/src/cli/commands/agent.js +1 -1
  144. package/dist/src/cli/commands/doctor/checks/database-schema.js +2 -2
  145. package/dist/src/cli/commands/doctor/checks/session-integrity.js +1 -1
  146. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  147. package/dist/src/cli/commands/extension-pack.js +1 -1
  148. package/dist/src/cli/commands/goal.js +2 -2
  149. package/dist/src/cli/commands/init.js +1 -1
  150. package/dist/src/cli/commands/project.js +3 -3
  151. package/dist/src/config/agent-profile.js +1 -1
  152. package/dist/src/config/gateway-bind.js +1 -1
  153. package/dist/src/config/index.js +3 -3
  154. package/dist/src/config/loader.js +1 -1
  155. package/dist/src/config/models-json.js +1 -1
  156. package/dist/src/config/schema.d.ts +60 -5
  157. package/dist/src/config/schema.js +30 -9
  158. package/dist/src/config/schema.js.map +1 -1
  159. package/dist/src/connectors/composio-catalog.js +11 -2
  160. package/dist/src/connectors/composio-catalog.js.map +1 -1
  161. package/dist/src/connectors/composio-sessions.js +1 -1
  162. package/dist/src/connectors/composio.js +1 -1
  163. package/dist/src/connectors/connector-memory-sync.js +135 -26
  164. package/dist/src/connectors/connector-memory-sync.js.map +1 -1
  165. package/dist/src/daemon/launchd.js +1 -1
  166. package/dist/src/daemon/systemd.js +1 -1
  167. package/dist/src/extensions/discover-extensions.js +1 -1
  168. package/dist/src/extensions/loader.js +2 -2
  169. package/dist/src/gateway/agents-admin.js +1 -1
  170. package/dist/src/gateway/heartbeat/service.js +1 -1
  171. package/dist/src/gateway/hono/app.js +1 -1
  172. package/dist/src/gateway/hono/app.js.map +1 -1
  173. package/dist/src/gateway/hono/lib/config-payload.d.ts +11 -0
  174. package/dist/src/gateway/hono/lib/config-payload.js +1 -0
  175. package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
  176. package/dist/src/gateway/hono/lib/static-ui.js +1 -1
  177. package/dist/src/gateway/hono/routes/config-patch/misc.js +6 -1
  178. package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -1
  179. package/dist/src/gateway/hono/routes/home.js +2 -2
  180. package/dist/src/gateway/hono/routes/memory.js +13 -3
  181. package/dist/src/gateway/hono/routes/memory.js.map +1 -1
  182. package/dist/src/gateway/hono/routes/projects.js +5 -5
  183. package/dist/src/gateway/hono/routes/status.js +3 -0
  184. package/dist/src/gateway/hono/routes/status.js.map +1 -1
  185. package/dist/src/gateway/hono/routes/voice.d.ts +5 -5
  186. package/dist/src/gateway/hono/routes/voice.js +288 -62
  187. package/dist/src/gateway/hono/routes/voice.js.map +1 -1
  188. package/dist/src/gateway/hono/routes/workflows.js +1 -1
  189. package/dist/src/gateway/hono/routes/you.js +11 -7
  190. package/dist/src/gateway/hono/routes/you.js.map +1 -1
  191. package/dist/src/gateway/lock.js +1 -1
  192. package/dist/src/gateway/ports.js +1 -1
  193. package/dist/src/gateway/service.d.ts +8 -0
  194. package/dist/src/gateway/service.js +47 -17
  195. package/dist/src/gateway/service.js.map +1 -1
  196. package/dist/src/goals/goal-workflow-judge.js +1 -1
  197. package/dist/src/heartbeat/index.js +1 -1
  198. package/dist/src/infra/ports.js +1 -1
  199. package/dist/src/infra/ssh-tunnel.js +1 -1
  200. package/dist/src/infra/update-check.js +1 -1
  201. package/dist/src/knowledge/connected-knowledge-pipeline.d.ts +21 -0
  202. package/dist/src/knowledge/connected-knowledge-pipeline.js +267 -0
  203. package/dist/src/knowledge/connected-knowledge-pipeline.js.map +1 -0
  204. package/dist/src/knowledge/coordinator.d.ts +10 -0
  205. package/dist/src/knowledge/coordinator.js +52 -0
  206. package/dist/src/knowledge/coordinator.js.map +1 -0
  207. package/dist/src/knowledge/index.d.ts +2 -0
  208. package/dist/src/knowledge/index.js +3 -1
  209. package/dist/src/knowledge/ingestion-service.d.ts +7 -1
  210. package/dist/src/knowledge/ingestion-service.js +28 -0
  211. package/dist/src/knowledge/ingestion-service.js.map +1 -1
  212. package/dist/src/knowledge/types.d.ts +18 -0
  213. package/dist/src/media-understanding/audio-transcription-runner.js +5 -3
  214. package/dist/src/media-understanding/audio-transcription-runner.js.map +1 -1
  215. package/dist/src/media-understanding/runner.js +8 -3
  216. package/dist/src/media-understanding/runner.js.map +1 -1
  217. package/dist/src/media-understanding/types.d.ts +7 -0
  218. package/dist/src/migrations/runner.js +1 -1
  219. package/dist/src/notes/service.js +3 -3
  220. package/dist/src/notes/store.js +1 -1
  221. package/dist/src/projects/project-service.js +1 -1
  222. package/dist/src/projects/workspace.js +1 -1
  223. package/dist/src/routing/agent-session-key.js +1 -1
  224. package/dist/src/routing/resolve-route.js +1 -1
  225. package/dist/src/routing/resolve-tui-session-key.js +1 -1
  226. package/dist/src/session/init-session-turn.js +1 -1
  227. package/dist/src/session/resolve-session.js +1 -1
  228. package/dist/src/session/session-title.js +2 -2
  229. package/dist/src/session/store.js +1 -1
  230. package/dist/src/storage/sqlite/connection.js +1 -1
  231. package/dist/src/storage/sqlite/index.d.ts +1 -1
  232. package/dist/src/storage/sqlite/index.js +2 -2
  233. package/dist/src/storage/sqlite/knowledge-repository.d.ts +26 -1
  234. package/dist/src/storage/sqlite/knowledge-repository.js +120 -6
  235. package/dist/src/storage/sqlite/knowledge-repository.js.map +1 -1
  236. package/dist/src/storage/sqlite/migrations/037_connected_knowledge_pipeline.sql +47 -0
  237. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  238. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  239. package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
  240. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  241. package/dist/src/storage/sqlite/row-mappers.js +1 -1
  242. package/dist/src/storage/sqlite/schema.js +1 -1
  243. package/dist/src/tui/backends/embedded-backend.js +4 -4
  244. package/dist/src/tui/clipboard-image.js +1 -1
  245. package/dist/src/tui/tui-command-formatters.js +2 -2
  246. package/dist/src/tui/tui-commands.js +3 -3
  247. package/dist/src/tui/tui.js +1 -1
  248. package/dist/src/user-context/projection.d.ts +13 -4
  249. package/dist/src/user-context/projection.js +19 -7
  250. package/dist/src/user-context/projection.js.map +1 -1
  251. package/dist/src/utils/index.js +1 -1
  252. package/dist/src/utils/logger/index.js +1 -1
  253. package/dist/src/utils/logger.js +1 -1
  254. package/dist/src/voice/language-profile.d.ts +20 -0
  255. package/dist/src/voice/language-profile.js +156 -0
  256. package/dist/src/voice/language-profile.js.map +1 -0
  257. package/dist/src/voice/local/model-files.d.ts +14 -0
  258. package/dist/src/voice/local/model-files.js +94 -0
  259. package/dist/src/voice/local/model-files.js.map +1 -0
  260. package/dist/src/voice/local/model-manager.d.ts +18 -0
  261. package/dist/src/voice/local/model-manager.js +135 -0
  262. package/dist/src/voice/local/model-manager.js.map +1 -0
  263. package/dist/src/voice/local/models.d.ts +28 -0
  264. package/dist/src/voice/local/models.js +101 -0
  265. package/dist/src/voice/local/models.js.map +1 -0
  266. package/dist/src/voice/local/runtime-client.d.ts +26 -0
  267. package/dist/src/voice/local/runtime-client.js +166 -0
  268. package/dist/src/voice/local/runtime-client.js.map +1 -0
  269. package/dist/src/voice/local/runtime-dispatcher.d.ts +9 -0
  270. package/dist/src/voice/local/runtime-dispatcher.js +22 -0
  271. package/dist/src/voice/local/runtime-dispatcher.js.map +1 -0
  272. package/dist/src/voice/local/runtime-worker.d.ts +1 -0
  273. package/dist/src/voice/local/runtime-worker.js +249 -0
  274. package/dist/src/voice/local/runtime-worker.js.map +1 -0
  275. package/dist/src/voice/local/wav.d.ts +6 -0
  276. package/dist/src/voice/local/wav.js +69 -0
  277. package/dist/src/voice/local/wav.js.map +1 -0
  278. package/dist/src/voice/metadata/builtin.js +46 -0
  279. package/dist/src/voice/metadata/builtin.js.map +1 -1
  280. package/dist/src/voice/stt/factory.js +8 -2
  281. package/dist/src/voice/stt/factory.js.map +1 -1
  282. package/dist/src/voice/stt/providers/alibaba-transcription.js +14 -8
  283. package/dist/src/voice/stt/providers/alibaba-transcription.js.map +1 -1
  284. package/dist/src/voice/stt/providers/index.d.ts +1 -0
  285. package/dist/src/voice/stt/providers/index.js +2 -1
  286. package/dist/src/voice/stt/providers/local-transcription.d.ts +2 -0
  287. package/dist/src/voice/stt/providers/local-transcription.js +51 -0
  288. package/dist/src/voice/stt/providers/local-transcription.js.map +1 -0
  289. package/dist/src/voice/stt/providers/openai-transcription.js +5 -3
  290. package/dist/src/voice/stt/providers/openai-transcription.js.map +1 -1
  291. package/dist/src/voice/stt/transcribe-core.js +5 -4
  292. package/dist/src/voice/stt/transcribe-core.js.map +1 -1
  293. package/dist/src/voice/stt/types.d.ts +4 -0
  294. package/dist/src/voice/stt/types.js +5 -4
  295. package/dist/src/voice/stt/types.js.map +1 -1
  296. package/dist/src/voice/tts/providers/edge-speech.js +2 -2
  297. package/dist/src/voice/tts/providers/edge-speech.js.map +1 -1
  298. package/dist/src/voice/tts/types.js +3 -3
  299. package/dist/src/voice/tts/types.js.map +1 -1
  300. package/dist/src/work-items/work-item-service.js +1 -1
  301. package/dist/src/workflows/draft/workflow-draft-service.js +1 -1
  302. package/dist/src/workflows/service/workflow-session-bridge.js +3 -3
  303. package/package.json +3 -1
  304. package/dist/gateway/static/root/assets/Combination-HAlzriaz.js +0 -41
  305. package/dist/gateway/static/root/assets/agents-5rTuJOtT.js +0 -2
  306. package/dist/gateway/static/root/assets/app-management-settings-panel-Bu568NpC.js +0 -1
  307. package/dist/gateway/static/root/assets/apps-page-DWetalKp.js +0 -1
  308. package/dist/gateway/static/root/assets/automations-page-ICUfxeOz.js +0 -4
  309. package/dist/gateway/static/root/assets/browser-settings-page-D7Bj4MKi.js +0 -8
  310. package/dist/gateway/static/root/assets/capability-presets-api-Bg1ntFSD.js +0 -1
  311. package/dist/gateway/static/root/assets/capability-presets-settings-panel-C-8I-Ktn.js +0 -2
  312. package/dist/gateway/static/root/assets/channel-recipient-api-DuulnhIj.js +0 -1
  313. package/dist/gateway/static/root/assets/channels-settings-Dm5EqQyK.js +0 -1
  314. package/dist/gateway/static/root/assets/channels-status-swr-B5lVrUsN.js +0 -1
  315. package/dist/gateway/static/root/assets/connectors-page-BOzjh-OK.js +0 -2
  316. package/dist/gateway/static/root/assets/dreaming-settings-CF21cbjo.js +0 -3
  317. package/dist/gateway/static/root/assets/extension-settings-page-CWIi7xsn.js +0 -1
  318. package/dist/gateway/static/root/assets/fetch-8QNN25Sh.js +0 -1
  319. package/dist/gateway/static/root/assets/gateway-config-api-2sLP2kkA.js +0 -1
  320. package/dist/gateway/static/root/assets/gateway-settings-DMHiZc-2.js +0 -1
  321. package/dist/gateway/static/root/assets/gateway-startup-retry-5YBnS9Fj.js +0 -1
  322. package/dist/gateway/static/root/assets/goal-create-dialog-CAODVDiA.js +0 -1
  323. package/dist/gateway/static/root/assets/goal-detail-page-_d4DjmeX.js +0 -4
  324. package/dist/gateway/static/root/assets/goals-config-api-B4qeLKQS.js +0 -1
  325. package/dist/gateway/static/root/assets/goals-page-lgsop664.js +0 -2
  326. package/dist/gateway/static/root/assets/goals-settings-Dx_1ZNgb.js +0 -1
  327. package/dist/gateway/static/root/assets/heartbeat-settings-DeTseEk_.js +0 -1
  328. package/dist/gateway/static/root/assets/index-CphxClbs.css +0 -1
  329. package/dist/gateway/static/root/assets/index-VWvztcst.js +0 -257
  330. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-BpwpMmlk.js +0 -1
  331. package/dist/gateway/static/root/assets/locale-store-Ba72bFmP.js +0 -1
  332. package/dist/gateway/static/root/assets/logs-page-9_hbTg3j.js +0 -7
  333. package/dist/gateway/static/root/assets/markdown-editor-jD1LPiP-.js +0 -2
  334. package/dist/gateway/static/root/assets/messages-CzKxM6I4.js +0 -5
  335. package/dist/gateway/static/root/assets/models-hub-panel-B1CUvZxh.js +0 -2
  336. package/dist/gateway/static/root/assets/notes-workbench-CerZOeLW.js +0 -2
  337. package/dist/gateway/static/root/assets/project-detail-page-BmrApldl.js +0 -1
  338. package/dist/gateway/static/root/assets/projects-page-tTn-k76N.js +0 -1
  339. package/dist/gateway/static/root/assets/remote-access-hub-DeA2-pOi.js +0 -1
  340. package/dist/gateway/static/root/assets/sessions-page-D4kvvcL1.js +0 -1
  341. package/dist/gateway/static/root/assets/settings-advanced-gate-CI1OG4gq.js +0 -1
  342. package/dist/gateway/static/root/assets/setup-status-panel-cmclUJzS.js +0 -1
  343. package/dist/gateway/static/root/assets/share-preview-page--zO-A1W1.js +0 -2
  344. package/dist/gateway/static/root/assets/shares-settings-DNJvqA67.js +0 -1
  345. package/dist/gateway/static/root/assets/skill-reload-api-DWr_0Xgn.js +0 -1
  346. package/dist/gateway/static/root/assets/skills-page-DEGsTbJx.js +0 -2
  347. package/dist/gateway/static/root/assets/use-channel-catalog-COXIfXcl.js +0 -1
  348. package/dist/gateway/static/root/assets/user-context-page-C-V73ZaJ.js +0 -1
  349. package/dist/gateway/static/root/assets/user-profile-fields-editor-B1cxoGkh.js +0 -1
  350. package/dist/gateway/static/root/assets/voice-api-key-field-DGpIUelZ.js +0 -1
  351. package/dist/gateway/static/root/assets/work-item-detail-page-fzWTxF26.js +0 -1
  352. package/dist/gateway/static/root/assets/workflow-run-setup-panel-Dt_x8LGg.js +0 -3
  353. package/dist/gateway/static/root/assets/workflows-page-Bg02zEUh.js +0 -11
@@ -1 +1 @@
1
- {"version":3,"file":"you.js","names":[],"sources":["../../../../../src/gateway/hono/routes/you.ts"],"sourcesContent":["import type { Hono } from 'hono';\n\nimport { resolveDefaultAgentId } from '../../../agent/agent-scope.js';\nimport type { MemoryRecord } from '../../../agent/memory/types.js';\nimport { nextMemoryReviewAt, resolveMemoryStability } from '../../../agent/memory/lifecycle.js';\nimport { MemoryPolicySchema } from '../../../agent-manifest/schema.js';\nimport { resolveEffectiveAgentManifestForAgent } from '../../../config/agent-profile.js';\nimport type { Config } from '../../../config/schema.js';\nimport { listConnectorCatalog } from '../../../connectors/catalog.js';\nimport { listConnectorInstances } from '../../../connectors/instances.js';\nimport { uninstallConnector } from '../../../connectors/install.js';\nimport { draftGoalContract, GoalService } from '../../../goals/index.js';\nimport { prepareUpdateAgent, readUserProfileFile, writeUserProfileFile } from '../../agents-admin.js';\nimport {\n deleteMemoryRecord,\n getMemoryRecord,\n getUserProfilePromptState,\n getUserTrustPolicy,\n listMemoryRecords,\n runSqliteWriteTransaction,\n setUserProfilePromptState,\n setUserTrustPolicy,\n upsertMemoryRecord,\n} from '../../../storage/sqlite/index.js';\nimport { isUserTrustLevel, USER_TRUST_LEVELS } from '../../../user-context/trust-policy.js';\nimport {\n buildUserProfileSetup,\n parseUserProfileMarkdown,\n patchUserProfileMarkdown,\n type UserProfileFields,\n} from '../../../user-context/profile.js';\nimport {\n isUserContextRecord,\n projectPersonalContextSources,\n projectUserContextRecord,\n recordsDerivedFromPersonalContextSource,\n} from '../../../user-context/projection.js';\nimport { prepareUserContextImport } from '../../../user-context/import.js';\nimport { buildGoalSourceRecommendations } from '../../../user-context/source-recommendations.js';\nimport type { AuthenticatedRouteDeps } from './deps.js';\n\nconst VISIBLE_STATUSES = new Set<MemoryRecord['status']>(['active', 'candidate', 'needs_review']);\nconst ACTIONABLE_INSIGHT_KINDS = new Set<MemoryRecord['kind']>([\n 'routine',\n 'commitment',\n 'long_term_goal',\n 'derived_insight',\n 'task_lesson',\n]);\nconst INSIGHT_ACCEPTED_TAG = 'insight-action:accepted';\nconst INSIGHT_DISMISSED_TAG = 'insight-action:dismissed';\nconst PLAYBOOK_IDS = ['communication', 'execution', 'routines'] as const;\ntype PlaybookId = typeof PLAYBOOK_IDS[number];\nconst PROFILE_FIELD_LIMITS: Record<keyof UserProfileFields, number> = {\n callName: 80,\n pronouns: 80,\n timezone: 100,\n notes: 5_000,\n};\nconst PROFILE_PROMPT_SNOOZE_MS = 7 * 24 * 60 * 60 * 1_000;\nconst ALL_MEMORY_STATUSES: MemoryRecord['status'][] = [\n 'candidate',\n 'active',\n 'needs_review',\n 'stale',\n 'archived',\n 'rejected',\n];\n\nfunction listAllAgentMemoryRecords(agentId: string, statuses: MemoryRecord['status'][]): MemoryRecord[] {\n return statuses.flatMap((status) => {\n const records: MemoryRecord[] = [];\n let offset = 0;\n while (true) {\n const page = listMemoryRecords({ agentId, status, limit: 500, offset });\n records.push(...page);\n if (page.length < 500) break;\n offset += page.length;\n }\n return records;\n });\n}\n\nasync function readProfileBundle(config: Config) {\n const result = await readUserProfileFile();\n const profileContent = result.ok ? result.data.content : '';\n const profile = parseUserProfileMarkdown(profileContent);\n const promptState = getUserProfilePromptState();\n return {\n profileContent,\n profile,\n profileSetup: buildUserProfileSetup({ profile, promptState, config }),\n };\n}\n\nfunction parseProfilePatch(body: unknown): { patch: Partial<UserProfileFields> } | { error: string } {\n if (!body || typeof body !== 'object' || Array.isArray(body)) return { error: 'Invalid profile patch' };\n const record = body as Record<string, unknown>;\n const patch: Partial<UserProfileFields> = {};\n for (const field of Object.keys(PROFILE_FIELD_LIMITS) as Array<keyof UserProfileFields>) {\n if (!(field in record)) continue;\n if (typeof record[field] !== 'string') return { error: `${field} must be a string` };\n const value = record[field].trim();\n if (value.length > PROFILE_FIELD_LIMITS[field]) {\n return { error: `${field} is too long` };\n }\n patch[field] = value;\n }\n return Object.keys(patch).length > 0 ? { patch } : { error: 'No profile fields provided' };\n}\n\nfunction playbookForRecord(record: MemoryRecord): PlaybookId | undefined {\n if (record.kind === 'preference' || record.kind === 'boundary' || record.kind === 'tool_preference') return 'communication';\n if (record.kind === 'task_lesson' || record.kind === 'derived_insight') return 'execution';\n if (record.kind === 'routine') return 'routines';\n return undefined;\n}\n\nexport function buildPersonalPlaybooks(records: MemoryRecord[]) {\n return PLAYBOOK_IDS.flatMap((id) => {\n const rules = records.filter((record) => playbookForRecord(record) === id);\n if (rules.length === 0) return [];\n return [{\n id,\n enabled: rules.some((record) => record.status === 'active'),\n rules: rules.map((record) => ({\n id: record.id,\n statement: record.content,\n origin: record.explicitness,\n })),\n updatedAt: rules.map((record) => record.updatedAt).sort().at(-1),\n }];\n });\n}\n\nexport function buildInsightSuggestions(records: MemoryRecord[]) {\n return records\n .filter((record) => record.status === 'active')\n .filter((record) => ACTIONABLE_INSIGHT_KINDS.has(record.kind))\n .filter((record) => !record.tags?.includes(INSIGHT_ACCEPTED_TAG) && !record.tags?.includes(INSIGHT_DISMISSED_TAG))\n .filter((record) => {\n const stability = resolveMemoryStability(record);\n return record.explicitness === 'explicit' || (record.evidence?.length ?? 0) >= 2 || stability.band === 'strong';\n })\n .sort((left, right) => right.importance - left.importance || Date.parse(right.updatedAt) - Date.parse(left.updatedAt))\n .slice(0, 5)\n .map((record) => ({\n id: record.id,\n insight: record.content,\n kind: record.kind,\n action: record.kind === 'routine' ? 'make_repeatable' as const : 'start_progress' as const,\n evidenceCount: record.evidence?.length ?? 0,\n confidence: record.confidence,\n sourceName: record.source.provider ?? 'local',\n }));\n}\n\nfunction selectedAgentId(config: Config): string {\n return resolveDefaultAgentId(config);\n}\n\nfunction editableRecord(recordId: string, config: Config): MemoryRecord | null {\n const record = getMemoryRecord(recordId);\n if (\n !record\n || record.scope.agentId !== selectedAgentId(config)\n || !VISIBLE_STATUSES.has(record.status)\n || !isUserContextRecord(record)\n ) return null;\n return record;\n}\n\nfunction preserveRecord(record: MemoryRecord, patch: Partial<Parameters<typeof upsertMemoryRecord>[0]>) {\n return upsertMemoryRecord({\n id: record.id,\n providerId: record.source.provider ?? 'local',\n kind: record.kind,\n agentId: record.scope.agentId,\n workspaceId: record.scope.workspaceId,\n sessionKey: record.scope.sessionKey,\n projectId: record.scope.projectId,\n content: record.content,\n source: record.source,\n confidence: record.confidence,\n tags: record.tags,\n status: record.status,\n sensitivity: record.sensitivity,\n canonicalKey: record.canonicalKey,\n explicitness: record.explicitness,\n durability: record.durability,\n importance: record.importance,\n disclosurePolicy: record.disclosurePolicy,\n evidence: record.evidence,\n reviewAfter: record.reviewAfter,\n expiresAt: record.expiresAt,\n validFrom: record.validFrom,\n validTo: record.validTo,\n supersedesRecordId: record.supersedesRecordId,\n conflictGroupId: record.conflictGroupId,\n ...patch,\n });\n}\n\nexport function registerYouRoutes(authenticated: Hono, deps: AuthenticatedRouteDeps): void {\n authenticated.get('/api/you', async (c) => {\n const config = deps.service.currentConfig as Config;\n const agentId = selectedAgentId(config);\n const profileBundle = await readProfileBundle(config);\n const allUserContextRecords = listAllAgentMemoryRecords(agentId, ALL_MEMORY_STATUSES)\n .filter(isUserContextRecord);\n const records = allUserContextRecords.filter((record) => VISIBLE_STATUSES.has(record.status));\n const pausedPlaybookRecords = listMemoryRecords({ agentId, status: 'archived', limit: 200 })\n .filter(isUserContextRecord)\n .filter((record) => record.tags?.some((tag) => tag.startsWith('playbook:paused:')));\n const manifest = resolveEffectiveAgentManifestForAgent(config, agentId);\n const trustPolicy = getUserTrustPolicy();\n const sourceDefinitions = listConnectorCatalog();\n const sourceInstances = listConnectorInstances(config);\n const sources = projectPersonalContextSources(sourceDefinitions, sourceInstances, allUserContextRecords);\n const activeGoals = new GoalService().list({\n agentId,\n status: ['active', 'paused', 'blocked', 'needs_input'],\n limit: 20,\n });\n return c.json({\n agentId,\n scope: {\n profile: 'global',\n memory: 'agent',\n trust: 'global',\n agentId,\n },\n ...profileBundle,\n understanding: records.map(projectUserContextRecord),\n insights: buildInsightSuggestions(records),\n playbooks: buildPersonalPlaybooks([...records.filter((record) => record.status === 'active'), ...pausedPlaybookRecords]),\n sources,\n sourceRecommendations: buildGoalSourceRecommendations(\n sourceDefinitions.filter((definition) => (\n definition.capabilities.includes('context') || definition.capabilities.includes('memory_source')\n )),\n new Set(sourceInstances.map((instance) => instance.connectorId)),\n activeGoals,\n ),\n controls: {\n mode: manifest.memory.mode,\n sensitiveWritePolicy: manifest.memory.privacy?.sensitiveWritePolicy ?? 'confirm',\n crossAgentSharing: manifest.memory.privacy?.crossAgentSharing ?? 'deny',\n },\n trust: {\n defaultActionLevel: trustPolicy.defaultActionLevel,\n levels: USER_TRUST_LEVELS,\n autoRequiresExplicitOptIn: true,\n },\n });\n });\n\n authenticated.get('/api/you/profile', async (c) => {\n return c.json(await readProfileBundle(deps.service.currentConfig as Config));\n });\n\n authenticated.get('/api/you/export', async (c) => {\n const config = deps.service.currentConfig as Config;\n const agentId = selectedAgentId(config);\n const profileBundle = await readProfileBundle(config);\n const understanding = listAllAgentMemoryRecords(agentId, ALL_MEMORY_STATUSES)\n .filter(isUserContextRecord)\n .map((record) => ({\n statement: record.content,\n kind: record.kind,\n status: record.status,\n sensitivity: record.sensitivity ?? 'normal',\n durability: record.durability,\n canReference: record.disclosurePolicy !== 'silent',\n sourceName: record.source.provider ?? 'local',\n updatedAt: record.updatedAt,\n }));\n return c.json({\n version: 1,\n exportedAt: new Date().toISOString(),\n agentId,\n profile: profileBundle.profile,\n understanding,\n });\n });\n\n authenticated.post('/api/you/import', deps.strictRateLimitMiddleware, async (c) => {\n const body = await c.req.json().catch(() => null);\n if (!body || typeof body !== 'object' || Array.isArray(body) || body.version !== 1 || !Array.isArray(body.understanding)) {\n return c.json({ error: 'Invalid About You export' }, 400);\n }\n if (body.understanding.length > 500) return c.json({ error: 'Import is limited to 500 understandings' }, 400);\n const config = deps.service.currentConfig as Config;\n const agentId = selectedAgentId(config);\n const existingStatements = listAllAgentMemoryRecords(agentId, ALL_MEMORY_STATUSES)\n .filter(isUserContextRecord)\n .map((record) => record.content);\n const { imports, skippedCount } = prepareUserContextImport(body.understanding, existingStatements);\n runSqliteWriteTransaction(() => {\n for (const item of imports) {\n upsertMemoryRecord({\n providerId: 'local',\n kind: item.kind,\n agentId,\n content: item.statement,\n source: { provider: 'local', path: 'import://about-you' },\n confidence: 1,\n tags: ['user-understanding', 'user-import'],\n status: 'candidate',\n sensitivity: item.sensitivity,\n explicitness: 'explicit',\n durability: item.durability,\n importance: 0.7,\n disclosurePolicy: item.canReference ? 'referenceable' : 'silent',\n });\n }\n });\n return c.json({ ok: true, importedCount: imports.length, skippedCount });\n });\n\n authenticated.patch('/api/you/profile', deps.strictRateLimitMiddleware, async (c) => {\n const config = deps.service.currentConfig as Config;\n const parsed = parseProfilePatch(await c.req.json().catch(() => null));\n if ('error' in parsed) return c.json({ error: parsed.error }, 400);\n const current = await readUserProfileFile();\n const content = current.ok ? current.data.content : '';\n const nextContent = patchUserProfileMarkdown(content, parsed.patch);\n const saved = await writeUserProfileFile(nextContent);\n if (saved.ok === false) return c.json({ error: saved.error }, saved.status ?? 500);\n if (parsed.patch.callName !== undefined) {\n setUserProfilePromptState({ state: 'active' });\n }\n deps.service.refreshUserProfileContext();\n return c.json(await readProfileBundle(config));\n });\n\n authenticated.post('/api/you/profile-prompt', deps.strictRateLimitMiddleware, async (c) => {\n const body = await c.req.json().catch(() => ({}));\n const action = typeof body.action === 'string' ? body.action : '';\n if (action !== 'snooze' && action !== 'reset') {\n return c.json({ error: 'Action must be snooze or reset' }, 400);\n }\n const config = deps.service.currentConfig as Config;\n const current = await readProfileBundle(config);\n const suggestionHash = current.profileSetup.callNameSuggestion?.id;\n const promptState = action === 'snooze'\n ? setUserProfilePromptState({\n state: 'snoozed',\n suggestionHash,\n snoozedUntil: new Date(Date.now() + PROFILE_PROMPT_SNOOZE_MS).toISOString(),\n })\n : setUserProfilePromptState({ state: 'active', suggestionHash });\n return c.json({\n profileSetup: buildUserProfileSetup({ profile: current.profile, promptState, config }),\n });\n });\n\n authenticated.patch('/api/you/trust', deps.strictRateLimitMiddleware, async (c) => {\n const body = await c.req.json().catch(() => ({}));\n if (!isUserTrustLevel(body.defaultActionLevel)) {\n return c.json({ error: 'Invalid default action level' }, 400);\n }\n const policy = setUserTrustPolicy(body.defaultActionLevel);\n deps.service.refreshActionTrustPolicy();\n return c.json({\n trust: {\n defaultActionLevel: policy.defaultActionLevel,\n levels: USER_TRUST_LEVELS,\n autoRequiresExplicitOptIn: true,\n },\n });\n });\n\n authenticated.patch('/api/you/playbooks/:id', deps.strictRateLimitMiddleware, async (c) => {\n const id = c.req.param('id') as PlaybookId;\n if (!PLAYBOOK_IDS.includes(id)) return c.json({ error: 'Playbook not found' }, 404);\n const body = await c.req.json().catch(() => ({}));\n const enabled = body.enabled;\n if (typeof enabled !== 'boolean') return c.json({ error: 'enabled must be a boolean' }, 400);\n const config = deps.service.currentConfig as Config;\n const agentId = selectedAgentId(config);\n const pauseTag = `playbook:paused:${id}`;\n const active = listMemoryRecords({ agentId, status: 'active', limit: 500 })\n .filter(isUserContextRecord)\n .filter((record) => playbookForRecord(record) === id);\n const paused = listMemoryRecords({ agentId, status: 'archived', limit: 500 })\n .filter(isUserContextRecord)\n .filter((record) => record.tags?.includes(pauseTag));\n const targets = enabled ? paused : active;\n runSqliteWriteTransaction(() => {\n for (const record of targets) {\n preserveRecord(record, {\n status: enabled ? 'active' : 'archived',\n tags: enabled\n ? (record.tags ?? []).filter((tag) => tag !== pauseTag)\n : [...new Set([...(record.tags ?? []), pauseTag])],\n });\n }\n });\n const current = active.concat(paused);\n return c.json({ ok: true, playbook: buildPersonalPlaybooks(current.map((record) => ({\n ...record,\n status: enabled ? 'active' : 'archived',\n })))[0] });\n });\n\n authenticated.patch('/api/you/insights/:id', deps.strictRateLimitMiddleware, async (c) => {\n const config = deps.service.currentConfig as Config;\n const existing = editableRecord(c.req.param('id'), config);\n if (!existing || existing.status !== 'active' || !ACTIONABLE_INSIGHT_KINDS.has(existing.kind)) {\n return c.json({ error: 'Insight not found' }, 404);\n }\n const body = await c.req.json().catch(() => ({}));\n const action = typeof body.action === 'string' ? body.action : '';\n if (action === 'dismiss') {\n preserveRecord(existing, { tags: [...new Set([...(existing.tags ?? []), INSIGHT_DISMISSED_TAG])] });\n return c.json({ ok: true, status: 'dismissed' });\n }\n if (action !== 'apply') return c.json({ error: 'Action must be apply or dismiss' }, 400);\n\n const title = existing.content.trim().split(/\\r?\\n/)[0]!.slice(0, 72);\n const uiLocale = body.uiLocale === 'zh' ? 'zh' : 'en';\n const contractDraft = await draftGoalContract({\n title,\n context: existing.content,\n uiLocale,\n modelRef: config.goals?.judgeModelRef,\n });\n const goals = new GoalService();\n const goal = goals.create({\n title,\n description: existing.content,\n agentId: selectedAgentId(config),\n priority: 'normal',\n uiLocale,\n source: 'api',\n contract: contractDraft.contract,\n config,\n });\n goals.setContextMessage({ goalId: goal.id, text: existing.content });\n let queued = false;\n try {\n deps.service.enqueueGoalRun(goal.id, { source: 'api' });\n queued = true;\n } catch {\n queued = false;\n } finally {\n preserveRecord(existing, { tags: [...new Set([...(existing.tags ?? []), INSIGHT_ACCEPTED_TAG])] });\n }\n return c.json({ ok: true, status: queued ? 'queued' : 'saved', goal: goals.get(goal.id), href: `/goals/${goal.id}` });\n });\n\n authenticated.patch('/api/you/controls', deps.strictRateLimitMiddleware, async (c) => {\n const config = deps.service.currentConfig as Config;\n const agentId = selectedAgentId(config);\n const manifest = resolveEffectiveAgentManifestForAgent(config, agentId);\n const body = await c.req.json().catch(() => ({}));\n const parsed = MemoryPolicySchema.safeParse({\n ...manifest.memory,\n mode: body.mode,\n privacy: {\n ...manifest.memory.privacy,\n sensitiveWritePolicy: body.sensitiveWritePolicy,\n crossAgentSharing: body.crossAgentSharing,\n },\n });\n if (!parsed.success) {\n return c.json({ error: parsed.error.issues[0]?.message ?? 'Invalid personal context controls' }, 400);\n }\n const prep = prepareUpdateAgent(config, agentId, { memory: parsed.data });\n if (prep.ok === false) return c.json({ error: prep.error }, prep.status ?? 400);\n const saved = await deps.service.saveConfig(prep.data.nextConfig);\n if (!saved.saved) return c.json({ error: saved.error ?? 'save failed' }, 500);\n const updated = resolveEffectiveAgentManifestForAgent(deps.service.currentConfig as Config, agentId);\n return c.json({\n controls: {\n mode: updated.memory.mode,\n sensitiveWritePolicy: updated.memory.privacy?.sensitiveWritePolicy ?? 'confirm',\n crossAgentSharing: updated.memory.privacy?.crossAgentSharing ?? 'deny',\n },\n });\n });\n\n authenticated.delete('/api/you/sources/:instanceId', deps.strictRateLimitMiddleware, async (c) => {\n const config = deps.service.currentConfig as Config;\n const instanceId = c.req.param('instanceId');\n const installedInstances = listConnectorInstances(config);\n const instance = installedInstances.find((item) => item.instanceId === instanceId);\n const definition = instance\n ? listConnectorCatalog().find((item) => item.id === instance.connectorId)\n : undefined;\n if (!instance || !definition || !definition.capabilities.some((capability) => (\n capability === 'context' || capability === 'memory_source'\n ))) {\n return c.json({ error: 'Personal context source not found' }, 404);\n }\n const body = await c.req.json().catch(() => ({}));\n if (typeof body.deleteDerivedUnderstanding !== 'boolean') {\n return c.json({ error: 'deleteDerivedUnderstanding must be a boolean' }, 400);\n }\n\n try {\n const sourceInstances = installedInstances.filter((item) => item.connectorId === instance.connectorId);\n for (const sourceInstance of sourceInstances) {\n uninstallConnector(config, sourceInstance.instanceId);\n }\n const saved = await deps.service.saveConfig(config);\n if (!saved.saved) return c.json({ error: saved.error ?? 'save failed' }, 500);\n } catch (error) {\n return c.json({ error: error instanceof Error ? error.message : String(error) }, 400);\n }\n\n let deletedUnderstandingCount = 0;\n if (body.deleteDerivedUnderstanding) {\n const agentId = selectedAgentId(config);\n const targets = recordsDerivedFromPersonalContextSource(\n listAllAgentMemoryRecords(agentId, ALL_MEMORY_STATUSES),\n agentId,\n instance.connectorId,\n );\n runSqliteWriteTransaction(() => {\n for (const record of targets) deleteMemoryRecord(record.id);\n });\n deletedUnderstandingCount = targets.length;\n }\n return c.json({ ok: true, deletedUnderstandingCount });\n });\n\n authenticated.patch('/api/you/understanding/:id', deps.strictRateLimitMiddleware, async (c) => {\n const config = deps.service.currentConfig as Config;\n const existing = editableRecord(c.req.param('id'), config);\n if (!existing) return c.json({ error: 'Understanding not found' }, 404);\n const body = await c.req.json().catch(() => ({}));\n const action = typeof body.action === 'string' ? body.action : '';\n if (action === 'confirm') {\n return c.json({\n understanding: projectUserContextRecord(preserveRecord(existing, {\n status: 'active',\n reviewAfter: nextMemoryReviewAt(existing),\n })),\n });\n }\n if (action === 'reject') {\n return c.json({ understanding: projectUserContextRecord(preserveRecord(existing, { status: 'rejected' })) });\n }\n if (action === 'update') {\n const content = typeof body.content === 'string' ? body.content.trim() : '';\n if (!content) return c.json({ error: 'Updated understanding cannot be empty' }, 400);\n const replacement = upsertMemoryRecord({\n providerId: 'local',\n kind: existing.kind,\n agentId: existing.scope.agentId,\n workspaceId: existing.scope.workspaceId,\n sessionKey: existing.scope.sessionKey,\n projectId: existing.scope.projectId,\n content,\n source: { provider: 'local' },\n confidence: 1,\n tags: [...new Set([...(existing.tags ?? []), 'user-understanding', 'explicit-user-correction'])],\n status: 'active',\n sensitivity: existing.sensitivity,\n explicitness: 'explicit',\n durability: existing.durability,\n importance: Math.max(existing.importance, 0.8),\n disclosurePolicy: existing.disclosurePolicy,\n evidence: existing.evidence,\n reviewAfter: nextMemoryReviewAt({ durability: existing.durability, explicitness: 'explicit' }),\n supersedesRecordId: existing.id,\n conflictGroupId: existing.conflictGroupId,\n });\n preserveRecord(existing, { status: 'archived', validTo: new Date().toISOString() });\n return c.json({ understanding: projectUserContextRecord(replacement) });\n }\n return c.json({ error: 'Action must be confirm, reject, or update' }, 400);\n });\n\n authenticated.delete('/api/you/understanding/:id', deps.strictRateLimitMiddleware, (c) => {\n const config = deps.service.currentConfig as Config;\n const existing = editableRecord(c.req.param('id'), config);\n if (!existing) return c.json({ error: 'Understanding not found' }, 404);\n deleteMemoryRecord(existing.id);\n return c.json({ ok: true });\n });\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"you.js","names":[],"sources":["../../../../../src/gateway/hono/routes/you.ts"],"sourcesContent":["import type { Hono } from 'hono';\n\nimport { resolveDefaultAgentId } from '../../../agent/agent-scope.js';\nimport type { MemoryRecord } from '../../../agent/memory/types.js';\nimport { nextMemoryReviewAt, resolveMemoryStability } from '../../../agent/memory/lifecycle.js';\nimport { MemoryPolicySchema } from '../../../agent-manifest/schema.js';\nimport { resolveEffectiveAgentManifestForAgent } from '../../../config/agent-profile.js';\nimport type { Config } from '../../../config/schema.js';\nimport { listConnectorCatalog } from '../../../connectors/catalog.js';\nimport { listConnectorInstances } from '../../../connectors/instances.js';\nimport { uninstallConnector } from '../../../connectors/install.js';\nimport { draftGoalContract, GoalService } from '../../../goals/index.js';\nimport { prepareUpdateAgent, readUserProfileFile, writeUserProfileFile } from '../../agents-admin.js';\nimport {\n deleteMemoryRecord,\n getMemoryRecord,\n getUserProfilePromptState,\n getUserTrustPolicy,\n listKnowledgeSourceItems,\n listKnowledgeSyncRuns,\n listMemoryRecords,\n runSqliteWriteTransaction,\n setUserProfilePromptState,\n setUserTrustPolicy,\n upsertMemoryRecord,\n} from '../../../storage/sqlite/index.js';\nimport { isUserTrustLevel, USER_TRUST_LEVELS } from '../../../user-context/trust-policy.js';\nimport {\n buildUserProfileSetup,\n parseUserProfileMarkdown,\n patchUserProfileMarkdown,\n type UserProfileFields,\n} from '../../../user-context/profile.js';\nimport {\n isUserContextRecord,\n projectPersonalContextSources,\n projectUserContextRecord,\n recordsDerivedFromPersonalContextSource,\n} from '../../../user-context/projection.js';\nimport { prepareUserContextImport } from '../../../user-context/import.js';\nimport { buildGoalSourceRecommendations } from '../../../user-context/source-recommendations.js';\nimport type { AuthenticatedRouteDeps } from './deps.js';\n\nconst VISIBLE_STATUSES = new Set<MemoryRecord['status']>(['active', 'candidate', 'needs_review']);\nconst ACTIONABLE_INSIGHT_KINDS = new Set<MemoryRecord['kind']>([\n 'routine',\n 'commitment',\n 'long_term_goal',\n 'derived_insight',\n 'task_lesson',\n]);\nconst INSIGHT_ACCEPTED_TAG = 'insight-action:accepted';\nconst INSIGHT_DISMISSED_TAG = 'insight-action:dismissed';\nconst PLAYBOOK_IDS = ['communication', 'execution', 'routines'] as const;\ntype PlaybookId = typeof PLAYBOOK_IDS[number];\nconst PROFILE_FIELD_LIMITS: Record<keyof UserProfileFields, number> = {\n callName: 80,\n pronouns: 80,\n timezone: 100,\n notes: 5_000,\n};\nconst PROFILE_PROMPT_SNOOZE_MS = 7 * 24 * 60 * 60 * 1_000;\nconst ALL_MEMORY_STATUSES: MemoryRecord['status'][] = [\n 'candidate',\n 'active',\n 'needs_review',\n 'stale',\n 'archived',\n 'rejected',\n];\n\nfunction listAllAgentMemoryRecords(agentId: string, statuses: MemoryRecord['status'][]): MemoryRecord[] {\n return statuses.flatMap((status) => {\n const records: MemoryRecord[] = [];\n let offset = 0;\n while (true) {\n const page = listMemoryRecords({ agentId, status, limit: 500, offset });\n records.push(...page);\n if (page.length < 500) break;\n offset += page.length;\n }\n return records;\n });\n}\n\nasync function readProfileBundle(config: Config) {\n const result = await readUserProfileFile();\n const profileContent = result.ok ? result.data.content : '';\n const profile = parseUserProfileMarkdown(profileContent);\n const promptState = getUserProfilePromptState();\n return {\n profileContent,\n profile,\n profileSetup: buildUserProfileSetup({ profile, promptState, config }),\n };\n}\n\nfunction parseProfilePatch(body: unknown): { patch: Partial<UserProfileFields> } | { error: string } {\n if (!body || typeof body !== 'object' || Array.isArray(body)) return { error: 'Invalid profile patch' };\n const record = body as Record<string, unknown>;\n const patch: Partial<UserProfileFields> = {};\n for (const field of Object.keys(PROFILE_FIELD_LIMITS) as Array<keyof UserProfileFields>) {\n if (!(field in record)) continue;\n if (typeof record[field] !== 'string') return { error: `${field} must be a string` };\n const value = record[field].trim();\n if (value.length > PROFILE_FIELD_LIMITS[field]) {\n return { error: `${field} is too long` };\n }\n patch[field] = value;\n }\n return Object.keys(patch).length > 0 ? { patch } : { error: 'No profile fields provided' };\n}\n\nfunction playbookForRecord(record: MemoryRecord): PlaybookId | undefined {\n if (record.kind === 'preference' || record.kind === 'boundary' || record.kind === 'tool_preference') return 'communication';\n if (record.kind === 'task_lesson' || record.kind === 'derived_insight') return 'execution';\n if (record.kind === 'routine') return 'routines';\n return undefined;\n}\n\nexport function buildPersonalPlaybooks(records: MemoryRecord[]) {\n return PLAYBOOK_IDS.flatMap((id) => {\n const rules = records.filter((record) => playbookForRecord(record) === id);\n if (rules.length === 0) return [];\n return [{\n id,\n enabled: rules.some((record) => record.status === 'active'),\n rules: rules.map((record) => ({\n id: record.id,\n statement: record.content,\n origin: record.explicitness,\n })),\n updatedAt: rules.map((record) => record.updatedAt).sort().at(-1),\n }];\n });\n}\n\nexport function buildInsightSuggestions(records: MemoryRecord[]) {\n return records\n .filter((record) => record.status === 'active')\n .filter((record) => ACTIONABLE_INSIGHT_KINDS.has(record.kind))\n .filter((record) => !record.tags?.includes(INSIGHT_ACCEPTED_TAG) && !record.tags?.includes(INSIGHT_DISMISSED_TAG))\n .filter((record) => {\n const stability = resolveMemoryStability(record);\n return record.explicitness === 'explicit' || (record.evidence?.length ?? 0) >= 2 || stability.band === 'strong';\n })\n .sort((left, right) => right.importance - left.importance || Date.parse(right.updatedAt) - Date.parse(left.updatedAt))\n .slice(0, 5)\n .map((record) => ({\n id: record.id,\n insight: record.content,\n kind: record.kind,\n action: record.kind === 'routine' ? 'make_repeatable' as const : 'start_progress' as const,\n evidenceCount: record.evidence?.length ?? 0,\n confidence: record.confidence,\n sourceName: record.source.provider ?? 'local',\n }));\n}\n\nfunction selectedAgentId(config: Config): string {\n return resolveDefaultAgentId(config);\n}\n\nfunction editableRecord(recordId: string, config: Config): MemoryRecord | null {\n const record = getMemoryRecord(recordId);\n if (\n !record\n || record.scope.agentId !== selectedAgentId(config)\n || !VISIBLE_STATUSES.has(record.status)\n || !isUserContextRecord(record)\n ) return null;\n return record;\n}\n\nfunction preserveRecord(record: MemoryRecord, patch: Partial<Parameters<typeof upsertMemoryRecord>[0]>) {\n return upsertMemoryRecord({\n id: record.id,\n providerId: record.source.provider ?? 'local',\n kind: record.kind,\n agentId: record.scope.agentId,\n workspaceId: record.scope.workspaceId,\n sessionKey: record.scope.sessionKey,\n projectId: record.scope.projectId,\n content: record.content,\n source: record.source,\n confidence: record.confidence,\n tags: record.tags,\n status: record.status,\n sensitivity: record.sensitivity,\n canonicalKey: record.canonicalKey,\n explicitness: record.explicitness,\n durability: record.durability,\n importance: record.importance,\n disclosurePolicy: record.disclosurePolicy,\n evidence: record.evidence,\n reviewAfter: record.reviewAfter,\n expiresAt: record.expiresAt,\n validFrom: record.validFrom,\n validTo: record.validTo,\n supersedesRecordId: record.supersedesRecordId,\n conflictGroupId: record.conflictGroupId,\n ...patch,\n });\n}\n\nexport function registerYouRoutes(authenticated: Hono, deps: AuthenticatedRouteDeps): void {\n authenticated.get('/api/you', async (c) => {\n const config = deps.service.currentConfig as Config;\n const agentId = selectedAgentId(config);\n const profileBundle = await readProfileBundle(config);\n const allUserContextRecords = listAllAgentMemoryRecords(agentId, ALL_MEMORY_STATUSES)\n .filter(isUserContextRecord);\n const records = allUserContextRecords.filter((record) => VISIBLE_STATUSES.has(record.status));\n const pausedPlaybookRecords = listMemoryRecords({ agentId, status: 'archived', limit: 200 })\n .filter(isUserContextRecord)\n .filter((record) => record.tags?.some((tag) => tag.startsWith('playbook:paused:')));\n const manifest = resolveEffectiveAgentManifestForAgent(config, agentId);\n const trustPolicy = getUserTrustPolicy();\n const sourceDefinitions = listConnectorCatalog();\n const sourceInstances = listConnectorInstances(config);\n const sources = projectPersonalContextSources(sourceDefinitions, sourceInstances, allUserContextRecords, {\n sourceItems: listKnowledgeSourceItems({ limit: 500 }),\n syncRuns: listKnowledgeSyncRuns({ limit: 500 }),\n });\n const activeGoals = new GoalService().list({\n agentId,\n status: ['active', 'paused', 'blocked', 'needs_input'],\n limit: 20,\n });\n return c.json({\n agentId,\n scope: {\n profile: 'global',\n memory: 'agent',\n trust: 'global',\n agentId,\n },\n ...profileBundle,\n understanding: records.map(projectUserContextRecord),\n insights: buildInsightSuggestions(records),\n playbooks: buildPersonalPlaybooks([...records.filter((record) => record.status === 'active'), ...pausedPlaybookRecords]),\n sources,\n sourceRecommendations: buildGoalSourceRecommendations(\n sourceDefinitions.filter((definition) => (\n definition.capabilities.includes('context') || definition.capabilities.includes('memory_source')\n )),\n new Set(sourceInstances.map((instance) => instance.connectorId)),\n activeGoals,\n ),\n controls: {\n mode: manifest.memory.mode,\n sensitiveWritePolicy: manifest.memory.privacy?.sensitiveWritePolicy ?? 'confirm',\n crossAgentSharing: manifest.memory.privacy?.crossAgentSharing ?? 'deny',\n },\n trust: {\n defaultActionLevel: trustPolicy.defaultActionLevel,\n levels: USER_TRUST_LEVELS,\n autoRequiresExplicitOptIn: true,\n },\n });\n });\n\n authenticated.get('/api/you/profile', async (c) => {\n return c.json(await readProfileBundle(deps.service.currentConfig as Config));\n });\n\n authenticated.get('/api/you/export', async (c) => {\n const config = deps.service.currentConfig as Config;\n const agentId = selectedAgentId(config);\n const profileBundle = await readProfileBundle(config);\n const understanding = listAllAgentMemoryRecords(agentId, ALL_MEMORY_STATUSES)\n .filter(isUserContextRecord)\n .map((record) => ({\n statement: record.content,\n kind: record.kind,\n status: record.status,\n sensitivity: record.sensitivity ?? 'normal',\n durability: record.durability,\n canReference: record.disclosurePolicy !== 'silent',\n sourceName: record.source.provider ?? 'local',\n updatedAt: record.updatedAt,\n }));\n return c.json({\n version: 1,\n exportedAt: new Date().toISOString(),\n agentId,\n profile: profileBundle.profile,\n understanding,\n });\n });\n\n authenticated.post('/api/you/import', deps.strictRateLimitMiddleware, async (c) => {\n const body = await c.req.json().catch(() => null);\n if (!body || typeof body !== 'object' || Array.isArray(body) || body.version !== 1 || !Array.isArray(body.understanding)) {\n return c.json({ error: 'Invalid About You export' }, 400);\n }\n if (body.understanding.length > 500) return c.json({ error: 'Import is limited to 500 understandings' }, 400);\n const config = deps.service.currentConfig as Config;\n const agentId = selectedAgentId(config);\n const existingStatements = listAllAgentMemoryRecords(agentId, ALL_MEMORY_STATUSES)\n .filter(isUserContextRecord)\n .map((record) => record.content);\n const { imports, skippedCount } = prepareUserContextImport(body.understanding, existingStatements);\n runSqliteWriteTransaction(() => {\n for (const item of imports) {\n upsertMemoryRecord({\n providerId: 'local',\n kind: item.kind,\n agentId,\n content: item.statement,\n source: { provider: 'local', path: 'import://about-you' },\n confidence: 1,\n tags: ['user-understanding', 'user-import'],\n status: 'candidate',\n sensitivity: item.sensitivity,\n explicitness: 'explicit',\n durability: item.durability,\n importance: 0.7,\n disclosurePolicy: item.canReference ? 'referenceable' : 'silent',\n });\n }\n });\n return c.json({ ok: true, importedCount: imports.length, skippedCount });\n });\n\n authenticated.patch('/api/you/profile', deps.strictRateLimitMiddleware, async (c) => {\n const config = deps.service.currentConfig as Config;\n const parsed = parseProfilePatch(await c.req.json().catch(() => null));\n if ('error' in parsed) return c.json({ error: parsed.error }, 400);\n const current = await readUserProfileFile();\n const content = current.ok ? current.data.content : '';\n const nextContent = patchUserProfileMarkdown(content, parsed.patch);\n const saved = await writeUserProfileFile(nextContent);\n if (saved.ok === false) return c.json({ error: saved.error }, saved.status ?? 500);\n if (parsed.patch.callName !== undefined) {\n setUserProfilePromptState({ state: 'active' });\n }\n deps.service.refreshUserProfileContext();\n return c.json(await readProfileBundle(config));\n });\n\n authenticated.post('/api/you/profile-prompt', deps.strictRateLimitMiddleware, async (c) => {\n const body = await c.req.json().catch(() => ({}));\n const action = typeof body.action === 'string' ? body.action : '';\n if (action !== 'snooze' && action !== 'reset') {\n return c.json({ error: 'Action must be snooze or reset' }, 400);\n }\n const config = deps.service.currentConfig as Config;\n const current = await readProfileBundle(config);\n const suggestionHash = current.profileSetup.callNameSuggestion?.id;\n const promptState = action === 'snooze'\n ? setUserProfilePromptState({\n state: 'snoozed',\n suggestionHash,\n snoozedUntil: new Date(Date.now() + PROFILE_PROMPT_SNOOZE_MS).toISOString(),\n })\n : setUserProfilePromptState({ state: 'active', suggestionHash });\n return c.json({\n profileSetup: buildUserProfileSetup({ profile: current.profile, promptState, config }),\n });\n });\n\n authenticated.patch('/api/you/trust', deps.strictRateLimitMiddleware, async (c) => {\n const body = await c.req.json().catch(() => ({}));\n if (!isUserTrustLevel(body.defaultActionLevel)) {\n return c.json({ error: 'Invalid default action level' }, 400);\n }\n const policy = setUserTrustPolicy(body.defaultActionLevel);\n deps.service.refreshActionTrustPolicy();\n return c.json({\n trust: {\n defaultActionLevel: policy.defaultActionLevel,\n levels: USER_TRUST_LEVELS,\n autoRequiresExplicitOptIn: true,\n },\n });\n });\n\n authenticated.patch('/api/you/playbooks/:id', deps.strictRateLimitMiddleware, async (c) => {\n const id = c.req.param('id') as PlaybookId;\n if (!PLAYBOOK_IDS.includes(id)) return c.json({ error: 'Playbook not found' }, 404);\n const body = await c.req.json().catch(() => ({}));\n const enabled = body.enabled;\n if (typeof enabled !== 'boolean') return c.json({ error: 'enabled must be a boolean' }, 400);\n const config = deps.service.currentConfig as Config;\n const agentId = selectedAgentId(config);\n const pauseTag = `playbook:paused:${id}`;\n const active = listMemoryRecords({ agentId, status: 'active', limit: 500 })\n .filter(isUserContextRecord)\n .filter((record) => playbookForRecord(record) === id);\n const paused = listMemoryRecords({ agentId, status: 'archived', limit: 500 })\n .filter(isUserContextRecord)\n .filter((record) => record.tags?.includes(pauseTag));\n const targets = enabled ? paused : active;\n runSqliteWriteTransaction(() => {\n for (const record of targets) {\n preserveRecord(record, {\n status: enabled ? 'active' : 'archived',\n tags: enabled\n ? (record.tags ?? []).filter((tag) => tag !== pauseTag)\n : [...new Set([...(record.tags ?? []), pauseTag])],\n });\n }\n });\n const current = active.concat(paused);\n return c.json({ ok: true, playbook: buildPersonalPlaybooks(current.map((record) => ({\n ...record,\n status: enabled ? 'active' : 'archived',\n })))[0] });\n });\n\n authenticated.patch('/api/you/insights/:id', deps.strictRateLimitMiddleware, async (c) => {\n const config = deps.service.currentConfig as Config;\n const existing = editableRecord(c.req.param('id'), config);\n if (!existing || existing.status !== 'active' || !ACTIONABLE_INSIGHT_KINDS.has(existing.kind)) {\n return c.json({ error: 'Insight not found' }, 404);\n }\n const body = await c.req.json().catch(() => ({}));\n const action = typeof body.action === 'string' ? body.action : '';\n if (action === 'dismiss') {\n preserveRecord(existing, { tags: [...new Set([...(existing.tags ?? []), INSIGHT_DISMISSED_TAG])] });\n return c.json({ ok: true, status: 'dismissed' });\n }\n if (action !== 'apply') return c.json({ error: 'Action must be apply or dismiss' }, 400);\n\n const title = existing.content.trim().split(/\\r?\\n/)[0]!.slice(0, 72);\n const uiLocale = body.uiLocale === 'zh' ? 'zh' : 'en';\n const contractDraft = await draftGoalContract({\n title,\n context: existing.content,\n uiLocale,\n modelRef: config.goals?.judgeModelRef,\n });\n const goals = new GoalService();\n const goal = goals.create({\n title,\n description: existing.content,\n agentId: selectedAgentId(config),\n priority: 'normal',\n uiLocale,\n source: 'api',\n contract: contractDraft.contract,\n config,\n });\n goals.setContextMessage({ goalId: goal.id, text: existing.content });\n let queued = false;\n try {\n deps.service.enqueueGoalRun(goal.id, { source: 'api' });\n queued = true;\n } catch {\n queued = false;\n } finally {\n preserveRecord(existing, { tags: [...new Set([...(existing.tags ?? []), INSIGHT_ACCEPTED_TAG])] });\n }\n return c.json({ ok: true, status: queued ? 'queued' : 'saved', goal: goals.get(goal.id), href: `/goals/${goal.id}` });\n });\n\n authenticated.patch('/api/you/controls', deps.strictRateLimitMiddleware, async (c) => {\n const config = deps.service.currentConfig as Config;\n const agentId = selectedAgentId(config);\n const manifest = resolveEffectiveAgentManifestForAgent(config, agentId);\n const body = await c.req.json().catch(() => ({}));\n const parsed = MemoryPolicySchema.safeParse({\n ...manifest.memory,\n mode: body.mode,\n privacy: {\n ...manifest.memory.privacy,\n sensitiveWritePolicy: body.sensitiveWritePolicy,\n crossAgentSharing: body.crossAgentSharing,\n },\n });\n if (!parsed.success) {\n return c.json({ error: parsed.error.issues[0]?.message ?? 'Invalid personal context controls' }, 400);\n }\n const prep = prepareUpdateAgent(config, agentId, { memory: parsed.data });\n if (prep.ok === false) return c.json({ error: prep.error }, prep.status ?? 400);\n const saved = await deps.service.saveConfig(prep.data.nextConfig);\n if (!saved.saved) return c.json({ error: saved.error ?? 'save failed' }, 500);\n const updated = resolveEffectiveAgentManifestForAgent(deps.service.currentConfig as Config, agentId);\n return c.json({\n controls: {\n mode: updated.memory.mode,\n sensitiveWritePolicy: updated.memory.privacy?.sensitiveWritePolicy ?? 'confirm',\n crossAgentSharing: updated.memory.privacy?.crossAgentSharing ?? 'deny',\n },\n });\n });\n\n authenticated.delete('/api/you/sources/:instanceId', deps.strictRateLimitMiddleware, async (c) => {\n const config = deps.service.currentConfig as Config;\n const instanceId = c.req.param('instanceId');\n const installedInstances = listConnectorInstances(config);\n const instance = installedInstances.find((item) => item.instanceId === instanceId);\n const definition = instance\n ? listConnectorCatalog().find((item) => item.id === instance.connectorId)\n : undefined;\n if (!instance || !definition || !definition.capabilities.some((capability) => (\n capability === 'context' || capability === 'memory_source'\n ))) {\n return c.json({ error: 'Personal context source not found' }, 404);\n }\n const body = await c.req.json().catch(() => ({}));\n if (typeof body.deleteDerivedUnderstanding !== 'boolean') {\n return c.json({ error: 'deleteDerivedUnderstanding must be a boolean' }, 400);\n }\n\n try {\n const sourceInstances = installedInstances.filter((item) => item.connectorId === instance.connectorId);\n for (const sourceInstance of sourceInstances) {\n uninstallConnector(config, sourceInstance.instanceId);\n }\n const saved = await deps.service.saveConfig(config);\n if (!saved.saved) return c.json({ error: saved.error ?? 'save failed' }, 500);\n } catch (error) {\n return c.json({ error: error instanceof Error ? error.message : String(error) }, 400);\n }\n\n let deletedUnderstandingCount = 0;\n if (body.deleteDerivedUnderstanding) {\n const agentId = selectedAgentId(config);\n const targets = recordsDerivedFromPersonalContextSource(\n listAllAgentMemoryRecords(agentId, ALL_MEMORY_STATUSES),\n agentId,\n instance.connectorId,\n );\n runSqliteWriteTransaction(() => {\n for (const record of targets) deleteMemoryRecord(record.id);\n });\n deletedUnderstandingCount = targets.length;\n }\n return c.json({ ok: true, deletedUnderstandingCount });\n });\n\n authenticated.patch('/api/you/understanding/:id', deps.strictRateLimitMiddleware, async (c) => {\n const config = deps.service.currentConfig as Config;\n const existing = editableRecord(c.req.param('id'), config);\n if (!existing) return c.json({ error: 'Understanding not found' }, 404);\n const body = await c.req.json().catch(() => ({}));\n const action = typeof body.action === 'string' ? body.action : '';\n if (action === 'confirm') {\n return c.json({\n understanding: projectUserContextRecord(preserveRecord(existing, {\n status: 'active',\n reviewAfter: nextMemoryReviewAt(existing),\n })),\n });\n }\n if (action === 'reject') {\n return c.json({ understanding: projectUserContextRecord(preserveRecord(existing, { status: 'rejected' })) });\n }\n if (action === 'update') {\n const content = typeof body.content === 'string' ? body.content.trim() : '';\n if (!content) return c.json({ error: 'Updated understanding cannot be empty' }, 400);\n const replacement = upsertMemoryRecord({\n providerId: 'local',\n kind: existing.kind,\n agentId: existing.scope.agentId,\n workspaceId: existing.scope.workspaceId,\n sessionKey: existing.scope.sessionKey,\n projectId: existing.scope.projectId,\n content,\n source: { provider: 'local' },\n confidence: 1,\n tags: [...new Set([...(existing.tags ?? []), 'user-understanding', 'explicit-user-correction'])],\n status: 'active',\n sensitivity: existing.sensitivity,\n explicitness: 'explicit',\n durability: existing.durability,\n importance: Math.max(existing.importance, 0.8),\n disclosurePolicy: existing.disclosurePolicy,\n evidence: existing.evidence,\n reviewAfter: nextMemoryReviewAt({ durability: existing.durability, explicitness: 'explicit' }),\n supersedesRecordId: existing.id,\n conflictGroupId: existing.conflictGroupId,\n });\n preserveRecord(existing, { status: 'archived', validTo: new Date().toISOString() });\n return c.json({ understanding: projectUserContextRecord(replacement) });\n }\n return c.json({ error: 'Action must be confirm, reject, or update' }, 400);\n });\n\n authenticated.delete('/api/you/understanding/:id', deps.strictRateLimitMiddleware, (c) => {\n const config = deps.service.currentConfig as Config;\n const existing = editableRecord(c.req.param('id'), config);\n if (!existing) return c.json({ error: 'Understanding not found' }, 404);\n deleteMemoryRecord(existing.id);\n return c.json({ ok: true });\n });\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import path from "node:path";
2
- import net from "node:net";
3
2
  import fs from "node:fs";
4
3
  import { createHash } from "node:crypto";
4
+ import net from "node:net";
5
5
  import fs$1 from "node:fs/promises";
6
6
  import { homedir } from "os";
7
7
  //#region src/gateway/lock.ts
@@ -1,8 +1,8 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
- import net from "node:net";
4
3
  import fs from "node:fs";
5
4
  import { execFileSync } from "node:child_process";
5
+ import net from "node:net";
6
6
  //#region src/gateway/ports.ts
7
7
  /**
8
8
  * Ports Management - Port management utilities
@@ -15,6 +15,7 @@ import { GatewayMarketplaceService } from './service/marketplace-service.js';
15
15
  import { GatewayAgentRunner } from './service/agent-runner.js';
16
16
  import type { GatewayServiceConfig, ServiceEvent } from './service/types.js';
17
17
  import { type GatewayReadinessSnapshot } from './startup-readiness.js';
18
+ import { type ProductLanguage } from '../voice/language-profile.js';
18
19
  export type { GatewayChannelStartupPhase1Metrics, GatewayChannelStartupPhase2Metrics, GatewayServiceConfig, ServiceEvent, } from './service/types.js';
19
20
  export declare class GatewayService {
20
21
  private serviceConfig;
@@ -55,6 +56,7 @@ export declare class GatewayService {
55
56
  private goalNotifications;
56
57
  private mobileNotifications;
57
58
  private connectorSupervisor;
59
+ private connectedKnowledgeCoordinator;
58
60
  private stopAutomationProductEventBridge;
59
61
  private stopSessionTranscriptAutomationEvents;
60
62
  /**
@@ -145,6 +147,12 @@ export declare class GatewayService {
145
147
  saved: boolean;
146
148
  error?: string;
147
149
  }>;
150
+ syncVoiceLanguage(language: ProductLanguage): Promise<{
151
+ applied: boolean;
152
+ language: ProductLanguage;
153
+ mode: 'auto' | 'manual';
154
+ error?: string;
155
+ }>;
148
156
  setBundledExtensionActivationTarget(extensionId: string, wanted: boolean): Promise<{
149
157
  ok: boolean;
150
158
  error?: string;
@@ -1,13 +1,15 @@
1
1
  import { __toCommonJS } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { PACKAGE_VERSION, init_package_version } from "../package-version.js";
3
- import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
4
- import { init_agent_scope, listAgentEntries, normalizeAgentId, resolveDefaultAgentId } from "../agent/agent-scope.js";
5
- import { buildSessionKey, init_session_key, sanitizeSegment } from "../routing/session-key.js";
6
- import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
7
3
  import { getLogDir } from "../utils/logger/config.js";
8
4
  import { getRuntimeLogStats } from "../utils/logger/stats.js";
9
5
  import { createLogger } from "../utils/logger/index.js";
10
6
  import { init_logger } from "../utils/logger.js";
7
+ import { closeXopcDatabase, openXopcDatabase } from "../storage/sqlite/connection.js";
8
+ import "../storage/sqlite/index.js";
9
+ import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
10
+ import { init_agent_scope, listAgentEntries, normalizeAgentId, resolveDefaultAgentId } from "../agent/agent-scope.js";
11
+ import { buildSessionKey, init_session_key, sanitizeSegment } from "../routing/session-key.js";
12
+ import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
11
13
  import { init_paths, resolveAgentDir, resolveConfigPath, resolveExtensionsDir } from "../config/paths.js";
12
14
  import { areExtensionsGloballyDisabled } from "../extensions/discover-extensions.js";
13
15
  import { buildExtensionMetadataSnapshot } from "../extensions/extension-metadata-snapshot.js";
@@ -16,11 +18,9 @@ import { loadConfig, saveConfig } from "../config/loader.js";
16
18
  import { prewarmModelRegistry } from "../providers/model-registry.js";
17
19
  import { init_providers, providers_exports } from "../providers/index.js";
18
20
  import { onAutomationProductEvent, publishAutomationProductEvent } from "../automations/product-events.js";
19
- import { closeXopcDatabase, openXopcDatabase } from "../storage/sqlite/connection.js";
20
21
  import { GoalRunner } from "../goals/goal-runner.js";
21
22
  import { GoalNotificationService } from "../goals/goal-notifications.js";
22
23
  import "../goals/index.js";
23
- import "../storage/sqlite/index.js";
24
24
  import { resolveEffectiveGatewayPort } from "./host.js";
25
25
  import { ProjectService } from "../projects/project-service.js";
26
26
  import "../projects/index.js";
@@ -42,6 +42,8 @@ import { registerClarifyBridge } from "./clarify-runtime.js";
42
42
  import { ChannelManager } from "../channels/manager.js";
43
43
  import { getWorkspacePath } from "../config/workspace-path-helpers.js";
44
44
  import "../config/index.js";
45
+ import { startConnectedKnowledgeCoordinator } from "../knowledge/coordinator.js";
46
+ import "../knowledge/index.js";
45
47
  import { startConnectorSupervisor } from "../connectors/supervisor.js";
46
48
  import { assertGatewayAuthConfigured, extractToken, resolveGatewayAuth, validateToken } from "./auth.js";
47
49
  import { reconcileDreamingAutomations } from "./dreaming-automation-reconciler.js";
@@ -79,6 +81,7 @@ import { GatewayAgentRunner } from "./service/agent-runner.js";
79
81
  import { GatewaySseHub } from "./service/sse-hub.js";
80
82
  import { GatewayReadiness } from "./startup-readiness.js";
81
83
  import { createGatewayStartupTrace } from "./startup-trace.js";
84
+ import { applyAutomaticVoiceLanguage, inferProductLanguageFromEnvironment, initializeVoiceDefaults, prepareConfiguredLocalVoiceModel } from "../voice/language-profile.js";
82
85
  import crypto from "crypto";
83
86
  //#region src/gateway/service.ts
84
87
  init_agent_scope();
@@ -131,6 +134,7 @@ var GatewayService = class {
131
134
  goalNotifications = null;
132
135
  mobileNotifications = null;
133
136
  connectorSupervisor = null;
137
+ connectedKnowledgeCoordinator = null;
134
138
  stopAutomationProductEventBridge = null;
135
139
  stopSessionTranscriptAutomationEvents = null;
136
140
  /**
@@ -162,25 +166,20 @@ var GatewayService = class {
162
166
  this.configPath = serviceConfig.configPath || resolveConfigPath();
163
167
  runBootstrapMigrationsSync(this.configPath);
164
168
  this.config = loadConfig(this.configPath);
169
+ let bootstrapConfigChanged = initializeVoiceDefaults(this.config, inferProductLanguageFromEnvironment());
165
170
  const starterResult = ensureStarterAgentsInitialized(this.config);
166
171
  if (starterResult.changed) {
167
172
  this.config = starterResult.config;
168
- saveConfig(this.config, this.configPath).catch((err) => {
169
- const em = err instanceof Error ? err.message : String(err);
170
- log.warn({
171
- err,
172
- phase: "starter_agents_init",
173
- errorMessage: em
174
- }, `Starter agents init persist failed: ${em}`);
175
- });
173
+ bootstrapConfigChanged = true;
176
174
  }
177
- if (sanitizeTunnelConfig(this.config)) saveConfig(this.config, this.configPath).catch((err) => {
175
+ if (sanitizeTunnelConfig(this.config)) bootstrapConfigChanged = true;
176
+ if (bootstrapConfigChanged) saveConfig(this.config, this.configPath).catch((err) => {
178
177
  const em = err instanceof Error ? err.message : String(err);
179
178
  log.warn({
180
179
  err,
181
- phase: "tunnel_sanitize",
180
+ phase: "bootstrap_config_init",
182
181
  errorMessage: em
183
- }, `Tunnel config sanitize persist failed: ${em}`);
182
+ }, `Bootstrap config persist failed: ${em}`);
184
183
  });
185
184
  this.auth = resolveGatewayAuth({ authConfig: this.config.gateway?.auth });
186
185
  assertGatewayAuthConfigured(this.auth);
@@ -573,6 +572,7 @@ var GatewayService = class {
573
572
  openXopcDatabase();
574
573
  this.startTime = Date.now();
575
574
  this.running = true;
575
+ prepareConfiguredLocalVoiceModel(this.config);
576
576
  this.startupTrace = createGatewayStartupTrace();
577
577
  this.readiness.markStarting(this.startTime);
578
578
  const trace = this.startupTrace;
@@ -670,6 +670,10 @@ var GatewayService = class {
670
670
  getConfig: () => this.config,
671
671
  saveConfig: (cfg) => this.saveConfig(cfg)
672
672
  });
673
+ this.connectedKnowledgeCoordinator = startConnectedKnowledgeCoordinator({ resolvePipelineOptions: () => ({
674
+ agentId: resolveDefaultAgentId(this.config),
675
+ workspaceId: this.currentWorkspacePath
676
+ }) });
673
677
  import("../browser/providers/browser-ext-install.js").then(({ ensureBrowserExtensionOnStartup }) => ensureBrowserExtensionOnStartup(this.config)).catch((err) => log.warn({ err }, "Browser extension artifact ensure failed"));
674
678
  await trace.measure("browser-extension.start", () => this.startBrowserExtensionServerIfNeeded());
675
679
  this.agentService.start().catch((err) => {
@@ -789,6 +793,8 @@ var GatewayService = class {
789
793
  this.heartbeatService?.stop();
790
794
  this.connectorSupervisor?.stop();
791
795
  this.connectorSupervisor = null;
796
+ this.connectedKnowledgeCoordinator?.stop();
797
+ this.connectedKnowledgeCoordinator = null;
792
798
  if (this.browserExtensionRelease) {
793
799
  await this.browserExtensionRelease();
794
800
  this.browserExtensionRelease = null;
@@ -924,6 +930,30 @@ var GatewayService = class {
924
930
  saveConfig(config) {
925
931
  return this.configCoordinator.saveConfig(config);
926
932
  }
933
+ async syncVoiceLanguage(language) {
934
+ const mode = this.config.voice?.languageMode ?? "auto";
935
+ if (mode === "manual") return {
936
+ applied: false,
937
+ language,
938
+ mode
939
+ };
940
+ const changed = applyAutomaticVoiceLanguage(this.config, language);
941
+ if (changed) {
942
+ const saved = await this.configCoordinator.saveConfig(this.config);
943
+ if (!saved.saved) return {
944
+ applied: false,
945
+ language,
946
+ mode,
947
+ error: saved.error ?? "Failed to save voice language"
948
+ };
949
+ }
950
+ prepareConfiguredLocalVoiceModel(this.config);
951
+ return {
952
+ applied: changed,
953
+ language,
954
+ mode
955
+ };
956
+ }
927
957
  setBundledExtensionActivationTarget(extensionId, wanted) {
928
958
  return this.configCoordinator.setBundledExtensionActivationTarget(extensionId, wanted);
929
959
  }