@xopcai/xopc 0.0.315 → 0.0.317
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/{agent-avatar-dicebear-BbFOF2SH.js → agent-avatar-dicebear-BmmO4j0u.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-defaults-settings-panel-D9T-QGmd.js → agent-defaults-settings-panel-2NGwyCKB.js} +1 -1
- package/dist/gateway/static/root/assets/{agents-Ds5sQcPd.js → agents-Cb4lfXqA.js} +1 -1
- package/dist/gateway/static/root/assets/{api-BzloAiIG.js → api-Fu9gSeAI.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-BpUHskXq.js → app-management-settings-panel-BhIQOlam.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-CQd5Vo6f.js → appearance-settings-DwW3wrBX.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-B7VIsfye.js → apps-page-ByLoHKiD.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-BM4O6WfL.js → archive-plugin-DzQeKhMy.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-Cdn9MYmI.js → attachment-load-CNWbDfHi.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-DnRx-Ra4.js → automations-page-CZcaFAco.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-CGTrgDlW.js +7 -0
- package/dist/gateway/static/root/assets/{binary-plugins-dkhUf4bm.js → binary-plugins-D5-gEs50.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-BTzqEuAy.js → block-editor-DngH5soo.js} +5 -5
- package/dist/gateway/static/root/assets/{browser-automation-inputs-Bowij-nJ.js → browser-automation-inputs-DeGdfGUg.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-automations-page-CQ7SYTQj.js → browser-automations-page-D_vsV9Og.js} +1 -1
- package/dist/gateway/static/root/assets/browser-settings-page-DCpyjtI7.js +3 -0
- package/dist/gateway/static/root/assets/capabilities-settings-panel-C3clEWb3.js +8 -0
- package/dist/gateway/static/root/assets/channels-settings-Dibm8FJG.js +1 -0
- package/dist/gateway/static/root/assets/{chat-terminal-dock-DzgFHd6l.js → chat-terminal-dock-DyoR9vy9.js} +1 -1
- package/dist/gateway/static/root/assets/{computer-settings-page-380_vIqO.js → computer-settings-page-Dp1d7MGE.js} +1 -1
- package/dist/gateway/static/root/assets/{connector-service-page-DILFakXb.js → connector-service-page--SapHT59.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-CV2K0GsR.js +2 -0
- package/dist/gateway/static/root/assets/{date-picker-CRVun-T5.js → date-picker-BpJiursq.js} +1 -1
- package/dist/gateway/static/root/assets/{dependency-picker-BoWqt5yU.js → dependency-picker-BKLcvu4-.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-DPlkBjft.js → desktop-pet-DNBeDygk.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-D7FgfX_K.js → desktop-pet-settings-C1wzPZky.js} +1 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-tCgXlVNO.js +1 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-CT_QkSN_.js → extension-debug-page-BoG796xN.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-BF1NdcKP.js → extension-page-DatEJD_W.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-CKQVZ3Xc.js → extension-settings-page-cs0pcgqa.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-BPsZPoAT.js → gateway-config-swr-CYa7aVok.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-settings-3bIy7XMr.js → gateway-settings-DSxwMkLj.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-cG6EqUJw.js → gateway-startup-retry-FZix2Im1.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-3cToq8Ic.js +1 -0
- package/dist/gateway/static/root/assets/{image-generation-api-DI_QutIx.js → image-generation-api-IDhumota.js} +1 -1
- package/dist/gateway/static/root/assets/{imports-page-BUG6G72F.js → imports-page-BZ-0tsFU.js} +1 -1
- package/dist/gateway/static/root/assets/index-Ca4fdHsK.css +1 -0
- package/dist/gateway/static/root/assets/index-DqxyVarz.js +89 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-qnG-4FJs.js → keyboard-shortcuts-settings-CyXLl8PE.js} +1 -1
- package/dist/gateway/static/root/assets/{local-app-workbench-page-B3iJWhjN.js → local-app-workbench-page-ZjNFRbSU.js} +2 -2
- package/dist/gateway/static/root/assets/{local-apps-page-BpEGeURS.js → local-apps-page-BmcNQOEx.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-BlgpZORR.js → locale-store-BrnrrtSS.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-0QPGj-5c.js → logs-page-DoaBVsR2.js} +2 -2
- package/dist/gateway/static/root/assets/{management-settings-Sl0wwidS.js → management-settings-BkCC5j8K.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-view-BzjjpL2H.js → markdown-view-DUfjxG4s.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-Bzkdhotn.js → media-plugins-DFNzifXX.js} +1 -1
- package/dist/gateway/static/root/assets/messages-BoEi2k2p.js +3 -0
- package/dist/gateway/static/root/assets/note-detail-panel-CLxgY3Xq.js +5 -0
- package/dist/gateway/static/root/assets/notes-page-CgQEb3ks.js +8 -0
- package/dist/gateway/static/root/assets/{page-context-capture-button-CFt4hXQ6.js → page-context-capture-button-Beu5hjB5.js} +1 -1
- package/dist/gateway/static/root/assets/{page-tabs-Dz_x22MQ.js → page-tabs-DWppfGs6.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-C1mkgFAl.js → preview-open-alternatives-CjBsxcGv.js} +1 -1
- package/dist/gateway/static/root/assets/{product-open-page-DHZgzSDV.js → product-open-page-BYoaBpad.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-BtiNnPuJ.js +1 -0
- package/dist/gateway/static/root/assets/{projects-page-CEr8DX9I.js → projects-page-_Qc8812P.js} +1 -1
- package/dist/gateway/static/root/assets/{registry-api-DMW2apOO.js → registry-api-DgKqRZl1.js} +1 -1
- package/dist/gateway/static/root/assets/{remote-access-hub-Db-B-Mf3.js → remote-access-hub-CpI6OjSj.js} +1 -1
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-DEJi0BLL.js → runtime-tools-settings-panel-Dykdq60b.js} +1 -1
- package/dist/gateway/static/root/assets/scenes-page-hP1OhIG6.js +2 -0
- package/dist/gateway/static/root/assets/{schema-form-RVltVpuG.js → schema-form-BPeMGXnp.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-Dmncs4GP.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-CV2LhIvd.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-BkBO7woF.js → settings-form-section-OfLwze5k.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-zl0XY203.js → settings-page-D-koQ_0e.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-layout-lLvHc-zF.js → settings-page-layout-r1Q31sB_.js} +1 -1
- package/dist/gateway/static/root/assets/{setup-status-panel-Difrpr4T.js → setup-status-panel-MiIbmzZu.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-NC4Gj867.js → share-preview-page-BkSzw3wN.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-settings-DPLvEcB-.js → shares-settings-BT9NIsiS.js} +1 -1
- package/dist/gateway/static/root/assets/skill-reload-api-BgxB-kmG.js +1 -0
- package/dist/gateway/static/root/assets/{skills-page-CzekvBNQ.js → skills-page-CfL2BT9s.js} +1 -1
- package/dist/gateway/static/root/assets/{skills-page.utils-BLeiN245.js → skills-page.utils-BKdQtHAI.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-Bp75s9nl.js → system-settings-panel-Del-7fwn.js} +1 -1
- package/dist/gateway/static/root/assets/task-detail-page-q8NLbitF.js +1 -0
- package/dist/gateway/static/root/assets/{tunnel-api-BDiaC6an.js → tunnel-api-DK9ICDPw.js} +1 -1
- package/dist/gateway/static/root/assets/{use-autosave-C_ntK_Zu.js → use-autosave-BLZSp59v.js} +1 -1
- package/dist/gateway/static/root/assets/user-model-page-DPfaWuJs.js +2 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-D4cfuMp1.js → voice-api-key-field-Lzm2ik7J.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-Cjvd6maH.js → voice-config-api-F6NsgxNd.js} +1 -1
- package/dist/gateway/static/root/assets/work-discovery-overlay-CkC8ANVw.js +1 -0
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-C80nrmKi.js → workflow-run-setup-panel-DoevvbCd.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-CZxaaUK8.js +6 -0
- package/dist/gateway/static/root/index.html +8 -8
- package/dist/package.js +1 -1
- package/dist/src/agent/agent-manager.js +14 -13
- package/dist/src/agent/embedded/run-turn.js +28 -15
- package/dist/src/agent/embedded/system-prompt-override.js +14 -3
- package/dist/src/agent/embedded/xopc-stream-bridge.js +13 -2
- package/dist/src/agent/memory/context-budget.js +1 -1
- package/dist/src/agent/orchestration/agent-turn-policy.d.ts +2 -2
- package/dist/src/agent/prompt/agent-system-prompt.d.ts +3 -0
- package/dist/src/agent/prompt/agent-system-prompt.js +16 -0
- package/dist/src/agent/tools/knowledge-memory-tool.js +1 -0
- package/dist/src/agent-config/schema.d.ts +8 -8
- package/dist/src/ai-assist/text-assist.js +2 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/config/schema.d.ts +5 -5
- package/dist/src/connectors/connected-source-ingestion.d.ts +1 -0
- package/dist/src/connectors/connected-source-ingestion.js +1 -0
- package/dist/src/connectors/connected-source-understanding.d.ts +1 -0
- package/dist/src/connectors/connected-source-understanding.js +91 -31
- package/dist/src/connectors/content-enrichment.d.ts +1 -0
- package/dist/src/connectors/content-enrichment.js +3 -1
- package/dist/src/connectors/learning-coordinator.js +24 -24
- package/dist/src/gateway/chat-stream/mapper.js +9 -4
- package/dist/src/gateway/chat-stream/protocol.d.ts +2 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +2 -2
- package/dist/src/gateway/hono/routes/user-model-refresh.js +2 -2
- package/dist/src/gateway/hono/routes/voice.js +1 -1
- package/dist/src/gateway/service.js +6 -6
- package/dist/src/knowledge/ingestion-service.d.ts +5 -2
- package/dist/src/knowledge/ingestion-service.js +24 -15
- package/dist/src/knowledge-memory/domain.d.ts +1 -1
- package/dist/src/platform/client.d.ts +1 -1
- package/dist/src/platform/contracts.d.ts +1 -1
- package/dist/src/providers/extension-stream-bridge.js +6 -4
- package/dist/src/providers/model-call.js +3 -3
- package/dist/src/providers/presentation.js +4 -3
- package/dist/src/storage/sqlite/context-extraction-repository.d.ts +1 -2
- package/dist/src/storage/sqlite/context-extraction-repository.js +1 -9
- package/dist/src/storage/sqlite/index.d.ts +1 -2
- package/dist/src/storage/sqlite/index.js +2 -3
- package/dist/src/storage/sqlite/knowledge-repository.d.ts +1 -0
- package/dist/src/storage/sqlite/knowledge-repository.js +3 -0
- package/dist/src/storage/sqlite/migrations/200_connected_work_threads.sql +92 -0
- package/dist/src/storage/sqlite/migrations/201_connector_extraction_audit.sql +127 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +4 -4
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/storage/sqlite/schema.sql +1 -1
- package/dist/src/user-context/domain.d.ts +0 -13
- package/dist/src/user-context/sources/index.js +2 -2
- package/dist/src/user-context/sources/repository.d.ts +10 -0
- package/dist/src/user-context/sources/repository.js +19 -4
- package/dist/src/user-context/sources/types.d.ts +1 -0
- package/package.json +8 -8
- package/dist/gateway/static/root/assets/automations-workspace-B5s10G5F.js +0 -7
- package/dist/gateway/static/root/assets/browser-settings-page-vqLoPOOg.js +0 -3
- package/dist/gateway/static/root/assets/capabilities-settings-panel-DI68WGYd.js +0 -8
- package/dist/gateway/static/root/assets/channels-settings-Cimssy-S.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-COmFp9HC.js +0 -2
- package/dist/gateway/static/root/assets/device-pairing-wizard-BP6yxut8.js +0 -1
- package/dist/gateway/static/root/assets/home-page-DFNDLFgv.js +0 -1
- package/dist/gateway/static/root/assets/index-BCi8nfxs.js +0 -89
- package/dist/gateway/static/root/assets/index-DWgd1VK2.css +0 -1
- package/dist/gateway/static/root/assets/messages-2GhUD7SC.js +0 -3
- package/dist/gateway/static/root/assets/note-detail-panel-BXtD71j1.js +0 -5
- package/dist/gateway/static/root/assets/notes-page-DNY4vW-u.js +0 -8
- package/dist/gateway/static/root/assets/project-detail-page-D3NhZ7ZZ.js +0 -1
- package/dist/gateway/static/root/assets/scenes-page-BUUX-PnI.js +0 -2
- package/dist/gateway/static/root/assets/sessions-page-Rm4H2okS.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-VxPItcOG.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-CKdLCf_-.js +0 -1
- package/dist/gateway/static/root/assets/task-detail-page-Bh8H4FYR.js +0 -1
- package/dist/gateway/static/root/assets/user-model-page-C7gFCGAV.js +0 -2
- package/dist/gateway/static/root/assets/work-discovery-overlay-Ce6ToB0O.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-CVQjo3RI.js +0 -6
- package/dist/src/storage/sqlite/context-relation-repository.d.ts +0 -50
- package/dist/src/storage/sqlite/context-relation-repository.js +0 -98
|
@@ -15,7 +15,7 @@ import "../knowledge/index.js";
|
|
|
15
15
|
import { ingestComposioConnectedSource } from "./connected-source-ingestion.js";
|
|
16
16
|
import { deriveConnectedSourceUnderstanding } from "./connected-source-understanding.js";
|
|
17
17
|
import { listConnectedContentCandidates, readConnectedContent } from "./content-enrichment.js";
|
|
18
|
-
import {
|
|
18
|
+
import { getConnectorUnderstandingSourceRun, getOrCreateConnectorUnderstandingSourceRun, getUnderstandingSourceGrant, listUnderstandingSourceGrants, updateUnderstandingSourceGrantCheckpoint, updateUnderstandingSourceRun, upsertUnderstandingSourceGrant } from "../user-context/sources/repository.js";
|
|
19
19
|
//#region src/connectors/learning-coordinator.ts
|
|
20
20
|
init_logger();
|
|
21
21
|
const log = createLogger("ConnectorLearning");
|
|
@@ -35,29 +35,26 @@ function connectorSourceCategory(toolkit) {
|
|
|
35
35
|
function ensureUnderstandingSourceRun(job, toolkit, displayName) {
|
|
36
36
|
const existing = listUnderstandingSourceGrants({ includeRevoked: true }).find((grant) => grant.sourceKey === `connector-account:${job.accountId}`);
|
|
37
37
|
if (existing?.status === "revoked") throw new Error("Source authorization was revoked.");
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
38
|
+
return getOrCreateConnectorUnderstandingSourceRun({
|
|
39
|
+
grantId: (existing ?? upsertUnderstandingSourceGrant({
|
|
40
|
+
sourceKey: `connector-account:${job.accountId}`,
|
|
41
|
+
adapterId: `connector:${job.connectorId}`,
|
|
42
|
+
category: connectorSourceCategory(toolkit),
|
|
43
|
+
platform: "all",
|
|
44
|
+
displayName,
|
|
45
|
+
accessMode: "continuous",
|
|
46
|
+
retentionPolicy: "bounded_raw",
|
|
47
|
+
processingPolicy: "remote_allowed",
|
|
48
|
+
config: {
|
|
49
|
+
connectorId: job.connectorId,
|
|
50
|
+
accountId: job.accountId,
|
|
51
|
+
readOnly: true
|
|
52
|
+
}
|
|
53
|
+
})).id,
|
|
54
|
+
connectorLearningJobId: job.id,
|
|
55
55
|
kind: job.mode,
|
|
56
56
|
status: "queued",
|
|
57
|
-
metadata: {
|
|
58
|
-
connectorLearningJobId: job.id,
|
|
59
|
-
connectorId: job.connectorId
|
|
60
|
-
}
|
|
57
|
+
metadata: { connectorId: job.connectorId }
|
|
61
58
|
});
|
|
62
59
|
}
|
|
63
60
|
function learningEnabled(config) {
|
|
@@ -177,6 +174,7 @@ function startConnectorLearningCoordinator(options) {
|
|
|
177
174
|
}
|
|
178
175
|
let itemsSeen = 0;
|
|
179
176
|
let itemsIndexed = 0;
|
|
177
|
+
const changedSourceItemIds = /* @__PURE__ */ new Set();
|
|
180
178
|
for (const stream of plan.streams) {
|
|
181
179
|
const synced = await ingestComposioConnectedSource({
|
|
182
180
|
config: options.getConfig(),
|
|
@@ -191,6 +189,7 @@ function startConnectorLearningCoordinator(options) {
|
|
|
191
189
|
});
|
|
192
190
|
itemsSeen += synced.itemsSeen;
|
|
193
191
|
itemsIndexed += synced.itemsIndexed;
|
|
192
|
+
for (const sourceItemId of synced.sourceItemIds) changedSourceItemIds.add(sourceItemId);
|
|
194
193
|
}
|
|
195
194
|
const enrichmentErrors = [];
|
|
196
195
|
if (plan.toolkit === "googledrive") {
|
|
@@ -206,6 +205,7 @@ function startConnectorLearningCoordinator(options) {
|
|
|
206
205
|
});
|
|
207
206
|
enrichmentErrors.push(...enriched.failed.map((failure) => failure.error));
|
|
208
207
|
itemsIndexed += enriched.completed;
|
|
208
|
+
for (const sourceItemId of enriched.sourceItemIds) changedSourceItemIds.add(sourceItemId);
|
|
209
209
|
}
|
|
210
210
|
}
|
|
211
211
|
if (listConnectorLearningJobs({
|
|
@@ -229,6 +229,7 @@ function startConnectorLearningCoordinator(options) {
|
|
|
229
229
|
config: options.getConfig(),
|
|
230
230
|
agentId: job.agentId,
|
|
231
231
|
sourceInstanceId: job.sourceInstanceId,
|
|
232
|
+
sourceItemIds: [...changedSourceItemIds],
|
|
232
233
|
sourceRunId: sourceRun.id,
|
|
233
234
|
processingPolicy: getUnderstandingSourceGrant(sourceRun.grantId)?.processingPolicy ?? "local_only",
|
|
234
235
|
assertAuthorized: () => {
|
|
@@ -324,8 +325,7 @@ function startConnectorLearningCoordinator(options) {
|
|
|
324
325
|
}));
|
|
325
326
|
const definition = getConnectorDefinition(job.connectorId);
|
|
326
327
|
if (definition?.runtime.type === "composio" && definition.runtime.role === "toolkit") {
|
|
327
|
-
const
|
|
328
|
-
const sourceRun = grant && listUnderstandingSourceRuns(grant.id, 100).find((item) => item.metadata.connectorLearningJobId === job.id);
|
|
328
|
+
const sourceRun = listUnderstandingSourceGrants({ includeRevoked: true }).find((item) => item.sourceKey === `connector-account:${job.accountId}`) && getConnectorUnderstandingSourceRun(job.id);
|
|
329
329
|
if (sourceRun) updateUnderstandingSourceRun(sourceRun.id, {
|
|
330
330
|
status: "failed",
|
|
331
331
|
errorMessage: learningFailureCode(err),
|
|
@@ -168,7 +168,8 @@ var ChatStreamMapper = class {
|
|
|
168
168
|
if (delta?.type === "text_delta" && typeof delta.delta === "string" && delta.delta) {
|
|
169
169
|
events.push(this.make("assistant_delta", {
|
|
170
170
|
messageId,
|
|
171
|
-
delta: delta.delta
|
|
171
|
+
delta: delta.delta,
|
|
172
|
+
offset: this.currentAssistantText.length
|
|
172
173
|
}));
|
|
173
174
|
this.currentAssistantText += delta.delta;
|
|
174
175
|
}
|
|
@@ -182,7 +183,8 @@ var ChatStreamMapper = class {
|
|
|
182
183
|
if (suffix) {
|
|
183
184
|
events.push(this.make("assistant_delta", {
|
|
184
185
|
messageId,
|
|
185
|
-
delta: suffix
|
|
186
|
+
delta: suffix,
|
|
187
|
+
offset: this.currentAssistantText.length
|
|
186
188
|
}));
|
|
187
189
|
this.currentAssistantText = text || `${this.currentAssistantText}${suffix}`;
|
|
188
190
|
}
|
|
@@ -204,10 +206,12 @@ var ChatStreamMapper = class {
|
|
|
204
206
|
const text = extractTextFromMessage(message);
|
|
205
207
|
const suffix = appendSuffix(this.currentAssistantText, text);
|
|
206
208
|
if (!suffix) return [];
|
|
209
|
+
const offset = this.currentAssistantText.length;
|
|
207
210
|
this.currentAssistantText = text || `${this.currentAssistantText}${suffix}`;
|
|
208
211
|
return [this.make("assistant_delta", {
|
|
209
212
|
messageId,
|
|
210
|
-
delta: suffix
|
|
213
|
+
delta: suffix,
|
|
214
|
+
offset
|
|
211
215
|
})];
|
|
212
216
|
}
|
|
213
217
|
mapMessageEnd(raw) {
|
|
@@ -227,7 +231,8 @@ var ChatStreamMapper = class {
|
|
|
227
231
|
const suffix = appendSuffix(this.currentAssistantText, text);
|
|
228
232
|
if (suffix) events.push(this.make("assistant_delta", {
|
|
229
233
|
messageId,
|
|
230
|
-
delta: suffix
|
|
234
|
+
delta: suffix,
|
|
235
|
+
offset: this.currentAssistantText.length
|
|
231
236
|
}));
|
|
232
237
|
this.currentAssistantText = text || this.currentAssistantText;
|
|
233
238
|
events.push(this.make("thinking_end", { messageId }));
|
|
@@ -44,7 +44,8 @@ export type AssistantMessageStartEvent = ChatStreamEnvelope<'assistant_message_s
|
|
|
44
44
|
}>;
|
|
45
45
|
export type AssistantDeltaEvent = ChatStreamEnvelope<'assistant_delta', {
|
|
46
46
|
messageId: string;
|
|
47
|
-
delta: string;
|
|
47
|
+
delta: string; /** UTF-16 offset before this delta. */
|
|
48
|
+
offset?: number;
|
|
48
49
|
}>;
|
|
49
50
|
export type ThinkingDeltaEvent = ChatStreamEnvelope<'thinking_delta', {
|
|
50
51
|
messageId: string;
|
|
@@ -28,7 +28,7 @@ export declare function buildSafeWebConfigPayload(service: GatewayService, optio
|
|
|
28
28
|
primary: string;
|
|
29
29
|
fallbacks: string[];
|
|
30
30
|
};
|
|
31
|
-
intents?: Partial<Record<"review" | "coding" | "
|
|
31
|
+
intents?: Partial<Record<"review" | "coding" | "fast" | "reasoning" | "vision" | "understanding", {
|
|
32
32
|
primary: string;
|
|
33
33
|
fallbacks: string[];
|
|
34
34
|
}>>;
|
|
@@ -72,7 +72,7 @@ export declare function buildSafeWebConfigPayload(service: GatewayService, optio
|
|
|
72
72
|
primary: string;
|
|
73
73
|
fallbacks: string[];
|
|
74
74
|
};
|
|
75
|
-
intents: Partial<Record<"review" | "coding" | "
|
|
75
|
+
intents: Partial<Record<"review" | "coding" | "fast" | "reasoning" | "vision" | "understanding", {
|
|
76
76
|
primary: string;
|
|
77
77
|
fallbacks: string[];
|
|
78
78
|
}>>;
|
|
@@ -2,7 +2,7 @@ import { listConnectorLearningJobs } from "../../../storage/sqlite/connector-lea
|
|
|
2
2
|
import { getConnectorAccount } from "../../../storage/sqlite/connector-account-repository.js";
|
|
3
3
|
import "../../../storage/sqlite/index.js";
|
|
4
4
|
import { getWorkDiscoveryRun } from "../../../work-discovery/repository.js";
|
|
5
|
-
import {
|
|
5
|
+
import { getConnectorUnderstandingSourceRun } from "../../../user-context/sources/repository.js";
|
|
6
6
|
import { isLocalUnderstandingSourceId } from "../../../user-context/sources/local-source-contract.js";
|
|
7
7
|
import { normalizeUnderstandingSourceItems } from "../../../work-discovery/service.js";
|
|
8
8
|
import { UnderstandingRefreshService } from "../../../user-context/sources/refresh-service.js";
|
|
@@ -63,7 +63,7 @@ function createUnderstandingRefreshService(deps) {
|
|
|
63
63
|
phase: "completed",
|
|
64
64
|
error: "Connector update is no longer available."
|
|
65
65
|
};
|
|
66
|
-
const sourceRun =
|
|
66
|
+
const sourceRun = getConnectorUnderstandingSourceRun(job.id);
|
|
67
67
|
if (job.status === "completed") return {
|
|
68
68
|
status: sourceRun?.status === "partial" ? "partial" : "completed",
|
|
69
69
|
phase: "completed",
|
|
@@ -21,8 +21,8 @@ import { VoiceSessionCreationError, resolveStreamingStt, resolveStreamingTts } f
|
|
|
21
21
|
import { getGatewayPrincipal } from "../../security/gateway-principal.js";
|
|
22
22
|
import { createGatewayRouteLogger } from "../lib/route-logger.js";
|
|
23
23
|
import { selectPlatformVoice, voiceSettingsCatalog } from "../../../voice/platform-settings.js";
|
|
24
|
-
import { listTtsProvidersForApi } from "../../../voice/tts/list-providers.js";
|
|
25
24
|
import { listLocalVoiceModelStatuses, removeLocalVoiceModel, startLocalVoiceModelInstall } from "../../../voice/local/model-manager.js";
|
|
25
|
+
import { listTtsProvidersForApi } from "../../../voice/tts/list-providers.js";
|
|
26
26
|
import { z } from "zod";
|
|
27
27
|
//#region src/gateway/hono/routes/voice.ts
|
|
28
28
|
init_voice();
|
|
@@ -66,18 +66,18 @@ import { registerClarificationChannelRuntime } from "./clarify-runtime.js";
|
|
|
66
66
|
import { ChannelManager } from "../channels/manager.js";
|
|
67
67
|
import { getWorkspacePath } from "../config/workspace-path-helpers.js";
|
|
68
68
|
import "../config/index.js";
|
|
69
|
-
import { ManagedComposioEventPoller } from "../connectors/composio-managed-events.js";
|
|
70
|
-
import { startConnectedKnowledgeCoordinator } from "../knowledge/coordinator.js";
|
|
71
|
-
import "../knowledge/index.js";
|
|
72
|
-
import { ConnectionRecoveryService } from "../connectors/connection-recovery-service.js";
|
|
73
|
-
import { startConnectorLearningCoordinator } from "../connectors/learning-coordinator.js";
|
|
74
|
-
import { startConnectorSupervisor } from "../connectors/supervisor.js";
|
|
75
69
|
import { DiscussionService } from "../discussions/service.js";
|
|
76
70
|
import { DiscussionOrganizer } from "../discussions/organizer.js";
|
|
77
71
|
import { DiscussionLiveWorker } from "../discussions/live-worker.js";
|
|
78
72
|
import { DiscussionOrganizerWorker } from "../discussions/organizer-worker.js";
|
|
79
73
|
import { DiscussionSealer } from "../discussions/sealer.js";
|
|
80
74
|
import "../discussions/index.js";
|
|
75
|
+
import { ManagedComposioEventPoller } from "../connectors/composio-managed-events.js";
|
|
76
|
+
import { startConnectedKnowledgeCoordinator } from "../knowledge/coordinator.js";
|
|
77
|
+
import "../knowledge/index.js";
|
|
78
|
+
import { ConnectionRecoveryService } from "../connectors/connection-recovery-service.js";
|
|
79
|
+
import { startConnectorLearningCoordinator } from "../connectors/learning-coordinator.js";
|
|
80
|
+
import { startConnectorSupervisor } from "../connectors/supervisor.js";
|
|
81
81
|
import { EndpointToolRuntime } from "../endpoint-tools/runtime.js";
|
|
82
82
|
import "../endpoint-tools/index.js";
|
|
83
83
|
import { assertGatewayAuthConfigured, extractToken, resolveGatewayAuth, validateToken } from "./auth.js";
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import type { KnowledgeSourceAdapter, KnowledgeSourceItemInput, KnowledgeSyncRun } from './types.js';
|
|
2
|
+
export type KnowledgeIngestionResult = KnowledgeSyncRun & {
|
|
3
|
+
changedItemIds: string[];
|
|
4
|
+
};
|
|
2
5
|
export interface KnowledgeSourceStateStore {
|
|
3
6
|
getCursor(instanceId: string, collectionScope: string): string | undefined;
|
|
4
7
|
setCursor(instanceId: string, collectionScope: string, cursor: string | undefined): void;
|
|
@@ -17,12 +20,12 @@ export declare class KnowledgeIngestionService {
|
|
|
17
20
|
items: KnowledgeSourceItemInput[];
|
|
18
21
|
cursorAfter?: string;
|
|
19
22
|
warnings?: string[];
|
|
20
|
-
}):
|
|
23
|
+
}): KnowledgeIngestionResult;
|
|
21
24
|
sync(params: {
|
|
22
25
|
adapterKind: string;
|
|
23
26
|
instanceId: string;
|
|
24
27
|
collectionScope: string;
|
|
25
28
|
windowStart?: string;
|
|
26
29
|
signal?: AbortSignal;
|
|
27
|
-
}): Promise<
|
|
30
|
+
}): Promise<KnowledgeIngestionResult>;
|
|
28
31
|
}
|
|
@@ -64,15 +64,18 @@ var KnowledgeIngestionService = class {
|
|
|
64
64
|
try {
|
|
65
65
|
const stored = upsertKnowledgeSourceItems(params.items);
|
|
66
66
|
this.state.setCursor(params.instanceId, params.collectionScope, params.cursorAfter);
|
|
67
|
-
return
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
67
|
+
return {
|
|
68
|
+
...finishKnowledgeSyncRun({
|
|
69
|
+
runId: run.id,
|
|
70
|
+
status: params.warnings?.length ? "partial" : "succeeded",
|
|
71
|
+
cursorAfter: params.cursorAfter,
|
|
72
|
+
itemsSeen: params.items.length,
|
|
73
|
+
itemsCreated: stored.created,
|
|
74
|
+
itemsUpdated: stored.updated,
|
|
75
|
+
warnings: params.warnings
|
|
76
|
+
}),
|
|
77
|
+
changedItemIds: stored.changedItemIds
|
|
78
|
+
};
|
|
76
79
|
} catch (err) {
|
|
77
80
|
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
78
81
|
finishKnowledgeSyncRun({
|
|
@@ -139,7 +142,10 @@ var KnowledgeIngestionService = class {
|
|
|
139
142
|
itemsUpdated: stored.updated,
|
|
140
143
|
itemsDeleted: tombstones.length
|
|
141
144
|
}, "Knowledge source sync completed");
|
|
142
|
-
return
|
|
145
|
+
return {
|
|
146
|
+
...completed,
|
|
147
|
+
changedItemIds: stored.changedItemIds
|
|
148
|
+
};
|
|
143
149
|
} catch (err) {
|
|
144
150
|
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
145
151
|
const status = signal.aborted ? "cancelled" : "failed";
|
|
@@ -148,11 +154,14 @@ var KnowledgeIngestionService = class {
|
|
|
148
154
|
runId: run.id,
|
|
149
155
|
sourceInstanceId: params.instanceId
|
|
150
156
|
}, `Knowledge source sync ${status}: ${errorMessage}`);
|
|
151
|
-
return
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
157
|
+
return {
|
|
158
|
+
...finishKnowledgeSyncRun({
|
|
159
|
+
runId: run.id,
|
|
160
|
+
status,
|
|
161
|
+
error: errorMessage
|
|
162
|
+
}),
|
|
163
|
+
changedItemIds: []
|
|
164
|
+
};
|
|
156
165
|
}
|
|
157
166
|
}
|
|
158
167
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { UserModelScope } from '../user-model/domain.js';
|
|
2
|
-
export type KnowledgeKind = 'project_fact' | 'workspace_fact' | 'decision' | 'task_lesson' | 'commitment' | 'open_question' | 'episode' | 'note';
|
|
2
|
+
export type KnowledgeKind = 'work_thread' | 'project_fact' | 'workspace_fact' | 'decision' | 'task_lesson' | 'commitment' | 'open_question' | 'episode' | 'note';
|
|
3
3
|
export type KnowledgeStatus = 'candidate' | 'active' | 'needs_review' | 'stale' | 'archived' | 'rejected';
|
|
4
4
|
export type KnowledgeReviewAction = 'approve' | 'edit_and_approve' | 'reject' | 'archive';
|
|
5
5
|
export type KnowledgeStatusActor = 'user' | 'agent' | 'runtime' | 'maintenance' | 'migration';
|
|
@@ -33,10 +33,10 @@ export declare const RuntimeCommandSchema: z.ZodObject<{
|
|
|
33
33
|
intents: z.ZodArray<z.ZodEnum<{
|
|
34
34
|
review: "review";
|
|
35
35
|
coding: "coding";
|
|
36
|
-
understanding: "understanding";
|
|
37
36
|
fast: "fast";
|
|
38
37
|
reasoning: "reasoning";
|
|
39
38
|
vision: "vision";
|
|
39
|
+
understanding: "understanding";
|
|
40
40
|
}>>;
|
|
41
41
|
allow: z.ZodArray<z.ZodString>;
|
|
42
42
|
}, z.core.$strict>;
|
|
@@ -119,10 +119,10 @@ export declare const AgentManifestSchema: z.ZodObject<{
|
|
|
119
119
|
intents: z.ZodArray<z.ZodEnum<{
|
|
120
120
|
review: "review";
|
|
121
121
|
coding: "coding";
|
|
122
|
-
understanding: "understanding";
|
|
123
122
|
fast: "fast";
|
|
124
123
|
reasoning: "reasoning";
|
|
125
124
|
vision: "vision";
|
|
125
|
+
understanding: "understanding";
|
|
126
126
|
}>>;
|
|
127
127
|
allow: z.ZodArray<z.ZodString>;
|
|
128
128
|
}, z.core.$strict>;
|
|
@@ -4,7 +4,7 @@ import "./constants.js";
|
|
|
4
4
|
import { getProviderRegistry, init_plugin_registry } from "./plugin-registry.js";
|
|
5
5
|
import { init_providers } from "./index.js";
|
|
6
6
|
import { stripPromptCacheBoundary } from "../agent/prompt/cache-boundary.js";
|
|
7
|
-
import { createAssistantMessageEventStream, streamSimple } from "@earendil-works/pi-ai/compat";
|
|
7
|
+
import { createAssistantMessageEventStream, getCurrentSystemPrompt, getCurrentTools, streamSimple } from "@earendil-works/pi-ai/compat";
|
|
8
8
|
//#region src/providers/extension-stream-bridge.ts
|
|
9
9
|
init_plugin_registry();
|
|
10
10
|
init_providers();
|
|
@@ -78,11 +78,13 @@ function createExtensionAwareStreamFn() {
|
|
|
78
78
|
modelId: model.id
|
|
79
79
|
}, "Streaming via extension provider");
|
|
80
80
|
const stream = createAssistantMessageEventStream();
|
|
81
|
+
const systemPrompt = getCurrentSystemPrompt(context.messages);
|
|
82
|
+
const tools = getCurrentTools(context.messages);
|
|
81
83
|
const params = {
|
|
82
84
|
model: model.id,
|
|
83
|
-
systemPrompt:
|
|
84
|
-
messages: context.messages,
|
|
85
|
-
tools
|
|
85
|
+
systemPrompt: systemPrompt ? stripPromptCacheBoundary(systemPrompt) : void 0,
|
|
86
|
+
messages: context.messages.filter((message) => message.role !== "system"),
|
|
87
|
+
tools,
|
|
86
88
|
temperature: options?.temperature,
|
|
87
89
|
maxTokens: options?.maxTokens,
|
|
88
90
|
apiKey: options?.apiKey,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { init_constants } from "./constants.js";
|
|
2
2
|
import { getApiKey, init_providers } from "./index.js";
|
|
3
3
|
import { createExtensionAwareStreamFn } from "./extension-stream-bridge.js";
|
|
4
|
-
import { completeSimple } from "@earendil-works/pi-ai/compat";
|
|
4
|
+
import { completeSimple, normalizeContext } from "@earendil-works/pi-ai/compat";
|
|
5
5
|
//#region src/providers/model-call.ts
|
|
6
6
|
init_constants();
|
|
7
7
|
init_providers();
|
|
@@ -42,7 +42,7 @@ async function resolveModelCallOptions(model, options = {}, credentialOptions) {
|
|
|
42
42
|
*/
|
|
43
43
|
async function completeWithResolvedCredentials(model, context, options = {}, credentialOptions) {
|
|
44
44
|
const resolvedOptions = await resolveModelCallOptions(model, options, credentialOptions);
|
|
45
|
-
if (model.baseUrl === "extension://provider-plugin") return await (await createExtensionAwareStreamFn()(model, context, resolvedOptions)).result();
|
|
45
|
+
if (model.baseUrl === "extension://provider-plugin") return await (await createExtensionAwareStreamFn()(model, normalizeContext(context), resolvedOptions)).result();
|
|
46
46
|
return await completeSimple(model, context, resolvedOptions);
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
@@ -52,7 +52,7 @@ async function completeWithResolvedCredentials(model, context, options = {}, cre
|
|
|
52
52
|
*/
|
|
53
53
|
async function createResolvedModelStream(model, context, options = {}, credentialOptions) {
|
|
54
54
|
const resolvedOptions = await resolveModelCallOptions(model, options, credentialOptions);
|
|
55
|
-
return await createExtensionAwareStreamFn()(model, context, resolvedOptions);
|
|
55
|
+
return await createExtensionAwareStreamFn()(model, normalizeContext(context), resolvedOptions);
|
|
56
56
|
}
|
|
57
57
|
//#endregion
|
|
58
58
|
export { completeWithResolvedCredentials, createResolvedModelStream, isLocalModelBaseUrl, resolveModelCallApiKey, resolveModelCallOptions, supportsModelTemperature };
|
|
@@ -207,9 +207,10 @@ const RECOMMENDED_MODEL_PATTERNS = {
|
|
|
207
207
|
"zhipu-cn": [/^glm-5\.2$/i],
|
|
208
208
|
zai: [/^glm-5\.2$/i],
|
|
209
209
|
"zai-coding-cn": [
|
|
210
|
-
/^glm-5\.
|
|
211
|
-
/^glm-5\.
|
|
212
|
-
/^glm-5-
|
|
210
|
+
/^glm-5\.3$/i,
|
|
211
|
+
/^glm-5\.3-highspeed$/i,
|
|
212
|
+
/^glm-5\.3-flash$/i,
|
|
213
|
+
/^glm-4\.6v$/i
|
|
213
214
|
],
|
|
214
215
|
"zai-coding-global": [/^glm-5\.2$/i],
|
|
215
216
|
"zhipu-coding-cn": [/^glm-5\.2$/i],
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type ContextExtractionStatus = 'running' | 'completed' | 'skipped' | 'failed';
|
|
2
|
-
export type ContextObjectType = '
|
|
2
|
+
export type ContextObjectType = 'assertion' | 'rule' | 'goal' | 'knowledge';
|
|
3
3
|
export type ContextExtractionRun = {
|
|
4
4
|
id: string;
|
|
5
5
|
principalId: string;
|
|
@@ -54,4 +54,3 @@ export declare function listContextExtractionRuns(filter?: {
|
|
|
54
54
|
}): ContextExtractionRun[];
|
|
55
55
|
export declare function getContextExtractionRun(id: string): ContextExtractionRun | null;
|
|
56
56
|
export declare function listContextExtractionOutputs(runId: string): ContextExtractionOutput[];
|
|
57
|
-
export declare function hasIndependentExtractionOutput(runIds: string[], objectType: ContextObjectType, objectId: string): boolean;
|
|
@@ -108,13 +108,5 @@ function listContextExtractionOutputs(runId) {
|
|
|
108
108
|
return getSqliteDatabase().prepare(`SELECT * FROM context_extraction_outputs
|
|
109
109
|
WHERE extraction_run_id = ? ORDER BY ordinal`).all(runId).map(outputFromRow);
|
|
110
110
|
}
|
|
111
|
-
function hasIndependentExtractionOutput(runIds, objectType, objectId) {
|
|
112
|
-
if (!runIds.length) return false;
|
|
113
|
-
const placeholders = runIds.map(() => "?").join(", ");
|
|
114
|
-
return Boolean(getSqliteDatabase().prepare(`SELECT 1 FROM context_extraction_outputs o
|
|
115
|
-
JOIN context_extraction_runs r ON r.extraction_run_id = o.extraction_run_id
|
|
116
|
-
WHERE o.extraction_run_id NOT IN (${placeholders}) AND o.object_type = ? AND o.object_id = ?
|
|
117
|
-
AND r.status = 'completed' LIMIT 1`).get(...runIds, objectType, objectId));
|
|
118
|
-
}
|
|
119
111
|
//#endregion
|
|
120
|
-
export { claimContextExtractionRun, finishContextExtractionRun, getContextExtractionRun,
|
|
112
|
+
export { claimContextExtractionRun, finishContextExtractionRun, getContextExtractionRun, listContextExtractionOutputs, listContextExtractionRuns };
|
|
@@ -10,8 +10,7 @@ export { deleteBrowserTabBinding, deleteBrowserTabBindingsByEndpoint, deleteBrow
|
|
|
10
10
|
export { authenticateDeviceAccessToken, buildRefreshProofMessage, createDevice, getDevice, issueDeviceTokenPair, listDevices, revokeDevice, rotateDeviceRefreshToken, type DeviceAccessIdentity, type DevicePlatform, type DevicePublicKeyJwk, type DeviceRecord, type DeviceTokenPair, } from './device-access-repository.js';
|
|
11
11
|
export { clearGatewayIdentityForTest, getOrCreateGatewayIdentity, signGatewayPayload, type GatewayIdentity, } from './gateway-identity-repository.js';
|
|
12
12
|
export { createDevicePairingSetup, isDevicePairingSetupActive, type DevicePairingSetup, type DeviceRoute, } from './device-pairing-repository.js';
|
|
13
|
-
export { claimContextExtractionRun, finishContextExtractionRun, getContextExtractionRun,
|
|
14
|
-
export { closeTemporalAssertions, createTemporalAssertion, linkContextObjects, listContextObjectRelations, listTemporalAssertions, type ContextObjectRelation, type ContextTemporalAssertion, } from './context-relation-repository.js';
|
|
13
|
+
export { claimContextExtractionRun, finishContextExtractionRun, getContextExtractionRun, listContextExtractionOutputs, listContextExtractionRuns, type ContextExtractionOutput, type ContextExtractionRun, type ContextExtractionStatus, type ContextObjectType, } from './context-extraction-repository.js';
|
|
15
14
|
export { createCollaborationRule, getCollaborationRule, listCollaborationRules, setCollaborationRuleStatus, type CollaborationRule, } from './collaboration-rule-repository.js';
|
|
16
15
|
export { createContextEvidence, type ContextEvidence } from './context-evidence-repository.js';
|
|
17
16
|
export { getUserPerson, getUserPeopleIndexState, listUserPeople, mergeUserPeople, replaceUserPeopleIndex, summarizeUserPeople, updateUserPerson, } from './user-people-repository.js';
|
|
@@ -12,8 +12,7 @@ import { deleteBrowserTabBinding, deleteBrowserTabBindingsByEndpoint, deleteBrow
|
|
|
12
12
|
import { authenticateDeviceAccessToken, buildRefreshProofMessage, createDevice, getDevice, issueDeviceTokenPair, listDevices, revokeDevice, rotateDeviceRefreshToken } from "./device-access-repository.js";
|
|
13
13
|
import { clearGatewayIdentityForTest, getOrCreateGatewayIdentity, signGatewayPayload } from "./gateway-identity-repository.js";
|
|
14
14
|
import { createDevicePairingSetup, isDevicePairingSetupActive } from "./device-pairing-repository.js";
|
|
15
|
-
import { claimContextExtractionRun, finishContextExtractionRun, getContextExtractionRun,
|
|
16
|
-
import { closeTemporalAssertions, createTemporalAssertion, linkContextObjects, listContextObjectRelations, listTemporalAssertions } from "./context-relation-repository.js";
|
|
15
|
+
import { claimContextExtractionRun, finishContextExtractionRun, getContextExtractionRun, listContextExtractionOutputs, listContextExtractionRuns } from "./context-extraction-repository.js";
|
|
17
16
|
import { createCollaborationRule, getCollaborationRule, listCollaborationRules, setCollaborationRuleStatus } from "./collaboration-rule-repository.js";
|
|
18
17
|
import { createContextEvidence } from "./context-evidence-repository.js";
|
|
19
18
|
import { getUserPeopleIndexState, getUserPerson, listUserPeople, mergeUserPeople, replaceUserPeopleIndex, summarizeUserPeople, updateUserPerson } from "./user-people-repository.js";
|
|
@@ -58,4 +57,4 @@ init_session_repository();
|
|
|
58
57
|
init_connector_repository();
|
|
59
58
|
init_connector_account_repository();
|
|
60
59
|
//#endregion
|
|
61
|
-
export { COMPOSER_INPUT_HISTORY_LIMIT, DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError, DatabaseSchemaTooOldError, SCHEMA_META_SCHEMA_VERSION_KEY, SidebarLayoutConflictError, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_FILENAME, XOPC_DB_SCHEMA_VERSION, acknowledgeHomeAttention, appendCompactionBoundaryIfUnchanged, appendComposerInputHistory, appendConnectorExecutionAudit, appendMediaToAssistantTranscriptEntry, appendTranscriptEntry, applyPendingMigrations, authenticateDeviceAccessToken, bindEndpointPrincipal, buildDefaultSessionMetadata, buildGlobalSessionStats, buildRefreshProofMessage, buildRelationshipPrompt, cancelQueuedSessionInput, claimConnectorWebhookDelivery, claimContextExtractionRun, claimKnowledgeSourceItems, claimNextConnectorLearningJob, claimNextSessionInput, classifyStoredRow, clearComposerInputHistory, clearGatewayIdentityForTest,
|
|
60
|
+
export { COMPOSER_INPUT_HISTORY_LIMIT, DatabaseSchemaMigrationGapError, DatabaseSchemaTooNewError, DatabaseSchemaTooOldError, SCHEMA_META_SCHEMA_VERSION_KEY, SidebarLayoutConflictError, XOPC_DB_BASELINE_SCHEMA_VERSION, XOPC_DB_FILENAME, XOPC_DB_SCHEMA_VERSION, acknowledgeHomeAttention, appendCompactionBoundaryIfUnchanged, appendComposerInputHistory, appendConnectorExecutionAudit, appendMediaToAssistantTranscriptEntry, appendTranscriptEntry, applyPendingMigrations, authenticateDeviceAccessToken, bindEndpointPrincipal, buildDefaultSessionMetadata, buildGlobalSessionStats, buildRefreshProofMessage, buildRelationshipPrompt, cancelQueuedSessionInput, claimConnectorWebhookDelivery, claimContextExtractionRun, claimKnowledgeSourceItems, claimNextConnectorLearningJob, claimNextSessionInput, classifyStoredRow, clearComposerInputHistory, clearGatewayIdentityForTest, closeXopcDatabase, completeConnectorWebhookDelivery, completeKnowledgeSourceItemSynthesis, consumeClarificationApproval, consumeClarificationResume, consumeConnectorApproval, countKnowledgeSourceItems, createClarificationWait, createCollaborationRule, createConnectorApproval, createContextEvidence, createDevice, createDevicePairingSetup, createEndpointPrincipal, createObjectLinkRecord, decideConnectorApproval, deleteBrowserTabBinding, deleteBrowserTabBindingsByEndpoint, deleteBrowserTabBindingsByPrincipal, deleteConnectorConnection, deleteConnectorInstallation, deleteEndpointSessionBinding, deleteEndpointSessionBindingsByPrincipal, deleteKnowledgeSourceItems, deleteNoteAgentContextRecord, deleteNoteRecord, deleteObjectLinkRecord, deleteSessionConfig, deleteSessionRecord, discoverSqlMigrations, enqueueConnectorLearningJob, ensureSessionRecord, ensureXopcDatabaseSchema, estimateTokensFromMessages, extractFtsContent, findConversationIdByTranscriptId, findLatestAssistantTranscriptEntryId, findSessionInput, finishContextExtractionRun, finishEndpointToolInvocationAudit, finishKnowledgeSyncRun, finishSessionInputRun, getActiveClarification, getActivityEventRecord, getBrowserTabBinding, getBrowserTabBindingById, getCachedConnectorCatalogEntry, getClarification, getClarificationResumeInput, getClarificationSnapshot, getCollaborationRule, getConnectorAccount, getConnectorApproval, getConnectorConnection, getConnectorInstallation, getConnectorSyncPolicy, getConnectorSyncPolicyForConnection, getContextExtractionRun, getCurrentTranscriptId, getDevice, getEndpointPrincipal, getEndpointSessionBinding, getGlobalSessionStats, getInteractionState, getKnowledgeConsumerWatermark, getKnowledgeSourceCursor, getKnowledgeSourceItem, getNoteAgentContextRecord, getNoteRecord, getOrCreateGatewayIdentity, getRelationshipSettings, getSessionConfig, getSessionInputById, getSessionInputState, getSessionMetadata, getSessionPersistedLevels, getSessionTaskPlan, getSidebarLayout, getSqliteDatabase, getUserPeopleIndexState, getUserPerson, getUserTrustPolicy, getXopcDatabase, hasSessionConfig, incrementSessionStatsOnAppend, insertSessionInput, inspectSchemaMigrationStatus, isClarificationSuspended, isDevicePairingSetupActive, isHomeAttentionAcknowledged, isProactiveSupportAllowed, isXopcDatabaseOpen, issueDeviceTokenPair, listActiveSessionInputRuns, listActivityRecords, listCachedConnectorCatalogEntries, listCollaborationRules, listCompactionBoundaries, listComposerInputHistory, listConnectorAccounts, listConnectorActionMetadata, listConnectorApprovals, listConnectorConnections, listConnectorExecutionAudit, listConnectorInstallations, listConnectorLearningJobs, listConnectorSyncPolicies, listContextExtractionOutputs, listContextExtractionRuns, listDevices, listEndpointPrincipals, listEndpointToolInvocationAuditPage, listKnowledgeSourceChanges, listKnowledgeSourceItems, listKnowledgeSyncRuns, listNoteRecords, listObjectActivityRecords, listObjectLinkRecords, listProjectActivityRecords, listRegisteredMigrationTargets, listSessionMetadata, listSessionsByAgent, listUserPeople, loadCompactionSourceSnapshot, loadLlmMessagesForSession, loadTranscriptHistoryRowsForSession, loadTranscriptRows, loadTranscriptRowsForSession, mergeUserPeople, metadataToSessionInsert, mutateQueuedSessionInput, openXopcDatabase, paginateTranscriptMessages, patchSessionMetadata, pruneBoundedKnowledgeSourceItems, readSchemaVersion, readSchemaVersionForTest, reconcileConnectorAccount, recordActivityEvent, recoverSessionInputState, recoverStaleConnectorLearningJobs, refreshConnectorAccountCurrent, releaseConnectorWebhookDelivery, replaceConnectorCatalogEntries, replaceLatestSessionTurnAndQueueInput, replaceSidebarLayout, replaceTranscriptRows, replaceUserPeopleIndex, requireXopcDatabase, resetSessionRecord, resetXopcDatabaseSingletonForTest, resolveClarification, resolveMigrationsDir, resolveSessionAgentId, resolveXopcDatabasePath, restoreBeforeCompactionBoundary, revokeDevice, revokeEndpointPrincipal, rotateDeviceRefreshToken, runSqliteWriteTransaction, searchSessionTranscript, sessionConfigRowToConfig, sessionRowToMetadata, setBrowserTabBinding, setCollaborationRuleStatus, setConnectorLearningPaused, setEndpointSessionBinding, setInteractionState, setKnowledgeConsumerWatermark, setKnowledgeSourceCursor, setKnowledgeSourceItemSynthesisStatus, setSessionConfig, setSessionInputStatus, setSessionTaskPlan, setUserTrustPolicy, signGatewayPayload, sortBySidebarLayout, startEndpointToolInvocationAudit, startKnowledgeSyncRun, summarizeUserPeople, supersedeActiveClarification, touchEndpointPrincipal, transcriptEntryRowToStoredRow, updateConnectorLearningJob, updateInteractionStateFromMessage, updateRelationshipSettings, updateSessionConfig, updateSessionStats, updateUserPerson, upsertConnectorActionMetadata, upsertConnectorCatalogEntry, upsertConnectorConnection, upsertConnectorInstallation, upsertConnectorSyncPolicy, upsertKnowledgeSourceItems, upsertNoteAgentContextRecord, upsertNoteRecord, validateLatestSessionTurnTarget };
|
|
@@ -25,6 +25,7 @@ export declare function getKnowledgeSourceCursor(sourceInstanceId: string, colle
|
|
|
25
25
|
export declare function setKnowledgeSourceCursor(sourceInstanceId: string, collectionScope: string, cursor: string | undefined): void;
|
|
26
26
|
export declare function upsertKnowledgeSourceItems(inputs: KnowledgeSourceItemInput[], nowMs?: number): {
|
|
27
27
|
items: KnowledgeSourceItem[];
|
|
28
|
+
changedItemIds: string[];
|
|
28
29
|
created: number;
|
|
29
30
|
updated: number;
|
|
30
31
|
unchanged: number;
|
|
@@ -144,6 +144,7 @@ function setKnowledgeSourceCursor(sourceInstanceId, collectionScope, cursor) {
|
|
|
144
144
|
function upsertKnowledgeSourceItems(inputs, nowMs = Date.now()) {
|
|
145
145
|
return runSqliteWriteTransaction((db) => {
|
|
146
146
|
const items = [];
|
|
147
|
+
const changedItemIds = [];
|
|
147
148
|
let created = 0;
|
|
148
149
|
let updated = 0;
|
|
149
150
|
let unchanged = 0;
|
|
@@ -184,6 +185,7 @@ function upsertKnowledgeSourceItems(inputs, nowMs = Date.now()) {
|
|
|
184
185
|
updated_at = excluded.updated_at`).run(id, input.sourceInstanceId, input.collectionScope, input.externalId, input.itemType, input.authorRole ?? null, parseTimestamp(input.occurredAt), parseTimestamp(input.sourceUpdatedAt), input.contentHash, input.normalizedText ?? null, input.payloadRef ?? null, JSON.stringify(input.metadata ?? {}), input.sensitivity ?? "normal", input.retentionClass ?? "bounded", input.synthesisPipeline ?? "user_understanding", input.synthesisStatus ?? "pending", parseTimestamp(input.deletedAt), existing?.created_at ?? nowMs, nowMs);
|
|
185
186
|
const row = db.prepare(`SELECT * FROM knowledge_source_items WHERE item_id = ?`).get(id);
|
|
186
187
|
items.push(sourceItemFromRow(row));
|
|
188
|
+
changedItemIds.push(id);
|
|
187
189
|
const changeKind = input.deletedAt ? "deleted" : existing ? "modified" : "added";
|
|
188
190
|
db.prepare(`INSERT INTO knowledge_source_changes (
|
|
189
191
|
change_id, source_instance_id, source_item_id, change_kind,
|
|
@@ -194,6 +196,7 @@ function upsertKnowledgeSourceItems(inputs, nowMs = Date.now()) {
|
|
|
194
196
|
}
|
|
195
197
|
return {
|
|
196
198
|
items,
|
|
199
|
+
changedItemIds,
|
|
197
200
|
created,
|
|
198
201
|
updated,
|
|
199
202
|
unchanged
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
ALTER TABLE knowledge_item_status_events RENAME TO knowledge_item_status_events_v199;
|
|
2
|
+
ALTER TABLE knowledge_items RENAME TO knowledge_items_v199;
|
|
3
|
+
|
|
4
|
+
CREATE TABLE knowledge_items (
|
|
5
|
+
knowledge_id TEXT PRIMARY KEY,
|
|
6
|
+
principal_id TEXT NOT NULL,
|
|
7
|
+
kind TEXT NOT NULL CHECK(kind IN (
|
|
8
|
+
'work_thread', 'project_fact', 'workspace_fact', 'decision', 'task_lesson',
|
|
9
|
+
'commitment', 'open_question', 'episode', 'note'
|
|
10
|
+
)),
|
|
11
|
+
scope_type TEXT NOT NULL CHECK(scope_type IN ('global', 'agent', 'workspace', 'project', 'session')),
|
|
12
|
+
scope_id TEXT,
|
|
13
|
+
content TEXT NOT NULL,
|
|
14
|
+
canonical_key TEXT NOT NULL,
|
|
15
|
+
status TEXT NOT NULL CHECK(status IN ('candidate', 'active', 'needs_review', 'stale', 'archived', 'rejected')),
|
|
16
|
+
confidence REAL NOT NULL CHECK(confidence >= 0 AND confidence <= 1),
|
|
17
|
+
importance REAL NOT NULL CHECK(importance >= 0 AND importance <= 1),
|
|
18
|
+
valid_from INTEGER,
|
|
19
|
+
valid_to INTEGER,
|
|
20
|
+
expires_at INTEGER,
|
|
21
|
+
review_at INTEGER,
|
|
22
|
+
origin_class TEXT NOT NULL CHECK(origin_class IN ('owner', 'agent', 'system', 'untrusted')),
|
|
23
|
+
source_agent_id TEXT,
|
|
24
|
+
source_conversation_id TEXT,
|
|
25
|
+
source_turn_id TEXT,
|
|
26
|
+
derived_from_recalled_context INTEGER NOT NULL DEFAULT 0 CHECK(derived_from_recalled_context IN (0, 1)),
|
|
27
|
+
source_json TEXT NOT NULL DEFAULT '{}' CHECK(json_valid(source_json)),
|
|
28
|
+
created_at INTEGER NOT NULL,
|
|
29
|
+
updated_at INTEGER NOT NULL,
|
|
30
|
+
record_class TEXT NOT NULL DEFAULT 'memory' CHECK(record_class IN ('memory', 'source_index')),
|
|
31
|
+
CHECK(valid_to IS NULL OR valid_from IS NULL OR valid_to >= valid_from)
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
INSERT INTO knowledge_items (
|
|
35
|
+
knowledge_id, principal_id, kind, scope_type, scope_id, content, canonical_key,
|
|
36
|
+
status, confidence, importance, valid_from, valid_to, expires_at, review_at,
|
|
37
|
+
origin_class, source_agent_id, source_conversation_id, source_turn_id,
|
|
38
|
+
derived_from_recalled_context, source_json, created_at, updated_at, record_class
|
|
39
|
+
)
|
|
40
|
+
SELECT
|
|
41
|
+
knowledge_id,
|
|
42
|
+
principal_id,
|
|
43
|
+
CASE
|
|
44
|
+
WHEN record_class = 'memory' AND canonical_key LIKE 'connected-thread:%'
|
|
45
|
+
THEN 'work_thread'
|
|
46
|
+
ELSE kind
|
|
47
|
+
END,
|
|
48
|
+
CASE
|
|
49
|
+
WHEN record_class = 'memory' AND canonical_key LIKE 'connected-thread:%'
|
|
50
|
+
THEN 'global'
|
|
51
|
+
ELSE scope_type
|
|
52
|
+
END,
|
|
53
|
+
CASE
|
|
54
|
+
WHEN record_class = 'memory' AND canonical_key LIKE 'connected-thread:%'
|
|
55
|
+
THEN NULL
|
|
56
|
+
ELSE scope_id
|
|
57
|
+
END,
|
|
58
|
+
content, canonical_key, status, confidence, importance, valid_from, valid_to,
|
|
59
|
+
expires_at, review_at, origin_class, source_agent_id, source_conversation_id,
|
|
60
|
+
source_turn_id, derived_from_recalled_context, source_json, created_at, updated_at,
|
|
61
|
+
record_class
|
|
62
|
+
FROM knowledge_items_v199;
|
|
63
|
+
|
|
64
|
+
CREATE TABLE knowledge_item_status_events (
|
|
65
|
+
event_id TEXT PRIMARY KEY,
|
|
66
|
+
knowledge_id TEXT NOT NULL REFERENCES knowledge_items(knowledge_id) ON DELETE CASCADE,
|
|
67
|
+
from_status TEXT,
|
|
68
|
+
to_status TEXT NOT NULL,
|
|
69
|
+
actor_type TEXT NOT NULL CHECK(actor_type IN ('user', 'agent', 'runtime', 'maintenance', 'migration')),
|
|
70
|
+
reason TEXT NOT NULL,
|
|
71
|
+
created_at INTEGER NOT NULL
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
INSERT INTO knowledge_item_status_events
|
|
75
|
+
SELECT * FROM knowledge_item_status_events_v199;
|
|
76
|
+
|
|
77
|
+
DROP TABLE knowledge_item_status_events_v199;
|
|
78
|
+
DROP TABLE knowledge_items_v199;
|
|
79
|
+
|
|
80
|
+
CREATE INDEX idx_knowledge_items_status
|
|
81
|
+
ON knowledge_items(principal_id, status, updated_at DESC);
|
|
82
|
+
CREATE INDEX idx_knowledge_items_scope
|
|
83
|
+
ON knowledge_items(principal_id, scope_type, scope_id, status);
|
|
84
|
+
CREATE INDEX idx_knowledge_items_lifecycle
|
|
85
|
+
ON knowledge_items(status, expires_at, review_at);
|
|
86
|
+
CREATE INDEX idx_knowledge_items_class_status
|
|
87
|
+
ON knowledge_items(principal_id, record_class, status, updated_at DESC);
|
|
88
|
+
CREATE UNIQUE INDEX idx_knowledge_items_canonical
|
|
89
|
+
ON knowledge_items(principal_id, canonical_key, scope_type, COALESCE(scope_id, ''))
|
|
90
|
+
WHERE status IN ('candidate', 'active', 'needs_review', 'stale');
|
|
91
|
+
CREATE INDEX idx_knowledge_item_status_events_item
|
|
92
|
+
ON knowledge_item_status_events(knowledge_id, created_at DESC);
|