@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,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 4b — TLL retrieval signal.
|
|
3
|
+
*
|
|
4
|
+
* For event-ordering / temporal-reasoning / multi-session-reasoning queries,
|
|
5
|
+
* expand the candidate set by traversing entity TLL chains. This is the
|
|
6
|
+
* unique architectural primitive: nobody else ships per-entity event-chain
|
|
7
|
+
* traversal at retrieval time.
|
|
8
|
+
*
|
|
9
|
+
* The mechanism:
|
|
10
|
+
* 1. From the initial retrieval candidates, find which entities they link.
|
|
11
|
+
* 2. For each entity, fetch its full TLL chain (event sequence).
|
|
12
|
+
* 3. Merge chain memory_ids into the candidate pool.
|
|
13
|
+
* 4. Boost score for memories that appear in TLL chains for the query's
|
|
14
|
+
* entities — they're explicitly part of the chronological story.
|
|
15
|
+
*
|
|
16
|
+
* Skipped for non-ordering queries (factual lookups don't need chains).
|
|
17
|
+
*/
|
|
18
|
+
import type pg from 'pg';
|
|
19
|
+
import type { TllRepository } from '../db/repository-tll.js';
|
|
20
|
+
/**
|
|
21
|
+
* Cap on the number of top similarity-ranked candidates that seed TLL
|
|
22
|
+
* entity-lookup. Bounds the per-query fan-out for the
|
|
23
|
+
* `memory_entities` join — a higher value increases recall on
|
|
24
|
+
* sprawling queries but inflates the worst-case row scan when an
|
|
25
|
+
* entity dictionary is dense. 10 matches the production search seed
|
|
26
|
+
* count in `memory-search.ts` so both call sites move together.
|
|
27
|
+
*/
|
|
28
|
+
export declare const TLL_ENTITY_LOOKUP_SEED_LIMIT = 10;
|
|
29
|
+
/**
|
|
30
|
+
* Returns true if the query has the shape of an event-ordering / temporal
|
|
31
|
+
* question and should trigger TLL chain expansion. The gate is
|
|
32
|
+
* intentionally conservative: TLL augmentation is augmentation, not the
|
|
33
|
+
* primary retrieval path, so over-firing was producing irrelevant chain
|
|
34
|
+
* memories on plain-fact queries that happened to contain "first",
|
|
35
|
+
* "before", "track", etc.
|
|
36
|
+
*
|
|
37
|
+
* Two ordering terms co-occurring (e.g. "what did I discuss BEFORE and
|
|
38
|
+
* AFTER X") is a strong-enough signal on its own; one structural
|
|
39
|
+
* sequence phrase (e.g. "in what order", "evolution of", "since when")
|
|
40
|
+
* is also strong enough. Single ordering term + nothing else is not.
|
|
41
|
+
*/
|
|
42
|
+
export declare function shouldUseTLL(query: string): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Get the entity_ids linked to a set of memory_ids via memory_entities.
|
|
45
|
+
* Used to find which entities to chain-traverse from initial retrieval.
|
|
46
|
+
* Exported for direct unit testing of SQL shape; the production caller
|
|
47
|
+
* is `expandViaTLL` below.
|
|
48
|
+
*/
|
|
49
|
+
export declare function entitiesForMemories(pool: pg.Pool, memoryIds: string[]): Promise<string[]>;
|
|
50
|
+
/**
|
|
51
|
+
* Expand candidate set via TLL chain traversal for the entities most
|
|
52
|
+
* relevant to the query (derived from initial retrieval).
|
|
53
|
+
* Returns: array of memory_ids in chronological chain order, deduplicated.
|
|
54
|
+
*/
|
|
55
|
+
export declare function expandViaTLL(userId: string, initialMemoryIds: string[], tllRepository: TllRepository, pool: pg.Pool): Promise<string[]>;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 4b — TLL retrieval signal.
|
|
3
|
+
*
|
|
4
|
+
* For event-ordering / temporal-reasoning / multi-session-reasoning queries,
|
|
5
|
+
* expand the candidate set by traversing entity TLL chains. This is the
|
|
6
|
+
* unique architectural primitive: nobody else ships per-entity event-chain
|
|
7
|
+
* traversal at retrieval time.
|
|
8
|
+
*
|
|
9
|
+
* The mechanism:
|
|
10
|
+
* 1. From the initial retrieval candidates, find which entities they link.
|
|
11
|
+
* 2. For each entity, fetch its full TLL chain (event sequence).
|
|
12
|
+
* 3. Merge chain memory_ids into the candidate pool.
|
|
13
|
+
* 4. Boost score for memories that appear in TLL chains for the query's
|
|
14
|
+
* entities — they're explicitly part of the chronological story.
|
|
15
|
+
*
|
|
16
|
+
* Skipped for non-ordering queries (factual lookups don't need chains).
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Cap on the number of top similarity-ranked candidates that seed TLL
|
|
20
|
+
* entity-lookup. Bounds the per-query fan-out for the
|
|
21
|
+
* `memory_entities` join — a higher value increases recall on
|
|
22
|
+
* sprawling queries but inflates the worst-case row scan when an
|
|
23
|
+
* entity dictionary is dense. 10 matches the production search seed
|
|
24
|
+
* count in `memory-search.ts` so both call sites move together.
|
|
25
|
+
*/
|
|
26
|
+
export const TLL_ENTITY_LOOKUP_SEED_LIMIT = 10;
|
|
27
|
+
/**
|
|
28
|
+
* Single-token ordering signals. Matched in isolation these are too
|
|
29
|
+
* weak to gate TLL — "what is my FIRST name", "the model used BEFORE
|
|
30
|
+
* GPT-4", "we then moved on" all contain one of these but are not
|
|
31
|
+
* EO/MSR/TR queries. We require either two of them to co-occur, or
|
|
32
|
+
* one of the structural sequence patterns below, before firing.
|
|
33
|
+
*/
|
|
34
|
+
const ORDERING_TERMS_RE = /\b(first|last|before|after|then|later|earlier|previous|next|prior)\b/gi;
|
|
35
|
+
/**
|
|
36
|
+
* Structural sequence patterns. Each one is a phrase whose presence
|
|
37
|
+
* unambiguously indicates an ordering / temporal-reasoning question.
|
|
38
|
+
* Single-pattern hit is enough to gate TLL.
|
|
39
|
+
*
|
|
40
|
+
* Curated to keep precision high: "track my spending" and "what is my
|
|
41
|
+
* first name" must not match any pattern here. Add new patterns
|
|
42
|
+
* conservatively — a leak here will silently re-introduce the
|
|
43
|
+
* false-positive class this fix addresses.
|
|
44
|
+
*/
|
|
45
|
+
const SEQUENCE_PATTERNS = [
|
|
46
|
+
/\bin (what |the )?(chronological |reverse )?order\b/i,
|
|
47
|
+
/\b(when|after) did\b/i,
|
|
48
|
+
/\bsince when\b/i,
|
|
49
|
+
/\bover time\b/i,
|
|
50
|
+
/\bevolution of\b/i,
|
|
51
|
+
/\b(history|timeline) of\b/i,
|
|
52
|
+
/\bbrought up\b/i,
|
|
53
|
+
/\b(originally|initially)\b/i,
|
|
54
|
+
/\bprogression of\b/i,
|
|
55
|
+
/\bhow .{1,80}(evolved?|shifted?|changed)\b/i,
|
|
56
|
+
/\bwhat .{1,80}(originally|initially)\b/i,
|
|
57
|
+
];
|
|
58
|
+
/**
|
|
59
|
+
* Returns true if the query has the shape of an event-ordering / temporal
|
|
60
|
+
* question and should trigger TLL chain expansion. The gate is
|
|
61
|
+
* intentionally conservative: TLL augmentation is augmentation, not the
|
|
62
|
+
* primary retrieval path, so over-firing was producing irrelevant chain
|
|
63
|
+
* memories on plain-fact queries that happened to contain "first",
|
|
64
|
+
* "before", "track", etc.
|
|
65
|
+
*
|
|
66
|
+
* Two ordering terms co-occurring (e.g. "what did I discuss BEFORE and
|
|
67
|
+
* AFTER X") is a strong-enough signal on its own; one structural
|
|
68
|
+
* sequence phrase (e.g. "in what order", "evolution of", "since when")
|
|
69
|
+
* is also strong enough. Single ordering term + nothing else is not.
|
|
70
|
+
*/
|
|
71
|
+
export function shouldUseTLL(query) {
|
|
72
|
+
const orderingMatches = (query.match(ORDERING_TERMS_RE) ?? []).length;
|
|
73
|
+
if (orderingMatches >= 2)
|
|
74
|
+
return true;
|
|
75
|
+
return SEQUENCE_PATTERNS.some((re) => re.test(query));
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Get the entity_ids linked to a set of memory_ids via memory_entities.
|
|
79
|
+
* Used to find which entities to chain-traverse from initial retrieval.
|
|
80
|
+
* Exported for direct unit testing of SQL shape; the production caller
|
|
81
|
+
* is `expandViaTLL` below.
|
|
82
|
+
*/
|
|
83
|
+
export async function entitiesForMemories(pool, memoryIds) {
|
|
84
|
+
if (memoryIds.length === 0)
|
|
85
|
+
return [];
|
|
86
|
+
const result = await pool.query(`SELECT DISTINCT entity_id FROM memory_entities WHERE memory_id = ANY($1::uuid[])`, [memoryIds]);
|
|
87
|
+
return result.rows.map((r) => r.entity_id);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Expand candidate set via TLL chain traversal for the entities most
|
|
91
|
+
* relevant to the query (derived from initial retrieval).
|
|
92
|
+
* Returns: array of memory_ids in chronological chain order, deduplicated.
|
|
93
|
+
*/
|
|
94
|
+
export async function expandViaTLL(userId, initialMemoryIds, tllRepository, pool) {
|
|
95
|
+
if (initialMemoryIds.length === 0)
|
|
96
|
+
return [];
|
|
97
|
+
const entityIds = await entitiesForMemories(pool, initialMemoryIds.slice(0, TLL_ENTITY_LOOKUP_SEED_LIMIT));
|
|
98
|
+
if (entityIds.length === 0)
|
|
99
|
+
return [];
|
|
100
|
+
return tllRepository.chainsFor(userId, entityIds);
|
|
101
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Topic abstraction layer for the EO (event ordering) experiment.
|
|
3
|
+
*
|
|
4
|
+
* For each chunk processed during ingest, run a separate LLM pass to extract
|
|
5
|
+
* the *conceptual topic* discussed in the fragment at a higher abstraction
|
|
6
|
+
* level than the raw fact (e.g. "API authentication design" rather than
|
|
7
|
+
* "Flask, Bootstrap"). The topic is stored alongside the raw fact so that
|
|
8
|
+
* EO-style queries — which expect conceptual phases, not implementation
|
|
9
|
+
* specifics — can retrieve material at the rubric's abstraction level.
|
|
10
|
+
*
|
|
11
|
+
* Principled, no regex: an LLM-learned summarization, an embedding similarity
|
|
12
|
+
* fusion at retrieval. No query-text pattern matching. The mechanism activates
|
|
13
|
+
* uniformly for all chunks; the answer LLM uses topic context for any query
|
|
14
|
+
* that benefits from it.
|
|
15
|
+
*
|
|
16
|
+
* Cost budget: one extra short LLM call per chunk during ingest. Adds
|
|
17
|
+
* ~10-25 % to ingest token usage. Zero added latency at retrieval.
|
|
18
|
+
*
|
|
19
|
+
* See benchmarks-sprint3/2026-05-10-am-baseline-and-rerank-design.md.
|
|
20
|
+
*/
|
|
21
|
+
import type { LLMProvider } from './llm.js';
|
|
22
|
+
export interface TopicAbstraction {
|
|
23
|
+
topic: string;
|
|
24
|
+
}
|
|
25
|
+
export declare class TopicAbstractionError extends Error {
|
|
26
|
+
readonly cause?: unknown | undefined;
|
|
27
|
+
constructor(message: string, cause?: unknown | undefined);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Extract a conceptual topic from a chunk + fact pair.
|
|
31
|
+
*
|
|
32
|
+
* Fail-closed: throws TopicAbstractionError on any LLM transport failure
|
|
33
|
+
* or invalid output. Caller (memory-ingest.ts) decides whether to record
|
|
34
|
+
* the chunk without a topic, or fail the ingest entirely.
|
|
35
|
+
*/
|
|
36
|
+
export declare function extractTopicAbstraction(chunkText: string, factText: string, llmClient?: LLMProvider): Promise<TopicAbstraction>;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Topic abstraction layer for the EO (event ordering) experiment.
|
|
3
|
+
*
|
|
4
|
+
* For each chunk processed during ingest, run a separate LLM pass to extract
|
|
5
|
+
* the *conceptual topic* discussed in the fragment at a higher abstraction
|
|
6
|
+
* level than the raw fact (e.g. "API authentication design" rather than
|
|
7
|
+
* "Flask, Bootstrap"). The topic is stored alongside the raw fact so that
|
|
8
|
+
* EO-style queries — which expect conceptual phases, not implementation
|
|
9
|
+
* specifics — can retrieve material at the rubric's abstraction level.
|
|
10
|
+
*
|
|
11
|
+
* Principled, no regex: an LLM-learned summarization, an embedding similarity
|
|
12
|
+
* fusion at retrieval. No query-text pattern matching. The mechanism activates
|
|
13
|
+
* uniformly for all chunks; the answer LLM uses topic context for any query
|
|
14
|
+
* that benefits from it.
|
|
15
|
+
*
|
|
16
|
+
* Cost budget: one extra short LLM call per chunk during ingest. Adds
|
|
17
|
+
* ~10-25 % to ingest token usage. Zero added latency at retrieval.
|
|
18
|
+
*
|
|
19
|
+
* See benchmarks-sprint3/2026-05-10-am-baseline-and-rerank-design.md.
|
|
20
|
+
*/
|
|
21
|
+
import { llm as defaultLlm } from './llm.js';
|
|
22
|
+
import { extractFirstJsonObject } from './extraction.js';
|
|
23
|
+
const TOPIC_MAX_TOKENS = 128;
|
|
24
|
+
const TOPIC_MAX_WORDS = 7;
|
|
25
|
+
const TOPIC_MIN_WORDS = 3;
|
|
26
|
+
const TOPIC_SYSTEM_PROMPT = [
|
|
27
|
+
'You extract the conceptual TOPIC discussed in a short conversation fragment.',
|
|
28
|
+
'',
|
|
29
|
+
'Rules:',
|
|
30
|
+
'- Output a JSON object: {"topic": "<3 to 7 words>"}',
|
|
31
|
+
'- The topic must name a conceptual phase, theme, or domain — NOT implementation specifics.',
|
|
32
|
+
'- Good topics: "API authentication design", "deployment pipeline setup",',
|
|
33
|
+
' "frontend layout iteration", "user onboarding flow", "database migration planning".',
|
|
34
|
+
'- Bad topics (too specific): "Flask login route", "Bootstrap navbar CSS",',
|
|
35
|
+
' "PostgreSQL ALTER TABLE statement", "axios POST to /api/users".',
|
|
36
|
+
'- Bad topics (too generic): "code", "the user", "discussion", "project work".',
|
|
37
|
+
'- Strictly 3 to 7 words. No punctuation other than spaces.',
|
|
38
|
+
'- No markdown fences. No prose around the JSON.',
|
|
39
|
+
].join('\n');
|
|
40
|
+
export class TopicAbstractionError extends Error {
|
|
41
|
+
cause;
|
|
42
|
+
constructor(message, cause) {
|
|
43
|
+
super(message);
|
|
44
|
+
this.cause = cause;
|
|
45
|
+
this.name = 'TopicAbstractionError';
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Extract a conceptual topic from a chunk + fact pair.
|
|
50
|
+
*
|
|
51
|
+
* Fail-closed: throws TopicAbstractionError on any LLM transport failure
|
|
52
|
+
* or invalid output. Caller (memory-ingest.ts) decides whether to record
|
|
53
|
+
* the chunk without a topic, or fail the ingest entirely.
|
|
54
|
+
*/
|
|
55
|
+
export async function extractTopicAbstraction(chunkText, factText, llmClient = defaultLlm) {
|
|
56
|
+
const messages = [
|
|
57
|
+
{ role: 'system', content: TOPIC_SYSTEM_PROMPT },
|
|
58
|
+
{ role: 'user', content: buildTopicUserMessage(chunkText, factText) },
|
|
59
|
+
];
|
|
60
|
+
let raw;
|
|
61
|
+
try {
|
|
62
|
+
raw = await llmClient.chat(messages, {
|
|
63
|
+
temperature: 0,
|
|
64
|
+
jsonMode: true,
|
|
65
|
+
maxTokens: TOPIC_MAX_TOKENS,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
throw new TopicAbstractionError(`topic extraction LLM call failed: ${err.message}`, err);
|
|
70
|
+
}
|
|
71
|
+
if (!raw) {
|
|
72
|
+
throw new TopicAbstractionError('topic extraction returned empty content');
|
|
73
|
+
}
|
|
74
|
+
const cleaned = extractFirstJsonObject(raw);
|
|
75
|
+
let parsed;
|
|
76
|
+
try {
|
|
77
|
+
parsed = JSON.parse(cleaned);
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
throw new TopicAbstractionError(`topic extraction returned non-JSON: ${cleaned.slice(0, 200)}`, err);
|
|
81
|
+
}
|
|
82
|
+
return validateTopic(parsed);
|
|
83
|
+
}
|
|
84
|
+
function buildTopicUserMessage(chunkText, factText) {
|
|
85
|
+
return [
|
|
86
|
+
'CHAT FRAGMENT:',
|
|
87
|
+
chunkText.trim().slice(0, 4000),
|
|
88
|
+
'',
|
|
89
|
+
'FACT EXTRACTED FROM FRAGMENT:',
|
|
90
|
+
factText.trim().slice(0, 1000),
|
|
91
|
+
'',
|
|
92
|
+
'Return the conceptual topic as JSON: {"topic": "<3 to 7 words>"}',
|
|
93
|
+
].join('\n');
|
|
94
|
+
}
|
|
95
|
+
function validateTopic(parsed) {
|
|
96
|
+
const topicRaw = typeof parsed.topic === 'string' ? parsed.topic.trim() : null;
|
|
97
|
+
if (!topicRaw) {
|
|
98
|
+
throw new TopicAbstractionError(`topic extraction returned no topic field: ${JSON.stringify(parsed).slice(0, 200)}`);
|
|
99
|
+
}
|
|
100
|
+
const words = topicRaw.split(/\s+/).filter(Boolean);
|
|
101
|
+
if (words.length < TOPIC_MIN_WORDS || words.length > TOPIC_MAX_WORDS) {
|
|
102
|
+
throw new TopicAbstractionError(`topic must be ${TOPIC_MIN_WORDS}-${TOPIC_MAX_WORDS} words, got ${words.length}: "${topicRaw}"`);
|
|
103
|
+
}
|
|
104
|
+
return { topic: words.join(' ') };
|
|
105
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trust scoring for memories at write time.
|
|
3
|
+
*
|
|
4
|
+
* Computes a trust score (0.0–1.0) based on source domain reputation,
|
|
5
|
+
* content characteristics, and injection pattern detection. The score
|
|
6
|
+
* is stored alongside each memory and used at retrieval time to filter
|
|
7
|
+
* or down-rank low-trust content.
|
|
8
|
+
*
|
|
9
|
+
* Phase 3 security baseline — threat-model.md P0 item.
|
|
10
|
+
* Based on A-MemGuard (simplified) and reference-implementations.md §8.
|
|
11
|
+
*/
|
|
12
|
+
import { type SanitizationResult } from './input-sanitizer.js';
|
|
13
|
+
/** Trust score with breakdown of contributing signals. */
|
|
14
|
+
export interface TrustScore {
|
|
15
|
+
score: number;
|
|
16
|
+
domainTrust: number;
|
|
17
|
+
contentPenalty: number;
|
|
18
|
+
injectionPenalty: number;
|
|
19
|
+
sanitization: SanitizationResult;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Compute a trust score for a memory based on its content and source.
|
|
23
|
+
*
|
|
24
|
+
* Score starts at 1.0 and is reduced by:
|
|
25
|
+
* - Unknown source domain: -0.2
|
|
26
|
+
* - Each injection pattern match: -0.3 (capped at -0.9)
|
|
27
|
+
* - Content anomalies (length, unicode, repetition): -0.1 each
|
|
28
|
+
*
|
|
29
|
+
* Final score is clamped to [0.0, 1.0].
|
|
30
|
+
*/
|
|
31
|
+
export declare function computeTrustScore(content: string, sourceSite: string): TrustScore;
|
|
32
|
+
/** Check if a domain is in the trusted set. */
|
|
33
|
+
export declare function isDomainTrusted(sourceSite: string): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Determine if a memory should be stored based on its trust score.
|
|
36
|
+
* Returns true if the score meets the minimum threshold.
|
|
37
|
+
*/
|
|
38
|
+
export declare function meetsMinimumTrust(trustScore: TrustScore, threshold: number): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Apply a trust-based penalty to a retrieval score.
|
|
41
|
+
* Low-trust memories are down-ranked proportionally.
|
|
42
|
+
*/
|
|
43
|
+
export declare function applyTrustPenalty(retrievalScore: number, trustScore: number): number;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trust scoring for memories at write time.
|
|
3
|
+
*
|
|
4
|
+
* Computes a trust score (0.0–1.0) based on source domain reputation,
|
|
5
|
+
* content characteristics, and injection pattern detection. The score
|
|
6
|
+
* is stored alongside each memory and used at retrieval time to filter
|
|
7
|
+
* or down-rank low-trust content.
|
|
8
|
+
*
|
|
9
|
+
* Phase 3 security baseline — threat-model.md P0 item.
|
|
10
|
+
* Based on A-MemGuard (simplified) and reference-implementations.md §8.
|
|
11
|
+
*/
|
|
12
|
+
import { sanitize } from './input-sanitizer.js';
|
|
13
|
+
/**
|
|
14
|
+
* Known trusted domains where content is likely user-authored and legitimate.
|
|
15
|
+
* Memories from trusted domains start at 1.0; unknown domains start at 0.8.
|
|
16
|
+
*/
|
|
17
|
+
const TRUSTED_DOMAINS = new Set([
|
|
18
|
+
'claude.ai',
|
|
19
|
+
'chatgpt.com',
|
|
20
|
+
'chat.openai.com',
|
|
21
|
+
'gemini.google.com',
|
|
22
|
+
'github.com',
|
|
23
|
+
'stackoverflow.com',
|
|
24
|
+
'docs.google.com',
|
|
25
|
+
'notion.so',
|
|
26
|
+
]);
|
|
27
|
+
const UNKNOWN_DOMAIN_PENALTY = 0.2;
|
|
28
|
+
const INJECTION_PENALTY_PER_MATCH = 0.3;
|
|
29
|
+
const CONTENT_WARN_PENALTY = 0.1;
|
|
30
|
+
const MAX_INJECTION_PENALTY = 0.9;
|
|
31
|
+
/**
|
|
32
|
+
* Compute a trust score for a memory based on its content and source.
|
|
33
|
+
*
|
|
34
|
+
* Score starts at 1.0 and is reduced by:
|
|
35
|
+
* - Unknown source domain: -0.2
|
|
36
|
+
* - Each injection pattern match: -0.3 (capped at -0.9)
|
|
37
|
+
* - Content anomalies (length, unicode, repetition): -0.1 each
|
|
38
|
+
*
|
|
39
|
+
* Final score is clamped to [0.0, 1.0].
|
|
40
|
+
*/
|
|
41
|
+
export function computeTrustScore(content, sourceSite) {
|
|
42
|
+
const sanitization = sanitize(content);
|
|
43
|
+
const domainTrust = isDomainTrusted(sourceSite) ? 0 : UNKNOWN_DOMAIN_PENALTY;
|
|
44
|
+
const injectionCount = sanitization.findings.filter((f) => f.rule.startsWith('injection:')).length;
|
|
45
|
+
const injectionPenalty = Math.min(injectionCount * INJECTION_PENALTY_PER_MATCH, MAX_INJECTION_PENALTY);
|
|
46
|
+
const warnCount = sanitization.findings.filter((f) => f.severity === 'warn').length;
|
|
47
|
+
const contentPenalty = warnCount * CONTENT_WARN_PENALTY;
|
|
48
|
+
const score = Math.max(0, Math.min(1, 1.0 - domainTrust - injectionPenalty - contentPenalty));
|
|
49
|
+
return {
|
|
50
|
+
score,
|
|
51
|
+
domainTrust: 1.0 - domainTrust,
|
|
52
|
+
contentPenalty,
|
|
53
|
+
injectionPenalty,
|
|
54
|
+
sanitization,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/** Check if a domain is in the trusted set. */
|
|
58
|
+
export function isDomainTrusted(sourceSite) {
|
|
59
|
+
const normalized = normalizeSourceSite(sourceSite);
|
|
60
|
+
if (!normalized)
|
|
61
|
+
return false;
|
|
62
|
+
return Array.from(TRUSTED_DOMAINS).some((trustedDomain) => normalized === trustedDomain || normalized.endsWith(`.${trustedDomain}`));
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Determine if a memory should be stored based on its trust score.
|
|
66
|
+
* Returns true if the score meets the minimum threshold.
|
|
67
|
+
*/
|
|
68
|
+
export function meetsMinimumTrust(trustScore, threshold) {
|
|
69
|
+
return trustScore.score >= threshold;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Apply a trust-based penalty to a retrieval score.
|
|
73
|
+
* Low-trust memories are down-ranked proportionally.
|
|
74
|
+
*/
|
|
75
|
+
export function applyTrustPenalty(retrievalScore, trustScore) {
|
|
76
|
+
return retrievalScore * trustScore;
|
|
77
|
+
}
|
|
78
|
+
function normalizeSourceSite(sourceSite) {
|
|
79
|
+
const trimmed = sourceSite.trim().toLowerCase().replace(/\.+$/, '');
|
|
80
|
+
if (!trimmed)
|
|
81
|
+
return '';
|
|
82
|
+
try {
|
|
83
|
+
const parsed = new URL(trimmed.includes('://') ? trimmed : `https://${trimmed}`);
|
|
84
|
+
return parsed.hostname.toLowerCase().replace(/\.+$/, '');
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return trimmed;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed Belief Calculus (TBC) — Phase 2 LLM resolver.
|
|
3
|
+
*
|
|
4
|
+
* The TBC is a strict superset of AUDN's `Add | Update | Delete | No-op`
|
|
5
|
+
* decision space. It introduces eight typed operators that each carry
|
|
6
|
+
* explicit storage semantics: Affirm, Update, Retract, Supersede, Promote,
|
|
7
|
+
* Demote, EvidenceFor, Counter.
|
|
8
|
+
*
|
|
9
|
+
* Phase 2 (this revision) wires `decideBeliefOperator` to a real LLM call
|
|
10
|
+
* and lets `memory-audn.ts` route through it when `RuntimeConfig.tbcEnabled`
|
|
11
|
+
* is true. Schema is unchanged — TBC mutations write to existing JSONB
|
|
12
|
+
* metadata only. See `tbc-execution.ts` for the executor and
|
|
13
|
+
* `docs/typed-belief-calculus.md` for design rationale.
|
|
14
|
+
*/
|
|
15
|
+
import type { LLMProvider } from './llm.js';
|
|
16
|
+
import type { CandidateMemory } from './conflict-policy.js';
|
|
17
|
+
import type { MemoryMetadata } from '../db/repository-types.js';
|
|
18
|
+
import type { FactInput } from './memory-service-types.js';
|
|
19
|
+
/**
|
|
20
|
+
* The eight typed belief operators that extend AUDN.
|
|
21
|
+
*
|
|
22
|
+
* Each operator describes a distinct effect on the belief graph; they are
|
|
23
|
+
* not mutually exclusive intents over the same evidence — `decideBeliefOperator`
|
|
24
|
+
* always picks exactly one per ingest, mirroring how AUDN picks exactly one
|
|
25
|
+
* AUDNAction today.
|
|
26
|
+
*/
|
|
27
|
+
export declare enum BeliefOperator {
|
|
28
|
+
/** New evidence supports an existing claim — strengthen confidence, no new claim. */
|
|
29
|
+
Affirm = "AFFIRM",
|
|
30
|
+
/** Same attribute, different value — versioned supersession with both states retained. */
|
|
31
|
+
Update = "UPDATE",
|
|
32
|
+
/** Claim now believed false (no replacement) — mark RETRACTED, preserve as evidence. */
|
|
33
|
+
Retract = "RETRACT",
|
|
34
|
+
/** Replaced by a more specific or general claim — link old to new; both queryable. */
|
|
35
|
+
Supersede = "SUPERSEDE",
|
|
36
|
+
/** Strong, repeated belief becomes a directive (constraint tier) influencing answer prompt. */
|
|
37
|
+
Promote = "PROMOTE",
|
|
38
|
+
/** Challenged but not retracted — lower confidence; flag for re-evaluation. */
|
|
39
|
+
Demote = "DEMOTE",
|
|
40
|
+
/** Adds an evidence-for edge to a supported claim — does not introduce a new claim. */
|
|
41
|
+
EvidenceFor = "EVIDENCE_FOR",
|
|
42
|
+
/** Adds a counter edge to a challenged claim — does not introduce a new claim. */
|
|
43
|
+
Counter = "COUNTER"
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Decision produced by the TBC resolver for a single inbound claim.
|
|
47
|
+
*
|
|
48
|
+
* - `operator` is the chosen typed operator from the eight in `BeliefOperator`.
|
|
49
|
+
* - `target_claim_id` identifies the existing belief targeted by the operator.
|
|
50
|
+
* Required for every operator except `Affirm` when no target was found.
|
|
51
|
+
* - `confidence_delta` is the proposed change to the target claim's confidence
|
|
52
|
+
* in `[-1, 1]`. Operators that introduce a brand-new claim should report `0`.
|
|
53
|
+
* - `rationale` is a free-form natural-language justification for the operator
|
|
54
|
+
* choice; surfaced in trace events and used by audit/debug consumers.
|
|
55
|
+
*/
|
|
56
|
+
export interface BeliefOperationDecision {
|
|
57
|
+
operator: BeliefOperator;
|
|
58
|
+
target_claim_id?: string;
|
|
59
|
+
confidence_delta: number;
|
|
60
|
+
rationale: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* A single prior belief state, captured when a TBC operator mutates a claim.
|
|
64
|
+
*
|
|
65
|
+
* Phase 2 stores these only in memory metadata (additive). Phase 3 will
|
|
66
|
+
* normalize them into a `belief_revision_history` table.
|
|
67
|
+
*/
|
|
68
|
+
export interface BeliefRevisionEntry {
|
|
69
|
+
/** Operator that produced this entry. */
|
|
70
|
+
operator: BeliefOperator;
|
|
71
|
+
/** Confidence at the time this entry was recorded, in `[0, 1]`. */
|
|
72
|
+
confidence: number;
|
|
73
|
+
/** Optional content snapshot — `null` for graph-only operators (EvidenceFor / Counter). */
|
|
74
|
+
content: string | null;
|
|
75
|
+
/** ISO-8601 timestamp of the revision. */
|
|
76
|
+
recordedAt: string;
|
|
77
|
+
/** Free-form rationale carried forward from the originating decision. */
|
|
78
|
+
rationale: string;
|
|
79
|
+
/**
|
|
80
|
+
* Edge weight in `[-1, 1]` for graph-only operators. Positive for
|
|
81
|
+
* EvidenceFor, negative for Counter, undefined for content mutations.
|
|
82
|
+
*/
|
|
83
|
+
weight?: number;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Belief-aware metadata extension to the existing `MemoryMetadata` shape.
|
|
87
|
+
*
|
|
88
|
+
* The keys are additive — Phase 2 does not move any AUDN-era fields. When
|
|
89
|
+
* `TBC_ENABLED=false` (default), nothing in this interface is read or written
|
|
90
|
+
* and the AUDN behavior is unchanged.
|
|
91
|
+
*/
|
|
92
|
+
export interface BeliefMetadata extends MemoryMetadata {
|
|
93
|
+
/** Current confidence of the belief in `[0, 1]`. */
|
|
94
|
+
confidence?: number;
|
|
95
|
+
/** The TBC operator that most recently mutated this memory. */
|
|
96
|
+
mutation_type?: BeliefOperator;
|
|
97
|
+
/** True when this memory has been promoted to the directive tier. */
|
|
98
|
+
directive?: boolean;
|
|
99
|
+
/** Append-only list of prior states recorded by previous TBC mutations. */
|
|
100
|
+
revision_history?: BeliefRevisionEntry[];
|
|
101
|
+
/** Append-only edge log written by EvidenceFor/Counter operators. */
|
|
102
|
+
belief_edges?: BeliefRevisionEntry[];
|
|
103
|
+
}
|
|
104
|
+
/** Raised when the LLM resolver cannot produce a usable TBC decision. */
|
|
105
|
+
export declare class BeliefResolverError extends Error {
|
|
106
|
+
readonly cause?: unknown | undefined;
|
|
107
|
+
constructor(message: string, cause?: unknown | undefined);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Resolve a typed belief operator for a candidate set via an LLM call.
|
|
111
|
+
*
|
|
112
|
+
* Fail-closed: any LLM transport failure or parser failure raises
|
|
113
|
+
* `BeliefResolverError` rather than silently returning an `Affirm`/`ADD`
|
|
114
|
+
* stub. AUDN's existing executor will surface the error to the caller.
|
|
115
|
+
*
|
|
116
|
+
* The signature mirrors `resolveAUDN(factText, candidates)` so the
|
|
117
|
+
* `memory-audn.ts` call site can swap it in cleanly.
|
|
118
|
+
*
|
|
119
|
+
* @param newClaim - The inbound atomic claim about to be ingested.
|
|
120
|
+
* @param candidates - Conflict candidates already discovered via the standard
|
|
121
|
+
* AUDN candidate search; same input AUDN sees today.
|
|
122
|
+
* @param llmClient - Optional LLM provider override for tests; defaults to
|
|
123
|
+
* the shared singleton in `services/llm.ts`.
|
|
124
|
+
* @returns A `BeliefOperationDecision` selecting one of the eight operators.
|
|
125
|
+
*/
|
|
126
|
+
export declare function decideBeliefOperator(newClaim: FactInput, candidates: readonly CandidateMemory[], llmClient?: LLMProvider): Promise<BeliefOperationDecision>;
|