@xopcai/xopc 0.0.223 → 0.0.225
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/demo-memory/src/index.js +10 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store--GBciH10.js → activity-store-CtTYnku4.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-C93T3FLD.js → agent-avatar-dicebear-dizuqu_4.js} +1 -1
- package/dist/gateway/static/root/assets/agents-DeEEFZJ4.js +68 -0
- package/dist/gateway/static/root/assets/{api-HoIz_ija.js → api-CLRMz2BT.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-Bhl8Xluk.js → app-management-settings-panel-Cnk-DtQh.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-CywEN-kG.js → appearance-settings-wP0rogVI.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-BZY09nuJ.js → apps-page-Db5YNHVM.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-CteCVsBP.js → archive-plugin-Cpzsm-DM.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-CbNE_EPd.js → attachment-load-Bd2OOoEK.js} +1 -1
- package/dist/gateway/static/root/assets/{automations-page-Bcqk6tOx.js → automations-page-DNqhguyk.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-CNT05YTb.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-M_i3WS5M.js → binary-plugins-Dcma5HdI.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-eg9LEH2o.js → block-editor-D-B8ThwK.js} +3 -3
- package/dist/gateway/static/root/assets/{browser-settings-page-kKwbvzjj.js → browser-settings-page-UbDj3LIq.js} +3 -3
- package/dist/gateway/static/root/assets/{browser-workflow-inputs-1UZ0vnIy.js → browser-workflow-inputs-BAPZIXrs.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-workflows-page-D8ATQqZ5.js → browser-workflows-page-DHtaSKEh.js} +1 -1
- package/dist/gateway/static/root/assets/capabilities-settings-panel-CiO152QS.js +7 -0
- package/dist/gateway/static/root/assets/{capability-presets-api-yNqTIuyd.js → capability-presets-api-zsZQ7im3.js} +1 -1
- package/dist/gateway/static/root/assets/{capability-presets-settings-panel-CgdRkwnk.js → capability-presets-settings-panel-Bc_hRwfL.js} +2 -2
- package/dist/gateway/static/root/assets/{channel-recipient-api-krezGsKc.js → channel-recipient-api-Cp8iaaXp.js} +1 -1
- package/dist/gateway/static/root/assets/channels-settings-CFW7zBoT.js +1 -0
- package/dist/gateway/static/root/assets/channels-status-swr-5rNVq7iI.js +1 -0
- package/dist/gateway/static/root/assets/{chat-terminal-dock-DQ5bB4Su.js → chat-terminal-dock-Dr6Rq2ln.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-DLBr5nre.js +2 -0
- package/dist/gateway/static/root/assets/{cron-expression-CEwPkdhh.js → cron-expression-BiXrpzmo.js} +1 -1
- package/dist/gateway/static/root/assets/{date-picker-DDAxTir8.js → date-picker-BPuRtwKt.js} +1 -1
- package/dist/gateway/static/root/assets/{dependency-picker-CYVoSZwI.js → dependency-picker-BNC_W7wI.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-CrNKfW_c.js → desktop-pet-DzOpt5nI.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-C06PaB46.js → desktop-pet-settings-BW0brCvH.js} +1 -1
- package/dist/gateway/static/root/assets/{directory-picker-path-field--D7laeLF.js → directory-picker-path-field-Baml0uTS.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-Dn4Px9KQ.js → extension-debug-page-CBXyKmfS.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-DzLf3fMQ.js → extension-page-BBhcr_SZ.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-DIchwtvB.js → extension-settings-page-4rwWpN9_.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-api-SmTGLhqK.js → gateway-config-api-Dg-BlBe4.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-yUxMMVjK.js → gateway-config-swr-Du0MvK9s.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-settings-yCDkOYzA.js → gateway-settings-BOuYZOYe.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-9mrsL84j.js → gateway-startup-retry-JbjcHCaN.js} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-settings-CquIULHX.js → heartbeat-settings-Dq4YAlSx.js} +1 -1
- package/dist/gateway/static/root/assets/home-page-BIXkO0Ck.js +1 -0
- package/dist/gateway/static/root/assets/{image-generation-api-CgFAGDi8.js → image-generation-api-G2tfPvKP.js} +1 -1
- package/dist/gateway/static/root/assets/index-Csccu8sa.js +74 -0
- package/dist/gateway/static/root/assets/index-D3_xSYKd.css +2 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-DI2To7yl.js → keyboard-shortcuts-settings-L1Vtxgp9.js} +1 -1
- package/dist/gateway/static/root/assets/local-app-workbench-page-D-eacBcO.js +2 -0
- package/dist/gateway/static/root/assets/{local-apps-page-CSEJsQ1F.js → local-apps-page--thlkBLS.js} +1 -1
- package/dist/gateway/static/root/assets/{locale-store-CPylQjH9.js → locale-store-DqJz-cOR.js} +1 -1
- package/dist/gateway/static/root/assets/logs-page-BRCglHvd.js +2 -0
- package/dist/gateway/static/root/assets/{management-settings-CgyaIyuk.js → management-settings-p55fR4XO.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-split-paG9qap9.js → markdown-split-DwMcRlBR.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-view-CUsob4Pz.js → markdown-view-CTB9u15e.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-0Q-c_QIy.js → media-plugins-O6H3GZn7.js} +1 -1
- package/dist/gateway/static/root/assets/{messages-B82nsi9k.js → messages-CeydamsI.js} +3 -3
- package/dist/gateway/static/root/assets/{notes-api-CfKZYrBC.js → notes-api-CrjQbmk1.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-page-Bvb-ycX_.js → notes-page-miO9ig9C.js} +1 -1
- package/dist/gateway/static/root/assets/notes-workbench-_13lmvmF.js +4 -0
- package/dist/gateway/static/root/assets/{product-open-page-DrvBwAns.js → product-open-page-BOu07nXf.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-BStRkOQr.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-CY03RxVr.js +1 -0
- package/dist/gateway/static/root/assets/{registry-api-B_5D8epF.js → registry-api-Bf_HDLUJ.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-B19llkld.js +1 -0
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-DKjdN4Lr.js → runtime-tools-settings-panel-DthuRqUH.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-DskqaNqC.js → schema-form-8W8PhXxa.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-BDA2qbTd.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-BONIDX4v.js +1 -0
- package/dist/gateway/static/root/assets/{settings-form-section-CZlMvHA9.js → settings-form-section-CrsKGYiG.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-DS6lcAg9.js → settings-loading-skeleton-WJtI0AAq.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-oE5J9tsV.js → settings-page-PCjwRF47.js} +1 -1
- package/dist/gateway/static/root/assets/{setup-status-panel-C7oFCIqD.js → setup-status-panel-D65CwlNC.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-CPFAj8NE.js → share-preview-page-BGtvLLeZ.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-CdzVKrBl.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-CsRWid5h.js +1 -0
- package/dist/gateway/static/root/assets/{skills-page-Bh4gFi8e.js → skills-page-C_npyryI.js} +1 -1
- package/dist/gateway/static/root/assets/{skills-page.utils-BQaUWP9z.js → skills-page.utils-C46Sd78k.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-COAZoh_O.js → system-settings-panel-DomTLwki.js} +1 -1
- package/dist/gateway/static/root/assets/task-detail-page-B6YFX7kK.js +1 -0
- package/dist/gateway/static/root/assets/{theme-store-BN-32Fz5.js → theme-store-Ce7wq__X.js} +1 -1
- package/dist/gateway/static/root/assets/{use-autosave-BAkToU15.js → use-autosave-Do9mCRcY.js} +1 -1
- package/dist/gateway/static/root/assets/{user-context-page-Br5wgARM.js → user-context-page-CiCQA40E.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-api-key-field-CC4z9-ux.js → voice-api-key-field-Bc5p-0tX.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-dLVUYSSE.js → work-discovery-overlay-BieqsmT1.js} +1 -1
- package/dist/gateway/static/root/assets/{workflow-run-setup-panel-BYU5-0KF.js → workflow-run-setup-panel-DVj8iYvm.js} +2 -2
- package/dist/gateway/static/root/assets/workflows-page-AG04TTuH.js +5 -0
- package/dist/gateway/static/root/index.html +11 -11
- package/dist/package.js +1 -1
- package/dist/src/agent/embedded/run-turn.js +2 -0
- package/dist/src/agent/mcp/bundle-mcp-config.d.ts +9 -1
- package/dist/src/agent/mcp/bundle-mcp-config.js +11 -15
- package/dist/src/agent/mcp/embedded-mcp.d.ts +1 -1
- package/dist/src/agent/mcp/index.d.ts +1 -0
- package/dist/src/agent/mcp/index.js +7 -1
- package/dist/src/agent/mcp/mcp-http.d.ts +4 -0
- package/dist/src/agent/mcp/mcp-http.js +25 -1
- package/dist/src/agent/mcp/mcp-transport-config.d.ts +4 -0
- package/dist/src/agent/mcp/mcp-transport-config.js +1 -0
- package/dist/src/agent/mcp/mcp-transport.d.ts +7 -1
- package/dist/src/agent/mcp/mcp-transport.js +38 -11
- package/dist/src/agent/mcp/oauth/index.d.ts +6 -0
- package/dist/src/agent/mcp/oauth/index.js +6 -0
- package/dist/src/agent/mcp/oauth/mcp-oauth-errors.d.ts +5 -0
- package/dist/src/agent/mcp/oauth/mcp-oauth-errors.js +14 -0
- package/dist/src/agent/mcp/oauth/mcp-oauth-manager.d.ts +25 -0
- package/dist/src/agent/mcp/oauth/mcp-oauth-manager.js +219 -0
- package/dist/src/agent/mcp/oauth/mcp-oauth-provider.d.ts +33 -0
- package/dist/src/agent/mcp/oauth/mcp-oauth-provider.js +103 -0
- package/dist/src/agent/mcp/oauth/mcp-oauth-session.d.ts +29 -0
- package/dist/src/agent/mcp/oauth/mcp-oauth-session.js +169 -0
- package/dist/src/agent/mcp/oauth/mcp-oauth-store.d.ts +9 -0
- package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +79 -0
- package/dist/src/agent/mcp/oauth/mcp-oauth-types.d.ts +22 -0
- package/dist/src/agent/mcp/oauth/mcp-oauth-types.js +1 -0
- package/dist/src/agent/memory/builtin-provider.js +23 -4
- package/dist/src/agent/memory/compaction-promotion.d.ts +18 -0
- package/dist/src/agent/memory/compaction-promotion.js +211 -0
- package/dist/src/agent/memory/context/types.d.ts +5 -0
- package/dist/src/agent/memory/manager.d.ts +3 -0
- package/dist/src/agent/memory/manager.js +12 -2
- package/dist/src/agent/memory/trusted-recall.d.ts +7 -0
- package/dist/src/agent/memory/trusted-recall.js +53 -0
- package/dist/src/agent/memory/turn-provenance.d.ts +14 -0
- package/dist/src/agent/memory/turn-provenance.js +60 -0
- package/dist/src/agent/memory/types.d.ts +18 -3
- package/dist/src/agent/memory/user-context-coordinator.js +57 -6
- package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.d.ts +2 -0
- package/dist/src/agent/tools/memory-tool.js +5 -1
- package/dist/src/capabilities/store-connector.js +99 -10
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/cli/commands/gateway/lifecycle.js +1 -1
- package/dist/src/config/config-mutation.d.ts +14 -0
- package/dist/src/config/config-mutation.js +33 -0
- package/dist/src/config/index.js +3 -3
- package/dist/src/config/paths.d.ts +2 -0
- package/dist/src/config/paths.js +5 -1
- package/dist/src/config/schema.d.ts +17 -0
- package/dist/src/config/schema.js +26 -2
- package/dist/src/connectors/auth-provider-registry.d.ts +1 -1
- package/dist/src/connectors/auth-provider-registry.js +23 -2
- package/dist/src/connectors/install.js +3 -3
- package/dist/src/connectors/instances.d.ts +2 -1
- package/dist/src/connectors/instances.js +15 -5
- package/dist/src/connectors/materialize.d.ts +1 -0
- package/dist/src/connectors/materialize.js +9 -1
- package/dist/src/connectors/runtime-adapter-registry.js +1 -0
- package/dist/src/connectors/types.d.ts +4 -1
- package/dist/src/extensions/connector-dependencies.d.ts +10 -0
- package/dist/src/extensions/connector-dependencies.js +65 -0
- package/dist/src/extensions/install.js +27 -0
- package/dist/src/extensions/normalize-manifest.js +1 -0
- package/dist/src/extensions/types/manifest.d.ts +2 -0
- package/dist/src/gateway/heartbeat/service.js +1 -1
- package/dist/src/gateway/hono/routes/capabilities.js +8 -8
- package/dist/src/gateway/hono/routes/connectors.js +87 -55
- package/dist/src/gateway/hono/routes/mcp.js +77 -5
- package/dist/src/gateway/hono/routes/voice.js +1 -1
- package/dist/src/gateway/run-loop.js +3 -0
- package/dist/src/gateway/server.d.ts +3 -0
- package/dist/src/gateway/server.js +30 -5
- package/dist/src/heartbeat/index.js +1 -1
- package/dist/src/infra/update-restart.js +1 -1
- package/dist/src/knowledge/connected-knowledge-pipeline.js +26 -4
- package/dist/src/session/store.js +27 -0
- package/dist/src/storage/sqlite/memory-records-repository.d.ts +9 -1
- package/dist/src/storage/sqlite/memory-records-repository.js +40 -6
- package/dist/src/storage/sqlite/migrations/134_memory_provenance.sql +18 -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/user-context/planner.js +8 -3
- package/dist/src/voice/stt/transcribe-core.js +17 -1
- package/dist/src/voice/stt/types.d.ts +1 -1
- package/package.json +3 -3
- package/dist/gateway/static/root/assets/agents-Ba4XF0Im.js +0 -68
- package/dist/gateway/static/root/assets/automations-workspace-DtI6vsMf.js +0 -6
- package/dist/gateway/static/root/assets/capabilities-settings-panel-CZRcis8B.js +0 -7
- package/dist/gateway/static/root/assets/channels-settings-DETCY0Ku.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-DMxB7slL.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-D9D92u28.js +0 -2
- package/dist/gateway/static/root/assets/home-page-COSGBh4c.js +0 -1
- package/dist/gateway/static/root/assets/index-5XkDWH_Q.css +0 -2
- package/dist/gateway/static/root/assets/index-wnDPGRTi.js +0 -74
- package/dist/gateway/static/root/assets/local-app-workbench-page-CAF5SZXv.js +0 -2
- package/dist/gateway/static/root/assets/logs-page-D1KFPHL1.js +0 -2
- package/dist/gateway/static/root/assets/notes-workbench-DelxGBof.js +0 -4
- package/dist/gateway/static/root/assets/project-detail-page-C2EnYXEQ.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-BiMPU6Oa.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-CpbNivVs.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-BxKtzsKI.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-BfBKMMUx.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-B46DWZK4.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-CyKolUZ-.js +0 -1
- package/dist/gateway/static/root/assets/task-detail-page-CXkhprf-.js +0 -1
- package/dist/gateway/static/root/assets/workflows-page-CJ24a1HM.js +0 -5
- package/dist/src/extensions/bundle-mcp.d.ts +0 -18
- package/dist/src/extensions/bundle-mcp.js +0 -69
|
@@ -86,7 +86,16 @@ function rowToRecord(row, evidence = []) {
|
|
|
86
86
|
...row.session_key ? { sessionKey: row.session_key } : {},
|
|
87
87
|
...row.project_id ? { projectId: row.project_id } : {}
|
|
88
88
|
},
|
|
89
|
-
provenance: {
|
|
89
|
+
provenance: {
|
|
90
|
+
sourceAgentId: row.source_agent_id,
|
|
91
|
+
originClass: row.origin_class,
|
|
92
|
+
sessionKind: row.session_kind,
|
|
93
|
+
observedAt: new Date(row.observed_at).toISOString(),
|
|
94
|
+
...row.source_session_id ? { sourceSessionId: row.source_session_id } : {},
|
|
95
|
+
...row.source_turn_id ? { sourceTurnId: row.source_turn_id } : {},
|
|
96
|
+
...row.supersedes_key ? { supersedesKey: row.supersedes_key } : {},
|
|
97
|
+
derivedFromRecalledContext: row.derived_from_recalled_context === 1
|
|
98
|
+
},
|
|
90
99
|
content: row.content,
|
|
91
100
|
source: parseSource(row.source_json),
|
|
92
101
|
...row.confidence != null ? { confidence: row.confidence } : {},
|
|
@@ -131,6 +140,9 @@ function upsertMemoryRecord(input) {
|
|
|
131
140
|
const validTo = parseOptionalTimestamp(input.validTo);
|
|
132
141
|
const reviewAfter = parseOptionalTimestamp(input.reviewAfter);
|
|
133
142
|
const expiresAt = parseOptionalTimestamp(input.expiresAt);
|
|
143
|
+
const observedAt = parseOptionalTimestamp(input.observedAt) ?? now;
|
|
144
|
+
const originClass = input.originClass ?? "untrusted";
|
|
145
|
+
const sessionKind = input.sessionKind ?? "unknown";
|
|
134
146
|
const source = {
|
|
135
147
|
...input.source ?? {},
|
|
136
148
|
provider: input.source?.provider ?? input.providerId
|
|
@@ -141,8 +153,10 @@ function upsertMemoryRecord(input) {
|
|
|
141
153
|
content, source_json, confidence, tags_json, status, sensitivity,
|
|
142
154
|
canonical_key, explicitness, durability, importance,
|
|
143
155
|
disclosure_policy, valid_from, valid_to, review_after, expires_at,
|
|
144
|
-
supersedes_record_id, conflict_group_id,
|
|
145
|
-
|
|
156
|
+
supersedes_record_id, conflict_group_id,
|
|
157
|
+
origin_class, session_kind, observed_at, source_session_id, source_turn_id,
|
|
158
|
+
supersedes_key, derived_from_recalled_context, created_at, updated_at
|
|
159
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
146
160
|
ON CONFLICT(record_id) DO UPDATE SET
|
|
147
161
|
provider_id = excluded.provider_id,
|
|
148
162
|
kind = excluded.kind,
|
|
@@ -168,7 +182,14 @@ function upsertMemoryRecord(input) {
|
|
|
168
182
|
expires_at = excluded.expires_at,
|
|
169
183
|
supersedes_record_id = excluded.supersedes_record_id,
|
|
170
184
|
conflict_group_id = excluded.conflict_group_id,
|
|
171
|
-
|
|
185
|
+
origin_class = excluded.origin_class,
|
|
186
|
+
session_kind = excluded.session_kind,
|
|
187
|
+
observed_at = excluded.observed_at,
|
|
188
|
+
source_session_id = excluded.source_session_id,
|
|
189
|
+
source_turn_id = excluded.source_turn_id,
|
|
190
|
+
supersedes_key = excluded.supersedes_key,
|
|
191
|
+
derived_from_recalled_context = excluded.derived_from_recalled_context,
|
|
192
|
+
updated_at = excluded.updated_at`).run(id, input.providerId, input.kind, input.userId ?? "local-owner", input.sourceAgentId, input.workspaceId ?? null, input.sessionKey ?? null, input.projectId ?? null, input.content, JSON.stringify(source), input.confidence ?? null, JSON.stringify(input.tags ?? []), status, sensitivity, input.canonicalKey ?? null, explicitness, durability, importance, disclosurePolicy, validFrom, validTo, reviewAfter, expiresAt, input.supersedesRecordId ?? null, input.conflictGroupId ?? null, originClass, sessionKind, observedAt, input.sourceSessionId ?? null, input.sourceTurnId ?? null, input.supersedesKey ?? null, input.derivedFromRecalledContext ? 1 : 0, now, now);
|
|
172
193
|
upsertMemoryRecordFts(db, {
|
|
173
194
|
...input,
|
|
174
195
|
id
|
|
@@ -204,7 +225,16 @@ function upsertMemoryRecord(input) {
|
|
|
204
225
|
...input.sessionKey ? { sessionKey: input.sessionKey } : {},
|
|
205
226
|
...input.projectId ? { projectId: input.projectId } : {}
|
|
206
227
|
},
|
|
207
|
-
provenance: {
|
|
228
|
+
provenance: {
|
|
229
|
+
sourceAgentId: input.sourceAgentId,
|
|
230
|
+
originClass,
|
|
231
|
+
sessionKind,
|
|
232
|
+
observedAt: new Date(observedAt).toISOString(),
|
|
233
|
+
...input.sourceSessionId ? { sourceSessionId: input.sourceSessionId } : {},
|
|
234
|
+
...input.sourceTurnId ? { sourceTurnId: input.sourceTurnId } : {},
|
|
235
|
+
...input.supersedesKey ? { supersedesKey: input.supersedesKey } : {},
|
|
236
|
+
derivedFromRecalledContext: input.derivedFromRecalledContext ?? false
|
|
237
|
+
},
|
|
208
238
|
content: input.content,
|
|
209
239
|
source,
|
|
210
240
|
...input.confidence != null ? { confidence: input.confidence } : {},
|
|
@@ -339,6 +369,10 @@ function searchMemoryRecords(options) {
|
|
|
339
369
|
filters.push(`f.kind IN (${options.kinds.map(() => "?").join(", ")})`);
|
|
340
370
|
params.push(...options.kinds);
|
|
341
371
|
}
|
|
372
|
+
if (options.trustedOnly) {
|
|
373
|
+
filters.push(`r.origin_class IN ('owner', 'agent')`);
|
|
374
|
+
filters.push("r.derived_from_recalled_context = 0");
|
|
375
|
+
}
|
|
342
376
|
const statuses = options.statuses && options.statuses.length > 0 ? options.statuses : ["active"];
|
|
343
377
|
filters.push(`r.status IN (${statuses.map(() => "?").join(", ")})`);
|
|
344
378
|
params.push(...statuses);
|
|
@@ -366,7 +400,7 @@ function searchMemoryRecords(options) {
|
|
|
366
400
|
visibleToWorkspaceId: options.visibleToWorkspaceId,
|
|
367
401
|
unscopedWorkspaceOnly: options.unscopedWorkspaceOnly,
|
|
368
402
|
limit: 500
|
|
369
|
-
}).filter((record) => statuses.includes(record.status ?? "active") && (!options.kinds?.length || options.kinds.includes(record.kind)));
|
|
403
|
+
}).filter((record) => statuses.includes(record.status ?? "active") && (!options.kinds?.length || options.kinds.includes(record.kind))).filter((record) => !options.trustedOnly || (record.provenance.originClass === "owner" || record.provenance.originClass === "agent") && !record.provenance.derivedFromRecalledContext);
|
|
370
404
|
const candidateById = new Map(candidateRecords.map((record) => [record.id, record]));
|
|
371
405
|
const missingRows = rows.filter((row) => !candidateById.has(row.record_id));
|
|
372
406
|
const missingEvidence = listMemoryEvidenceForRecords(missingRows.map((row) => row.record_id));
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
ALTER TABLE memory_records ADD COLUMN origin_class TEXT NOT NULL DEFAULT 'untrusted'
|
|
2
|
+
CHECK (origin_class IN ('owner', 'agent', 'untrusted', 'system'));
|
|
3
|
+
ALTER TABLE memory_records ADD COLUMN session_kind TEXT NOT NULL DEFAULT 'unknown'
|
|
4
|
+
CHECK (session_kind IN ('interactive', 'group', 'automation', 'workflow', 'subagent', 'background', 'unknown'));
|
|
5
|
+
ALTER TABLE memory_records ADD COLUMN observed_at INTEGER NOT NULL DEFAULT 0;
|
|
6
|
+
ALTER TABLE memory_records ADD COLUMN source_session_id TEXT;
|
|
7
|
+
ALTER TABLE memory_records ADD COLUMN source_turn_id TEXT;
|
|
8
|
+
ALTER TABLE memory_records ADD COLUMN supersedes_key TEXT;
|
|
9
|
+
ALTER TABLE memory_records ADD COLUMN derived_from_recalled_context INTEGER NOT NULL DEFAULT 0
|
|
10
|
+
CHECK (derived_from_recalled_context IN (0, 1));
|
|
11
|
+
|
|
12
|
+
UPDATE memory_records
|
|
13
|
+
SET observed_at = CASE WHEN observed_at = 0 THEN created_at ELSE observed_at END;
|
|
14
|
+
|
|
15
|
+
CREATE INDEX idx_memory_records_trusted_scope_updated
|
|
16
|
+
ON memory_records(origin_class, derived_from_recalled_context, status, workspace_id, updated_at DESC);
|
|
17
|
+
CREATE INDEX idx_memory_records_source_turn
|
|
18
|
+
ON memory_records(source_session_id, source_turn_id);
|
|
@@ -3,7 +3,7 @@ import type { ApplyMigrationsOptions } from './types.js';
|
|
|
3
3
|
/** Baseline schema version applied from schema.sql on first open. */
|
|
4
4
|
export declare const XOPC_DB_BASELINE_SCHEMA_VERSION = 11;
|
|
5
5
|
/** Latest schema version this release supports (increment when adding migrations). */
|
|
6
|
-
export declare const XOPC_DB_SCHEMA_VERSION =
|
|
6
|
+
export declare const XOPC_DB_SCHEMA_VERSION = 134;
|
|
7
7
|
export declare function resolveMigrationsDir(override?: string): string;
|
|
8
8
|
/**
|
|
9
9
|
* Apply sequential SQL migrations from (currentVersion + 1) through targetVersion.
|
|
@@ -12,7 +12,7 @@ const log = createLogger("Sqlite:Migrations");
|
|
|
12
12
|
/** Baseline schema version applied from schema.sql on first open. */
|
|
13
13
|
const XOPC_DB_BASELINE_SCHEMA_VERSION = 11;
|
|
14
14
|
/** Latest schema version this release supports (increment when adding migrations). */
|
|
15
|
-
const XOPC_DB_SCHEMA_VERSION =
|
|
15
|
+
const XOPC_DB_SCHEMA_VERSION = 134;
|
|
16
16
|
const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
|
|
17
17
|
function backupBeforeTaskCutover(db, databasePath) {
|
|
18
18
|
db.exec("PRAGMA wal_checkpoint(FULL)");
|
|
@@ -57,7 +57,7 @@ function applySingleMigration(db, migration) {
|
|
|
57
57
|
* Each step runs in its own transaction and updates schema_meta on success.
|
|
58
58
|
*/
|
|
59
59
|
function applyPendingMigrations(db, options = {}) {
|
|
60
|
-
const targetVersion = options.targetVersion ??
|
|
60
|
+
const targetVersion = options.targetVersion ?? 134;
|
|
61
61
|
let currentVersion = readSchemaVersion(db);
|
|
62
62
|
if (currentVersion > targetVersion) throw new DatabaseSchemaTooNewError(currentVersion, targetVersion);
|
|
63
63
|
if (currentVersion >= targetVersion) return currentVersion;
|
|
@@ -94,7 +94,7 @@ function applyPendingMigrations(db, options = {}) {
|
|
|
94
94
|
}
|
|
95
95
|
/** Inspect schema version without mutating the database. */
|
|
96
96
|
function inspectSchemaMigrationStatus(db, options = {}) {
|
|
97
|
-
const appVersion = options.targetVersion ??
|
|
97
|
+
const appVersion = options.targetVersion ?? 134;
|
|
98
98
|
const dbVersion = readSchemaVersion(db);
|
|
99
99
|
if (dbVersion > appVersion) return {
|
|
100
100
|
dbVersion,
|
|
@@ -19,7 +19,7 @@ const log = createLogger('Sqlite:Migrations');
|
|
|
19
19
|
export const XOPC_DB_BASELINE_SCHEMA_VERSION = 11;
|
|
20
20
|
|
|
21
21
|
/** Latest schema version this release supports (increment when adding migrations). */
|
|
22
|
-
export const XOPC_DB_SCHEMA_VERSION =
|
|
22
|
+
export const XOPC_DB_SCHEMA_VERSION = 134;
|
|
23
23
|
|
|
24
24
|
const MODULE_DIR = dirname(fileURLToPath(import.meta.url));
|
|
25
25
|
|
|
@@ -160,6 +160,8 @@ var UserContextPlanner = class {
|
|
|
160
160
|
rejected: [],
|
|
161
161
|
consentRequests: [],
|
|
162
162
|
estimatedTokens: 0,
|
|
163
|
+
contextChars: 0,
|
|
164
|
+
contextItemCount: 0,
|
|
163
165
|
allocation: params.allocation
|
|
164
166
|
};
|
|
165
167
|
const started = Date.now();
|
|
@@ -174,7 +176,8 @@ var UserContextPlanner = class {
|
|
|
174
176
|
const queryProfile = buildRetrievalQueryProfile(query, scopeInput);
|
|
175
177
|
const selfReview = queryProfile.selfReview;
|
|
176
178
|
const maxResults = requestedMaxResults ?? (selfReview ? SELF_REVIEW_MAX_RESULTS : DEFAULT_MAX_RESULTS);
|
|
177
|
-
const
|
|
179
|
+
const budgetChars = requestedMaxChars ?? (selfReview ? SELF_REVIEW_MAX_CONTEXT_CHARS : DEFAULT_MAX_CONTEXT_CHARS);
|
|
180
|
+
const maxChars = Math.max(0, budgetChars - 2);
|
|
178
181
|
const projects = new ProjectStore();
|
|
179
182
|
const excluded = new Set(params.excludedRecordIds ?? []);
|
|
180
183
|
const rejected = [];
|
|
@@ -464,7 +467,7 @@ var UserContextPlanner = class {
|
|
|
464
467
|
turnId: params.turnId,
|
|
465
468
|
sessionKey: params.sessionKey,
|
|
466
469
|
query,
|
|
467
|
-
budget:
|
|
470
|
+
budget: budgetChars,
|
|
468
471
|
durationMs: Date.now() - started,
|
|
469
472
|
items: traceItems
|
|
470
473
|
});
|
|
@@ -474,7 +477,9 @@ var UserContextPlanner = class {
|
|
|
474
477
|
items,
|
|
475
478
|
rejected,
|
|
476
479
|
consentRequests,
|
|
477
|
-
estimatedTokens: Math.ceil(block.length / 4),
|
|
480
|
+
estimatedTokens: Math.ceil((block.length + (block ? 2 : 0)) / 4),
|
|
481
|
+
contextChars: block.length + (block ? 2 : 0),
|
|
482
|
+
contextItemCount: traceItems.filter((item) => item.decision === "selected").length,
|
|
478
483
|
allocation: params.allocation
|
|
479
484
|
};
|
|
480
485
|
}
|
|
@@ -10,6 +10,7 @@ function classifyFailureReason(reason) {
|
|
|
10
10
|
const lower = reason.toLowerCase();
|
|
11
11
|
if (lower.includes("not configured") || lower.includes("api key") || lower.includes("missing")) return "not_configured";
|
|
12
12
|
if (lower.includes("timeout") || lower.includes("timed out") || lower.includes("aborted")) return "timeout";
|
|
13
|
+
if (lower.includes("empty transcription") || lower.includes("no speech") || lower.includes("no voice detected")) return "no_speech";
|
|
13
14
|
if (lower.includes("unsupported") || lower.includes("format") || lower.includes("audio decoder")) return "unsupported_format";
|
|
14
15
|
return "provider_error";
|
|
15
16
|
}
|
|
@@ -51,7 +52,23 @@ async function transcribe(audioBuffer, config, options) {
|
|
|
51
52
|
const attachmentDecision = result.decision.attachments[0];
|
|
52
53
|
const attempts = (attachmentDecision?.attempts ?? []).map(toAttempt);
|
|
53
54
|
const attemptedProviders = attempts.map((a) => a.provider);
|
|
55
|
+
const primaryProvider = providersWithLanguage[0].id;
|
|
54
56
|
if (!attachmentDecision?.chosen) {
|
|
57
|
+
const noSpeechAttempt = attempts.findLast((attempt) => attempt.reasonCode === "no_speech");
|
|
58
|
+
if (noSpeechAttempt) {
|
|
59
|
+
log.debug({
|
|
60
|
+
attempts,
|
|
61
|
+
attemptedProviders
|
|
62
|
+
}, "STT completed without recognized speech");
|
|
63
|
+
const fallbackFrom = noSpeechAttempt.provider !== primaryProvider ? primaryProvider : void 0;
|
|
64
|
+
return {
|
|
65
|
+
text: "",
|
|
66
|
+
provider: noSpeechAttempt.provider,
|
|
67
|
+
attempts,
|
|
68
|
+
...fallbackFrom ? { fallbackFrom } : {},
|
|
69
|
+
attemptedProviders
|
|
70
|
+
};
|
|
71
|
+
}
|
|
55
72
|
log.error({
|
|
56
73
|
attempts,
|
|
57
74
|
attemptedProviders
|
|
@@ -62,7 +79,6 @@ async function transcribe(audioBuffer, config, options) {
|
|
|
62
79
|
const chosen = attachmentDecision.chosen;
|
|
63
80
|
const output = result.outputs[0];
|
|
64
81
|
if (!output) throw new Error("STT runner returned chosen attempt but no output text");
|
|
65
|
-
const primaryProvider = providersWithLanguage[0].id;
|
|
66
82
|
const fallbackFrom = chosen.provider && chosen.provider !== primaryProvider ? primaryProvider : void 0;
|
|
67
83
|
return {
|
|
68
84
|
text: output.text,
|
|
@@ -47,7 +47,7 @@ export interface STTConfig {
|
|
|
47
47
|
timeoutMs?: number;
|
|
48
48
|
}
|
|
49
49
|
export type STTProviderAttemptTask = 'success' | 'skipped' | 'failed';
|
|
50
|
-
export type STTProviderFailureReason = 'success' | 'not_configured' | 'timeout' | 'provider_error' | 'unsupported_format' | 'unknown';
|
|
50
|
+
export type STTProviderFailureReason = 'success' | 'not_configured' | 'timeout' | 'no_speech' | 'provider_error' | 'unsupported_format' | 'unknown';
|
|
51
51
|
export interface STTProviderAttempt {
|
|
52
52
|
provider: string;
|
|
53
53
|
task: STTProviderAttemptTask;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xopcai/xopc",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.225",
|
|
4
4
|
"description": "Local-first personal AI assistant with reviewable user understanding, durable tasks, workflows, automations, and local or cloud models.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -159,8 +159,8 @@
|
|
|
159
159
|
"vue": "^3.5.35",
|
|
160
160
|
"@xopcai/endpoint-tools-protocol": "0.0.0",
|
|
161
161
|
"@xopcai/gateway-contract": "0.0.0",
|
|
162
|
-
"@xopcai/realtime-
|
|
163
|
-
"@xopcai/realtime-
|
|
162
|
+
"@xopcai/realtime-protocol": "0.0.0",
|
|
163
|
+
"@xopcai/realtime-client": "0.0.0"
|
|
164
164
|
},
|
|
165
165
|
"scripts": {
|
|
166
166
|
"assets:brand": "node scripts/generate-brand-assets.mjs",
|