@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,204 @@
|
|
|
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 { llm as defaultLlm } from './llm.js';
|
|
16
|
+
import { extractFirstJsonObject } from './extraction.js';
|
|
17
|
+
const TBC_MAX_TOKENS = 4096;
|
|
18
|
+
const TBC_MAX_CANDIDATES = 3;
|
|
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 var BeliefOperator;
|
|
28
|
+
(function (BeliefOperator) {
|
|
29
|
+
/** New evidence supports an existing claim — strengthen confidence, no new claim. */
|
|
30
|
+
BeliefOperator["Affirm"] = "AFFIRM";
|
|
31
|
+
/** Same attribute, different value — versioned supersession with both states retained. */
|
|
32
|
+
BeliefOperator["Update"] = "UPDATE";
|
|
33
|
+
/** Claim now believed false (no replacement) — mark RETRACTED, preserve as evidence. */
|
|
34
|
+
BeliefOperator["Retract"] = "RETRACT";
|
|
35
|
+
/** Replaced by a more specific or general claim — link old to new; both queryable. */
|
|
36
|
+
BeliefOperator["Supersede"] = "SUPERSEDE";
|
|
37
|
+
/** Strong, repeated belief becomes a directive (constraint tier) influencing answer prompt. */
|
|
38
|
+
BeliefOperator["Promote"] = "PROMOTE";
|
|
39
|
+
/** Challenged but not retracted — lower confidence; flag for re-evaluation. */
|
|
40
|
+
BeliefOperator["Demote"] = "DEMOTE";
|
|
41
|
+
/** Adds an evidence-for edge to a supported claim — does not introduce a new claim. */
|
|
42
|
+
BeliefOperator["EvidenceFor"] = "EVIDENCE_FOR";
|
|
43
|
+
/** Adds a counter edge to a challenged claim — does not introduce a new claim. */
|
|
44
|
+
BeliefOperator["Counter"] = "COUNTER";
|
|
45
|
+
})(BeliefOperator || (BeliefOperator = {}));
|
|
46
|
+
const VALID_OPERATORS = new Set(Object.values(BeliefOperator));
|
|
47
|
+
/** Raised when the LLM resolver cannot produce a usable TBC decision. */
|
|
48
|
+
export class BeliefResolverError extends Error {
|
|
49
|
+
cause;
|
|
50
|
+
constructor(message, cause) {
|
|
51
|
+
super(message);
|
|
52
|
+
this.cause = cause;
|
|
53
|
+
this.name = 'BeliefResolverError';
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const TBC_SYSTEM_PROMPT = `You are a belief-state reconciliation system. Given a NEW atomic claim and up to ${TBC_MAX_CANDIDATES} CANDIDATE existing claims (each with current belief state), pick exactly ONE typed belief operator that best describes the relationship.
|
|
57
|
+
|
|
58
|
+
OPERATORS:
|
|
59
|
+
- AFFIRM: NEW supports an existing CANDIDATE; no new claim is created. Strengthens the target.
|
|
60
|
+
- UPDATE: NEW corrects a CANDIDATE about the same attribute (minor edit / typo / qualifier).
|
|
61
|
+
- RETRACT: NEW asserts an existing CANDIDATE is false, with no replacement.
|
|
62
|
+
- SUPERSEDE: NEW replaces a CANDIDATE with a more specific or more general claim. Both remain queryable.
|
|
63
|
+
- PROMOTE: NEW reinforces a repeatedly-affirmed CANDIDATE strongly enough that it should become a directive.
|
|
64
|
+
- DEMOTE: NEW challenges a CANDIDATE but is not strong enough to retract — lower its confidence.
|
|
65
|
+
- EVIDENCE_FOR: NEW is itself novel content but adds a supporting edge to a CANDIDATE.
|
|
66
|
+
- COUNTER: NEW is itself novel content but adds a contradicting edge to a CANDIDATE.
|
|
67
|
+
|
|
68
|
+
RULES:
|
|
69
|
+
- Pick AFFIRM when the candidate set is empty AND the new claim has no clear target.
|
|
70
|
+
- target_claim_id MUST match one of the CANDIDATE ids when the operator references a target.
|
|
71
|
+
- confidence_delta is in [-1, 1]: positive for AFFIRM/EVIDENCE_FOR/PROMOTE, negative for DEMOTE/COUNTER/RETRACT, 0 for UPDATE/SUPERSEDE.
|
|
72
|
+
- Prefer EVIDENCE_FOR over AFFIRM when the new claim contains genuinely novel surface content but semantically supports the target.
|
|
73
|
+
|
|
74
|
+
OUTPUT FORMAT (JSON):
|
|
75
|
+
{
|
|
76
|
+
"operator": "AFFIRM" | "UPDATE" | "RETRACT" | "SUPERSEDE" | "PROMOTE" | "DEMOTE" | "EVIDENCE_FOR" | "COUNTER",
|
|
77
|
+
"target_claim_id": null | "id of candidate",
|
|
78
|
+
"confidence_delta": -1.0 to 1.0,
|
|
79
|
+
"rationale": "one sentence justification"
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
Return only the JSON object. Do not wrap it in markdown fences. Do not explain your reasoning outside the JSON.`;
|
|
83
|
+
function viewCandidate(candidate) {
|
|
84
|
+
// Phase 2 does not yet hydrate confidence from storage; future phases pass
|
|
85
|
+
// the loaded BeliefMetadata in. For now we report the AUDN-era defaults.
|
|
86
|
+
return {
|
|
87
|
+
id: candidate.id,
|
|
88
|
+
content: candidate.content,
|
|
89
|
+
similarity: candidate.similarity,
|
|
90
|
+
confidence: 1.0,
|
|
91
|
+
mutation_type: null,
|
|
92
|
+
history_depth: 0,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function buildTbcUserMessage(newClaim, candidates) {
|
|
96
|
+
const trimmed = candidates.slice(0, TBC_MAX_CANDIDATES).map(viewCandidate);
|
|
97
|
+
const candidatesBlock = trimmed.length === 0
|
|
98
|
+
? '(no candidates)'
|
|
99
|
+
: trimmed.map((c) => (`[ID: ${c.id}] (similarity: ${c.similarity.toFixed(2)}, confidence: ${c.confidence.toFixed(2)}, mutation: ${c.mutation_type ?? 'NONE'}, history_depth: ${c.history_depth}) ${c.content}`)).join('\n');
|
|
100
|
+
return `NEW CLAIM: ${newClaim.fact}\n\nCANDIDATE CLAIMS:\n${candidatesBlock}`;
|
|
101
|
+
}
|
|
102
|
+
function parseTbcDecision(raw, candidateIds) {
|
|
103
|
+
const cleaned = extractFirstJsonObject(raw);
|
|
104
|
+
let parsed;
|
|
105
|
+
try {
|
|
106
|
+
parsed = JSON.parse(cleaned);
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
throw new BeliefResolverError(`TBC resolver returned non-JSON output: ${cleaned.slice(0, 400)}`, err);
|
|
110
|
+
}
|
|
111
|
+
return validateTbcDecision(parsed, candidateIds);
|
|
112
|
+
}
|
|
113
|
+
/** Operators that require a target_claim_id from the candidate set. AFFIRM is the only exception. */
|
|
114
|
+
const TARGET_REQUIRED_OPERATORS = new Set([
|
|
115
|
+
BeliefOperator.Update,
|
|
116
|
+
BeliefOperator.Retract,
|
|
117
|
+
BeliefOperator.Supersede,
|
|
118
|
+
BeliefOperator.Promote,
|
|
119
|
+
BeliefOperator.Demote,
|
|
120
|
+
BeliefOperator.EvidenceFor,
|
|
121
|
+
BeliefOperator.Counter,
|
|
122
|
+
]);
|
|
123
|
+
// fallow-ignore-next-line complexity
|
|
124
|
+
function validateTbcDecision(parsed, candidateIds) {
|
|
125
|
+
const operator = typeof parsed.operator === 'string' && VALID_OPERATORS.has(parsed.operator)
|
|
126
|
+
? parsed.operator
|
|
127
|
+
: null;
|
|
128
|
+
if (!operator) {
|
|
129
|
+
throw new BeliefResolverError(`TBC resolver returned invalid operator: ${String(parsed.operator)}`);
|
|
130
|
+
}
|
|
131
|
+
const target = typeof parsed.target_claim_id === 'string' ? parsed.target_claim_id : null;
|
|
132
|
+
if (target !== null && !candidateIds.has(target)) {
|
|
133
|
+
throw new BeliefResolverError(`TBC resolver returned target_claim_id "${target}" not in candidate set [${[...candidateIds].join(', ')}]`);
|
|
134
|
+
}
|
|
135
|
+
if (TARGET_REQUIRED_OPERATORS.has(operator) && target === null) {
|
|
136
|
+
throw new BeliefResolverError(`TBC resolver picked ${operator} but provided no target_claim_id. ${operator} requires one of [${[...candidateIds].join(', ')}].`);
|
|
137
|
+
}
|
|
138
|
+
const deltaRaw = typeof parsed.confidence_delta === 'number' ? parsed.confidence_delta : 0;
|
|
139
|
+
const confidence_delta = Number.isFinite(deltaRaw) ? Math.max(-1, Math.min(1, deltaRaw)) : 0;
|
|
140
|
+
const rationale = typeof parsed.rationale === 'string' ? parsed.rationale : '';
|
|
141
|
+
return {
|
|
142
|
+
operator,
|
|
143
|
+
...(target ? { target_claim_id: target } : {}),
|
|
144
|
+
confidence_delta,
|
|
145
|
+
rationale,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Resolve a typed belief operator for a candidate set via an LLM call.
|
|
150
|
+
*
|
|
151
|
+
* Fail-closed: any LLM transport failure or parser failure raises
|
|
152
|
+
* `BeliefResolverError` rather than silently returning an `Affirm`/`ADD`
|
|
153
|
+
* stub. AUDN's existing executor will surface the error to the caller.
|
|
154
|
+
*
|
|
155
|
+
* The signature mirrors `resolveAUDN(factText, candidates)` so the
|
|
156
|
+
* `memory-audn.ts` call site can swap it in cleanly.
|
|
157
|
+
*
|
|
158
|
+
* @param newClaim - The inbound atomic claim about to be ingested.
|
|
159
|
+
* @param candidates - Conflict candidates already discovered via the standard
|
|
160
|
+
* AUDN candidate search; same input AUDN sees today.
|
|
161
|
+
* @param llmClient - Optional LLM provider override for tests; defaults to
|
|
162
|
+
* the shared singleton in `services/llm.ts`.
|
|
163
|
+
* @returns A `BeliefOperationDecision` selecting one of the eight operators.
|
|
164
|
+
*/
|
|
165
|
+
export async function decideBeliefOperator(newClaim, candidates, llmClient = defaultLlm) {
|
|
166
|
+
const candidateIds = new Set(candidates.slice(0, TBC_MAX_CANDIDATES).map((c) => c.id));
|
|
167
|
+
const messages = [
|
|
168
|
+
{ role: 'system', content: TBC_SYSTEM_PROMPT },
|
|
169
|
+
{ role: 'user', content: buildTbcUserMessage(newClaim, candidates) },
|
|
170
|
+
];
|
|
171
|
+
return runTbcLlmWithRetry(messages, candidateIds, llmClient);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Issue the TBC LLM call and parse. On parser/validation failure, retry ONCE
|
|
175
|
+
* with the validation error appended to the prompt as corrective context.
|
|
176
|
+
* Fail-closed (re-throws) if the retry also fails — preserves AUDN semantics.
|
|
177
|
+
*/
|
|
178
|
+
async function runTbcLlmWithRetry(messages, candidateIds, llmClient) {
|
|
179
|
+
try {
|
|
180
|
+
return await callAndParseTbc(messages, candidateIds, llmClient);
|
|
181
|
+
}
|
|
182
|
+
catch (firstErr) {
|
|
183
|
+
if (!(firstErr instanceof BeliefResolverError))
|
|
184
|
+
throw firstErr;
|
|
185
|
+
const correctiveTurn = {
|
|
186
|
+
role: 'user',
|
|
187
|
+
content: `Your previous response was invalid: ${firstErr.message}\nReturn a valid JSON object that conforms to the schema. If you pick UPDATE, RETRACT, SUPERSEDE, PROMOTE, DEMOTE, EVIDENCE_FOR, or COUNTER, you MUST set target_claim_id to one of the candidate IDs above.`,
|
|
188
|
+
};
|
|
189
|
+
return callAndParseTbc([...messages, correctiveTurn], candidateIds, llmClient);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
async function callAndParseTbc(messages, candidateIds, llmClient) {
|
|
193
|
+
let raw;
|
|
194
|
+
try {
|
|
195
|
+
raw = await llmClient.chat(messages, { temperature: 0, jsonMode: true, maxTokens: TBC_MAX_TOKENS });
|
|
196
|
+
}
|
|
197
|
+
catch (err) {
|
|
198
|
+
throw new BeliefResolverError(`TBC resolver LLM call failed: ${err.message}`, err);
|
|
199
|
+
}
|
|
200
|
+
if (!raw) {
|
|
201
|
+
throw new BeliefResolverError('TBC resolver returned empty content');
|
|
202
|
+
}
|
|
203
|
+
return parseTbcDecision(raw, candidateIds);
|
|
204
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Typed configuration for the managed-blob upload pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Discriminated by `rawStorageMode` so pointer-only deployments
|
|
5
|
+
* carry no HMAC secret at all (vs. holding a placeholder that is
|
|
6
|
+
* "never consumed in practice" — that earlier shape violated the
|
|
7
|
+
* workspace no-fallback rule and made it possible to leak a fake
|
|
8
|
+
* value into service code).
|
|
9
|
+
*
|
|
10
|
+
* - `pointer_only` deployments: `{rawStorageMode, rawStoragePrefix}`
|
|
11
|
+
* only. No key derivation runs in this branch, so the HMAC
|
|
12
|
+
* secret is structurally absent.
|
|
13
|
+
* - `managed_blob` deployments: REQUIRED `storageKeyHmacSecret`.
|
|
14
|
+
* `runtime-container` narrows `RuntimeConfig` to this variant
|
|
15
|
+
* when it constructs the document upload pipeline; tests build
|
|
16
|
+
* the variant directly with `TEST_STORAGE_KEY_HMAC_SECRET`.
|
|
17
|
+
*
|
|
18
|
+
* Callers narrow with `rawStorageMode === 'managed_blob'` (the
|
|
19
|
+
* upload pipeline's early-return gate is exactly that check), at
|
|
20
|
+
* which point the secret is statically available without any
|
|
21
|
+
* runtime defensive read.
|
|
22
|
+
*/
|
|
23
|
+
/** Pointer-only — no managed-key derivation runs in this branch. */
|
|
24
|
+
export interface UploadConfigPointerOnly {
|
|
25
|
+
rawStorageMode: 'pointer_only';
|
|
26
|
+
rawStoragePrefix: string;
|
|
27
|
+
}
|
|
28
|
+
/** Managed-blob — HMAC secret required to derive PII-safe key prefixes. */
|
|
29
|
+
export interface UploadConfigManagedBlob {
|
|
30
|
+
rawStorageMode: 'managed_blob';
|
|
31
|
+
rawStoragePrefix: string;
|
|
32
|
+
storageKeyHmacSecret: string;
|
|
33
|
+
}
|
|
34
|
+
export type UploadConfig = UploadConfigPointerOnly | UploadConfigManagedBlob;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Typed configuration for the managed-blob upload pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Discriminated by `rawStorageMode` so pointer-only deployments
|
|
5
|
+
* carry no HMAC secret at all (vs. holding a placeholder that is
|
|
6
|
+
* "never consumed in practice" — that earlier shape violated the
|
|
7
|
+
* workspace no-fallback rule and made it possible to leak a fake
|
|
8
|
+
* value into service code).
|
|
9
|
+
*
|
|
10
|
+
* - `pointer_only` deployments: `{rawStorageMode, rawStoragePrefix}`
|
|
11
|
+
* only. No key derivation runs in this branch, so the HMAC
|
|
12
|
+
* secret is structurally absent.
|
|
13
|
+
* - `managed_blob` deployments: REQUIRED `storageKeyHmacSecret`.
|
|
14
|
+
* `runtime-container` narrows `RuntimeConfig` to this variant
|
|
15
|
+
* when it constructs the document upload pipeline; tests build
|
|
16
|
+
* the variant directly with `TEST_STORAGE_KEY_HMAC_SECRET`.
|
|
17
|
+
*
|
|
18
|
+
* Callers narrow with `rawStorageMode === 'managed_blob'` (the
|
|
19
|
+
* upload pipeline's early-return gate is exactly that check), at
|
|
20
|
+
* which point the secret is statically available without any
|
|
21
|
+
* runtime defensive read.
|
|
22
|
+
*/
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* the managed-upload upload-pipeline decision helpers — pure functions extracted
|
|
3
|
+
* out of `document-upload.ts` so the α/β/β2/γ orchestration stays
|
|
4
|
+
* under the 40-LOC-per-function cap and the decision tables are
|
|
5
|
+
* independently testable.
|
|
6
|
+
*
|
|
7
|
+
* - `classifyIdempotent` decides what an in-flight `uploadRaw`
|
|
8
|
+
* should do given the document's current row state + the
|
|
9
|
+
* incoming content hash. Drives the claim step's idempotency short-
|
|
10
|
+
* circuit and the same-bytes crash recovery branches.
|
|
11
|
+
* - `deriveFinalRawStorageStatus` maps the adapter's lifecycle hint
|
|
12
|
+
* (`'stored'` / `'pending'`) + provider name to the terminal
|
|
13
|
+
* `raw_storage_status` value the finalization step writes. Provider-aware:
|
|
14
|
+
* Filecoin `'stored'` is `blob_available` (gateway-confirmed
|
|
15
|
+
* retrievable), immediate providers stay `blob_stored`.
|
|
16
|
+
*
|
|
17
|
+
* No imports of pg / store / codec — these helpers are 100% pure so
|
|
18
|
+
* tests can drive them with plain row literals.
|
|
19
|
+
*/
|
|
20
|
+
import type { RawDocumentRow } from '../db/raw-document-types.js';
|
|
21
|
+
export type UploadIdempotencyDecision = {
|
|
22
|
+
kind: 'returnExisting';
|
|
23
|
+
} | {
|
|
24
|
+
kind: 'reclaimAndUpload';
|
|
25
|
+
} | {
|
|
26
|
+
kind: 'finalize';
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Decision-table classifier: given the row's current state + the
|
|
30
|
+
* incoming content hash, decide whether the claim step can short-circuit
|
|
31
|
+
* (returnExisting), needs to re-run β/β2/γ in full (reclaimAndUpload),
|
|
32
|
+
* or can jump straight to the finalization step (finalize — recovery from a crash
|
|
33
|
+
* that happened between the durable URI-write step's URI write and the finalization step's status
|
|
34
|
+
* flip).
|
|
35
|
+
*
|
|
36
|
+
* Returns `null` when the row's content hash does NOT match — caller
|
|
37
|
+
* runs the existing `hasConflictingManagedBlob` check, which raises a
|
|
38
|
+
* 409 if the slot is occupied with different bytes.
|
|
39
|
+
*/
|
|
40
|
+
export declare function classifyIdempotent(document: RawDocumentRow, contentHash: string): UploadIdempotencyDecision | null;
|
|
41
|
+
/**
|
|
42
|
+
* Provider-aware terminal status mapping. the finalization step writes the return
|
|
43
|
+
* value as the new `raw_storage_status`.
|
|
44
|
+
*
|
|
45
|
+
* - Adapter `'pending'` → `blob_pending` regardless of provider
|
|
46
|
+
* (the reconciler completes the flow).
|
|
47
|
+
* - Adapter `'stored'` + eventual content-addressed provider →
|
|
48
|
+
* `blob_available` (the provider has confirmed retrievability;
|
|
49
|
+
* we skip past `blob_stored` directly to terminal-OK).
|
|
50
|
+
* - Adapter `'stored'` + any other provider → `blob_stored`
|
|
51
|
+
* (immediate providers — local_fs / s3).
|
|
52
|
+
*/
|
|
53
|
+
export declare function deriveFinalRawStorageStatus(args: {
|
|
54
|
+
storedStatus: 'stored' | 'pending';
|
|
55
|
+
storageProvider: string;
|
|
56
|
+
}): 'blob_pending' | 'blob_available' | 'blob_stored';
|
|
57
|
+
/**
|
|
58
|
+
* Read the persisted `upload_result.stored_status` sidecar the durable URI-write step
|
|
59
|
+
* wrote into `raw_storage_metadata`. the finalization step needs this on the
|
|
60
|
+
* finalize-recovery path because the in-memory `stored` from the provider-write step
|
|
61
|
+
* is null when β + β2 are skipped. Returns null when the sidecar is
|
|
62
|
+
* missing or malformed — caller must defend (the finalization step throws an
|
|
63
|
+
* InvariantError in that case).
|
|
64
|
+
*/
|
|
65
|
+
export declare function readPersistedStoredStatus(metadata: Record<string, unknown>): 'stored' | 'pending' | null;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* the managed-upload upload-pipeline decision helpers — pure functions extracted
|
|
3
|
+
* out of `document-upload.ts` so the α/β/β2/γ orchestration stays
|
|
4
|
+
* under the 40-LOC-per-function cap and the decision tables are
|
|
5
|
+
* independently testable.
|
|
6
|
+
*
|
|
7
|
+
* - `classifyIdempotent` decides what an in-flight `uploadRaw`
|
|
8
|
+
* should do given the document's current row state + the
|
|
9
|
+
* incoming content hash. Drives the claim step's idempotency short-
|
|
10
|
+
* circuit and the same-bytes crash recovery branches.
|
|
11
|
+
* - `deriveFinalRawStorageStatus` maps the adapter's lifecycle hint
|
|
12
|
+
* (`'stored'` / `'pending'`) + provider name to the terminal
|
|
13
|
+
* `raw_storage_status` value the finalization step writes. Provider-aware:
|
|
14
|
+
* Filecoin `'stored'` is `blob_available` (gateway-confirmed
|
|
15
|
+
* retrievable), immediate providers stay `blob_stored`.
|
|
16
|
+
*
|
|
17
|
+
* No imports of pg / store / codec — these helpers are 100% pure so
|
|
18
|
+
* tests can drive them with plain row literals.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Decision-table classifier: given the row's current state + the
|
|
22
|
+
* incoming content hash, decide whether the claim step can short-circuit
|
|
23
|
+
* (returnExisting), needs to re-run β/β2/γ in full (reclaimAndUpload),
|
|
24
|
+
* or can jump straight to the finalization step (finalize — recovery from a crash
|
|
25
|
+
* that happened between the durable URI-write step's URI write and the finalization step's status
|
|
26
|
+
* flip).
|
|
27
|
+
*
|
|
28
|
+
* Returns `null` when the row's content hash does NOT match — caller
|
|
29
|
+
* runs the existing `hasConflictingManagedBlob` check, which raises a
|
|
30
|
+
* 409 if the slot is occupied with different bytes.
|
|
31
|
+
*/
|
|
32
|
+
export function classifyIdempotent(document, contentHash) {
|
|
33
|
+
if (document.contentHash !== contentHash)
|
|
34
|
+
return null;
|
|
35
|
+
switch (document.rawStorageStatus) {
|
|
36
|
+
case 'blob_stored':
|
|
37
|
+
case 'blob_pending':
|
|
38
|
+
case 'blob_available':
|
|
39
|
+
return { kind: 'returnExisting' };
|
|
40
|
+
case 'blob_uploading':
|
|
41
|
+
// the claim step-only OR Phase-β-only row (crash before the durable URI-write step wrote
|
|
42
|
+
// the URI). Bytes may already be on the provider but we don't
|
|
43
|
+
// have the CID — re-run β + β2 + γ. If the provider is
|
|
44
|
+
// content-addressed-idempotent, the second `store.put()` returns
|
|
45
|
+
// the same CID; if not, this creates a rare orphan-billing risk
|
|
46
|
+
// for provider cleanup.
|
|
47
|
+
if (document.storageUri === null)
|
|
48
|
+
return { kind: 'reclaimAndUpload' };
|
|
49
|
+
// the durable URI-write step succeeded; crash before the finalization step flipped the status.
|
|
50
|
+
// The URI is durable in the row, the bytes are on the provider.
|
|
51
|
+
// Skip β + β2 entirely; run the finalization step alone. No re-encode, no
|
|
52
|
+
// re-upload, no re-billing.
|
|
53
|
+
return { kind: 'finalize' };
|
|
54
|
+
case 'raw_storage_failed':
|
|
55
|
+
return { kind: 'reclaimAndUpload' };
|
|
56
|
+
default:
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Provider-aware terminal status mapping. the finalization step writes the return
|
|
62
|
+
* value as the new `raw_storage_status`.
|
|
63
|
+
*
|
|
64
|
+
* - Adapter `'pending'` → `blob_pending` regardless of provider
|
|
65
|
+
* (the reconciler completes the flow).
|
|
66
|
+
* - Adapter `'stored'` + eventual content-addressed provider →
|
|
67
|
+
* `blob_available` (the provider has confirmed retrievability;
|
|
68
|
+
* we skip past `blob_stored` directly to terminal-OK).
|
|
69
|
+
* - Adapter `'stored'` + any other provider → `blob_stored`
|
|
70
|
+
* (immediate providers — local_fs / s3).
|
|
71
|
+
*/
|
|
72
|
+
export function deriveFinalRawStorageStatus(args) {
|
|
73
|
+
if (args.storedStatus === 'pending')
|
|
74
|
+
return 'blob_pending';
|
|
75
|
+
if (isEventualContentProvider(args.storageProvider))
|
|
76
|
+
return 'blob_available';
|
|
77
|
+
return 'blob_stored';
|
|
78
|
+
}
|
|
79
|
+
function isEventualContentProvider(provider) {
|
|
80
|
+
return provider === 'filecoin';
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Read the persisted `upload_result.stored_status` sidecar the durable URI-write step
|
|
84
|
+
* wrote into `raw_storage_metadata`. the finalization step needs this on the
|
|
85
|
+
* finalize-recovery path because the in-memory `stored` from the provider-write step
|
|
86
|
+
* is null when β + β2 are skipped. Returns null when the sidecar is
|
|
87
|
+
* missing or malformed — caller must defend (the finalization step throws an
|
|
88
|
+
* InvariantError in that case).
|
|
89
|
+
*/
|
|
90
|
+
export function readPersistedStoredStatus(metadata) {
|
|
91
|
+
const uploadResult = metadata['upload_result'];
|
|
92
|
+
if (!uploadResult || typeof uploadResult !== 'object')
|
|
93
|
+
return null;
|
|
94
|
+
const stored = uploadResult['stored_status'];
|
|
95
|
+
if (stored === 'stored' || stored === 'pending')
|
|
96
|
+
return stored;
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stateless helpers extracted out of `document-upload.ts` to keep the
|
|
3
|
+
* orchestration file under the workspace 400-line cap. These are pure
|
|
4
|
+
* functions + small async wrappers — no orchestration state, no
|
|
5
|
+
* codec/store/registry coupling beyond the typed argument bag.
|
|
6
|
+
*/
|
|
7
|
+
import pg from 'pg';
|
|
8
|
+
import type { RawDocumentRow } from '../db/raw-document-types.js';
|
|
9
|
+
import type { StoredRawContent } from '../storage/raw-content-store.js';
|
|
10
|
+
export declare class UploadDocumentNotFoundError extends Error {
|
|
11
|
+
readonly documentId: string;
|
|
12
|
+
constructor(documentId: string);
|
|
13
|
+
}
|
|
14
|
+
export declare class ManagedStorageDisabledError extends Error {
|
|
15
|
+
constructor();
|
|
16
|
+
}
|
|
17
|
+
export declare class UploadDocumentConflictError extends Error {
|
|
18
|
+
readonly documentId: string;
|
|
19
|
+
readonly existingContentHash: string;
|
|
20
|
+
readonly incomingContentHash: string;
|
|
21
|
+
constructor(documentId: string, existingContentHash: string, incomingContentHash: string);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Surfaced when Phase β2 or Phase γ's compare-and-set found 0 rows.
|
|
25
|
+
* Means our claim was lost — another worker reclaimed the row or it
|
|
26
|
+
* was concurrently deleted. Not exported because route handlers
|
|
27
|
+
* currently map any such error to a generic 500; promote to `export`
|
|
28
|
+
* when Phase 8.5 observability needs to discriminate it.
|
|
29
|
+
*/
|
|
30
|
+
export declare class UploadClaimLostError extends Error {
|
|
31
|
+
readonly documentId: string;
|
|
32
|
+
readonly claimId: string;
|
|
33
|
+
readonly phase: 'beta2' | 'gamma';
|
|
34
|
+
constructor(documentId: string, claimId: string, phase: 'beta2' | 'gamma');
|
|
35
|
+
}
|
|
36
|
+
export interface UploadRawInput {
|
|
37
|
+
userId: string;
|
|
38
|
+
documentId: string;
|
|
39
|
+
body: Buffer;
|
|
40
|
+
contentType?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface UploadRawResult {
|
|
43
|
+
documentId: string;
|
|
44
|
+
storageProvider: string;
|
|
45
|
+
storageUri: string;
|
|
46
|
+
contentHash: string;
|
|
47
|
+
sizeBytes: number;
|
|
48
|
+
rawStorageStatus: 'blob_stored' | 'blob_pending' | 'blob_available';
|
|
49
|
+
storageMode: 'managed_blob';
|
|
50
|
+
/**
|
|
51
|
+
* INTERNAL metadata shape `{ codec, filecoin?, upload_result }`.
|
|
52
|
+
* Route formatters project this through
|
|
53
|
+
* `formatPublicRawStorageMetadata` before emitting to the wire
|
|
54
|
+
* (rev-fix HIGH 3). Internal callers (Phase γ recovery, tests) can
|
|
55
|
+
* read the full shape directly off this field.
|
|
56
|
+
*/
|
|
57
|
+
rawStorageMetadata: Record<string, unknown>;
|
|
58
|
+
idempotentSkip: boolean;
|
|
59
|
+
}
|
|
60
|
+
export declare function loadActive(client: pg.PoolClient, input: UploadRawInput): Promise<RawDocumentRow>;
|
|
61
|
+
export declare function sha256Hex(buf: Buffer): string;
|
|
62
|
+
export declare function describeError(err: unknown): string;
|
|
63
|
+
/**
|
|
64
|
+
* Build the adapter-relative key the blob is stored under. Includes
|
|
65
|
+
* the content hash so byte-identical re-uploads collide on the same
|
|
66
|
+
* key (no orphan from re-uploading the same content).
|
|
67
|
+
*
|
|
68
|
+
* `userPrefix` MUST be the HMAC-SHA256-derived per-user prefix from
|
|
69
|
+
* `deriveStorageKeyPrefix(secret, userId)`. The plaintext `userId`
|
|
70
|
+
* MUST NEVER appear in any provider key/URI — the HMAC prefix is
|
|
71
|
+
* the PII-safe replacement. Stable across retries (same user → same
|
|
72
|
+
* prefix) so the same-bytes re-upload idempotency contract holds.
|
|
73
|
+
*/
|
|
74
|
+
export declare function blobKey(prefix: string, userPrefix: string, documentId: string, contentHash: string): string;
|
|
75
|
+
/**
|
|
76
|
+
* Echo the row's existing state as the idempotent-skip response.
|
|
77
|
+
* Phase α returns this when `classifyIdempotent === 'returnExisting'`.
|
|
78
|
+
*/
|
|
79
|
+
export declare function idempotentResult(document: RawDocumentRow, contentHash: string, sizeBytes: number): UploadRawResult;
|
|
80
|
+
export interface BuildUploadResultArgs {
|
|
81
|
+
documentId: string;
|
|
82
|
+
storageProvider: string;
|
|
83
|
+
storageUri: string;
|
|
84
|
+
contentHash: string;
|
|
85
|
+
sizeBytes: number;
|
|
86
|
+
finalStatus: 'blob_stored' | 'blob_pending' | 'blob_available';
|
|
87
|
+
rawStorageMetadata: Record<string, unknown>;
|
|
88
|
+
idempotentSkip: boolean;
|
|
89
|
+
}
|
|
90
|
+
export declare function buildUploadResult(args: BuildUploadResultArgs): UploadRawResult;
|
|
91
|
+
/**
|
|
92
|
+
* Build the `raw_storage_metadata` JSONB Phase β2 writes:
|
|
93
|
+
* - `codec`: the encoder's sidecar (name + version + AES-GCM internals).
|
|
94
|
+
* - spread of `stored.providerMetadata`: `{ filecoin: { ... } }` for
|
|
95
|
+
* Filecoin; `{}` for immediate providers.
|
|
96
|
+
* - `upload_result.stored_status`: INTERNAL sidecar Phase γ reads
|
|
97
|
+
* on the finalize-recovery path. Public formatters strip it.
|
|
98
|
+
*/
|
|
99
|
+
export declare function buildPhaseBeta2Metadata(stored: StoredRawContent & {
|
|
100
|
+
codecMetadata: Record<string, unknown>;
|
|
101
|
+
}): Record<string, unknown>;
|
|
102
|
+
/**
|
|
103
|
+
* Best-effort `raw_storage_failed` marker. Logs (does not swallow)
|
|
104
|
+
* the marker failure so the original upload error is the one the
|
|
105
|
+
* caller sees.
|
|
106
|
+
*/
|
|
107
|
+
export declare function markRawStorageFailureBestEffort(q: pg.Pool, userId: string, documentId: string, code: string, message: string): Promise<void>;
|