@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.
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store-BLz30jWq.js → activity-store-C3Y-bESI.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BKZO0EFn.js → agent-avatar-dicebear-CPyev9P7.js} +1 -1
- package/dist/gateway/static/root/assets/agents-Bf_kK2Ay.js +2 -0
- package/dist/gateway/static/root/assets/{api-N2qKY-WI.js → api-B7qEr_Rw.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-CNZkpXCD.js → app-management-settings-panel-Br_9-7fs.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-Drf5a563.js → appearance-settings-uyLcRPai.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-DXFCP5-1.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-ChVwOXE5.js → archive-plugin-B19REnR5.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-BVK3Y2d9.js → attachment-load-DLWCC4Yi.js} +1 -1
- package/dist/gateway/static/root/assets/{automation-suggestion-card-DH4N0SYR.js → automation-suggestion-card-ky5S5lly.js} +1 -1
- package/dist/gateway/static/root/assets/automations-page-D8pT1o2O.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-CeHY6VVP.js → binary-plugins-CtPEzLlo.js} +1 -1
- package/dist/gateway/static/root/assets/block-editor-CQVR4Xij.js +184 -0
- package/dist/gateway/static/root/assets/browser-settings-page-Bav_skKN.js +8 -0
- package/dist/gateway/static/root/assets/{browser-workflow-inputs-femCtfpo.js → browser-workflow-inputs-CimCGbhq.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-workflows-page-o0GVE_aF.js → browser-workflows-page-DewuCw3p.js} +2 -2
- package/dist/gateway/static/root/assets/capabilities-settings-panel-BHaYYo9E.js +7 -0
- package/dist/gateway/static/root/assets/{capability-presets-api-Bx-JJC0R.js → capability-presets-api-B5RTs-Az.js} +1 -1
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-BgchTh81.js +1 -0
- package/dist/gateway/static/root/assets/{channel-recipient-api-CTw3ibx4.js → channel-recipient-api-Czu0YzIZ.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-BP0e62wt.js +1 -0
- package/dist/gateway/static/root/assets/channels-status-swr-DBWKfeGe.js +1 -0
- package/dist/gateway/static/root/assets/connector-logo-Di3gnR_D.js +1 -0
- package/dist/gateway/static/root/assets/connectors-page-CC5kh0de.js +2 -0
- package/dist/gateway/static/root/assets/desktop-pet-D-ZUNHhn.js +1 -0
- package/dist/gateway/static/root/assets/{desktop-pet-settings-CIeH4VyP.js → desktop-pet-settings-C3L6AI8_.js} +1 -1
- package/dist/gateway/static/root/assets/{directory-picker-path-field-Ddgt6c3K.js → directory-picker-path-field-Dvq4iG6P.js} +1 -1
- package/dist/gateway/static/root/assets/dreaming-settings-D9i54kWO.js +3 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-CJGwUaQX.js → extension-debug-page-BecQjU0J.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-B3zHKJAB.js → extension-page-BeVkPSm-.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-Cj9rrSr1.js → extension-settings-page-DMoo2mKx.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-api-BdmtlJRP.js → gateway-config-api-Bthb3_6v.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-settings-C2RwKIsl.js → gateway-settings-Bh8nPvJQ.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-mcMq_uu_.js → gateway-startup-retry-D3USVm9D.js} +1 -1
- package/dist/gateway/static/root/assets/{goal-create-dialog-5Ryd_rx4.js → goal-create-dialog-Dp0AyDHI.js} +1 -1
- package/dist/gateway/static/root/assets/goal-detail-page-CNt7nrdS.js +4 -0
- package/dist/gateway/static/root/assets/{goals-config-api-CAO1J4jn.js → goals-config-api-C_2QWBtb.js} +1 -1
- package/dist/gateway/static/root/assets/goals-page-Bm_NZFiZ.js +2 -0
- package/dist/gateway/static/root/assets/{goals-settings-Boj2izKZ.js → goals-settings-DhL643tc.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-DbPC9a_y.js → heartbeat-settings-COVFwp7C.js} +1 -1
- package/dist/gateway/static/root/assets/{image-generation-api-DrLCLTXn.js → image-generation-api-BNQlnwpU.js} +1 -1
- package/dist/gateway/static/root/assets/index-C_XSKOH6.css +1 -0
- package/dist/gateway/static/root/assets/{index-vHb2z7VS.js → index-DUasAutC.js} +67 -67
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BrxfptgY.js → keyboard-shortcuts-settings-DfdJRJVy.js} +1 -1
- package/dist/gateway/static/root/assets/{local-app-workbench-page-BP0_Ih0e.js → local-app-workbench-page-DZwkD1co.js} +2 -2
- package/dist/gateway/static/root/assets/{local-apps-page-DNCRlfFs.js → local-apps-page-BvCPOgoi.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-CzIfXqm8.js → locale-store-BP0vD37A.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-dNL0Y1dA.js +7 -0
- package/dist/gateway/static/root/assets/{markdown-split-CIUH9Lor.js → markdown-split-YO1rDk9m.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-DX4AgkCs.js → media-plugins-CU_RRf-q.js} +1 -1
- package/dist/gateway/static/root/assets/{messages-CKZuaOeG.js → messages-BWtP5TFz.js} +2 -2
- package/dist/gateway/static/root/assets/{notes-page-D1KprtxL.js → notes-page-CeFiOK3S.js} +1 -1
- package/dist/gateway/static/root/assets/notes-workbench-B8MKxpZb.js +4 -0
- package/dist/gateway/static/root/assets/{page-tabs-DjZPJGf6.js → page-tabs-tiHmRJUA.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-DNiJTpwZ.js → preview-open-alternatives-CU6XgaCz.js} +1 -1
- package/dist/gateway/static/root/assets/{product-open-page-CNfR17-g.js → product-open-page-Dn4_qor4.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-CWBuuX-S.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-BJSsLsXH.js +1 -0
- package/dist/gateway/static/root/assets/remote-access-hub-DXJDb8vB.js +1 -0
- package/dist/gateway/static/root/assets/{save-bar-controls-BGZFVO9S.js → save-bar-controls-edDUIbXo.js} +1 -1
- package/dist/gateway/static/root/assets/{schedule-field-BAZiHtds.js → schedule-field-DqJO_5Yb.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-CesBcwJH.js → schema-form-CMh0jzy5.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-DeHpWgxM.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-Cf-TEYUd.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-Bxc54BLj.js → settings-form-section-Bb0Bc3nJ.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-CYrho7Db.js → settings-loading-skeleton-DQhADvz1.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-C03X5fkh.js → settings-page-b0M5HukN.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-layout-CZAJbv4E.js → settings-page-layout-hvjtIjvh.js} +1 -1
- package/dist/gateway/static/root/assets/{setup-status-panel-Jv8_bcOD.js → setup-status-panel-BFyfed_g.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-DSC7tKKG.js → share-preview-page-rbeaOpTg.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-CYnH9sTt.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-Cr8_m-jS.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-Chtc1xDO.js +2 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-BO89zw5H.js → system-settings-panel-BHo_hgnL.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-1OkdVC8l.js → theme-store-C3KnnjcU.js} +1 -1
- package/dist/gateway/static/root/assets/time-picker-D-G-uwVJ.js +1 -0
- package/dist/gateway/static/root/assets/{typed-models-lib-D-_vct_y.js → typed-models-lib-DtRnG-YI.js} +1 -1
- package/dist/gateway/static/root/assets/{use-channel-catalog-VlFtjlET.js → use-channel-catalog-CWWItX2g.js} +1 -1
- package/dist/gateway/static/root/assets/user-context-page-D7qMR26X.js +1 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-BhDk-UV_.js → voice-api-key-field-BTnltQHZ.js} +1 -1
- package/dist/gateway/static/root/assets/work-discovery-page-CpqFZze9.js +1 -0
- package/dist/gateway/static/root/assets/work-item-detail-page-t4dXpGC0.js +1 -0
- package/dist/gateway/static/root/assets/work-page-BXwDKiMZ.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-uVw4Yoej.js → workflow-run-setup-panel-D7vKChFZ.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-Bos9HyqT.js +11 -0
- package/dist/gateway/static/root/index.html +7 -7
- package/dist/package.js +1 -1
- package/dist/src/agent/memory/builtin-provider.js +4 -4
- package/dist/src/agent/memory/manager.d.ts +4 -1
- package/dist/src/agent/memory/manager.js +8 -3
- package/dist/src/agent/memory/understanding/service.d.ts +2 -0
- package/dist/src/agent/memory/understanding/service.js +11 -9
- package/dist/src/agent/service.d.ts +1 -0
- package/dist/src/agent/service.js +3 -0
- package/dist/src/automations/domain/validation.d.ts +8 -8
- package/dist/src/automations/draft/automation-draft-validator.d.ts +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/connectors/composio-sessions.d.ts +1 -0
- package/dist/src/connectors/composio-sessions.js +14 -5
- package/dist/src/connectors/composio-triggers.d.ts +1 -1
- package/dist/src/connectors/composio-triggers.js +4 -3
- package/dist/src/connectors/composio.js +1 -0
- package/dist/src/connectors/{connector-memory-sync.d.ts → connected-source-ingestion.d.ts} +11 -4
- package/dist/src/connectors/{connector-memory-sync.js → connected-source-ingestion.js} +49 -101
- package/dist/src/connectors/connected-source-normalizers.d.ts +15 -0
- package/dist/src/connectors/connected-source-normalizers.js +186 -0
- package/dist/src/connectors/connector-identity.d.ts +2 -0
- package/dist/src/connectors/connector-identity.js +29 -0
- package/dist/src/connectors/learning-coordinator.d.ts +25 -0
- package/dist/src/connectors/learning-coordinator.js +214 -0
- package/dist/src/connectors/learning-recipes.d.ts +22 -0
- package/dist/src/connectors/learning-recipes.js +121 -0
- package/dist/src/connectors/runtime-status.d.ts +1 -8
- package/dist/src/connectors/runtime-status.js +4 -29
- package/dist/src/gateway/hono/routes/connectors.js +76 -118
- package/dist/src/gateway/hono/routes/models.js +24 -0
- package/dist/src/gateway/hono/routes/public-gateway.js +3 -2
- package/dist/src/gateway/hono/routes/you.js +86 -5
- package/dist/src/gateway/service.d.ts +5 -2
- package/dist/src/gateway/service.js +16 -11
- package/dist/src/knowledge/connected-understanding-pipeline.d.ts +19 -0
- package/dist/src/knowledge/connected-understanding-pipeline.js +268 -0
- package/dist/src/knowledge/index.d.ts +1 -0
- package/dist/src/knowledge/index.js +2 -1
- package/dist/src/knowledge/ingestion-service.d.ts +6 -4
- package/dist/src/knowledge/ingestion-service.js +13 -10
- package/dist/src/knowledge/local-folder-adapter.js +1 -0
- package/dist/src/knowledge/people-graph.js +43 -110
- package/dist/src/knowledge/types.d.ts +3 -0
- package/dist/src/providers/xopc-cloud-account-service.d.ts +40 -0
- package/dist/src/providers/xopc-cloud-account-service.js +65 -0
- package/dist/src/storage/sqlite/connector-learning-repository.d.ts +47 -0
- package/dist/src/storage/sqlite/connector-learning-repository.js +110 -0
- package/dist/src/storage/sqlite/index.d.ts +3 -1
- package/dist/src/storage/sqlite/index.js +4 -2
- package/dist/src/storage/sqlite/knowledge-repository.d.ts +4 -2
- package/dist/src/storage/sqlite/knowledge-repository.js +24 -13
- package/dist/src/storage/sqlite/migrations/062_connector_learning_jobs.sql +27 -0
- package/dist/src/storage/sqlite/migrations/063_knowledge_collection_scopes.sql +14 -0
- package/dist/src/storage/sqlite/migrations/064_user_claims.sql +60 -0
- package/dist/src/storage/sqlite/migrations/065_knowledge_item_scope_identity.sql +116 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +3 -3
- package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/user-claims-repository.d.ts +101 -0
- package/dist/src/storage/sqlite/user-claims-repository.js +241 -0
- package/dist/src/user-context/projection.d.ts +36 -1
- package/dist/src/user-context/projection.js +84 -6
- package/dist/src/work-discovery/service.js +1 -0
- package/package.json +1 -1
- package/dist/gateway/static/root/assets/agents-ZCIC8mhO.js +0 -2
- package/dist/gateway/static/root/assets/apps-page-DJmgBaAm.js +0 -1
- package/dist/gateway/static/root/assets/automations-page-Ddot8-Md.js +0 -6
- package/dist/gateway/static/root/assets/block-editor-D3GIllO3.js +0 -184
- package/dist/gateway/static/root/assets/browser-settings-page-DvETvRcg.js +0 -8
- package/dist/gateway/static/root/assets/capabilities-settings-panel-ChXIYbys.js +0 -7
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-CUekXsJy.js +0 -1
- package/dist/gateway/static/root/assets/channels-settings-CkhveNsQ.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-DRTb8DBk.js +0 -1
- package/dist/gateway/static/root/assets/connector-logo-CQznQcd4.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-DkSGIxWP.js +0 -2
- package/dist/gateway/static/root/assets/desktop-pet-BtP-xUQ9.js +0 -1
- package/dist/gateway/static/root/assets/dreaming-settings-gd9W6SLj.js +0 -3
- package/dist/gateway/static/root/assets/goal-detail-page-DizZ6Cpl.js +0 -4
- package/dist/gateway/static/root/assets/goals-page-Dqry_hi2.js +0 -2
- package/dist/gateway/static/root/assets/index-DEdyUjxM.css +0 -1
- package/dist/gateway/static/root/assets/logs-page-mT48mcF4.js +0 -7
- package/dist/gateway/static/root/assets/notes-workbench-wgt2Osyk.js +0 -4
- package/dist/gateway/static/root/assets/project-detail-page-CDjHvxJm.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-kJZwQXfC.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-MJdI9ek_.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-BqC7GDC_.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-CYwz8MfF.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-h8tGDkA3.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-D2DGvRUn.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-vqhjSMhZ.js +0 -2
- package/dist/gateway/static/root/assets/time-picker-mtD64kFB.js +0 -1
- package/dist/gateway/static/root/assets/user-context-page-BgF0WxjM.js +0 -1
- package/dist/gateway/static/root/assets/work-discovery-page-CP0Daig-.js +0 -1
- package/dist/gateway/static/root/assets/work-item-detail-page-NEWZPKB_.js +0 -1
- package/dist/gateway/static/root/assets/work-page-BkWntcQh.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-DRvhNQGe.js +0 -11
- package/dist/src/connectors/memory-sync-coordinator.d.ts +0 -28
- package/dist/src/connectors/memory-sync-coordinator.js +0 -162
- package/dist/src/connectors/memory-sync-profile.d.ts +0 -13
- package/dist/src/connectors/memory-sync-profile.js +0 -73
|
@@ -4,7 +4,7 @@ import { finishKnowledgeSyncRun, getKnowledgeSourceCursor, listKnowledgeSourceIt
|
|
|
4
4
|
//#region src/knowledge/ingestion-service.ts
|
|
5
5
|
init_logger();
|
|
6
6
|
const log = createLogger("KnowledgeIngestion");
|
|
7
|
-
function deletionInputs(instanceId, snapshotExternalIds) {
|
|
7
|
+
function deletionInputs(instanceId, collectionScope, snapshotExternalIds) {
|
|
8
8
|
if (!snapshotExternalIds) return [];
|
|
9
9
|
const seen = new Set(snapshotExternalIds);
|
|
10
10
|
const deletedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
@@ -12,6 +12,7 @@ function deletionInputs(instanceId, snapshotExternalIds) {
|
|
|
12
12
|
for (let offset = 0;; offset += 500) {
|
|
13
13
|
const page = listKnowledgeSourceItems({
|
|
14
14
|
sourceInstanceId: instanceId,
|
|
15
|
+
collectionScope,
|
|
15
16
|
limit: 500,
|
|
16
17
|
offset
|
|
17
18
|
});
|
|
@@ -20,6 +21,7 @@ function deletionInputs(instanceId, snapshotExternalIds) {
|
|
|
20
21
|
missing.push({
|
|
21
22
|
id: item.id,
|
|
22
23
|
sourceInstanceId: item.sourceInstanceId,
|
|
24
|
+
collectionScope: item.collectionScope,
|
|
23
25
|
externalId: item.externalId,
|
|
24
26
|
itemType: item.itemType,
|
|
25
27
|
authorRole: item.authorRole,
|
|
@@ -40,11 +42,11 @@ function deletionInputs(instanceId, snapshotExternalIds) {
|
|
|
40
42
|
return missing;
|
|
41
43
|
}
|
|
42
44
|
var SqliteKnowledgeSourceStateStore = class {
|
|
43
|
-
getCursor(instanceId) {
|
|
44
|
-
return getKnowledgeSourceCursor(instanceId);
|
|
45
|
+
getCursor(instanceId, collectionScope) {
|
|
46
|
+
return getKnowledgeSourceCursor(instanceId, collectionScope);
|
|
45
47
|
}
|
|
46
|
-
setCursor(instanceId, cursor) {
|
|
47
|
-
setKnowledgeSourceCursor(instanceId, cursor);
|
|
48
|
+
setCursor(instanceId, collectionScope, cursor) {
|
|
49
|
+
setKnowledgeSourceCursor(instanceId, collectionScope, cursor);
|
|
48
50
|
}
|
|
49
51
|
};
|
|
50
52
|
var KnowledgeIngestionService = class {
|
|
@@ -53,14 +55,14 @@ var KnowledgeIngestionService = class {
|
|
|
53
55
|
this.state = state;
|
|
54
56
|
}
|
|
55
57
|
ingest(params) {
|
|
56
|
-
const cursorBefore = this.state.getCursor(params.instanceId);
|
|
58
|
+
const cursorBefore = this.state.getCursor(params.instanceId, params.collectionScope);
|
|
57
59
|
const run = startKnowledgeSyncRun({
|
|
58
60
|
sourceInstanceId: params.instanceId,
|
|
59
61
|
cursorBefore
|
|
60
62
|
});
|
|
61
63
|
try {
|
|
62
64
|
const stored = upsertKnowledgeSourceItems(params.items);
|
|
63
|
-
this.state.setCursor(params.instanceId, params.cursorAfter);
|
|
65
|
+
this.state.setCursor(params.instanceId, params.collectionScope, params.cursorAfter);
|
|
64
66
|
return finishKnowledgeSyncRun({
|
|
65
67
|
runId: run.id,
|
|
66
68
|
status: params.warnings?.length ? "partial" : "succeeded",
|
|
@@ -83,7 +85,7 @@ var KnowledgeIngestionService = class {
|
|
|
83
85
|
async sync(params) {
|
|
84
86
|
const adapter = this.adapters.get(params.adapterKind);
|
|
85
87
|
if (!adapter) throw new Error(`Knowledge source adapter not found: ${params.adapterKind}`);
|
|
86
|
-
const cursorBefore = this.state.getCursor(params.instanceId);
|
|
88
|
+
const cursorBefore = this.state.getCursor(params.instanceId, params.collectionScope);
|
|
87
89
|
const run = startKnowledgeSyncRun({
|
|
88
90
|
sourceInstanceId: params.instanceId,
|
|
89
91
|
cursorBefore
|
|
@@ -93,13 +95,14 @@ var KnowledgeIngestionService = class {
|
|
|
93
95
|
try {
|
|
94
96
|
const pulled = await adapter.pull({
|
|
95
97
|
instanceId: params.instanceId,
|
|
98
|
+
collectionScope: params.collectionScope,
|
|
96
99
|
cursor: cursorBefore,
|
|
97
100
|
windowStart: params.windowStart,
|
|
98
101
|
signal
|
|
99
102
|
});
|
|
100
|
-
const tombstones = deletionInputs(params.instanceId, pulled.snapshotExternalIds);
|
|
103
|
+
const tombstones = deletionInputs(params.instanceId, params.collectionScope, pulled.snapshotExternalIds);
|
|
101
104
|
const stored = upsertKnowledgeSourceItems([...pulled.items, ...tombstones]);
|
|
102
|
-
this.state.setCursor(params.instanceId, pulled.nextCursor);
|
|
105
|
+
this.state.setCursor(params.instanceId, params.collectionScope, pulled.nextCursor);
|
|
103
106
|
const completed = finishKnowledgeSyncRun({
|
|
104
107
|
runId: run.id,
|
|
105
108
|
status: pulled.warnings.length > 0 ? "partial" : "succeeded",
|
|
@@ -59,6 +59,7 @@ var LocalFolderKnowledgeSourceAdapter = class {
|
|
|
59
59
|
const externalId = relative(root, canonicalPath).split(sep).join("/");
|
|
60
60
|
items.push({
|
|
61
61
|
sourceInstanceId: input.instanceId,
|
|
62
|
+
collectionScope: "files",
|
|
62
63
|
externalId,
|
|
63
64
|
itemType: "local_file",
|
|
64
65
|
authorRole: "user",
|
|
@@ -1,125 +1,58 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { listUserPeopleGraphRows } from "../storage/sqlite/user-claims-repository.js";
|
|
2
|
+
import "../storage/sqlite/index.js";
|
|
3
3
|
//#region src/knowledge/people-graph.ts
|
|
4
|
-
function
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
if (!value || typeof value !== "object" || Array.isArray(value)) return [];
|
|
12
|
-
const record = value;
|
|
13
|
-
const signal = {
|
|
14
|
-
role: nonEmpty(record.role),
|
|
15
|
-
name: nonEmpty(record.name),
|
|
16
|
-
email: nonEmpty(record.email),
|
|
17
|
-
username: nonEmpty(record.username)
|
|
18
|
-
};
|
|
19
|
-
return signal.name || signal.email || signal.username ? [signal] : [];
|
|
20
|
-
});
|
|
21
|
-
if (signals.length > 0) return signals;
|
|
22
|
-
}
|
|
23
|
-
return Array.isArray(item.metadata.people) ? item.metadata.people.flatMap((value) => {
|
|
24
|
-
const text = nonEmpty(value);
|
|
25
|
-
if (!text) return [];
|
|
26
|
-
return text.includes("@") ? [{ email: text }] : [{ name: text }];
|
|
27
|
-
}) : [];
|
|
28
|
-
}
|
|
29
|
-
function identityFor(signal) {
|
|
30
|
-
if (signal.email) return `email:${signal.email.toLowerCase()}`;
|
|
31
|
-
if (signal.username) return `username:${signal.username.toLowerCase().replace(/^@/, "")}`;
|
|
32
|
-
if (signal.name) return `name:${signal.name.toLocaleLowerCase()}`;
|
|
33
|
-
}
|
|
34
|
-
function personId(identity) {
|
|
35
|
-
return `person_${createHash("sha256").update(identity).digest("hex").slice(0, 24)}`;
|
|
36
|
-
}
|
|
37
|
-
function latest(left, right) {
|
|
38
|
-
return Date.parse(left) >= Date.parse(right) ? left : right;
|
|
4
|
+
function sourceMetadata(sourceInstanceId) {
|
|
5
|
+
const parts = sourceInstanceId.split(":");
|
|
6
|
+
if (parts[0] !== "composio" || !parts[1]) return {};
|
|
7
|
+
return {
|
|
8
|
+
connectorId: parts[1],
|
|
9
|
+
toolkit: parts[1].replace(/^composio-/, "")
|
|
10
|
+
};
|
|
39
11
|
}
|
|
40
12
|
function buildConnectedPeopleGraph(options = {}) {
|
|
41
|
-
const
|
|
42
|
-
const
|
|
43
|
-
for (
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
});
|
|
48
|
-
items.push(...page);
|
|
49
|
-
if (page.length < 500) break;
|
|
50
|
-
}
|
|
51
|
-
const nodeByIdentity = /* @__PURE__ */ new Map();
|
|
52
|
-
const edgeByKey = /* @__PURE__ */ new Map();
|
|
53
|
-
for (const item of items) {
|
|
54
|
-
const observedAt = item.occurredAt ?? item.sourceUpdatedAt ?? item.updatedAt;
|
|
55
|
-
const observedIdentities = /* @__PURE__ */ new Set();
|
|
56
|
-
for (const signal of signalsFor(item)) {
|
|
57
|
-
const identity = identityFor(signal);
|
|
58
|
-
if (!identity) continue;
|
|
59
|
-
let aggregate = nodeByIdentity.get(identity);
|
|
60
|
-
if (!aggregate) {
|
|
61
|
-
aggregate = {
|
|
62
|
-
node: {
|
|
63
|
-
id: personId(identity),
|
|
64
|
-
label: signal.name ?? signal.email ?? signal.username ?? identity,
|
|
65
|
-
names: [],
|
|
66
|
-
emails: [],
|
|
67
|
-
usernames: [],
|
|
68
|
-
roles: [],
|
|
69
|
-
mentionCount: 0,
|
|
70
|
-
lastObservedAt: observedAt
|
|
71
|
-
},
|
|
72
|
-
names: /* @__PURE__ */ new Set(),
|
|
73
|
-
emails: /* @__PURE__ */ new Set(),
|
|
74
|
-
usernames: /* @__PURE__ */ new Set(),
|
|
75
|
-
roles: /* @__PURE__ */ new Set()
|
|
76
|
-
};
|
|
77
|
-
nodeByIdentity.set(identity, aggregate);
|
|
78
|
-
}
|
|
79
|
-
if (signal.name) aggregate.names.add(signal.name);
|
|
80
|
-
if (signal.email) aggregate.emails.add(signal.email.toLowerCase());
|
|
81
|
-
if (signal.username) aggregate.usernames.add(signal.username.replace(/^@/, ""));
|
|
82
|
-
if (signal.role) aggregate.roles.add(signal.role);
|
|
83
|
-
if (observedIdentities.has(identity)) continue;
|
|
84
|
-
observedIdentities.add(identity);
|
|
85
|
-
aggregate.node.mentionCount += 1;
|
|
86
|
-
aggregate.node.lastObservedAt = latest(aggregate.node.lastObservedAt, observedAt);
|
|
87
|
-
const edgeKey = `${aggregate.node.id}\u0000${item.sourceInstanceId}`;
|
|
88
|
-
const existingEdge = edgeByKey.get(edgeKey);
|
|
89
|
-
if (existingEdge) {
|
|
90
|
-
existingEdge.mentionCount += 1;
|
|
91
|
-
existingEdge.lastObservedAt = latest(existingEdge.lastObservedAt, observedAt);
|
|
92
|
-
} else edgeByKey.set(edgeKey, {
|
|
93
|
-
personId: aggregate.node.id,
|
|
94
|
-
sourceInstanceId: item.sourceInstanceId,
|
|
95
|
-
connectorId: nonEmpty(item.metadata.connectorId),
|
|
96
|
-
toolkit: nonEmpty(item.metadata.toolkit),
|
|
97
|
-
mentionCount: 1,
|
|
98
|
-
lastObservedAt: observedAt
|
|
99
|
-
});
|
|
100
|
-
}
|
|
13
|
+
const graph = listUserPeopleGraphRows();
|
|
14
|
+
const edgesByPerson = /* @__PURE__ */ new Map();
|
|
15
|
+
for (const edge of graph.edges) {
|
|
16
|
+
const values = edgesByPerson.get(edge.entityId) ?? [];
|
|
17
|
+
values.push(edge);
|
|
18
|
+
edgesByPerson.set(edge.entityId, values);
|
|
101
19
|
}
|
|
102
|
-
const query = options.query?.trim().
|
|
20
|
+
const query = options.query?.trim().toLowerCase() ?? "";
|
|
103
21
|
const limit = Math.max(1, Math.min(options.limit ?? 100, 500));
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
names: [...
|
|
107
|
-
emails
|
|
108
|
-
usernames
|
|
109
|
-
|
|
110
|
-
|
|
22
|
+
const matching = graph.people.map((entity) => {
|
|
23
|
+
const edges = edgesByPerson.get(entity.id) ?? [];
|
|
24
|
+
const names = [...entity.canonicalLabel.includes("@") ? [] : [entity.canonicalLabel], ...entity.handles.filter((handle) => handle.type === "display_name").map((handle) => handle.value)].filter((value, index, values) => values.findIndex((candidate) => candidate.toLowerCase() === value.toLowerCase()) === index).toSorted();
|
|
25
|
+
const emails = entity.handles.filter((handle) => handle.type === "email").map((handle) => handle.value).toSorted();
|
|
26
|
+
const usernames = entity.handles.filter((handle) => handle.type === "provider_user").map((handle) => handle.value).toSorted();
|
|
27
|
+
return {
|
|
28
|
+
id: entity.id,
|
|
29
|
+
label: entity.canonicalLabel,
|
|
30
|
+
names,
|
|
31
|
+
emails,
|
|
32
|
+
usernames,
|
|
33
|
+
roles: [],
|
|
34
|
+
mentionCount: edges.reduce((sum, edge) => sum + edge.mentionCount, 0),
|
|
35
|
+
lastObservedAt: edges.reduce((latest, edge) => !latest || edge.lastObservedAt > latest ? edge.lastObservedAt : latest, "") || entity.updatedAt
|
|
36
|
+
};
|
|
37
|
+
}).filter((person) => !query || [
|
|
111
38
|
person.label,
|
|
112
39
|
...person.names,
|
|
113
40
|
...person.emails,
|
|
114
41
|
...person.usernames
|
|
115
|
-
].some((value) => value.
|
|
116
|
-
const people =
|
|
42
|
+
].some((value) => value.toLowerCase().includes(query))).toSorted((left, right) => right.mentionCount - left.mentionCount || right.lastObservedAt.localeCompare(left.lastObservedAt));
|
|
43
|
+
const people = matching.slice(0, limit);
|
|
117
44
|
const included = new Set(people.map((person) => person.id));
|
|
118
45
|
return {
|
|
119
46
|
people,
|
|
120
|
-
sourceEdges:
|
|
121
|
-
|
|
122
|
-
|
|
47
|
+
sourceEdges: graph.edges.filter((edge) => included.has(edge.entityId)).map((edge) => ({
|
|
48
|
+
personId: edge.entityId,
|
|
49
|
+
sourceInstanceId: edge.sourceInstanceId,
|
|
50
|
+
...sourceMetadata(edge.sourceInstanceId),
|
|
51
|
+
mentionCount: edge.mentionCount,
|
|
52
|
+
lastObservedAt: edge.lastObservedAt
|
|
53
|
+
})),
|
|
54
|
+
scannedItems: graph.evidenceCount,
|
|
55
|
+
truncated: matching.length > limit
|
|
123
56
|
};
|
|
124
57
|
}
|
|
125
58
|
//#endregion
|
|
@@ -8,6 +8,7 @@ export type KnowledgeChangeKind = 'added' | 'modified' | 'deleted';
|
|
|
8
8
|
export interface KnowledgeSourceItem {
|
|
9
9
|
id: string;
|
|
10
10
|
sourceInstanceId: string;
|
|
11
|
+
collectionScope: string;
|
|
11
12
|
externalId: string;
|
|
12
13
|
itemType: string;
|
|
13
14
|
authorRole?: KnowledgeAuthorRole;
|
|
@@ -42,6 +43,7 @@ export interface KnowledgeSourceChange {
|
|
|
42
43
|
export interface KnowledgeSourceItemInput {
|
|
43
44
|
id?: string;
|
|
44
45
|
sourceInstanceId: string;
|
|
46
|
+
collectionScope: string;
|
|
45
47
|
externalId: string;
|
|
46
48
|
itemType: string;
|
|
47
49
|
authorRole?: KnowledgeAuthorRole;
|
|
@@ -73,6 +75,7 @@ export interface KnowledgeSyncRun {
|
|
|
73
75
|
}
|
|
74
76
|
export interface KnowledgePullInput {
|
|
75
77
|
instanceId: string;
|
|
78
|
+
collectionScope: string;
|
|
76
79
|
cursor?: string;
|
|
77
80
|
windowStart?: string;
|
|
78
81
|
signal: AbortSignal;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { type CredentialResolver } from '../auth/credentials.js';
|
|
3
|
+
declare const accountSummarySchema: z.ZodObject<{
|
|
4
|
+
balance: z.ZodObject<{
|
|
5
|
+
credits: z.ZodNumber;
|
|
6
|
+
updatedAt: z.ZodString;
|
|
7
|
+
}, z.core.$strip>;
|
|
8
|
+
usage: z.ZodObject<{
|
|
9
|
+
days: z.ZodUnion<readonly [z.ZodLiteral<1>, z.ZodLiteral<7>, z.ZodLiteral<30>]>;
|
|
10
|
+
requests: z.ZodNumber;
|
|
11
|
+
inputTokens: z.ZodNumber;
|
|
12
|
+
outputTokens: z.ZodNumber;
|
|
13
|
+
totalTokens: z.ZodNumber;
|
|
14
|
+
errors: z.ZodNumber;
|
|
15
|
+
averageLatencyMs: z.ZodNumber;
|
|
16
|
+
chargedCredits: z.ZodNumber;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
links: z.ZodObject<{
|
|
19
|
+
details: z.ZodString;
|
|
20
|
+
purchase: z.ZodString;
|
|
21
|
+
}, z.core.$strip>;
|
|
22
|
+
}, z.core.$strip>;
|
|
23
|
+
export type XopcCloudAccountSummary = z.infer<typeof accountSummarySchema>;
|
|
24
|
+
export declare class XopcCloudAccountError extends Error {
|
|
25
|
+
readonly status: number;
|
|
26
|
+
readonly code?: string;
|
|
27
|
+
constructor(message: string, status: number, code?: string);
|
|
28
|
+
}
|
|
29
|
+
export declare class XopcCloudAccountService {
|
|
30
|
+
private readonly fetchImpl;
|
|
31
|
+
private readonly routerUrl;
|
|
32
|
+
private readonly credentials;
|
|
33
|
+
constructor(options?: {
|
|
34
|
+
fetchImpl?: typeof fetch;
|
|
35
|
+
routerUrl?: string;
|
|
36
|
+
credentials?: Pick<CredentialResolver, 'resolveApiKey'>;
|
|
37
|
+
});
|
|
38
|
+
getSummary(days?: 1 | 7 | 30): Promise<XopcCloudAccountSummary | null>;
|
|
39
|
+
}
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { getCredentialResolver, init_credentials } from "../auth/credentials.js";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
//#region src/providers/xopc-cloud-account-service.ts
|
|
4
|
+
init_credentials();
|
|
5
|
+
const DEFAULT_ROUTER_URL = "https://router.xopc.ai/v1";
|
|
6
|
+
const accountSummarySchema = z.object({
|
|
7
|
+
balance: z.object({
|
|
8
|
+
credits: z.number().int().nonnegative(),
|
|
9
|
+
updatedAt: z.string().datetime()
|
|
10
|
+
}),
|
|
11
|
+
usage: z.object({
|
|
12
|
+
days: z.union([
|
|
13
|
+
z.literal(1),
|
|
14
|
+
z.literal(7),
|
|
15
|
+
z.literal(30)
|
|
16
|
+
]),
|
|
17
|
+
requests: z.number().int().nonnegative(),
|
|
18
|
+
inputTokens: z.number().int().nonnegative(),
|
|
19
|
+
outputTokens: z.number().int().nonnegative(),
|
|
20
|
+
totalTokens: z.number().int().nonnegative(),
|
|
21
|
+
errors: z.number().int().nonnegative(),
|
|
22
|
+
averageLatencyMs: z.number().nonnegative(),
|
|
23
|
+
chargedCredits: z.number().int().nonnegative()
|
|
24
|
+
}),
|
|
25
|
+
links: z.object({
|
|
26
|
+
details: z.string().url(),
|
|
27
|
+
purchase: z.string().url()
|
|
28
|
+
})
|
|
29
|
+
});
|
|
30
|
+
var XopcCloudAccountError = class extends Error {
|
|
31
|
+
constructor(message, status, code) {
|
|
32
|
+
super(message);
|
|
33
|
+
this.status = status;
|
|
34
|
+
this.code = code;
|
|
35
|
+
this.name = "XopcCloudAccountError";
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
var XopcCloudAccountService = class {
|
|
39
|
+
fetchImpl;
|
|
40
|
+
routerUrl;
|
|
41
|
+
credentials;
|
|
42
|
+
constructor(options = {}) {
|
|
43
|
+
this.fetchImpl = options.fetchImpl ?? fetch;
|
|
44
|
+
this.routerUrl = (options.routerUrl ?? process.env.XOPC_MODEL_ROUTER_URL ?? DEFAULT_ROUTER_URL).replace(/\/+$/, "");
|
|
45
|
+
this.credentials = options.credentials ?? getCredentialResolver();
|
|
46
|
+
}
|
|
47
|
+
async getSummary(days = 7) {
|
|
48
|
+
const accessToken = await this.credentials.resolveApiKey("xopc-cloud");
|
|
49
|
+
if (!accessToken) return null;
|
|
50
|
+
const response = await this.fetchImpl(`${this.routerUrl}/account/summary?days=${days}`, {
|
|
51
|
+
headers: {
|
|
52
|
+
authorization: `Bearer ${accessToken}`,
|
|
53
|
+
accept: "application/json"
|
|
54
|
+
},
|
|
55
|
+
signal: AbortSignal.timeout(3e4)
|
|
56
|
+
});
|
|
57
|
+
const body = await response.json().catch(() => null);
|
|
58
|
+
if (!response.ok) throw new XopcCloudAccountError(typeof body?.error?.message === "string" ? body.error.message : `XOPC account summary failed (${response.status})`, response.status, typeof body?.error?.code === "string" ? body.error.code : void 0);
|
|
59
|
+
const parsed = accountSummarySchema.safeParse(body);
|
|
60
|
+
if (!parsed.success) throw new XopcCloudAccountError("XOPC account summary returned an invalid response", response.status, "invalid_response");
|
|
61
|
+
return parsed.data;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
//#endregion
|
|
65
|
+
export { XopcCloudAccountError, XopcCloudAccountService };
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export type ConnectorLearningMode = 'bootstrap' | 'incremental';
|
|
2
|
+
export type ConnectorLearningStatus = 'queued' | 'running' | 'completed' | 'failed' | 'paused';
|
|
3
|
+
export type ConnectorLearningPhase = 'queued' | 'fetching' | 'indexing' | 'deriving' | 'completed';
|
|
4
|
+
export type ConnectorLearningJob = {
|
|
5
|
+
id: string;
|
|
6
|
+
idempotencyKey: string;
|
|
7
|
+
connectorId: string;
|
|
8
|
+
connectionId: string;
|
|
9
|
+
sourceInstanceId: string;
|
|
10
|
+
agentId: string;
|
|
11
|
+
mode: ConnectorLearningMode;
|
|
12
|
+
status: ConnectorLearningStatus;
|
|
13
|
+
phase: ConnectorLearningPhase;
|
|
14
|
+
itemsDiscovered: number;
|
|
15
|
+
itemsIndexed: number;
|
|
16
|
+
candidatesCreated: number;
|
|
17
|
+
attemptCount: number;
|
|
18
|
+
error?: string;
|
|
19
|
+
nextRunAt?: string;
|
|
20
|
+
startedAt?: string;
|
|
21
|
+
finishedAt?: string;
|
|
22
|
+
createdAt: string;
|
|
23
|
+
updatedAt: string;
|
|
24
|
+
};
|
|
25
|
+
export declare function enqueueConnectorLearningJob(input: {
|
|
26
|
+
connectorId: string;
|
|
27
|
+
connectionId: string;
|
|
28
|
+
sourceInstanceId: string;
|
|
29
|
+
agentId: string;
|
|
30
|
+
mode: ConnectorLearningMode;
|
|
31
|
+
idempotencyKey: string;
|
|
32
|
+
nextRunAt?: number;
|
|
33
|
+
nowMs?: number;
|
|
34
|
+
}): ConnectorLearningJob;
|
|
35
|
+
export declare function claimNextConnectorLearningJob(nowMs?: number): ConnectorLearningJob | null;
|
|
36
|
+
export declare function recoverStaleConnectorLearningJobs(staleBeforeMs: number, nowMs?: number): number;
|
|
37
|
+
export declare function setConnectorLearningPaused(connectionId: string, paused: boolean, nowMs?: number): number;
|
|
38
|
+
export declare function updateConnectorLearningJob(id: string, patch: Partial<Pick<ConnectorLearningJob, 'status' | 'phase' | 'itemsDiscovered' | 'itemsIndexed' | 'candidatesCreated' | 'error'>> & {
|
|
39
|
+
nextRunAt?: number | null;
|
|
40
|
+
finished?: boolean;
|
|
41
|
+
nowMs?: number;
|
|
42
|
+
}): ConnectorLearningJob;
|
|
43
|
+
export declare function listConnectorLearningJobs(options?: {
|
|
44
|
+
sourceInstanceId?: string;
|
|
45
|
+
connectionId?: string;
|
|
46
|
+
limit?: number;
|
|
47
|
+
}): ConnectorLearningJob[];
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { getSqliteDatabase, runSqliteWriteTransaction } from "./transaction.js";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
//#region src/storage/sqlite/connector-learning-repository.ts
|
|
4
|
+
function iso(value) {
|
|
5
|
+
return value == null ? void 0 : new Date(value).toISOString();
|
|
6
|
+
}
|
|
7
|
+
function fromRow(row) {
|
|
8
|
+
return {
|
|
9
|
+
id: row.job_id,
|
|
10
|
+
idempotencyKey: row.idempotency_key,
|
|
11
|
+
connectorId: row.connector_id,
|
|
12
|
+
connectionId: row.connection_id,
|
|
13
|
+
sourceInstanceId: row.source_instance_id,
|
|
14
|
+
agentId: row.agent_id,
|
|
15
|
+
mode: row.mode,
|
|
16
|
+
status: row.status,
|
|
17
|
+
phase: row.phase,
|
|
18
|
+
itemsDiscovered: row.items_discovered,
|
|
19
|
+
itemsIndexed: row.items_indexed,
|
|
20
|
+
candidatesCreated: row.candidates_created,
|
|
21
|
+
attemptCount: row.attempt_count,
|
|
22
|
+
...row.error ? { error: row.error } : {},
|
|
23
|
+
...iso(row.next_run_at) ? { nextRunAt: iso(row.next_run_at) } : {},
|
|
24
|
+
...iso(row.started_at) ? { startedAt: iso(row.started_at) } : {},
|
|
25
|
+
...iso(row.finished_at) ? { finishedAt: iso(row.finished_at) } : {},
|
|
26
|
+
createdAt: new Date(row.created_at).toISOString(),
|
|
27
|
+
updatedAt: new Date(row.updated_at).toISOString()
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function enqueueConnectorLearningJob(input) {
|
|
31
|
+
const now = input.nowMs ?? Date.now();
|
|
32
|
+
runSqliteWriteTransaction((db) => {
|
|
33
|
+
db.prepare(`INSERT INTO connector_learning_jobs (
|
|
34
|
+
job_id, idempotency_key, connector_id, connection_id, source_instance_id,
|
|
35
|
+
agent_id, mode, status, phase, next_run_at, created_at, updated_at
|
|
36
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, 'queued', 'queued', ?, ?, ?)
|
|
37
|
+
ON CONFLICT(idempotency_key) DO NOTHING`).run(randomUUID(), input.idempotencyKey, input.connectorId, input.connectionId, input.sourceInstanceId, input.agentId, input.mode, input.nextRunAt ?? now, now, now);
|
|
38
|
+
});
|
|
39
|
+
return fromRow(getSqliteDatabase().prepare("SELECT * FROM connector_learning_jobs WHERE idempotency_key = ?").get(input.idempotencyKey));
|
|
40
|
+
}
|
|
41
|
+
function claimNextConnectorLearningJob(nowMs = Date.now()) {
|
|
42
|
+
return runSqliteWriteTransaction((db) => {
|
|
43
|
+
const row = db.prepare(`SELECT * FROM connector_learning_jobs
|
|
44
|
+
WHERE status IN ('queued', 'failed') AND attempt_count < 5 AND COALESCE(next_run_at, 0) <= ?
|
|
45
|
+
ORDER BY next_run_at ASC, created_at ASC LIMIT 1`).get(nowMs);
|
|
46
|
+
if (!row) return null;
|
|
47
|
+
if (db.prepare(`UPDATE connector_learning_jobs SET
|
|
48
|
+
status = 'running', phase = 'fetching', attempt_count = attempt_count + 1,
|
|
49
|
+
error = NULL, started_at = COALESCE(started_at, ?), updated_at = ?
|
|
50
|
+
WHERE job_id = ? AND status IN ('queued', 'failed')`).run(nowMs, nowMs, row.job_id).changes !== 1) return null;
|
|
51
|
+
return fromRow(db.prepare("SELECT * FROM connector_learning_jobs WHERE job_id = ?").get(row.job_id));
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
function recoverStaleConnectorLearningJobs(staleBeforeMs, nowMs = Date.now()) {
|
|
55
|
+
return runSqliteWriteTransaction((db) => Number(db.prepare(`UPDATE connector_learning_jobs SET
|
|
56
|
+
status = CASE WHEN attempt_count >= 5 THEN 'paused' ELSE 'failed' END,
|
|
57
|
+
error = 'Interrupted while learning; queued for recovery.',
|
|
58
|
+
next_run_at = CASE WHEN attempt_count >= 5 THEN NULL ELSE ? END,
|
|
59
|
+
finished_at = ?, updated_at = ?
|
|
60
|
+
WHERE status = 'running' AND updated_at < ?`).run(nowMs, nowMs, nowMs, staleBeforeMs).changes));
|
|
61
|
+
}
|
|
62
|
+
function setConnectorLearningPaused(connectionId, paused, nowMs = Date.now()) {
|
|
63
|
+
return runSqliteWriteTransaction((db) => Number(db.prepare(paused ? `UPDATE connector_learning_jobs SET status = 'paused', next_run_at = NULL, updated_at = ?
|
|
64
|
+
WHERE connection_id = ? AND status IN ('queued', 'failed', 'running')` : `UPDATE connector_learning_jobs SET status = 'queued', next_run_at = ?, updated_at = ?
|
|
65
|
+
WHERE connection_id = ? AND status = 'paused'`).run(...paused ? [nowMs, connectionId] : [
|
|
66
|
+
nowMs,
|
|
67
|
+
nowMs,
|
|
68
|
+
connectionId
|
|
69
|
+
]).changes));
|
|
70
|
+
}
|
|
71
|
+
function updateConnectorLearningJob(id, patch) {
|
|
72
|
+
const now = patch.nowMs ?? Date.now();
|
|
73
|
+
const fields = ["updated_at = ?"];
|
|
74
|
+
const values = [now];
|
|
75
|
+
const add = (column, value) => {
|
|
76
|
+
if (value === void 0) return;
|
|
77
|
+
fields.push(`${column} = ?`);
|
|
78
|
+
values.push(value);
|
|
79
|
+
};
|
|
80
|
+
add("status", patch.status);
|
|
81
|
+
add("phase", patch.phase);
|
|
82
|
+
add("items_discovered", patch.itemsDiscovered);
|
|
83
|
+
add("items_indexed", patch.itemsIndexed);
|
|
84
|
+
add("candidates_created", patch.candidatesCreated);
|
|
85
|
+
add("error", patch.error);
|
|
86
|
+
add("next_run_at", patch.nextRunAt);
|
|
87
|
+
if (patch.finished) add("finished_at", now);
|
|
88
|
+
values.push(id);
|
|
89
|
+
getSqliteDatabase().prepare(`UPDATE connector_learning_jobs SET ${fields.join(", ")} WHERE job_id = ?`).run(...values);
|
|
90
|
+
const row = getSqliteDatabase().prepare("SELECT * FROM connector_learning_jobs WHERE job_id = ?").get(id);
|
|
91
|
+
if (!row) throw new Error(`Connector learning job not found: ${id}`);
|
|
92
|
+
return fromRow(row);
|
|
93
|
+
}
|
|
94
|
+
function listConnectorLearningJobs(options = {}) {
|
|
95
|
+
const clauses = [];
|
|
96
|
+
const values = [];
|
|
97
|
+
if (options.sourceInstanceId) {
|
|
98
|
+
clauses.push("source_instance_id = ?");
|
|
99
|
+
values.push(options.sourceInstanceId);
|
|
100
|
+
}
|
|
101
|
+
if (options.connectionId) {
|
|
102
|
+
clauses.push("connection_id = ?");
|
|
103
|
+
values.push(options.connectionId);
|
|
104
|
+
}
|
|
105
|
+
const limit = Math.max(1, Math.min(options.limit ?? 100, 500));
|
|
106
|
+
return getSqliteDatabase().prepare(`SELECT * FROM connector_learning_jobs ${clauses.length ? `WHERE ${clauses.join(" AND ")}` : ""}
|
|
107
|
+
ORDER BY created_at DESC LIMIT ?`).all(...values, limit).map(fromRow);
|
|
108
|
+
}
|
|
109
|
+
//#endregion
|
|
110
|
+
export { claimNextConnectorLearningJob, enqueueConnectorLearningJob, listConnectorLearningJobs, recoverStaleConnectorLearningJobs, setConnectorLearningPaused, updateConnectorLearningJob };
|
|
@@ -5,6 +5,8 @@ export { DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError, } from './m
|
|
|
5
5
|
export { discoverSqlMigrations, listRegisteredMigrationTargets } from './migrations/discover.js';
|
|
6
6
|
export { closeXopcDatabase, getXopcDatabase, isXopcDatabaseOpen, openXopcDatabase, requireXopcDatabase, resetXopcDatabaseSingletonForTest, type OpenXopcDatabaseOptions, type XopcDatabase, } from './connection.js';
|
|
7
7
|
export { getSqliteDatabase, runSqliteWriteTransaction } from './transaction.js';
|
|
8
|
+
export { getUserClaim, linkUserClaimMemoryRecord, listUserClaimEvidence, listUserClaimStatsBySource, listUserClaims, listUserPeopleGraphRows, removeUserClaimEvidenceForSource, reinforceUserClaim, resolveUserEntity, setUserClaimDecision, type UserClaim, type UserClaimClass, type UserClaimState, type UserEntity, } from './user-claims-repository.js';
|
|
9
|
+
export { claimNextConnectorLearningJob, enqueueConnectorLearningJob, listConnectorLearningJobs, recoverStaleConnectorLearningJobs, setConnectorLearningPaused, updateConnectorLearningJob, type ConnectorLearningJob, type ConnectorLearningMode, type ConnectorLearningPhase, type ConnectorLearningStatus, } from './connector-learning-repository.js';
|
|
8
10
|
export { appendComposerInputHistory, clearComposerInputHistory, listComposerInputHistory, COMPOSER_INPUT_HISTORY_LIMIT, type ComposerInputHistoryItem, } from './composer-input-history-repository.js';
|
|
9
11
|
export { getInteractionState, setInteractionState, updateInteractionStateFromMessage, type InteractionState, } from './interaction-state-repository.js';
|
|
10
12
|
export { buildRelationshipPrompt, getRelationshipSettings, isProactiveSupportAllowed, updateRelationshipSettings, type RelationshipSettings, type SupportMode, } from './relationship-settings-repository.js';
|
|
@@ -17,7 +19,7 @@ export { deleteNoteRecord, getNoteRecord, listNoteRecords, upsertNoteRecord, } f
|
|
|
17
19
|
export { deleteNoteAgentContextRecord, getNoteAgentContextRecord, upsertNoteAgentContextRecord, type NoteAgentContextRecord, } from './note-agent-context-repository.js';
|
|
18
20
|
export { searchMemoryIndex, syncMemoryIndex, type MemorySearchHit, } from './memory-index-repository.js';
|
|
19
21
|
export { appendMemorySignal, appendMemoryTraceEvent, deleteMemoryRecord, findLatestMemoryInjectTrace, getMemoryProviderState, getMemoryRecord, hasUnresolvedMemoryConflict, listMemorySignals, listMemoryTraceEvents, listMemoryRecords, markMemoryRecordsConflicted, searchMemoryRecords, setMemoryProviderState, setMemoryTraceFeedback, setLatestMemoryInjectFeedback, summarizeMemoryRecallFeedback, summarizeUserUnderstandingQuality, USER_UNDERSTANDING_REMEDIATION_POLICY, upsertMemoryRecord, type AppendMemorySignalInput, type AppendMemoryTraceEventInput, type FindLatestMemoryInjectTraceInput, type ListMemoryRecordsOptions, type MemoryRecallFeedbackSummary, type MemoryFeedbackRemediationResult, type MemorySignalRowPayload, type MemoryTraceFeedback, type MemoryTraceEventPayload, type UserUnderstandingQualityMetrics, type SearchMemoryRecordsOptions, type SetMemoryTraceFeedbackInput, type SetLatestMemoryInjectFeedbackInput, type UpsertMemoryRecordInput, } from './memory-records-repository.js';
|
|
20
|
-
export { attachMemoryEvidence, claimKnowledgeSourceItems, completeKnowledgeSourceItemSynthesis, deleteMemoryEvidenceForRecord, finishKnowledgeSyncRun, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, listKnowledgeSourceItems, listKnowledgeSourceChanges, listKnowledgeSyncRuns, listMemoryEvidence, setKnowledgeSourceItemSynthesisStatus, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, startKnowledgeSyncRun, upsertKnowledgeSourceItems, } from './knowledge-repository.js';
|
|
22
|
+
export { attachMemoryEvidence, claimKnowledgeSourceItems, completeKnowledgeSourceItemSynthesis, deleteMemoryEvidenceForRecord, finishKnowledgeSyncRun, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, listKnowledgeSourceItems, listKnowledgeSourceChanges, listKnowledgeSyncRuns, listMemoryEvidence, pruneBoundedKnowledgeSourceItems, setKnowledgeSourceItemSynthesisStatus, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, startKnowledgeSyncRun, upsertKnowledgeSourceItems, } from './knowledge-repository.js';
|
|
21
23
|
export { deleteSessionConfig, getSessionConfig, hasSessionConfig, setSessionConfig, updateSessionConfig, } from './config-repository.js';
|
|
22
24
|
export { createObjectLinkRecord, getActivityEventRecord, listActivityRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, recordActivityEvent, } from './activity-repository.js';
|
|
23
25
|
export { appendConnectorExecutionAudit, claimConnectorWebhookDelivery, completeConnectorWebhookDelivery, consumeConnectorApproval, createConnectorApproval, decideConnectorApproval, deleteConnectorConnection, deleteConnectorInstallation, getConnectorConnection, getConnectorApproval, getConnectorInstallation, getCachedConnectorCatalogEntry, listCachedConnectorCatalogEntries, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, releaseConnectorWebhookDelivery, replaceConnectorCatalogEntries, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation, type CachedConnectorCatalogEntry, } from './connector-repository.js';
|
|
@@ -6,6 +6,8 @@ import { XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_SCHEMA_VERSION, applyPendingMi
|
|
|
6
6
|
import { ensureXopcDatabaseSchema } from "./schema.js";
|
|
7
7
|
import { closeXopcDatabase, getXopcDatabase, isXopcDatabaseOpen, openXopcDatabase, requireXopcDatabase, resetXopcDatabaseSingletonForTest } from "./connection.js";
|
|
8
8
|
import { getSqliteDatabase, runSqliteWriteTransaction } from "./transaction.js";
|
|
9
|
+
import { getUserClaim, linkUserClaimMemoryRecord, listUserClaimEvidence, listUserClaimStatsBySource, listUserClaims, listUserPeopleGraphRows, reinforceUserClaim, removeUserClaimEvidenceForSource, resolveUserEntity, setUserClaimDecision } from "./user-claims-repository.js";
|
|
10
|
+
import { claimNextConnectorLearningJob, enqueueConnectorLearningJob, listConnectorLearningJobs, recoverStaleConnectorLearningJobs, setConnectorLearningPaused, updateConnectorLearningJob } from "./connector-learning-repository.js";
|
|
9
11
|
import { COMPOSER_INPUT_HISTORY_LIMIT, appendComposerInputHistory, clearComposerInputHistory, listComposerInputHistory } from "./composer-input-history-repository.js";
|
|
10
12
|
import { getInteractionState, setInteractionState, updateInteractionStateFromMessage } from "./interaction-state-repository.js";
|
|
11
13
|
import { buildRelationshipPrompt, getRelationshipSettings, isProactiveSupportAllowed, updateRelationshipSettings } from "./relationship-settings-repository.js";
|
|
@@ -18,11 +20,11 @@ import { deleteNoteRecord, getNoteRecord, listNoteRecords, upsertNoteRecord } fr
|
|
|
18
20
|
import { deleteNoteAgentContextRecord, getNoteAgentContextRecord, upsertNoteAgentContextRecord } from "./note-agent-context-repository.js";
|
|
19
21
|
import { searchMemoryIndex, syncMemoryIndex } from "./memory-index-repository.js";
|
|
20
22
|
import { USER_UNDERSTANDING_REMEDIATION_POLICY, appendMemorySignal, appendMemoryTraceEvent, deleteMemoryRecord, findLatestMemoryInjectTrace, getMemoryProviderState, getMemoryRecord, hasUnresolvedMemoryConflict, listMemoryRecords, listMemorySignals, listMemoryTraceEvents, markMemoryRecordsConflicted, searchMemoryRecords, setLatestMemoryInjectFeedback, setMemoryProviderState, setMemoryTraceFeedback, summarizeMemoryRecallFeedback, summarizeUserUnderstandingQuality, upsertMemoryRecord } from "./memory-records-repository.js";
|
|
21
|
-
import { attachMemoryEvidence, claimKnowledgeSourceItems, completeKnowledgeSourceItemSynthesis, deleteMemoryEvidenceForRecord, finishKnowledgeSyncRun, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, listKnowledgeSourceChanges, listKnowledgeSourceItems, listKnowledgeSyncRuns, listMemoryEvidence, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, startKnowledgeSyncRun, upsertKnowledgeSourceItems } from "./knowledge-repository.js";
|
|
23
|
+
import { attachMemoryEvidence, claimKnowledgeSourceItems, completeKnowledgeSourceItemSynthesis, deleteMemoryEvidenceForRecord, finishKnowledgeSyncRun, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, listKnowledgeSourceChanges, listKnowledgeSourceItems, listKnowledgeSyncRuns, listMemoryEvidence, pruneBoundedKnowledgeSourceItems, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, startKnowledgeSyncRun, upsertKnowledgeSourceItems } from "./knowledge-repository.js";
|
|
22
24
|
import { deleteSessionConfig, getSessionConfig, hasSessionConfig, setSessionConfig, updateSessionConfig } from "./config-repository.js";
|
|
23
25
|
import { createObjectLinkRecord, getActivityEventRecord, listActivityRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, recordActivityEvent } from "./activity-repository.js";
|
|
24
26
|
import { appendConnectorExecutionAudit, claimConnectorWebhookDelivery, completeConnectorWebhookDelivery, consumeConnectorApproval, createConnectorApproval, decideConnectorApproval, deleteConnectorConnection, deleteConnectorInstallation, getCachedConnectorCatalogEntry, getConnectorApproval, getConnectorConnection, getConnectorInstallation, listCachedConnectorCatalogEntries, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, releaseConnectorWebhookDelivery, replaceConnectorCatalogEntries, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation } from "./connector-repository.js";
|
|
25
27
|
import { getUserTrustPolicy, setUserTrustPolicy } from "./user-trust-repository.js";
|
|
26
28
|
import { consumeMemoryReferenceConsent, decideMemoryReferenceConsent, ensureMemoryReferenceConsentRequest, hasMemoryReferenceConsent, listMemoryReferenceConsents, revokeMemoryReferenceConsent } from "./memory-reference-consent-repository.js";
|
|
27
29
|
import { getUserProfilePromptState, setUserProfilePromptState } from "./user-profile-setup-repository.js";
|
|
28
|
-
export { COMPOSER_INPUT_HISTORY_LIMIT, DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError, SCHEMA_META_SCHEMA_VERSION_KEY, USER_UNDERSTANDING_REMEDIATION_POLICY, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_FILENAME, XOPC_DB_SCHEMA_VERSION, appendCompactionBoundary, appendComposerInputHistory, appendConnectorExecutionAudit, appendMemorySignal, appendMemoryTraceEvent, appendTranscriptEntry, applyPendingMigrations, attachMemoryEvidence, buildDefaultSessionMetadata, buildGlobalSessionStats, buildRelationshipPrompt, claimConnectorWebhookDelivery, claimKnowledgeSourceItems, classifyStoredRow, clearComposerInputHistory, closeXopcDatabase, completeConnectorWebhookDelivery, completeKnowledgeSourceItemSynthesis, completeTaskOutcome, consumeConnectorApproval, consumeMemoryReferenceConsent, createConnectorApproval, createObjectLinkRecord, decideConnectorApproval, decideMemoryReferenceConsent, deleteConnectorConnection, deleteConnectorInstallation, deleteMemoryEvidenceForRecord, deleteMemoryRecord, deleteNoteAgentContextRecord, deleteNoteRecord, deleteSessionConfig, deleteSessionRecord, discoverSqlMigrations, ensureMemoryReferenceConsentRequest, ensureSessionRecord, ensureXopcDatabaseSchema, estimateTokensFromMessages, extractFtsContent, findLatestMemoryInjectTrace, findSessionKeyBySessionId, findTaskOutcomeForAssistant, finishKnowledgeSyncRun, getActivityEventRecord, getCachedConnectorCatalogEntry, getConnectorApproval, getConnectorConnection, getConnectorInstallation, getCurrentSessionId, getGlobalSessionStats, getInteractionState, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, getMemoryProviderState, getMemoryRecord, getNoteAgentContextRecord, getNoteRecord, getRelationshipSettings, getSessionConfig, getSessionMetadata, getSessionPersistedLevels, getSqliteDatabase, getTaskOutcome, getUserProfilePromptState, getUserTrustPolicy, getXopcDatabase, hasMemoryReferenceConsent, hasSessionConfig, hasUnresolvedMemoryConflict, incrementSessionStatsOnAppend, inspectSchemaMigrationStatus, isProactiveSupportAllowed, isXopcDatabaseOpen, listActivityRecords, listCachedConnectorCatalogEntries, listCompactionBoundaries, listComposerInputHistory, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, listKnowledgeSourceChanges, listKnowledgeSourceItems, listKnowledgeSyncRuns, listMemoryEvidence, listMemoryRecords, listMemoryReferenceConsents, listMemorySignals, listMemoryTraceEvents, listNoteRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, listRegisteredMigrationTargets, listSessionMetadata, listSessionsByAgent, listTaskOutcomes, loadLlmMessagesForSession, loadTranscriptHistoryRowsForSession, loadTranscriptRows, loadTranscriptRowsForSession, markMemoryRecordsConflicted, metadataToSessionInsert, openXopcDatabase, paginateTranscriptMessages, patchSessionMetadata, readSchemaVersion, readSchemaVersionForTest, recordActivityEvent, releaseConnectorWebhookDelivery, replaceConnectorCatalogEntries, replaceTranscriptRows, requireXopcDatabase, resetSessionRecord, resetXopcDatabaseSingletonForTest, resolveMigrationsDir, resolveSessionAgentId, resolveXopcDatabasePath, restoreBeforeCompactionBoundary, revokeMemoryReferenceConsent, runSqliteWriteTransaction, searchMemoryIndex, searchMemoryRecords, sessionConfigRowToConfig, sessionRowToMetadata, setInteractionState, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, setLatestMemoryInjectFeedback, setMemoryProviderState, setMemoryTraceFeedback, setSessionConfig, setTaskOutcomeFeedback, setUserProfilePromptState, setUserTrustPolicy, startKnowledgeSyncRun, startTaskOutcome, summarizeMemoryRecallFeedback, summarizeTaskOutcomes, summarizeUserUnderstandingQuality, syncMemoryIndex, transcriptEntryRowToStoredRow, updateInteractionStateFromMessage, updateRelationshipSettings, updateSessionConfig, updateSessionStats, updateTaskOutcome, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation, upsertKnowledgeSourceItems, upsertMemoryRecord, upsertNoteAgentContextRecord, upsertNoteRecord };
|
|
30
|
+
export { COMPOSER_INPUT_HISTORY_LIMIT, DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError, SCHEMA_META_SCHEMA_VERSION_KEY, USER_UNDERSTANDING_REMEDIATION_POLICY, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_FILENAME, XOPC_DB_SCHEMA_VERSION, appendCompactionBoundary, appendComposerInputHistory, appendConnectorExecutionAudit, appendMemorySignal, appendMemoryTraceEvent, appendTranscriptEntry, applyPendingMigrations, attachMemoryEvidence, buildDefaultSessionMetadata, buildGlobalSessionStats, buildRelationshipPrompt, claimConnectorWebhookDelivery, claimKnowledgeSourceItems, claimNextConnectorLearningJob, classifyStoredRow, clearComposerInputHistory, closeXopcDatabase, completeConnectorWebhookDelivery, completeKnowledgeSourceItemSynthesis, completeTaskOutcome, consumeConnectorApproval, consumeMemoryReferenceConsent, createConnectorApproval, createObjectLinkRecord, decideConnectorApproval, decideMemoryReferenceConsent, deleteConnectorConnection, deleteConnectorInstallation, deleteMemoryEvidenceForRecord, deleteMemoryRecord, deleteNoteAgentContextRecord, deleteNoteRecord, deleteSessionConfig, deleteSessionRecord, discoverSqlMigrations, enqueueConnectorLearningJob, ensureMemoryReferenceConsentRequest, ensureSessionRecord, ensureXopcDatabaseSchema, estimateTokensFromMessages, extractFtsContent, findLatestMemoryInjectTrace, findSessionKeyBySessionId, findTaskOutcomeForAssistant, finishKnowledgeSyncRun, getActivityEventRecord, getCachedConnectorCatalogEntry, getConnectorApproval, getConnectorConnection, getConnectorInstallation, getCurrentSessionId, getGlobalSessionStats, getInteractionState, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, getMemoryProviderState, getMemoryRecord, getNoteAgentContextRecord, getNoteRecord, getRelationshipSettings, getSessionConfig, getSessionMetadata, getSessionPersistedLevels, getSqliteDatabase, getTaskOutcome, getUserClaim, getUserProfilePromptState, getUserTrustPolicy, getXopcDatabase, hasMemoryReferenceConsent, hasSessionConfig, hasUnresolvedMemoryConflict, incrementSessionStatsOnAppend, inspectSchemaMigrationStatus, isProactiveSupportAllowed, isXopcDatabaseOpen, linkUserClaimMemoryRecord, listActivityRecords, listCachedConnectorCatalogEntries, listCompactionBoundaries, listComposerInputHistory, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, listConnectorLearningJobs, listKnowledgeSourceChanges, listKnowledgeSourceItems, listKnowledgeSyncRuns, listMemoryEvidence, listMemoryRecords, listMemoryReferenceConsents, listMemorySignals, listMemoryTraceEvents, listNoteRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, listRegisteredMigrationTargets, listSessionMetadata, listSessionsByAgent, listTaskOutcomes, listUserClaimEvidence, listUserClaimStatsBySource, listUserClaims, listUserPeopleGraphRows, loadLlmMessagesForSession, loadTranscriptHistoryRowsForSession, loadTranscriptRows, loadTranscriptRowsForSession, markMemoryRecordsConflicted, metadataToSessionInsert, openXopcDatabase, paginateTranscriptMessages, patchSessionMetadata, pruneBoundedKnowledgeSourceItems, readSchemaVersion, readSchemaVersionForTest, recordActivityEvent, recoverStaleConnectorLearningJobs, reinforceUserClaim, releaseConnectorWebhookDelivery, removeUserClaimEvidenceForSource, replaceConnectorCatalogEntries, replaceTranscriptRows, requireXopcDatabase, resetSessionRecord, resetXopcDatabaseSingletonForTest, resolveMigrationsDir, resolveSessionAgentId, resolveUserEntity, resolveXopcDatabasePath, restoreBeforeCompactionBoundary, revokeMemoryReferenceConsent, runSqliteWriteTransaction, searchMemoryIndex, searchMemoryRecords, sessionConfigRowToConfig, sessionRowToMetadata, setConnectorLearningPaused, setInteractionState, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, setLatestMemoryInjectFeedback, setMemoryProviderState, setMemoryTraceFeedback, setSessionConfig, setTaskOutcomeFeedback, setUserClaimDecision, setUserProfilePromptState, setUserTrustPolicy, startKnowledgeSyncRun, startTaskOutcome, summarizeMemoryRecallFeedback, summarizeTaskOutcomes, summarizeUserUnderstandingQuality, syncMemoryIndex, transcriptEntryRowToStoredRow, updateConnectorLearningJob, updateInteractionStateFromMessage, updateRelationshipSettings, updateSessionConfig, updateSessionStats, updateTaskOutcome, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation, upsertKnowledgeSourceItems, upsertMemoryRecord, upsertNoteAgentContextRecord, upsertNoteRecord };
|
|
@@ -21,8 +21,8 @@ export declare function listKnowledgeSyncRuns(options?: {
|
|
|
21
21
|
status?: KnowledgeSyncRunStatus;
|
|
22
22
|
limit?: number;
|
|
23
23
|
}): KnowledgeSyncRun[];
|
|
24
|
-
export declare function getKnowledgeSourceCursor(sourceInstanceId: string): string | undefined;
|
|
25
|
-
export declare function setKnowledgeSourceCursor(sourceInstanceId: string, cursor: string | undefined): void;
|
|
24
|
+
export declare function getKnowledgeSourceCursor(sourceInstanceId: string, collectionScope: string): string | undefined;
|
|
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
28
|
created: number;
|
|
@@ -39,12 +39,14 @@ export declare function getKnowledgeConsumerWatermark(consumerId: string, source
|
|
|
39
39
|
export declare function setKnowledgeConsumerWatermark(consumerId: string, sourceInstanceId: string, sequence: number, nowMs?: number): void;
|
|
40
40
|
export declare function listKnowledgeSourceItems(options?: {
|
|
41
41
|
sourceInstanceId?: string;
|
|
42
|
+
collectionScope?: string;
|
|
42
43
|
itemType?: string;
|
|
43
44
|
synthesisStatus?: KnowledgeSynthesisStatus;
|
|
44
45
|
includeDeleted?: boolean;
|
|
45
46
|
limit?: number;
|
|
46
47
|
offset?: number;
|
|
47
48
|
}): KnowledgeSourceItem[];
|
|
49
|
+
export declare function pruneBoundedKnowledgeSourceItems(sourceInstanceId: string, olderThanMs: number): number;
|
|
48
50
|
export declare function setKnowledgeSourceItemSynthesisStatus(itemIds: string[], status: KnowledgeSynthesisStatus, nowMs?: number): number;
|
|
49
51
|
export declare function claimKnowledgeSourceItems(options: {
|
|
50
52
|
workerId: string;
|