@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,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Raw-storage reconciler DB layer. The reconciler promotes
|
|
3
|
+
* `raw_storage_status='blob_pending'` rows on eventual providers once the
|
|
4
|
+
* adapter's `head()` confirms gateway retrievability (→
|
|
5
|
+
* `blob_available`) or, after exhausted retries, marks them
|
|
6
|
+
* `blob_archival_failed`.
|
|
7
|
+
*
|
|
8
|
+
* Concurrency model (rev-2 §3 + rev-6 §1): claim-then-release. Phase
|
|
9
|
+
* A grabs a batch in a short transaction with `FOR UPDATE SKIP
|
|
10
|
+
* LOCKED` so multiple reconciler instances partition the work
|
|
11
|
+
* deterministically without coordinator overhead. Slow
|
|
12
|
+
* network calls run with NO DB locks held. failure-transition's per-row UPDATE
|
|
13
|
+
* is guarded on `raw_storage_claim_id` so a stale claim cannot
|
|
14
|
+
* clobber a row another worker has since reclaimed.
|
|
15
|
+
*
|
|
16
|
+
* Eligibility predicate gates on TYPED columns only — no JSONB casts
|
|
17
|
+
* (rev-6 §2): a malformed JSONB shape can't masquerade as a fresh
|
|
18
|
+
* claim. The predicate also explicitly excludes `blob_uploading` rows
|
|
19
|
+
* — those recover through `uploadRaw`'s same-bytes idempotent retry,
|
|
20
|
+
* not the reconciler.
|
|
21
|
+
*/
|
|
22
|
+
const RECONCILABLE_PROVIDERS = new Set(['filecoin']);
|
|
23
|
+
/**
|
|
24
|
+
* claim step: claim a batch of eligible eventual-provider `blob_pending` rows by
|
|
25
|
+
* writing `raw_storage_claim_id` + `raw_storage_claimed_at`. Skips
|
|
26
|
+
* rows another worker holds a fresh claim on. Returns the typed row
|
|
27
|
+
* state the reconciler will probe; the network call runs after this
|
|
28
|
+
* function returns + the caller commits the transaction.
|
|
29
|
+
*
|
|
30
|
+
* Eligibility predicate (rev-7 §3 — two-axis: claim ownership AND
|
|
31
|
+
* scheduled backoff):
|
|
32
|
+
* - `raw_storage_status = 'blob_pending'`
|
|
33
|
+
* - `storage_provider = args.provider`
|
|
34
|
+
* - `storage_uri IS NOT NULL` (rev-7 §1: the claim step-only rows with no
|
|
35
|
+
* URI recover via uploadRaw idempotency, NOT the reconciler)
|
|
36
|
+
* - `deleted_at IS NULL`
|
|
37
|
+
* - backoff elapsed: `next_check_at IS NULL OR next_check_at <= NOW()`
|
|
38
|
+
* - no live owner: claim_id NULL OR claimed_at older than staleAfterMs
|
|
39
|
+
*/
|
|
40
|
+
export async function claimReconcileBatch(pool, args) {
|
|
41
|
+
assertReconciliableProvider(args.provider);
|
|
42
|
+
const client = await pool.connect();
|
|
43
|
+
try {
|
|
44
|
+
await client.query('BEGIN');
|
|
45
|
+
const result = await client.query(
|
|
46
|
+
// Capture the prior `raw_storage_claim_id` in the CTE so the
|
|
47
|
+
// RETURNING clause can flag stale-claim recoveries — RETURNING
|
|
48
|
+
// sees the NEW row only, but joining against the captured CTE
|
|
49
|
+
// (`UPDATE … FROM claimed`) makes the pre-update value
|
|
50
|
+
// visible. The reconciler emits
|
|
51
|
+
// `filecoin.reconcile.stale_claim_recovered` based on this flag.
|
|
52
|
+
`WITH claimed AS (
|
|
53
|
+
SELECT id, raw_storage_claim_id AS prior_claim_id
|
|
54
|
+
FROM raw_documents
|
|
55
|
+
WHERE raw_storage_status = 'blob_pending'
|
|
56
|
+
AND storage_provider = $4
|
|
57
|
+
AND storage_uri IS NOT NULL
|
|
58
|
+
AND deleted_at IS NULL
|
|
59
|
+
AND (raw_storage_next_check_at IS NULL OR raw_storage_next_check_at <= NOW())
|
|
60
|
+
AND (
|
|
61
|
+
raw_storage_claim_id IS NULL
|
|
62
|
+
OR raw_storage_claimed_at < NOW() - ($1::bigint * INTERVAL '1 millisecond')
|
|
63
|
+
)
|
|
64
|
+
ORDER BY COALESCE(raw_storage_next_check_at, raw_storage_claimed_at, updated_at) ASC
|
|
65
|
+
LIMIT $2
|
|
66
|
+
FOR UPDATE SKIP LOCKED
|
|
67
|
+
)
|
|
68
|
+
UPDATE raw_documents rd
|
|
69
|
+
SET raw_storage_claim_id = $3::text,
|
|
70
|
+
raw_storage_claimed_at = NOW(),
|
|
71
|
+
updated_at = NOW()
|
|
72
|
+
FROM claimed
|
|
73
|
+
WHERE rd.id = claimed.id
|
|
74
|
+
RETURNING rd.id, rd.user_id, rd.storage_uri, rd.storage_provider,
|
|
75
|
+
rd.content_hash, rd.raw_storage_status, rd.raw_storage_metadata,
|
|
76
|
+
rd.raw_storage_reconcile_attempts, rd.raw_storage_pending_since,
|
|
77
|
+
(claimed.prior_claim_id IS NOT NULL) AS recovered_stale_claim`, [args.staleAfterMs, args.batchSize, args.claimId, args.provider]);
|
|
78
|
+
await client.query('COMMIT');
|
|
79
|
+
return result.rows.map(toClaimedRow);
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
await client.query('ROLLBACK').catch(() => undefined);
|
|
83
|
+
throw err;
|
|
84
|
+
}
|
|
85
|
+
finally {
|
|
86
|
+
client.release();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function assertReconciliableProvider(provider) {
|
|
90
|
+
if (!RECONCILABLE_PROVIDERS.has(provider)) {
|
|
91
|
+
throw new Error(`raw-storage reconciler does not support provider '${provider}'`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
function toClaimedRow(row) {
|
|
95
|
+
return {
|
|
96
|
+
id: row.id,
|
|
97
|
+
userId: row.user_id,
|
|
98
|
+
storageUri: row.storage_uri,
|
|
99
|
+
storageProvider: row.storage_provider,
|
|
100
|
+
contentHash: row.content_hash ?? null,
|
|
101
|
+
rawStorageStatus: 'blob_pending',
|
|
102
|
+
rawStorageMetadata: row.raw_storage_metadata ?? {},
|
|
103
|
+
rawStorageReconcileAttempts: typeof row.raw_storage_reconcile_attempts === 'number'
|
|
104
|
+
? row.raw_storage_reconcile_attempts
|
|
105
|
+
: 0,
|
|
106
|
+
rawStoragePendingSince: parseTimestamp(row.raw_storage_pending_since),
|
|
107
|
+
recoveredStaleClaim: row.recovered_stale_claim === true,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function parseTimestamp(value) {
|
|
111
|
+
if (value === null || value === undefined)
|
|
112
|
+
return null;
|
|
113
|
+
if (value instanceof Date)
|
|
114
|
+
return value;
|
|
115
|
+
if (typeof value === 'string') {
|
|
116
|
+
const parsed = new Date(value);
|
|
117
|
+
return Number.isNaN(parsed.getTime()) ? null : parsed;
|
|
118
|
+
}
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* failure-transition — success: promote to `blob_available`. Guarded on claim_id
|
|
123
|
+
* + status='blob_pending' so a stale claim cannot promote a row
|
|
124
|
+
* another worker has since failed. Deep-merges the new
|
|
125
|
+
* provider keys into the existing sibling (rev-4 §3) so a status-
|
|
126
|
+
* only probe doesn't drop `cid`/`piece_cid`/`deals` the original
|
|
127
|
+
* upload wrote. Layer-scoped `last_error` clear (rev-4 §2): drops
|
|
128
|
+
* the envelope only when it was scoped to `raw_storage`.
|
|
129
|
+
*/
|
|
130
|
+
export async function promoteToAvailableWithClient(pool, args) {
|
|
131
|
+
assertReconciliableProvider(args.provider);
|
|
132
|
+
const result = await pool.query(`UPDATE raw_documents
|
|
133
|
+
SET raw_storage_status = 'blob_available',
|
|
134
|
+
raw_storage_metadata = raw_storage_metadata ||
|
|
135
|
+
jsonb_build_object(
|
|
136
|
+
$1::text,
|
|
137
|
+
COALESCE(raw_storage_metadata->$1::text, '{}'::jsonb) || $2::jsonb
|
|
138
|
+
),
|
|
139
|
+
raw_storage_claim_id = NULL,
|
|
140
|
+
raw_storage_claimed_at = NULL,
|
|
141
|
+
raw_storage_last_checked_at = NOW(),
|
|
142
|
+
raw_storage_next_check_at = NULL,
|
|
143
|
+
raw_storage_reconcile_attempts = 0,
|
|
144
|
+
raw_storage_pending_since = NULL,
|
|
145
|
+
last_error = CASE
|
|
146
|
+
WHEN last_error IS NOT NULL AND last_error->>'layer' = 'raw_storage'
|
|
147
|
+
THEN NULL
|
|
148
|
+
ELSE last_error
|
|
149
|
+
END,
|
|
150
|
+
updated_at = NOW()
|
|
151
|
+
WHERE id = $3
|
|
152
|
+
AND raw_storage_status = 'blob_pending'
|
|
153
|
+
AND storage_provider = $1
|
|
154
|
+
AND raw_storage_claim_id = $4`, [args.provider, JSON.stringify(args.providerFields), args.rowId, args.claimId]);
|
|
155
|
+
return result.rowCount ?? 0;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* failure-transition — still-pending probe: clear the claim (release ownership)
|
|
159
|
+
* + increment attempts + advance `next_check_at` per the
|
|
160
|
+
* caller-computed backoff. Status STAYS `blob_pending` and
|
|
161
|
+
* `pending_since` is preserved.
|
|
162
|
+
*/
|
|
163
|
+
export async function markStillPendingWithClient(pool, args) {
|
|
164
|
+
assertReconciliableProvider(args.provider);
|
|
165
|
+
const result = await pool.query(`UPDATE raw_documents
|
|
166
|
+
SET raw_storage_claim_id = NULL,
|
|
167
|
+
raw_storage_claimed_at = NULL,
|
|
168
|
+
raw_storage_last_checked_at = NOW(),
|
|
169
|
+
raw_storage_next_check_at = NOW() + ($1::bigint * INTERVAL '1 millisecond'),
|
|
170
|
+
raw_storage_reconcile_attempts = raw_storage_reconcile_attempts + 1,
|
|
171
|
+
updated_at = NOW()
|
|
172
|
+
WHERE id = $2
|
|
173
|
+
AND raw_storage_status = 'blob_pending'
|
|
174
|
+
AND storage_provider = $4
|
|
175
|
+
AND raw_storage_claim_id = $3`, [args.nextCheckAtMs, args.rowId, args.claimId, args.provider]);
|
|
176
|
+
return result.rowCount ?? 0;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* failure-transition — terminal failure: status → `blob_archival_failed`. Sets
|
|
180
|
+
* a fresh raw-storage `last_error` envelope, clears claim/pending
|
|
181
|
+
* state, resets attempts. Guarded on claim_id.
|
|
182
|
+
*/
|
|
183
|
+
export async function markArchivalFailedWithClient(pool, args) {
|
|
184
|
+
assertReconciliableProvider(args.provider);
|
|
185
|
+
const result = await pool.query(`UPDATE raw_documents
|
|
186
|
+
SET raw_storage_status = 'blob_archival_failed',
|
|
187
|
+
raw_storage_claim_id = NULL,
|
|
188
|
+
raw_storage_claimed_at = NULL,
|
|
189
|
+
raw_storage_last_checked_at = NOW(),
|
|
190
|
+
raw_storage_next_check_at = NULL,
|
|
191
|
+
raw_storage_reconcile_attempts = 0,
|
|
192
|
+
raw_storage_pending_since = NULL,
|
|
193
|
+
last_error = $1::jsonb,
|
|
194
|
+
updated_at = NOW()
|
|
195
|
+
WHERE id = $2
|
|
196
|
+
AND raw_storage_status = 'blob_pending'
|
|
197
|
+
AND storage_provider = $4
|
|
198
|
+
AND raw_storage_claim_id = $3`, [JSON.stringify(args.lastError), args.rowId, args.claimId, args.provider]);
|
|
199
|
+
return result.rowCount ?? 0;
|
|
200
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Postgres-backed work queue for the async Reflect step.
|
|
3
|
+
*
|
|
4
|
+
* Idempotent enqueue: a unique partial index on (user_id, conversation_id)
|
|
5
|
+
* WHERE status IN ('pending','in_progress') guarantees one in-flight job per
|
|
6
|
+
* conversation at a time. Re-enqueue after completion creates a new job (the
|
|
7
|
+
* unique index excludes 'completed' and 'failed').
|
|
8
|
+
*
|
|
9
|
+
* The worker (services/reflect-jobs.ts) drives the lifecycle: fetchPending →
|
|
10
|
+
* markInProgress → run reflect → markCompleted | markFailed.
|
|
11
|
+
*/
|
|
12
|
+
import pg from 'pg';
|
|
13
|
+
export type JobStatus = 'pending' | 'in_progress' | 'completed' | 'failed';
|
|
14
|
+
export interface ReflectionJob {
|
|
15
|
+
id: string;
|
|
16
|
+
userId: string;
|
|
17
|
+
conversationId: string;
|
|
18
|
+
status: JobStatus;
|
|
19
|
+
attempts: number;
|
|
20
|
+
lastError: string | null;
|
|
21
|
+
createdAt: Date;
|
|
22
|
+
lastTriedAt: Date | null;
|
|
23
|
+
}
|
|
24
|
+
export declare class ReflectionJobsRepository {
|
|
25
|
+
private readonly pool;
|
|
26
|
+
constructor(pool: pg.Pool);
|
|
27
|
+
enqueue(userId: string, conversationId: string): Promise<void>;
|
|
28
|
+
fetchPending(limit: number): Promise<ReflectionJob[]>;
|
|
29
|
+
markInProgress(id: string): Promise<void>;
|
|
30
|
+
markCompleted(id: string): Promise<void>;
|
|
31
|
+
markFailed(id: string, error: string): Promise<void>;
|
|
32
|
+
findById(id: string): Promise<ReflectionJob | null>;
|
|
33
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export class ReflectionJobsRepository {
|
|
2
|
+
pool;
|
|
3
|
+
constructor(pool) {
|
|
4
|
+
this.pool = pool;
|
|
5
|
+
}
|
|
6
|
+
async enqueue(userId, conversationId) {
|
|
7
|
+
await this.pool.query(`INSERT INTO reflection_jobs (user_id, conversation_id) VALUES ($1, $2)
|
|
8
|
+
ON CONFLICT DO NOTHING`, [userId, conversationId]);
|
|
9
|
+
}
|
|
10
|
+
async fetchPending(limit) {
|
|
11
|
+
const { rows } = await this.pool.query(`SELECT id, user_id, conversation_id, status, attempts, last_error,
|
|
12
|
+
created_at, last_tried_at
|
|
13
|
+
FROM reflection_jobs
|
|
14
|
+
WHERE status = 'pending'
|
|
15
|
+
ORDER BY created_at ASC
|
|
16
|
+
LIMIT $1`, [limit]);
|
|
17
|
+
return rows.map(mapJob);
|
|
18
|
+
}
|
|
19
|
+
async markInProgress(id) {
|
|
20
|
+
await this.pool.query(`UPDATE reflection_jobs
|
|
21
|
+
SET status = 'in_progress', attempts = attempts + 1, last_tried_at = now()
|
|
22
|
+
WHERE id = $1`, [id]);
|
|
23
|
+
}
|
|
24
|
+
async markCompleted(id) {
|
|
25
|
+
await this.pool.query(`UPDATE reflection_jobs SET status = 'completed' WHERE id = $1`, [id]);
|
|
26
|
+
}
|
|
27
|
+
async markFailed(id, error) {
|
|
28
|
+
await this.pool.query(`UPDATE reflection_jobs SET status = 'failed', last_error = $2 WHERE id = $1`, [id, error]);
|
|
29
|
+
}
|
|
30
|
+
async findById(id) {
|
|
31
|
+
const { rows } = await this.pool.query(`SELECT id, user_id, conversation_id, status, attempts, last_error,
|
|
32
|
+
created_at, last_tried_at
|
|
33
|
+
FROM reflection_jobs WHERE id = $1`, [id]);
|
|
34
|
+
return rows[0] ? mapJob(rows[0]) : null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function mapJob(r) {
|
|
38
|
+
return {
|
|
39
|
+
id: r.id,
|
|
40
|
+
userId: r.user_id,
|
|
41
|
+
conversationId: r.conversation_id,
|
|
42
|
+
status: r.status,
|
|
43
|
+
attempts: r.attempts,
|
|
44
|
+
lastError: r.last_error,
|
|
45
|
+
createdAt: r.created_at,
|
|
46
|
+
lastTriedAt: r.last_tried_at,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ReflectionsRepository — CRUD plus cosine-similarity search for the
|
|
3
|
+
* session_reflections table. Each row is an LLM-synthesized observation about
|
|
4
|
+
* a conversation, with citations to the supporting memory ids and an embedding
|
|
5
|
+
* for retrieval-side similarity search.
|
|
6
|
+
*
|
|
7
|
+
* Pure SQL via pg.Pool. No ORM. Mutations fail closed: caller catches errors,
|
|
8
|
+
* we propagate them with the original error attached.
|
|
9
|
+
*/
|
|
10
|
+
import pg from 'pg';
|
|
11
|
+
export type ObservationType = 'entity_state' | 'event_summary' | 'preference' | 'contradiction' | 'decision' | 'numeric_value';
|
|
12
|
+
export interface NewReflection {
|
|
13
|
+
userId: string;
|
|
14
|
+
conversationId: string;
|
|
15
|
+
observation: string;
|
|
16
|
+
observationType: ObservationType;
|
|
17
|
+
evidenceMemoryIds: string[];
|
|
18
|
+
embedding: number[];
|
|
19
|
+
}
|
|
20
|
+
export interface Reflection extends NewReflection {
|
|
21
|
+
id: string;
|
|
22
|
+
createdAt: Date;
|
|
23
|
+
}
|
|
24
|
+
export declare class ReflectionsRepository {
|
|
25
|
+
private readonly pool;
|
|
26
|
+
constructor(pool: pg.Pool);
|
|
27
|
+
/**
|
|
28
|
+
* Insert multiple reflections in a single transaction. On any error,
|
|
29
|
+
* the entire transaction is rolled back.
|
|
30
|
+
*/
|
|
31
|
+
insertMany(rows: readonly NewReflection[]): Promise<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Find all reflections for a (userId, conversationId) pair, ordered by creation time.
|
|
34
|
+
*/
|
|
35
|
+
findByConversation(userId: string, conversationId: string): Promise<Reflection[]>;
|
|
36
|
+
/**
|
|
37
|
+
* Find the top-K reflections most similar to queryEmbedding for a userId,
|
|
38
|
+
* ordered by cosine distance (closest first).
|
|
39
|
+
*/
|
|
40
|
+
findSimilar(userId: string, queryEmbedding: number[], topK: number): Promise<Reflection[]>;
|
|
41
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import pgvector from 'pgvector/pg';
|
|
2
|
+
export class ReflectionsRepository {
|
|
3
|
+
pool;
|
|
4
|
+
constructor(pool) {
|
|
5
|
+
this.pool = pool;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Insert multiple reflections in a single transaction. On any error,
|
|
9
|
+
* the entire transaction is rolled back.
|
|
10
|
+
*/
|
|
11
|
+
async insertMany(rows) {
|
|
12
|
+
if (rows.length === 0)
|
|
13
|
+
return;
|
|
14
|
+
const sql = `
|
|
15
|
+
INSERT INTO session_reflections
|
|
16
|
+
(user_id, conversation_id, observation, observation_type, evidence_memory_ids, embedding)
|
|
17
|
+
VALUES ($1, $2, $3, $4, $5, $6::vector)
|
|
18
|
+
`;
|
|
19
|
+
const client = await this.pool.connect();
|
|
20
|
+
try {
|
|
21
|
+
await client.query('BEGIN');
|
|
22
|
+
for (const r of rows) {
|
|
23
|
+
await client.query(sql, [
|
|
24
|
+
r.userId,
|
|
25
|
+
r.conversationId,
|
|
26
|
+
r.observation,
|
|
27
|
+
r.observationType,
|
|
28
|
+
r.evidenceMemoryIds,
|
|
29
|
+
pgvector.toSql(r.embedding),
|
|
30
|
+
]);
|
|
31
|
+
}
|
|
32
|
+
await client.query('COMMIT');
|
|
33
|
+
}
|
|
34
|
+
catch (e) {
|
|
35
|
+
await client.query('ROLLBACK');
|
|
36
|
+
throw e;
|
|
37
|
+
}
|
|
38
|
+
finally {
|
|
39
|
+
client.release();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Find all reflections for a (userId, conversationId) pair, ordered by creation time.
|
|
44
|
+
*/
|
|
45
|
+
async findByConversation(userId, conversationId) {
|
|
46
|
+
const { rows } = await this.pool.query(`SELECT id, user_id, conversation_id, observation, observation_type,
|
|
47
|
+
evidence_memory_ids, created_at
|
|
48
|
+
FROM session_reflections
|
|
49
|
+
WHERE user_id = $1 AND conversation_id = $2
|
|
50
|
+
ORDER BY created_at ASC`, [userId, conversationId]);
|
|
51
|
+
return rows.map(mapRow);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Find the top-K reflections most similar to queryEmbedding for a userId,
|
|
55
|
+
* ordered by cosine distance (closest first).
|
|
56
|
+
*/
|
|
57
|
+
async findSimilar(userId, queryEmbedding, topK) {
|
|
58
|
+
const { rows } = await this.pool.query(`SELECT id, user_id, conversation_id, observation, observation_type,
|
|
59
|
+
evidence_memory_ids, created_at
|
|
60
|
+
FROM session_reflections
|
|
61
|
+
WHERE user_id = $1
|
|
62
|
+
ORDER BY embedding <=> $2::vector
|
|
63
|
+
LIMIT $3`, [userId, pgvector.toSql(queryEmbedding), topK]);
|
|
64
|
+
return rows.map(mapRow);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Map a Postgres query result row to a Reflection object.
|
|
69
|
+
* Excludes the embedding vector from the returned object (not needed for
|
|
70
|
+
* app logic, only for similarity search on insertion/retrieval).
|
|
71
|
+
*/
|
|
72
|
+
function mapRow(r) {
|
|
73
|
+
return {
|
|
74
|
+
id: r.id,
|
|
75
|
+
userId: r.user_id,
|
|
76
|
+
conversationId: r.conversation_id,
|
|
77
|
+
observation: r.observation,
|
|
78
|
+
observationType: r.observation_type,
|
|
79
|
+
evidenceMemoryIds: r.evidence_memory_ids,
|
|
80
|
+
embedding: [],
|
|
81
|
+
createdAt: r.created_at,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured claim/version history repository.
|
|
3
|
+
*/
|
|
4
|
+
import pg from 'pg';
|
|
5
|
+
import { type ClaimRow, type ClaimVersionRow, type MutationSummary, type MutationType, type RelationType, type SearchResult } from './repository-types.js';
|
|
6
|
+
export interface MutationProvenance {
|
|
7
|
+
mutationType: MutationType;
|
|
8
|
+
mutationReason?: string;
|
|
9
|
+
previousVersionId?: string;
|
|
10
|
+
actorModel?: string;
|
|
11
|
+
contradictionConfidence?: number;
|
|
12
|
+
}
|
|
13
|
+
export interface ClaimSlotInput {
|
|
14
|
+
slotKey: string;
|
|
15
|
+
subjectEntityId: string;
|
|
16
|
+
relationType: RelationType;
|
|
17
|
+
objectEntityId: string;
|
|
18
|
+
}
|
|
19
|
+
export interface ClaimSlotTarget {
|
|
20
|
+
claimId: string;
|
|
21
|
+
versionId: string;
|
|
22
|
+
memoryId: string;
|
|
23
|
+
}
|
|
24
|
+
export interface SlotBackfillCandidate {
|
|
25
|
+
claimId: string;
|
|
26
|
+
userId: string;
|
|
27
|
+
memoryId: string;
|
|
28
|
+
}
|
|
29
|
+
export declare class ClaimRepository {
|
|
30
|
+
private pool;
|
|
31
|
+
constructor(pool: pg.Pool);
|
|
32
|
+
createClaim(userId: string, claimType: string, validAt?: Date, slot?: ClaimSlotInput | null): Promise<string>;
|
|
33
|
+
createClaimWithClient(client: pg.PoolClient, userId: string, claimType: string, validAt?: Date, slot?: ClaimSlotInput | null): Promise<string>;
|
|
34
|
+
getClaim(id: string, userId: string): Promise<ClaimRow | null>;
|
|
35
|
+
getActiveClaimTargetBySlot(userId: string, slotKey: string): Promise<ClaimSlotTarget | null>;
|
|
36
|
+
listClaimsMissingSlots(userId: string): Promise<SlotBackfillCandidate[]>;
|
|
37
|
+
updateClaimSlot(userId: string, claimId: string, slot: ClaimSlotInput): Promise<void>;
|
|
38
|
+
setClaimCurrentVersion(claimId: string, versionId: string | null, status?: string, validAt?: Date): Promise<void>;
|
|
39
|
+
setClaimCurrentVersionWithClient(client: pg.PoolClient, claimId: string, versionId: string | null, status?: string, validAt?: Date): Promise<void>;
|
|
40
|
+
invalidateClaim(userId: string, claimId: string, invalidAt?: Date, invalidatedByVersionId?: string | null, status?: string): Promise<void>;
|
|
41
|
+
invalidateClaimWithClient(client: pg.PoolClient, userId: string, claimId: string, invalidAt?: Date, invalidatedByVersionId?: string | null, status?: string): Promise<void>;
|
|
42
|
+
createClaimVersion(input: {
|
|
43
|
+
claimId: string;
|
|
44
|
+
userId: string;
|
|
45
|
+
memoryId?: string;
|
|
46
|
+
content: string;
|
|
47
|
+
embedding: number[];
|
|
48
|
+
importance: number;
|
|
49
|
+
sourceSite: string;
|
|
50
|
+
sourceUrl?: string;
|
|
51
|
+
episodeId?: string;
|
|
52
|
+
validFrom?: Date;
|
|
53
|
+
provenance?: MutationProvenance;
|
|
54
|
+
}): Promise<string>;
|
|
55
|
+
createClaimVersionWithClient(client: pg.PoolClient, input: {
|
|
56
|
+
claimId: string;
|
|
57
|
+
userId: string;
|
|
58
|
+
memoryId?: string;
|
|
59
|
+
content: string;
|
|
60
|
+
embedding: number[];
|
|
61
|
+
importance: number;
|
|
62
|
+
sourceSite: string;
|
|
63
|
+
sourceUrl?: string;
|
|
64
|
+
episodeId?: string;
|
|
65
|
+
validFrom?: Date;
|
|
66
|
+
provenance?: MutationProvenance;
|
|
67
|
+
}): Promise<string>;
|
|
68
|
+
getClaimVersionByMemoryId(userId: string, memoryId: string): Promise<ClaimVersionRow | null>;
|
|
69
|
+
getClaimVersionByMemoryIdWithClient(client: pg.PoolClient, userId: string, memoryId: string): Promise<ClaimVersionRow | null>;
|
|
70
|
+
getClaimVersion(versionId: string, userId: string): Promise<ClaimVersionRow | null>;
|
|
71
|
+
getClaimVersionAtTime(claimId: string, userId: string, asOf: string): Promise<ClaimVersionRow | null>;
|
|
72
|
+
listClaimVersions(claimId: string): Promise<ClaimVersionRow[]>;
|
|
73
|
+
/**
|
|
74
|
+
* Create a new version for an UPDATE mutation, preserving the old version
|
|
75
|
+
* in the version history. The old version gets valid_to set and the new
|
|
76
|
+
* version becomes current.
|
|
77
|
+
*/
|
|
78
|
+
createUpdateVersion(input: {
|
|
79
|
+
oldVersionId: string;
|
|
80
|
+
claimId: string;
|
|
81
|
+
userId: string;
|
|
82
|
+
memoryId: string;
|
|
83
|
+
content: string;
|
|
84
|
+
embedding: number[];
|
|
85
|
+
importance: number;
|
|
86
|
+
sourceSite: string;
|
|
87
|
+
sourceUrl?: string;
|
|
88
|
+
episodeId?: string;
|
|
89
|
+
validFrom?: Date;
|
|
90
|
+
mutationReason?: string;
|
|
91
|
+
actorModel?: string;
|
|
92
|
+
}): Promise<string>;
|
|
93
|
+
supersedeClaimVersion(userId: string, versionId: string, supersededByVersionId: string | null, validTo?: Date): Promise<void>;
|
|
94
|
+
supersedeClaimVersionWithClient(client: pg.PoolClient, userId: string, versionId: string, supersededByVersionId: string | null, validTo?: Date): Promise<void>;
|
|
95
|
+
addEvidence(input: {
|
|
96
|
+
claimVersionId: string;
|
|
97
|
+
episodeId?: string;
|
|
98
|
+
memoryId?: string;
|
|
99
|
+
quoteText?: string;
|
|
100
|
+
speaker?: string;
|
|
101
|
+
}): Promise<void>;
|
|
102
|
+
addEvidenceWithClient(client: pg.PoolClient, input: {
|
|
103
|
+
claimVersionId: string;
|
|
104
|
+
episodeId?: string;
|
|
105
|
+
memoryId?: string;
|
|
106
|
+
quoteText?: string;
|
|
107
|
+
speaker?: string;
|
|
108
|
+
}): Promise<void>;
|
|
109
|
+
searchClaimVersions(userId: string, queryEmbedding: number[], limit: number, asOf: string, sourceSite?: string): Promise<SearchResult[]>;
|
|
110
|
+
countClaims(userId: string): Promise<number>;
|
|
111
|
+
countOpenClaimVersions(claimId: string): Promise<number>;
|
|
112
|
+
/**
|
|
113
|
+
* Get the full mutation history for a claim, ordered chronologically.
|
|
114
|
+
* Returns all versions including superseded ones, with provenance metadata.
|
|
115
|
+
*/
|
|
116
|
+
getMutationHistory(claimId: string): Promise<ClaimVersionRow[]>;
|
|
117
|
+
/**
|
|
118
|
+
* Find the claim associated with a memory ID (even if the memory is deleted).
|
|
119
|
+
*/
|
|
120
|
+
findClaimByMemoryId(userId: string, memoryId: string): Promise<{
|
|
121
|
+
claimId: string;
|
|
122
|
+
versions: ClaimVersionRow[];
|
|
123
|
+
} | null>;
|
|
124
|
+
/**
|
|
125
|
+
* Get aggregate mutation stats for a user: counts by mutation type,
|
|
126
|
+
* total versions, active vs superseded counts. Used for mutation audit trail.
|
|
127
|
+
*/
|
|
128
|
+
getUserMutationSummary(userId: string): Promise<MutationSummary>;
|
|
129
|
+
/**
|
|
130
|
+
* Trace the supersession chain forward from a given version ID.
|
|
131
|
+
* Returns the sequence of versions that replaced each other,
|
|
132
|
+
* enabling "why did this memory change?" debugging.
|
|
133
|
+
*/
|
|
134
|
+
getReversalChain(userId: string, startVersionId: string, maxDepth?: number): Promise<ClaimVersionRow[]>;
|
|
135
|
+
/**
|
|
136
|
+
* Get recent mutations across all claims for a user, ordered newest first.
|
|
137
|
+
* Useful for "what changed recently?" debugging.
|
|
138
|
+
*/
|
|
139
|
+
getRecentMutations(userId: string, limit?: number): Promise<ClaimVersionRow[]>;
|
|
140
|
+
deleteAll(userId?: string): Promise<void>;
|
|
141
|
+
}
|