@xopcai/xopc 0.0.315 → 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 (186) 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/{agent-avatar-dicebear-BbFOF2SH.js → agent-avatar-dicebear-XIyH14Sn.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-defaults-settings-panel-D9T-QGmd.js → agent-defaults-settings-panel-DJl_o7Xf.js} +1 -1
  5. package/dist/gateway/static/root/assets/{agents-Ds5sQcPd.js → agents-CGFhxPFv.js} +1 -1
  6. package/dist/gateway/static/root/assets/{api-BzloAiIG.js → api-Dy056n2_.js} +1 -1
  7. package/dist/gateway/static/root/assets/{app-management-settings-panel-BpUHskXq.js → app-management-settings-panel-Dp7Fcj2Z.js} +1 -1
  8. package/dist/gateway/static/root/assets/{appearance-settings-CQd5Vo6f.js → appearance-settings-CSUffLjx.js} +1 -1
  9. package/dist/gateway/static/root/assets/{apps-page-B7VIsfye.js → apps-page-DtIcKfJG.js} +1 -1
  10. package/dist/gateway/static/root/assets/{archive-plugin-BM4O6WfL.js → archive-plugin-D3SdndlF.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-Cdn9MYmI.js → attachment-load-BgxXYRkd.js} +1 -1
  12. package/dist/gateway/static/root/assets/{automations-page-DnRx-Ra4.js → automations-page-krhofMgL.js} +1 -1
  13. package/dist/gateway/static/root/assets/{automations-workspace-B5s10G5F.js → automations-workspace-EbpneB06.js} +1 -1
  14. package/dist/gateway/static/root/assets/{binary-plugins-dkhUf4bm.js → binary-plugins-w6lazTqo.js} +1 -1
  15. package/dist/gateway/static/root/assets/{block-editor-BTzqEuAy.js → block-editor-CxHqPODE.js} +3 -3
  16. package/dist/gateway/static/root/assets/{browser-automation-inputs-Bowij-nJ.js → browser-automation-inputs-hNdEgfGG.js} +1 -1
  17. package/dist/gateway/static/root/assets/{browser-automations-page-CQ7SYTQj.js → browser-automations-page-BYsGJ_xs.js} +1 -1
  18. package/dist/gateway/static/root/assets/{browser-settings-page-vqLoPOOg.js → browser-settings-page-CP_c5q0V.js} +1 -1
  19. package/dist/gateway/static/root/assets/{capabilities-settings-panel-DI68WGYd.js → capabilities-settings-panel-ljW3s3vv.js} +1 -1
  20. package/dist/gateway/static/root/assets/{channels-settings-Cimssy-S.js → channels-settings-CR9SRgFp.js} +1 -1
  21. package/dist/gateway/static/root/assets/{chat-terminal-dock-DzgFHd6l.js → chat-terminal-dock-medSiQoQ.js} +1 -1
  22. package/dist/gateway/static/root/assets/{computer-settings-page-380_vIqO.js → computer-settings-page-DJxO0CfY.js} +1 -1
  23. package/dist/gateway/static/root/assets/{connector-service-page-DILFakXb.js → connector-service-page-WaoUqr8a.js} +1 -1
  24. package/dist/gateway/static/root/assets/{connectors-page-COmFp9HC.js → connectors-page-KIi15pQl.js} +1 -1
  25. package/dist/gateway/static/root/assets/{date-picker-CRVun-T5.js → date-picker-DalDr0E6.js} +1 -1
  26. package/dist/gateway/static/root/assets/{dependency-picker-BoWqt5yU.js → dependency-picker-ONChq2Yr.js} +1 -1
  27. package/dist/gateway/static/root/assets/{desktop-pet-DPlkBjft.js → desktop-pet-b1a37SVn.js} +1 -1
  28. package/dist/gateway/static/root/assets/{desktop-pet-settings-D7FgfX_K.js → desktop-pet-settings-CwqZxGv4.js} +1 -1
  29. package/dist/gateway/static/root/assets/{device-pairing-wizard-BP6yxut8.js → device-pairing-wizard-C_MNpS30.js} +1 -1
  30. package/dist/gateway/static/root/assets/{extension-debug-page-CT_QkSN_.js → extension-debug-page-CGthPGca.js} +1 -1
  31. package/dist/gateway/static/root/assets/{extension-page-BF1NdcKP.js → extension-page-CExNJs0G.js} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-settings-page-CKQVZ3Xc.js → extension-settings-page-DBfxzKR8.js} +1 -1
  33. package/dist/gateway/static/root/assets/{gateway-config-swr-BPsZPoAT.js → gateway-config-swr-DFjsI4QK.js} +1 -1
  34. package/dist/gateway/static/root/assets/{gateway-settings-3bIy7XMr.js → gateway-settings-BlpheZrf.js} +1 -1
  35. package/dist/gateway/static/root/assets/{gateway-startup-retry-cG6EqUJw.js → gateway-startup-retry-oRRqSoe9.js} +1 -1
  36. package/dist/gateway/static/root/assets/{home-page-DFNDLFgv.js → home-page-BvdT-uaI.js} +1 -1
  37. package/dist/gateway/static/root/assets/{image-generation-api-DI_QutIx.js → image-generation-api-CyDy_Sxu.js} +1 -1
  38. package/dist/gateway/static/root/assets/{imports-page-BUG6G72F.js → imports-page-Dnp2hmFL.js} +1 -1
  39. package/dist/gateway/static/root/assets/index-BYKatjhB.css +1 -0
  40. package/dist/gateway/static/root/assets/{index-BCi8nfxs.js → index-DhCnwCI9.js} +38 -38
  41. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-qnG-4FJs.js → keyboard-shortcuts-settings-1DUcGrYh.js} +1 -1
  42. package/dist/gateway/static/root/assets/{local-app-workbench-page-B3iJWhjN.js → local-app-workbench-page-BW2-80Og.js} +1 -1
  43. package/dist/gateway/static/root/assets/{local-apps-page-BpEGeURS.js → local-apps-page-C7_2zyV_.js} +1 -1
  44. package/dist/gateway/static/root/assets/{locale-store-BlgpZORR.js → locale-store-D6VmRI5e.js} +1 -1
  45. package/dist/gateway/static/root/assets/{logs-page-0QPGj-5c.js → logs-page-Cbr7bPM6.js} +1 -1
  46. package/dist/gateway/static/root/assets/{management-settings-Sl0wwidS.js → management-settings-G7GcFx2_.js} +1 -1
  47. package/dist/gateway/static/root/assets/{markdown-view-BzjjpL2H.js → markdown-view-B5MfZeKH.js} +1 -1
  48. package/dist/gateway/static/root/assets/{media-plugins-Bzkdhotn.js → media-plugins-IbcEpV96.js} +1 -1
  49. package/dist/gateway/static/root/assets/messages-BCqLsIZK.js +3 -0
  50. package/dist/gateway/static/root/assets/{note-detail-panel-BXtD71j1.js → note-detail-panel-C4DiKkDf.js} +3 -3
  51. package/dist/gateway/static/root/assets/{notes-page-DNY4vW-u.js → notes-page-DgHQmpVq.js} +1 -1
  52. package/dist/gateway/static/root/assets/{page-context-capture-button-CFt4hXQ6.js → page-context-capture-button-B5rZ_F0R.js} +1 -1
  53. package/dist/gateway/static/root/assets/{page-tabs-Dz_x22MQ.js → page-tabs-B84Yghg5.js} +1 -1
  54. package/dist/gateway/static/root/assets/{preview-open-alternatives-C1mkgFAl.js → preview-open-alternatives-CaEtDmZO.js} +1 -1
  55. package/dist/gateway/static/root/assets/{product-open-page-DHZgzSDV.js → product-open-page-BK9z5b-v.js} +1 -1
  56. package/dist/gateway/static/root/assets/{project-detail-page-D3NhZ7ZZ.js → project-detail-page-Qj8Xb9qS.js} +1 -1
  57. package/dist/gateway/static/root/assets/{projects-page-CEr8DX9I.js → projects-page-BOp6swwM.js} +1 -1
  58. package/dist/gateway/static/root/assets/{registry-api-DMW2apOO.js → registry-api-sOL6E5LU.js} +1 -1
  59. package/dist/gateway/static/root/assets/{remote-access-hub-Db-B-Mf3.js → remote-access-hub-yb8l4ppq.js} +1 -1
  60. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-DEJi0BLL.js → runtime-tools-settings-panel-BAvzw1T0.js} +1 -1
  61. package/dist/gateway/static/root/assets/{scenes-page-BUUX-PnI.js → scenes-page-CiAgb7hf.js} +1 -1
  62. package/dist/gateway/static/root/assets/{schema-form-RVltVpuG.js → schema-form-Dytkw9RZ.js} +1 -1
  63. package/dist/gateway/static/root/assets/{sessions-page-Rm4H2okS.js → sessions-page-43hcOW84.js} +1 -1
  64. package/dist/gateway/static/root/assets/settings-advanced-gate-C414vr2V.js +1 -0
  65. package/dist/gateway/static/root/assets/{settings-form-section-BkBO7woF.js → settings-form-section-DBJlmKQV.js} +1 -1
  66. package/dist/gateway/static/root/assets/{settings-page-zl0XY203.js → settings-page-C9GbP-ZG.js} +1 -1
  67. package/dist/gateway/static/root/assets/{settings-page-layout-lLvHc-zF.js → settings-page-layout-OvBOGen7.js} +1 -1
  68. package/dist/gateway/static/root/assets/{setup-status-panel-Difrpr4T.js → setup-status-panel-BCMym4xj.js} +1 -1
  69. package/dist/gateway/static/root/assets/{share-preview-page-NC4Gj867.js → share-preview-page-D-sx26yN.js} +1 -1
  70. package/dist/gateway/static/root/assets/{shares-settings-DPLvEcB-.js → shares-settings-EdNGhsuF.js} +1 -1
  71. package/dist/gateway/static/root/assets/skill-reload-api-DYYM1qVn.js +1 -0
  72. package/dist/gateway/static/root/assets/{skills-page-CzekvBNQ.js → skills-page-Cgrfnet5.js} +1 -1
  73. package/dist/gateway/static/root/assets/{skills-page.utils-BLeiN245.js → skills-page.utils-COPGVfmB.js} +1 -1
  74. package/dist/gateway/static/root/assets/{system-settings-panel-Bp75s9nl.js → system-settings-panel-B9tptggE.js} +1 -1
  75. package/dist/gateway/static/root/assets/{task-detail-page-Bh8H4FYR.js → task-detail-page-BrsM6Xmm.js} +1 -1
  76. package/dist/gateway/static/root/assets/{tunnel-api-BDiaC6an.js → tunnel-api-qb33IFGP.js} +1 -1
  77. package/dist/gateway/static/root/assets/{use-autosave-C_ntK_Zu.js → use-autosave-DfhqCGRX.js} +1 -1
  78. package/dist/gateway/static/root/assets/{user-model-page-C7gFCGAV.js → user-model-page-Sg94U7zz.js} +1 -1
  79. package/dist/gateway/static/root/assets/{voice-api-key-field-D4cfuMp1.js → voice-api-key-field-taBVzvtI.js} +1 -1
  80. package/dist/gateway/static/root/assets/{voice-config-api-Cjvd6maH.js → voice-config-api-B4yjd1Kb.js} +1 -1
  81. package/dist/gateway/static/root/assets/{work-discovery-overlay-Ce6ToB0O.js → work-discovery-overlay-DWGTB3Uk.js} +1 -1
  82. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-C80nrmKi.js → workflow-run-setup-panel-CP58uTNh.js} +1 -1
  83. package/dist/gateway/static/root/assets/{workflows-page-CVQjo3RI.js → workflows-page-Clka1xiQ.js} +1 -1
  84. package/dist/gateway/static/root/index.html +8 -8
  85. package/dist/package.js +1 -1
  86. package/dist/src/agent/agent-manager.js +18 -17
  87. package/dist/src/agent/background-review/run-background-review.js +1 -1
  88. package/dist/src/agent/embedded/model-runtime.js +1 -1
  89. package/dist/src/agent/embedded/run-for-session.js +1 -1
  90. package/dist/src/agent/embedded/run-turn.js +28 -15
  91. package/dist/src/agent/embedded/system-prompt-override.js +14 -3
  92. package/dist/src/agent/embedded/xopc-stream-bridge.js +13 -2
  93. package/dist/src/agent/image/tool-model-config.js +1 -1
  94. package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +1 -1
  95. package/dist/src/agent/memory/context-budget.js +1 -1
  96. package/dist/src/agent/orchestration/agent-turn-policy.d.ts +2 -2
  97. package/dist/src/agent/prompt/agent-system-prompt.d.ts +3 -0
  98. package/dist/src/agent/prompt/agent-system-prompt.js +16 -0
  99. package/dist/src/agent/service.js +2 -2
  100. package/dist/src/agent/session/session-inspector.js +1 -1
  101. package/dist/src/agent/skills/hub-lock.js +1 -1
  102. package/dist/src/agent/tasks/task-judge-service.js +3 -3
  103. package/dist/src/agent/tools/knowledge-memory-tool.js +1 -0
  104. package/dist/src/agent-config/schema.d.ts +8 -8
  105. package/dist/src/ai-assist/text-assist.js +3 -2
  106. package/dist/src/auth/credentials.js +2 -2
  107. package/dist/src/auth/oauth/xopc-cloud.js +1 -1
  108. package/dist/src/auth/profiles/store.js +1 -1
  109. package/dist/src/auth/sync-provider-auth.js +2 -2
  110. package/dist/src/browser/providers/browser-ext-install.js +1 -1
  111. package/dist/src/chat-commands/agent-edit.js +1 -1
  112. package/dist/src/cli/commands/agent.js +1 -1
  113. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  114. package/dist/src/cli/commands/doctor/checks/provider-auth.js +3 -3
  115. package/dist/src/cli/commands/models.js +1 -1
  116. package/dist/src/computer/runtime.js +1 -1
  117. package/dist/src/config/index.js +4 -4
  118. package/dist/src/config/loader.js +2 -2
  119. package/dist/src/config/models-json.js +2 -2
  120. package/dist/src/config/schema.d.ts +5 -5
  121. package/dist/src/config/schema.js +1 -1
  122. package/dist/src/connectors/connected-source-ingestion.d.ts +1 -0
  123. package/dist/src/connectors/connected-source-ingestion.js +1 -0
  124. package/dist/src/connectors/connected-source-understanding.d.ts +1 -0
  125. package/dist/src/connectors/connected-source-understanding.js +91 -31
  126. package/dist/src/connectors/content-enrichment.d.ts +1 -0
  127. package/dist/src/connectors/content-enrichment.js +3 -1
  128. package/dist/src/connectors/learning-coordinator.js +24 -24
  129. package/dist/src/extensions/lockfile.js +1 -1
  130. package/dist/src/gateway/agents-admin.js +1 -1
  131. package/dist/src/gateway/chat-stream/mapper.js +9 -4
  132. package/dist/src/gateway/chat-stream/protocol.d.ts +2 -1
  133. package/dist/src/gateway/file-path-classifier.js +1 -1
  134. package/dist/src/gateway/hono/lib/config-payload.d.ts +2 -2
  135. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  136. package/dist/src/gateway/hono/routes/connectors.js +1 -1
  137. package/dist/src/gateway/hono/routes/models.js +1 -1
  138. package/dist/src/gateway/hono/routes/user-model-refresh.js +2 -2
  139. package/dist/src/gateway/hono/routes/voice.js +1 -1
  140. package/dist/src/gateway/service/config-coordinator.js +1 -1
  141. package/dist/src/gateway/service.js +5 -5
  142. package/dist/src/knowledge/ingestion-service.d.ts +5 -2
  143. package/dist/src/knowledge/ingestion-service.js +24 -15
  144. package/dist/src/knowledge-memory/domain.d.ts +1 -1
  145. package/dist/src/notes/service.js +1 -1
  146. package/dist/src/platform/client.d.ts +1 -1
  147. package/dist/src/platform/contracts.d.ts +1 -1
  148. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
  149. package/dist/src/providers/extension-stream-bridge.js +6 -4
  150. package/dist/src/providers/index.js +2 -2
  151. package/dist/src/providers/model-call.js +3 -3
  152. package/dist/src/providers/model-catalog-persistence.js +1 -1
  153. package/dist/src/providers/model-registry.js +1 -1
  154. package/dist/src/providers/presentation.js +4 -3
  155. package/dist/src/providers/register-runtime-providers.js +1 -1
  156. package/dist/src/storage/sqlite/context-extraction-repository.d.ts +1 -2
  157. package/dist/src/storage/sqlite/context-extraction-repository.js +1 -9
  158. package/dist/src/storage/sqlite/index.d.ts +1 -2
  159. package/dist/src/storage/sqlite/index.js +2 -3
  160. package/dist/src/storage/sqlite/knowledge-repository.d.ts +1 -0
  161. package/dist/src/storage/sqlite/knowledge-repository.js +3 -0
  162. package/dist/src/storage/sqlite/migrations/200_connected_work_threads.sql +92 -0
  163. package/dist/src/storage/sqlite/migrations/201_connector_extraction_audit.sql +127 -0
  164. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  165. package/dist/src/storage/sqlite/migrations/runner.js +4 -4
  166. package/dist/src/storage/sqlite/schema.js +1 -1
  167. package/dist/src/storage/sqlite/schema.sql +1 -1
  168. package/dist/src/tui/backends/embedded-backend.js +1 -1
  169. package/dist/src/tui/tui-commands.js +1 -1
  170. package/dist/src/tui/tui-startup-resources.js +1 -1
  171. package/dist/src/tui/tui.js +2 -2
  172. package/dist/src/user-context/domain.d.ts +0 -13
  173. package/dist/src/user-context/sources/index.js +2 -2
  174. package/dist/src/user-context/sources/repository.d.ts +10 -0
  175. package/dist/src/user-context/sources/repository.js +19 -4
  176. package/dist/src/user-context/sources/types.d.ts +1 -0
  177. package/dist/src/voice/tts/audio.js +1 -1
  178. package/dist/src/work-discovery/service.js +2 -2
  179. package/dist/src/workflows/service/workflow-run-service.js +1 -1
  180. package/package.json +7 -7
  181. package/dist/gateway/static/root/assets/index-DWgd1VK2.css +0 -1
  182. package/dist/gateway/static/root/assets/messages-2GhUD7SC.js +0 -3
  183. package/dist/gateway/static/root/assets/settings-advanced-gate-VxPItcOG.js +0 -1
  184. package/dist/gateway/static/root/assets/skill-reload-api-CKdLCf_-.js +0 -1
  185. package/dist/src/storage/sqlite/context-relation-repository.d.ts +0 -50
  186. package/dist/src/storage/sqlite/context-relation-repository.js +0 -98
@@ -29,10 +29,10 @@ export declare const AgentModelsSchema: z.ZodObject<{
29
29
  intents: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
30
30
  review: "review";
31
31
  coding: "coding";
32
- understanding: "understanding";
33
32
  fast: "fast";
34
33
  reasoning: "reasoning";
35
34
  vision: "vision";
35
+ understanding: "understanding";
36
36
  }> & z.core.$partial, z.ZodNullable<z.ZodObject<{
37
37
  primary: z.ZodString;
38
38
  fallbacks: z.ZodDefault<z.ZodArray<z.ZodString>>;
@@ -64,10 +64,10 @@ export declare const AgentsConfigSchema: z.ZodDefault<z.ZodObject<{
64
64
  intents: z.ZodDefault<z.ZodRecord<z.ZodEnum<{
65
65
  review: "review";
66
66
  coding: "coding";
67
- understanding: "understanding";
68
67
  fast: "fast";
69
68
  reasoning: "reasoning";
70
69
  vision: "vision";
70
+ understanding: "understanding";
71
71
  }> & z.core.$partial, z.ZodObject<{
72
72
  primary: z.ZodString;
73
73
  fallbacks: z.ZodDefault<z.ZodArray<z.ZodString>>;
@@ -151,10 +151,10 @@ export declare const AgentsConfigSchema: z.ZodDefault<z.ZodObject<{
151
151
  intents: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
152
152
  review: "review";
153
153
  coding: "coding";
154
- understanding: "understanding";
155
154
  fast: "fast";
156
155
  reasoning: "reasoning";
157
156
  vision: "vision";
157
+ understanding: "understanding";
158
158
  }> & z.core.$partial, z.ZodNullable<z.ZodObject<{
159
159
  primary: z.ZodString;
160
160
  fallbacks: z.ZodDefault<z.ZodArray<z.ZodString>>;
@@ -1586,10 +1586,10 @@ export declare const ConfigSchema: z.ZodDefault<z.ZodObject<{
1586
1586
  intents: z.ZodDefault<z.ZodRecord<z.ZodEnum<{
1587
1587
  review: "review";
1588
1588
  coding: "coding";
1589
- understanding: "understanding";
1590
1589
  fast: "fast";
1591
1590
  reasoning: "reasoning";
1592
1591
  vision: "vision";
1592
+ understanding: "understanding";
1593
1593
  }> & z.core.$partial, z.ZodObject<{
1594
1594
  primary: z.ZodString;
1595
1595
  fallbacks: z.ZodDefault<z.ZodArray<z.ZodString>>;
@@ -1673,10 +1673,10 @@ export declare const ConfigSchema: z.ZodDefault<z.ZodObject<{
1673
1673
  intents: z.ZodOptional<z.ZodRecord<z.ZodEnum<{
1674
1674
  review: "review";
1675
1675
  coding: "coding";
1676
- understanding: "understanding";
1677
1676
  fast: "fast";
1678
1677
  reasoning: "reasoning";
1679
1678
  vision: "vision";
1679
+ understanding: "understanding";
1680
1680
  }> & z.core.$partial, z.ZodNullable<z.ZodObject<{
1681
1681
  primary: z.ZodString;
1682
1682
  fallbacks: z.ZodDefault<z.ZodArray<z.ZodString>>;
@@ -1,7 +1,7 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
- import { ComputerConfigSchema, init_config } from "../computer/config.js";
3
2
  import { AgentModelsOverrideSchema, AgentsConfigSchema as AgentsConfigSchema$1, DEFAULT_AGENT_MODEL_REF, DEFAULT_SKILL_POLICY, ImageGenerationRouteSchema, ModelRouteSchema } from "../agent-config/schema.js";
4
3
  import { init_agent_config } from "../agent-config/index.js";
4
+ import { ComputerConfigSchema, init_config } from "../computer/config.js";
5
5
  import { DEFAULT_CONTEXT_COMPACTION_POLICY, UserContextConfigSchema, init_config as init_config$1 } from "../user-context/config.js";
6
6
  import { init_default_model } from "./default-model.js";
7
7
  import { init_public_url, validatePublicUrl } from "./public-url.js";
@@ -19,6 +19,7 @@ export declare function ingestComposioConnectedSource(input: {
19
19
  sourceInstanceId: string;
20
20
  itemsSeen: number;
21
21
  itemsIndexed: number;
22
+ sourceItemIds: string[];
22
23
  recordIds: string[];
23
24
  }>;
24
25
  export declare function ingestLocalFolderSource(input: {
@@ -335,6 +335,7 @@ async function ingestComposioConnectedSource(input) {
335
335
  sourceInstanceId,
336
336
  itemsSeen: syncRun.itemsSeen,
337
337
  itemsIndexed: syncRun.itemsCreated + syncRun.itemsUpdated,
338
+ sourceItemIds: syncRun.changedItemIds,
338
339
  recordIds
339
340
  };
340
341
  }
@@ -7,6 +7,7 @@ export declare function deriveConnectedSourceUnderstanding(input: {
7
7
  config: Config;
8
8
  agentId: string;
9
9
  sourceInstanceId: string;
10
+ sourceItemIds: string[];
10
11
  sourceRunId: string;
11
12
  processingPolicy: 'local_only' | 'remote_allowed';
12
13
  analyze?: typeof analyzeUnderstandingSources;
@@ -1,6 +1,8 @@
1
+ import { createLogger } from "../utils/logger/index.js";
2
+ import { init_logger } from "../utils/logger.js";
1
3
  import { finishContextExtractionRun } from "../storage/sqlite/context-extraction-repository.js";
2
4
  import { createContextEvidence } from "../storage/sqlite/context-evidence-repository.js";
3
- import { listKnowledgeSourceItems } from "../storage/sqlite/knowledge-repository.js";
5
+ import { getKnowledgeSourceItem } from "../storage/sqlite/knowledge-repository.js";
4
6
  import "../storage/sqlite/index.js";
5
7
  import { writeKnowledgeItem } from "../knowledge-memory/repository.js";
6
8
  import "../knowledge-memory/index.js";
@@ -9,8 +11,14 @@ import "../user-model/index.js";
9
11
  import { claimRegisteredExtraction } from "../user-context/extraction/registry.js";
10
12
  import { allowsRemoteSourceProcessing } from "../user-context/sources/processing-policy.js";
11
13
  import { analyzeUnderstandingSources } from "../work-discovery/analyzer.js";
14
+ import { createHash } from "node:crypto";
12
15
  //#region src/connectors/connected-source-understanding.ts
16
+ init_logger();
13
17
  const MAX_CONNECTED_ITEMS = 150;
18
+ const log = createLogger("ConnectedSourceUnderstanding");
19
+ function evidenceKey(sourceInstanceId, evidenceRefs) {
20
+ return `connected-thread:${sourceInstanceId}:${createHash("sha256").update([...evidenceRefs].sort().join("\n")).digest("hex").slice(0, 24)}`;
21
+ }
14
22
  function normalizedValue(item) {
15
23
  if (!item.normalizedText) return {};
16
24
  try {
@@ -66,22 +74,25 @@ function durableEvidence(candidate, items) {
66
74
  return candidate.confidence === "high" && evidence.every((item) => item.ownerAttribution === "user") && evidence.length >= required && dates.size >= required ? evidence : [];
67
75
  }
68
76
  async function deriveConnectedSourceUnderstanding(input) {
69
- const sourceItems = listKnowledgeSourceItems({
70
- agentId: input.agentId,
71
- sourceInstanceId: input.sourceInstanceId,
72
- includeDeleted: false,
73
- limit: MAX_CONNECTED_ITEMS
74
- });
77
+ const sourceItems = [...new Set(input.sourceItemIds)].slice(0, MAX_CONNECTED_ITEMS).flatMap((itemId) => getKnowledgeSourceItem(itemId) ?? []).filter((item) => item.sourceInstanceId === input.sourceInstanceId && item.metadata.agentId === input.agentId && !item.deletedAt);
75
78
  const items = connectedItemsForUnderstanding(sourceItems);
76
- if (!items.length) return {
77
- created: 0,
78
- knowledgeCount: 0,
79
- status: "completed"
80
- };
79
+ if (!items.length) {
80
+ log.info({
81
+ sourceRunId: input.sourceRunId,
82
+ sourceInstanceId: input.sourceInstanceId,
83
+ sourceItemCount: 0,
84
+ reason: "no_changed_items"
85
+ }, "Connected source semantic analysis skipped");
86
+ return {
87
+ created: 0,
88
+ knowledgeCount: 0,
89
+ status: "completed"
90
+ };
91
+ }
81
92
  const extraction = claimRegisteredExtraction({
82
93
  extractorId: "connector-semantic",
83
94
  sourceRef: `understanding-source-run:${input.sourceRunId}`,
84
- contentForHash: sourceItems.map((item) => `${item.id}:${item.sourceUpdatedAt ?? ""}`).join("\n"),
95
+ contentForHash: sourceItems.map((item) => `${item.id}:${item.contentHash}`).join("\n"),
85
96
  processingPolicy: input.processingPolicy,
86
97
  destination: "remote_model"
87
98
  });
@@ -97,10 +108,20 @@ async function deriveConnectedSourceUnderstanding(input) {
97
108
  });
98
109
  input.assertAuthorized?.();
99
110
  const byRef = new Map(items.map((item) => [item.evidenceRef, item]));
111
+ const outputs = [];
100
112
  let created = 0;
101
113
  for (const candidate of analysis.profileCandidates.filter(isPortraitCandidate)) {
102
114
  const evidenceItems = durableEvidence(candidate, byRef);
103
- if (!evidenceItems.length) continue;
115
+ const candidateKey = `connected-profile:${candidate.category}:${candidate.factKey}`;
116
+ if (!evidenceItems.length) {
117
+ outputs.push({
118
+ candidateKey,
119
+ outcome: "rejected"
120
+ });
121
+ continue;
122
+ }
123
+ let assertionId;
124
+ let candidateCreated = false;
104
125
  for (const [index, evidenceItem] of evidenceItems.entries()) {
105
126
  const evidence = createContextEvidence({
106
127
  sourceType: "connector",
@@ -135,32 +156,71 @@ async function deriveConnectedSourceUnderstanding(input) {
135
156
  evidenceId: evidence.id,
136
157
  evidenceConfidence: .9
137
158
  });
159
+ assertionId = result.assertion?.id ?? assertionId;
160
+ candidateCreated ||= result.action === "created" || result.action === "superseded";
138
161
  if (index === 0 && result.action === "created") created += 1;
139
162
  }
163
+ outputs.push({
164
+ candidateKey,
165
+ ...assertionId ? {
166
+ objectType: "assertion",
167
+ objectId: assertionId
168
+ } : {},
169
+ outcome: assertionId ? candidateCreated ? "created" : "deduplicated" : "rejected"
170
+ });
140
171
  }
141
172
  let knowledgeCount = 0;
142
- for (const thread of analysis.workThreadCandidates) if (writeKnowledgeItem({
143
- kind: "project_fact",
144
- scope: {
145
- type: "agent",
146
- id: input.agentId
147
- },
148
- content: `${thread.title}: ${thread.summary}`,
149
- canonicalKey: `connected-thread:${input.sourceInstanceId}:${thread.topicKey}`,
150
- confidence: thread.confidence === "high" ? .9 : thread.confidence === "medium" ? .72 : .55,
151
- importance: thread.horizon === "current" ? .75 : .5,
152
- originClass: "untrusted",
153
- sourceAgentId: input.agentId,
154
- source: {
155
- sourceRunId: input.sourceRunId,
156
- evidenceRefs: thread.evidenceRefs
173
+ for (const thread of analysis.workThreadCandidates) {
174
+ const evidenceRefs = [...new Set(thread.evidenceRefs)].filter((ref) => byRef.has(ref));
175
+ const candidateKey = evidenceKey(input.sourceInstanceId, evidenceRefs);
176
+ if (!evidenceRefs.length) {
177
+ outputs.push({
178
+ candidateKey,
179
+ outcome: "rejected"
180
+ });
181
+ continue;
157
182
  }
158
- }).created) knowledgeCount += 1;
183
+ const result = writeKnowledgeItem({
184
+ kind: "work_thread",
185
+ scope: { type: "global" },
186
+ content: `${thread.title}: ${thread.summary}`,
187
+ canonicalKey: candidateKey,
188
+ confidence: thread.confidence === "high" ? .9 : thread.confidence === "medium" ? .72 : .55,
189
+ importance: thread.horizon === "current" ? .75 : .5,
190
+ originClass: "untrusted",
191
+ sourceAgentId: input.agentId,
192
+ source: {
193
+ sourceRunId: input.sourceRunId,
194
+ evidenceRefs
195
+ },
196
+ replaceExisting: true
197
+ });
198
+ if (result.created) knowledgeCount += 1;
199
+ outputs.push({
200
+ candidateKey,
201
+ ...result.item ? {
202
+ objectType: "knowledge",
203
+ objectId: result.item.id
204
+ } : {},
205
+ outcome: result.created ? "created" : result.item ? "deduplicated" : "rejected"
206
+ });
207
+ }
159
208
  finishContextExtractionRun({
160
209
  runId: extraction.run.id,
161
- status: "completed"
210
+ status: "completed",
211
+ outputs
162
212
  });
163
213
  const sourceStatus = analysis.sourceStatuses.find((item) => item.sourceId === "connected-work");
214
+ log.info({
215
+ sourceRunId: input.sourceRunId,
216
+ sourceInstanceId: input.sourceInstanceId,
217
+ sourceItemCount: sourceItems.length,
218
+ assertionCreated: created,
219
+ knowledgeCreated: knowledgeCount,
220
+ deduplicated: outputs.filter((output) => output.outcome === "deduplicated").length,
221
+ rejected: outputs.filter((output) => output.outcome === "rejected").length,
222
+ sourceStatus: sourceStatus?.status ?? "failed"
223
+ }, "Connected source semantic analysis finished");
164
224
  return {
165
225
  created,
166
226
  knowledgeCount,
@@ -15,6 +15,7 @@ export type ConnectedContentReadResult = {
15
15
  sourceItemId: string;
16
16
  error: string;
17
17
  }>;
18
+ sourceItemIds: string[];
18
19
  recordIds: string[];
19
20
  };
20
21
  export declare function listConnectedContentCandidates(options: {
@@ -194,6 +194,7 @@ async function readConnectedContent(input) {
194
194
  requested: sourceItemIds.length,
195
195
  completed: 0,
196
196
  failed: [],
197
+ sourceItemIds: [],
197
198
  recordIds: []
198
199
  };
199
200
  const updatedSources = /* @__PURE__ */ new Set();
@@ -242,7 +243,8 @@ async function readConnectedContent(input) {
242
243
  if (execution.decision !== "allowed") throw new Error(execution.reason);
243
244
  const content = recipe.mode === "inline" ? inlineContent(execution.result) : await downloadedContent(execution.result, downloadDirectory);
244
245
  if (!content.trim()) throw new Error("The connector returned empty text content.");
245
- upsertKnowledgeSourceItems([updatedSourceItem(item, content, recipe.actionId)]);
246
+ const stored = upsertKnowledgeSourceItems([updatedSourceItem(item, content, recipe.actionId)]);
247
+ result.sourceItemIds.push(...stored.changedItemIds);
246
248
  completedReads.add(item.id);
247
249
  updatedSources.add(item.sourceInstanceId);
248
250
  result.completed += 1;
@@ -15,7 +15,7 @@ import "../knowledge/index.js";
15
15
  import { ingestComposioConnectedSource } from "./connected-source-ingestion.js";
16
16
  import { deriveConnectedSourceUnderstanding } from "./connected-source-understanding.js";
17
17
  import { listConnectedContentCandidates, readConnectedContent } from "./content-enrichment.js";
18
- import { createUnderstandingSourceRun, getUnderstandingSourceGrant, listUnderstandingSourceGrants, listUnderstandingSourceRuns, updateUnderstandingSourceGrantCheckpoint, updateUnderstandingSourceRun, upsertUnderstandingSourceGrant } from "../user-context/sources/repository.js";
18
+ import { getConnectorUnderstandingSourceRun, getOrCreateConnectorUnderstandingSourceRun, getUnderstandingSourceGrant, listUnderstandingSourceGrants, updateUnderstandingSourceGrantCheckpoint, updateUnderstandingSourceRun, upsertUnderstandingSourceGrant } from "../user-context/sources/repository.js";
19
19
  //#region src/connectors/learning-coordinator.ts
20
20
  init_logger();
21
21
  const log = createLogger("ConnectorLearning");
@@ -35,29 +35,26 @@ function connectorSourceCategory(toolkit) {
35
35
  function ensureUnderstandingSourceRun(job, toolkit, displayName) {
36
36
  const existing = listUnderstandingSourceGrants({ includeRevoked: true }).find((grant) => grant.sourceKey === `connector-account:${job.accountId}`);
37
37
  if (existing?.status === "revoked") throw new Error("Source authorization was revoked.");
38
- const grant = existing ?? upsertUnderstandingSourceGrant({
39
- sourceKey: `connector-account:${job.accountId}`,
40
- adapterId: `connector:${job.connectorId}`,
41
- category: connectorSourceCategory(toolkit),
42
- platform: "all",
43
- displayName,
44
- accessMode: "continuous",
45
- retentionPolicy: "bounded_raw",
46
- processingPolicy: "remote_allowed",
47
- config: {
48
- connectorId: job.connectorId,
49
- accountId: job.accountId,
50
- readOnly: true
51
- }
52
- });
53
- return listUnderstandingSourceRuns(grant.id, 100).find((run) => run.metadata.connectorLearningJobId === job.id) ?? createUnderstandingSourceRun({
54
- grantId: grant.id,
38
+ return getOrCreateConnectorUnderstandingSourceRun({
39
+ grantId: (existing ?? upsertUnderstandingSourceGrant({
40
+ sourceKey: `connector-account:${job.accountId}`,
41
+ adapterId: `connector:${job.connectorId}`,
42
+ category: connectorSourceCategory(toolkit),
43
+ platform: "all",
44
+ displayName,
45
+ accessMode: "continuous",
46
+ retentionPolicy: "bounded_raw",
47
+ processingPolicy: "remote_allowed",
48
+ config: {
49
+ connectorId: job.connectorId,
50
+ accountId: job.accountId,
51
+ readOnly: true
52
+ }
53
+ })).id,
54
+ connectorLearningJobId: job.id,
55
55
  kind: job.mode,
56
56
  status: "queued",
57
- metadata: {
58
- connectorLearningJobId: job.id,
59
- connectorId: job.connectorId
60
- }
57
+ metadata: { connectorId: job.connectorId }
61
58
  });
62
59
  }
63
60
  function learningEnabled(config) {
@@ -177,6 +174,7 @@ function startConnectorLearningCoordinator(options) {
177
174
  }
178
175
  let itemsSeen = 0;
179
176
  let itemsIndexed = 0;
177
+ const changedSourceItemIds = /* @__PURE__ */ new Set();
180
178
  for (const stream of plan.streams) {
181
179
  const synced = await ingestComposioConnectedSource({
182
180
  config: options.getConfig(),
@@ -191,6 +189,7 @@ function startConnectorLearningCoordinator(options) {
191
189
  });
192
190
  itemsSeen += synced.itemsSeen;
193
191
  itemsIndexed += synced.itemsIndexed;
192
+ for (const sourceItemId of synced.sourceItemIds) changedSourceItemIds.add(sourceItemId);
194
193
  }
195
194
  const enrichmentErrors = [];
196
195
  if (plan.toolkit === "googledrive") {
@@ -206,6 +205,7 @@ function startConnectorLearningCoordinator(options) {
206
205
  });
207
206
  enrichmentErrors.push(...enriched.failed.map((failure) => failure.error));
208
207
  itemsIndexed += enriched.completed;
208
+ for (const sourceItemId of enriched.sourceItemIds) changedSourceItemIds.add(sourceItemId);
209
209
  }
210
210
  }
211
211
  if (listConnectorLearningJobs({
@@ -229,6 +229,7 @@ function startConnectorLearningCoordinator(options) {
229
229
  config: options.getConfig(),
230
230
  agentId: job.agentId,
231
231
  sourceInstanceId: job.sourceInstanceId,
232
+ sourceItemIds: [...changedSourceItemIds],
232
233
  sourceRunId: sourceRun.id,
233
234
  processingPolicy: getUnderstandingSourceGrant(sourceRun.grantId)?.processingPolicy ?? "local_only",
234
235
  assertAuthorized: () => {
@@ -324,8 +325,7 @@ function startConnectorLearningCoordinator(options) {
324
325
  }));
325
326
  const definition = getConnectorDefinition(job.connectorId);
326
327
  if (definition?.runtime.type === "composio" && definition.runtime.role === "toolkit") {
327
- const grant = listUnderstandingSourceGrants({ includeRevoked: true }).find((item) => item.sourceKey === `connector-account:${job.accountId}`);
328
- const sourceRun = grant && listUnderstandingSourceRuns(grant.id, 100).find((item) => item.metadata.connectorLearningJobId === job.id);
328
+ const sourceRun = listUnderstandingSourceGrants({ includeRevoked: true }).find((item) => item.sourceKey === `connector-account:${job.accountId}`) && getConnectorUnderstandingSourceRun(job.id);
329
329
  if (sourceRun) updateUnderstandingSourceRun(sourceRun.id, {
330
330
  status: "failed",
331
331
  errorMessage: learningFailureCode(err),
@@ -1,7 +1,7 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
- import { init_paths, resolveExtensionsDir, resolveExtensionsLockPath } from "../config/paths.js";
4
3
  import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
4
+ import { init_paths, resolveExtensionsDir, resolveExtensionsLockPath } from "../config/paths.js";
5
5
  import { dirname, join } from "path";
6
6
  import { existsSync, lstatSync, readFileSync, readdirSync, readlinkSync } from "fs";
7
7
  import { mkdir, readFile } from "fs/promises";
@@ -1,6 +1,6 @@
1
1
  import { init_agent_scope, listAgentEntries, normalizeAgentId, resolveAgentDir, resolveAgentProfileDir, resolveAgentWorkspaceDir, resolveDefaultAgentId, resolveUserPath, validateAgentIdForNewAgent } from "../agent/agent-scope.js";
2
- import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
3
2
  import { WORKSPACE_FILES, init_paths } from "../config/paths.js";
3
+ import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
4
4
  import { AGENT_PROFILE_MARKDOWN_SYSTEM_FILES, REQUIRED_AGENT_PROFILE_MARKDOWN_FILE_SET } from "../agent/context/workspace.js";
5
5
  import { isPathUnderWorkspace, resolveWorkspaceSafePath } from "./workspace-editor-path.js";
6
6
  import { seedAgentProfileMarkdownFiles } from "../agent/context/workspace-seed.js";
@@ -168,7 +168,8 @@ var ChatStreamMapper = class {
168
168
  if (delta?.type === "text_delta" && typeof delta.delta === "string" && delta.delta) {
169
169
  events.push(this.make("assistant_delta", {
170
170
  messageId,
171
- delta: delta.delta
171
+ delta: delta.delta,
172
+ offset: this.currentAssistantText.length
172
173
  }));
173
174
  this.currentAssistantText += delta.delta;
174
175
  }
@@ -182,7 +183,8 @@ var ChatStreamMapper = class {
182
183
  if (suffix) {
183
184
  events.push(this.make("assistant_delta", {
184
185
  messageId,
185
- delta: suffix
186
+ delta: suffix,
187
+ offset: this.currentAssistantText.length
186
188
  }));
187
189
  this.currentAssistantText = text || `${this.currentAssistantText}${suffix}`;
188
190
  }
@@ -204,10 +206,12 @@ var ChatStreamMapper = class {
204
206
  const text = extractTextFromMessage(message);
205
207
  const suffix = appendSuffix(this.currentAssistantText, text);
206
208
  if (!suffix) return [];
209
+ const offset = this.currentAssistantText.length;
207
210
  this.currentAssistantText = text || `${this.currentAssistantText}${suffix}`;
208
211
  return [this.make("assistant_delta", {
209
212
  messageId,
210
- delta: suffix
213
+ delta: suffix,
214
+ offset
211
215
  })];
212
216
  }
213
217
  mapMessageEnd(raw) {
@@ -227,7 +231,8 @@ var ChatStreamMapper = class {
227
231
  const suffix = appendSuffix(this.currentAssistantText, text);
228
232
  if (suffix) events.push(this.make("assistant_delta", {
229
233
  messageId,
230
- delta: suffix
234
+ delta: suffix,
235
+ offset: this.currentAssistantText.length
231
236
  }));
232
237
  this.currentAssistantText = text || this.currentAssistantText;
233
238
  events.push(this.make("thinking_end", { messageId }));
@@ -44,7 +44,8 @@ export type AssistantMessageStartEvent = ChatStreamEnvelope<'assistant_message_s
44
44
  }>;
45
45
  export type AssistantDeltaEvent = ChatStreamEnvelope<'assistant_delta', {
46
46
  messageId: string;
47
- delta: string;
47
+ delta: string; /** UTF-16 offset before this delta. */
48
+ offset?: number;
48
49
  }>;
49
50
  export type ThinkingDeltaEvent = ChatStreamEnvelope<'thinking_delta', {
50
51
  messageId: string;
@@ -1,7 +1,7 @@
1
1
  import { init_paths_state, resolveStateDir } from "../config/paths-state.js";
2
2
  import { init_agent_scope, resolveAgentProfileDir } from "../agent/agent-scope.js";
3
- import { extractProfileAgentId } from "../config/agent-profile.js";
4
3
  import { init_paths, resolveConfigPath, resolveSkillsDir } from "../config/paths.js";
4
+ import { extractProfileAgentId } from "../config/agent-profile.js";
5
5
  import { isBareProfileMarkdownFileName, resolveProfileMarkdownPathIfBareName } from "../agent/tools/tool-paths.js";
6
6
  import { isPathUnderWorkspace, resolveWorkspaceSafePath } from "./workspace-editor-path.js";
7
7
  import { basename, isAbsolute, resolve } from "node:path";
@@ -28,7 +28,7 @@ export declare function buildSafeWebConfigPayload(service: GatewayService, optio
28
28
  primary: string;
29
29
  fallbacks: string[];
30
30
  };
31
- intents?: Partial<Record<"review" | "coding" | "understanding" | "fast" | "reasoning" | "vision", {
31
+ intents?: Partial<Record<"review" | "coding" | "fast" | "reasoning" | "vision" | "understanding", {
32
32
  primary: string;
33
33
  fallbacks: string[];
34
34
  }>>;
@@ -72,7 +72,7 @@ export declare function buildSafeWebConfigPayload(service: GatewayService, optio
72
72
  primary: string;
73
73
  fallbacks: string[];
74
74
  };
75
- intents: Partial<Record<"review" | "coding" | "understanding" | "fast" | "reasoning" | "vision", {
75
+ intents: Partial<Record<"review" | "coding" | "fast" | "reasoning" | "vision" | "understanding", {
76
76
  primary: string;
77
77
  fallbacks: string[];
78
78
  }>>;
@@ -1,9 +1,9 @@
1
1
  import { ContextPlanningConfigSchema, KnowledgeMemoryConfigSchema, UserModelConfigSchema, init_config } from "../../../user-context/config.js";
2
2
  import { init_agent_scope, listAgentEntries, normalizeAgentId, resolveDefaultAgentId } from "../../../agent/agent-scope.js";
3
3
  import { resolveModelsJsonPath } from "../../../config/paths.js";
4
- import { buildChannelCatalogForConfig, buildChannelCatalogFromSnapshot, getChannelSetupStatus, init_channel_catalog_service } from "../../../channels/catalog/channel-catalog-service.js";
5
4
  import { init_models_json, loadModelsJson } from "../../../config/models-json.js";
6
5
  import { CredentialResolver, init_credentials } from "../../../auth/credentials.js";
6
+ import { buildChannelCatalogForConfig, buildChannelCatalogFromSnapshot, getChannelSetupStatus, init_channel_catalog_service } from "../../../channels/catalog/channel-catalog-service.js";
7
7
  import { getProviderRegistry, init_plugin_registry } from "../../../providers/plugin-registry.js";
8
8
  import { getAllProviders, init_providers, isProviderConfigured } from "../../../providers/index.js";
9
9
  import { normalizeConfiguredMcpServers } from "../../../config/mcp-config-normalize.js";
@@ -19,7 +19,6 @@ import { createConnectorSetupSecretRequest, submitConnectorSetupSecret } from ".
19
19
  import { recordConnectorHealthUsage } from "../../../connectors/usage.js";
20
20
  import { getConnectorInstance, getInstalledConnectorDefinition, listConnectorInstances } from "../../../connectors/instances.js";
21
21
  import { installConnector, installConnectorDefinition, uninstallConnector, updateConnectorConfig } from "../../../connectors/install.js";
22
- import { ConfigPersistenceError, persistConfigMutation } from "../../../config/config-mutation.js";
23
22
  import { resumeApprovedConnectorAction } from "../../../connectors/approval-resume.js";
24
23
  import { getMcpOAuthManager } from "../../../agent/mcp/oauth/mcp-oauth-manager.js";
25
24
  import { startConnectorAuthorization } from "../../../connectors/auth-provider-registry.js";
@@ -27,6 +26,7 @@ import { composioLogoResponse } from "../../../connectors/composio-logo.js";
27
26
  import { inspectManagedComposioStatus } from "../../../connectors/composio-managed-client.js";
28
27
  import { appendComposioTriggerEvent, listComposioTriggerEvents } from "../../../connectors/composio-triggers.js";
29
28
  import { ingestLocalFolderSource } from "../../../connectors/connected-source-ingestion.js";
29
+ import { ConfigPersistenceError, persistConfigMutation } from "../../../config/config-mutation.js";
30
30
  import { previewConnectorDefinition, testConnectorInstance } from "../../../connectors/health.js";
31
31
  import { listUnderstandingSourceGrants, revokeUnderstandingSourceGrant } from "../../../user-context/sources/repository.js";
32
32
  import { setConnectorEnabled } from "../../../connectors/lifecycle.js";
@@ -1,5 +1,5 @@
1
- import { resolveModelsJsonPath } from "../../../config/paths.js";
2
1
  import { init_resolve_config_value, testApiKeyResolution } from "../../../config/resolve-config-value.js";
2
+ import { resolveModelsJsonPath } from "../../../config/paths.js";
3
3
  import { computerModelProfile, init_model_policy, isDedicatedComputerModel } from "../../../computer/model-policy.js";
4
4
  import { init_models_json, loadModelsJson, saveModelsJson, validateModelsConfig } from "../../../config/models-json.js";
5
5
  import { getModelCatalogStore, init_model_catalog_store } from "../../../providers/model-catalog-store.js";
@@ -2,7 +2,7 @@ import { listConnectorLearningJobs } from "../../../storage/sqlite/connector-lea
2
2
  import { getConnectorAccount } from "../../../storage/sqlite/connector-account-repository.js";
3
3
  import "../../../storage/sqlite/index.js";
4
4
  import { getWorkDiscoveryRun } from "../../../work-discovery/repository.js";
5
- import { listUnderstandingSourceRuns } from "../../../user-context/sources/repository.js";
5
+ import { getConnectorUnderstandingSourceRun } from "../../../user-context/sources/repository.js";
6
6
  import { isLocalUnderstandingSourceId } from "../../../user-context/sources/local-source-contract.js";
7
7
  import { normalizeUnderstandingSourceItems } from "../../../work-discovery/service.js";
8
8
  import { UnderstandingRefreshService } from "../../../user-context/sources/refresh-service.js";
@@ -63,7 +63,7 @@ function createUnderstandingRefreshService(deps) {
63
63
  phase: "completed",
64
64
  error: "Connector update is no longer available."
65
65
  };
66
- const sourceRun = listUnderstandingSourceRuns(run.grantId, 100).find((item) => item.id !== run.id && item.metadata.connectorLearningJobId === job.id);
66
+ const sourceRun = getConnectorUnderstandingSourceRun(job.id);
67
67
  if (job.status === "completed") return {
68
68
  status: sourceRun?.status === "partial" ? "partial" : "completed",
69
69
  phase: "completed",
@@ -21,8 +21,8 @@ import { VoiceSessionCreationError, resolveStreamingStt, resolveStreamingTts } f
21
21
  import { getGatewayPrincipal } from "../../security/gateway-principal.js";
22
22
  import { createGatewayRouteLogger } from "../lib/route-logger.js";
23
23
  import { selectPlatformVoice, voiceSettingsCatalog } from "../../../voice/platform-settings.js";
24
- import { listTtsProvidersForApi } from "../../../voice/tts/list-providers.js";
25
24
  import { listLocalVoiceModelStatuses, removeLocalVoiceModel, startLocalVoiceModelInstall } from "../../../voice/local/model-manager.js";
25
+ import { listTtsProvidersForApi } from "../../../voice/tts/list-providers.js";
26
26
  import { z } from "zod";
27
27
  //#region src/gateway/hono/routes/voice.ts
28
28
  init_voice();
@@ -1,7 +1,7 @@
1
1
  import { createLogger } from "../../utils/logger/index.js";
2
2
  import { init_logger } from "../../utils/logger.js";
3
- import { loadConfig, saveConfig } from "../../config/loader.js";
4
3
  import { getModelRegistry } from "../../providers/model-registry.js";
4
+ import { loadConfig, saveConfig } from "../../config/loader.js";
5
5
  import { init_providers } from "../../providers/index.js";
6
6
  import { disposeAllSessionMcpRuntimes } from "../../agent/mcp/bundle-mcp-runtime.js";
7
7
  import { reloadImageGenerationProviders } from "../../agent/image/generation/provider-registry.js";
@@ -18,17 +18,17 @@ import { getSessionConfig } from "../storage/sqlite/config-repository.js";
18
18
  import "../storage/sqlite/index.js";
19
19
  import { getAgentDefaultModelRef, init_schema } from "../config/schema.js";
20
20
  import { init_agent_scope, listAgentEntries, normalizeAgentId, resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agent/agent-scope.js";
21
- import { init_agent_session_key, resolveAgentMainConversationId } from "../routing/agent-session-key.js";
22
- import { init_session_key, resolveConversationId, sanitizeSegment } from "../routing/session-key.js";
23
- import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
24
- import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
25
21
  import { init_paths, resolveConfigPath, resolveExtensionsDir } from "../config/paths.js";
22
+ import { prewarmModelRegistry } from "../providers/model-registry.js";
26
23
  import { areExtensionsGloballyDisabled } from "../extensions/discover-extensions.js";
27
24
  import { buildExtensionMetadataSnapshot } from "../extensions/extension-metadata-snapshot.js";
28
25
  import { buildChannelCatalogForConfig, buildChannelCatalogFromSnapshot, init_channel_catalog_service } from "../channels/catalog/channel-catalog-service.js";
29
26
  import { loadConfig, saveConfig } from "../config/loader.js";
30
- import { prewarmModelRegistry } from "../providers/model-registry.js";
27
+ import { init_agent_session_key, resolveAgentMainConversationId } from "../routing/agent-session-key.js";
28
+ import { init_session_key, resolveConversationId, sanitizeSegment } from "../routing/session-key.js";
29
+ import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
31
30
  import { init_providers, providers_exports } from "../providers/index.js";
31
+ import { resolveEffectiveAgentProfileForSession } from "../config/agent-profile.js";
32
32
  import { TaskConversationRepository } from "../tasks/task-conversation-repository.js";
33
33
  import { getEmbeddedExecutionSession } from "../agent/embedded/execution-context.js";
34
34
  import { disposeAllSessionMcpRuntimes } from "../agent/mcp/bundle-mcp-runtime.js";
@@ -1,4 +1,7 @@
1
1
  import type { KnowledgeSourceAdapter, KnowledgeSourceItemInput, KnowledgeSyncRun } from './types.js';
2
+ export type KnowledgeIngestionResult = KnowledgeSyncRun & {
3
+ changedItemIds: string[];
4
+ };
2
5
  export interface KnowledgeSourceStateStore {
3
6
  getCursor(instanceId: string, collectionScope: string): string | undefined;
4
7
  setCursor(instanceId: string, collectionScope: string, cursor: string | undefined): void;
@@ -17,12 +20,12 @@ export declare class KnowledgeIngestionService {
17
20
  items: KnowledgeSourceItemInput[];
18
21
  cursorAfter?: string;
19
22
  warnings?: string[];
20
- }): KnowledgeSyncRun;
23
+ }): KnowledgeIngestionResult;
21
24
  sync(params: {
22
25
  adapterKind: string;
23
26
  instanceId: string;
24
27
  collectionScope: string;
25
28
  windowStart?: string;
26
29
  signal?: AbortSignal;
27
- }): Promise<KnowledgeSyncRun>;
30
+ }): Promise<KnowledgeIngestionResult>;
28
31
  }