@atomicmemory/core 1.0.0
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/CHANGELOG.md +27 -0
- package/LICENSE +201 -0
- package/README.md +314 -0
- package/dist/app/bind-ephemeral.d.ts +18 -0
- package/dist/app/bind-ephemeral.js +22 -0
- package/dist/app/cors-headers.d.ts +12 -0
- package/dist/app/cors-headers.js +18 -0
- package/dist/app/create-app.d.ts +25 -0
- package/dist/app/create-app.js +156 -0
- package/dist/app/runtime-config-route-snapshot.d.ts +27 -0
- package/dist/app/runtime-config-route-snapshot.js +27 -0
- package/dist/app/runtime-container.d.ts +281 -0
- package/dist/app/runtime-container.js +297 -0
- package/dist/app/startup-checks.d.ts +28 -0
- package/dist/app/startup-checks.js +45 -0
- package/dist/bin.d.ts +17 -0
- package/dist/bin.js +128 -0
- package/dist/config.d.ts +680 -0
- package/dist/config.js +808 -0
- package/dist/db/agent-trust-repository.d.ts +49 -0
- package/dist/db/agent-trust-repository.js +66 -0
- package/dist/db/belief-edges-repository.d.ts +68 -0
- package/dist/db/belief-edges-repository.js +124 -0
- package/dist/db/claim-repository.d.ts +6 -0
- package/dist/db/claim-repository.js +4 -0
- package/dist/db/contradictions-repository.d.ts +56 -0
- package/dist/db/contradictions-repository.js +88 -0
- package/dist/db/document-chunk-repository.d.ts +48 -0
- package/dist/db/document-chunk-repository.js +145 -0
- package/dist/db/document-chunk-types.d.ts +35 -0
- package/dist/db/document-chunk-types.js +9 -0
- package/dist/db/document-list-cursor.d.ts +45 -0
- package/dist/db/document-list-cursor.js +111 -0
- package/dist/db/document-list-repository.d.ts +103 -0
- package/dist/db/document-list-repository.js +204 -0
- package/dist/db/entity-cards-repository.d.ts +37 -0
- package/dist/db/entity-cards-repository.js +46 -0
- package/dist/db/entity-values-repository.d.ts +26 -0
- package/dist/db/entity-values-repository.js +57 -0
- package/dist/db/link-repository.d.ts +30 -0
- package/dist/db/link-repository.js +54 -0
- package/dist/db/memory-repository.d.ts +163 -0
- package/dist/db/memory-repository.js +232 -0
- package/dist/db/migrate.d.ts +6 -0
- package/dist/db/migrate.js +36 -0
- package/dist/db/mmr.d.ts +14 -0
- package/dist/db/mmr.js +57 -0
- package/dist/db/passport-feed-repository.d.ts +91 -0
- package/dist/db/passport-feed-repository.js +198 -0
- package/dist/db/pg-episode-store.d.ts +19 -0
- package/dist/db/pg-episode-store.js +17 -0
- package/dist/db/pg-link-store.d.ts +17 -0
- package/dist/db/pg-link-store.js +14 -0
- package/dist/db/pg-memory-store.d.ts +68 -0
- package/dist/db/pg-memory-store.js +53 -0
- package/dist/db/pg-recap-store.d.ts +13 -0
- package/dist/db/pg-recap-store.js +19 -0
- package/dist/db/pg-representation-store.d.ts +17 -0
- package/dist/db/pg-representation-store.js +17 -0
- package/dist/db/pg-search-store.d.ts +29 -0
- package/dist/db/pg-search-store.js +47 -0
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.js +21 -0
- package/dist/db/ppr.d.ts +56 -0
- package/dist/db/ppr.js +178 -0
- package/dist/db/query-helpers.d.ts +44 -0
- package/dist/db/query-helpers.js +60 -0
- package/dist/db/raw-doc-artifact-sync.d.ts +128 -0
- package/dist/db/raw-doc-artifact-sync.js +259 -0
- package/dist/db/raw-document-blob-repository.d.ts +148 -0
- package/dist/db/raw-document-blob-repository.js +300 -0
- package/dist/db/raw-document-repository.d.ts +104 -0
- package/dist/db/raw-document-repository.js +410 -0
- package/dist/db/raw-document-status-repository.d.ts +122 -0
- package/dist/db/raw-document-status-repository.js +183 -0
- package/dist/db/raw-document-types.d.ts +236 -0
- package/dist/db/raw-document-types.js +10 -0
- package/dist/db/raw-storage-reconciliation-repository.d.ts +110 -0
- package/dist/db/raw-storage-reconciliation-repository.js +200 -0
- package/dist/db/reflection-jobs-repository.d.ts +33 -0
- package/dist/db/reflection-jobs-repository.js +48 -0
- package/dist/db/reflections-repository.d.ts +41 -0
- package/dist/db/reflections-repository.js +83 -0
- package/dist/db/repository-claims.d.ts +141 -0
- package/dist/db/repository-claims.js +376 -0
- package/dist/db/repository-deferred-audn.d.ts +33 -0
- package/dist/db/repository-deferred-audn.js +69 -0
- package/dist/db/repository-document-delete.d.ts +53 -0
- package/dist/db/repository-document-delete.js +156 -0
- package/dist/db/repository-entities.d.ts +114 -0
- package/dist/db/repository-entities.js +317 -0
- package/dist/db/repository-entity-attributes.d.ts +41 -0
- package/dist/db/repository-entity-attributes.js +65 -0
- package/dist/db/repository-entity-graph.d.ts +32 -0
- package/dist/db/repository-entity-graph.js +87 -0
- package/dist/db/repository-first-mentions.d.ts +41 -0
- package/dist/db/repository-first-mentions.js +79 -0
- package/dist/db/repository-lessons.d.ts +51 -0
- package/dist/db/repository-lessons.js +90 -0
- package/dist/db/repository-links.d.ts +26 -0
- package/dist/db/repository-links.js +105 -0
- package/dist/db/repository-observation.d.ts +26 -0
- package/dist/db/repository-observation.js +51 -0
- package/dist/db/repository-read.d.ts +56 -0
- package/dist/db/repository-read.js +271 -0
- package/dist/db/repository-recaps.d.ts +59 -0
- package/dist/db/repository-recaps.js +158 -0
- package/dist/db/repository-representations.d.ts +48 -0
- package/dist/db/repository-representations.js +162 -0
- package/dist/db/repository-temporal-state.d.ts +35 -0
- package/dist/db/repository-temporal-state.js +46 -0
- package/dist/db/repository-tll.d.ts +88 -0
- package/dist/db/repository-tll.js +179 -0
- package/dist/db/repository-types.d.ts +313 -0
- package/dist/db/repository-types.js +142 -0
- package/dist/db/repository-user-profiles.d.ts +17 -0
- package/dist/db/repository-user-profiles.js +28 -0
- package/dist/db/repository-vector-search.d.ts +33 -0
- package/dist/db/repository-vector-search.js +373 -0
- package/dist/db/repository-wipe.d.ts +34 -0
- package/dist/db/repository-wipe.js +94 -0
- package/dist/db/repository-write.d.ts +61 -0
- package/dist/db/repository-write.js +279 -0
- package/dist/db/schema.sql +1355 -0
- package/dist/db/storage-artifact-delete-tx.d.ts +56 -0
- package/dist/db/storage-artifact-delete-tx.js +123 -0
- package/dist/db/storage-artifact-providers.d.ts +21 -0
- package/dist/db/storage-artifact-providers.js +21 -0
- package/dist/db/storage-artifact-recovery-repository.d.ts +66 -0
- package/dist/db/storage-artifact-recovery-repository.js +58 -0
- package/dist/db/storage-artifact-repository.d.ts +329 -0
- package/dist/db/storage-artifact-repository.js +497 -0
- package/dist/db/stores.d.ts +220 -0
- package/dist/db/stores.js +12 -0
- package/dist/db/summaries-repository.d.ts +74 -0
- package/dist/db/summaries-repository.js +125 -0
- package/dist/eval/beam-10m-loader.d.ts +98 -0
- package/dist/eval/beam-10m-loader.js +128 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.js +17 -0
- package/dist/middleware/require-bearer.d.ts +27 -0
- package/dist/middleware/require-bearer.js +60 -0
- package/dist/middleware/validate-response.d.ts +33 -0
- package/dist/middleware/validate-response.js +55 -0
- package/dist/middleware/validate.d.ts +43 -0
- package/dist/middleware/validate.js +85 -0
- package/dist/routes/agents.d.ts +13 -0
- package/dist/routes/agents.js +89 -0
- package/dist/routes/document-response-formatters.d.ts +98 -0
- package/dist/routes/document-response-formatters.js +243 -0
- package/dist/routes/documents.d.ts +74 -0
- package/dist/routes/documents.js +425 -0
- package/dist/routes/memories.d.ts +29 -0
- package/dist/routes/memories.js +725 -0
- package/dist/routes/memory-response-formatters.d.ts +179 -0
- package/dist/routes/memory-response-formatters.js +210 -0
- package/dist/routes/public-raw-storage-metadata.d.ts +54 -0
- package/dist/routes/public-raw-storage-metadata.js +56 -0
- package/dist/routes/reflect.d.ts +14 -0
- package/dist/routes/reflect.js +19 -0
- package/dist/routes/response-schema-map.d.ts +14 -0
- package/dist/routes/response-schema-map.js +69 -0
- package/dist/routes/route-errors.d.ts +12 -0
- package/dist/routes/route-errors.js +30 -0
- package/dist/routes/storage-error-handlers.d.ts +34 -0
- package/dist/routes/storage-error-handlers.js +185 -0
- package/dist/routes/storage-response-formatters.d.ts +44 -0
- package/dist/routes/storage-response-formatters.js +155 -0
- package/dist/routes/storage.d.ts +38 -0
- package/dist/routes/storage.js +369 -0
- package/dist/routes/upstream-provider-errors.d.ts +19 -0
- package/dist/routes/upstream-provider-errors.js +95 -0
- package/dist/schemas/agents.d.ts +79 -0
- package/dist/schemas/agents.js +126 -0
- package/dist/schemas/common.d.ts +110 -0
- package/dist/schemas/common.js +190 -0
- package/dist/schemas/document-list-responses.d.ts +102 -0
- package/dist/schemas/document-list-responses.js +87 -0
- package/dist/schemas/document-list-schemas.d.ts +123 -0
- package/dist/schemas/document-list-schemas.js +174 -0
- package/dist/schemas/document-response-schemas.d.ts +610 -0
- package/dist/schemas/document-response-schemas.js +264 -0
- package/dist/schemas/document-status-envelope.d.ts +48 -0
- package/dist/schemas/document-status-envelope.js +54 -0
- package/dist/schemas/documents.d.ts +292 -0
- package/dist/schemas/documents.js +449 -0
- package/dist/schemas/errors.d.ts +75 -0
- package/dist/schemas/errors.js +105 -0
- package/dist/schemas/memories.d.ts +378 -0
- package/dist/schemas/memories.js +542 -0
- package/dist/schemas/openapi.d.ts +24 -0
- package/dist/schemas/openapi.js +1038 -0
- package/dist/schemas/response-scalars.d.ts +10 -0
- package/dist/schemas/response-scalars.js +10 -0
- package/dist/schemas/responses.d.ts +536 -0
- package/dist/schemas/responses.js +350 -0
- package/dist/schemas/search-response-parts.d.ts +97 -0
- package/dist/schemas/search-response-parts.js +103 -0
- package/dist/schemas/storage-schemas.d.ts +175 -0
- package/dist/schemas/storage-schemas.js +277 -0
- package/dist/schemas/zod-setup.d.ts +15 -0
- package/dist/schemas/zod-setup.js +17 -0
- package/dist/server.d.ts +13 -0
- package/dist/server.js +57 -0
- package/dist/services/abstract-query-policy.d.ts +13 -0
- package/dist/services/abstract-query-policy.js +50 -0
- package/dist/services/affinity-clustering.d.ts +66 -0
- package/dist/services/affinity-clustering.js +125 -0
- package/dist/services/agentic-retrieval.d.ts +38 -0
- package/dist/services/agentic-retrieval.js +126 -0
- package/dist/services/answer-format.d.ts +56 -0
- package/dist/services/answer-format.js +118 -0
- package/dist/services/answer-rescue.d.ts +72 -0
- package/dist/services/answer-rescue.js +177 -0
- package/dist/services/answer-verifier.d.ts +24 -0
- package/dist/services/answer-verifier.js +73 -0
- package/dist/services/api-retry.d.ts +6 -0
- package/dist/services/api-retry.js +41 -0
- package/dist/services/assistant-turn-filter.d.ts +20 -0
- package/dist/services/assistant-turn-filter.js +69 -0
- package/dist/services/atomicmem-uri.d.ts +33 -0
- package/dist/services/atomicmem-uri.js +86 -0
- package/dist/services/audit-events.d.ts +54 -0
- package/dist/services/audit-events.js +56 -0
- package/dist/services/chunked-extraction.d.ts +21 -0
- package/dist/services/chunked-extraction.js +108 -0
- package/dist/services/claim-slotting.d.ts +27 -0
- package/dist/services/claim-slotting.js +38 -0
- package/dist/services/claude-code-llm.d.ts +19 -0
- package/dist/services/claude-code-llm.js +96 -0
- package/dist/services/composite-dedup.d.ts +50 -0
- package/dist/services/composite-dedup.js +153 -0
- package/dist/services/composite-grouping.d.ts +41 -0
- package/dist/services/composite-grouping.js +111 -0
- package/dist/services/composite-staleness.d.ts +20 -0
- package/dist/services/composite-staleness.js +50 -0
- package/dist/services/conciseness-preference.d.ts +14 -0
- package/dist/services/conciseness-preference.js +42 -0
- package/dist/services/conflict-policy.d.ts +20 -0
- package/dist/services/conflict-policy.js +335 -0
- package/dist/services/consensus-extraction.d.ts +39 -0
- package/dist/services/consensus-extraction.js +147 -0
- package/dist/services/consensus-validation.d.ts +52 -0
- package/dist/services/consensus-validation.js +206 -0
- package/dist/services/consolidation-service.d.ts +60 -0
- package/dist/services/consolidation-service.js +171 -0
- package/dist/services/content-detection.d.ts +18 -0
- package/dist/services/content-detection.js +25 -0
- package/dist/services/contradiction-surfacing.d.ts +62 -0
- package/dist/services/contradiction-surfacing.js +111 -0
- package/dist/services/cost-telemetry.d.ts +39 -0
- package/dist/services/cost-telemetry.js +58 -0
- package/dist/services/counter-evidence.d.ts +34 -0
- package/dist/services/counter-evidence.js +92 -0
- package/dist/services/current-state-ranking.d.ts +21 -0
- package/dist/services/current-state-ranking.js +152 -0
- package/dist/services/deferred-audn.d.ts +47 -0
- package/dist/services/deferred-audn.js +162 -0
- package/dist/services/document-chunker.d.ts +50 -0
- package/dist/services/document-chunker.js +153 -0
- package/dist/services/document-failure-markers.d.ts +91 -0
- package/dist/services/document-failure-markers.js +305 -0
- package/dist/services/document-indexer.d.ts +122 -0
- package/dist/services/document-indexer.js +405 -0
- package/dist/services/document-service.d.ts +245 -0
- package/dist/services/document-service.js +325 -0
- package/dist/services/document-upload-artifact-sync.d.ts +80 -0
- package/dist/services/document-upload-artifact-sync.js +162 -0
- package/dist/services/document-upload-beta2-recovery.d.ts +72 -0
- package/dist/services/document-upload-beta2-recovery.js +94 -0
- package/dist/services/document-upload.d.ts +44 -0
- package/dist/services/document-upload.js +353 -0
- package/dist/services/embedding.d.ts +57 -0
- package/dist/services/embedding.js +416 -0
- package/dist/services/entity-attribute-extractor.d.ts +34 -0
- package/dist/services/entity-attribute-extractor.js +117 -0
- package/dist/services/entity-card-synthesis.d.ts +54 -0
- package/dist/services/entity-card-synthesis.js +92 -0
- package/dist/services/entity-dedup.d.ts +9 -0
- package/dist/services/entity-dedup.js +14 -0
- package/dist/services/entity-graph.d.ts +17 -0
- package/dist/services/entity-graph.js +135 -0
- package/dist/services/entropy-gate.d.ts +52 -0
- package/dist/services/entropy-gate.js +56 -0
- package/dist/services/episode-fetcher.d.ts +47 -0
- package/dist/services/episode-fetcher.js +128 -0
- package/dist/services/event-anchor-facts.d.ts +8 -0
- package/dist/services/event-anchor-facts.js +205 -0
- package/dist/services/event-chain-detector.d.ts +52 -0
- package/dist/services/event-chain-detector.js +83 -0
- package/dist/services/extraction-cache.d.ts +9 -0
- package/dist/services/extraction-cache.js +54 -0
- package/dist/services/extraction-enrichment.d.ts +9 -0
- package/dist/services/extraction-enrichment.js +223 -0
- package/dist/services/extraction.d.ts +69 -0
- package/dist/services/extraction.js +596 -0
- package/dist/services/fact-normalization.d.ts +12 -0
- package/dist/services/fact-normalization.js +248 -0
- package/dist/services/filecoin-observability.d.ts +127 -0
- package/dist/services/filecoin-observability.js +200 -0
- package/dist/services/first-mention-service.d.ts +76 -0
- package/dist/services/first-mention-service.js +186 -0
- package/dist/services/hierarchical-retrieval.d.ts +49 -0
- package/dist/services/hierarchical-retrieval.js +50 -0
- package/dist/services/ingest-fact-pipeline.d.ts +32 -0
- package/dist/services/ingest-fact-pipeline.js +212 -0
- package/dist/services/ingest-post-write.d.ts +50 -0
- package/dist/services/ingest-post-write.js +117 -0
- package/dist/services/ingest-trace.d.ts +32 -0
- package/dist/services/ingest-trace.js +60 -0
- package/dist/services/input-sanitizer.d.ts +41 -0
- package/dist/services/input-sanitizer.js +135 -0
- package/dist/services/iterative-retrieval.d.ts +26 -0
- package/dist/services/iterative-retrieval.js +139 -0
- package/dist/services/keyword-expansion.d.ts +10 -0
- package/dist/services/keyword-expansion.js +26 -0
- package/dist/services/lesson-service.d.ts +68 -0
- package/dist/services/lesson-service.js +178 -0
- package/dist/services/literal-extractor.d.ts +16 -0
- package/dist/services/literal-extractor.js +74 -0
- package/dist/services/literal-list-protection.d.ts +17 -0
- package/dist/services/literal-list-protection.js +134 -0
- package/dist/services/literal-query-expansion.d.ts +20 -0
- package/dist/services/literal-query-expansion.js +181 -0
- package/dist/services/llm.d.ts +61 -0
- package/dist/services/llm.js +265 -0
- package/dist/services/memcell-projection.d.ts +17 -0
- package/dist/services/memcell-projection.js +41 -0
- package/dist/services/memory-audn.d.ts +43 -0
- package/dist/services/memory-audn.js +419 -0
- package/dist/services/memory-crud.d.ts +93 -0
- package/dist/services/memory-crud.js +255 -0
- package/dist/services/memory-ingest.d.ts +21 -0
- package/dist/services/memory-ingest.js +249 -0
- package/dist/services/memory-lifecycle.d.ts +75 -0
- package/dist/services/memory-lifecycle.js +108 -0
- package/dist/services/memory-lineage.d.ts +181 -0
- package/dist/services/memory-lineage.js +232 -0
- package/dist/services/memory-network.d.ts +40 -0
- package/dist/services/memory-network.js +75 -0
- package/dist/services/memory-search-types.d.ts +25 -0
- package/dist/services/memory-search-types.js +10 -0
- package/dist/services/memory-search.d.ts +48 -0
- package/dist/services/memory-search.js +505 -0
- package/dist/services/memory-service-types.d.ts +371 -0
- package/dist/services/memory-service-types.js +8 -0
- package/dist/services/memory-service.d.ts +152 -0
- package/dist/services/memory-service.js +225 -0
- package/dist/services/memory-storage.d.ts +33 -0
- package/dist/services/memory-storage.js +328 -0
- package/dist/services/msr-aggregator.d.ts +38 -0
- package/dist/services/msr-aggregator.js +97 -0
- package/dist/services/msr-detector.d.ts +35 -0
- package/dist/services/msr-detector.js +65 -0
- package/dist/services/namespace-retrieval.d.ts +60 -0
- package/dist/services/namespace-retrieval.js +180 -0
- package/dist/services/observation-date-extraction.d.ts +12 -0
- package/dist/services/observation-date-extraction.js +50 -0
- package/dist/services/observation-service.d.ts +27 -0
- package/dist/services/observation-service.js +84 -0
- package/dist/services/packaging-observability.d.ts +29 -0
- package/dist/services/packaging-observability.js +146 -0
- package/dist/services/query-expansion.d.ts +83 -0
- package/dist/services/query-expansion.js +242 -0
- package/dist/services/query-keyword-matches.d.ts +6 -0
- package/dist/services/query-keyword-matches.js +56 -0
- package/dist/services/query-term-visibility.d.ts +28 -0
- package/dist/services/query-term-visibility.js +100 -0
- package/dist/services/quick-extraction.d.ts +25 -0
- package/dist/services/quick-extraction.js +431 -0
- package/dist/services/quoted-entity-extraction.d.ts +10 -0
- package/dist/services/quoted-entity-extraction.js +161 -0
- package/dist/services/raw-storage-reconciler-backoff.d.ts +8 -0
- package/dist/services/raw-storage-reconciler-backoff.js +14 -0
- package/dist/services/raw-storage-reconciler-scheduler.d.ts +29 -0
- package/dist/services/raw-storage-reconciler-scheduler.js +43 -0
- package/dist/services/raw-storage-reconciler.d.ts +71 -0
- package/dist/services/raw-storage-reconciler.js +278 -0
- package/dist/services/recap-builder.d.ts +49 -0
- package/dist/services/recap-builder.js +157 -0
- package/dist/services/reflect-jobs.d.ts +23 -0
- package/dist/services/reflect-jobs.js +36 -0
- package/dist/services/reflect-prompts.d.ts +71 -0
- package/dist/services/reflect-prompts.js +99 -0
- package/dist/services/reflect-retrieval.d.ts +33 -0
- package/dist/services/reflect-retrieval.js +30 -0
- package/dist/services/reflect.d.ts +49 -0
- package/dist/services/reflect.js +84 -0
- package/dist/services/relative-temporal.d.ts +14 -0
- package/dist/services/relative-temporal.js +163 -0
- package/dist/services/relevance-policy.d.ts +37 -0
- package/dist/services/relevance-policy.js +109 -0
- package/dist/services/rerank.d.ts +32 -0
- package/dist/services/rerank.js +118 -0
- package/dist/services/reranker.d.ts +20 -0
- package/dist/services/reranker.js +99 -0
- package/dist/services/retrieval-channel-rules.d.ts +34 -0
- package/dist/services/retrieval-channel-rules.js +41 -0
- package/dist/services/retrieval-config-overlay.d.ts +36 -0
- package/dist/services/retrieval-config-overlay.js +44 -0
- package/dist/services/retrieval-format.d.ts +119 -0
- package/dist/services/retrieval-format.js +559 -0
- package/dist/services/retrieval-policy.d.ts +69 -0
- package/dist/services/retrieval-policy.js +275 -0
- package/dist/services/retrieval-profiles.d.ts +37 -0
- package/dist/services/retrieval-profiles.js +90 -0
- package/dist/services/retrieval-side-effects.d.ts +14 -0
- package/dist/services/retrieval-side-effects.js +26 -0
- package/dist/services/retrieval-trace.d.ts +108 -0
- package/dist/services/retrieval-trace.js +147 -0
- package/dist/services/rrf-fusion.d.ts +18 -0
- package/dist/services/rrf-fusion.js +34 -0
- package/dist/services/search-pipeline.d.ts +71 -0
- package/dist/services/search-pipeline.js +788 -0
- package/dist/services/session-date.d.ts +20 -0
- package/dist/services/session-date.js +61 -0
- package/dist/services/session-packaging.d.ts +53 -0
- package/dist/services/session-packaging.js +182 -0
- package/dist/services/session-summary-generator.d.ts +53 -0
- package/dist/services/session-summary-generator.js +134 -0
- package/dist/services/specialists/cr-specialist.d.ts +52 -0
- package/dist/services/specialists/cr-specialist.js +121 -0
- package/dist/services/specialists/dispatch.d.ts +53 -0
- package/dist/services/specialists/dispatch.js +102 -0
- package/dist/services/specialists/ie-ku-specialist.d.ts +37 -0
- package/dist/services/specialists/ie-ku-specialist.js +63 -0
- package/dist/services/specialists/msr-specialist.d.ts +61 -0
- package/dist/services/specialists/msr-specialist.js +162 -0
- package/dist/services/specialists/tr-specialist.d.ts +37 -0
- package/dist/services/specialists/tr-specialist.js +146 -0
- package/dist/services/storage-key-prefix.d.ts +42 -0
- package/dist/services/storage-key-prefix.js +45 -0
- package/dist/services/storage-put-recovery.d.ts +71 -0
- package/dist/services/storage-put-recovery.js +269 -0
- package/dist/services/storage-service-errors.d.ts +124 -0
- package/dist/services/storage-service-errors.js +189 -0
- package/dist/services/storage-service.d.ts +176 -0
- package/dist/services/storage-service.js +423 -0
- package/dist/services/subject-aware-ranking.d.ts +19 -0
- package/dist/services/subject-aware-ranking.js +161 -0
- package/dist/services/supplemental-extraction.d.ts +7 -0
- package/dist/services/supplemental-extraction.js +116 -0
- package/dist/services/tbc-execution.d.ts +49 -0
- package/dist/services/tbc-execution.js +284 -0
- package/dist/services/temporal-classifier.d.ts +56 -0
- package/dist/services/temporal-classifier.js +94 -0
- package/dist/services/temporal-endpoint-evidence.d.ts +12 -0
- package/dist/services/temporal-endpoint-evidence.js +313 -0
- package/dist/services/temporal-fingerprint.d.ts +6 -0
- package/dist/services/temporal-fingerprint.js +12 -0
- package/dist/services/temporal-format.d.ts +9 -0
- package/dist/services/temporal-format.js +21 -0
- package/dist/services/temporal-intent.d.ts +39 -0
- package/dist/services/temporal-intent.js +78 -0
- package/dist/services/temporal-query-constraints.d.ts +16 -0
- package/dist/services/temporal-query-constraints.js +107 -0
- package/dist/services/temporal-query-expansion.d.ts +14 -0
- package/dist/services/temporal-query-expansion.js +131 -0
- package/dist/services/temporal-rerank.d.ts +22 -0
- package/dist/services/temporal-rerank.js +47 -0
- package/dist/services/temporal-result-protection.d.ts +7 -0
- package/dist/services/temporal-result-protection.js +60 -0
- package/dist/services/temporal-state-write.d.ts +57 -0
- package/dist/services/temporal-state-write.js +45 -0
- package/dist/services/tiered-context.d.ts +87 -0
- package/dist/services/tiered-context.js +214 -0
- package/dist/services/tiered-loading.d.ts +88 -0
- package/dist/services/tiered-loading.js +263 -0
- package/dist/services/timeline-pack.d.ts +36 -0
- package/dist/services/timeline-pack.js +50 -0
- package/dist/services/timing.d.ts +13 -0
- package/dist/services/timing.js +72 -0
- package/dist/services/tll-augmentation.d.ts +20 -0
- package/dist/services/tll-augmentation.js +125 -0
- package/dist/services/tll-retrieval.d.ts +55 -0
- package/dist/services/tll-retrieval.js +101 -0
- package/dist/services/topic-abstraction.d.ts +36 -0
- package/dist/services/topic-abstraction.js +105 -0
- package/dist/services/trust-scoring.d.ts +43 -0
- package/dist/services/trust-scoring.js +89 -0
- package/dist/services/typed-belief-calculus.d.ts +126 -0
- package/dist/services/typed-belief-calculus.js +204 -0
- package/dist/services/upload-config.d.ts +34 -0
- package/dist/services/upload-config.js +23 -0
- package/dist/services/upload-decision.d.ts +65 -0
- package/dist/services/upload-decision.js +98 -0
- package/dist/services/upload-helpers.d.ts +107 -0
- package/dist/services/upload-helpers.js +148 -0
- package/dist/services/user-profile-builder.d.ts +22 -0
- package/dist/services/user-profile-builder.js +109 -0
- package/dist/services/voyage-embedding.d.ts +22 -0
- package/dist/services/voyage-embedding.js +77 -0
- package/dist/services/write-security.d.ts +31 -0
- package/dist/services/write-security.js +64 -0
- package/dist/storage/artifact-public-redaction.d.ts +34 -0
- package/dist/storage/artifact-public-redaction.js +83 -0
- package/dist/storage/cleanup.d.ts +103 -0
- package/dist/storage/cleanup.js +138 -0
- package/dist/storage/codec-factory.d.ts +17 -0
- package/dist/storage/codec-factory.js +33 -0
- package/dist/storage/codecs/aes-gcm-codec.d.ts +44 -0
- package/dist/storage/codecs/aes-gcm-codec.js +108 -0
- package/dist/storage/codecs/noop-codec.d.ts +16 -0
- package/dist/storage/codecs/noop-codec.js +23 -0
- package/dist/storage/factory.d.ts +44 -0
- package/dist/storage/factory.js +99 -0
- package/dist/storage/filecoin-cid-validation.d.ts +82 -0
- package/dist/storage/filecoin-cid-validation.js +122 -0
- package/dist/storage/filecoin-public-metadata.d.ts +73 -0
- package/dist/storage/filecoin-public-metadata.js +110 -0
- package/dist/storage/local-fs-store.d.ts +39 -0
- package/dist/storage/local-fs-store.js +145 -0
- package/dist/storage/pointer-uri-allowlist.d.ts +38 -0
- package/dist/storage/pointer-uri-allowlist.js +70 -0
- package/dist/storage/provider-metadata-projection.d.ts +27 -0
- package/dist/storage/provider-metadata-projection.js +68 -0
- package/dist/storage/providers/filecoin/backend.d.ts +42 -0
- package/dist/storage/providers/filecoin/backend.js +250 -0
- package/dist/storage/providers/filecoin/config.d.ts +70 -0
- package/dist/storage/providers/filecoin/config.js +275 -0
- package/dist/storage/providers/filecoin/errors.d.ts +45 -0
- package/dist/storage/providers/filecoin/errors.js +56 -0
- package/dist/storage/providers/filecoin/filecoin-pin-car.d.ts +78 -0
- package/dist/storage/providers/filecoin/filecoin-pin-car.js +155 -0
- package/dist/storage/providers/filecoin/filecoin-pin-client.d.ts +92 -0
- package/dist/storage/providers/filecoin/filecoin-pin-client.js +199 -0
- package/dist/storage/providers/filecoin/filecoin-pin-mapping.d.ts +58 -0
- package/dist/storage/providers/filecoin/filecoin-pin-mapping.js +103 -0
- package/dist/storage/providers/filecoin/filecoin-pin-timeout.d.ts +30 -0
- package/dist/storage/providers/filecoin/filecoin-pin-timeout.js +53 -0
- package/dist/storage/providers/filecoin/filecoin-pin-vendor.d.ts +111 -0
- package/dist/storage/providers/filecoin/filecoin-pin-vendor.js +87 -0
- package/dist/storage/providers/filecoin/hints.d.ts +71 -0
- package/dist/storage/providers/filecoin/hints.js +123 -0
- package/dist/storage/providers/filecoin/index.d.ts +51 -0
- package/dist/storage/providers/filecoin/index.js +103 -0
- package/dist/storage/providers/filecoin/ipfs-cid.d.ts +50 -0
- package/dist/storage/providers/filecoin/ipfs-cid.js +64 -0
- package/dist/storage/providers/filecoin/metadata.d.ts +72 -0
- package/dist/storage/providers/filecoin/metadata.js +137 -0
- package/dist/storage/providers/filecoin/piece-cid.d.ts +48 -0
- package/dist/storage/providers/filecoin/piece-cid.js +57 -0
- package/dist/storage/providers/filecoin/provider-client.d.ts +234 -0
- package/dist/storage/providers/filecoin/provider-client.js +27 -0
- package/dist/storage/providers/filecoin/readiness.d.ts +62 -0
- package/dist/storage/providers/filecoin/readiness.js +85 -0
- package/dist/storage/providers/filecoin/retriever.d.ts +82 -0
- package/dist/storage/providers/filecoin/retriever.js +63 -0
- package/dist/storage/providers/filecoin/skeleton-client.d.ts +36 -0
- package/dist/storage/providers/filecoin/skeleton-client.js +55 -0
- package/dist/storage/providers/filecoin/synapse-client.d.ts +169 -0
- package/dist/storage/providers/filecoin/synapse-client.js +343 -0
- package/dist/storage/providers/filecoin/synapse-construction.d.ts +26 -0
- package/dist/storage/providers/filecoin/synapse-construction.js +47 -0
- package/dist/storage/providers/filecoin/synapse-error-mapping.d.ts +23 -0
- package/dist/storage/providers/filecoin/synapse-error-mapping.js +49 -0
- package/dist/storage/providers/filecoin/synapse-readiness.d.ts +37 -0
- package/dist/storage/providers/filecoin/synapse-readiness.js +231 -0
- package/dist/storage/providers/filecoin/uri.d.ts +49 -0
- package/dist/storage/providers/filecoin/uri.js +84 -0
- package/dist/storage/providers/filecoin/verified-fetch-lifecycle.d.ts +77 -0
- package/dist/storage/providers/filecoin/verified-fetch-lifecycle.js +196 -0
- package/dist/storage/providers/filecoin/verified-fetch-retriever.d.ts +54 -0
- package/dist/storage/providers/filecoin/verified-fetch-retriever.js +81 -0
- package/dist/storage/providers/filecoin/verified-fetch-vendor.d.ts +71 -0
- package/dist/storage/providers/filecoin/verified-fetch-vendor.js +94 -0
- package/dist/storage/raw-content-codec.d.ts +89 -0
- package/dist/storage/raw-content-codec.js +47 -0
- package/dist/storage/raw-content-store-backend-adapter.d.ts +28 -0
- package/dist/storage/raw-content-store-backend-adapter.js +67 -0
- package/dist/storage/raw-content-store.d.ts +228 -0
- package/dist/storage/raw-content-store.js +27 -0
- package/dist/storage/s3-store.d.ts +42 -0
- package/dist/storage/s3-store.js +181 -0
- package/dist/storage/storage-backend-registry.d.ts +58 -0
- package/dist/storage/storage-backend-registry.js +56 -0
- package/dist/storage/storage-backend.d.ts +82 -0
- package/dist/storage/storage-backend.js +14 -0
- package/dist/storage/storage-capabilities.d.ts +56 -0
- package/dist/storage/storage-capabilities.js +170 -0
- package/dist/storage/store-registry.d.ts +67 -0
- package/dist/storage/store-registry.js +77 -0
- package/dist/vector-math.d.ts +15 -0
- package/dist/vector-math.js +31 -0
- package/dist/xml-escape.d.ts +5 -0
- package/dist/xml-escape.js +7 -0
- package/openapi.json +15395 -0
- package/openapi.yaml +10794 -0
- package/package.json +119 -0
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Swappable vector search backends for the prototype repository.
|
|
3
|
+
*/
|
|
4
|
+
import pgvector from 'pgvector/pg';
|
|
5
|
+
import { config } from '../config.js';
|
|
6
|
+
import { normalizeMemoryRow, normalizeSearchRow, } from './repository-types.js';
|
|
7
|
+
import { RRF_K, buildHybridSearchParams, buildVectorSearchParams, clampUnit } from './query-helpers.js';
|
|
8
|
+
import { cosineSimilarity } from '../vector-math.js';
|
|
9
|
+
export async function searchVectors(pool, userId, queryEmbedding, limit, sourceSite, referenceTime) {
|
|
10
|
+
if (config.vectorBackend === 'pgvector') {
|
|
11
|
+
return searchVectorsPg(pool, userId, queryEmbedding, limit, sourceSite, referenceTime);
|
|
12
|
+
}
|
|
13
|
+
if (config.vectorBackend === 'ruvector-mock') {
|
|
14
|
+
return searchVectorsRuvectorMock(pool, userId, queryEmbedding, limit, sourceSite, referenceTime);
|
|
15
|
+
}
|
|
16
|
+
return searchVectorsZvecMock(pool, userId, queryEmbedding, limit, sourceSite, referenceTime);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Hybrid search using Reciprocal Rank Fusion (RRF) to combine vector similarity
|
|
20
|
+
* with PostgreSQL full-text search. Improves retrieval for keyword-heavy queries
|
|
21
|
+
* (names, dates, project names) where semantic similarity alone fails.
|
|
22
|
+
*
|
|
23
|
+
* Source: 2026-03-07 RAG deep dive (SeekDB link 6, GraphRAG guide link 1).
|
|
24
|
+
*/
|
|
25
|
+
export async function searchHybrid(pool, userId, queryText, queryEmbedding, limit, sourceSite, referenceTime) {
|
|
26
|
+
if (config.vectorBackend !== 'pgvector') {
|
|
27
|
+
return searchVectors(pool, userId, queryEmbedding, limit, sourceSite, referenceTime);
|
|
28
|
+
}
|
|
29
|
+
return searchHybridPg(pool, userId, queryText, queryEmbedding, limit, sourceSite, referenceTime);
|
|
30
|
+
}
|
|
31
|
+
export async function searchKeyword(pool, userId, queryText, limit, sourceSite) {
|
|
32
|
+
if (config.vectorBackend !== 'pgvector') {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
return searchKeywordPg(pool, userId, queryText, limit, sourceSite);
|
|
36
|
+
}
|
|
37
|
+
export async function findDuplicateVectors(pool, userId, embedding, threshold, limit) {
|
|
38
|
+
if (config.vectorBackend === 'pgvector') {
|
|
39
|
+
return findDuplicateVectorsPg(pool, userId, embedding, threshold, limit);
|
|
40
|
+
}
|
|
41
|
+
if (config.vectorBackend === 'ruvector-mock') {
|
|
42
|
+
return findDuplicateVectorsRuvectorMock(pool, userId, embedding, threshold, limit);
|
|
43
|
+
}
|
|
44
|
+
return findDuplicateVectorsZvecMock(pool, userId, embedding, threshold, limit);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Workspace-scoped vector search. Filters by workspace_id and optionally
|
|
48
|
+
* by agent_id based on AgentScope. Enforces visibility rules when a
|
|
49
|
+
* callerAgentId is provided.
|
|
50
|
+
*/
|
|
51
|
+
export async function searchVectorsInWorkspace(pool, workspaceId, queryEmbedding, limit, agentScope = 'all', callerAgentId, referenceTime) {
|
|
52
|
+
const wSim = config.scoringWeightSimilarity;
|
|
53
|
+
const wImp = config.scoringWeightImportance;
|
|
54
|
+
const wRec = config.scoringWeightRecency;
|
|
55
|
+
const rankingMinSimilarity = clampUnit(config.retrievalProfileSettings.rankingMinSimilarity);
|
|
56
|
+
const refTime = (referenceTime ?? new Date()).toISOString();
|
|
57
|
+
const params = [
|
|
58
|
+
pgvector.toSql(queryEmbedding), workspaceId, normalizeLimit(limit),
|
|
59
|
+
wSim, wImp, wRec, refTime, rankingMinSimilarity,
|
|
60
|
+
];
|
|
61
|
+
let nextParam = 9;
|
|
62
|
+
const agentClause = buildAgentScopeClause(agentScope, callerAgentId, params, nextParam);
|
|
63
|
+
nextParam += agentClause.paramsAdded;
|
|
64
|
+
const visibilityClause = buildVisibilityClauseForSearch(callerAgentId, params, nextParam);
|
|
65
|
+
const result = await pool.query(`SELECT *,
|
|
66
|
+
1 - (embedding <=> $1) AS similarity,
|
|
67
|
+
1 - (embedding <=> $1) AS semantic_similarity,
|
|
68
|
+
GREATEST(0, LEAST(1, 1 - (embedding <=> $1))) AS relevance,
|
|
69
|
+
(
|
|
70
|
+
$4 * (1 - (embedding <=> $1))
|
|
71
|
+
+ $5 * importance
|
|
72
|
+
+ $6 * EXP(-EXTRACT(EPOCH FROM ($7::timestamptz - last_accessed_at)) / 2592000.0)
|
|
73
|
+
) * COALESCE(trust_score, 1.0) AS score,
|
|
74
|
+
(
|
|
75
|
+
$4 * (1 - (embedding <=> $1))
|
|
76
|
+
+ CASE WHEN (1 - (embedding <=> $1)) >= $8 THEN (
|
|
77
|
+
$5 * importance
|
|
78
|
+
+ $6 * EXP(-EXTRACT(EPOCH FROM ($7::timestamptz - last_accessed_at)) / 2592000.0)
|
|
79
|
+
) ELSE 0 END
|
|
80
|
+
) * COALESCE(trust_score, 1.0) AS ranking_score
|
|
81
|
+
FROM memories
|
|
82
|
+
WHERE workspace_id = $2
|
|
83
|
+
AND deleted_at IS NULL
|
|
84
|
+
AND expired_at IS NULL
|
|
85
|
+
AND status = 'active'
|
|
86
|
+
${agentClause.sql}
|
|
87
|
+
${visibilityClause.sql}
|
|
88
|
+
ORDER BY ranking_score DESC
|
|
89
|
+
LIMIT $3`, params);
|
|
90
|
+
return result.rows.map(normalizeSearchRow);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Find near-duplicate memories within a workspace scope.
|
|
94
|
+
* Used during workspace-scoped ingest for AUDN conflict detection.
|
|
95
|
+
*/
|
|
96
|
+
export async function findDuplicateVectorsInWorkspace(pool, workspaceId, embedding, threshold, limit, agentScope = 'all', callerAgentId) {
|
|
97
|
+
const params = [pgvector.toSql(embedding), workspaceId, threshold, limit];
|
|
98
|
+
let nextParam = 5;
|
|
99
|
+
const agentClause = buildAgentScopeClause(agentScope, callerAgentId, params, nextParam);
|
|
100
|
+
const result = await pool.query(`SELECT id, content, importance, agent_id,
|
|
101
|
+
1 - (embedding <=> $1) AS similarity
|
|
102
|
+
FROM memories
|
|
103
|
+
WHERE workspace_id = $2
|
|
104
|
+
AND deleted_at IS NULL
|
|
105
|
+
AND expired_at IS NULL
|
|
106
|
+
AND status = 'active'
|
|
107
|
+
AND 1 - (embedding <=> $1) > $3
|
|
108
|
+
${agentClause.sql}
|
|
109
|
+
ORDER BY similarity DESC
|
|
110
|
+
LIMIT $4`, params);
|
|
111
|
+
return result.rows;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Resolve an AgentScope into a SQL WHERE clause fragment.
|
|
115
|
+
* Returns the SQL string and the count of parameters added.
|
|
116
|
+
*/
|
|
117
|
+
function buildAgentScopeClause(scope, callerAgentId, params, nextParam) {
|
|
118
|
+
if (scope === 'all')
|
|
119
|
+
return { sql: '', paramsAdded: 0 };
|
|
120
|
+
if (scope === 'others') {
|
|
121
|
+
if (!callerAgentId)
|
|
122
|
+
return { sql: '', paramsAdded: 0 };
|
|
123
|
+
params.push(callerAgentId);
|
|
124
|
+
return { sql: `AND (agent_id IS NULL OR agent_id != $${nextParam})`, paramsAdded: 1 };
|
|
125
|
+
}
|
|
126
|
+
if (Array.isArray(scope) && scope.length > 0) {
|
|
127
|
+
params.push(scope);
|
|
128
|
+
return { sql: `AND agent_id = ANY($${nextParam}::uuid[])`, paramsAdded: 1 };
|
|
129
|
+
}
|
|
130
|
+
const targetId = scope === 'self' ? callerAgentId : scope;
|
|
131
|
+
if (!targetId)
|
|
132
|
+
return { sql: '', paramsAdded: 0 };
|
|
133
|
+
params.push(targetId);
|
|
134
|
+
return { sql: `AND agent_id = $${nextParam}`, paramsAdded: 1 };
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Build visibility enforcement clause for workspace search.
|
|
138
|
+
* Ensures agents can only see memories they have access to.
|
|
139
|
+
*/
|
|
140
|
+
function buildVisibilityClauseForSearch(callerAgentId, params, nextParam) {
|
|
141
|
+
if (!callerAgentId)
|
|
142
|
+
return { sql: '', paramsAdded: 0 };
|
|
143
|
+
params.push(callerAgentId);
|
|
144
|
+
return {
|
|
145
|
+
sql: `AND (
|
|
146
|
+
visibility = 'workspace'
|
|
147
|
+
OR visibility IS NULL
|
|
148
|
+
OR (visibility = 'agent_only' AND agent_id = $${nextParam})
|
|
149
|
+
OR (visibility = 'restricted' AND (
|
|
150
|
+
agent_id = $${nextParam}
|
|
151
|
+
OR EXISTS (
|
|
152
|
+
SELECT 1 FROM memory_visibility_grants g
|
|
153
|
+
WHERE g.memory_id = memories.id AND g.grantee_agent_id = $${nextParam}
|
|
154
|
+
)
|
|
155
|
+
))
|
|
156
|
+
)`,
|
|
157
|
+
paramsAdded: 1,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
async function searchVectorsPg(pool, userId, queryEmbedding, limit, sourceSite, referenceTime) {
|
|
161
|
+
const { params, siteClause } = buildVectorSearchParams(queryEmbedding, userId, limit, sourceSite, referenceTime);
|
|
162
|
+
const result = await pool.query(`SELECT *,
|
|
163
|
+
1 - (embedding <=> $1) AS similarity,
|
|
164
|
+
1 - (embedding <=> $1) AS semantic_similarity,
|
|
165
|
+
GREATEST(0, LEAST(1, 1 - (embedding <=> $1))) AS relevance,
|
|
166
|
+
(
|
|
167
|
+
$4 * (1 - (embedding <=> $1))
|
|
168
|
+
+ $5 * importance
|
|
169
|
+
+ $6 * EXP(-EXTRACT(EPOCH FROM ($7::timestamptz - last_accessed_at)) / 2592000.0)
|
|
170
|
+
) * COALESCE(trust_score, 1.0) AS score,
|
|
171
|
+
(
|
|
172
|
+
$4 * (1 - (embedding <=> $1))
|
|
173
|
+
+ CASE WHEN (1 - (embedding <=> $1)) >= $8 THEN (
|
|
174
|
+
$5 * importance
|
|
175
|
+
+ $6 * EXP(-EXTRACT(EPOCH FROM ($7::timestamptz - last_accessed_at)) / 2592000.0)
|
|
176
|
+
) ELSE 0 END
|
|
177
|
+
) * COALESCE(trust_score, 1.0) AS ranking_score
|
|
178
|
+
FROM memories
|
|
179
|
+
WHERE user_id = $2
|
|
180
|
+
AND deleted_at IS NULL
|
|
181
|
+
AND expired_at IS NULL
|
|
182
|
+
AND status = 'active'
|
|
183
|
+
AND workspace_id IS NULL
|
|
184
|
+
${siteClause}
|
|
185
|
+
ORDER BY ranking_score DESC
|
|
186
|
+
LIMIT $3`, params);
|
|
187
|
+
return result.rows.map(normalizeSearchRow);
|
|
188
|
+
}
|
|
189
|
+
async function findDuplicateVectorsPg(pool, userId, embedding, threshold, limit) {
|
|
190
|
+
const result = await pool.query(`SELECT id, content, importance, 1 - (embedding <=> $1) AS similarity
|
|
191
|
+
FROM memories
|
|
192
|
+
WHERE user_id = $2
|
|
193
|
+
AND deleted_at IS NULL
|
|
194
|
+
AND expired_at IS NULL
|
|
195
|
+
AND status = 'active'
|
|
196
|
+
AND workspace_id IS NULL
|
|
197
|
+
AND 1 - (embedding <=> $1) > $3
|
|
198
|
+
ORDER BY similarity DESC
|
|
199
|
+
LIMIT $4`, [pgvector.toSql(embedding), userId, threshold, limit]);
|
|
200
|
+
return result.rows;
|
|
201
|
+
}
|
|
202
|
+
async function searchKeywordPg(pool, userId, queryText, limit, sourceSite) {
|
|
203
|
+
const siteFilter = sourceSite ? 'AND source_site = $4' : '';
|
|
204
|
+
const params = [userId, queryText, normalizeLimit(limit)];
|
|
205
|
+
if (sourceSite)
|
|
206
|
+
params.push(sourceSite);
|
|
207
|
+
const result = await pool.query(`SELECT *,
|
|
208
|
+
LEAST(ts_rank(search_vector, plainto_tsquery('english', $2)), 1.0) AS similarity,
|
|
209
|
+
LEAST(ts_rank(search_vector, plainto_tsquery('english', $2)), 1.0) AS semantic_similarity,
|
|
210
|
+
LEAST(ts_rank(search_vector, plainto_tsquery('english', $2)), 1.0) AS relevance,
|
|
211
|
+
ts_rank(search_vector, plainto_tsquery('english', $2)) AS score,
|
|
212
|
+
ts_rank(search_vector, plainto_tsquery('english', $2)) AS ranking_score
|
|
213
|
+
FROM memories
|
|
214
|
+
WHERE user_id = $1
|
|
215
|
+
AND deleted_at IS NULL
|
|
216
|
+
AND expired_at IS NULL
|
|
217
|
+
AND status = 'active'
|
|
218
|
+
AND workspace_id IS NULL
|
|
219
|
+
${siteFilter}
|
|
220
|
+
AND search_vector @@ plainto_tsquery('english', $2)
|
|
221
|
+
ORDER BY ts_rank(search_vector, plainto_tsquery('english', $2)) DESC, importance DESC
|
|
222
|
+
LIMIT $3`, params);
|
|
223
|
+
return result.rows.map(normalizeSearchRow);
|
|
224
|
+
}
|
|
225
|
+
async function searchHybridPg(pool, userId, queryText, queryEmbedding, limit, sourceSite, referenceTime) {
|
|
226
|
+
const { params, siteFilter } = buildHybridSearchParams(queryEmbedding, userId, queryText, limit, 'source_site', sourceSite, referenceTime);
|
|
227
|
+
const result = await pool.query(`WITH vector_ranked AS (
|
|
228
|
+
SELECT id, ROW_NUMBER() OVER (ORDER BY embedding <=> $1) AS vrank
|
|
229
|
+
FROM memories
|
|
230
|
+
WHERE user_id = $2 AND deleted_at IS NULL AND expired_at IS NULL AND status = 'active' AND workspace_id IS NULL ${siteFilter}
|
|
231
|
+
ORDER BY embedding <=> $1
|
|
232
|
+
LIMIT $4 * 4
|
|
233
|
+
),
|
|
234
|
+
fts_ranked AS (
|
|
235
|
+
SELECT id, ROW_NUMBER() OVER (ORDER BY ts_rank(search_vector, plainto_tsquery('english', $3)) DESC) AS ftsrank
|
|
236
|
+
FROM memories
|
|
237
|
+
WHERE user_id = $2 AND deleted_at IS NULL AND expired_at IS NULL AND status = 'active' AND workspace_id IS NULL ${siteFilter}
|
|
238
|
+
AND search_vector @@ plainto_tsquery('english', $3)
|
|
239
|
+
ORDER BY ts_rank(search_vector, plainto_tsquery('english', $3)) DESC
|
|
240
|
+
LIMIT $4 * 4
|
|
241
|
+
),
|
|
242
|
+
fused AS (
|
|
243
|
+
SELECT COALESCE(v.id, f.id) AS id,
|
|
244
|
+
COALESCE(1.0 / (${RRF_K} + v.vrank), 0) + COALESCE(1.0 / (${RRF_K} + f.ftsrank), 0) AS rrf_score
|
|
245
|
+
FROM vector_ranked v
|
|
246
|
+
FULL OUTER JOIN fts_ranked f ON v.id = f.id
|
|
247
|
+
)
|
|
248
|
+
SELECT m.*,
|
|
249
|
+
1 - (m.embedding <=> $1) AS similarity,
|
|
250
|
+
1 - (m.embedding <=> $1) AS semantic_similarity,
|
|
251
|
+
GREATEST(0, LEAST(1, 1 - (m.embedding <=> $1))) AS relevance,
|
|
252
|
+
(
|
|
253
|
+
$5 * (1 - (m.embedding <=> $1))
|
|
254
|
+
+ $6 * m.importance
|
|
255
|
+
+ $7 * EXP(-EXTRACT(EPOCH FROM ($8::timestamptz - m.last_accessed_at)) / 2592000.0)
|
|
256
|
+
+ ${config.retrievalProfileSettings.lexicalWeight} * f.rrf_score
|
|
257
|
+
) * COALESCE(m.trust_score, 1.0) AS score,
|
|
258
|
+
(
|
|
259
|
+
$5 * (1 - (m.embedding <=> $1))
|
|
260
|
+
+ CASE WHEN (1 - (m.embedding <=> $1)) >= $9 THEN (
|
|
261
|
+
$6 * m.importance
|
|
262
|
+
+ $7 * EXP(-EXTRACT(EPOCH FROM ($8::timestamptz - m.last_accessed_at)) / 2592000.0)
|
|
263
|
+
) ELSE 0 END
|
|
264
|
+
-- Lexical RRF stays outside the semantic boost gate because exact text match is itself a relevance signal.
|
|
265
|
+
+ ${config.retrievalProfileSettings.lexicalWeight} * f.rrf_score
|
|
266
|
+
) * COALESCE(m.trust_score, 1.0) AS ranking_score
|
|
267
|
+
FROM fused f
|
|
268
|
+
JOIN memories m ON m.id = f.id
|
|
269
|
+
ORDER BY ranking_score DESC
|
|
270
|
+
LIMIT $4`, params);
|
|
271
|
+
return result.rows.map(normalizeSearchRow);
|
|
272
|
+
}
|
|
273
|
+
async function searchVectorsRuvectorMock(pool, userId, queryEmbedding, limit, sourceSite, referenceTime) {
|
|
274
|
+
const memories = await loadActiveMemories(pool, userId, sourceSite);
|
|
275
|
+
return rankAndSortMemories(memories, queryEmbedding, limit, referenceTime);
|
|
276
|
+
}
|
|
277
|
+
async function findDuplicateVectorsRuvectorMock(pool, userId, embedding, threshold, limit) {
|
|
278
|
+
const memories = await loadActiveMemories(pool, userId);
|
|
279
|
+
return findDuplicatesInMemoryList(memories, embedding, threshold, limit);
|
|
280
|
+
}
|
|
281
|
+
async function searchVectorsZvecMock(pool, userId, queryEmbedding, limit, sourceSite, referenceTime) {
|
|
282
|
+
const memories = await loadActiveMemories(pool, userId, sourceSite);
|
|
283
|
+
const shortlist = buildApproximateShortlist(memories, queryEmbedding, limit);
|
|
284
|
+
return rankAndSortMemories(shortlist, queryEmbedding, limit, referenceTime);
|
|
285
|
+
}
|
|
286
|
+
async function findDuplicateVectorsZvecMock(pool, userId, embedding, threshold, limit) {
|
|
287
|
+
const memories = await loadActiveMemories(pool, userId);
|
|
288
|
+
const shortlist = buildApproximateShortlist(memories, embedding, limit * 8);
|
|
289
|
+
return findDuplicatesInMemoryList(shortlist, embedding, threshold, limit);
|
|
290
|
+
}
|
|
291
|
+
/** Shared in-memory duplicate detection for mock backends. */
|
|
292
|
+
function findDuplicatesInMemoryList(memories, embedding, threshold, limit) {
|
|
293
|
+
return memories
|
|
294
|
+
.map((memory) => buildCandidate(memory, embedding))
|
|
295
|
+
.filter((candidate) => candidate.similarity > threshold)
|
|
296
|
+
.sort((left, right) => right.similarity - left.similarity)
|
|
297
|
+
.slice(0, normalizeLimit(limit));
|
|
298
|
+
}
|
|
299
|
+
/** Shared rank-and-sort for mock vector search backends. */
|
|
300
|
+
function rankAndSortMemories(memories, queryEmbedding, limit, referenceTime) {
|
|
301
|
+
return memories
|
|
302
|
+
.map((memory) => rankMemory(memory, queryEmbedding, referenceTime))
|
|
303
|
+
.sort((left, right) => (right.ranking_score ?? right.score) - (left.ranking_score ?? left.score))
|
|
304
|
+
.slice(0, normalizeLimit(limit));
|
|
305
|
+
}
|
|
306
|
+
async function loadActiveMemories(pool, userId, sourceSite) {
|
|
307
|
+
const result = await pool.query(`SELECT * FROM memories
|
|
308
|
+
WHERE user_id = $1
|
|
309
|
+
AND deleted_at IS NULL
|
|
310
|
+
AND expired_at IS NULL
|
|
311
|
+
AND status = 'active'
|
|
312
|
+
AND workspace_id IS NULL
|
|
313
|
+
${sourceSite ? 'AND source_site = $2' : ''}`, sourceSite ? [userId, sourceSite] : [userId]);
|
|
314
|
+
return result.rows.map(normalizeMemoryRow);
|
|
315
|
+
}
|
|
316
|
+
function rankMemory(memory, queryEmbedding, referenceTime) {
|
|
317
|
+
const similarity = cosineSimilarity(queryEmbedding, memory.embedding);
|
|
318
|
+
const rawScore = computeScore(similarity, memory.importance, memory.last_accessed_at, referenceTime, false);
|
|
319
|
+
const score = rawScore * (memory.trust_score ?? 1.0);
|
|
320
|
+
const rawRankingScore = computeScore(similarity, memory.importance, memory.last_accessed_at, referenceTime, true);
|
|
321
|
+
const rankingScore = rawRankingScore * (memory.trust_score ?? 1.0);
|
|
322
|
+
return {
|
|
323
|
+
...memory,
|
|
324
|
+
similarity,
|
|
325
|
+
score,
|
|
326
|
+
semantic_similarity: similarity,
|
|
327
|
+
ranking_score: rankingScore,
|
|
328
|
+
relevance: clampUnit(similarity),
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
function buildCandidate(memory, queryEmbedding) {
|
|
332
|
+
return {
|
|
333
|
+
id: memory.id,
|
|
334
|
+
content: memory.content,
|
|
335
|
+
importance: memory.importance,
|
|
336
|
+
similarity: cosineSimilarity(queryEmbedding, memory.embedding),
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
function buildApproximateShortlist(memories, queryEmbedding, limit) {
|
|
340
|
+
const candidatePool = Math.max(normalizeLimit(limit) * 6, 24);
|
|
341
|
+
return memories
|
|
342
|
+
.map((memory) => ({
|
|
343
|
+
memory,
|
|
344
|
+
similarity: approximateCosineSimilarity(queryEmbedding, memory.embedding),
|
|
345
|
+
}))
|
|
346
|
+
.sort((left, right) => right.similarity - left.similarity)
|
|
347
|
+
.slice(0, candidatePool)
|
|
348
|
+
.map((entry) => entry.memory);
|
|
349
|
+
}
|
|
350
|
+
function computeScore(similarity, importance, lastAccessedAt, referenceTime, applyRankingFloor) {
|
|
351
|
+
const refMs = referenceTime ? referenceTime.getTime() : Date.now();
|
|
352
|
+
const secondsSinceAccess = (refMs - lastAccessedAt.getTime()) / 1000;
|
|
353
|
+
const recency = Math.exp(-secondsSinceAccess / 2592000.0);
|
|
354
|
+
const canUseNonSemanticScore = !applyRankingFloor
|
|
355
|
+
|| similarity >= clampUnit(config.retrievalProfileSettings.rankingMinSimilarity);
|
|
356
|
+
const nonSemanticScore = canUseNonSemanticScore
|
|
357
|
+
? (config.scoringWeightImportance * importance) + (config.scoringWeightRecency * recency)
|
|
358
|
+
: 0;
|
|
359
|
+
return (config.scoringWeightSimilarity * similarity) + nonSemanticScore;
|
|
360
|
+
}
|
|
361
|
+
function approximateCosineSimilarity(left, right) {
|
|
362
|
+
return cosineSimilarity(projectEmbedding(left), projectEmbedding(right));
|
|
363
|
+
}
|
|
364
|
+
function projectEmbedding(values) {
|
|
365
|
+
const projected = [];
|
|
366
|
+
for (let index = 0; index < values.length; index += 6) {
|
|
367
|
+
projected.push(values[index]);
|
|
368
|
+
}
|
|
369
|
+
return projected;
|
|
370
|
+
}
|
|
371
|
+
function normalizeLimit(limit) {
|
|
372
|
+
return Math.max(1, Math.min(100, limit));
|
|
373
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Full-wipe path for the deleteAll (user-scoped + global)
|
|
3
|
+
* cleanup-then-hard-delete sequence.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from `repository-write.ts` to keep that module under
|
|
6
|
+
* the workspace's 400-non-comment-LOC cap. The wipe path is its own
|
|
7
|
+
* concern: it cleans managed blobs first (so a failure can mark
|
|
8
|
+
* surviving rows `raw_storage_failed` + sync the linked artifact)
|
|
9
|
+
* and then hard-deletes the memory tables, raw_documents,
|
|
10
|
+
* storage_artifacts, and raw_sources in FK-safe order.
|
|
11
|
+
*/
|
|
12
|
+
import type pg from 'pg';
|
|
13
|
+
import type { RawContentStore } from '../storage/raw-content-store.js';
|
|
14
|
+
import type { RawContentStoreRegistry } from '../storage/store-registry.js';
|
|
15
|
+
export interface DeleteAllOptions {
|
|
16
|
+
rawContentStore?: RawContentStore | null;
|
|
17
|
+
/**
|
|
18
|
+
* Phase 4a per-row dispatch registry. Defaults to a single-store
|
|
19
|
+
* registry wrapping `rawContentStore` so existing callers that
|
|
20
|
+
* pass just the active store continue to work; composition-root
|
|
21
|
+
* code passes a multi-provider registry when
|
|
22
|
+
* `RAW_STORAGE_LEGACY_PROVIDERS` is set.
|
|
23
|
+
*/
|
|
24
|
+
storeRegistry?: RawContentStoreRegistry;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Hard-wipe everything for a user (`userId` set) or globally
|
|
28
|
+
* (`userId` undefined). Cleanup runs first; on failure the surviving
|
|
29
|
+
* rows are marked `raw_storage_failed` (with the linked artifact
|
|
30
|
+
* synced via the paired helper) and `ManagedBlobCleanupError` is
|
|
31
|
+
* thrown without touching the rest of the tables — the operator
|
|
32
|
+
* fixes the upstream issue and retries.
|
|
33
|
+
*/
|
|
34
|
+
export declare function deleteAll(pool: pg.Pool, userId?: string, options?: DeleteAllOptions): Promise<void>;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Full-wipe path for the deleteAll (user-scoped + global)
|
|
3
|
+
* cleanup-then-hard-delete sequence.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from `repository-write.ts` to keep that module under
|
|
6
|
+
* the workspace's 400-non-comment-LOC cap. The wipe path is its own
|
|
7
|
+
* concern: it cleans managed blobs first (so a failure can mark
|
|
8
|
+
* surviving rows `raw_storage_failed` + sync the linked artifact)
|
|
9
|
+
* and then hard-deletes the memory tables, raw_documents,
|
|
10
|
+
* storage_artifacts, and raw_sources in FK-safe order.
|
|
11
|
+
*/
|
|
12
|
+
import { cleanupManagedBlobs, ManagedBlobCleanupError, } from '../storage/cleanup.js';
|
|
13
|
+
import { singleStoreRegistry } from '../storage/store-registry.js';
|
|
14
|
+
import { listManagedBlobsForUser } from './raw-document-blob-repository.js';
|
|
15
|
+
import { buildRawStorageCleanupFailureEnvelope, markCleanupFailedAndSyncArtifact, } from './raw-doc-artifact-sync.js';
|
|
16
|
+
/**
|
|
17
|
+
* Hard-wipe everything for a user (`userId` set) or globally
|
|
18
|
+
* (`userId` undefined). Cleanup runs first; on failure the surviving
|
|
19
|
+
* rows are marked `raw_storage_failed` (with the linked artifact
|
|
20
|
+
* synced via the paired helper) and `ManagedBlobCleanupError` is
|
|
21
|
+
* thrown without touching the rest of the tables — the operator
|
|
22
|
+
* fixes the upstream issue and retries.
|
|
23
|
+
*/
|
|
24
|
+
export async function deleteAll(pool, userId, options = {}) {
|
|
25
|
+
const blobs = await listManagedBlobsForUser(pool, userId);
|
|
26
|
+
if (blobs.length > 0) {
|
|
27
|
+
const registry = options.storeRegistry
|
|
28
|
+
?? singleStoreRegistry(options.rawContentStore ?? null);
|
|
29
|
+
const result = await cleanupManagedBlobs(registry, blobs);
|
|
30
|
+
if (result.failures.length > 0) {
|
|
31
|
+
for (const failure of result.failures) {
|
|
32
|
+
await markDeleteAllCleanupFailure(pool, userId, failure.rawDocumentId, buildRawStorageCleanupFailureEnvelope(failure.message, failure.storageProvider));
|
|
33
|
+
}
|
|
34
|
+
throw new ManagedBlobCleanupError(result);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
if (userId)
|
|
38
|
+
await deleteAllForUser(pool, userId);
|
|
39
|
+
else
|
|
40
|
+
await deleteAllGlobal(pool);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Mark a cleanup-failure row `raw_storage_failed` and sync the
|
|
44
|
+
* linked artifact to `failed`. For `userId` set (user-scoped wipe),
|
|
45
|
+
* we use the standard paired helper. For the global wipe path
|
|
46
|
+
* (`userId` undefined), we resolve the row's owner first so the
|
|
47
|
+
* paired helper can run with its owner-scope guard intact.
|
|
48
|
+
*/
|
|
49
|
+
async function markDeleteAllCleanupFailure(pool, userId, rawDocumentId, lastError) {
|
|
50
|
+
if (userId !== undefined) {
|
|
51
|
+
await markCleanupFailedAndSyncArtifact(pool, { userId, rawDocumentId, lastError });
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const lookup = await pool.query(`SELECT user_id FROM raw_documents WHERE id = $1`, [rawDocumentId]);
|
|
55
|
+
if (lookup.rowCount === 0)
|
|
56
|
+
return;
|
|
57
|
+
await markCleanupFailedAndSyncArtifact(pool, {
|
|
58
|
+
userId: lookup.rows[0].user_id,
|
|
59
|
+
rawDocumentId,
|
|
60
|
+
lastError,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* User-scoped hard-delete. Chunks → documents → storage_artifacts →
|
|
65
|
+
* sources, in FK-safe order. `storage_artifacts` is hard-deleted
|
|
66
|
+
* AFTER `raw_documents` because the composite FK
|
|
67
|
+
* `raw_documents(storage_artifact_id, user_id) → storage_artifacts`
|
|
68
|
+
* points one way.
|
|
69
|
+
*/
|
|
70
|
+
async function deleteAllForUser(pool, userId) {
|
|
71
|
+
await pool.query('DELETE FROM memory_evidence WHERE claim_version_id IN (SELECT id FROM memory_claim_versions WHERE user_id = $1)', [userId]);
|
|
72
|
+
await pool.query('DELETE FROM memory_claim_versions WHERE user_id = $1', [userId]);
|
|
73
|
+
await pool.query('DELETE FROM memory_claims WHERE user_id = $1', [userId]);
|
|
74
|
+
await pool.query('DELETE FROM memory_links WHERE source_id IN (SELECT id FROM memories WHERE user_id = $1)', [userId]);
|
|
75
|
+
await pool.query('DELETE FROM memories WHERE user_id = $1', [userId]);
|
|
76
|
+
await pool.query('DELETE FROM episodes WHERE user_id = $1', [userId]);
|
|
77
|
+
await pool.query('DELETE FROM document_chunks WHERE user_id = $1', [userId]);
|
|
78
|
+
await pool.query('DELETE FROM raw_documents WHERE user_id = $1', [userId]);
|
|
79
|
+
await pool.query('DELETE FROM storage_artifacts WHERE user_id = $1', [userId]);
|
|
80
|
+
await pool.query('DELETE FROM raw_sources WHERE user_id = $1', [userId]);
|
|
81
|
+
}
|
|
82
|
+
/** Global hard-delete. Same FK-safe order; no user filter. */
|
|
83
|
+
async function deleteAllGlobal(pool) {
|
|
84
|
+
await pool.query('DELETE FROM memory_evidence');
|
|
85
|
+
await pool.query('DELETE FROM memory_claim_versions');
|
|
86
|
+
await pool.query('DELETE FROM memory_claims');
|
|
87
|
+
await pool.query('DELETE FROM memory_links');
|
|
88
|
+
await pool.query('DELETE FROM memories');
|
|
89
|
+
await pool.query('DELETE FROM episodes');
|
|
90
|
+
await pool.query('DELETE FROM document_chunks');
|
|
91
|
+
await pool.query('DELETE FROM raw_documents');
|
|
92
|
+
await pool.query('DELETE FROM storage_artifacts');
|
|
93
|
+
await pool.query('DELETE FROM raw_sources');
|
|
94
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Write-side queries for episodes and active memory projections.
|
|
3
|
+
*/
|
|
4
|
+
import pg from 'pg';
|
|
5
|
+
import { type CanonicalFactPayload, type CanonicalMemoryObjectFamily, type CanonicalMemoryObjectLineage, type CanonicalMemoryObjectProvenance, type MemoryMetadata, type StoreMemoryInput } from './repository-types.js';
|
|
6
|
+
export interface StoreEpisodeInput {
|
|
7
|
+
userId: string;
|
|
8
|
+
content: string;
|
|
9
|
+
sourceSite: string;
|
|
10
|
+
sourceUrl?: string;
|
|
11
|
+
sessionId?: string;
|
|
12
|
+
workspaceId?: string;
|
|
13
|
+
agentId?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function storeEpisode(pool: pg.Pool, input: StoreEpisodeInput): Promise<string>;
|
|
16
|
+
export declare function storeEpisodeWithClient(client: pg.PoolClient, input: StoreEpisodeInput): Promise<string>;
|
|
17
|
+
export type { StoreMemoryInput };
|
|
18
|
+
export interface StoreCanonicalMemoryObjectInput {
|
|
19
|
+
userId: string;
|
|
20
|
+
objectFamily: CanonicalMemoryObjectFamily;
|
|
21
|
+
payloadFormat?: string;
|
|
22
|
+
canonicalPayload: CanonicalFactPayload;
|
|
23
|
+
provenance: CanonicalMemoryObjectProvenance;
|
|
24
|
+
observedAt?: Date;
|
|
25
|
+
lineage: CanonicalMemoryObjectLineage;
|
|
26
|
+
}
|
|
27
|
+
export declare function storeCanonicalMemoryObject(pool: pg.Pool, input: StoreCanonicalMemoryObjectInput): Promise<string>;
|
|
28
|
+
export declare function storeMemory(pool: pg.Pool, input: StoreMemoryInput): Promise<string>;
|
|
29
|
+
export declare function storeMemoryWithClient(client: pg.PoolClient, input: StoreMemoryInput): Promise<string>;
|
|
30
|
+
export declare function updateMemoryContent(pool: pg.Pool, userId: string, id: string, content: string, embedding: number[], importance: number, keywords?: string, trustScore?: number): Promise<void>;
|
|
31
|
+
export declare function updateMemoryContentWithClient(client: pg.PoolClient, userId: string, id: string, content: string, embedding: number[], importance: number, keywords?: string, trustScore?: number): Promise<void>;
|
|
32
|
+
export declare function updateMemoryMetadata(pool: pg.Pool, userId: string, id: string, metadata: MemoryMetadata): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Set the topic_abstraction + topic_embedding columns on a batch of memories.
|
|
35
|
+
* Used by the post-write topic-abstraction processor (Sprint 3 EO experiment).
|
|
36
|
+
*
|
|
37
|
+
* One UPDATE per call; the caller batches by chunk so all facts from a chunk
|
|
38
|
+
* receive the same topic.
|
|
39
|
+
*/
|
|
40
|
+
export declare function updateMemoryTopicAbstraction(pool: pg.Pool, userId: string, memoryIds: string[], topic: string, topicEmbedding: number[]): Promise<void>;
|
|
41
|
+
export declare function softDeleteMemory(pool: pg.Pool, userId: string, id: string): Promise<void>;
|
|
42
|
+
export declare function softDeleteMemoryWithClient(client: pg.PoolClient, userId: string, id: string): Promise<void>;
|
|
43
|
+
export declare function softDeleteMemoryInWorkspace(pool: pg.Pool, id: string, workspaceId: string): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Soft-delete every memory whose Phase 2 provenance points at the given
|
|
46
|
+
* `raw_document_id`. The Phase 2 indexer's re-chunk path calls this so
|
|
47
|
+
* stale derived memories disappear from `/v1/memories/search` before the
|
|
48
|
+
* fresh generation lands.
|
|
49
|
+
*/
|
|
50
|
+
export declare function softDeleteMemoriesForDocument(q: pg.Pool | pg.PoolClient, userId: string, rawDocumentId: string): Promise<number>;
|
|
51
|
+
/**
|
|
52
|
+
* Mark a memory as temporally expired (contradicted/superseded).
|
|
53
|
+
* Unlike soft-delete, expired memories are preserved for temporal queries:
|
|
54
|
+
* "what did I know as of date X?" can still retrieve them.
|
|
55
|
+
*/
|
|
56
|
+
export declare function expireMemory(pool: pg.Pool, userId: string, id: string): Promise<void>;
|
|
57
|
+
export declare function expireMemoryWithClient(client: pg.PoolClient, userId: string, id: string): Promise<void>;
|
|
58
|
+
export declare function touchMemory(pool: pg.Pool, id: string): Promise<void>;
|
|
59
|
+
export declare function updateOpinionConfidence(pool: pg.Pool, userId: string, memoryId: string, newConfidence: number): Promise<void>;
|
|
60
|
+
export declare function backdateMemories(pool: pg.Pool, ids: string[], timestamp: Date): Promise<void>;
|
|
61
|
+
export { deleteAll } from './repository-wipe.js';
|