@xopcai/xopc 0.0.314 → 0.0.316

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 (257) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
  3. package/dist/extensions/telegram/src/plugin.js +1 -1
  4. package/dist/extensions/telegram/xopc.extension.json +1 -1
  5. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BFkjfurL.js → agent-avatar-dicebear-XIyH14Sn.js} +1 -1
  6. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-DJl_o7Xf.js +1 -0
  7. package/dist/gateway/static/root/assets/agents-CGFhxPFv.js +1 -0
  8. package/dist/gateway/static/root/assets/{api-BYhRsTAc.js → api-Dy056n2_.js} +1 -1
  9. package/dist/gateway/static/root/assets/{app-management-settings-panel-B4kihr-A.js → app-management-settings-panel-Dp7Fcj2Z.js} +1 -1
  10. package/dist/gateway/static/root/assets/{appearance-settings-N9sYmNOx.js → appearance-settings-CSUffLjx.js} +1 -1
  11. package/dist/gateway/static/root/assets/{apps-page-BMcy10_s.js → apps-page-DtIcKfJG.js} +1 -1
  12. package/dist/gateway/static/root/assets/{archive-plugin-k_SuYWyV.js → archive-plugin-D3SdndlF.js} +1 -1
  13. package/dist/gateway/static/root/assets/{attachment-load-DRv5QWUK.js → attachment-load-BgxXYRkd.js} +1 -1
  14. package/dist/gateway/static/root/assets/{automations-page-CkJV3DN0.js → automations-page-krhofMgL.js} +1 -1
  15. package/dist/gateway/static/root/assets/automations-workspace-EbpneB06.js +7 -0
  16. package/dist/gateway/static/root/assets/{binary-plugins-Dg3h3TA7.js → binary-plugins-w6lazTqo.js} +1 -1
  17. package/dist/gateway/static/root/assets/{block-editor-DVhdHntT.js → block-editor-CxHqPODE.js} +5 -5
  18. package/dist/gateway/static/root/assets/{browser-automation-inputs-BMRYUW8_.js → browser-automation-inputs-hNdEgfGG.js} +1 -1
  19. package/dist/gateway/static/root/assets/{browser-automations-page-Byv6-FY2.js → browser-automations-page-BYsGJ_xs.js} +2 -2
  20. package/dist/gateway/static/root/assets/browser-settings-page-CP_c5q0V.js +3 -0
  21. package/dist/gateway/static/root/assets/capabilities-settings-panel-ljW3s3vv.js +8 -0
  22. package/dist/gateway/static/root/assets/channels-settings-CR9SRgFp.js +1 -0
  23. package/dist/gateway/static/root/assets/{chat-terminal-dock-D4AHa51o.js → chat-terminal-dock-medSiQoQ.js} +1 -1
  24. package/dist/gateway/static/root/assets/{computer-settings-page-eXPe500D.js → computer-settings-page-DJxO0CfY.js} +1 -1
  25. package/dist/gateway/static/root/assets/{connector-service-page-BQTFlq_k.js → connector-service-page-WaoUqr8a.js} +1 -1
  26. package/dist/gateway/static/root/assets/connectors-page-KIi15pQl.js +2 -0
  27. package/dist/gateway/static/root/assets/{date-picker-7MtovynY.js → date-picker-DalDr0E6.js} +1 -1
  28. package/dist/gateway/static/root/assets/{dependency-picker-Bj_xkXID.js → dependency-picker-ONChq2Yr.js} +1 -1
  29. package/dist/gateway/static/root/assets/{desktop-pet-CTmba9zH.js → desktop-pet-b1a37SVn.js} +1 -1
  30. package/dist/gateway/static/root/assets/{desktop-pet-settings-DNM_BlWN.js → desktop-pet-settings-CwqZxGv4.js} +1 -1
  31. package/dist/gateway/static/root/assets/device-pairing-wizard-C_MNpS30.js +1 -0
  32. package/dist/gateway/static/root/assets/{extension-debug-page-J_olaL7e.js → extension-debug-page-CGthPGca.js} +1 -1
  33. package/dist/gateway/static/root/assets/{extension-page-pK5RvqN8.js → extension-page-CExNJs0G.js} +1 -1
  34. package/dist/gateway/static/root/assets/{extension-settings-page-BwroEN08.js → extension-settings-page-DBfxzKR8.js} +1 -1
  35. package/dist/gateway/static/root/assets/{gateway-config-swr-FuJTIg_a.js → gateway-config-swr-DFjsI4QK.js} +1 -1
  36. package/dist/gateway/static/root/assets/gateway-settings-BlpheZrf.js +1 -0
  37. package/dist/gateway/static/root/assets/{gateway-startup-retry-CKg_gu8_.js → gateway-startup-retry-oRRqSoe9.js} +1 -1
  38. package/dist/gateway/static/root/assets/home-page-BvdT-uaI.js +1 -0
  39. package/dist/gateway/static/root/assets/{image-generation-api-Bo6NZ7zb.js → image-generation-api-CyDy_Sxu.js} +1 -1
  40. package/dist/gateway/static/root/assets/{imports-page-C8-hX8gS.js → imports-page-Dnp2hmFL.js} +1 -1
  41. package/dist/gateway/static/root/assets/index-BYKatjhB.css +1 -0
  42. package/dist/gateway/static/root/assets/index-DhCnwCI9.js +89 -0
  43. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BkBEjUZD.js → keyboard-shortcuts-settings-1DUcGrYh.js} +1 -1
  44. package/dist/gateway/static/root/assets/local-app-workbench-page-BW2-80Og.js +2 -0
  45. package/dist/gateway/static/root/assets/{local-apps-page-CrbKIixo.js → local-apps-page-C7_2zyV_.js} +1 -1
  46. package/dist/gateway/static/root/assets/{locale-store-CvGwNbml.js → locale-store-D6VmRI5e.js} +1 -1
  47. package/dist/gateway/static/root/assets/{logs-page-DBHlZts9.js → logs-page-Cbr7bPM6.js} +2 -2
  48. package/dist/gateway/static/root/assets/management-settings-G7GcFx2_.js +1 -0
  49. package/dist/gateway/static/root/assets/{markdown-view-nXo5nrsv.js → markdown-view-B5MfZeKH.js} +1 -1
  50. package/dist/gateway/static/root/assets/{media-plugins-upxXJ-4l.js → media-plugins-IbcEpV96.js} +1 -1
  51. package/dist/gateway/static/root/assets/messages-BCqLsIZK.js +3 -0
  52. package/dist/gateway/static/root/assets/note-detail-panel-C4DiKkDf.js +5 -0
  53. package/dist/gateway/static/root/assets/notes-page-DgHQmpVq.js +8 -0
  54. package/dist/gateway/static/root/assets/{page-context-capture-button-DUyA-K4L.js → page-context-capture-button-B5rZ_F0R.js} +1 -1
  55. package/dist/gateway/static/root/assets/{page-tabs-Cl-NFPNr.js → page-tabs-B84Yghg5.js} +1 -1
  56. package/dist/gateway/static/root/assets/{preview-open-alternatives-DX81PwJ3.js → preview-open-alternatives-CaEtDmZO.js} +1 -1
  57. package/dist/gateway/static/root/assets/{product-open-page-CrfIGwm8.js → product-open-page-BK9z5b-v.js} +1 -1
  58. package/dist/gateway/static/root/assets/project-detail-page-Qj8Xb9qS.js +1 -0
  59. package/dist/gateway/static/root/assets/{projects-page-nM9a9XNS.js → projects-page-BOp6swwM.js} +1 -1
  60. package/dist/gateway/static/root/assets/{registry-api-CHxgohY0.js → registry-api-sOL6E5LU.js} +1 -1
  61. package/dist/gateway/static/root/assets/remote-access-hub-yb8l4ppq.js +1 -0
  62. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-D3dLOW04.js → runtime-tools-settings-panel-BAvzw1T0.js} +1 -1
  63. package/dist/gateway/static/root/assets/scenes-page-CiAgb7hf.js +2 -0
  64. package/dist/gateway/static/root/assets/{schema-form-ZxuIvD2_.js → schema-form-Dytkw9RZ.js} +1 -1
  65. package/dist/gateway/static/root/assets/sessions-page-43hcOW84.js +1 -0
  66. package/dist/gateway/static/root/assets/settings-advanced-gate-C414vr2V.js +1 -0
  67. package/dist/gateway/static/root/assets/{settings-form-section-TZRfg4yo.js → settings-form-section-DBJlmKQV.js} +1 -1
  68. package/dist/gateway/static/root/assets/{settings-page-a8qcJpdZ.js → settings-page-C9GbP-ZG.js} +1 -1
  69. package/dist/gateway/static/root/assets/{settings-page-layout-BfvlRT9q.js → settings-page-layout-OvBOGen7.js} +1 -1
  70. package/dist/gateway/static/root/assets/setup-status-panel-BCMym4xj.js +1 -0
  71. package/dist/gateway/static/root/assets/{share-preview-page-DCt1pTWB.js → share-preview-page-D-sx26yN.js} +1 -1
  72. package/dist/gateway/static/root/assets/shares-settings-EdNGhsuF.js +1 -0
  73. package/dist/gateway/static/root/assets/skill-reload-api-DYYM1qVn.js +1 -0
  74. package/dist/gateway/static/root/assets/{skills-page-BIOcg44X.js → skills-page-Cgrfnet5.js} +1 -1
  75. package/dist/gateway/static/root/assets/{skills-page.utils-CgZdzT4I.js → skills-page.utils-COPGVfmB.js} +1 -1
  76. package/dist/gateway/static/root/assets/{system-settings-panel-_YaRncA6.js → system-settings-panel-B9tptggE.js} +1 -1
  77. package/dist/gateway/static/root/assets/task-detail-page-BrsM6Xmm.js +1 -0
  78. package/dist/gateway/static/root/assets/{tunnel-api-uOupJOoS.js → tunnel-api-qb33IFGP.js} +1 -1
  79. package/dist/gateway/static/root/assets/{use-autosave-BezzHBLE.js → use-autosave-DfhqCGRX.js} +1 -1
  80. package/dist/gateway/static/root/assets/user-model-page-Sg94U7zz.js +2 -0
  81. package/dist/gateway/static/root/assets/{voice-api-key-field-BmYifdwL.js → voice-api-key-field-taBVzvtI.js} +1 -1
  82. package/dist/gateway/static/root/assets/{voice-config-api-D_5Q2_A3.js → voice-config-api-B4yjd1Kb.js} +1 -1
  83. package/dist/gateway/static/root/assets/{work-discovery-overlay-4DmyEckJ.js → work-discovery-overlay-DWGTB3Uk.js} +1 -1
  84. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-DeZe8bTZ.js → workflow-run-setup-panel-CP58uTNh.js} +2 -2
  85. package/dist/gateway/static/root/assets/workflows-page-Clka1xiQ.js +6 -0
  86. package/dist/gateway/static/root/index.html +8 -8
  87. package/dist/package.js +1 -1
  88. package/dist/src/agent/agent-manager.js +18 -17
  89. package/dist/src/agent/background-review/run-background-review.js +1 -1
  90. package/dist/src/agent/embedded/model-runtime.js +1 -1
  91. package/dist/src/agent/embedded/run-for-session.js +1 -1
  92. package/dist/src/agent/embedded/run-turn.js +28 -15
  93. package/dist/src/agent/embedded/system-prompt-override.js +14 -3
  94. package/dist/src/agent/embedded/xopc-stream-bridge.js +13 -2
  95. package/dist/src/agent/image/tool-model-config.js +1 -1
  96. package/dist/src/agent/mcp/bundle-mcp-gateway.d.ts +39 -0
  97. package/dist/src/agent/mcp/bundle-mcp-gateway.js +32 -1
  98. package/dist/src/agent/mcp/bundle-mcp-runtime.js +11 -0
  99. package/dist/src/agent/mcp/bundle-mcp-types.d.ts +2 -1
  100. package/dist/src/agent/mcp/mcp-resource-id.d.ts +6 -0
  101. package/dist/src/agent/mcp/mcp-resource-id.js +19 -0
  102. package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +1 -1
  103. package/dist/src/agent/memory/context-budget.js +1 -1
  104. package/dist/src/agent/orchestration/agent-turn-policy.d.ts +2 -2
  105. package/dist/src/agent/prompt/agent-system-prompt.d.ts +3 -0
  106. package/dist/src/agent/prompt/agent-system-prompt.js +16 -0
  107. package/dist/src/agent/service.js +2 -2
  108. package/dist/src/agent/session/session-inspector.js +1 -1
  109. package/dist/src/agent/skills/hub-lock.js +1 -1
  110. package/dist/src/agent/source-context/browser-tab.d.ts +3 -0
  111. package/dist/src/agent/source-context/browser-tab.js +29 -0
  112. package/dist/src/agent/source-context/file-context.d.ts +3 -0
  113. package/dist/src/agent/source-context/file-context.js +64 -0
  114. package/dist/src/agent/source-context/index.d.ts +4 -0
  115. package/dist/src/agent/source-context/index.js +5 -1
  116. package/dist/src/agent/source-context/injector.js +1 -1
  117. package/dist/src/agent/source-context/mcp-resource-context.d.ts +8 -0
  118. package/dist/src/agent/source-context/mcp-resource-context.js +30 -0
  119. package/dist/src/agent/source-context/session-context.d.ts +8 -0
  120. package/dist/src/agent/source-context/session-context.js +33 -0
  121. package/dist/src/agent/source-context/types.d.ts +9 -3
  122. package/dist/src/agent/source-context/types.js +3 -2
  123. package/dist/src/agent/tasks/task-judge-service.js +3 -3
  124. package/dist/src/agent/tools/knowledge-memory-tool.js +1 -0
  125. package/dist/src/agent-config/schema.d.ts +8 -8
  126. package/dist/src/ai-assist/text-assist.js +3 -2
  127. package/dist/src/auth/credentials.js +2 -2
  128. package/dist/src/auth/oauth/xopc-cloud.js +1 -1
  129. package/dist/src/auth/profiles/store.js +1 -1
  130. package/dist/src/auth/sync-provider-auth.js +2 -2
  131. package/dist/src/browser/providers/browser-ext-install.js +1 -1
  132. package/dist/src/channels/index.js +1 -1
  133. package/dist/src/channels/manager.js +1 -1
  134. package/dist/src/chat-commands/agent-edit.js +1 -1
  135. package/dist/src/cli/commands/agent.js +1 -1
  136. package/dist/src/cli/commands/channels.js +1 -1
  137. package/dist/src/cli/commands/connectors.js +1 -1
  138. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  139. package/dist/src/cli/commands/doctor/checks/provider-auth.js +3 -3
  140. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  141. package/dist/src/cli/commands/models.js +2 -2
  142. package/dist/src/cli/commands/onboard.js +1 -1
  143. package/dist/src/computer/runtime.js +1 -1
  144. package/dist/src/config/index.js +4 -4
  145. package/dist/src/config/loader.js +2 -2
  146. package/dist/src/config/models-json.d.ts +8 -8
  147. package/dist/src/config/models-json.js +2 -2
  148. package/dist/src/config/schema.d.ts +5 -5
  149. package/dist/src/config/schema.js +1 -1
  150. package/dist/src/connectors/connected-source-ingestion.d.ts +1 -0
  151. package/dist/src/connectors/connected-source-ingestion.js +1 -0
  152. package/dist/src/connectors/connected-source-understanding.d.ts +1 -0
  153. package/dist/src/connectors/connected-source-understanding.js +91 -31
  154. package/dist/src/connectors/content-enrichment.d.ts +1 -0
  155. package/dist/src/connectors/content-enrichment.js +3 -1
  156. package/dist/src/connectors/learning-coordinator.js +24 -24
  157. package/dist/src/extensions/lockfile.js +1 -1
  158. package/dist/src/extensions/sdk/index.js +1 -1
  159. package/dist/src/gateway/agents-admin.js +1 -1
  160. package/dist/src/gateway/chat-stream/mapper.js +12 -6
  161. package/dist/src/gateway/chat-stream/protocol.d.ts +2 -1
  162. package/dist/src/gateway/file-path-classifier.js +1 -1
  163. package/dist/src/gateway/hono/lib/config-payload.d.ts +2 -2
  164. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  165. package/dist/src/gateway/hono/routes/agent-stream.js +2 -2
  166. package/dist/src/gateway/hono/routes/browser.js +32 -0
  167. package/dist/src/gateway/hono/routes/connectors.js +1 -1
  168. package/dist/src/gateway/hono/routes/devices.js +0 -16
  169. package/dist/src/gateway/hono/routes/endpoint-tools.js +86 -30
  170. package/dist/src/gateway/hono/routes/mcp.js +32 -1
  171. package/dist/src/gateway/hono/routes/models.js +1 -1
  172. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +6 -2
  173. package/dist/src/gateway/hono/routes/session-input-handler.js +4 -4
  174. package/dist/src/gateway/hono/routes/user-model-refresh.js +2 -2
  175. package/dist/src/gateway/service/agent-runner.d.ts +1 -1
  176. package/dist/src/gateway/service/agent-runner.js +2 -2
  177. package/dist/src/gateway/service/app-context-access.d.ts +0 -4
  178. package/dist/src/gateway/service/config-coordinator.js +1 -1
  179. package/dist/src/gateway/service/run-gateway-agent.js +1 -1
  180. package/dist/src/gateway/service/session-input-coordinator.d.ts +1 -1
  181. package/dist/src/gateway/service/session-input-coordinator.js +3 -3
  182. package/dist/src/gateway/service.js +47 -10
  183. package/dist/src/gateway/workspace-file-search.js +25 -12
  184. package/dist/src/knowledge/ingestion-service.d.ts +5 -2
  185. package/dist/src/knowledge/ingestion-service.js +24 -15
  186. package/dist/src/knowledge-memory/domain.d.ts +1 -1
  187. package/dist/src/notes/service.js +1 -1
  188. package/dist/src/platform/client.d.ts +2 -2
  189. package/dist/src/platform/contracts.d.ts +2 -2
  190. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
  191. package/dist/src/providers/extension-stream-bridge.js +6 -4
  192. package/dist/src/providers/index.js +2 -2
  193. package/dist/src/providers/model-call.js +3 -3
  194. package/dist/src/providers/model-catalog-persistence.js +1 -1
  195. package/dist/src/providers/model-registry.js +1 -1
  196. package/dist/src/providers/presentation.js +4 -3
  197. package/dist/src/providers/register-runtime-providers.js +1 -1
  198. package/dist/src/session/client-history.d.ts +2 -1
  199. package/dist/src/session/client-history.js +3 -2
  200. package/dist/src/storage/sqlite/context-extraction-repository.d.ts +1 -2
  201. package/dist/src/storage/sqlite/context-extraction-repository.js +1 -9
  202. package/dist/src/storage/sqlite/endpoint-tool-invocation-repository.d.ts +15 -1
  203. package/dist/src/storage/sqlite/endpoint-tool-invocation-repository.js +39 -6
  204. package/dist/src/storage/sqlite/index.d.ts +2 -3
  205. package/dist/src/storage/sqlite/index.js +3 -4
  206. package/dist/src/storage/sqlite/knowledge-repository.d.ts +1 -0
  207. package/dist/src/storage/sqlite/knowledge-repository.js +3 -0
  208. package/dist/src/storage/sqlite/migrations/200_connected_work_threads.sql +92 -0
  209. package/dist/src/storage/sqlite/migrations/201_connector_extraction_audit.sql +127 -0
  210. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  211. package/dist/src/storage/sqlite/migrations/runner.js +4 -4
  212. package/dist/src/storage/sqlite/schema.js +1 -1
  213. package/dist/src/storage/sqlite/schema.sql +1 -1
  214. package/dist/src/tui/backends/embedded-backend.js +2 -2
  215. package/dist/src/tui/backends/gateway-realtime-backend.js +1 -1
  216. package/dist/src/tui/tui-commands.js +1 -1
  217. package/dist/src/tui/tui-startup-resources.js +1 -1
  218. package/dist/src/tui/tui.js +2 -2
  219. package/dist/src/user-context/domain.d.ts +0 -13
  220. package/dist/src/user-context/sources/index.js +2 -2
  221. package/dist/src/user-context/sources/repository.d.ts +10 -0
  222. package/dist/src/user-context/sources/repository.js +19 -4
  223. package/dist/src/user-context/sources/types.d.ts +1 -0
  224. package/dist/src/voice/tts/audio.js +1 -1
  225. package/dist/src/work-discovery/service.js +2 -2
  226. package/dist/src/workflows/service/workflow-run-service.js +1 -1
  227. package/package.json +6 -6
  228. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-BdOZ6q8Z.js +0 -1
  229. package/dist/gateway/static/root/assets/agents-CCcavsHq.js +0 -1
  230. package/dist/gateway/static/root/assets/automations-workspace-BEa2doeR.js +0 -7
  231. package/dist/gateway/static/root/assets/browser-settings-page-DRCHGFpO.js +0 -3
  232. package/dist/gateway/static/root/assets/capabilities-settings-panel-mxRP0gl0.js +0 -8
  233. package/dist/gateway/static/root/assets/channels-settings-DBt_6GsB.js +0 -1
  234. package/dist/gateway/static/root/assets/connectors-page-BKeBWwcI.js +0 -2
  235. package/dist/gateway/static/root/assets/device-pairing-wizard-C2XE0QhT.js +0 -1
  236. package/dist/gateway/static/root/assets/gateway-settings-CLLDp23J.js +0 -1
  237. package/dist/gateway/static/root/assets/home-page-B5Epb1PH.js +0 -1
  238. package/dist/gateway/static/root/assets/index-14F1yGJI.js +0 -89
  239. package/dist/gateway/static/root/assets/index-cB7rWIDY.css +0 -1
  240. package/dist/gateway/static/root/assets/local-app-workbench-page-6jC3vQpY.js +0 -2
  241. package/dist/gateway/static/root/assets/management-settings-DsUWLu5m.js +0 -1
  242. package/dist/gateway/static/root/assets/messages-B_AwRroN.js +0 -3
  243. package/dist/gateway/static/root/assets/note-detail-panel-0Q9TOtJG.js +0 -5
  244. package/dist/gateway/static/root/assets/notes-page-D0NmcwNw.js +0 -8
  245. package/dist/gateway/static/root/assets/project-detail-page-BVfVrYmn.js +0 -1
  246. package/dist/gateway/static/root/assets/remote-access-hub-C8b_k88G.js +0 -1
  247. package/dist/gateway/static/root/assets/scenes-page-DEowreZV.js +0 -2
  248. package/dist/gateway/static/root/assets/sessions-page-B_nPhera.js +0 -1
  249. package/dist/gateway/static/root/assets/settings-advanced-gate-BqhIOuus.js +0 -1
  250. package/dist/gateway/static/root/assets/setup-status-panel-CRj5Ruqn.js +0 -1
  251. package/dist/gateway/static/root/assets/shares-settings-BNbXPk--.js +0 -1
  252. package/dist/gateway/static/root/assets/skill-reload-api-CNMCLbav.js +0 -1
  253. package/dist/gateway/static/root/assets/task-detail-page-CAcfAG-c.js +0 -1
  254. package/dist/gateway/static/root/assets/user-model-page-BFFeneDq.js +0 -2
  255. package/dist/gateway/static/root/assets/workflows-page-Sv4hEc6W.js +0 -6
  256. package/dist/src/storage/sqlite/context-relation-repository.d.ts +0 -50
  257. package/dist/src/storage/sqlite/context-relation-repository.js +0 -98
@@ -12,8 +12,7 @@ import { deleteBrowserTabBinding, deleteBrowserTabBindingsByEndpoint, deleteBrow
12
12
  import { authenticateDeviceAccessToken, buildRefreshProofMessage, createDevice, getDevice, issueDeviceTokenPair, listDevices, revokeDevice, rotateDeviceRefreshToken } from "./device-access-repository.js";
13
13
  import { clearGatewayIdentityForTest, getOrCreateGatewayIdentity, signGatewayPayload } from "./gateway-identity-repository.js";
14
14
  import { createDevicePairingSetup, isDevicePairingSetupActive } from "./device-pairing-repository.js";
15
- import { claimContextExtractionRun, finishContextExtractionRun, getContextExtractionRun, hasIndependentExtractionOutput, listContextExtractionOutputs, listContextExtractionRuns } from "./context-extraction-repository.js";
16
- import { closeTemporalAssertions, createTemporalAssertion, linkContextObjects, listContextObjectRelations, listTemporalAssertions } from "./context-relation-repository.js";
15
+ import { claimContextExtractionRun, finishContextExtractionRun, getContextExtractionRun, listContextExtractionOutputs, listContextExtractionRuns } from "./context-extraction-repository.js";
17
16
  import { createCollaborationRule, getCollaborationRule, listCollaborationRules, setCollaborationRuleStatus } from "./collaboration-rule-repository.js";
18
17
  import { createContextEvidence } from "./context-evidence-repository.js";
19
18
  import { getUserPeopleIndexState, getUserPerson, listUserPeople, mergeUserPeople, replaceUserPeopleIndex, summarizeUserPeople, updateUserPerson } from "./user-people-repository.js";
@@ -26,7 +25,7 @@ import { acknowledgeHomeAttention, isHomeAttentionAcknowledged } from "./home-at
26
25
  import { claimNextConnectorLearningJob, enqueueConnectorLearningJob, listConnectorLearningJobs, recoverStaleConnectorLearningJobs, setConnectorLearningPaused, updateConnectorLearningJob } from "./connector-learning-repository.js";
27
26
  import { COMPOSER_INPUT_HISTORY_LIMIT, appendComposerInputHistory, clearComposerInputHistory, listComposerInputHistory } from "./composer-input-history-repository.js";
28
27
  import { bindEndpointPrincipal, createEndpointPrincipal, getEndpointPrincipal, listEndpointPrincipals, revokeEndpointPrincipal, touchEndpointPrincipal } from "./endpoint-principal-repository.js";
29
- import { finishEndpointToolInvocationAudit, listEndpointToolInvocationAudits, startEndpointToolInvocationAudit } from "./endpoint-tool-invocation-repository.js";
28
+ import { finishEndpointToolInvocationAudit, listEndpointToolInvocationAuditPage, startEndpointToolInvocationAudit } from "./endpoint-tool-invocation-repository.js";
30
29
  import { getInteractionState, setInteractionState, updateInteractionStateFromMessage } from "./interaction-state-repository.js";
31
30
  import { getConnectorAccount, init_connector_account_repository, listConnectorAccounts, reconcileConnectorAccount, refreshConnectorAccountCurrent } from "./connector-account-repository.js";
32
31
  import { appendConnectorExecutionAudit, claimConnectorWebhookDelivery, completeConnectorWebhookDelivery, consumeConnectorApproval, createConnectorApproval, decideConnectorApproval, deleteConnectorConnection, deleteConnectorInstallation, getCachedConnectorCatalogEntry, getConnectorApproval, getConnectorConnection, getConnectorInstallation, init_connector_repository, listCachedConnectorCatalogEntries, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, releaseConnectorWebhookDelivery, replaceConnectorCatalogEntries, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation } from "./connector-repository.js";
@@ -58,4 +57,4 @@ init_session_repository();
58
57
  init_connector_repository();
59
58
  init_connector_account_repository();
60
59
  //#endregion
61
- export { COMPOSER_INPUT_HISTORY_LIMIT, DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError, DatabaseSchemaTooOldError, SCHEMA_META_SCHEMA_VERSION_KEY, SidebarLayoutConflictError, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_FILENAME, XOPC_DB_SCHEMA_VERSION, acknowledgeHomeAttention, appendCompactionBoundaryIfUnchanged, appendComposerInputHistory, appendConnectorExecutionAudit, appendMediaToAssistantTranscriptEntry, appendTranscriptEntry, applyPendingMigrations, authenticateDeviceAccessToken, bindEndpointPrincipal, buildDefaultSessionMetadata, buildGlobalSessionStats, buildRefreshProofMessage, buildRelationshipPrompt, cancelQueuedSessionInput, claimConnectorWebhookDelivery, claimContextExtractionRun, claimKnowledgeSourceItems, claimNextConnectorLearningJob, claimNextSessionInput, classifyStoredRow, clearComposerInputHistory, clearGatewayIdentityForTest, closeTemporalAssertions, closeXopcDatabase, completeConnectorWebhookDelivery, completeKnowledgeSourceItemSynthesis, consumeClarificationApproval, consumeClarificationResume, consumeConnectorApproval, countKnowledgeSourceItems, createClarificationWait, createCollaborationRule, createConnectorApproval, createContextEvidence, createDevice, createDevicePairingSetup, createEndpointPrincipal, createObjectLinkRecord, createTemporalAssertion, decideConnectorApproval, deleteBrowserTabBinding, deleteBrowserTabBindingsByEndpoint, deleteBrowserTabBindingsByPrincipal, deleteConnectorConnection, deleteConnectorInstallation, deleteEndpointSessionBinding, deleteEndpointSessionBindingsByPrincipal, deleteKnowledgeSourceItems, deleteNoteAgentContextRecord, deleteNoteRecord, deleteObjectLinkRecord, deleteSessionConfig, deleteSessionRecord, discoverSqlMigrations, enqueueConnectorLearningJob, ensureSessionRecord, ensureXopcDatabaseSchema, estimateTokensFromMessages, extractFtsContent, findConversationIdByTranscriptId, findLatestAssistantTranscriptEntryId, findSessionInput, finishContextExtractionRun, finishEndpointToolInvocationAudit, finishKnowledgeSyncRun, finishSessionInputRun, getActiveClarification, getActivityEventRecord, getBrowserTabBinding, getBrowserTabBindingById, getCachedConnectorCatalogEntry, getClarification, getClarificationResumeInput, getClarificationSnapshot, getCollaborationRule, getConnectorAccount, getConnectorApproval, getConnectorConnection, getConnectorInstallation, getConnectorSyncPolicy, getConnectorSyncPolicyForConnection, getContextExtractionRun, getCurrentTranscriptId, getDevice, getEndpointPrincipal, getEndpointSessionBinding, getGlobalSessionStats, getInteractionState, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, getNoteAgentContextRecord, getNoteRecord, getOrCreateGatewayIdentity, getRelationshipSettings, getSessionConfig, getSessionInputById, getSessionInputState, getSessionMetadata, getSessionPersistedLevels, getSessionTaskPlan, getSidebarLayout, getSqliteDatabase, getUserPeopleIndexState, getUserPerson, getUserTrustPolicy, getXopcDatabase, hasIndependentExtractionOutput, hasSessionConfig, incrementSessionStatsOnAppend, insertSessionInput, inspectSchemaMigrationStatus, isClarificationSuspended, isDevicePairingSetupActive, isHomeAttentionAcknowledged, isProactiveSupportAllowed, isXopcDatabaseOpen, issueDeviceTokenPair, linkContextObjects, listActiveSessionInputRuns, listActivityRecords, listCachedConnectorCatalogEntries, listCollaborationRules, listCompactionBoundaries, listComposerInputHistory, listConnectorAccounts, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, listConnectorLearningJobs, listConnectorSyncPolicies, listContextExtractionOutputs, listContextExtractionRuns, listContextObjectRelations, listDevices, listEndpointPrincipals, listEndpointToolInvocationAudits, listKnowledgeSourceChanges, listKnowledgeSourceItems, listKnowledgeSyncRuns, listNoteRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, listRegisteredMigrationTargets, listSessionMetadata, listSessionsByAgent, listTemporalAssertions, listUserPeople, loadCompactionSourceSnapshot, loadLlmMessagesForSession, loadTranscriptHistoryRowsForSession, loadTranscriptRows, loadTranscriptRowsForSession, mergeUserPeople, metadataToSessionInsert, mutateQueuedSessionInput, openXopcDatabase, paginateTranscriptMessages, patchSessionMetadata, pruneBoundedKnowledgeSourceItems, readSchemaVersion, readSchemaVersionForTest, reconcileConnectorAccount, recordActivityEvent, recoverSessionInputState, recoverStaleConnectorLearningJobs, refreshConnectorAccountCurrent, releaseConnectorWebhookDelivery, replaceConnectorCatalogEntries, replaceLatestSessionTurnAndQueueInput, replaceSidebarLayout, replaceTranscriptRows, replaceUserPeopleIndex, requireXopcDatabase, resetSessionRecord, resetXopcDatabaseSingletonForTest, resolveClarification, resolveMigrationsDir, resolveSessionAgentId, resolveXopcDatabasePath, restoreBeforeCompactionBoundary, revokeDevice, revokeEndpointPrincipal, rotateDeviceRefreshToken, runSqliteWriteTransaction, searchSessionTranscript, sessionConfigRowToConfig, sessionRowToMetadata, setBrowserTabBinding, setCollaborationRuleStatus, setConnectorLearningPaused, setEndpointSessionBinding, setInteractionState, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, setSessionConfig, setSessionInputStatus, setSessionTaskPlan, setUserTrustPolicy, signGatewayPayload, sortBySidebarLayout, startEndpointToolInvocationAudit, startKnowledgeSyncRun, summarizeUserPeople, supersedeActiveClarification, touchEndpointPrincipal, transcriptEntryRowToStoredRow, updateConnectorLearningJob, updateInteractionStateFromMessage, updateRelationshipSettings, updateSessionConfig, updateSessionStats, updateUserPerson, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation, upsertConnectorSyncPolicy, upsertKnowledgeSourceItems, upsertNoteAgentContextRecord, upsertNoteRecord, validateLatestSessionTurnTarget };
60
+ export { COMPOSER_INPUT_HISTORY_LIMIT, DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError, DatabaseSchemaTooOldError, SCHEMA_META_SCHEMA_VERSION_KEY, SidebarLayoutConflictError, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_FILENAME, XOPC_DB_SCHEMA_VERSION, acknowledgeHomeAttention, appendCompactionBoundaryIfUnchanged, appendComposerInputHistory, appendConnectorExecutionAudit, appendMediaToAssistantTranscriptEntry, appendTranscriptEntry, applyPendingMigrations, authenticateDeviceAccessToken, bindEndpointPrincipal, buildDefaultSessionMetadata, buildGlobalSessionStats, buildRefreshProofMessage, buildRelationshipPrompt, cancelQueuedSessionInput, claimConnectorWebhookDelivery, claimContextExtractionRun, claimKnowledgeSourceItems, claimNextConnectorLearningJob, claimNextSessionInput, classifyStoredRow, clearComposerInputHistory, clearGatewayIdentityForTest, closeXopcDatabase, completeConnectorWebhookDelivery, completeKnowledgeSourceItemSynthesis, consumeClarificationApproval, consumeClarificationResume, consumeConnectorApproval, countKnowledgeSourceItems, createClarificationWait, createCollaborationRule, createConnectorApproval, createContextEvidence, createDevice, createDevicePairingSetup, createEndpointPrincipal, createObjectLinkRecord, decideConnectorApproval, deleteBrowserTabBinding, deleteBrowserTabBindingsByEndpoint, deleteBrowserTabBindingsByPrincipal, deleteConnectorConnection, deleteConnectorInstallation, deleteEndpointSessionBinding, deleteEndpointSessionBindingsByPrincipal, deleteKnowledgeSourceItems, deleteNoteAgentContextRecord, deleteNoteRecord, deleteObjectLinkRecord, deleteSessionConfig, deleteSessionRecord, discoverSqlMigrations, enqueueConnectorLearningJob, ensureSessionRecord, ensureXopcDatabaseSchema, estimateTokensFromMessages, extractFtsContent, findConversationIdByTranscriptId, findLatestAssistantTranscriptEntryId, findSessionInput, finishContextExtractionRun, finishEndpointToolInvocationAudit, finishKnowledgeSyncRun, finishSessionInputRun, getActiveClarification, getActivityEventRecord, getBrowserTabBinding, getBrowserTabBindingById, getCachedConnectorCatalogEntry, getClarification, getClarificationResumeInput, getClarificationSnapshot, getCollaborationRule, getConnectorAccount, getConnectorApproval, getConnectorConnection, getConnectorInstallation, getConnectorSyncPolicy, getConnectorSyncPolicyForConnection, getContextExtractionRun, getCurrentTranscriptId, getDevice, getEndpointPrincipal, getEndpointSessionBinding, getGlobalSessionStats, getInteractionState, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, getNoteAgentContextRecord, getNoteRecord, getOrCreateGatewayIdentity, getRelationshipSettings, getSessionConfig, getSessionInputById, getSessionInputState, getSessionMetadata, getSessionPersistedLevels, getSessionTaskPlan, getSidebarLayout, getSqliteDatabase, getUserPeopleIndexState, getUserPerson, getUserTrustPolicy, getXopcDatabase, hasSessionConfig, incrementSessionStatsOnAppend, insertSessionInput, inspectSchemaMigrationStatus, isClarificationSuspended, isDevicePairingSetupActive, isHomeAttentionAcknowledged, isProactiveSupportAllowed, isXopcDatabaseOpen, issueDeviceTokenPair, listActiveSessionInputRuns, listActivityRecords, listCachedConnectorCatalogEntries, listCollaborationRules, listCompactionBoundaries, listComposerInputHistory, listConnectorAccounts, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, listConnectorLearningJobs, listConnectorSyncPolicies, listContextExtractionOutputs, listContextExtractionRuns, listDevices, listEndpointPrincipals, listEndpointToolInvocationAuditPage, listKnowledgeSourceChanges, listKnowledgeSourceItems, listKnowledgeSyncRuns, listNoteRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, listRegisteredMigrationTargets, listSessionMetadata, listSessionsByAgent, listUserPeople, loadCompactionSourceSnapshot, loadLlmMessagesForSession, loadTranscriptHistoryRowsForSession, loadTranscriptRows, loadTranscriptRowsForSession, mergeUserPeople, metadataToSessionInsert, mutateQueuedSessionInput, openXopcDatabase, paginateTranscriptMessages, patchSessionMetadata, pruneBoundedKnowledgeSourceItems, readSchemaVersion, readSchemaVersionForTest, reconcileConnectorAccount, recordActivityEvent, recoverSessionInputState, recoverStaleConnectorLearningJobs, refreshConnectorAccountCurrent, releaseConnectorWebhookDelivery, replaceConnectorCatalogEntries, replaceLatestSessionTurnAndQueueInput, replaceSidebarLayout, replaceTranscriptRows, replaceUserPeopleIndex, requireXopcDatabase, resetSessionRecord, resetXopcDatabaseSingletonForTest, resolveClarification, resolveMigrationsDir, resolveSessionAgentId, resolveXopcDatabasePath, restoreBeforeCompactionBoundary, revokeDevice, revokeEndpointPrincipal, rotateDeviceRefreshToken, runSqliteWriteTransaction, searchSessionTranscript, sessionConfigRowToConfig, sessionRowToMetadata, setBrowserTabBinding, setCollaborationRuleStatus, setConnectorLearningPaused, setEndpointSessionBinding, setInteractionState, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, setSessionConfig, setSessionInputStatus, setSessionTaskPlan, setUserTrustPolicy, signGatewayPayload, sortBySidebarLayout, startEndpointToolInvocationAudit, startKnowledgeSyncRun, summarizeUserPeople, supersedeActiveClarification, touchEndpointPrincipal, transcriptEntryRowToStoredRow, updateConnectorLearningJob, updateInteractionStateFromMessage, updateRelationshipSettings, updateSessionConfig, updateSessionStats, updateUserPerson, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation, upsertConnectorSyncPolicy, upsertKnowledgeSourceItems, upsertNoteAgentContextRecord, upsertNoteRecord, validateLatestSessionTurnTarget };
@@ -25,6 +25,7 @@ export declare function getKnowledgeSourceCursor(sourceInstanceId: string, colle
25
25
  export declare function setKnowledgeSourceCursor(sourceInstanceId: string, collectionScope: string, cursor: string | undefined): void;
26
26
  export declare function upsertKnowledgeSourceItems(inputs: KnowledgeSourceItemInput[], nowMs?: number): {
27
27
  items: KnowledgeSourceItem[];
28
+ changedItemIds: string[];
28
29
  created: number;
29
30
  updated: number;
30
31
  unchanged: number;
@@ -144,6 +144,7 @@ function setKnowledgeSourceCursor(sourceInstanceId, collectionScope, cursor) {
144
144
  function upsertKnowledgeSourceItems(inputs, nowMs = Date.now()) {
145
145
  return runSqliteWriteTransaction((db) => {
146
146
  const items = [];
147
+ const changedItemIds = [];
147
148
  let created = 0;
148
149
  let updated = 0;
149
150
  let unchanged = 0;
@@ -184,6 +185,7 @@ function upsertKnowledgeSourceItems(inputs, nowMs = Date.now()) {
184
185
  updated_at = excluded.updated_at`).run(id, input.sourceInstanceId, input.collectionScope, input.externalId, input.itemType, input.authorRole ?? null, parseTimestamp(input.occurredAt), parseTimestamp(input.sourceUpdatedAt), input.contentHash, input.normalizedText ?? null, input.payloadRef ?? null, JSON.stringify(input.metadata ?? {}), input.sensitivity ?? "normal", input.retentionClass ?? "bounded", input.synthesisPipeline ?? "user_understanding", input.synthesisStatus ?? "pending", parseTimestamp(input.deletedAt), existing?.created_at ?? nowMs, nowMs);
185
186
  const row = db.prepare(`SELECT * FROM knowledge_source_items WHERE item_id = ?`).get(id);
186
187
  items.push(sourceItemFromRow(row));
188
+ changedItemIds.push(id);
187
189
  const changeKind = input.deletedAt ? "deleted" : existing ? "modified" : "added";
188
190
  db.prepare(`INSERT INTO knowledge_source_changes (
189
191
  change_id, source_instance_id, source_item_id, change_kind,
@@ -194,6 +196,7 @@ function upsertKnowledgeSourceItems(inputs, nowMs = Date.now()) {
194
196
  }
195
197
  return {
196
198
  items,
199
+ changedItemIds,
197
200
  created,
198
201
  updated,
199
202
  unchanged
@@ -0,0 +1,92 @@
1
+ ALTER TABLE knowledge_item_status_events RENAME TO knowledge_item_status_events_v199;
2
+ ALTER TABLE knowledge_items RENAME TO knowledge_items_v199;
3
+
4
+ CREATE TABLE knowledge_items (
5
+ knowledge_id TEXT PRIMARY KEY,
6
+ principal_id TEXT NOT NULL,
7
+ kind TEXT NOT NULL CHECK(kind IN (
8
+ 'work_thread', 'project_fact', 'workspace_fact', 'decision', 'task_lesson',
9
+ 'commitment', 'open_question', 'episode', 'note'
10
+ )),
11
+ scope_type TEXT NOT NULL CHECK(scope_type IN ('global', 'agent', 'workspace', 'project', 'session')),
12
+ scope_id TEXT,
13
+ content TEXT NOT NULL,
14
+ canonical_key TEXT NOT NULL,
15
+ status TEXT NOT NULL CHECK(status IN ('candidate', 'active', 'needs_review', 'stale', 'archived', 'rejected')),
16
+ confidence REAL NOT NULL CHECK(confidence >= 0 AND confidence <= 1),
17
+ importance REAL NOT NULL CHECK(importance >= 0 AND importance <= 1),
18
+ valid_from INTEGER,
19
+ valid_to INTEGER,
20
+ expires_at INTEGER,
21
+ review_at INTEGER,
22
+ origin_class TEXT NOT NULL CHECK(origin_class IN ('owner', 'agent', 'system', 'untrusted')),
23
+ source_agent_id TEXT,
24
+ source_conversation_id TEXT,
25
+ source_turn_id TEXT,
26
+ derived_from_recalled_context INTEGER NOT NULL DEFAULT 0 CHECK(derived_from_recalled_context IN (0, 1)),
27
+ source_json TEXT NOT NULL DEFAULT '{}' CHECK(json_valid(source_json)),
28
+ created_at INTEGER NOT NULL,
29
+ updated_at INTEGER NOT NULL,
30
+ record_class TEXT NOT NULL DEFAULT 'memory' CHECK(record_class IN ('memory', 'source_index')),
31
+ CHECK(valid_to IS NULL OR valid_from IS NULL OR valid_to >= valid_from)
32
+ );
33
+
34
+ INSERT INTO knowledge_items (
35
+ knowledge_id, principal_id, kind, scope_type, scope_id, content, canonical_key,
36
+ status, confidence, importance, valid_from, valid_to, expires_at, review_at,
37
+ origin_class, source_agent_id, source_conversation_id, source_turn_id,
38
+ derived_from_recalled_context, source_json, created_at, updated_at, record_class
39
+ )
40
+ SELECT
41
+ knowledge_id,
42
+ principal_id,
43
+ CASE
44
+ WHEN record_class = 'memory' AND canonical_key LIKE 'connected-thread:%'
45
+ THEN 'work_thread'
46
+ ELSE kind
47
+ END,
48
+ CASE
49
+ WHEN record_class = 'memory' AND canonical_key LIKE 'connected-thread:%'
50
+ THEN 'global'
51
+ ELSE scope_type
52
+ END,
53
+ CASE
54
+ WHEN record_class = 'memory' AND canonical_key LIKE 'connected-thread:%'
55
+ THEN NULL
56
+ ELSE scope_id
57
+ END,
58
+ content, canonical_key, status, confidence, importance, valid_from, valid_to,
59
+ expires_at, review_at, origin_class, source_agent_id, source_conversation_id,
60
+ source_turn_id, derived_from_recalled_context, source_json, created_at, updated_at,
61
+ record_class
62
+ FROM knowledge_items_v199;
63
+
64
+ CREATE TABLE knowledge_item_status_events (
65
+ event_id TEXT PRIMARY KEY,
66
+ knowledge_id TEXT NOT NULL REFERENCES knowledge_items(knowledge_id) ON DELETE CASCADE,
67
+ from_status TEXT,
68
+ to_status TEXT NOT NULL,
69
+ actor_type TEXT NOT NULL CHECK(actor_type IN ('user', 'agent', 'runtime', 'maintenance', 'migration')),
70
+ reason TEXT NOT NULL,
71
+ created_at INTEGER NOT NULL
72
+ );
73
+
74
+ INSERT INTO knowledge_item_status_events
75
+ SELECT * FROM knowledge_item_status_events_v199;
76
+
77
+ DROP TABLE knowledge_item_status_events_v199;
78
+ DROP TABLE knowledge_items_v199;
79
+
80
+ CREATE INDEX idx_knowledge_items_status
81
+ ON knowledge_items(principal_id, status, updated_at DESC);
82
+ CREATE INDEX idx_knowledge_items_scope
83
+ ON knowledge_items(principal_id, scope_type, scope_id, status);
84
+ CREATE INDEX idx_knowledge_items_lifecycle
85
+ ON knowledge_items(status, expires_at, review_at);
86
+ CREATE INDEX idx_knowledge_items_class_status
87
+ ON knowledge_items(principal_id, record_class, status, updated_at DESC);
88
+ CREATE UNIQUE INDEX idx_knowledge_items_canonical
89
+ ON knowledge_items(principal_id, canonical_key, scope_type, COALESCE(scope_id, ''))
90
+ WHERE status IN ('candidate', 'active', 'needs_review', 'stale');
91
+ CREATE INDEX idx_knowledge_item_status_events_item
92
+ ON knowledge_item_status_events(knowledge_id, created_at DESC);
@@ -0,0 +1,127 @@
1
+ ALTER TABLE understanding_source_runs ADD COLUMN connector_learning_job_id TEXT;
2
+
3
+ UPDATE understanding_source_runs
4
+ SET connector_learning_job_id = json_extract(metadata_json, '$.connectorLearningJobId')
5
+ WHERE json_type(metadata_json, '$.connectorLearningJobId') = 'text';
6
+
7
+ CREATE TEMP TABLE duplicate_connector_source_runs AS
8
+ WITH ranked AS (
9
+ SELECT
10
+ run_id AS duplicate_id,
11
+ FIRST_VALUE(run_id) OVER (
12
+ PARTITION BY connector_learning_job_id
13
+ ORDER BY
14
+ CASE
15
+ WHEN json_extract(metadata_json, '$.semanticStatus') = 'completed' THEN 0
16
+ WHEN status = 'completed' THEN 1
17
+ WHEN status = 'partial' THEN 2
18
+ ELSE 3
19
+ END,
20
+ COALESCE(completed_at, started_at) DESC,
21
+ rowid DESC
22
+ ) AS keep_id,
23
+ ROW_NUMBER() OVER (
24
+ PARTITION BY connector_learning_job_id
25
+ ORDER BY
26
+ CASE
27
+ WHEN json_extract(metadata_json, '$.semanticStatus') = 'completed' THEN 0
28
+ WHEN status = 'completed' THEN 1
29
+ WHEN status = 'partial' THEN 2
30
+ ELSE 3
31
+ END,
32
+ COALESCE(completed_at, started_at) DESC,
33
+ rowid DESC
34
+ ) AS rank
35
+ FROM understanding_source_runs
36
+ WHERE connector_learning_job_id IS NOT NULL
37
+ )
38
+ SELECT duplicate_id, keep_id FROM ranked WHERE rank > 1;
39
+
40
+ UPDATE context_evidence
41
+ SET source_run_id = (
42
+ SELECT keep_id FROM duplicate_connector_source_runs
43
+ WHERE duplicate_id = context_evidence.source_run_id
44
+ )
45
+ WHERE source_run_id IN (SELECT duplicate_id FROM duplicate_connector_source_runs);
46
+
47
+ DELETE FROM context_extraction_runs
48
+ WHERE source_ref IN (
49
+ SELECT 'understanding-source-run:' || duplicate_id FROM duplicate_connector_source_runs
50
+ )
51
+ AND EXISTS (
52
+ SELECT 1
53
+ FROM duplicate_connector_source_runs duplicates
54
+ JOIN context_extraction_runs kept
55
+ ON kept.source_ref = 'understanding-source-run:' || duplicates.keep_id
56
+ AND kept.principal_id = context_extraction_runs.principal_id
57
+ AND kept.extractor_id = context_extraction_runs.extractor_id
58
+ AND kept.extractor_version = context_extraction_runs.extractor_version
59
+ WHERE context_extraction_runs.source_ref = 'understanding-source-run:' || duplicates.duplicate_id
60
+ );
61
+
62
+ UPDATE context_extraction_runs
63
+ SET source_ref = 'understanding-source-run:' || (
64
+ SELECT keep_id FROM duplicate_connector_source_runs
65
+ WHERE 'understanding-source-run:' || duplicate_id = context_extraction_runs.source_ref
66
+ )
67
+ WHERE source_ref IN (
68
+ SELECT 'understanding-source-run:' || duplicate_id FROM duplicate_connector_source_runs
69
+ );
70
+
71
+ UPDATE knowledge_items
72
+ SET source_json = json_set(
73
+ source_json,
74
+ '$.sourceRunId',
75
+ (
76
+ SELECT keep_id FROM duplicate_connector_source_runs
77
+ WHERE duplicate_id = json_extract(knowledge_items.source_json, '$.sourceRunId')
78
+ )
79
+ )
80
+ WHERE json_extract(source_json, '$.sourceRunId') IN (
81
+ SELECT duplicate_id FROM duplicate_connector_source_runs
82
+ );
83
+
84
+ DELETE FROM understanding_source_runs
85
+ WHERE run_id IN (SELECT duplicate_id FROM duplicate_connector_source_runs);
86
+
87
+ DROP TABLE duplicate_connector_source_runs;
88
+
89
+ CREATE UNIQUE INDEX idx_understanding_source_runs_connector_job
90
+ ON understanding_source_runs(connector_learning_job_id)
91
+ WHERE connector_learning_job_id IS NOT NULL;
92
+
93
+ ALTER TABLE context_extraction_outputs RENAME TO context_extraction_outputs_v200;
94
+
95
+ CREATE TABLE context_extraction_outputs (
96
+ output_id TEXT PRIMARY KEY,
97
+ extraction_run_id TEXT NOT NULL REFERENCES context_extraction_runs(extraction_run_id) ON DELETE CASCADE,
98
+ ordinal INTEGER NOT NULL,
99
+ candidate_key TEXT NOT NULL,
100
+ object_type TEXT CHECK (object_type IN ('assertion', 'rule', 'goal', 'knowledge')),
101
+ object_id TEXT,
102
+ version_id TEXT,
103
+ outcome TEXT NOT NULL CHECK (outcome IN ('created', 'deduplicated', 'rejected')),
104
+ created_at INTEGER NOT NULL,
105
+ UNIQUE (extraction_run_id, ordinal)
106
+ );
107
+
108
+ INSERT INTO context_extraction_outputs (
109
+ output_id, extraction_run_id, ordinal, candidate_key, object_type,
110
+ object_id, version_id, outcome, created_at
111
+ )
112
+ SELECT
113
+ output_id,
114
+ extraction_run_id,
115
+ ordinal,
116
+ candidate_key,
117
+ CASE object_type WHEN 'rule' THEN 'rule' ELSE NULL END,
118
+ CASE object_type WHEN 'rule' THEN object_id ELSE NULL END,
119
+ CASE object_type WHEN 'rule' THEN version_id ELSE NULL END,
120
+ outcome,
121
+ created_at
122
+ FROM context_extraction_outputs_v200;
123
+
124
+ DROP TABLE context_extraction_outputs_v200;
125
+
126
+ CREATE INDEX idx_context_extraction_outputs_object
127
+ ON context_extraction_outputs(object_type, object_id);
@@ -3,7 +3,7 @@ import type { ApplyMigrationsOptions } from './types.js';
3
3
  /** Baseline schema version applied from schema.sql on first open. */
4
4
  export declare const XOPC_DB_BASELINE_SCHEMA_VERSION = 165;
5
5
  /** Latest schema version this release supports (increment when adding migrations). */
6
- export declare const XOPC_DB_SCHEMA_VERSION = 199;
6
+ export declare const XOPC_DB_SCHEMA_VERSION = 201;
7
7
  export declare function resolveMigrationsDir(override?: string): string;
8
8
  /**
9
9
  * Apply sequential SQL migrations from (currentVersion + 1) through targetVersion.
@@ -26,7 +26,7 @@ function applySingleMigration(db, migration, discardOldScenes = false) {
26
26
  targetVersion: migration.targetVersion,
27
27
  file: migration.filename
28
28
  }, "Applying SQLite migration");
29
- const requiresForeignKeyPause = discardOldScenes || migration.targetVersion === 179 || migration.targetVersion === 182 || migration.targetVersion === 188;
29
+ const requiresForeignKeyPause = discardOldScenes || migration.targetVersion === 179 || migration.targetVersion === 182 || migration.targetVersion === 188 || migration.targetVersion === 200 || migration.targetVersion === 201;
30
30
  const foreignKeysEnabled = Number(db.prepare("PRAGMA foreign_keys").get()?.foreign_keys) === 1;
31
31
  if (requiresForeignKeyPause) db.exec("PRAGMA foreign_keys = OFF");
32
32
  let transactionStarted = false;
@@ -57,7 +57,7 @@ function applySingleMigration(db, migration, discardOldScenes = false) {
57
57
  */
58
58
  function applyPendingMigrations(db, options = {}) {
59
59
  db.function("xopc_operation_id", () => currentOperationId() ?? null);
60
- const targetVersion = options.targetVersion ?? 199;
60
+ const targetVersion = options.targetVersion ?? 201;
61
61
  let currentVersion = readSchemaVersion(db);
62
62
  if (currentVersion > targetVersion) throw new DatabaseSchemaTooNewError(currentVersion, targetVersion);
63
63
  if (!options.migrationsDir && currentVersion < 165) throw new DatabaseSchemaTooOldError(currentVersion, 165);
@@ -95,7 +95,7 @@ function applyPendingMigrations(db, options = {}) {
95
95
  }
96
96
  /** Inspect schema version without mutating the database. */
97
97
  function inspectSchemaMigrationStatus(db, options = {}) {
98
- const appVersion = options.targetVersion ?? 199;
98
+ const appVersion = options.targetVersion ?? 201;
99
99
  const dbVersion = readSchemaVersion(db);
100
100
  if (dbVersion > appVersion) return {
101
101
  dbVersion,
@@ -137,7 +137,7 @@ var init_runner = __esmMin((() => {
137
137
  init_errors();
138
138
  log = createLogger("Sqlite:Migrations");
139
139
  XOPC_DB_BASELINE_SCHEMA_VERSION = 165;
140
- XOPC_DB_SCHEMA_VERSION = 199;
140
+ XOPC_DB_SCHEMA_VERSION = 201;
141
141
  }));
142
142
  //#endregion
143
143
  init_runner();
@@ -28,7 +28,7 @@ function ensureXopcDatabaseSchema(db, options = {}) {
28
28
  currentVersion = 165;
29
29
  }
30
30
  applyPendingMigrations(db, {
31
- targetVersion: 199,
31
+ targetVersion: 201,
32
32
  databasePath: fresh ? void 0 : options.databasePath
33
33
  });
34
34
  }
@@ -2275,7 +2275,7 @@ CREATE TABLE knowledge_items (
2275
2275
  knowledge_id TEXT PRIMARY KEY,
2276
2276
  principal_id TEXT NOT NULL,
2277
2277
  kind TEXT NOT NULL CHECK(kind IN (
2278
- 'project_fact', 'workspace_fact', 'decision', 'task_lesson',
2278
+ 'work_thread', 'project_fact', 'workspace_fact', 'decision', 'task_lesson',
2279
2279
  'commitment', 'open_question', 'episode', 'note'
2280
2280
  )),
2281
2281
  scope_type TEXT NOT NULL CHECK(scope_type IN ('global', 'agent', 'workspace', 'project', 'session')),
@@ -6,9 +6,9 @@ import { getSessionMetadata } from "../../storage/sqlite/session-read-repository
6
6
  import "../../storage/sqlite/index.js";
7
7
  import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
8
8
  import { init_agent_scope, listAgentEntries, normalizeAgentId } from "../../agent/agent-scope.js";
9
+ import { loadConfig, saveConfig } from "../../config/loader.js";
9
10
  import { createConversation, init_conversation_repository } from "../../storage/sqlite/conversation-repository.js";
10
11
  import { init_agent_session_key, resolveAgentIdFromConversationId } from "../../routing/agent-session-key.js";
11
- import { loadConfig, saveConfig } from "../../config/loader.js";
12
12
  import { effectiveWorkspacePathForSession } from "../../session/session-workspace.js";
13
13
  import { ProjectService } from "../../projects/project-service.js";
14
14
  import { inferSuggestedProjectDefaultAgentId } from "../../projects/project-agent-suggestion.js";
@@ -24,6 +24,7 @@ import { parseModelRef } from "../../agent/models/selection.js";
24
24
  import { buildReviewContext, resolveGitRoot } from "../../review/review-git.js";
25
25
  import { MessageBus, MessageBusShutdownError } from "../../infra/bus/queue.js";
26
26
  import "../../infra/bus/index.js";
27
+ import { prependEnvelopeTimestamp } from "../../channels/envelope-timestamp.js";
27
28
  import { getWorkspacePath } from "../../config/workspace-path-helpers.js";
28
29
  import "../../config/index.js";
29
30
  import { buildWorkflowChildTools } from "../../agent/workflow/workflow-child-tools.js";
@@ -31,7 +32,6 @@ import { WorkflowRunService } from "../../workflows/service/workflow-run-service
31
32
  import { WorkflowSessionBridge } from "../../workflows/service/workflow-session-bridge.js";
32
33
  import { ChatStreamMapper } from "../../gateway/chat-stream/mapper.js";
33
34
  import { getXopcCloudCatalogCoordinator } from "../../providers/xopc-cloud-catalog-coordinator.js";
34
- import { prependEnvelopeTimestamp } from "../../channels/envelope-timestamp.js";
35
35
  import { fuzzySearchWorkspaceFiles } from "../../gateway/workspace-file-search.js";
36
36
  import { commitDeliveredChatInput } from "../tui-chat-input-state.js";
37
37
  import { sessionMetadataToTuiItem } from "../tui-session-format.js";
@@ -2,8 +2,8 @@ import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
3
  import { transcriptRowsToClientHistory } from "../../session/client-history.js";
4
4
  import { parseModelRef } from "../../agent/models/selection.js";
5
- import { gatewayCredentialAuthorization } from "../../gateway/credential.js";
6
5
  import { prependEnvelopeTimestamp } from "../../channels/envelope-timestamp.js";
6
+ import { gatewayCredentialAuthorization } from "../../gateway/credential.js";
7
7
  import { RealtimeClient } from "../../../packages/realtime-client/src/index.js";
8
8
  import { buildTuiTranscriptTree, transcriptTreeEntryIdToRowNumber } from "../tui-transcript-tree.js";
9
9
  import { computeTuiSessionStats } from "../tui-session-stats.js";
@@ -2,9 +2,9 @@ import { closeXopcDatabase, isXopcDatabaseOpen, openXopcDatabase } from "../stor
2
2
  import { TaskRepository } from "../tasks/task-repository.js";
3
3
  import { getSessionMetadata } from "../storage/sqlite/session-read-repository.js";
4
4
  import "../storage/sqlite/index.js";
5
- import { init_agent_session_key, isValidAgentId, normalizeAgentId } from "../routing/agent-session-key.js";
6
5
  import { resolveConfigPath } from "../config/paths.js";
7
6
  import { loadConfig } from "../config/loader.js";
7
+ import { init_agent_session_key, isValidAgentId, normalizeAgentId } from "../routing/agent-session-key.js";
8
8
  import { init_providers, providerSupportsOAuth } from "../providers/index.js";
9
9
  import { ProjectService } from "../projects/project-service.js";
10
10
  import { isValidProjectAgentId, normalizeProjectAgentId } from "../projects/project-agent.js";
@@ -1,6 +1,6 @@
1
1
  import { resolveStateDir } from "../config/paths-state.js";
2
- import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
3
2
  import { init_paths, resolveAgentProfileDir, resolveBundledSkillsDir } from "../config/paths.js";
3
+ import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
4
4
  import { resolveBootstrapFilesSync } from "../agent/bootstrap/bootstrap-files.js";
5
5
  import { listConnectorInstances } from "../connectors/instances.js";
6
6
  import { createSkillConfigManager, isSkillEnabled } from "../agent/skills/config.js";
@@ -1,10 +1,10 @@
1
1
  import { version } from "../../package.js";
2
2
  import { resolveStateDir, resolveXopcDatabasePath } from "../config/paths-state.js";
3
- import { init_agent_session_key, normalizeAgentId } from "../routing/agent-session-key.js";
4
- import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
5
3
  import { init_paths } from "../config/paths.js";
6
4
  import { loadConfig } from "../config/loader.js";
5
+ import { init_agent_session_key, normalizeAgentId } from "../routing/agent-session-key.js";
7
6
  import { getAllModels, getAllProviders, getApiKey, init_providers, isProviderConfiguredSync } from "../providers/index.js";
7
+ import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
8
8
  import { ProjectTrustStore, hasTrustRequiringProjectResources } from "../project-trust/trust-store.js";
9
9
  import { MAX_WEBCHAT_ATTACHMENT_FILE_BYTES } from "../gateway/chat-limits.js";
10
10
  import { renderWorkflowFinalSummary, renderWorkflowPanel } from "../agent/workflow/snapshot.js";
@@ -52,19 +52,6 @@ export type CollaborationRule = {
52
52
  createdAt: number;
53
53
  updatedAt: number;
54
54
  };
55
- export type PersonalizationItem = {
56
- objectType: 'profile' | 'rule' | 'focus' | 'understanding';
57
- objectId: string;
58
- versionId?: string;
59
- decision: 'selected' | 'irrelevant' | 'expired' | 'scope_mismatch' | 'sensitive' | 'needs_consent' | 'budget_exceeded' | 'conflicted' | 'disabled';
60
- reason: string;
61
- content: string;
62
- sourceLabel: string;
63
- origin: 'told_by_user' | 'observed' | 'inferred' | 'connected_source';
64
- rank?: number;
65
- score?: number;
66
- injectedChars: number;
67
- };
68
55
  export type ContextEvidence = {
69
56
  id: string;
70
57
  sourceType: 'conversation' | 'connector' | 'user' | 'runtime';
@@ -1,4 +1,4 @@
1
- import { createUnderstandingSourceRun, getUnderstandingSourceGrant, getUnderstandingSourceRun, listUnderstandingSourceGrants, listUnderstandingSourceRuns, revokeUnderstandingSourceGrant, updateUnderstandingSourceGrantCheckpoint, updateUnderstandingSourceGrantPolicies, updateUnderstandingSourceRun, upsertUnderstandingSourceGrant } from "./repository.js";
1
+ import { createUnderstandingSourceRun, getConnectorUnderstandingSourceRun, getOrCreateConnectorUnderstandingSourceRun, getUnderstandingSourceGrant, getUnderstandingSourceRun, listUnderstandingSourceGrants, listUnderstandingSourceRuns, revokeUnderstandingSourceGrant, updateUnderstandingSourceGrantCheckpoint, updateUnderstandingSourceGrantPolicies, updateUnderstandingSourceRun, upsertUnderstandingSourceGrant } from "./repository.js";
2
2
  import { clusterUnderstandingSignals, tokenizeUnderstandingSignal } from "./signal-clustering.js";
3
3
  import { listUnderstandingSourceDefinitions } from "./catalog.js";
4
- export { clusterUnderstandingSignals, createUnderstandingSourceRun, getUnderstandingSourceGrant, getUnderstandingSourceRun, listUnderstandingSourceDefinitions, listUnderstandingSourceGrants, listUnderstandingSourceRuns, revokeUnderstandingSourceGrant, tokenizeUnderstandingSignal, updateUnderstandingSourceGrantCheckpoint, updateUnderstandingSourceGrantPolicies, updateUnderstandingSourceRun, upsertUnderstandingSourceGrant };
4
+ export { clusterUnderstandingSignals, createUnderstandingSourceRun, getConnectorUnderstandingSourceRun, getOrCreateConnectorUnderstandingSourceRun, getUnderstandingSourceGrant, getUnderstandingSourceRun, listUnderstandingSourceDefinitions, listUnderstandingSourceGrants, listUnderstandingSourceRuns, revokeUnderstandingSourceGrant, tokenizeUnderstandingSignal, updateUnderstandingSourceGrantCheckpoint, updateUnderstandingSourceGrantPolicies, updateUnderstandingSourceRun, upsertUnderstandingSourceGrant };
@@ -24,10 +24,20 @@ export declare function createUnderstandingSourceRun(input: {
24
24
  grantId: string;
25
25
  kind: UnderstandingSourceRun['kind'];
26
26
  status?: UnderstandingSourceRun['status'];
27
+ connectorLearningJobId?: string;
27
28
  cursorBefore?: string;
28
29
  metadata?: Record<string, unknown>;
29
30
  nowMs?: number;
30
31
  }): UnderstandingSourceRun;
32
+ export declare function getConnectorUnderstandingSourceRun(connectorLearningJobId: string): UnderstandingSourceRun | null;
33
+ export declare function getOrCreateConnectorUnderstandingSourceRun(input: {
34
+ grantId: string;
35
+ connectorLearningJobId: string;
36
+ kind: UnderstandingSourceRun['kind'];
37
+ status?: UnderstandingSourceRun['status'];
38
+ metadata?: Record<string, unknown>;
39
+ nowMs?: number;
40
+ }): UnderstandingSourceRun;
31
41
  export declare function getUnderstandingSourceRun(id: string): UnderstandingSourceRun | null;
32
42
  export declare function listUnderstandingSourceRuns(grantId: string, limit?: number): UnderstandingSourceRun[];
33
43
  export declare function updateUnderstandingSourceRun(id: string, patch: {
@@ -35,6 +35,7 @@ function runFromRow(row) {
35
35
  id: row.run_id,
36
36
  grantId: row.grant_id,
37
37
  kind: row.kind,
38
+ ...row.connector_learning_job_id ? { connectorLearningJobId: row.connector_learning_job_id } : {},
38
39
  status: row.status,
39
40
  ...row.cursor_before ? { cursorBefore: row.cursor_before } : {},
40
41
  ...row.cursor_after ? { cursorAfter: row.cursor_after } : {},
@@ -104,11 +105,25 @@ function createUnderstandingSourceRun(input) {
104
105
  const now = input.nowMs ?? Date.now();
105
106
  runSqliteWriteTransaction((db) => db.prepare(`
106
107
  INSERT INTO understanding_source_runs (
107
- run_id, grant_id, kind, status, cursor_before, metadata_json, started_at
108
- ) VALUES (?, ?, ?, ?, ?, ?, ?)
109
- `).run(id, input.grantId, input.kind, input.status ?? "running", input.cursorBefore ?? null, JSON.stringify(input.metadata ?? {}), now));
108
+ run_id, grant_id, connector_learning_job_id, kind, status, cursor_before, metadata_json, started_at
109
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
110
+ `).run(id, input.grantId, input.connectorLearningJobId ?? null, input.kind, input.status ?? "running", input.cursorBefore ?? null, JSON.stringify(input.metadata ?? {}), now));
110
111
  return getUnderstandingSourceRun(id);
111
112
  }
113
+ function getConnectorUnderstandingSourceRun(connectorLearningJobId) {
114
+ const row = getSqliteDatabase().prepare("SELECT * FROM understanding_source_runs WHERE connector_learning_job_id = ?").get(connectorLearningJobId);
115
+ return row ? runFromRow(row) : null;
116
+ }
117
+ function getOrCreateConnectorUnderstandingSourceRun(input) {
118
+ const id = randomUUID();
119
+ const now = input.nowMs ?? Date.now();
120
+ runSqliteWriteTransaction((db) => db.prepare(`
121
+ INSERT OR IGNORE INTO understanding_source_runs (
122
+ run_id, grant_id, connector_learning_job_id, kind, status, metadata_json, started_at
123
+ ) VALUES (?, ?, ?, ?, ?, ?, ?)
124
+ `).run(id, input.grantId, input.connectorLearningJobId, input.kind, input.status ?? "running", JSON.stringify(input.metadata ?? {}), now));
125
+ return getConnectorUnderstandingSourceRun(input.connectorLearningJobId);
126
+ }
112
127
  function getUnderstandingSourceRun(id) {
113
128
  const row = getSqliteDatabase().prepare("SELECT * FROM understanding_source_runs WHERE run_id = ?").get(id);
114
129
  return row ? runFromRow(row) : null;
@@ -127,4 +142,4 @@ function updateUnderstandingSourceRun(id, patch) {
127
142
  return getUnderstandingSourceRun(id);
128
143
  }
129
144
  //#endregion
130
- export { createUnderstandingSourceRun, getUnderstandingSourceGrant, getUnderstandingSourceRun, listUnderstandingSourceGrants, listUnderstandingSourceRuns, revokeUnderstandingSourceGrant, updateUnderstandingSourceGrantCheckpoint, updateUnderstandingSourceGrantPolicies, updateUnderstandingSourceRun, upsertUnderstandingSourceGrant };
145
+ export { createUnderstandingSourceRun, getConnectorUnderstandingSourceRun, getOrCreateConnectorUnderstandingSourceRun, getUnderstandingSourceGrant, getUnderstandingSourceRun, listUnderstandingSourceGrants, listUnderstandingSourceRuns, revokeUnderstandingSourceGrant, updateUnderstandingSourceGrantCheckpoint, updateUnderstandingSourceGrantPolicies, updateUnderstandingSourceRun, upsertUnderstandingSourceGrant };
@@ -63,6 +63,7 @@ export interface UnderstandingSourceCollectionResult {
63
63
  export interface UnderstandingSourceRun {
64
64
  id: string;
65
65
  grantId: string;
66
+ connectorLearningJobId?: string;
66
67
  kind: 'preview' | 'bootstrap' | 'incremental' | 'fingerprint';
67
68
  status: 'queued' | 'running' | 'completed' | 'partial' | 'failed' | 'canceled';
68
69
  cursorBefore?: string;
@@ -2,8 +2,8 @@ import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
3
  import { join } from "path";
4
4
  import { unlink, writeFile } from "fs/promises";
5
- import { tmpdir } from "os";
6
5
  import { spawn } from "child_process";
6
+ import { tmpdir } from "os";
7
7
  //#region src/voice/tts/audio.ts
8
8
  /**
9
9
  * Audio Compression Utilities
@@ -8,15 +8,15 @@ import { ActivityService } from "../activity/service.js";
8
8
  import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
9
9
  import { init_session_key, resolveConversationId } from "../routing/session-key.js";
10
10
  import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
11
- import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
12
11
  import { init_providers, resolveModel } from "../providers/index.js";
12
+ import { isLocalModelBaseUrl } from "../providers/model-call.js";
13
+ import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
13
14
  import { writeKnowledgeItem } from "../knowledge-memory/repository.js";
14
15
  import "../knowledge-memory/index.js";
15
16
  import { createWorkDiscoveryRun, getProjectUnderstandingRun, getWorkDiscoveryOnboardingState, getWorkDiscoveryRun, getWorkDiscoveryRunByIdempotencyKey, listPendingProjectUnderstandingRuns, setWorkDiscoveryFeedback, setWorkDiscoveryOnboardingState, updateWorkDiscoveryRun } from "./repository.js";
16
17
  import { createPriorityWindow, createUserGoal } from "../user-model/goals.js";
17
18
  import { linkAssertionEvidence, reconcileAssertion } from "../user-model/repository.js";
18
19
  import "../user-model/index.js";
19
- import { isLocalModelBaseUrl } from "../providers/model-call.js";
20
20
  import { allowsRemoteSourceProcessing } from "../user-context/sources/processing-policy.js";
21
21
  import { analyzeUnderstandingSources, analyzeWorkContext, workDiscoveryResultMarkdown } from "./analyzer.js";
22
22
  import { createUnderstandingSourceRun, getUnderstandingSourceGrant, getUnderstandingSourceRun, updateUnderstandingSourceGrantCheckpoint, updateUnderstandingSourceGrantPolicies, updateUnderstandingSourceRun, upsertUnderstandingSourceGrant } from "../user-context/sources/repository.js";
@@ -2,8 +2,8 @@ import { TaskRepository, init_task_repository } from "../../tasks/task-repositor
2
2
  import { TaskRunRepository, init_task_run_repository } from "../../tasks/task-run-repository.js";
3
3
  import { init_conversation_repository, resolveRoutedConversation } from "../../storage/sqlite/conversation-repository.js";
4
4
  import { getDefaultAgentId, init_resolve_route } from "../../routing/resolve-route.js";
5
- import { extractProfileAgentId, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
6
5
  import { init_providers, resolveModel } from "../../providers/index.js";
6
+ import { extractProfileAgentId, resolveEffectiveAgentProfile, resolveEffectiveAgentProfileForSession } from "../../config/agent-profile.js";
7
7
  import { TaskConversationRepository } from "../../tasks/task-conversation-repository.js";
8
8
  import { getProjectWorkspacePathForSession } from "../../projects/workspace.js";
9
9
  import { publishAutomationProductEvent } from "../../automations/product-events.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xopcai/xopc",
3
- "version": "0.0.314",
3
+ "version": "0.0.316",
4
4
  "description": "Local-first personal AI for the one-person company, with durable context, tasks, workflows, automations, and local or cloud models.",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -66,10 +66,10 @@
66
66
  },
67
67
  "dependencies": {
68
68
  "@composio/core": "0.18.1",
69
- "@earendil-works/pi-agent-core": "0.85.1",
70
- "@earendil-works/pi-ai": "0.85.1",
71
- "@earendil-works/pi-coding-agent": "0.85.1",
72
- "@earendil-works/pi-tui": "0.85.1",
69
+ "@earendil-works/pi-agent-core": "0.87.0",
70
+ "@earendil-works/pi-ai": "0.87.0",
71
+ "@earendil-works/pi-coding-agent": "0.87.0",
72
+ "@earendil-works/pi-tui": "0.87.0",
73
73
  "@grammyjs/runner": "^2.0.3",
74
74
  "@hono/node-server": "^2.0.4",
75
75
  "@inquirer/prompts": "^8.5.0",
@@ -170,10 +170,10 @@
170
170
  "vitest": "4.1.5",
171
171
  "vue": "^3.5.35",
172
172
  "@xopcai/browser-control-contract": "0.1.0",
173
+ "@xopcai/computer-control-contract": "0.1.0",
173
174
  "@xopcai/endpoint-tools-client": "0.0.0",
174
175
  "@xopcai/endpoint-tools-protocol": "0.0.0",
175
176
  "@xopcai/gateway-contract": "0.0.0",
176
- "@xopcai/computer-control-contract": "0.1.0",
177
177
  "@xopcai/realtime-client": "0.0.0",
178
178
  "@xopcai/realtime-protocol": "0.0.0"
179
179
  },