@xopcai/xopc 0.0.218 → 0.0.219

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 (326) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/telegram/xopc.extension.json +1 -1
  3. package/dist/gateway/static/root/assets/{activity-store-DF2dYXG1.js → activity-store-slG02hSm.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-Dw9rF5o1.js → agent-avatar-dicebear-DZ6ETNIk.js} +1 -1
  5. package/dist/gateway/static/root/assets/agents-DxaIH0Ep.js +68 -0
  6. package/dist/gateway/static/root/assets/{api-_H0Bam-t.js → api-Tz57QxiN.js} +1 -1
  7. package/dist/gateway/static/root/assets/app-management-settings-panel-DdR1L4LR.js +1 -0
  8. package/dist/gateway/static/root/assets/appearance-settings-wYbwqmee.js +1 -0
  9. package/dist/gateway/static/root/assets/apps-page-CyWr6KyO.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-DZCOhXch.js → archive-plugin-DKXa160O.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-Bjb0FH2B.js → attachment-load-CzwA9g2y.js} +1 -1
  12. package/dist/gateway/static/root/assets/{automations-page-D4N3ZDhu.js → automations-page-DwAXyWAY.js} +1 -1
  13. package/dist/gateway/static/root/assets/automations-workspace-CL7ieYIt.js +6 -0
  14. package/dist/gateway/static/root/assets/{binary-plugins-uXPt0s47.js → binary-plugins-DoQ_DnT7.js} +1 -1
  15. package/dist/gateway/static/root/assets/{block-editor-gukkIEro.js → block-editor-Bj_Uxxng.js} +47 -47
  16. package/dist/gateway/static/root/assets/browser-settings-page-BYa_FNC1.js +8 -0
  17. package/dist/gateway/static/root/assets/{browser-workflow-inputs-DAhdS-XZ.js → browser-workflow-inputs-D4roXE6r.js} +1 -1
  18. package/dist/gateway/static/root/assets/{browser-workflows-page-LKjYzXS_.js → browser-workflows-page-CleKTAKD.js} +2 -2
  19. package/dist/gateway/static/root/assets/capabilities-settings-panel-DYG37N0k.js +7 -0
  20. package/dist/gateway/static/root/assets/{capability-presets-api-BBUkH833.js → capability-presets-api-wtEN6Ss6.js} +1 -1
  21. package/dist/gateway/static/root/assets/capability-presets-settings-panel-C0Q4dFq-.js +3 -0
  22. package/dist/gateway/static/root/assets/{channel-recipient-api-E5mo8M3a.js → channel-recipient-api-DhuS2RJ3.js} +1 -1
  23. package/dist/gateway/static/root/assets/channels-settings-CpO6Xg0n.js +1 -0
  24. package/dist/gateway/static/root/assets/channels-status-swr-CXhPeiNj.js +1 -0
  25. package/dist/gateway/static/root/assets/chat-terminal-dock-ClQMDe2n.js +36 -0
  26. package/dist/gateway/static/root/assets/connectors-page-BvyiPdKU.js +2 -0
  27. package/dist/gateway/static/root/assets/{cron-expression-BGNuaqvI.js → cron-expression-4DvCFs-v.js} +1 -1
  28. package/dist/gateway/static/root/assets/{date-picker-k7mkklMU.js → date-picker-B6FSjt4Z.js} +1 -1
  29. package/dist/gateway/static/root/assets/dependency-picker-Za18eMp1.js +1 -0
  30. package/dist/gateway/static/root/assets/{desktop-pet-p9EZyGzV.js → desktop-pet-DUUf3yyJ.js} +1 -1
  31. package/dist/gateway/static/root/assets/desktop-pet-settings-Dwx3GfB8.js +1 -0
  32. package/dist/gateway/static/root/assets/directory-picker-path-field-C6dfTCsl.js +1 -0
  33. package/dist/gateway/static/root/assets/ellipsis-0k4rZLoy.js +1 -0
  34. package/dist/gateway/static/root/assets/{extension-debug-page-Cd4BMKm_.js → extension-debug-page-Cordpg4X.js} +1 -1
  35. package/dist/gateway/static/root/assets/{extension-page-CzEGCkOa.js → extension-page-Dw0dGyMl.js} +1 -1
  36. package/dist/gateway/static/root/assets/extension-settings-page-B2pUMaXm.js +1 -0
  37. package/dist/gateway/static/root/assets/eye-CABVeTq0.js +1 -0
  38. package/dist/gateway/static/root/assets/eye-off-DEAzt3g1.js +1 -0
  39. package/dist/gateway/static/root/assets/file-code-corner-byQA1VfD.js +1 -0
  40. package/dist/gateway/static/root/assets/form-field-width-DJw_jULe.js +1 -0
  41. package/dist/gateway/static/root/assets/gateway-config-api-DAZUOEQh.js +1 -0
  42. package/dist/gateway/static/root/assets/{gateway-config-swr-DNrttVr2.js → gateway-config-swr-BIqRg-zo.js} +1 -1
  43. package/dist/gateway/static/root/assets/gateway-settings-ik2f-pmV.js +1 -0
  44. package/dist/gateway/static/root/assets/{gateway-startup-retry-B1vD3vRb.js → gateway-startup-retry-BFjWYOCS.js} +1 -1
  45. package/dist/gateway/static/root/assets/heartbeat-settings-BE81XJ8F.js +1 -0
  46. package/dist/gateway/static/root/assets/home-page-BTWXJu_m.js +1 -0
  47. package/dist/gateway/static/root/assets/{image-generation-api-BTR0Wk_k.js → image-generation-api-HXAWlgm6.js} +1 -1
  48. package/dist/gateway/static/root/assets/index-B6gWYy08.js +108 -0
  49. package/dist/gateway/static/root/assets/index-CDkuz_YC.css +2 -0
  50. package/dist/gateway/static/root/assets/interaction-BmQogeqz.js +1 -0
  51. package/dist/gateway/static/root/assets/is-masked-secret-DOkL5b_X.js +1 -0
  52. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CYlS4RGA.js → keyboard-shortcuts-settings-ROqQ_Xlo.js} +1 -1
  53. package/dist/gateway/static/root/assets/local-app-workbench-page-Dcaf190G.js +2 -0
  54. package/dist/gateway/static/root/assets/{local-apps-page-CNppYVew.js → local-apps-page-Be79cyMG.js} +1 -1
  55. package/dist/gateway/static/root/assets/{locale-store-gf9Bg2gb.js → locale-store-DfK-Hofd.js} +1 -1
  56. package/dist/gateway/static/root/assets/logs-page-C2pjbXno.js +2 -0
  57. package/dist/gateway/static/root/assets/{management-settings-IYk9xLgt.js → management-settings-CRspx0oY.js} +1 -1
  58. package/dist/gateway/static/root/assets/{markdown-split-D8e6pRMH.js → markdown-split-G3PTpGw3.js} +1 -1
  59. package/dist/gateway/static/root/assets/{markdown-view-D0fiJjBQ.js → markdown-view-D4FPJZ91.js} +1 -1
  60. package/dist/gateway/static/root/assets/{media-plugins-CCq6TtEf.js → media-plugins-DT0P7j7u.js} +1 -1
  61. package/dist/gateway/static/root/assets/messages-B701TEZ5.js +3 -0
  62. package/dist/gateway/static/root/assets/{notes-api-BBtWnlUU.js → notes-api-q7HjYO07.js} +1 -1
  63. package/dist/gateway/static/root/assets/{notes-page-BKe1xa3U.js → notes-page-Cgl2h7AR.js} +1 -1
  64. package/dist/gateway/static/root/assets/notes-workbench-DFMQYyGJ.js +4 -0
  65. package/dist/gateway/static/root/assets/page-tabs-BaEQMYm_.js +1 -0
  66. package/dist/gateway/static/root/assets/preview-open-alternatives-CsNVTKC0.js +1 -0
  67. package/dist/gateway/static/root/assets/{product-open-page-DXe5iWI6.js → product-open-page-ComKLO4D.js} +1 -1
  68. package/dist/gateway/static/root/assets/project-detail-page-DUFmQscH.js +1 -0
  69. package/dist/gateway/static/root/assets/projects-page-CTWxt3dv.js +1 -0
  70. package/dist/gateway/static/root/assets/{registry-api-xj5gOva_.js → registry-api-BBoJ7khF.js} +1 -1
  71. package/dist/gateway/static/root/assets/remote-access-hub-qmG-3qjj.js +1 -0
  72. package/dist/gateway/static/root/assets/rotate-cw-LIg3Am9S.js +1 -0
  73. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-BJTvmBCA.js → runtime-tools-settings-panel-CXHQc53b.js} +2 -2
  74. package/dist/gateway/static/root/assets/{schema-form-DvGBa_7R.js → schema-form-3jTDF2lJ.js} +1 -1
  75. package/dist/gateway/static/root/assets/search-DA7gz22f.js +1 -0
  76. package/dist/gateway/static/root/assets/sessions-page-D_We4_MV.js +1 -0
  77. package/dist/gateway/static/root/assets/settings-advanced-gate-B_QhPgU0.js +1 -0
  78. package/dist/gateway/static/root/assets/settings-form-section-CUDozALU.js +1 -0
  79. package/dist/gateway/static/root/assets/{settings-loading-skeleton-sbef7GTm.js → settings-loading-skeleton-H3ZH6a6l.js} +1 -1
  80. package/dist/gateway/static/root/assets/{settings-page-BNGxxXZe.js → settings-page-tx29z21o.js} +1 -1
  81. package/dist/gateway/static/root/assets/setup-status-panel-VunfXpTX.js +1 -0
  82. package/dist/gateway/static/root/assets/{share-preview-page-C1523ij3.js → share-preview-page-MyThymEx.js} +1 -1
  83. package/dist/gateway/static/root/assets/shares-settings-DkZvY1cr.js +1 -0
  84. package/dist/gateway/static/root/assets/skill-reload-api-DVDOh1iY.js +1 -0
  85. package/dist/gateway/static/root/assets/skills-page-BOOyMnno.js +2 -0
  86. package/dist/gateway/static/root/assets/{skills-page.utils-Ditgz7Vo.js → skills-page.utils-Bl5Yv3Cx.js} +1 -1
  87. package/dist/gateway/static/root/assets/system-settings-panel-DwQ3O1ta.js +1 -0
  88. package/dist/gateway/static/root/assets/task-detail-page-BwOyrADL.js +1 -0
  89. package/dist/gateway/static/root/assets/{theme-store-DgSjes3O.js → theme-store-Br4BtK4x.js} +1 -1
  90. package/dist/gateway/static/root/assets/typed-models-lib-q5-Vfqd8.js +1 -0
  91. package/dist/gateway/static/root/assets/{use-autosave-Bp_qFZkl.js → use-autosave-DRS3RwS9.js} +1 -1
  92. package/dist/gateway/static/root/assets/user-context-page-ClV2r3Cr.js +1 -0
  93. package/dist/gateway/static/root/assets/{voice-api-key-field-hbzDfErG.js → voice-api-key-field-CGTE5156.js} +1 -1
  94. package/dist/gateway/static/root/assets/{work-discovery-overlay-DZVib-04.js → work-discovery-overlay-CW-HKD7h.js} +1 -1
  95. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-C2RKay1p.js → workflow-run-setup-panel-Dtr9fDC8.js} +2 -2
  96. package/dist/gateway/static/root/assets/workflows-page-CDOyNgZf.js +5 -0
  97. package/dist/gateway/static/root/index.html +20 -11
  98. package/dist/package.js +1 -1
  99. package/dist/packages/gateway-contract/src/new-session.js +99 -0
  100. package/dist/packages/gateway-contract/src/tasks.js +5 -0
  101. package/dist/packages/gateway-contract/src/user-message-display.js +55 -0
  102. package/dist/src/agent/agent-manager.js +5 -4
  103. package/dist/src/agent/background-review/prompts.d.ts +1 -1
  104. package/dist/src/agent/background-review/prompts.js +2 -2
  105. package/dist/src/agent/background-review/run-background-review.js +144 -16
  106. package/dist/src/agent/embedded/model-runtime.js +1 -1
  107. package/dist/src/agent/embedded/run-for-session.js +1 -1
  108. package/dist/src/agent/image/tool-model-config.js +1 -1
  109. package/dist/src/agent/inbound/turn-dispatcher.d.ts +3 -1
  110. package/dist/src/agent/inbound/turn-dispatcher.js +2 -1
  111. package/dist/src/agent/ipc/inbox.js +1 -1
  112. package/dist/src/agent/memory/context/types.d.ts +1 -1
  113. package/dist/src/agent/memory/manager.d.ts +2 -1
  114. package/dist/src/agent/memory/manager.js +2 -6
  115. package/dist/src/agent/memory/understanding/service.d.ts +1 -0
  116. package/dist/src/agent/memory/understanding/service.js +179 -36
  117. package/dist/src/agent/memory/understanding/types.d.ts +6 -0
  118. package/dist/src/agent/messaging/command-handler.d.ts +2 -0
  119. package/dist/src/agent/messaging/command-handler.js +3 -1
  120. package/dist/src/agent/service/direct-turn-helpers.d.ts +3 -0
  121. package/dist/src/agent/service/direct-turn-helpers.js +13 -3
  122. package/dist/src/agent/service/process-direct-streaming.d.ts +2 -1
  123. package/dist/src/agent/service/process-direct-streaming.js +12 -11
  124. package/dist/src/agent/service.js +2 -2
  125. package/dist/src/agent/session/session-config-service.d.ts +1 -0
  126. package/dist/src/agent/session/session-config-service.js +11 -0
  127. package/dist/src/agent/session/session-inspector.d.ts +1 -0
  128. package/dist/src/agent/session/session-inspector.js +2 -1
  129. package/dist/src/agent/skills/hub-lock.js +1 -1
  130. package/dist/src/agent/source-context/budget.d.ts +3 -0
  131. package/dist/src/agent/source-context/budget.js +21 -0
  132. package/dist/src/agent/source-context/index.js +3 -3
  133. package/dist/src/agent/source-context/injector.d.ts +2 -2
  134. package/dist/src/agent/source-context/injector.js +19 -9
  135. package/dist/src/agent/source-context/types.d.ts +16 -0
  136. package/dist/src/agent/source-context/types.js +25 -1
  137. package/dist/src/agent/tasks/task-judge-service.js +3 -3
  138. package/dist/src/agent/tool-manuals/xopc-use.d.ts +1 -1
  139. package/dist/src/agent/tool-manuals/xopc-use.js +19 -2
  140. package/dist/src/agent/tools/xopc-use-tool.js +62 -2
  141. package/dist/src/ai-assist/text-assist.js +1 -1
  142. package/dist/src/auth/credentials.js +2 -2
  143. package/dist/src/auth/profiles/store.js +1 -1
  144. package/dist/src/auth/sync-provider-auth.js +2 -2
  145. package/dist/src/browser/backend-from-config.d.ts +8 -0
  146. package/dist/src/browser/backend-from-config.js +16 -1
  147. package/dist/src/browser/providers/browser-ext-install.d.ts +3 -2
  148. package/dist/src/browser/providers/browser-ext-install.js +5 -3
  149. package/dist/src/chat-commands/builtins/review.js +11 -2
  150. package/dist/src/chat-commands/builtins/understanding.js +11 -4
  151. package/dist/src/chat-commands/types.d.ts +4 -0
  152. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  153. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  154. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  155. package/dist/src/cli/commands/extension.js +1 -1
  156. package/dist/src/cli/commands/models.js +1 -1
  157. package/dist/src/config/index.js +4 -4
  158. package/dist/src/config/loader.js +1 -1
  159. package/dist/src/config/models-json.d.ts +20 -20
  160. package/dist/src/config/models-json.js +1 -1
  161. package/dist/src/connectors/connected-source-understanding.d.ts +1 -0
  162. package/dist/src/connectors/connected-source-understanding.js +82 -34
  163. package/dist/src/connectors/learning-coordinator.js +57 -11
  164. package/dist/src/extensions/lockfile.js +1 -1
  165. package/dist/src/extensions/update.js +1 -1
  166. package/dist/src/gateway/agents-admin.js +1 -1
  167. package/dist/src/gateway/chat-stream/mapper.js +18 -0
  168. package/dist/src/gateway/file-path-classifier.js +1 -1
  169. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  170. package/dist/src/gateway/hono/routes/agent-stream.js +12 -2
  171. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  172. package/dist/src/gateway/hono/routes/commands-skills.js +1 -0
  173. package/dist/src/gateway/hono/routes/models.js +1 -1
  174. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +46 -2
  175. package/dist/src/gateway/hono/routes/session-input-handler.js +23 -3
  176. package/dist/src/gateway/hono/routes/sessions.js +17 -20
  177. package/dist/src/gateway/hono/routes/tasks.js +25 -0
  178. package/dist/src/gateway/hono/routes/understanding-sources.d.ts +9 -0
  179. package/dist/src/gateway/hono/routes/understanding-sources.js +127 -31
  180. package/dist/src/gateway/hono/routes/workflows.js +2 -2
  181. package/dist/src/gateway/hono/routes/you.js +71 -4
  182. package/dist/src/gateway/service/agent-runner.d.ts +7 -2
  183. package/dist/src/gateway/service/agent-runner.js +21 -1
  184. package/dist/src/gateway/service/config-coordinator.js +2 -2
  185. package/dist/src/gateway/service/run-gateway-agent.d.ts +2 -0
  186. package/dist/src/gateway/service/run-gateway-agent.js +2 -1
  187. package/dist/src/gateway/service/session-input-coordinator.d.ts +8 -2
  188. package/dist/src/gateway/service/session-input-coordinator.js +62 -3
  189. package/dist/src/gateway/service/sessions-api.d.ts +1 -0
  190. package/dist/src/gateway/service.d.ts +3 -2
  191. package/dist/src/gateway/service.js +25 -15
  192. package/dist/src/gateway/user-turn-input.d.ts +2 -0
  193. package/dist/src/gateway/xopc-cloud-capability-setup.d.ts +3 -2
  194. package/dist/src/gateway/xopc-cloud-capability-setup.js +16 -3
  195. package/dist/src/infra/update-runner.js +1 -1
  196. package/dist/src/knowledge/connected-understanding-pipeline.d.ts +1 -1
  197. package/dist/src/knowledge/connected-understanding-pipeline.js +4 -2
  198. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
  199. package/dist/src/providers/index.js +2 -2
  200. package/dist/src/providers/model-registry.js +1 -1
  201. package/dist/src/providers/register-runtime-providers.js +1 -1
  202. package/dist/src/retrieval/queryProfile.d.ts +1 -0
  203. package/dist/src/retrieval/queryProfile.js +9 -1
  204. package/dist/src/session/client-history.d.ts +11 -0
  205. package/dist/src/session/client-history.js +24 -2
  206. package/dist/src/session/config-types.d.ts +1 -1
  207. package/dist/src/session/session-title.js +2 -3
  208. package/dist/src/session/store.js +1 -0
  209. package/dist/src/session/transcript-outline.js +5 -2
  210. package/dist/src/session/types.d.ts +1 -0
  211. package/dist/src/session/user-message-display.d.ts +4 -0
  212. package/dist/src/session/user-message-display.js +22 -0
  213. package/dist/src/storage/sqlite/context-extraction-repository.d.ts +57 -0
  214. package/dist/src/storage/sqlite/context-extraction-repository.js +119 -0
  215. package/dist/src/storage/sqlite/context-relation-repository.d.ts +50 -0
  216. package/dist/src/storage/sqlite/context-relation-repository.js +97 -0
  217. package/dist/src/storage/sqlite/index.d.ts +4 -2
  218. package/dist/src/storage/sqlite/index.js +5 -3
  219. package/dist/src/storage/sqlite/migrations/126_focus_context_governance.sql +72 -0
  220. package/dist/src/storage/sqlite/migrations/127_context_object_origin.sql +36 -0
  221. package/dist/src/storage/sqlite/migrations/128_context_extraction.sql +73 -0
  222. package/dist/src/storage/sqlite/migrations/129_focus_versions.sql +51 -0
  223. package/dist/src/storage/sqlite/migrations/130_context_evidence_provenance.sql +18 -0
  224. package/dist/src/storage/sqlite/migrations/131_session_input_contexts.sql +2 -0
  225. package/dist/src/storage/sqlite/migrations/132_transcript_source_context_metadata.sql +34 -0
  226. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  227. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  228. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  229. package/dist/src/storage/sqlite/schema.js +1 -1
  230. package/dist/src/storage/sqlite/session-input-repository.d.ts +8 -0
  231. package/dist/src/storage/sqlite/session-input-repository.js +19 -7
  232. package/dist/src/storage/sqlite/session-turn-replace-repository.d.ts +3 -0
  233. package/dist/src/storage/sqlite/session-turn-replace-repository.js +3 -2
  234. package/dist/src/storage/sqlite/transcript-repository.js +29 -3
  235. package/dist/src/storage/sqlite/user-context-repository.d.ts +4 -1
  236. package/dist/src/storage/sqlite/user-context-repository.js +65 -29
  237. package/dist/src/tasks/index.d.ts +1 -0
  238. package/dist/src/tasks/index.js +2 -1
  239. package/dist/src/tasks/task-deletion-service.d.ts +21 -0
  240. package/dist/src/tasks/task-deletion-service.js +35 -0
  241. package/dist/src/tasks/task-repository.js +22 -1
  242. package/dist/src/tui/backends/embedded-backend.js +5 -3
  243. package/dist/src/tui/backends/gateway-realtime-backend.js +5 -3
  244. package/dist/src/tui/chat-history.js +2 -1
  245. package/dist/src/tui/tui-agent-events.js +4 -2
  246. package/dist/src/tui/tui-commands.d.ts +1 -0
  247. package/dist/src/tui/tui-commands.js +8 -3
  248. package/dist/src/tui/tui-empty-session-cleanup.d.ts +0 -1
  249. package/dist/src/tui/tui-empty-session-cleanup.js +1 -11
  250. package/dist/src/tui/tui-new-session-preferences.d.ts +10 -0
  251. package/dist/src/tui/tui-new-session-preferences.js +32 -0
  252. package/dist/src/tui/tui-session-actions.d.ts +1 -0
  253. package/dist/src/tui/tui-session-actions.js +2 -1
  254. package/dist/src/tui/tui-settings.d.ts +2 -0
  255. package/dist/src/tui/tui-settings.js +4 -1
  256. package/dist/src/tui/tui-startup-resources.js +1 -1
  257. package/dist/src/tui/tui-types.d.ts +1 -0
  258. package/dist/src/tui/tui.js +58 -5
  259. package/dist/src/tunnel/frpc-process.js +3 -0
  260. package/dist/src/tunnel/tunnel-service.d.ts +2 -0
  261. package/dist/src/tunnel/tunnel-service.js +40 -28
  262. package/dist/src/user-context/context-objects.d.ts +17 -0
  263. package/dist/src/user-context/context-objects.js +99 -0
  264. package/dist/src/user-context/domain.d.ts +13 -1
  265. package/dist/src/user-context/evaluation/harness.d.ts +13 -0
  266. package/dist/src/user-context/evaluation/harness.js +31 -0
  267. package/dist/src/user-context/extraction/registry.d.ts +26 -0
  268. package/dist/src/user-context/extraction/registry.js +113 -0
  269. package/dist/src/user-context/extraction/repair.d.ts +19 -0
  270. package/dist/src/user-context/extraction/repair.js +68 -0
  271. package/dist/src/user-context/planner.js +214 -57
  272. package/dist/src/user-context/retriever.js +69 -9
  273. package/dist/src/user-context/sources/index.js +2 -2
  274. package/dist/src/user-context/sources/processing-policy.d.ts +2 -0
  275. package/dist/src/user-context/sources/processing-policy.js +7 -0
  276. package/dist/src/user-context/sources/repository.d.ts +23 -4
  277. package/dist/src/user-context/sources/repository.js +122 -12
  278. package/dist/src/user-context/sources/types.d.ts +10 -1
  279. package/dist/src/user-context/understanding.js +1 -1
  280. package/dist/src/work-discovery/service.js +21 -5
  281. package/dist/src/work-discovery/source-repository.js +1 -1
  282. package/dist/src/workflows/service/workflow-run-service.js +1 -1
  283. package/package.json +3 -3
  284. package/dist/gateway/static/root/assets/agents-Dj86bHkl.js +0 -68
  285. package/dist/gateway/static/root/assets/app-management-settings-panel-D-M6GN-8.js +0 -1
  286. package/dist/gateway/static/root/assets/appearance-settings-XDhmzdIc.js +0 -1
  287. package/dist/gateway/static/root/assets/apps-page-sfO835uz.js +0 -1
  288. package/dist/gateway/static/root/assets/automations-workspace-PptuZgoo.js +0 -6
  289. package/dist/gateway/static/root/assets/browser-settings-page-BoCmzMFV.js +0 -8
  290. package/dist/gateway/static/root/assets/capabilities-settings-panel-DhkJsU8Z.js +0 -7
  291. package/dist/gateway/static/root/assets/capability-presets-settings-panel-Dm7T61fE.js +0 -3
  292. package/dist/gateway/static/root/assets/channels-settings-dG6UFVqt.js +0 -1
  293. package/dist/gateway/static/root/assets/channels-status-swr-DgJxfNyK.js +0 -1
  294. package/dist/gateway/static/root/assets/chat-terminal-dock-CT5yoSMD.js +0 -36
  295. package/dist/gateway/static/root/assets/connectors-page-BC6Ft9SU.js +0 -2
  296. package/dist/gateway/static/root/assets/dependency-picker-DZVSgLXH.js +0 -1
  297. package/dist/gateway/static/root/assets/desktop-pet-settings-Bw4cCFzI.js +0 -1
  298. package/dist/gateway/static/root/assets/directory-picker-path-field-Cbst7IXR.js +0 -1
  299. package/dist/gateway/static/root/assets/extension-settings-page-C1PAKSy2.js +0 -1
  300. package/dist/gateway/static/root/assets/gateway-config-api-Bch9vO6t.js +0 -1
  301. package/dist/gateway/static/root/assets/gateway-settings-DkDxZFGG.js +0 -1
  302. package/dist/gateway/static/root/assets/heartbeat-settings-DXNMxy5b.js +0 -1
  303. package/dist/gateway/static/root/assets/home-page-CYcpVFNT.js +0 -1
  304. package/dist/gateway/static/root/assets/index-Dgb1R07E.css +0 -2
  305. package/dist/gateway/static/root/assets/index-DlOYwVFK.js +0 -108
  306. package/dist/gateway/static/root/assets/local-app-workbench-page-BFrgPwGE.js +0 -2
  307. package/dist/gateway/static/root/assets/logs-page-CPweLw3k.js +0 -2
  308. package/dist/gateway/static/root/assets/messages-B9WQcZ1V.js +0 -3
  309. package/dist/gateway/static/root/assets/notes-workbench-wieRAd1y.js +0 -4
  310. package/dist/gateway/static/root/assets/page-tabs-Bsluqyfb.js +0 -1
  311. package/dist/gateway/static/root/assets/preview-open-alternatives-BrpTWv44.js +0 -1
  312. package/dist/gateway/static/root/assets/project-detail-page-Cww6V7HJ.js +0 -1
  313. package/dist/gateway/static/root/assets/projects-page-D0LKhCCw.js +0 -1
  314. package/dist/gateway/static/root/assets/remote-access-hub-Sf4Pde6Z.js +0 -1
  315. package/dist/gateway/static/root/assets/sessions-page-S5gvgfu5.js +0 -1
  316. package/dist/gateway/static/root/assets/settings-advanced-gate-B3XvdEy8.js +0 -1
  317. package/dist/gateway/static/root/assets/settings-form-section-CiGFtdD8.js +0 -1
  318. package/dist/gateway/static/root/assets/setup-status-panel-CGU_Mxjr.js +0 -1
  319. package/dist/gateway/static/root/assets/shares-settings-k0UQ8WxO.js +0 -1
  320. package/dist/gateway/static/root/assets/skill-reload-api-DQ1GvL1w.js +0 -1
  321. package/dist/gateway/static/root/assets/skills-page-OuHd9GcN.js +0 -2
  322. package/dist/gateway/static/root/assets/system-settings-panel-CERqCsz2.js +0 -1
  323. package/dist/gateway/static/root/assets/task-detail-page-BnRNL2sn.js +0 -1
  324. package/dist/gateway/static/root/assets/typed-models-lib-abEJNkCO.js +0 -1
  325. package/dist/gateway/static/root/assets/user-context-page-Cnkaiky5.js +0 -1
  326. package/dist/gateway/static/root/assets/workflows-page-B_VlcKiK.js +0 -5
@@ -1,4 +1,5 @@
1
1
  import { getSqliteDatabase, runSqliteWriteTransaction } from "../../storage/sqlite/transaction.js";
2
+ import "../domain.js";
2
3
  import { randomUUID } from "node:crypto";
3
4
  //#region src/user-context/sources/repository.ts
4
5
  function record(value) {
@@ -53,19 +54,82 @@ function runFromRow(row) {
53
54
  function focusFromRow(row) {
54
55
  return {
55
56
  id: row.focus_id,
57
+ versionId: row.current_version_id,
58
+ principalId: row.principal_id,
56
59
  canonicalKey: row.canonical_key,
57
60
  title: row.title,
58
61
  summary: row.summary,
59
62
  horizon: row.horizon,
60
63
  status: row.status,
61
64
  confidence: row.confidence,
62
- ...row.project_id ? { projectId: row.project_id } : {},
65
+ scope: {
66
+ type: row.scope_type,
67
+ ...row.scope_id ? { id: row.scope_id } : {}
68
+ },
69
+ explicitness: row.explicitness,
70
+ sensitivity: row.sensitivity,
71
+ disclosurePolicy: row.disclosure_policy,
72
+ ...row.valid_from == null ? {} : { validFrom: row.valid_from },
73
+ ...row.valid_to == null ? {} : { validTo: row.valid_to },
74
+ ...row.review_at == null ? {} : { reviewAt: row.review_at },
63
75
  evidenceRefs: strings(row.evidence_refs_json),
64
76
  ...row.source_run_id ? { sourceRunId: row.source_run_id } : {},
65
77
  createdAt: row.created_at,
66
78
  updatedAt: row.updated_at
67
79
  };
68
80
  }
81
+ function focusSnapshot(row) {
82
+ return {
83
+ horizon: row.horizon,
84
+ status: row.status,
85
+ confidence: row.confidence,
86
+ scopeType: row.scope_type,
87
+ scopeId: row.scope_id,
88
+ explicitness: row.explicitness,
89
+ sensitivity: row.sensitivity,
90
+ disclosurePolicy: row.disclosure_policy,
91
+ validFrom: row.valid_from,
92
+ validTo: row.valid_to,
93
+ reviewAt: row.review_at,
94
+ evidenceRefs: strings(row.evidence_refs_json)
95
+ };
96
+ }
97
+ function sameFocusVersion(left, right) {
98
+ return Boolean(left && left.title === right.title && left.summary === right.summary && JSON.stringify(focusSnapshot(left)) === JSON.stringify(focusSnapshot(right)));
99
+ }
100
+ function linkFocusEvidence(versionId, evidenceRefs, confidence) {
101
+ if (!evidenceRefs.length) return;
102
+ const placeholders = evidenceRefs.map(() => "?").join(", ");
103
+ getSqliteDatabase().prepare(`INSERT OR IGNORE INTO user_focus_evidence_links (
104
+ version_id, evidence_id, relation, confidence
105
+ ) SELECT ?, evidence_id, 'supports', ? FROM context_evidence WHERE source_ref IN (${placeholders})`).run(versionId, confidence, ...evidenceRefs);
106
+ }
107
+ function listUserFocusEvidence(focusId) {
108
+ return getSqliteDatabase().prepare(`SELECT DISTINCT e.* FROM context_evidence e
109
+ JOIN user_focus_evidence_links l ON l.evidence_id = e.evidence_id
110
+ JOIN user_focus_versions v ON v.version_id = l.version_id
111
+ WHERE v.focus_id = ? ORDER BY e.observed_at DESC`).all(focusId).map((row) => ({
112
+ id: row.evidence_id,
113
+ sourceType: row.source_type,
114
+ ...row.source_instance_id ? { sourceInstanceId: row.source_instance_id } : {},
115
+ sourceRef: row.source_ref,
116
+ ...row.source_run_id ? { sourceRunId: row.source_run_id } : {},
117
+ ...row.source_item_id ? { sourceItemId: row.source_item_id } : {},
118
+ ...row.session_id ? { sessionId: row.session_id } : {},
119
+ ...row.turn_id ? { turnId: row.turn_id } : {},
120
+ ...row.message_id ? { messageId: row.message_id } : {},
121
+ ...row.content_hash ? { contentHash: row.content_hash } : {},
122
+ ...row.retention_policy ? { retentionPolicy: row.retention_policy } : {},
123
+ ...row.processing_policy ? { processingPolicy: row.processing_policy } : {},
124
+ ...row.extractor_id ? { extractorId: row.extractor_id } : {},
125
+ ...row.extractor_version ? { extractorVersion: row.extractor_version } : {},
126
+ ...row.redacted_excerpt ? { redactedExcerpt: row.redacted_excerpt } : {},
127
+ trustLevel: row.trust_level,
128
+ observedAt: row.observed_at,
129
+ ingestedAt: row.ingested_at ?? row.created_at,
130
+ createdAt: row.created_at
131
+ }));
132
+ }
69
133
  function listUnderstandingSourceGrants(options = {}) {
70
134
  return getSqliteDatabase().prepare(`SELECT * FROM understanding_source_grants ${options.includeRevoked ? "" : "WHERE status = 'active'"} ORDER BY updated_at DESC`).all().map(grantFromRow);
71
135
  }
@@ -85,8 +149,7 @@ function upsertUnderstandingSourceGrant(input) {
85
149
  ) VALUES (?, ?, ?, ?, ?, ?, 'active', ?, ?, ?, ?, ?, ?, ?, ?)
86
150
  ON CONFLICT(source_key) DO UPDATE SET
87
151
  adapter_id = excluded.adapter_id, category = excluded.category, platform = excluded.platform,
88
- display_name = excluded.display_name, status = 'active', access_mode = excluded.access_mode,
89
- retention_policy = excluded.retention_policy, processing_policy = excluded.processing_policy,
152
+ display_name = excluded.display_name, status = 'active',
90
153
  config_json = excluded.config_json, checkpoint_json = excluded.checkpoint_json,
91
154
  last_collected_at = COALESCE(excluded.last_collected_at, understanding_source_grants.last_collected_at),
92
155
  updated_at = excluded.updated_at
@@ -104,6 +167,16 @@ function updateUnderstandingSourceGrantCheckpoint(id, input) {
104
167
  `).run(JSON.stringify(input.checkpoint ?? current.checkpoint), input.lastCollectedAt ?? current.lastCollectedAt ?? null, now, id));
105
168
  return getUnderstandingSourceGrant(id);
106
169
  }
170
+ function updateUnderstandingSourceGrantPolicies(id, patch) {
171
+ const current = getUnderstandingSourceGrant(id);
172
+ if (!current) return null;
173
+ runSqliteWriteTransaction((db) => db.prepare(`
174
+ UPDATE understanding_source_grants
175
+ SET access_mode = ?, retention_policy = ?, processing_policy = ?, updated_at = ?
176
+ WHERE grant_id = ?
177
+ `).run(patch.accessMode ?? current.accessMode, patch.retentionPolicy ?? current.retentionPolicy, patch.processingPolicy ?? current.processingPolicy, patch.nowMs ?? Date.now(), id));
178
+ return getUnderstandingSourceGrant(id);
179
+ }
107
180
  function revokeUnderstandingSourceGrant(id, nowMs = Date.now()) {
108
181
  runSqliteWriteTransaction((db) => db.prepare("UPDATE understanding_source_grants SET status = 'revoked', updated_at = ? WHERE grant_id = ?").run(nowMs, id));
109
182
  return getUnderstandingSourceGrant(id);
@@ -138,11 +211,20 @@ function updateUnderstandingSourceRun(id, patch) {
138
211
  function upsertUserFocus(input) {
139
212
  const id = randomUUID();
140
213
  const now = input.nowMs ?? Date.now();
141
- runSqliteWriteTransaction((db) => db.prepare(`
214
+ const scope = input.scope ?? { type: "global" };
215
+ const explicitness = input.explicitness ?? "inferred";
216
+ const sensitivity = input.sensitivity ?? "normal";
217
+ const disclosurePolicy = input.disclosurePolicy ?? "referenceable";
218
+ const existingRow = getSqliteDatabase().prepare("SELECT * FROM user_focuses WHERE canonical_key = ?").get(input.canonicalKey);
219
+ if (existingRow?.explicitness === "explicit" && explicitness !== "explicit") return focusFromRow(existingRow);
220
+ let currentVersionId = existingRow?.current_version_id;
221
+ runSqliteWriteTransaction((db) => {
222
+ db.prepare(`
142
223
  INSERT INTO user_focuses (
143
- focus_id, canonical_key, title, summary, horizon, status, confidence, project_id,
144
- evidence_refs_json, source_run_id, created_at, updated_at
145
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
224
+ focus_id, principal_id, canonical_key, title, summary, horizon, status, confidence,
225
+ scope_type, scope_id, explicitness, sensitivity, disclosure_policy,
226
+ valid_from, valid_to, review_at, evidence_refs_json, source_run_id, created_at, updated_at
227
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
146
228
  ON CONFLICT(canonical_key) DO UPDATE SET title = excluded.title, summary = excluded.summary,
147
229
  horizon = excluded.horizon,
148
230
  status = CASE
@@ -151,9 +233,23 @@ function upsertUserFocus(input) {
151
233
  ELSE excluded.status
152
234
  END,
153
235
  confidence = excluded.confidence,
154
- project_id = excluded.project_id, evidence_refs_json = excluded.evidence_refs_json,
236
+ scope_type = excluded.scope_type, scope_id = excluded.scope_id,
237
+ explicitness = excluded.explicitness, sensitivity = excluded.sensitivity,
238
+ disclosure_policy = excluded.disclosure_policy, valid_from = excluded.valid_from,
239
+ valid_to = excluded.valid_to, review_at = excluded.review_at,
240
+ evidence_refs_json = excluded.evidence_refs_json,
155
241
  source_run_id = excluded.source_run_id, updated_at = excluded.updated_at
156
- `).run(id, input.canonicalKey, input.title, input.summary, input.horizon, input.status, input.confidence, input.projectId ?? null, JSON.stringify(input.evidenceRefs), input.sourceRunId ?? null, now, now));
242
+ `).run(id, input.principalId ?? "local-owner", input.canonicalKey, input.title, input.summary, input.horizon, input.status, input.confidence, scope.type, scope.id ?? null, explicitness, sensitivity, disclosurePolicy, input.validFrom ?? null, input.validTo ?? null, input.reviewAt ?? null, JSON.stringify(input.evidenceRefs), input.sourceRunId ?? null, now, now);
243
+ const nextRow = db.prepare("SELECT * FROM user_focuses WHERE canonical_key = ?").get(input.canonicalKey);
244
+ if (!sameFocusVersion(existingRow, nextRow)) {
245
+ currentVersionId = randomUUID();
246
+ db.prepare(`INSERT INTO user_focus_versions (
247
+ version_id, focus_id, title, summary, snapshot_json, created_by, change_reason, created_at
248
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)`).run(currentVersionId, nextRow.focus_id, nextRow.title, nextRow.summary, JSON.stringify(focusSnapshot(nextRow)), explicitness === "explicit" ? "user" : input.sourceRunId ? "connector" : "runtime", input.changeReason ?? (existingRow ? "Focus updated" : "Focus created"), now);
249
+ db.prepare("UPDATE user_focuses SET current_version_id = ? WHERE focus_id = ?").run(currentVersionId, nextRow.focus_id);
250
+ }
251
+ });
252
+ if (currentVersionId) linkFocusEvidence(currentVersionId, input.evidenceRefs, input.confidence);
157
253
  return focusFromRow(getSqliteDatabase().prepare("SELECT * FROM user_focuses WHERE canonical_key = ?").get(input.canonicalKey));
158
254
  }
159
255
  function listUserFocuses(statuses) {
@@ -161,8 +257,22 @@ function listUserFocuses(statuses) {
161
257
  const placeholders = statuses.map(() => "?").join(", ");
162
258
  return getSqliteDatabase().prepare(`SELECT * FROM user_focuses WHERE status IN (${placeholders}) ORDER BY updated_at DESC`).all(...statuses).map(focusFromRow);
163
259
  }
164
- function setUserFocusStatus(id, status, nowMs = Date.now()) {
165
- runSqliteWriteTransaction((db) => db.prepare("UPDATE user_focuses SET status = ?, updated_at = ? WHERE focus_id = ?").run(status, nowMs, id));
260
+ function updateUserFocus(id, patch, nowMs = Date.now()) {
261
+ const currentRow = getSqliteDatabase().prepare("SELECT * FROM user_focuses WHERE focus_id = ?").get(id);
262
+ if (!currentRow) return null;
263
+ const current = focusFromRow(currentRow);
264
+ if ((patch.title ?? current.title) === current.title && (patch.summary ?? current.summary) === current.summary && (patch.status ?? current.status) === current.status) return current;
265
+ const versionId = randomUUID();
266
+ runSqliteWriteTransaction((db) => {
267
+ db.prepare(`UPDATE user_focuses
268
+ SET title = ?, summary = ?, status = ?, updated_at = ? WHERE focus_id = ?`).run(patch.title ?? current.title, patch.summary ?? current.summary, patch.status ?? current.status, nowMs, id);
269
+ const nextRow = db.prepare("SELECT * FROM user_focuses WHERE focus_id = ?").get(id);
270
+ db.prepare(`INSERT INTO user_focus_versions (
271
+ version_id, focus_id, title, summary, snapshot_json, created_by, change_reason, created_at
272
+ ) VALUES (?, ?, ?, ?, ?, ?, 'Focus updated', ?)`).run(versionId, id, nextRow.title, nextRow.summary, JSON.stringify(focusSnapshot(nextRow)), current.explicitness === "explicit" ? "user" : "runtime", nowMs);
273
+ db.prepare("UPDATE user_focuses SET current_version_id = ? WHERE focus_id = ?").run(versionId, id);
274
+ });
275
+ linkFocusEvidence(versionId, current.evidenceRefs, current.confidence);
166
276
  const row = getSqliteDatabase().prepare("SELECT * FROM user_focuses WHERE focus_id = ?").get(id);
167
277
  return row ? focusFromRow(row) : null;
168
278
  }
@@ -170,4 +280,4 @@ function deleteUserFocus(id) {
170
280
  return Number(getSqliteDatabase().prepare("DELETE FROM user_focuses WHERE focus_id = ?").run(id).changes) > 0;
171
281
  }
172
282
  //#endregion
173
- export { createUnderstandingSourceRun, deleteUserFocus, getUnderstandingSourceGrant, getUnderstandingSourceRun, listUnderstandingSourceGrants, listUnderstandingSourceRuns, listUserFocuses, revokeUnderstandingSourceGrant, setUserFocusStatus, updateUnderstandingSourceGrantCheckpoint, updateUnderstandingSourceRun, upsertUnderstandingSourceGrant, upsertUserFocus };
283
+ export { createUnderstandingSourceRun, deleteUserFocus, getUnderstandingSourceGrant, getUnderstandingSourceRun, listUnderstandingSourceGrants, listUnderstandingSourceRuns, listUserFocusEvidence, listUserFocuses, revokeUnderstandingSourceGrant, updateUnderstandingSourceGrantCheckpoint, updateUnderstandingSourceGrantPolicies, updateUnderstandingSourceRun, updateUserFocus, upsertUnderstandingSourceGrant, upsertUserFocus };
@@ -1,3 +1,4 @@
1
+ import type { UserContextScope, UserUnderstanding } from '../domain.js';
1
2
  export type UnderstandingSourcePlatform = 'darwin' | 'win32' | 'linux' | 'all';
2
3
  export type UnderstandingSourceCategory = 'files' | 'recent_documents' | 'calendar' | 'tasks' | 'notes' | 'mail' | 'messages' | 'code_activity';
3
4
  export type UnderstandingSourceAccessMode = 'once' | 'continuous';
@@ -75,13 +76,21 @@ export interface UnderstandingSourceRun {
75
76
  }
76
77
  export interface UserFocus {
77
78
  id: string;
79
+ versionId: string;
80
+ principalId: string;
78
81
  canonicalKey: string;
79
82
  title: string;
80
83
  summary: string;
81
84
  horizon: 'current' | 'ongoing' | 'long_term';
82
85
  status: 'candidate' | 'active' | 'paused' | 'completed' | 'rejected';
83
86
  confidence: number;
84
- projectId?: string;
87
+ scope: UserContextScope;
88
+ explicitness: UserUnderstanding['explicitness'];
89
+ sensitivity: UserUnderstanding['sensitivity'];
90
+ disclosurePolicy: UserUnderstanding['disclosurePolicy'];
91
+ validFrom?: number;
92
+ validTo?: number;
93
+ reviewAt?: number;
85
94
  evidenceRefs: string[];
86
95
  sourceRunId?: string;
87
96
  createdAt: number;
@@ -8,7 +8,7 @@ function canonicalUnderstandingKey(kind, statement) {
8
8
  function isSameUserContextScope(left, right) {
9
9
  return left.type === right.type && left.id === right.id;
10
10
  }
11
- const NEGATION = /\b(?:do not|don't|never|avoid|without)\b|(?:不要|不用|无需|从不|避免|禁止)/i;
11
+ const NEGATION = /\b(?:do not|don't|not|never|avoid|without)\b|(?:不要|不用|无需|从不|避免|禁止)/i;
12
12
  function withoutNegation(statement) {
13
13
  return statement.replace(NEGATION, "").replace(/\s+/g, " ").trim();
14
14
  }
@@ -7,6 +7,7 @@ import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
7
7
  import { buildSessionKey, init_session_key } from "../routing/session-key.js";
8
8
  import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
9
9
  import { createUnderstandingSourceRun, getUnderstandingSourceRun, updateUnderstandingSourceGrantCheckpoint, updateUnderstandingSourceRun, upsertUnderstandingSourceGrant, upsertUserFocus } from "../user-context/sources/repository.js";
10
+ import { allowsRemoteSourceProcessing } from "../user-context/sources/processing-policy.js";
10
11
  import { analyzeUnderstandingSources, analyzeWorkContext, workDiscoveryResultMarkdown } from "./analyzer.js";
11
12
  import { previewWorkDiscoveryRoot, probeWorkDiscoveryRoot, summarizeWorkContextSnapshot } from "./probe.js";
12
13
  import { clusterActivityTopics } from "../user-context/sources/activity-clustering.js";
@@ -337,7 +338,7 @@ var WorkDiscoveryService = class {
337
338
  displayName: sourceId,
338
339
  accessMode: "once",
339
340
  retentionPolicy: "derived_only",
340
- processingPolicy: "remote_allowed",
341
+ processingPolicy: "local_only",
341
342
  config: { readOnly: true }
342
343
  });
343
344
  sourceGrants.set(sourceId, grant);
@@ -393,7 +394,7 @@ var WorkDiscoveryService = class {
393
394
  const linkedRun = runId ? getWorkDiscoveryRun(runId) : null;
394
395
  let analysis;
395
396
  try {
396
- analysis = await analyzeUnderstandingSources({
397
+ analysis = allowsRemoteSourceProcessing([...changedSourceIds].map((sourceId) => sourceGrants.get(sourceId)?.processingPolicy ?? "local_only")) ? await analyzeUnderstandingSources({
397
398
  config: this.options.getConfig(),
398
399
  items: analysisItems,
399
400
  ...linkedRun?.result ? { workContext: {
@@ -403,7 +404,15 @@ var WorkDiscoveryService = class {
403
404
  workThreads: linkedRun.result.workThreads
404
405
  } } : {},
405
406
  signal
406
- });
407
+ }) : {
408
+ modelRef: "local-only",
409
+ profileCandidates: [],
410
+ workThreadCandidates: [],
411
+ sourceStatuses: [...changedSourceIds].map((sourceId) => ({
412
+ sourceId,
413
+ status: "completed"
414
+ }))
415
+ };
407
416
  const statusBySource = new Map(analysis.sourceStatuses.map((item) => [item.sourceId, item]));
408
417
  for (const [sourceId, sourceRunId] of sourceRuns) {
409
418
  if (!changedSourceIds.has(sourceId)) continue;
@@ -785,7 +794,10 @@ var WorkDiscoveryService = class {
785
794
  horizon: thread.horizon,
786
795
  status: "candidate",
787
796
  confidence: thread.confidence,
788
- projectId: run.projectId,
797
+ scope: {
798
+ type: "project",
799
+ id: run.projectId
800
+ },
789
801
  evidenceRefs: thread.evidenceIds
790
802
  }));
791
803
  const result = this.persistProfileCandidates(run, {
@@ -1020,7 +1032,11 @@ var WorkDiscoveryService = class {
1020
1032
  horizon: "current",
1021
1033
  status: "active",
1022
1034
  confidence: 1,
1023
- projectId: run.projectId,
1035
+ scope: {
1036
+ type: "project",
1037
+ id: run.projectId
1038
+ },
1039
+ explicitness: "explicit",
1024
1040
  evidenceRefs: [`session://${createHash("sha256").update(run.sessionKey).digest("hex").slice(0, 16)}/recognition`]
1025
1041
  });
1026
1042
  const investigation = getWorkUnderstandingInvestigationForRun(run.id);
@@ -40,7 +40,7 @@ function upsertWorkDiscoveryDirectorySource(input) {
40
40
  displayName: input.displayName,
41
41
  accessMode: "continuous",
42
42
  retentionPolicy: "derived_only",
43
- processingPolicy: "remote_allowed",
43
+ processingPolicy: "local_only",
44
44
  config: {
45
45
  rootPath: input.rootPath,
46
46
  readOnly: true
@@ -1,6 +1,6 @@
1
1
  import { getDefaultAgentId, init_resolve_route } from "../../routing/resolve-route.js";
2
- import { init_providers, resolveModel } from "../../providers/index.js";
3
2
  import { extractProfileAgentId, resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
3
+ import { init_providers, resolveModel } from "../../providers/index.js";
4
4
  import { TaskRepository } from "../../tasks/task-repository.js";
5
5
  import { TaskConversationRepository } from "../../tasks/task-conversation-repository.js";
6
6
  import { TaskRunRepository } from "../../tasks/task-run-repository.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xopcai/xopc",
3
- "version": "0.0.218",
3
+ "version": "0.0.219",
4
4
  "description": "Local-first personal AI assistant with reviewable user understanding, durable tasks, workflows, automations, and local or cloud models.",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -163,10 +163,10 @@
163
163
  "vitepress": "^1.6.4",
164
164
  "vitest": "4.1.5",
165
165
  "vue": "^3.5.35",
166
- "@xopcai/endpoint-tools-protocol": "0.0.0",
167
166
  "@xopcai/gateway-contract": "0.0.0",
168
167
  "@xopcai/realtime-protocol": "0.0.0",
169
- "@xopcai/realtime-client": "0.0.0"
168
+ "@xopcai/realtime-client": "0.0.0",
169
+ "@xopcai/endpoint-tools-protocol": "0.0.0"
170
170
  },
171
171
  "scripts": {
172
172
  "assets:brand": "node scripts/generate-brand-assets.mjs",