@xopcai/xopc 0.0.171 → 0.0.172

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 (189) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/telegram/xopc.extension.json +1 -1
  3. package/dist/gateway/static/root/assets/{activity-store-BLz30jWq.js → activity-store-C3Y-bESI.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BKZO0EFn.js → agent-avatar-dicebear-CPyev9P7.js} +1 -1
  5. package/dist/gateway/static/root/assets/agents-Bf_kK2Ay.js +2 -0
  6. package/dist/gateway/static/root/assets/{api-N2qKY-WI.js → api-B7qEr_Rw.js} +1 -1
  7. package/dist/gateway/static/root/assets/{app-management-settings-panel-CNZkpXCD.js → app-management-settings-panel-Br_9-7fs.js} +1 -1
  8. package/dist/gateway/static/root/assets/{appearance-settings-Drf5a563.js → appearance-settings-uyLcRPai.js} +1 -1
  9. package/dist/gateway/static/root/assets/apps-page-DXFCP5-1.js +1 -0
  10. package/dist/gateway/static/root/assets/{archive-plugin-ChVwOXE5.js → archive-plugin-B19REnR5.js} +1 -1
  11. package/dist/gateway/static/root/assets/{attachment-load-BVK3Y2d9.js → attachment-load-DLWCC4Yi.js} +1 -1
  12. package/dist/gateway/static/root/assets/{automation-suggestion-card-DH4N0SYR.js → automation-suggestion-card-ky5S5lly.js} +1 -1
  13. package/dist/gateway/static/root/assets/automations-page-D8pT1o2O.js +6 -0
  14. package/dist/gateway/static/root/assets/{binary-plugins-CeHY6VVP.js → binary-plugins-CtPEzLlo.js} +1 -1
  15. package/dist/gateway/static/root/assets/block-editor-CQVR4Xij.js +184 -0
  16. package/dist/gateway/static/root/assets/browser-settings-page-Bav_skKN.js +8 -0
  17. package/dist/gateway/static/root/assets/{browser-workflow-inputs-femCtfpo.js → browser-workflow-inputs-CimCGbhq.js} +1 -1
  18. package/dist/gateway/static/root/assets/{browser-workflows-page-o0GVE_aF.js → browser-workflows-page-DewuCw3p.js} +2 -2
  19. package/dist/gateway/static/root/assets/capabilities-settings-panel-BHaYYo9E.js +7 -0
  20. package/dist/gateway/static/root/assets/{capability-presets-api-Bx-JJC0R.js → capability-presets-api-B5RTs-Az.js} +1 -1
  21. package/dist/gateway/static/root/assets/capability-presets-settings-panel-BgchTh81.js +1 -0
  22. package/dist/gateway/static/root/assets/{channel-recipient-api-CTw3ibx4.js → channel-recipient-api-Czu0YzIZ.js} +1 -1
  23. package/dist/gateway/static/root/assets/channels-settings-BP0e62wt.js +1 -0
  24. package/dist/gateway/static/root/assets/channels-status-swr-DBWKfeGe.js +1 -0
  25. package/dist/gateway/static/root/assets/connector-logo-Di3gnR_D.js +1 -0
  26. package/dist/gateway/static/root/assets/connectors-page-CC5kh0de.js +2 -0
  27. package/dist/gateway/static/root/assets/desktop-pet-D-ZUNHhn.js +1 -0
  28. package/dist/gateway/static/root/assets/{desktop-pet-settings-CIeH4VyP.js → desktop-pet-settings-C3L6AI8_.js} +1 -1
  29. package/dist/gateway/static/root/assets/{directory-picker-path-field-Ddgt6c3K.js → directory-picker-path-field-Dvq4iG6P.js} +1 -1
  30. package/dist/gateway/static/root/assets/dreaming-settings-D9i54kWO.js +3 -0
  31. package/dist/gateway/static/root/assets/{extension-debug-page-CJGwUaQX.js → extension-debug-page-BecQjU0J.js} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-page-B3zHKJAB.js → extension-page-BeVkPSm-.js} +1 -1
  33. package/dist/gateway/static/root/assets/{extension-settings-page-Cj9rrSr1.js → extension-settings-page-DMoo2mKx.js} +1 -1
  34. package/dist/gateway/static/root/assets/{gateway-config-api-BdmtlJRP.js → gateway-config-api-Bthb3_6v.js} +1 -1
  35. package/dist/gateway/static/root/assets/{gateway-settings-C2RwKIsl.js → gateway-settings-Bh8nPvJQ.js} +1 -1
  36. package/dist/gateway/static/root/assets/{gateway-startup-retry-mcMq_uu_.js → gateway-startup-retry-D3USVm9D.js} +1 -1
  37. package/dist/gateway/static/root/assets/{goal-create-dialog-5Ryd_rx4.js → goal-create-dialog-Dp0AyDHI.js} +1 -1
  38. package/dist/gateway/static/root/assets/goal-detail-page-CNt7nrdS.js +4 -0
  39. package/dist/gateway/static/root/assets/{goals-config-api-CAO1J4jn.js → goals-config-api-C_2QWBtb.js} +1 -1
  40. package/dist/gateway/static/root/assets/goals-page-Bm_NZFiZ.js +2 -0
  41. package/dist/gateway/static/root/assets/{goals-settings-Boj2izKZ.js → goals-settings-DhL643tc.js} +1 -1
  42. package/dist/gateway/static/root/assets/{heartbeat-settings-DbPC9a_y.js → heartbeat-settings-COVFwp7C.js} +1 -1
  43. package/dist/gateway/static/root/assets/{image-generation-api-DrLCLTXn.js → image-generation-api-BNQlnwpU.js} +1 -1
  44. package/dist/gateway/static/root/assets/index-C_XSKOH6.css +1 -0
  45. package/dist/gateway/static/root/assets/{index-vHb2z7VS.js → index-DUasAutC.js} +67 -67
  46. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BrxfptgY.js → keyboard-shortcuts-settings-DfdJRJVy.js} +1 -1
  47. package/dist/gateway/static/root/assets/{local-app-workbench-page-BP0_Ih0e.js → local-app-workbench-page-DZwkD1co.js} +2 -2
  48. package/dist/gateway/static/root/assets/{local-apps-page-DNCRlfFs.js → local-apps-page-BvCPOgoi.js} +1 -1
  49. package/dist/gateway/static/root/assets/{locale-store-CzIfXqm8.js → locale-store-BP0vD37A.js} +1 -1
  50. package/dist/gateway/static/root/assets/logs-page-dNL0Y1dA.js +7 -0
  51. package/dist/gateway/static/root/assets/{markdown-split-CIUH9Lor.js → markdown-split-YO1rDk9m.js} +1 -1
  52. package/dist/gateway/static/root/assets/{media-plugins-DX4AgkCs.js → media-plugins-CU_RRf-q.js} +1 -1
  53. package/dist/gateway/static/root/assets/{messages-CKZuaOeG.js → messages-BWtP5TFz.js} +2 -2
  54. package/dist/gateway/static/root/assets/{notes-page-D1KprtxL.js → notes-page-CeFiOK3S.js} +1 -1
  55. package/dist/gateway/static/root/assets/notes-workbench-B8MKxpZb.js +4 -0
  56. package/dist/gateway/static/root/assets/{page-tabs-DjZPJGf6.js → page-tabs-tiHmRJUA.js} +1 -1
  57. package/dist/gateway/static/root/assets/{preview-open-alternatives-DNiJTpwZ.js → preview-open-alternatives-CU6XgaCz.js} +1 -1
  58. package/dist/gateway/static/root/assets/{product-open-page-CNfR17-g.js → product-open-page-Dn4_qor4.js} +1 -1
  59. package/dist/gateway/static/root/assets/project-detail-page-CWBuuX-S.js +1 -0
  60. package/dist/gateway/static/root/assets/projects-page-BJSsLsXH.js +1 -0
  61. package/dist/gateway/static/root/assets/remote-access-hub-DXJDb8vB.js +1 -0
  62. package/dist/gateway/static/root/assets/{save-bar-controls-BGZFVO9S.js → save-bar-controls-edDUIbXo.js} +1 -1
  63. package/dist/gateway/static/root/assets/{schedule-field-BAZiHtds.js → schedule-field-DqJO_5Yb.js} +1 -1
  64. package/dist/gateway/static/root/assets/{schema-form-CesBcwJH.js → schema-form-CMh0jzy5.js} +1 -1
  65. package/dist/gateway/static/root/assets/sessions-page-DeHpWgxM.js +1 -0
  66. package/dist/gateway/static/root/assets/settings-advanced-gate-Cf-TEYUd.js +1 -0
  67. package/dist/gateway/static/root/assets/{settings-form-section-Bxc54BLj.js → settings-form-section-Bb0Bc3nJ.js} +1 -1
  68. package/dist/gateway/static/root/assets/{settings-loading-skeleton-CYrho7Db.js → settings-loading-skeleton-DQhADvz1.js} +1 -1
  69. package/dist/gateway/static/root/assets/{settings-page-C03X5fkh.js → settings-page-b0M5HukN.js} +1 -1
  70. package/dist/gateway/static/root/assets/{settings-page-layout-CZAJbv4E.js → settings-page-layout-hvjtIjvh.js} +1 -1
  71. package/dist/gateway/static/root/assets/{setup-status-panel-Jv8_bcOD.js → setup-status-panel-BFyfed_g.js} +1 -1
  72. package/dist/gateway/static/root/assets/{share-preview-page-DSC7tKKG.js → share-preview-page-rbeaOpTg.js} +1 -1
  73. package/dist/gateway/static/root/assets/shares-settings-CYnH9sTt.js +1 -0
  74. package/dist/gateway/static/root/assets/skill-reload-api-Cr8_m-jS.js +1 -0
  75. package/dist/gateway/static/root/assets/skills-page-Chtc1xDO.js +2 -0
  76. package/dist/gateway/static/root/assets/{system-settings-panel-BO89zw5H.js → system-settings-panel-BHo_hgnL.js} +1 -1
  77. package/dist/gateway/static/root/assets/{theme-store-1OkdVC8l.js → theme-store-C3KnnjcU.js} +1 -1
  78. package/dist/gateway/static/root/assets/time-picker-D-G-uwVJ.js +1 -0
  79. package/dist/gateway/static/root/assets/{typed-models-lib-D-_vct_y.js → typed-models-lib-DtRnG-YI.js} +1 -1
  80. package/dist/gateway/static/root/assets/{use-channel-catalog-VlFtjlET.js → use-channel-catalog-CWWItX2g.js} +1 -1
  81. package/dist/gateway/static/root/assets/user-context-page-D7qMR26X.js +1 -0
  82. package/dist/gateway/static/root/assets/{voice-api-key-field-BhDk-UV_.js → voice-api-key-field-BTnltQHZ.js} +1 -1
  83. package/dist/gateway/static/root/assets/work-discovery-page-CpqFZze9.js +1 -0
  84. package/dist/gateway/static/root/assets/work-item-detail-page-t4dXpGC0.js +1 -0
  85. package/dist/gateway/static/root/assets/work-page-BXwDKiMZ.js +1 -0
  86. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-uVw4Yoej.js → workflow-run-setup-panel-D7vKChFZ.js} +2 -2
  87. package/dist/gateway/static/root/assets/workflows-page-Bos9HyqT.js +11 -0
  88. package/dist/gateway/static/root/index.html +7 -7
  89. package/dist/package.js +1 -1
  90. package/dist/src/agent/memory/builtin-provider.js +4 -4
  91. package/dist/src/agent/memory/manager.d.ts +4 -1
  92. package/dist/src/agent/memory/manager.js +8 -3
  93. package/dist/src/agent/memory/understanding/service.d.ts +2 -0
  94. package/dist/src/agent/memory/understanding/service.js +11 -9
  95. package/dist/src/agent/service.d.ts +1 -0
  96. package/dist/src/agent/service.js +3 -0
  97. package/dist/src/automations/domain/validation.d.ts +8 -8
  98. package/dist/src/automations/draft/automation-draft-validator.d.ts +1 -1
  99. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  100. package/dist/src/connectors/composio-sessions.d.ts +1 -0
  101. package/dist/src/connectors/composio-sessions.js +14 -5
  102. package/dist/src/connectors/composio-triggers.d.ts +1 -1
  103. package/dist/src/connectors/composio-triggers.js +4 -3
  104. package/dist/src/connectors/composio.js +1 -0
  105. package/dist/src/connectors/{connector-memory-sync.d.ts → connected-source-ingestion.d.ts} +11 -4
  106. package/dist/src/connectors/{connector-memory-sync.js → connected-source-ingestion.js} +49 -101
  107. package/dist/src/connectors/connected-source-normalizers.d.ts +15 -0
  108. package/dist/src/connectors/connected-source-normalizers.js +186 -0
  109. package/dist/src/connectors/connector-identity.d.ts +2 -0
  110. package/dist/src/connectors/connector-identity.js +29 -0
  111. package/dist/src/connectors/learning-coordinator.d.ts +25 -0
  112. package/dist/src/connectors/learning-coordinator.js +214 -0
  113. package/dist/src/connectors/learning-recipes.d.ts +22 -0
  114. package/dist/src/connectors/learning-recipes.js +121 -0
  115. package/dist/src/connectors/runtime-status.d.ts +1 -8
  116. package/dist/src/connectors/runtime-status.js +4 -29
  117. package/dist/src/gateway/hono/routes/connectors.js +76 -118
  118. package/dist/src/gateway/hono/routes/models.js +24 -0
  119. package/dist/src/gateway/hono/routes/public-gateway.js +3 -2
  120. package/dist/src/gateway/hono/routes/you.js +86 -5
  121. package/dist/src/gateway/service.d.ts +5 -2
  122. package/dist/src/gateway/service.js +16 -11
  123. package/dist/src/knowledge/connected-understanding-pipeline.d.ts +19 -0
  124. package/dist/src/knowledge/connected-understanding-pipeline.js +268 -0
  125. package/dist/src/knowledge/index.d.ts +1 -0
  126. package/dist/src/knowledge/index.js +2 -1
  127. package/dist/src/knowledge/ingestion-service.d.ts +6 -4
  128. package/dist/src/knowledge/ingestion-service.js +13 -10
  129. package/dist/src/knowledge/local-folder-adapter.js +1 -0
  130. package/dist/src/knowledge/people-graph.js +43 -110
  131. package/dist/src/knowledge/types.d.ts +3 -0
  132. package/dist/src/providers/xopc-cloud-account-service.d.ts +40 -0
  133. package/dist/src/providers/xopc-cloud-account-service.js +65 -0
  134. package/dist/src/storage/sqlite/connector-learning-repository.d.ts +47 -0
  135. package/dist/src/storage/sqlite/connector-learning-repository.js +110 -0
  136. package/dist/src/storage/sqlite/index.d.ts +3 -1
  137. package/dist/src/storage/sqlite/index.js +4 -2
  138. package/dist/src/storage/sqlite/knowledge-repository.d.ts +4 -2
  139. package/dist/src/storage/sqlite/knowledge-repository.js +24 -13
  140. package/dist/src/storage/sqlite/migrations/062_connector_learning_jobs.sql +27 -0
  141. package/dist/src/storage/sqlite/migrations/063_knowledge_collection_scopes.sql +14 -0
  142. package/dist/src/storage/sqlite/migrations/064_user_claims.sql +60 -0
  143. package/dist/src/storage/sqlite/migrations/065_knowledge_item_scope_identity.sql +116 -0
  144. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  145. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  146. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  147. package/dist/src/storage/sqlite/schema.js +1 -1
  148. package/dist/src/storage/sqlite/user-claims-repository.d.ts +101 -0
  149. package/dist/src/storage/sqlite/user-claims-repository.js +241 -0
  150. package/dist/src/user-context/projection.d.ts +36 -1
  151. package/dist/src/user-context/projection.js +84 -6
  152. package/dist/src/work-discovery/service.js +1 -0
  153. package/package.json +1 -1
  154. package/dist/gateway/static/root/assets/agents-ZCIC8mhO.js +0 -2
  155. package/dist/gateway/static/root/assets/apps-page-DJmgBaAm.js +0 -1
  156. package/dist/gateway/static/root/assets/automations-page-Ddot8-Md.js +0 -6
  157. package/dist/gateway/static/root/assets/block-editor-D3GIllO3.js +0 -184
  158. package/dist/gateway/static/root/assets/browser-settings-page-DvETvRcg.js +0 -8
  159. package/dist/gateway/static/root/assets/capabilities-settings-panel-ChXIYbys.js +0 -7
  160. package/dist/gateway/static/root/assets/capability-presets-settings-panel-CUekXsJy.js +0 -1
  161. package/dist/gateway/static/root/assets/channels-settings-CkhveNsQ.js +0 -1
  162. package/dist/gateway/static/root/assets/channels-status-swr-DRTb8DBk.js +0 -1
  163. package/dist/gateway/static/root/assets/connector-logo-CQznQcd4.js +0 -1
  164. package/dist/gateway/static/root/assets/connectors-page-DkSGIxWP.js +0 -2
  165. package/dist/gateway/static/root/assets/desktop-pet-BtP-xUQ9.js +0 -1
  166. package/dist/gateway/static/root/assets/dreaming-settings-gd9W6SLj.js +0 -3
  167. package/dist/gateway/static/root/assets/goal-detail-page-DizZ6Cpl.js +0 -4
  168. package/dist/gateway/static/root/assets/goals-page-Dqry_hi2.js +0 -2
  169. package/dist/gateway/static/root/assets/index-DEdyUjxM.css +0 -1
  170. package/dist/gateway/static/root/assets/logs-page-mT48mcF4.js +0 -7
  171. package/dist/gateway/static/root/assets/notes-workbench-wgt2Osyk.js +0 -4
  172. package/dist/gateway/static/root/assets/project-detail-page-CDjHvxJm.js +0 -1
  173. package/dist/gateway/static/root/assets/projects-page-kJZwQXfC.js +0 -1
  174. package/dist/gateway/static/root/assets/remote-access-hub-MJdI9ek_.js +0 -1
  175. package/dist/gateway/static/root/assets/sessions-page-BqC7GDC_.js +0 -1
  176. package/dist/gateway/static/root/assets/settings-advanced-gate-CYwz8MfF.js +0 -1
  177. package/dist/gateway/static/root/assets/shares-settings-h8tGDkA3.js +0 -1
  178. package/dist/gateway/static/root/assets/skill-reload-api-D2DGvRUn.js +0 -1
  179. package/dist/gateway/static/root/assets/skills-page-vqhjSMhZ.js +0 -2
  180. package/dist/gateway/static/root/assets/time-picker-mtD64kFB.js +0 -1
  181. package/dist/gateway/static/root/assets/user-context-page-BgF0WxjM.js +0 -1
  182. package/dist/gateway/static/root/assets/work-discovery-page-CP0Daig-.js +0 -1
  183. package/dist/gateway/static/root/assets/work-item-detail-page-NEWZPKB_.js +0 -1
  184. package/dist/gateway/static/root/assets/work-page-BkWntcQh.js +0 -1
  185. package/dist/gateway/static/root/assets/workflows-page-DRvhNQGe.js +0 -11
  186. package/dist/src/connectors/memory-sync-coordinator.d.ts +0 -28
  187. package/dist/src/connectors/memory-sync-coordinator.js +0 -162
  188. package/dist/src/connectors/memory-sync-profile.d.ts +0 -13
  189. package/dist/src/connectors/memory-sync-profile.js +0 -73
@@ -29,6 +29,7 @@ function sourceItemFromRow(row) {
29
29
  return {
30
30
  id: row.item_id,
31
31
  sourceInstanceId: row.source_instance_id,
32
+ collectionScope: row.collection_scope,
32
33
  externalId: row.external_id,
33
34
  itemType: row.item_type,
34
35
  ...row.author_role ? { authorRole: row.author_role } : {},
@@ -127,16 +128,16 @@ function listKnowledgeSyncRuns(options = {}) {
127
128
  ${where.length > 0 ? `WHERE ${where.join(" AND ")}` : ""}
128
129
  ORDER BY started_at DESC LIMIT ?`).all(...params, limit).map(syncRunFromRow);
129
130
  }
130
- function getKnowledgeSourceCursor(sourceInstanceId) {
131
- return getSqliteDatabase().prepare(`SELECT cursor FROM knowledge_source_state WHERE source_instance_id = ?`).get(sourceInstanceId)?.cursor ?? void 0;
131
+ function getKnowledgeSourceCursor(sourceInstanceId, collectionScope) {
132
+ return getSqliteDatabase().prepare(`SELECT cursor FROM knowledge_collection_state WHERE source_instance_id = ? AND collection_scope = ?`).get(sourceInstanceId, collectionScope)?.cursor ?? void 0;
132
133
  }
133
- function setKnowledgeSourceCursor(sourceInstanceId, cursor) {
134
+ function setKnowledgeSourceCursor(sourceInstanceId, collectionScope, cursor) {
134
135
  runSqliteWriteTransaction((db) => {
135
- db.prepare(`INSERT INTO knowledge_source_state (source_instance_id, cursor, updated_at)
136
- VALUES (?, ?, ?)
137
- ON CONFLICT(source_instance_id) DO UPDATE SET
136
+ db.prepare(`INSERT INTO knowledge_collection_state (source_instance_id, collection_scope, cursor, updated_at)
137
+ VALUES (?, ?, ?, ?)
138
+ ON CONFLICT(source_instance_id, collection_scope) DO UPDATE SET
138
139
  cursor = excluded.cursor,
139
- updated_at = excluded.updated_at`).run(sourceInstanceId, cursor ?? null, Date.now());
140
+ updated_at = excluded.updated_at`).run(sourceInstanceId, collectionScope, cursor ?? null, Date.now());
140
141
  });
141
142
  }
142
143
  function upsertKnowledgeSourceItems(inputs, nowMs = Date.now()) {
@@ -147,7 +148,7 @@ function upsertKnowledgeSourceItems(inputs, nowMs = Date.now()) {
147
148
  let unchanged = 0;
148
149
  for (const input of inputs) {
149
150
  const existing = db.prepare(`SELECT * FROM knowledge_source_items
150
- WHERE source_instance_id = ? AND external_id = ?`).get(input.sourceInstanceId, input.externalId);
151
+ WHERE source_instance_id = ? AND collection_scope = ? AND external_id = ?`).get(input.sourceInstanceId, input.collectionScope, input.externalId);
151
152
  const id = existing?.item_id ?? input.id ?? randomUUID();
152
153
  if (existing?.content_hash === input.contentHash && existing.deleted_at === parseTimestamp(input.deletedAt)) {
153
154
  unchanged += 1;
@@ -155,13 +156,14 @@ function upsertKnowledgeSourceItems(inputs, nowMs = Date.now()) {
155
156
  continue;
156
157
  }
157
158
  db.prepare(`INSERT INTO knowledge_source_items (
158
- item_id, source_instance_id, external_id, item_type, author_role,
159
+ item_id, source_instance_id, collection_scope, external_id, item_type, author_role,
159
160
  occurred_at, source_updated_at, content_hash, normalized_text,
160
161
  payload_ref, metadata_json, sensitivity, retention_class,
161
162
  synthesis_pipeline, synthesis_status, deleted_at, created_at, updated_at
162
- ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
163
- ON CONFLICT(source_instance_id, external_id) DO UPDATE SET
163
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
164
+ ON CONFLICT(source_instance_id, collection_scope, external_id) DO UPDATE SET
164
165
  item_type = excluded.item_type,
166
+ collection_scope = excluded.collection_scope,
165
167
  author_role = excluded.author_role,
166
168
  occurred_at = excluded.occurred_at,
167
169
  source_updated_at = excluded.source_updated_at,
@@ -178,7 +180,7 @@ function upsertKnowledgeSourceItems(inputs, nowMs = Date.now()) {
178
180
  synthesis_claimed_by = NULL,
179
181
  synthesis_error = NULL,
180
182
  deleted_at = excluded.deleted_at,
181
- updated_at = excluded.updated_at`).run(id, input.sourceInstanceId, 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);
183
+ 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);
182
184
  const row = db.prepare(`SELECT * FROM knowledge_source_items WHERE item_id = ?`).get(id);
183
185
  items.push(sourceItemFromRow(row));
184
186
  const changeKind = input.deletedAt ? "deleted" : existing ? "modified" : "added";
@@ -238,6 +240,10 @@ function listKnowledgeSourceItems(options = {}) {
238
240
  where.push("source_instance_id = ?");
239
241
  params.push(options.sourceInstanceId);
240
242
  }
243
+ if (options.collectionScope) {
244
+ where.push("collection_scope = ?");
245
+ params.push(options.collectionScope);
246
+ }
241
247
  if (options.itemType) {
242
248
  where.push("item_type = ?");
243
249
  params.push(options.itemType);
@@ -254,6 +260,11 @@ function listKnowledgeSourceItems(options = {}) {
254
260
  ORDER BY COALESCE(source_updated_at, occurred_at, updated_at) DESC
255
261
  LIMIT ? OFFSET ?`).all(...params, limit, offset).map(sourceItemFromRow);
256
262
  }
263
+ function pruneBoundedKnowledgeSourceItems(sourceInstanceId, olderThanMs) {
264
+ return runSqliteWriteTransaction((db) => Number(db.prepare(`DELETE FROM knowledge_source_items
265
+ WHERE source_instance_id = ? AND retention_class = 'bounded'
266
+ AND COALESCE(source_updated_at, occurred_at, updated_at) < ?`).run(sourceInstanceId, olderThanMs).changes));
267
+ }
257
268
  function setKnowledgeSourceItemSynthesisStatus(itemIds, status, nowMs = Date.now()) {
258
269
  if (itemIds.length === 0) return 0;
259
270
  return runSqliteWriteTransaction((db) => {
@@ -350,4 +361,4 @@ function listMemoryEvidence(recordId) {
350
361
  }));
351
362
  }
352
363
  //#endregion
353
- export { attachMemoryEvidence, claimKnowledgeSourceItems, completeKnowledgeSourceItemSynthesis, deleteMemoryEvidenceForRecord, finishKnowledgeSyncRun, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, listKnowledgeSourceChanges, listKnowledgeSourceItems, listKnowledgeSyncRuns, listMemoryEvidence, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, startKnowledgeSyncRun, upsertKnowledgeSourceItems };
364
+ export { attachMemoryEvidence, claimKnowledgeSourceItems, completeKnowledgeSourceItemSynthesis, deleteMemoryEvidenceForRecord, finishKnowledgeSyncRun, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, listKnowledgeSourceChanges, listKnowledgeSourceItems, listKnowledgeSyncRuns, listMemoryEvidence, pruneBoundedKnowledgeSourceItems, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, startKnowledgeSyncRun, upsertKnowledgeSourceItems };
@@ -0,0 +1,27 @@
1
+ CREATE TABLE connector_learning_jobs (
2
+ job_id TEXT PRIMARY KEY,
3
+ idempotency_key TEXT NOT NULL UNIQUE,
4
+ connector_id TEXT NOT NULL,
5
+ connection_id TEXT NOT NULL,
6
+ source_instance_id TEXT NOT NULL,
7
+ agent_id TEXT NOT NULL,
8
+ mode TEXT NOT NULL CHECK(mode IN ('bootstrap', 'incremental')),
9
+ status TEXT NOT NULL CHECK(status IN ('queued', 'running', 'completed', 'failed', 'paused')),
10
+ phase TEXT NOT NULL CHECK(phase IN ('queued', 'fetching', 'indexing', 'deriving', 'completed')),
11
+ items_discovered INTEGER NOT NULL DEFAULT 0,
12
+ items_indexed INTEGER NOT NULL DEFAULT 0,
13
+ candidates_created INTEGER NOT NULL DEFAULT 0,
14
+ attempt_count INTEGER NOT NULL DEFAULT 0,
15
+ error TEXT,
16
+ next_run_at INTEGER,
17
+ started_at INTEGER,
18
+ finished_at INTEGER,
19
+ created_at INTEGER NOT NULL,
20
+ updated_at INTEGER NOT NULL,
21
+ FOREIGN KEY(connection_id) REFERENCES connector_connections(id) ON DELETE CASCADE
22
+ );
23
+
24
+ CREATE INDEX idx_connector_learning_jobs_due
25
+ ON connector_learning_jobs(status, next_run_at, created_at);
26
+ CREATE INDEX idx_connector_learning_jobs_source
27
+ ON connector_learning_jobs(source_instance_id, created_at DESC);
@@ -0,0 +1,14 @@
1
+ ALTER TABLE knowledge_source_items ADD COLUMN collection_scope TEXT NOT NULL DEFAULT 'primary';
2
+
3
+ DROP TABLE knowledge_source_state;
4
+
5
+ CREATE TABLE knowledge_collection_state (
6
+ source_instance_id TEXT NOT NULL,
7
+ collection_scope TEXT NOT NULL,
8
+ cursor TEXT,
9
+ updated_at INTEGER NOT NULL,
10
+ PRIMARY KEY(source_instance_id, collection_scope)
11
+ );
12
+
13
+ CREATE INDEX idx_knowledge_source_items_collection
14
+ ON knowledge_source_items(source_instance_id, collection_scope, updated_at DESC);
@@ -0,0 +1,60 @@
1
+ CREATE TABLE user_entities (
2
+ entity_id TEXT PRIMARY KEY,
3
+ entity_type TEXT NOT NULL CHECK(entity_type IN ('person', 'project', 'organization')),
4
+ canonical_label TEXT NOT NULL,
5
+ created_at INTEGER NOT NULL,
6
+ updated_at INTEGER NOT NULL
7
+ );
8
+
9
+ CREATE TABLE user_entity_handles (
10
+ entity_id TEXT NOT NULL,
11
+ handle_type TEXT NOT NULL CHECK(handle_type IN ('email', 'provider_user', 'display_name')),
12
+ normalized_value TEXT NOT NULL,
13
+ source_scope TEXT NOT NULL,
14
+ verified INTEGER NOT NULL CHECK(verified IN (0, 1)),
15
+ created_at INTEGER NOT NULL,
16
+ PRIMARY KEY(handle_type, normalized_value, source_scope),
17
+ FOREIGN KEY(entity_id) REFERENCES user_entities(entity_id) ON DELETE CASCADE
18
+ );
19
+
20
+ CREATE INDEX idx_user_entity_handles_entity ON user_entity_handles(entity_id);
21
+
22
+ CREATE TABLE user_claims (
23
+ claim_id TEXT PRIMARY KEY,
24
+ agent_id TEXT NOT NULL,
25
+ claim_class TEXT NOT NULL CHECK(claim_class IN ('relationship', 'project', 'routine')),
26
+ claim_key TEXT NOT NULL,
27
+ subject_entity_id TEXT,
28
+ value_json TEXT NOT NULL,
29
+ state TEXT NOT NULL CHECK(state IN ('provisional', 'active', 'rejected', 'stale')),
30
+ user_state TEXT NOT NULL CHECK(user_state IN ('auto', 'confirmed', 'rejected')),
31
+ confidence REAL NOT NULL,
32
+ independent_evidence_count INTEGER NOT NULL,
33
+ active_day_count INTEGER NOT NULL,
34
+ first_observed_at INTEGER NOT NULL,
35
+ last_reinforced_at INTEGER NOT NULL,
36
+ memory_record_id TEXT,
37
+ created_at INTEGER NOT NULL,
38
+ updated_at INTEGER NOT NULL,
39
+ UNIQUE(agent_id, claim_class, claim_key),
40
+ FOREIGN KEY(subject_entity_id) REFERENCES user_entities(entity_id) ON DELETE SET NULL,
41
+ FOREIGN KEY(memory_record_id) REFERENCES memory_records(record_id) ON DELETE SET NULL
42
+ );
43
+
44
+ CREATE INDEX idx_user_claims_agent_state
45
+ ON user_claims(agent_id, state, confidence DESC, last_reinforced_at DESC);
46
+
47
+ CREATE TABLE user_claim_evidence (
48
+ claim_id TEXT NOT NULL,
49
+ logical_event_key TEXT NOT NULL,
50
+ source_item_id TEXT NOT NULL,
51
+ source_instance_id TEXT NOT NULL,
52
+ relation TEXT NOT NULL CHECK(relation IN ('supports', 'contradicts')),
53
+ observed_at INTEGER NOT NULL,
54
+ created_at INTEGER NOT NULL,
55
+ PRIMARY KEY(claim_id, logical_event_key),
56
+ FOREIGN KEY(claim_id) REFERENCES user_claims(claim_id) ON DELETE CASCADE,
57
+ FOREIGN KEY(source_item_id) REFERENCES knowledge_source_items(item_id) ON DELETE CASCADE
58
+ );
59
+
60
+ CREATE INDEX idx_user_claim_evidence_source ON user_claim_evidence(source_item_id);
@@ -0,0 +1,116 @@
1
+ CREATE TABLE memory_evidence_backup AS SELECT * FROM memory_evidence;
2
+ CREATE TABLE knowledge_source_changes_backup AS SELECT * FROM knowledge_source_changes;
3
+ CREATE TABLE user_claim_evidence_backup AS SELECT * FROM user_claim_evidence;
4
+
5
+ DROP TABLE memory_evidence;
6
+ DROP TABLE knowledge_source_changes;
7
+ DROP TABLE user_claim_evidence;
8
+
9
+ CREATE TABLE knowledge_source_items_v65 (
10
+ item_id TEXT PRIMARY KEY,
11
+ source_instance_id TEXT NOT NULL,
12
+ collection_scope TEXT NOT NULL,
13
+ external_id TEXT NOT NULL,
14
+ item_type TEXT NOT NULL,
15
+ author_role TEXT,
16
+ occurred_at INTEGER,
17
+ source_updated_at INTEGER,
18
+ content_hash TEXT NOT NULL,
19
+ normalized_text TEXT,
20
+ payload_ref TEXT,
21
+ metadata_json TEXT NOT NULL DEFAULT '{}',
22
+ sensitivity TEXT NOT NULL DEFAULT 'normal',
23
+ retention_class TEXT NOT NULL DEFAULT 'bounded',
24
+ synthesis_status TEXT NOT NULL DEFAULT 'pending',
25
+ synthesis_pipeline TEXT NOT NULL DEFAULT 'user_understanding'
26
+ CHECK(synthesis_pipeline IN ('user_understanding', 'connected_knowledge')),
27
+ synthesis_attempts INTEGER NOT NULL DEFAULT 0,
28
+ synthesis_claimed_at INTEGER,
29
+ synthesis_claimed_by TEXT,
30
+ synthesis_error TEXT,
31
+ deleted_at INTEGER,
32
+ created_at INTEGER NOT NULL,
33
+ updated_at INTEGER NOT NULL,
34
+ UNIQUE(source_instance_id, collection_scope, external_id)
35
+ );
36
+
37
+ INSERT INTO knowledge_source_items_v65 (
38
+ item_id, source_instance_id, collection_scope, external_id, item_type, author_role,
39
+ occurred_at, source_updated_at, content_hash, normalized_text, payload_ref, metadata_json,
40
+ sensitivity, retention_class, synthesis_status, synthesis_pipeline, synthesis_attempts,
41
+ synthesis_claimed_at, synthesis_claimed_by, synthesis_error, deleted_at, created_at, updated_at
42
+ )
43
+ SELECT
44
+ item_id, source_instance_id, collection_scope, external_id, item_type, author_role,
45
+ occurred_at, source_updated_at, content_hash, normalized_text, payload_ref, metadata_json,
46
+ sensitivity, retention_class, synthesis_status, synthesis_pipeline, synthesis_attempts,
47
+ synthesis_claimed_at, synthesis_claimed_by, synthesis_error, deleted_at, created_at, updated_at
48
+ FROM knowledge_source_items;
49
+
50
+ DROP TABLE knowledge_source_items;
51
+ ALTER TABLE knowledge_source_items_v65 RENAME TO knowledge_source_items;
52
+
53
+ CREATE INDEX idx_knowledge_source_items_source_updated
54
+ ON knowledge_source_items(source_instance_id, updated_at DESC);
55
+ CREATE INDEX idx_knowledge_source_items_synthesis
56
+ ON knowledge_source_items(synthesis_status, updated_at);
57
+ CREATE INDEX idx_knowledge_source_items_hash
58
+ ON knowledge_source_items(content_hash);
59
+ CREATE INDEX idx_knowledge_source_items_synthesis_lease
60
+ ON knowledge_source_items(synthesis_pipeline, synthesis_status, synthesis_claimed_at, updated_at);
61
+ CREATE INDEX idx_knowledge_source_items_collection
62
+ ON knowledge_source_items(source_instance_id, collection_scope, updated_at DESC);
63
+
64
+ CREATE TABLE memory_evidence (
65
+ evidence_id TEXT PRIMARY KEY,
66
+ record_id TEXT NOT NULL,
67
+ source_item_id TEXT,
68
+ relation TEXT NOT NULL,
69
+ excerpt TEXT,
70
+ confidence REAL,
71
+ observed_at INTEGER,
72
+ created_at INTEGER NOT NULL,
73
+ FOREIGN KEY(record_id) REFERENCES memory_records(record_id) ON DELETE CASCADE,
74
+ FOREIGN KEY(source_item_id) REFERENCES knowledge_source_items(item_id) ON DELETE SET NULL
75
+ );
76
+ INSERT INTO memory_evidence SELECT * FROM memory_evidence_backup;
77
+ DROP TABLE memory_evidence_backup;
78
+ CREATE INDEX idx_memory_evidence_record ON memory_evidence(record_id, created_at DESC);
79
+ CREATE INDEX idx_memory_evidence_source_item ON memory_evidence(source_item_id);
80
+ CREATE UNIQUE INDEX idx_memory_evidence_record_source_relation
81
+ ON memory_evidence(record_id, source_item_id, relation)
82
+ WHERE source_item_id IS NOT NULL;
83
+
84
+ CREATE TABLE knowledge_source_changes (
85
+ sequence INTEGER PRIMARY KEY AUTOINCREMENT,
86
+ change_id TEXT NOT NULL UNIQUE,
87
+ source_instance_id TEXT NOT NULL,
88
+ source_item_id TEXT NOT NULL,
89
+ change_kind TEXT NOT NULL CHECK(change_kind IN ('added', 'modified', 'deleted')),
90
+ old_hash TEXT,
91
+ new_hash TEXT,
92
+ changed_at INTEGER NOT NULL,
93
+ FOREIGN KEY(source_item_id) REFERENCES knowledge_source_items(item_id) ON DELETE CASCADE
94
+ );
95
+ INSERT INTO knowledge_source_changes SELECT * FROM knowledge_source_changes_backup;
96
+ DROP TABLE knowledge_source_changes_backup;
97
+ CREATE INDEX idx_knowledge_source_changes_source_sequence
98
+ ON knowledge_source_changes(source_instance_id, sequence);
99
+ CREATE INDEX idx_knowledge_source_changes_changed_at
100
+ ON knowledge_source_changes(changed_at DESC);
101
+
102
+ CREATE TABLE user_claim_evidence (
103
+ claim_id TEXT NOT NULL,
104
+ logical_event_key TEXT NOT NULL,
105
+ source_item_id TEXT NOT NULL,
106
+ source_instance_id TEXT NOT NULL,
107
+ relation TEXT NOT NULL CHECK(relation IN ('supports', 'contradicts')),
108
+ observed_at INTEGER NOT NULL,
109
+ created_at INTEGER NOT NULL,
110
+ PRIMARY KEY(claim_id, logical_event_key),
111
+ FOREIGN KEY(claim_id) REFERENCES user_claims(claim_id) ON DELETE CASCADE,
112
+ FOREIGN KEY(source_item_id) REFERENCES knowledge_source_items(item_id) ON DELETE CASCADE
113
+ );
114
+ INSERT INTO user_claim_evidence SELECT * FROM user_claim_evidence_backup;
115
+ DROP TABLE user_claim_evidence_backup;
116
+ CREATE INDEX idx_user_claim_evidence_source ON user_claim_evidence(source_item_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 = 11;
5
5
  /** Latest schema version this release supports (increment when adding migrations). */
6
- export declare const XOPC_DB_SCHEMA_VERSION = 61;
6
+ export declare const XOPC_DB_SCHEMA_VERSION = 65;
7
7
  export declare function resolveMigrationsDir(override?: string): string;
8
8
  /**
9
9
  * Apply sequential SQL migrations from (currentVersion + 1) through targetVersion.
@@ -12,7 +12,7 @@ const log = createLogger("Sqlite:Migrations");
12
12
  /** Baseline schema version applied from schema.sql on first open. */
13
13
  const XOPC_DB_BASELINE_SCHEMA_VERSION = 11;
14
14
  /** Latest schema version this release supports (increment when adding migrations). */
15
- const XOPC_DB_SCHEMA_VERSION = 61;
15
+ const XOPC_DB_SCHEMA_VERSION = 65;
16
16
  const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
17
17
  function resolveMigrationsDir(override) {
18
18
  if (override) return override;
@@ -46,7 +46,7 @@ function applySingleMigration(db, migration) {
46
46
  * Each step runs in its own transaction and updates schema_meta on success.
47
47
  */
48
48
  function applyPendingMigrations(db, options = {}) {
49
- const targetVersion = options.targetVersion ?? 61;
49
+ const targetVersion = options.targetVersion ?? 65;
50
50
  let currentVersion = readSchemaVersion(db);
51
51
  if (currentVersion > targetVersion) throw new DatabaseSchemaTooNewError(currentVersion, targetVersion);
52
52
  if (currentVersion >= targetVersion) return currentVersion;
@@ -62,7 +62,7 @@ function applyPendingMigrations(db, options = {}) {
62
62
  }
63
63
  /** Inspect schema version without mutating the database. */
64
64
  function inspectSchemaMigrationStatus(db, options = {}) {
65
- const appVersion = options.targetVersion ?? 61;
65
+ const appVersion = options.targetVersion ?? 65;
66
66
  const dbVersion = readSchemaVersion(db);
67
67
  if (dbVersion > appVersion) return {
68
68
  dbVersion,
@@ -19,7 +19,7 @@ const log = createLogger('Sqlite:Migrations');
19
19
  export const XOPC_DB_BASELINE_SCHEMA_VERSION = 11;
20
20
 
21
21
  /** Latest schema version this release supports (increment when adding migrations). */
22
- export const XOPC_DB_SCHEMA_VERSION = 61;
22
+ export const XOPC_DB_SCHEMA_VERSION = 65;
23
23
 
24
24
  const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
25
25
 
@@ -31,7 +31,7 @@ function ensureXopcDatabaseSchema(db) {
31
31
  bootstrapFreshDatabase(db);
32
32
  currentVersion = 11;
33
33
  }
34
- applyPendingMigrations(db, { targetVersion: 61 });
34
+ applyPendingMigrations(db, { targetVersion: 65 });
35
35
  }
36
36
  //#endregion
37
37
  export { SCHEMA_META_SCHEMA_VERSION_KEY, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_SCHEMA_VERSION, ensureSchemaMetaTable, ensureXopcDatabaseSchema, readSchemaVersion, readSchemaVersionForTest, setSchemaVersion };
@@ -0,0 +1,101 @@
1
+ export type UserEntityType = 'person' | 'project' | 'organization';
2
+ export type UserEntityHandleType = 'email' | 'provider_user' | 'display_name';
3
+ export type UserClaimClass = 'relationship' | 'project' | 'routine';
4
+ export type UserClaimState = 'provisional' | 'active' | 'rejected' | 'stale';
5
+ export type UserClaimUserState = 'auto' | 'confirmed' | 'rejected';
6
+ export type UserEntity = {
7
+ id: string;
8
+ type: UserEntityType;
9
+ canonicalLabel: string;
10
+ createdAt: string;
11
+ updatedAt: string;
12
+ };
13
+ export type UserClaim = {
14
+ id: string;
15
+ agentId: string;
16
+ class: UserClaimClass;
17
+ key: string;
18
+ subjectEntityId?: string;
19
+ value: Record<string, unknown>;
20
+ state: UserClaimState;
21
+ userState: UserClaimUserState;
22
+ confidence: number;
23
+ independentEvidenceCount: number;
24
+ activeDayCount: number;
25
+ firstObservedAt: string;
26
+ lastReinforcedAt: string;
27
+ memoryRecordId?: string;
28
+ createdAt: string;
29
+ updatedAt: string;
30
+ };
31
+ export declare function resolveUserEntity(input: {
32
+ type: UserEntityType;
33
+ canonicalLabel: string;
34
+ handles: Array<{
35
+ type: UserEntityHandleType;
36
+ value: string;
37
+ sourceScope: string;
38
+ verified: boolean;
39
+ }>;
40
+ nowMs?: number;
41
+ }): UserEntity;
42
+ export declare function reinforceUserClaim(input: {
43
+ agentId: string;
44
+ class: UserClaimClass;
45
+ key: string;
46
+ subjectEntityId?: string;
47
+ value: Record<string, unknown>;
48
+ evidence: Array<{
49
+ logicalEventKey: string;
50
+ sourceItemId: string;
51
+ sourceInstanceId: string;
52
+ relation: 'supports' | 'contradicts';
53
+ observedAt: string;
54
+ }>;
55
+ nowMs?: number;
56
+ }): UserClaim;
57
+ export declare function removeUserClaimEvidenceForSource(sourceInstanceId: string): {
58
+ deletedClaimCount: number;
59
+ deletedMemoryRecordIds: string[];
60
+ retainedClaims: Array<{
61
+ memoryRecordId: string;
62
+ state: UserClaimState;
63
+ }>;
64
+ };
65
+ export declare function setUserClaimDecision(claimId: string, userState: Exclude<UserClaimUserState, 'auto'>): UserClaim | undefined;
66
+ export declare function linkUserClaimMemoryRecord(claimId: string, memoryRecordId: string): void;
67
+ export declare function getUserClaim(claimId: string): UserClaim | undefined;
68
+ export declare function listUserClaims(options?: {
69
+ agentId?: string;
70
+ state?: UserClaimState;
71
+ limit?: number;
72
+ }): UserClaim[];
73
+ export declare function listUserClaimEvidence(claimId: string): Array<{
74
+ logicalEventKey: string;
75
+ sourceItemId: string;
76
+ sourceInstanceId: string;
77
+ relation: string;
78
+ observedAt: string;
79
+ }>;
80
+ export declare function listUserPeopleGraphRows(): {
81
+ people: Array<UserEntity & {
82
+ handles: Array<{
83
+ type: UserEntityHandleType;
84
+ value: string;
85
+ }>;
86
+ }>;
87
+ edges: Array<{
88
+ entityId: string;
89
+ sourceInstanceId: string;
90
+ mentionCount: number;
91
+ lastObservedAt: string;
92
+ }>;
93
+ evidenceCount: number;
94
+ };
95
+ export declare function listUserClaimStatsBySource(): Record<string, {
96
+ evidenceCount: number;
97
+ provisionalClaims: number;
98
+ activeClaims: number;
99
+ resolvedEntities: number;
100
+ lastEvidenceAt?: string;
101
+ }>;