@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,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repository for agent trust levels and memory conflict tracking.
|
|
3
|
+
* Supports trust-aware AUDN conflict resolution and CLARIFY escalation.
|
|
4
|
+
*/
|
|
5
|
+
import pg from 'pg';
|
|
6
|
+
export interface AgentTrustRecord {
|
|
7
|
+
agent_id: string;
|
|
8
|
+
user_id: string;
|
|
9
|
+
trust_level: number;
|
|
10
|
+
display_name: string | null;
|
|
11
|
+
}
|
|
12
|
+
export interface MemoryConflict {
|
|
13
|
+
id: string;
|
|
14
|
+
user_id: string;
|
|
15
|
+
new_memory_id: string | null;
|
|
16
|
+
existing_memory_id: string | null;
|
|
17
|
+
new_agent_id: string | null;
|
|
18
|
+
existing_agent_id: string | null;
|
|
19
|
+
new_trust_level: number | null;
|
|
20
|
+
existing_trust_level: number | null;
|
|
21
|
+
contradiction_confidence: number;
|
|
22
|
+
clarification_note: string | null;
|
|
23
|
+
status: string;
|
|
24
|
+
resolution_policy: string | null;
|
|
25
|
+
resolved_at: Date | null;
|
|
26
|
+
created_at: Date;
|
|
27
|
+
auto_resolve_after: Date | null;
|
|
28
|
+
}
|
|
29
|
+
export interface ConflictInput {
|
|
30
|
+
userId: string;
|
|
31
|
+
newMemoryId: string | null;
|
|
32
|
+
existingMemoryId: string | null;
|
|
33
|
+
newAgentId: string | null;
|
|
34
|
+
existingAgentId: string | null;
|
|
35
|
+
newTrustLevel: number | null;
|
|
36
|
+
existingTrustLevel: number | null;
|
|
37
|
+
contradictionConfidence: number;
|
|
38
|
+
clarificationNote: string | null;
|
|
39
|
+
}
|
|
40
|
+
export declare class AgentTrustRepository {
|
|
41
|
+
private pool;
|
|
42
|
+
constructor(pool: pg.Pool);
|
|
43
|
+
getTrustLevel(agentId: string, userId: string): Promise<number>;
|
|
44
|
+
setTrustLevel(agentId: string, userId: string, trustLevel: number, displayName?: string): Promise<void>;
|
|
45
|
+
recordConflict(input: ConflictInput): Promise<string>;
|
|
46
|
+
listOpenConflicts(userId: string): Promise<MemoryConflict[]>;
|
|
47
|
+
resolveConflict(conflictId: string, resolution: 'resolved_new' | 'resolved_existing' | 'resolved_both'): Promise<void>;
|
|
48
|
+
autoResolveExpiredConflicts(userId: string): Promise<number>;
|
|
49
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repository for agent trust levels and memory conflict tracking.
|
|
3
|
+
* Supports trust-aware AUDN conflict resolution and CLARIFY escalation.
|
|
4
|
+
*/
|
|
5
|
+
import { config } from '../config.js';
|
|
6
|
+
const DEFAULT_TRUST_LEVEL = 0.5;
|
|
7
|
+
export class AgentTrustRepository {
|
|
8
|
+
pool;
|
|
9
|
+
constructor(pool) {
|
|
10
|
+
this.pool = pool;
|
|
11
|
+
}
|
|
12
|
+
async getTrustLevel(agentId, userId) {
|
|
13
|
+
const result = await this.pool.query('SELECT trust_level FROM agent_trust WHERE agent_id = $1 AND user_id = $2', [agentId, userId]);
|
|
14
|
+
return result.rows[0]?.trust_level ?? DEFAULT_TRUST_LEVEL;
|
|
15
|
+
}
|
|
16
|
+
async setTrustLevel(agentId, userId, trustLevel, displayName) {
|
|
17
|
+
await this.pool.query(`INSERT INTO agent_trust (agent_id, user_id, trust_level, display_name)
|
|
18
|
+
VALUES ($1, $2, $3, $4)
|
|
19
|
+
ON CONFLICT (agent_id) DO UPDATE SET
|
|
20
|
+
trust_level = EXCLUDED.trust_level,
|
|
21
|
+
display_name = COALESCE(EXCLUDED.display_name, agent_trust.display_name),
|
|
22
|
+
updated_at = NOW()`, [agentId, userId, trustLevel, displayName ?? null]);
|
|
23
|
+
}
|
|
24
|
+
async recordConflict(input) {
|
|
25
|
+
const autoResolveAfter = new Date(Date.now() + config.conflictAutoResolveMs);
|
|
26
|
+
const result = await this.pool.query(`INSERT INTO memory_conflicts
|
|
27
|
+
(user_id, new_memory_id, existing_memory_id, new_agent_id, existing_agent_id,
|
|
28
|
+
new_trust_level, existing_trust_level, contradiction_confidence, clarification_note,
|
|
29
|
+
auto_resolve_after)
|
|
30
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
|
|
31
|
+
RETURNING id`, [
|
|
32
|
+
input.userId,
|
|
33
|
+
input.newMemoryId,
|
|
34
|
+
input.existingMemoryId,
|
|
35
|
+
input.newAgentId,
|
|
36
|
+
input.existingAgentId,
|
|
37
|
+
input.newTrustLevel,
|
|
38
|
+
input.existingTrustLevel,
|
|
39
|
+
input.contradictionConfidence,
|
|
40
|
+
input.clarificationNote,
|
|
41
|
+
autoResolveAfter,
|
|
42
|
+
]);
|
|
43
|
+
return result.rows[0].id;
|
|
44
|
+
}
|
|
45
|
+
async listOpenConflicts(userId) {
|
|
46
|
+
const result = await this.pool.query(`SELECT * FROM memory_conflicts
|
|
47
|
+
WHERE user_id = $1 AND status = 'open'
|
|
48
|
+
ORDER BY created_at DESC`, [userId]);
|
|
49
|
+
return result.rows;
|
|
50
|
+
}
|
|
51
|
+
async resolveConflict(conflictId, resolution) {
|
|
52
|
+
await this.pool.query(`UPDATE memory_conflicts
|
|
53
|
+
SET status = $2, resolved_at = NOW(), resolution_policy = 'manual'
|
|
54
|
+
WHERE id = $1`, [conflictId, resolution]);
|
|
55
|
+
}
|
|
56
|
+
async autoResolveExpiredConflicts(userId) {
|
|
57
|
+
const result = await this.pool.query(`UPDATE memory_conflicts
|
|
58
|
+
SET status = 'auto_resolved', resolved_at = NOW(), resolution_policy = 'trust_lww'
|
|
59
|
+
WHERE user_id = $1
|
|
60
|
+
AND status = 'open'
|
|
61
|
+
AND auto_resolve_after IS NOT NULL
|
|
62
|
+
AND auto_resolve_after <= NOW()
|
|
63
|
+
RETURNING id, existing_trust_level, new_trust_level, new_memory_id, existing_memory_id`, [userId]);
|
|
64
|
+
return result.rowCount ?? 0;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repository for the typed belief graph (TBC Phase 3).
|
|
3
|
+
* Stores and queries edges produced by the EvidenceFor / Counter / Supersede /
|
|
4
|
+
* Promote / Demote operators of the typed belief calculus.
|
|
5
|
+
*
|
|
6
|
+
* Schema lives in src/db/schema.sql under "TBC Phase 3" section.
|
|
7
|
+
* Activated only when `TBC_ENABLED=true`; see docs/typed-belief-calculus.md.
|
|
8
|
+
*/
|
|
9
|
+
import pg from 'pg';
|
|
10
|
+
export type BeliefEdgeType = 'evidence_for' | 'counter' | 'supersedes' | 'promotes' | 'demotes';
|
|
11
|
+
export interface BeliefEdge {
|
|
12
|
+
id: string;
|
|
13
|
+
user_id: string;
|
|
14
|
+
source_id: string;
|
|
15
|
+
target_id: string;
|
|
16
|
+
edge_type: BeliefEdgeType;
|
|
17
|
+
weight: number;
|
|
18
|
+
rationale: string;
|
|
19
|
+
created_at: Date;
|
|
20
|
+
workspace_id: string | null;
|
|
21
|
+
agent_id: string | null;
|
|
22
|
+
}
|
|
23
|
+
export interface AppendEdgeInput {
|
|
24
|
+
userId: string;
|
|
25
|
+
sourceId: string;
|
|
26
|
+
targetId: string;
|
|
27
|
+
edgeType: BeliefEdgeType;
|
|
28
|
+
weight: number;
|
|
29
|
+
rationale: string;
|
|
30
|
+
workspaceId?: string | null;
|
|
31
|
+
agentId?: string | null;
|
|
32
|
+
}
|
|
33
|
+
export interface ConfidenceAggregate {
|
|
34
|
+
evidenceForCount: number;
|
|
35
|
+
counterCount: number;
|
|
36
|
+
evidenceForWeightSum: number;
|
|
37
|
+
counterWeightSum: number;
|
|
38
|
+
/** Net confidence delta = sum(evidence_for weights) - |sum(counter weights)|. Bounded [-1,1] by clamp. */
|
|
39
|
+
netDelta: number;
|
|
40
|
+
}
|
|
41
|
+
export declare class BeliefEdgesRepository {
|
|
42
|
+
private readonly pool;
|
|
43
|
+
constructor(pool: pg.Pool);
|
|
44
|
+
/** Insert a typed edge. Returns the new row's id. */
|
|
45
|
+
appendEdge(input: AppendEdgeInput): Promise<string>;
|
|
46
|
+
/** All edges pointing at a given target (for "what supports/contradicts X" queries). */
|
|
47
|
+
getEdgesForTarget(userId: string, targetId: string): Promise<BeliefEdge[]>;
|
|
48
|
+
/** All edges originating from a given source (for "what does this evidence affect" queries). */
|
|
49
|
+
getEdgesFromSource(userId: string, sourceId: string): Promise<BeliefEdge[]>;
|
|
50
|
+
/**
|
|
51
|
+
* Fold all evidence/counter edges pointing at a target into a single
|
|
52
|
+
* confidence-delta reading. Caller decides how to apply the delta to
|
|
53
|
+
* memories.confidence (e.g., max-cap at 1.0, floor at 0.0).
|
|
54
|
+
*/
|
|
55
|
+
aggregateConfidenceDelta(userId: string, targetId: string): Promise<ConfidenceAggregate>;
|
|
56
|
+
/**
|
|
57
|
+
* Fetch COUNTER edges where at least one side (source or target) is in the
|
|
58
|
+
* given memory ID list. Used by the CR specialist to surface bilateral
|
|
59
|
+
* contradictions among the top-K retrieved set.
|
|
60
|
+
*/
|
|
61
|
+
findCounterEdgesForMemories(userId: string, memoryIds: string[]): Promise<Array<{
|
|
62
|
+
sourceId: string;
|
|
63
|
+
targetId: string;
|
|
64
|
+
rationale: string;
|
|
65
|
+
}>>;
|
|
66
|
+
/** Test/dev helper: remove all edges for a user (e.g., between integration runs). */
|
|
67
|
+
deleteAllForUser(userId: string): Promise<void>;
|
|
68
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Repository for the typed belief graph (TBC Phase 3).
|
|
3
|
+
* Stores and queries edges produced by the EvidenceFor / Counter / Supersede /
|
|
4
|
+
* Promote / Demote operators of the typed belief calculus.
|
|
5
|
+
*
|
|
6
|
+
* Schema lives in src/db/schema.sql under "TBC Phase 3" section.
|
|
7
|
+
* Activated only when `TBC_ENABLED=true`; see docs/typed-belief-calculus.md.
|
|
8
|
+
*/
|
|
9
|
+
export class BeliefEdgesRepository {
|
|
10
|
+
pool;
|
|
11
|
+
constructor(pool) {
|
|
12
|
+
this.pool = pool;
|
|
13
|
+
}
|
|
14
|
+
/** Insert a typed edge. Returns the new row's id. */
|
|
15
|
+
async appendEdge(input) {
|
|
16
|
+
validateWeightForType(input.edgeType, input.weight);
|
|
17
|
+
const result = await this.pool.query(`INSERT INTO belief_edges
|
|
18
|
+
(user_id, source_id, target_id, edge_type, weight, rationale, workspace_id, agent_id)
|
|
19
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
|
|
20
|
+
RETURNING id`, [
|
|
21
|
+
input.userId,
|
|
22
|
+
input.sourceId,
|
|
23
|
+
input.targetId,
|
|
24
|
+
input.edgeType,
|
|
25
|
+
input.weight,
|
|
26
|
+
input.rationale,
|
|
27
|
+
input.workspaceId ?? null,
|
|
28
|
+
input.agentId ?? null,
|
|
29
|
+
]);
|
|
30
|
+
return result.rows[0]?.id ?? '';
|
|
31
|
+
}
|
|
32
|
+
/** All edges pointing at a given target (for "what supports/contradicts X" queries). */
|
|
33
|
+
async getEdgesForTarget(userId, targetId) {
|
|
34
|
+
const result = await this.pool.query(`SELECT id, user_id, source_id, target_id, edge_type, weight, rationale,
|
|
35
|
+
created_at, workspace_id, agent_id
|
|
36
|
+
FROM belief_edges
|
|
37
|
+
WHERE user_id = $1 AND target_id = $2
|
|
38
|
+
ORDER BY created_at DESC`, [userId, targetId]);
|
|
39
|
+
return result.rows.map(rowToBeliefEdge);
|
|
40
|
+
}
|
|
41
|
+
/** All edges originating from a given source (for "what does this evidence affect" queries). */
|
|
42
|
+
async getEdgesFromSource(userId, sourceId) {
|
|
43
|
+
const result = await this.pool.query(`SELECT id, user_id, source_id, target_id, edge_type, weight, rationale,
|
|
44
|
+
created_at, workspace_id, agent_id
|
|
45
|
+
FROM belief_edges
|
|
46
|
+
WHERE user_id = $1 AND source_id = $2
|
|
47
|
+
ORDER BY created_at DESC`, [userId, sourceId]);
|
|
48
|
+
return result.rows.map(rowToBeliefEdge);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Fold all evidence/counter edges pointing at a target into a single
|
|
52
|
+
* confidence-delta reading. Caller decides how to apply the delta to
|
|
53
|
+
* memories.confidence (e.g., max-cap at 1.0, floor at 0.0).
|
|
54
|
+
*/
|
|
55
|
+
async aggregateConfidenceDelta(userId, targetId) {
|
|
56
|
+
const result = await this.pool.query(`SELECT edge_type, COUNT(*)::int AS n, SUM(weight)::float AS sum_weight
|
|
57
|
+
FROM belief_edges
|
|
58
|
+
WHERE user_id = $1 AND target_id = $2
|
|
59
|
+
AND edge_type IN ('evidence_for', 'counter')
|
|
60
|
+
GROUP BY edge_type`, [userId, targetId]);
|
|
61
|
+
let evidenceForCount = 0;
|
|
62
|
+
let counterCount = 0;
|
|
63
|
+
let evidenceForWeightSum = 0;
|
|
64
|
+
let counterWeightSum = 0;
|
|
65
|
+
for (const row of result.rows) {
|
|
66
|
+
const sum = row.sum_weight === null ? 0 : Number(row.sum_weight);
|
|
67
|
+
if (row.edge_type === 'evidence_for') {
|
|
68
|
+
evidenceForCount = Number(row.n);
|
|
69
|
+
evidenceForWeightSum = sum;
|
|
70
|
+
}
|
|
71
|
+
else if (row.edge_type === 'counter') {
|
|
72
|
+
counterCount = Number(row.n);
|
|
73
|
+
counterWeightSum = sum;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const rawDelta = evidenceForWeightSum - Math.abs(counterWeightSum);
|
|
77
|
+
const netDelta = Math.max(-1, Math.min(1, rawDelta));
|
|
78
|
+
return {
|
|
79
|
+
evidenceForCount,
|
|
80
|
+
counterCount,
|
|
81
|
+
evidenceForWeightSum,
|
|
82
|
+
counterWeightSum,
|
|
83
|
+
netDelta,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Fetch COUNTER edges where at least one side (source or target) is in the
|
|
88
|
+
* given memory ID list. Used by the CR specialist to surface bilateral
|
|
89
|
+
* contradictions among the top-K retrieved set.
|
|
90
|
+
*/
|
|
91
|
+
async findCounterEdgesForMemories(userId, memoryIds) {
|
|
92
|
+
if (memoryIds.length === 0)
|
|
93
|
+
return [];
|
|
94
|
+
const result = await this.pool.query(`SELECT source_id, target_id, rationale
|
|
95
|
+
FROM belief_edges
|
|
96
|
+
WHERE user_id = $1
|
|
97
|
+
AND edge_type = 'counter'
|
|
98
|
+
AND (source_id = ANY($2) OR target_id = ANY($2))`, [userId, memoryIds]);
|
|
99
|
+
return result.rows.map(r => ({
|
|
100
|
+
sourceId: r.source_id,
|
|
101
|
+
targetId: r.target_id,
|
|
102
|
+
rationale: r.rationale,
|
|
103
|
+
}));
|
|
104
|
+
}
|
|
105
|
+
/** Test/dev helper: remove all edges for a user (e.g., between integration runs). */
|
|
106
|
+
async deleteAllForUser(userId) {
|
|
107
|
+
await this.pool.query(`DELETE FROM belief_edges WHERE user_id = $1`, [userId]);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function rowToBeliefEdge(row) {
|
|
111
|
+
return { ...row };
|
|
112
|
+
}
|
|
113
|
+
/** Edge weight semantics by type. Schema check enforces [-1,1]; this enforces sign. */
|
|
114
|
+
function validateWeightForType(edgeType, weight) {
|
|
115
|
+
if (!Number.isFinite(weight) || weight < -1 || weight > 1) {
|
|
116
|
+
throw new Error(`belief_edges weight must be in [-1, 1], got ${weight}`);
|
|
117
|
+
}
|
|
118
|
+
if (edgeType === 'evidence_for' && weight < 0) {
|
|
119
|
+
throw new Error(`evidence_for edge weight must be >= 0 (got ${weight})`);
|
|
120
|
+
}
|
|
121
|
+
if (edgeType === 'counter' && weight > 0) {
|
|
122
|
+
throw new Error(`counter edge weight must be <= 0 (got ${weight})`);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backward-compatible wrapper around the split claim repository module.
|
|
3
|
+
*/
|
|
4
|
+
export { ClaimRepository } from './repository-claims.js';
|
|
5
|
+
export type { ClaimRow, ClaimVersionRow, } from './repository-types.js';
|
|
6
|
+
export type { ClaimSlotInput, SlotBackfillCandidate, ClaimSlotTarget, } from './repository-claims.js';
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ContradictionsRepository — bilateral preservation of contradictory memories.
|
|
3
|
+
*
|
|
4
|
+
* Phase: BEAM CR fix (2026-05-12). Instead of AUDN's DELETE/SUPERSEDE path
|
|
5
|
+
* discarding the older side of a contradiction, the bilateral path keeps
|
|
6
|
+
* both rows in `memories` and records the conflict here for analytics +
|
|
7
|
+
* retrieval-side enrichment.
|
|
8
|
+
*
|
|
9
|
+
* Pure SQL via pg.Pool. Mutations fail closed — errors propagate to the caller.
|
|
10
|
+
*/
|
|
11
|
+
import type pg from 'pg';
|
|
12
|
+
export interface ContradictionRow {
|
|
13
|
+
id: string;
|
|
14
|
+
userId: string;
|
|
15
|
+
conversationId: string | null;
|
|
16
|
+
leftMemoryId: string;
|
|
17
|
+
rightMemoryId: string;
|
|
18
|
+
leftSummary: string;
|
|
19
|
+
rightSummary: string;
|
|
20
|
+
resolved: boolean;
|
|
21
|
+
resolutionNote: string | null;
|
|
22
|
+
detectedAt: Date;
|
|
23
|
+
}
|
|
24
|
+
interface RecordContradictionInput {
|
|
25
|
+
userId: string;
|
|
26
|
+
conversationId?: string | null;
|
|
27
|
+
leftMemoryId: string;
|
|
28
|
+
rightMemoryId: string;
|
|
29
|
+
leftSummary: string;
|
|
30
|
+
rightSummary: string;
|
|
31
|
+
}
|
|
32
|
+
export declare class ContradictionsRepository {
|
|
33
|
+
private readonly pool;
|
|
34
|
+
constructor(pool: pg.Pool);
|
|
35
|
+
/**
|
|
36
|
+
* Insert a new contradiction row. Returns the generated row id so callers
|
|
37
|
+
* (memory-audn bilateral path) can attach the id to both memory rows in
|
|
38
|
+
* the same transaction-style flow.
|
|
39
|
+
*/
|
|
40
|
+
record(input: RecordContradictionInput): Promise<string>;
|
|
41
|
+
/**
|
|
42
|
+
* Find active (unresolved) contradiction rows for the given user whose
|
|
43
|
+
* left OR right memory id is in the provided list. Used by retrieval
|
|
44
|
+
* enrichment to fetch contradiction pairs when a `contradiction_active`
|
|
45
|
+
* memory appears in top-K.
|
|
46
|
+
*/
|
|
47
|
+
findActiveByUserAndMemoryIds(userId: string, memoryIds: readonly string[]): Promise<ContradictionRow[]>;
|
|
48
|
+
/**
|
|
49
|
+
* Apply the bilateral contradiction flags to BOTH memory rows: each row's
|
|
50
|
+
* `contradicts_memory_id` is set to its counterpart and
|
|
51
|
+
* `contradiction_active=true`. Fails closed: errors propagate so the
|
|
52
|
+
* caller never silently falls back to ADD when the bilateral write fails.
|
|
53
|
+
*/
|
|
54
|
+
markContradictionFlagsBilateral(userId: string, memoryIdA: string, memoryIdB: string): Promise<void>;
|
|
55
|
+
}
|
|
56
|
+
export {};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
export class ContradictionsRepository {
|
|
2
|
+
pool;
|
|
3
|
+
constructor(pool) {
|
|
4
|
+
this.pool = pool;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Insert a new contradiction row. Returns the generated row id so callers
|
|
8
|
+
* (memory-audn bilateral path) can attach the id to both memory rows in
|
|
9
|
+
* the same transaction-style flow.
|
|
10
|
+
*/
|
|
11
|
+
async record(input) {
|
|
12
|
+
const { rows } = await this.pool.query(`INSERT INTO memory_contradictions
|
|
13
|
+
(user_id, conversation_id, left_memory_id, right_memory_id,
|
|
14
|
+
left_summary, right_summary)
|
|
15
|
+
VALUES ($1, $2, $3, $4, $5, $6)
|
|
16
|
+
RETURNING id`, [
|
|
17
|
+
input.userId,
|
|
18
|
+
input.conversationId ?? null,
|
|
19
|
+
input.leftMemoryId,
|
|
20
|
+
input.rightMemoryId,
|
|
21
|
+
input.leftSummary,
|
|
22
|
+
input.rightSummary,
|
|
23
|
+
]);
|
|
24
|
+
if (rows.length === 0) {
|
|
25
|
+
throw new Error('ContradictionsRepository.record: insert returned no rows');
|
|
26
|
+
}
|
|
27
|
+
return rows[0].id;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Find active (unresolved) contradiction rows for the given user whose
|
|
31
|
+
* left OR right memory id is in the provided list. Used by retrieval
|
|
32
|
+
* enrichment to fetch contradiction pairs when a `contradiction_active`
|
|
33
|
+
* memory appears in top-K.
|
|
34
|
+
*/
|
|
35
|
+
async findActiveByUserAndMemoryIds(userId, memoryIds) {
|
|
36
|
+
if (memoryIds.length === 0)
|
|
37
|
+
return [];
|
|
38
|
+
const { rows } = await this.pool.query(`SELECT id, user_id, conversation_id, left_memory_id, right_memory_id,
|
|
39
|
+
left_summary, right_summary, resolved, resolution_note, detected_at
|
|
40
|
+
FROM memory_contradictions
|
|
41
|
+
WHERE user_id = $1
|
|
42
|
+
AND resolved = false
|
|
43
|
+
AND (left_memory_id = ANY($2::uuid[]) OR right_memory_id = ANY($2::uuid[]))`, [userId, memoryIds]);
|
|
44
|
+
return rows.map(mapRow);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Apply the bilateral contradiction flags to BOTH memory rows: each row's
|
|
48
|
+
* `contradicts_memory_id` is set to its counterpart and
|
|
49
|
+
* `contradiction_active=true`. Fails closed: errors propagate so the
|
|
50
|
+
* caller never silently falls back to ADD when the bilateral write fails.
|
|
51
|
+
*/
|
|
52
|
+
async markContradictionFlagsBilateral(userId, memoryIdA, memoryIdB) {
|
|
53
|
+
const existing = await this.pool.query(`SELECT COUNT(*)::int AS count
|
|
54
|
+
FROM memories
|
|
55
|
+
WHERE user_id = $1 AND id IN ($2::uuid, $3::uuid)`, [userId, memoryIdA, memoryIdB]);
|
|
56
|
+
const existingCount = Number(existing.rows[0]?.count ?? 0);
|
|
57
|
+
if (existingCount !== 2) {
|
|
58
|
+
throw new Error(`markContradictionFlagsBilateral: expected to update 2 rows, ` +
|
|
59
|
+
`updated ${existingCount} (userId=${userId}, ids=${memoryIdA},${memoryIdB})`);
|
|
60
|
+
}
|
|
61
|
+
const result = await this.pool.query(`UPDATE memories
|
|
62
|
+
SET contradicts_memory_id = CASE
|
|
63
|
+
WHEN id = $2 THEN $3::uuid
|
|
64
|
+
WHEN id = $3 THEN $2::uuid
|
|
65
|
+
ELSE contradicts_memory_id
|
|
66
|
+
END,
|
|
67
|
+
contradiction_active = true
|
|
68
|
+
WHERE user_id = $1 AND id IN ($2::uuid, $3::uuid)`, [userId, memoryIdA, memoryIdB]);
|
|
69
|
+
if (result.rowCount !== 2) {
|
|
70
|
+
throw new Error(`markContradictionFlagsBilateral: expected to update 2 rows, ` +
|
|
71
|
+
`updated ${result.rowCount ?? 0} (userId=${userId}, ids=${memoryIdA},${memoryIdB})`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
function mapRow(r) {
|
|
76
|
+
return {
|
|
77
|
+
id: r.id,
|
|
78
|
+
userId: r.user_id,
|
|
79
|
+
conversationId: r.conversation_id,
|
|
80
|
+
leftMemoryId: r.left_memory_id,
|
|
81
|
+
rightMemoryId: r.right_memory_id,
|
|
82
|
+
leftSummary: r.left_summary,
|
|
83
|
+
rightSummary: r.right_summary,
|
|
84
|
+
resolved: r.resolved,
|
|
85
|
+
resolutionNote: r.resolution_note,
|
|
86
|
+
detectedAt: r.detected_at,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Postgres queries for document_chunks (Phase 2).
|
|
3
|
+
*
|
|
4
|
+
* Function-style module mirroring `raw-document-repository.ts`. The
|
|
5
|
+
* `*WithClient` deletion variant exists so `deleteBySource` can include
|
|
6
|
+
* chunk soft-deletion inside its single transaction, and the batch
|
|
7
|
+
* insert uses a multi-row INSERT (one round-trip per index call) so
|
|
8
|
+
* indexing a 50-chunk document is ~50× cheaper than per-row inserts.
|
|
9
|
+
*/
|
|
10
|
+
import pg from 'pg';
|
|
11
|
+
import type { DocumentChunkRow, InsertDocumentChunkInput } from './document-chunk-types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Either a top-level `pg.Pool` (auto-checks-out a client per query) or a
|
|
14
|
+
* checked-out `pg.PoolClient` (used to keep a sequence of statements on
|
|
15
|
+
* the same DB connection — e.g., inside a BEGIN/COMMIT). Phase 2's
|
|
16
|
+
* indexer threads a `PoolClient` through every chunk-write helper so the
|
|
17
|
+
* idempotency check + chunk + memory mutations live in one transaction.
|
|
18
|
+
*/
|
|
19
|
+
type Querier = pg.Pool | pg.PoolClient;
|
|
20
|
+
/**
|
|
21
|
+
* Insert a batch of chunks for one document. Single round-trip; the
|
|
22
|
+
* caller is expected to have already verified the active-unique slot
|
|
23
|
+
* is free (the indexer's idempotency check covers this).
|
|
24
|
+
*/
|
|
25
|
+
export declare function insertDocumentChunks(q: Querier, inputs: InsertDocumentChunkInput[]): Promise<DocumentChunkRow[]>;
|
|
26
|
+
/**
|
|
27
|
+
* Active chunks for a document, ordered by chunk_index. Optionally
|
|
28
|
+
* filtered to a single chunker_version (the indexer needs that to
|
|
29
|
+
* decide whether re-index is required vs idempotent skip).
|
|
30
|
+
*/
|
|
31
|
+
export declare function listActiveChunksForDocument(q: Querier, rawDocumentId: string, options?: {
|
|
32
|
+
chunkerVersion?: string;
|
|
33
|
+
}): Promise<DocumentChunkRow[]>;
|
|
34
|
+
export declare function countActiveChunksForDocument(q: Querier, rawDocumentId: string, chunkerVersion: string): Promise<number>;
|
|
35
|
+
/**
|
|
36
|
+
* Soft-delete every active chunk for a document. Used by the indexer
|
|
37
|
+
* when the input text changes (re-chunk path) and by the document
|
|
38
|
+
* delete route when the document is tombstoned.
|
|
39
|
+
*/
|
|
40
|
+
export declare function softDeleteChunksForDocument(q: Querier, userId: string, rawDocumentId: string): Promise<number>;
|
|
41
|
+
/**
|
|
42
|
+
* Soft-delete every active chunk whose document belongs to the
|
|
43
|
+
* (user, source_site) pair. Used inside the existing
|
|
44
|
+
* `deleteBySource` transaction so source-reset stays one atomic
|
|
45
|
+
* operation across memories, episodes, documents, and chunks.
|
|
46
|
+
*/
|
|
47
|
+
export declare function deleteChunksBySourceWithClient(client: pg.PoolClient, userId: string, sourceSite: string): Promise<number>;
|
|
48
|
+
export {};
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Postgres queries for document_chunks (Phase 2).
|
|
3
|
+
*
|
|
4
|
+
* Function-style module mirroring `raw-document-repository.ts`. The
|
|
5
|
+
* `*WithClient` deletion variant exists so `deleteBySource` can include
|
|
6
|
+
* chunk soft-deletion inside its single transaction, and the batch
|
|
7
|
+
* insert uses a multi-row INSERT (one round-trip per index call) so
|
|
8
|
+
* indexing a 50-chunk document is ~50× cheaper than per-row inserts.
|
|
9
|
+
*/
|
|
10
|
+
import pgvector from 'pgvector/pg';
|
|
11
|
+
const DOCUMENT_CHUNK_COLUMNS = 'id, user_id, raw_document_id, chunk_index, content, content_hash, char_start, char_end, token_count, embedding, parser_version, chunker_version, metadata, created_at, deleted_at';
|
|
12
|
+
const INSERT_COLUMNS = 'user_id, raw_document_id, chunk_index, content, content_hash, char_start, char_end, token_count, embedding, parser_version, chunker_version, metadata';
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Insert (batch)
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
/**
|
|
17
|
+
* Insert a batch of chunks for one document. Single round-trip; the
|
|
18
|
+
* caller is expected to have already verified the active-unique slot
|
|
19
|
+
* is free (the indexer's idempotency check covers this).
|
|
20
|
+
*/
|
|
21
|
+
export async function insertDocumentChunks(q, inputs) {
|
|
22
|
+
if (inputs.length === 0)
|
|
23
|
+
return [];
|
|
24
|
+
const { sql, params } = buildBatchInsertSql(inputs);
|
|
25
|
+
const result = await q.query(sql, params);
|
|
26
|
+
return result.rows.map(rowToDocumentChunk);
|
|
27
|
+
}
|
|
28
|
+
function buildBatchInsertSql(inputs) {
|
|
29
|
+
const params = [];
|
|
30
|
+
const placeholders = [];
|
|
31
|
+
for (const input of inputs) {
|
|
32
|
+
placeholders.push(buildOneRowPlaceholders(params.length));
|
|
33
|
+
pushOneRowParams(params, input);
|
|
34
|
+
}
|
|
35
|
+
const sql = `INSERT INTO document_chunks (${INSERT_COLUMNS}) VALUES ${placeholders.join(', ')} RETURNING ${DOCUMENT_CHUNK_COLUMNS}`;
|
|
36
|
+
return { sql, params };
|
|
37
|
+
}
|
|
38
|
+
function buildOneRowPlaceholders(start) {
|
|
39
|
+
const slots = [];
|
|
40
|
+
for (let i = 0; i < 12; i++)
|
|
41
|
+
slots.push(`$${start + i + 1}`);
|
|
42
|
+
// metadata is the 12th column — cast as jsonb on the wire.
|
|
43
|
+
slots[11] = `${slots[11]}::jsonb`;
|
|
44
|
+
return `(${slots.join(', ')})`;
|
|
45
|
+
}
|
|
46
|
+
function pushOneRowParams(params, input) {
|
|
47
|
+
params.push(input.userId, input.rawDocumentId, input.chunkIndex, input.content, input.contentHash, input.charStart, input.charEnd, input.tokenCount, pgvector.toSql(input.embedding), input.parserVersion, input.chunkerVersion, JSON.stringify(input.metadata ?? {}));
|
|
48
|
+
}
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
// List / lookup
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
/**
|
|
53
|
+
* Active chunks for a document, ordered by chunk_index. Optionally
|
|
54
|
+
* filtered to a single chunker_version (the indexer needs that to
|
|
55
|
+
* decide whether re-index is required vs idempotent skip).
|
|
56
|
+
*/
|
|
57
|
+
export async function listActiveChunksForDocument(q, rawDocumentId, options = {}) {
|
|
58
|
+
const params = [rawDocumentId];
|
|
59
|
+
let where = 'raw_document_id = $1 AND deleted_at IS NULL';
|
|
60
|
+
if (options.chunkerVersion) {
|
|
61
|
+
params.push(options.chunkerVersion);
|
|
62
|
+
where += ' AND chunker_version = $2';
|
|
63
|
+
}
|
|
64
|
+
const result = await q.query(`SELECT ${DOCUMENT_CHUNK_COLUMNS}
|
|
65
|
+
FROM document_chunks
|
|
66
|
+
WHERE ${where}
|
|
67
|
+
ORDER BY chunk_index ASC`, params);
|
|
68
|
+
return result.rows.map(rowToDocumentChunk);
|
|
69
|
+
}
|
|
70
|
+
export async function countActiveChunksForDocument(q, rawDocumentId, chunkerVersion) {
|
|
71
|
+
const result = await q.query(`SELECT COUNT(*)::int AS n
|
|
72
|
+
FROM document_chunks
|
|
73
|
+
WHERE raw_document_id = $1 AND chunker_version = $2 AND deleted_at IS NULL`, [rawDocumentId, chunkerVersion]);
|
|
74
|
+
return Number(result.rows[0]?.n ?? 0);
|
|
75
|
+
}
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
// Soft-delete + cascading deletion paths
|
|
78
|
+
// ---------------------------------------------------------------------------
|
|
79
|
+
/**
|
|
80
|
+
* Soft-delete every active chunk for a document. Used by the indexer
|
|
81
|
+
* when the input text changes (re-chunk path) and by the document
|
|
82
|
+
* delete route when the document is tombstoned.
|
|
83
|
+
*/
|
|
84
|
+
export async function softDeleteChunksForDocument(q, userId, rawDocumentId) {
|
|
85
|
+
const result = await q.query(`UPDATE document_chunks
|
|
86
|
+
SET deleted_at = NOW()
|
|
87
|
+
WHERE user_id = $1 AND raw_document_id = $2 AND deleted_at IS NULL`, [userId, rawDocumentId]);
|
|
88
|
+
return result.rowCount ?? 0;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Soft-delete every active chunk whose document belongs to the
|
|
92
|
+
* (user, source_site) pair. Used inside the existing
|
|
93
|
+
* `deleteBySource` transaction so source-reset stays one atomic
|
|
94
|
+
* operation across memories, episodes, documents, and chunks.
|
|
95
|
+
*/
|
|
96
|
+
export async function deleteChunksBySourceWithClient(client, userId, sourceSite) {
|
|
97
|
+
const result = await client.query(`UPDATE document_chunks c
|
|
98
|
+
SET deleted_at = NOW()
|
|
99
|
+
FROM raw_documents d
|
|
100
|
+
JOIN raw_sources s ON s.id = d.raw_source_id
|
|
101
|
+
WHERE c.raw_document_id = d.id
|
|
102
|
+
AND c.user_id = $1
|
|
103
|
+
AND s.source_site = $2
|
|
104
|
+
AND c.deleted_at IS NULL`, [userId, sourceSite]);
|
|
105
|
+
return result.rowCount ?? 0;
|
|
106
|
+
}
|
|
107
|
+
// ---------------------------------------------------------------------------
|
|
108
|
+
// Row mapper
|
|
109
|
+
// ---------------------------------------------------------------------------
|
|
110
|
+
function rowToDocumentChunk(row) {
|
|
111
|
+
return {
|
|
112
|
+
id: row.id,
|
|
113
|
+
userId: row.user_id,
|
|
114
|
+
rawDocumentId: row.raw_document_id,
|
|
115
|
+
chunkIndex: row.chunk_index,
|
|
116
|
+
content: row.content,
|
|
117
|
+
contentHash: row.content_hash,
|
|
118
|
+
charStart: row.char_start,
|
|
119
|
+
charEnd: row.char_end,
|
|
120
|
+
tokenCount: row.token_count,
|
|
121
|
+
embedding: parseEmbedding(row.embedding),
|
|
122
|
+
parserVersion: row.parser_version,
|
|
123
|
+
chunkerVersion: row.chunker_version,
|
|
124
|
+
metadata: row.metadata ?? {},
|
|
125
|
+
createdAt: row.created_at,
|
|
126
|
+
deletedAt: row.deleted_at ?? null,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* pgvector returns the column either as a string like `"[0.1,0.2,...]"`
|
|
131
|
+
* (default text protocol) or as an already-parsed array (when a custom
|
|
132
|
+
* type parser is registered). Handle both — the cast is cheap and
|
|
133
|
+
* avoids depending on a global type-parser registration here.
|
|
134
|
+
*/
|
|
135
|
+
function parseEmbedding(value) {
|
|
136
|
+
if (Array.isArray(value))
|
|
137
|
+
return value.map(Number);
|
|
138
|
+
if (typeof value === 'string') {
|
|
139
|
+
return value
|
|
140
|
+
.replace(/^\[|\]$/g, '')
|
|
141
|
+
.split(',')
|
|
142
|
+
.map((s) => Number(s));
|
|
143
|
+
}
|
|
144
|
+
return [];
|
|
145
|
+
}
|