@vellumai/assistant 0.7.2 → 0.7.3
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/ARCHITECTURE.md +16 -1
- package/docs/architecture/memory.md +5 -2
- package/node_modules/@vellumai/gateway-client/src/ipc-client.ts +13 -4
- package/node_modules/@vellumai/skill-host-contracts/src/assistant-event.ts +0 -9
- package/node_modules/@vellumai/slack-text/src/index.test.ts +18 -35
- package/node_modules/@vellumai/slack-text/src/index.ts +2 -48
- package/openapi.yaml +449 -22
- package/package.json +1 -1
- package/src/__tests__/app-control-flow.test.ts +21 -11
- package/src/__tests__/assistant-event-hub.test.ts +48 -0
- package/src/__tests__/assistant-event.test.ts +0 -10
- package/src/__tests__/assistant-events-sse-hardening.test.ts +2 -7
- package/src/__tests__/assistant-feature-flags-integration.test.ts +18 -0
- package/src/__tests__/auto-analysis-end-to-end.test.ts +62 -1
- package/src/__tests__/background-workers-disk-pressure.test.ts +268 -0
- package/src/__tests__/call-conversation-messages.test.ts +8 -2
- package/src/__tests__/channel-inbound-disk-pressure.test.ts +537 -0
- package/src/__tests__/channel-readiness-service.test.ts +4 -2
- package/src/__tests__/config-loader-backfill.test.ts +379 -0
- package/src/__tests__/config-schema.test.ts +1 -0
- package/src/__tests__/config-watcher-cleanup-throttle.test.ts +18 -9
- package/src/__tests__/config-watcher.test.ts +140 -69
- package/src/__tests__/context-search-agent-runner.test.ts +61 -3
- package/src/__tests__/context-search-conversations-source.test.ts +0 -24
- package/src/__tests__/context-search-fanout.test.ts +0 -1
- package/src/__tests__/context-search-memory-source.test.ts +3 -7
- package/src/__tests__/context-search-memory-v2-source.test.ts +0 -2
- package/src/__tests__/context-search-pkb-source.test.ts +0 -1
- package/src/__tests__/context-search-workspace-source.test.ts +0 -1
- package/src/__tests__/conversation-abort-tool-results.test.ts +6 -0
- package/src/__tests__/conversation-agent-loop-disk-pressure.test.ts +223 -0
- package/src/__tests__/conversation-agent-loop.test.ts +454 -5
- package/src/__tests__/conversation-error.test.ts +150 -3
- package/src/__tests__/conversation-process-callsite.test.ts +43 -0
- package/src/__tests__/conversation-provider-retry-repair.test.ts +6 -0
- package/src/__tests__/conversation-runtime-assembly.test.ts +65 -0
- package/src/__tests__/conversation-slash-unknown.test.ts +6 -0
- package/src/__tests__/conversation-speed-override.test.ts +0 -3
- package/src/__tests__/conversation-store.test.ts +0 -18
- package/src/__tests__/conversation-surfaces-app-control.test.ts +15 -4
- package/src/__tests__/conversation-surfaces-data-persist.test.ts +404 -0
- package/src/__tests__/conversation-tool-setup-app-refresh.test.ts +2 -5
- package/src/__tests__/conversation-workspace-injection.test.ts +6 -0
- package/src/__tests__/conversation-workspace-tool-tracking.test.ts +6 -0
- package/src/__tests__/credentials-cli.test.ts +7 -0
- package/src/__tests__/cu-unified-flow.test.ts +176 -10
- package/src/__tests__/date-context.test.ts +164 -2
- package/src/__tests__/disk-pressure-guard.test.ts +262 -0
- package/src/__tests__/disk-pressure-lifecycle.test.ts +168 -0
- package/src/__tests__/disk-pressure-policy.test.ts +241 -0
- package/src/__tests__/disk-pressure-routes.test.ts +379 -0
- package/src/__tests__/disk-pressure-tools.test.ts +277 -0
- package/src/__tests__/disk-usage.test.ts +150 -0
- package/src/__tests__/events-client-registration.test.ts +52 -0
- package/src/__tests__/events-dev-bypass-actor.test.ts +162 -0
- package/src/__tests__/file-write-tool.test.ts +4 -10
- package/src/__tests__/filing-service.test.ts +3 -4
- package/src/__tests__/heartbeat-disk-pressure.test.ts +183 -0
- package/src/__tests__/heartbeat-service.test.ts +260 -11
- package/src/__tests__/host-app-control-proxy.test.ts +195 -25
- package/src/__tests__/host-bash-proxy.test.ts +227 -34
- package/src/__tests__/host-bash-routes.test.ts +178 -13
- package/src/__tests__/host-cu-proxy.test.ts +210 -3
- package/src/__tests__/host-cu-routes-targeted.test.ts +141 -12
- package/src/__tests__/host-file-proxy-targeted.test.ts +48 -9
- package/src/__tests__/host-file-proxy.test.ts +268 -6
- package/src/__tests__/host-file-routes-targeted.test.ts +175 -17
- package/src/__tests__/host-transfer-proxy-targeted.test.ts +408 -59
- package/src/__tests__/host-transfer-routes-targeted.test.ts +232 -17
- package/src/__tests__/http-user-message-parity.test.ts +107 -1
- package/src/__tests__/injector-chain.test.ts +18 -6
- package/src/__tests__/injector-disk-pressure.test.ts +224 -0
- package/src/__tests__/managed-profile-guard.test.ts +18 -0
- package/src/__tests__/mcp-abort-signal.test.ts +130 -0
- package/src/__tests__/memory-admin-recall.test.ts +3 -11
- package/src/__tests__/memory-retrieval-pipeline.test.ts +22 -1
- package/src/__tests__/normalize-onboarding.test.ts +180 -0
- package/src/__tests__/oauth-connect-routes.test.ts +316 -0
- package/src/__tests__/oauth-provider-seed-logos.test.ts +24 -2
- package/src/__tests__/onboarding-persona-write.test.ts +308 -0
- package/src/__tests__/openai-provider.test.ts +45 -8
- package/src/__tests__/persist-onboarding-artifacts.test.ts +44 -64
- package/src/__tests__/platform-callback-registration.test.ts +21 -4
- package/src/__tests__/platform.test.ts +2 -1
- package/src/__tests__/playbook-execution.test.ts +0 -43
- package/src/__tests__/plugin-tool-contribution.test.ts +47 -0
- package/src/__tests__/prechat-onboarding-contract.test.ts +214 -27
- package/src/__tests__/provider-tool-name.test.ts +23 -0
- package/src/__tests__/relay-server.test.ts +15 -4
- package/src/__tests__/runtime-events-sse.test.ts +4 -8
- package/src/__tests__/scheduler-disk-pressure.test.ts +148 -0
- package/src/__tests__/secret-ingress-http.test.ts +0 -1
- package/src/__tests__/suggestion-routes.test.ts +46 -0
- package/src/__tests__/twilio-validation.test.ts +2 -2
- package/src/__tests__/workspace-migration-065-bump-stale-heartbeat-interval.test.ts +122 -0
- package/src/__tests__/workspace-migration-066-seed-heartbeat-callsite-cost-default.test.ts +285 -0
- package/src/__tests__/workspace-migration-068-release-notes-local-timezone.test.ts +90 -0
- package/src/__tests__/workspace-migration-safe-storage-limits-release.test.ts +90 -0
- package/src/approvals/guardian-decision-primitive.ts +13 -0
- package/src/approvals/guardian-request-resolvers.ts +16 -17
- package/src/backup/snapshot-lock.ts +2 -27
- package/src/bundler/compiler-tools.ts +3 -2
- package/src/calls/call-conversation-messages.ts +46 -10
- package/src/cli/commands/__tests__/webhooks.test.ts +0 -4
- package/src/cli/commands/bash.ts +35 -108
- package/src/cli/commands/contacts.ts +64 -25
- package/src/cli/commands/credentials.ts +56 -0
- package/src/cli/commands/memory-v2.ts +7 -6
- package/src/cli/commands/oauth/__tests__/connect.test.ts +437 -1
- package/src/cli/commands/oauth/connect.ts +127 -1
- package/src/cli/commands/platform/__tests__/callback-routes-list.test.ts +0 -3
- package/src/cli/commands/platform/__tests__/connect.test.ts +7 -1
- package/src/cli/commands/platform/__tests__/disconnect.test.ts +7 -1
- package/src/cli/commands/platform/__tests__/status.test.ts +103 -6
- package/src/cli/commands/platform/index.ts +16 -7
- package/src/cli/commands/status.ts +57 -0
- package/src/cli/program.ts +4 -2
- package/src/config/assistant-feature-flags.ts +13 -3
- package/src/config/bundled-skills/messaging/tools/messaging-analyze-style.ts +4 -3
- package/src/config/bundled-skills/phone-calls/references/TROUBLESHOOTING.md +13 -7
- package/src/config/bundled-skills/playbooks/tools/playbook-create.ts +2 -2
- package/src/config/bundled-skills/playbooks/tools/playbook-delete.ts +2 -2
- package/src/config/bundled-skills/playbooks/tools/playbook-list.ts +2 -2
- package/src/config/bundled-skills/playbooks/tools/playbook-update.ts +2 -2
- package/src/config/env.ts +0 -8
- package/src/config/feature-flag-registry.json +27 -3
- package/src/config/loader.ts +127 -8
- package/src/config/schemas/__tests__/memory-v2.test.ts +10 -5
- package/src/config/schemas/call-site-catalog.ts +14 -0
- package/src/config/schemas/channels.ts +0 -5
- package/src/config/schemas/heartbeat.ts +1 -1
- package/src/config/schemas/llm.ts +2 -0
- package/src/config/schemas/memory-lifecycle.ts +13 -0
- package/src/config/schemas/memory-v2.ts +75 -11
- package/src/config/schemas/platform.ts +43 -3
- package/src/config/schemas/services.ts +28 -0
- package/src/config/seed-inference-profiles.ts +230 -33
- package/src/contacts/contact-store.ts +0 -25
- package/src/daemon/__tests__/conversation-tool-setup.test.ts +86 -25
- package/src/daemon/assistant-attachments.ts +4 -4
- package/src/daemon/config-watcher.ts +85 -57
- package/src/daemon/conversation-agent-loop-handlers.ts +6 -0
- package/src/daemon/conversation-agent-loop.ts +170 -33
- package/src/daemon/conversation-error.ts +87 -15
- package/src/daemon/conversation-lifecycle.ts +1 -3
- package/src/daemon/conversation-process.ts +8 -0
- package/src/daemon/conversation-runtime-assembly.ts +26 -0
- package/src/daemon/conversation-store.ts +2 -2
- package/src/daemon/conversation-surfaces.ts +195 -15
- package/src/daemon/conversation-tool-setup.ts +57 -14
- package/src/daemon/conversation.ts +17 -22
- package/src/daemon/date-context.ts +71 -22
- package/src/daemon/disk-pressure-background-gate.ts +73 -0
- package/src/daemon/disk-pressure-guard.ts +343 -0
- package/src/daemon/disk-pressure-policy.ts +163 -0
- package/src/daemon/handlers/shared.ts +0 -1
- package/src/daemon/handlers/skills.ts +3 -4
- package/src/daemon/host-app-control-proxy.ts +137 -41
- package/src/daemon/host-bash-proxy.ts +46 -21
- package/src/daemon/host-cu-proxy.ts +49 -3
- package/src/daemon/host-file-proxy.ts +43 -7
- package/src/daemon/host-transfer-proxy.ts +95 -4
- package/src/daemon/lifecycle.ts +79 -28
- package/src/daemon/meet-host-supervisor.ts +4 -4
- package/src/daemon/meet-manifest-loader.ts +0 -1
- package/src/daemon/memory-v2-startup.ts +14 -4
- package/src/daemon/message-protocol.ts +3 -0
- package/src/daemon/message-types/conversations.ts +4 -0
- package/src/daemon/message-types/disk-pressure.ts +9 -0
- package/src/daemon/message-types/messages.ts +3 -0
- package/src/daemon/profiler-run-store.ts +5 -5
- package/src/daemon/tool-setup-types.ts +2 -2
- package/src/documents/document-store.ts +85 -0
- package/src/filing/filing-service.ts +30 -5
- package/src/heartbeat/__tests__/heartbeat-feed-event.test.ts +9 -16
- package/src/heartbeat/__tests__/heartbeat-run-store.test.ts +36 -0
- package/src/heartbeat/heartbeat-run-store.ts +13 -0
- package/src/heartbeat/heartbeat-service.ts +205 -31
- package/src/home/feed-scheduler.ts +18 -0
- package/src/inbound/platform-callback-registration.ts +8 -15
- package/src/ipc/__tests__/clients-list-ipc.test.ts +169 -0
- package/src/ipc/assistant-server.ts +56 -2
- package/src/ipc/gateway-client.ts +37 -3
- package/src/live-voice/live-voice-archive.ts +4 -4
- package/src/live-voice/protocol.ts +5 -7
- package/src/media/image-service.ts +1 -7
- package/src/memory/__tests__/fixtures/memory-v2-activation-fixtures.ts +21 -13
- package/src/memory/__tests__/jobs-worker-v2-schedule.test.ts +52 -22
- package/src/memory/__tests__/memory-v2-activation-log-store.test.ts +0 -6
- package/src/memory/__tests__/memory-v2-concept-frequency.test.ts +272 -0
- package/src/memory/admin.ts +5 -9
- package/src/memory/context-search/agent-runner.ts +19 -2
- package/src/memory/context-search/sources/conversations.ts +2 -11
- package/src/memory/context-search/sources/memory-v2.ts +5 -4
- package/src/memory/context-search/sources/memory.ts +0 -1
- package/src/memory/context-search/types.ts +0 -1
- package/src/memory/conversation-crud.ts +4 -12
- package/src/memory/db-init.ts +2 -0
- package/src/memory/embedding-runtime-manager.ts +119 -5
- package/src/memory/graph/__tests__/conversation-graph-memory-v2-routing.test.ts +32 -21
- package/src/memory/graph/conversation-graph-memory.ts +42 -54
- package/src/memory/graph/extraction.ts +1 -3
- package/src/memory/graph/graph-search.test.ts +10 -67
- package/src/memory/graph/graph-search.ts +1 -20
- package/src/memory/graph/retriever.test.ts +6 -0
- package/src/memory/graph/retriever.ts +6 -10
- package/src/memory/indexer.ts +54 -45
- package/src/memory/job-handlers/backfill.ts +2 -11
- package/src/memory/job-handlers/cleanup.ts +43 -0
- package/src/memory/job-handlers/embedding.ts +6 -8
- package/src/memory/job-handlers/summarization.ts +2 -7
- package/src/memory/jobs-store.ts +48 -0
- package/src/memory/jobs-worker.ts +81 -43
- package/src/memory/memory-v2-activation-log-store.ts +32 -14
- package/src/memory/memory-v2-concept-frequency.ts +169 -0
- package/src/memory/migrations/239-trace-events-created-at-index.ts +18 -0
- package/src/memory/migrations/index.ts +1 -0
- package/src/memory/pkb/pkb-search.test.ts +6 -0
- package/src/memory/qdrant-client.ts +0 -13
- package/src/memory/rerank-local.ts +374 -0
- package/src/memory/search/semantic.ts +6 -67
- package/src/memory/trace-event-store.ts +1 -17
- package/src/memory/v2/__tests__/activation.test.ts +311 -250
- package/src/memory/v2/__tests__/consolidation-job.test.ts +40 -8
- package/src/memory/v2/__tests__/injection.test.ts +157 -167
- package/src/memory/v2/__tests__/prompts-consolidation.test.ts +61 -2
- package/src/memory/v2/__tests__/qdrant.test.ts +16 -0
- package/src/memory/v2/__tests__/reranker.test.ts +338 -0
- package/src/memory/v2/__tests__/sim.test.ts +5 -199
- package/src/memory/v2/__tests__/skill-store.test.ts +71 -65
- package/src/memory/v2/__tests__/static-context.test.ts +76 -1
- package/src/memory/v2/activation.ts +149 -156
- package/src/memory/v2/consolidation-job.ts +62 -12
- package/src/memory/v2/injection.ts +47 -60
- package/src/memory/v2/prompts/consolidation.ts +36 -1
- package/src/memory/v2/qdrant.ts +99 -0
- package/src/memory/v2/reranker.ts +177 -0
- package/src/memory/v2/sim.ts +10 -84
- package/src/memory/v2/skill-content.ts +4 -3
- package/src/memory/v2/skill-store.ts +82 -59
- package/src/memory/v2/static-context.ts +22 -0
- package/src/memory/v2/types.ts +10 -10
- package/src/notifications/copy-composer.ts +13 -0
- package/src/notifications/signal.ts +4 -0
- package/src/oauth/AGENTS.md +3 -1
- package/src/oauth/__tests__/oauth-connect-state.test.ts +137 -0
- package/src/oauth/connect-orchestrator.ts +2 -0
- package/src/oauth/connection-resolver.test.ts +66 -1
- package/src/oauth/connection-resolver.ts +55 -1
- package/src/oauth/oauth-connect-state.ts +77 -0
- package/src/oauth/seed-providers.ts +58 -1
- package/src/plugins/defaults/injectors.ts +35 -2
- package/src/plugins/defaults/memory-retrieval.ts +5 -6
- package/src/plugins/types.ts +7 -0
- package/src/proactive-artifact/aux-message-injector.ts +74 -0
- package/src/proactive-artifact/decision.test.ts +226 -0
- package/src/proactive-artifact/decision.ts +165 -0
- package/src/proactive-artifact/index.ts +7 -0
- package/src/proactive-artifact/job.test.ts +867 -0
- package/src/proactive-artifact/job.ts +352 -0
- package/src/proactive-artifact/message-copy.ts +41 -0
- package/src/proactive-artifact/trigger-state.test.ts +277 -0
- package/src/proactive-artifact/trigger-state.ts +119 -0
- package/src/prompts/normalize-onboarding.ts +80 -0
- package/src/prompts/persona-resolver.ts +101 -9
- package/src/prompts/system-prompt.ts +21 -7
- package/src/prompts/templates/BOOTSTRAP.md +13 -5
- package/src/providers/__tests__/retry-callsite.test.ts +222 -1
- package/src/providers/model-intents.ts +7 -0
- package/src/providers/openrouter/client.ts +8 -0
- package/src/providers/retry.ts +50 -0
- package/src/providers/types.ts +1 -0
- package/src/runtime/__tests__/agent-wake.test.ts +456 -3
- package/src/runtime/agent-wake.ts +238 -100
- package/src/runtime/assistant-event-hub.ts +36 -6
- package/src/runtime/assistant-event.ts +0 -1
- package/src/runtime/auth/__tests__/route-policy.test.ts +64 -0
- package/src/runtime/auth/route-policy.ts +14 -1
- package/src/runtime/auth/same-actor.ts +216 -0
- package/src/runtime/channel-retry-sweep.ts +65 -1
- package/src/runtime/guardian-reply-router.ts +10 -0
- package/src/runtime/local-actor-identity.ts +52 -11
- package/src/runtime/pending-interactions.ts +8 -0
- package/src/runtime/routes/__tests__/client-routes.test.ts +155 -0
- package/src/runtime/routes/__tests__/conversation-query-routes.test.ts +0 -5
- package/src/runtime/routes/__tests__/heartbeat-routes.test.ts +1 -1
- package/src/runtime/routes/client-routes.ts +20 -2
- package/src/runtime/routes/contact-routes.ts +0 -25
- package/src/runtime/routes/conversation-routes.ts +35 -26
- package/src/runtime/routes/debug-bash-routes.ts +163 -0
- package/src/runtime/routes/disk-pressure-routes.ts +121 -0
- package/src/runtime/routes/document-pdf-renderer.ts +6 -2
- package/src/runtime/routes/documents-routes.ts +2 -75
- package/src/runtime/routes/events-routes.ts +41 -9
- package/src/runtime/routes/host-bash-routes.ts +23 -3
- package/src/runtime/routes/host-cu-routes.ts +33 -6
- package/src/runtime/routes/host-file-routes.ts +32 -6
- package/src/runtime/routes/host-transfer-routes.ts +79 -16
- package/src/runtime/routes/identity-routes.ts +7 -138
- package/src/runtime/routes/inbound-message-handler.ts +77 -12
- package/src/runtime/routes/inbound-stages/guardian-reply-intercept.ts +3 -0
- package/src/runtime/routes/index.ts +6 -0
- package/src/runtime/routes/memory-item-routes.test.ts +41 -15
- package/src/runtime/routes/memory-v2-routes.ts +33 -0
- package/src/runtime/routes/oauth-connect-routes.ts +153 -0
- package/src/runtime/verification-outbound-actions.ts +4 -4
- package/src/schedule/run-script.ts +37 -5
- package/src/schedule/scheduler.ts +20 -1
- package/src/security/encrypted-store.ts +2 -0
- package/src/security/secure-keys.ts +55 -0
- package/src/skills/remote-skill-policy.ts +4 -10
- package/src/subagent/index.ts +1 -7
- package/src/subagent/manager.ts +1 -15
- package/src/tasks/task-runner.ts +0 -1
- package/src/tasks/task-store.ts +0 -3
- package/src/tools/background-tool-registry.ts +17 -3
- package/src/tools/host-filesystem/edit.test.ts +151 -0
- package/src/tools/host-filesystem/edit.ts +43 -1
- package/src/tools/host-filesystem/read.test.ts +129 -0
- package/src/tools/host-filesystem/read.ts +43 -1
- package/src/tools/host-filesystem/transfer.test.ts +127 -2
- package/src/tools/host-filesystem/transfer.ts +56 -11
- package/src/tools/host-filesystem/write.test.ts +134 -0
- package/src/tools/host-filesystem/write.ts +43 -1
- package/src/tools/host-terminal/host-shell.ts +13 -6
- package/src/tools/mcp/mcp-tool-factory.ts +2 -1
- package/src/tools/memory/register.test.ts +12 -9
- package/src/tools/memory/register.ts +1 -2
- package/src/tools/provider-tool-name.ts +28 -0
- package/src/tools/registry.ts +30 -9
- package/src/tools/terminal/shell.ts +9 -1
- package/src/tools/tool-approval-handler.ts +31 -6
- package/src/tools/types.ts +24 -2
- package/src/tts/provider-catalog.ts +3 -5
- package/src/util/disk-usage.ts +138 -0
- package/src/util/platform.ts +21 -11
- package/src/util/process-liveness.ts +26 -0
- package/src/workspace/heartbeat-service.ts +19 -0
- package/src/workspace/migrations/065-bump-stale-heartbeat-interval.ts +60 -0
- package/src/workspace/migrations/066-seed-heartbeat-callsite-cost-default.ts +146 -0
- package/src/workspace/migrations/067-release-notes-safe-storage-limits.ts +72 -0
- package/src/workspace/migrations/068-release-notes-local-timezone.ts +65 -0
- package/src/workspace/migrations/registry.ts +8 -0
- package/src/__tests__/conversation-tool-setup-memory-scope.test.ts +0 -167
- package/src/memory/v2/__tests__/skill-qdrant.test.ts +0 -657
- package/src/memory/v2/skill-qdrant.ts +0 -404
- package/src/signals/bash.ts +0 -198
|
@@ -9,7 +9,7 @@ import type {
|
|
|
9
9
|
QdrantSparseVector,
|
|
10
10
|
} from "../qdrant-client.js";
|
|
11
11
|
import { getQdrantClient } from "../qdrant-client.js";
|
|
12
|
-
import {
|
|
12
|
+
import { memorySegments, memorySummaries } from "../schema.js";
|
|
13
13
|
// ── Types (inlined from deleted types.ts) ──────────────────────────
|
|
14
14
|
|
|
15
15
|
type CandidateType = "segment" | "item" | "summary" | "media";
|
|
@@ -52,7 +52,6 @@ export async function semanticSearch(
|
|
|
52
52
|
_model: string,
|
|
53
53
|
limit: number,
|
|
54
54
|
excludedMessageIds: string[] = [],
|
|
55
|
-
scopeIds?: string[],
|
|
56
55
|
sparseVector?: QdrantSparseVector,
|
|
57
56
|
): Promise<Candidate[]> {
|
|
58
57
|
if (limit <= 0) return [];
|
|
@@ -75,7 +74,7 @@ export async function semanticSearch(
|
|
|
75
74
|
let isHybrid = false;
|
|
76
75
|
if (sparseVector && sparseVector.indices.length > 0) {
|
|
77
76
|
isHybrid = true;
|
|
78
|
-
const filter = buildHybridFilter(excludedMessageIds
|
|
77
|
+
const filter = buildHybridFilter(excludedMessageIds);
|
|
79
78
|
results = await withQdrantBreaker(() =>
|
|
80
79
|
qdrant.hybridSearch({
|
|
81
80
|
denseVector: queryVector,
|
|
@@ -92,7 +91,6 @@ export async function semanticSearch(
|
|
|
92
91
|
fetchLimit,
|
|
93
92
|
["summary", "segment", "media"],
|
|
94
93
|
excludedMessageIds,
|
|
95
|
-
scopeIds,
|
|
96
94
|
),
|
|
97
95
|
);
|
|
98
96
|
}
|
|
@@ -102,18 +100,15 @@ export async function semanticSearch(
|
|
|
102
100
|
// Batch-fetch all backing records upfront to avoid N+1 queries per result
|
|
103
101
|
const summaryTargetIds: string[] = [];
|
|
104
102
|
const segmentTargetIds: string[] = [];
|
|
105
|
-
const mediaConversationIds: string[] = [];
|
|
106
103
|
for (const r of results) {
|
|
107
104
|
if (r.payload.target_type === "summary")
|
|
108
105
|
summaryTargetIds.push(r.payload.target_id);
|
|
109
106
|
else if (r.payload.target_type === "segment")
|
|
110
107
|
segmentTargetIds.push(r.payload.target_id);
|
|
111
|
-
else if (r.payload.target_type === "media" && r.payload.conversation_id)
|
|
112
|
-
mediaConversationIds.push(r.payload.conversation_id);
|
|
113
108
|
}
|
|
114
109
|
|
|
115
110
|
const summariesMap = new Map<string, typeof memorySummaries.$inferSelect>();
|
|
116
|
-
if (
|
|
111
|
+
if (summaryTargetIds.length > 0) {
|
|
117
112
|
const allSummaries = db
|
|
118
113
|
.select()
|
|
119
114
|
.from(memorySummaries)
|
|
@@ -123,7 +118,7 @@ export async function semanticSearch(
|
|
|
123
118
|
}
|
|
124
119
|
|
|
125
120
|
const segmentsMap = new Map<string, typeof memorySegments.$inferSelect>();
|
|
126
|
-
if (
|
|
121
|
+
if (segmentTargetIds.length > 0) {
|
|
127
122
|
const allSegments = db
|
|
128
123
|
.select()
|
|
129
124
|
.from(memorySegments)
|
|
@@ -132,23 +127,6 @@ export async function semanticSearch(
|
|
|
132
127
|
for (const seg of allSegments) segmentsMap.set(seg.id, seg);
|
|
133
128
|
}
|
|
134
129
|
|
|
135
|
-
// Batch-fetch conversation scope IDs for media results to avoid N+1 queries.
|
|
136
|
-
// When a conversation is not found (deleted), its media is excluded rather than
|
|
137
|
-
// falling back to "default" scope, which would leak private media.
|
|
138
|
-
const mediaScopeMap = new Map<string, string>();
|
|
139
|
-
if (scopeIds && mediaConversationIds.length > 0) {
|
|
140
|
-
const unique = [...new Set(mediaConversationIds)];
|
|
141
|
-
const rows = db
|
|
142
|
-
.select({
|
|
143
|
-
id: conversations.id,
|
|
144
|
-
memoryScopeId: conversations.memoryScopeId,
|
|
145
|
-
})
|
|
146
|
-
.from(conversations)
|
|
147
|
-
.where(inArray(conversations.id, unique))
|
|
148
|
-
.all();
|
|
149
|
-
for (const row of rows) mediaScopeMap.set(row.id, row.memoryScopeId);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
130
|
const candidates: Candidate[] = [];
|
|
153
131
|
for (const result of results) {
|
|
154
132
|
const { payload, score } = result;
|
|
@@ -160,10 +138,7 @@ export async function semanticSearch(
|
|
|
160
138
|
// Legacy item vectors — skip (table dropped, Qdrant cleanup pending)
|
|
161
139
|
continue;
|
|
162
140
|
} else if (payload.target_type === "summary") {
|
|
163
|
-
if (
|
|
164
|
-
const summary = summariesMap.get(payload.target_id);
|
|
165
|
-
if (!summary || !scopeIds.includes(summary.scopeId)) continue;
|
|
166
|
-
}
|
|
141
|
+
if (!summariesMap.has(payload.target_id)) continue;
|
|
167
142
|
candidates.push({
|
|
168
143
|
key: `summary:${payload.target_id}`,
|
|
169
144
|
type: "summary",
|
|
@@ -180,22 +155,6 @@ export async function semanticSearch(
|
|
|
180
155
|
finalScore: 0,
|
|
181
156
|
});
|
|
182
157
|
} else if (payload.target_type === "media") {
|
|
183
|
-
// Use stored memory_scope_id when available; fall back to deriving
|
|
184
|
-
// scope from conversation_id for legacy media points.
|
|
185
|
-
// If the conversation was deleted, skip the media to avoid leaking
|
|
186
|
-
// private media into the default scope.
|
|
187
|
-
if (scopeIds) {
|
|
188
|
-
let mediaScopeId: string | undefined;
|
|
189
|
-
if (payload.memory_scope_id) {
|
|
190
|
-
mediaScopeId = payload.memory_scope_id;
|
|
191
|
-
} else if (payload.conversation_id) {
|
|
192
|
-
mediaScopeId = mediaScopeMap.get(payload.conversation_id);
|
|
193
|
-
if (!mediaScopeId) continue; // conversation deleted — skip
|
|
194
|
-
} else {
|
|
195
|
-
mediaScopeId = "default";
|
|
196
|
-
}
|
|
197
|
-
if (!scopeIds.includes(mediaScopeId)) continue;
|
|
198
|
-
}
|
|
199
158
|
candidates.push({
|
|
200
159
|
key: `media:${payload.target_id}`,
|
|
201
160
|
type: "media",
|
|
@@ -212,10 +171,7 @@ export async function semanticSearch(
|
|
|
212
171
|
finalScore: 0,
|
|
213
172
|
});
|
|
214
173
|
} else {
|
|
215
|
-
if (
|
|
216
|
-
const segment = segmentsMap.get(payload.target_id);
|
|
217
|
-
if (!segment || !scopeIds.includes(segment.scopeId)) continue;
|
|
218
|
-
}
|
|
174
|
+
if (!segmentsMap.has(payload.target_id)) continue;
|
|
219
175
|
candidates.push({
|
|
220
176
|
key: `segment:${payload.target_id}`,
|
|
221
177
|
type: "segment",
|
|
@@ -254,14 +210,9 @@ export async function semanticSearch(
|
|
|
254
210
|
/**
|
|
255
211
|
* Build a Qdrant filter for hybrid search. Mirrors the logic in
|
|
256
212
|
* `searchWithFilter` but as a standalone object for the query API.
|
|
257
|
-
*
|
|
258
|
-
* Scope filtering: points with a `memory_scope_id` payload field are
|
|
259
|
-
* filtered at the Qdrant level. Legacy points without the field pass
|
|
260
|
-
* through and are caught by post-query DB filtering.
|
|
261
213
|
*/
|
|
262
214
|
function buildHybridFilter(
|
|
263
215
|
excludeMessageIds: string[],
|
|
264
|
-
scopeIds?: string[],
|
|
265
216
|
): Record<string, unknown> {
|
|
266
217
|
const mustConditions: Array<Record<string, unknown>> = [
|
|
267
218
|
{
|
|
@@ -270,18 +221,6 @@ function buildHybridFilter(
|
|
|
270
221
|
},
|
|
271
222
|
];
|
|
272
223
|
|
|
273
|
-
// Scope filtering: accept points whose memory_scope_id matches one of the
|
|
274
|
-
// allowed scopes, OR points that lack the field entirely (legacy data).
|
|
275
|
-
// Post-query DB filtering remains as defense-in-depth for legacy points.
|
|
276
|
-
if (scopeIds && scopeIds.length > 0) {
|
|
277
|
-
mustConditions.push({
|
|
278
|
-
should: [
|
|
279
|
-
{ key: "memory_scope_id", match: { any: scopeIds } },
|
|
280
|
-
{ is_empty: { key: "memory_scope_id" } },
|
|
281
|
-
],
|
|
282
|
-
});
|
|
283
|
-
}
|
|
284
|
-
|
|
285
224
|
const mustNotConditions: Array<Record<string, unknown>> = [
|
|
286
225
|
{ key: "_meta", match: { value: true } },
|
|
287
226
|
];
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { and, asc, eq, gt,
|
|
1
|
+
import { and, asc, eq, gt, sql } from "drizzle-orm";
|
|
2
2
|
|
|
3
3
|
import type {
|
|
4
4
|
TraceEvent,
|
|
5
5
|
TraceEventKind,
|
|
6
6
|
} from "../daemon/message-types/messages.js";
|
|
7
7
|
import { getDb } from "./db-connection.js";
|
|
8
|
-
import { rawChanges } from "./raw-query.js";
|
|
9
8
|
import { traceEvents } from "./schema.js";
|
|
10
9
|
|
|
11
10
|
// ---------------------------------------------------------------------------
|
|
@@ -115,21 +114,6 @@ export function getTraceEvents(
|
|
|
115
114
|
return rows.map(rowToTraceEventRow);
|
|
116
115
|
}
|
|
117
116
|
|
|
118
|
-
// ---------------------------------------------------------------------------
|
|
119
|
-
// Cleanup
|
|
120
|
-
// ---------------------------------------------------------------------------
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Delete trace events older than `maxAgeDays` based on `created_at`.
|
|
124
|
-
* Returns the count of deleted rows.
|
|
125
|
-
*/
|
|
126
|
-
export function deleteOldTraceEvents(maxAgeDays: number): number {
|
|
127
|
-
const db = getDb();
|
|
128
|
-
const cutoff = Date.now() - maxAgeDays * 24 * 60 * 60 * 1000;
|
|
129
|
-
db.delete(traceEvents).where(lt(traceEvents.createdAt, cutoff)).run();
|
|
130
|
-
return rawChanges();
|
|
131
|
-
}
|
|
132
|
-
|
|
133
117
|
// ---------------------------------------------------------------------------
|
|
134
118
|
// Sequence
|
|
135
119
|
// ---------------------------------------------------------------------------
|