@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,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-layer status repository helpers (Phase B).
|
|
3
|
+
*
|
|
4
|
+
* The audit at
|
|
5
|
+
* `Atomicmemory-research/docs/core-repo/design/document-ingest-audit.md`
|
|
6
|
+
* and the rev-18 hardening plan call for **service-owned** transitions
|
|
7
|
+
* of `extraction_status`, `semantic_index_status`, `raw_storage_status`
|
|
8
|
+
* and the `last_error` JSONB envelope. This module exposes the SQL
|
|
9
|
+
* primitives that the indexer (`document-indexer.ts`), the upload
|
|
10
|
+
* service (`document-upload.ts`), and any future async worker call to
|
|
11
|
+
* record those transitions.
|
|
12
|
+
*
|
|
13
|
+
* Design notes (cross-referenced from the plan):
|
|
14
|
+
*
|
|
15
|
+
* * Each helper accepts `pg.Pool | pg.PoolClient` so it works inside
|
|
16
|
+
* an in-flight transaction (e.g. the indexer's running-tx) and
|
|
17
|
+
* from a **fresh** statement after a parent rolled back. The catch
|
|
18
|
+
* paths in `document-upload.ts` and `document-indexer.ts` use the
|
|
19
|
+
* fresh-statement form deliberately so the durable failure write
|
|
20
|
+
* survives the rollback that drops the in-tx work.
|
|
21
|
+
*
|
|
22
|
+
* * Mark helpers are scoped by `user_id` + `id` and skip soft-deleted
|
|
23
|
+
* rows. They are **idempotent** at the SQL level - re-applying the
|
|
24
|
+
* same status (e.g. `'failed'` -> `'failed'` with the same code)
|
|
25
|
+
* returns the row unchanged.
|
|
26
|
+
*
|
|
27
|
+
* * `last_error` write rule: a failure transition writes the supplied
|
|
28
|
+
* envelope; a success transition clears `last_error` **only when
|
|
29
|
+
* the existing envelope was scoped to the same layer**. A
|
|
30
|
+
* successful semantic-index pass should not silently erase a
|
|
31
|
+
* previous extraction failure that someone else still needs to
|
|
32
|
+
* reconcile.
|
|
33
|
+
*/
|
|
34
|
+
/**
|
|
35
|
+
* Update `extraction_status` on an active row. Pass `lastError` for
|
|
36
|
+
* failure / unsupported transitions; success transitions clear the
|
|
37
|
+
* column when the prior `last_error` was scoped to the extraction
|
|
38
|
+
* layer.
|
|
39
|
+
*/
|
|
40
|
+
export async function markExtractionStatus(args) {
|
|
41
|
+
const { q, userId, documentId, status, lastError } = args;
|
|
42
|
+
const isFailure = status === 'failed' || status === 'unsupported';
|
|
43
|
+
if (isFailure && !lastError) {
|
|
44
|
+
throw new Error(`markExtractionStatus: lastError is required for status '${status}'`);
|
|
45
|
+
}
|
|
46
|
+
if (isFailure) {
|
|
47
|
+
await q.query(`UPDATE raw_documents
|
|
48
|
+
SET extraction_status = $1,
|
|
49
|
+
last_error = $2::jsonb,
|
|
50
|
+
updated_at = NOW()
|
|
51
|
+
WHERE id = $3 AND user_id = $4 AND deleted_at IS NULL`, [status, JSON.stringify(lastError), documentId, userId]);
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
// Success / interim - selectively clear last_error.
|
|
55
|
+
await q.query(`UPDATE raw_documents
|
|
56
|
+
SET extraction_status = $1,
|
|
57
|
+
last_error = CASE
|
|
58
|
+
WHEN last_error IS NOT NULL AND last_error->>'layer' = 'extraction'
|
|
59
|
+
THEN NULL
|
|
60
|
+
ELSE last_error
|
|
61
|
+
END,
|
|
62
|
+
updated_at = NOW()
|
|
63
|
+
WHERE id = $2 AND user_id = $3 AND deleted_at IS NULL`, [status, documentId, userId]);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Update `semantic_index_status` on an active row. Same `last_error`
|
|
67
|
+
* scoping rule as {@link markExtractionStatus} - a successful
|
|
68
|
+
* indexing pass clears the column only when it was last set by the
|
|
69
|
+
* semantic-index layer.
|
|
70
|
+
*/
|
|
71
|
+
export async function markSemanticIndexStatus(args) {
|
|
72
|
+
const { q, userId, documentId, status, lastError } = args;
|
|
73
|
+
const isFailure = status === 'failed';
|
|
74
|
+
if (isFailure && !lastError) {
|
|
75
|
+
throw new Error(`markSemanticIndexStatus: lastError is required for status '${status}'`);
|
|
76
|
+
}
|
|
77
|
+
if (isFailure) {
|
|
78
|
+
await q.query(`UPDATE raw_documents
|
|
79
|
+
SET semantic_index_status = $1,
|
|
80
|
+
last_error = $2::jsonb,
|
|
81
|
+
updated_at = NOW()
|
|
82
|
+
WHERE id = $3 AND user_id = $4 AND deleted_at IS NULL`, [status, JSON.stringify(lastError), documentId, userId]);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
await q.query(`UPDATE raw_documents
|
|
86
|
+
SET semantic_index_status = $1,
|
|
87
|
+
last_error = CASE
|
|
88
|
+
WHEN last_error IS NOT NULL AND last_error->>'layer' = 'semantic_index'
|
|
89
|
+
THEN NULL
|
|
90
|
+
ELSE last_error
|
|
91
|
+
END,
|
|
92
|
+
updated_at = NOW()
|
|
93
|
+
WHERE id = $2 AND user_id = $3 AND deleted_at IS NULL`, [status, documentId, userId]);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Mark a row as `raw_storage_status='raw_storage_failed'` from a
|
|
97
|
+
* **document id** (not a storage URI). The audit fix the upload
|
|
98
|
+
* service relies on: when `store.put` throws before returning a URI
|
|
99
|
+
* the URI-keyed marker can't fire, so this doc-id form lives next to
|
|
100
|
+
* it and runs in the catch path of `uploadRawDocument` in a fresh
|
|
101
|
+
* statement after the parent transaction rolled back.
|
|
102
|
+
*/
|
|
103
|
+
export async function markRawStorageFailedByDocumentId(args) {
|
|
104
|
+
const { q, userId, documentId, lastError } = args;
|
|
105
|
+
await q.query(`UPDATE raw_documents
|
|
106
|
+
SET raw_storage_status = 'raw_storage_failed',
|
|
107
|
+
last_error = $1::jsonb,
|
|
108
|
+
updated_at = NOW()
|
|
109
|
+
WHERE id = $2 AND user_id = $3 AND deleted_at IS NULL`, [JSON.stringify(lastError), documentId, userId]);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Clear `last_error` on a row when the existing envelope is scoped to
|
|
113
|
+
* `layer`. Optional helper for retry paths that want to reset only
|
|
114
|
+
* one layer's failure marker without touching status fields.
|
|
115
|
+
*/
|
|
116
|
+
export async function clearLastError(args) {
|
|
117
|
+
const { q, userId, documentId, layer } = args;
|
|
118
|
+
await q.query(`UPDATE raw_documents
|
|
119
|
+
SET last_error = NULL,
|
|
120
|
+
updated_at = NOW()
|
|
121
|
+
WHERE id = $1
|
|
122
|
+
AND user_id = $2
|
|
123
|
+
AND deleted_at IS NULL
|
|
124
|
+
AND last_error IS NOT NULL
|
|
125
|
+
AND last_error->>'layer' = $3`, [documentId, userId, layer]);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Hard cap on the persisted `last_error.message` length (UTF-16 code
|
|
129
|
+
* units, the JS string-length unit). Producer-facing failure messages
|
|
130
|
+
* vary widely - DB-driver stack traces, embedding-provider error
|
|
131
|
+
* blobs, file-extractor exceptions - and persisting them verbatim
|
|
132
|
+
* risks (a) blowing JSONB row-size budgets on operational noise and
|
|
133
|
+
* (b) leaking sensitive operational strings (URIs, keys baked into
|
|
134
|
+
* exception messages). This cap is the central knob; producers funnel
|
|
135
|
+
* through {@link buildLastError} so the cap applies uniformly to every
|
|
136
|
+
* `last_error` write.
|
|
137
|
+
*
|
|
138
|
+
* The number is sized to fit a useful human-readable detail line
|
|
139
|
+
* (e.g. one stack-frame's worth of context) without becoming a
|
|
140
|
+
* dumping ground for raw exception text.
|
|
141
|
+
*/
|
|
142
|
+
export const MAX_LAST_ERROR_MESSAGE_CHARS = 1000;
|
|
143
|
+
/**
|
|
144
|
+
* Normalize a producer-supplied error message before persisting it on
|
|
145
|
+
* `raw_documents.last_error`:
|
|
146
|
+
* * control chars (including TAB, CR, LF, and NUL) are replaced
|
|
147
|
+
* with a single space - keeps multi-line stack traces from
|
|
148
|
+
* breaking the UI's row layout and prevents NUL bytes from
|
|
149
|
+
* reaching clients that mishandle them;
|
|
150
|
+
* * runs of whitespace collapse to a single space - the message
|
|
151
|
+
* reads as a single line of operator detail;
|
|
152
|
+
* * the result is truncated to {@link MAX_LAST_ERROR_MESSAGE_CHARS}
|
|
153
|
+
* code units. No truncation marker is appended; readers compare
|
|
154
|
+
* against the cap if they want to flag truncation client-side.
|
|
155
|
+
*
|
|
156
|
+
* Exported so producer-side code paths (route handlers, services
|
|
157
|
+
* that need to build envelopes outside `buildLastError`) can apply
|
|
158
|
+
* the same sanitization rule without re-implementing it.
|
|
159
|
+
*/
|
|
160
|
+
export function sanitizeLastErrorMessage(raw) {
|
|
161
|
+
// Replace any character at code point < 0x20 OR DEL (0x7f) with a
|
|
162
|
+
// single space. Covers ASCII control chars including \r, \n, \t,
|
|
163
|
+
// \0; preserves all printable / non-control Unicode glyphs.
|
|
164
|
+
// eslint-disable-next-line no-control-regex
|
|
165
|
+
const stripped = raw.replace(/[\x00-\x1f\x7f]/g, ' ');
|
|
166
|
+
const collapsed = stripped.replace(/ {2,}/g, ' ').trim();
|
|
167
|
+
if (collapsed.length <= MAX_LAST_ERROR_MESSAGE_CHARS)
|
|
168
|
+
return collapsed;
|
|
169
|
+
return collapsed.slice(0, MAX_LAST_ERROR_MESSAGE_CHARS);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Build a `LastError` envelope. Producers should funnel through this
|
|
173
|
+
* helper so the wire / JSONB shape stays uniform AND the message is
|
|
174
|
+
* sanitized + capped (see {@link sanitizeLastErrorMessage}).
|
|
175
|
+
*/
|
|
176
|
+
export function buildLastError(layer, code, message, occurredAt = new Date()) {
|
|
177
|
+
return {
|
|
178
|
+
layer,
|
|
179
|
+
code,
|
|
180
|
+
message: sanitizeLastErrorMessage(message),
|
|
181
|
+
occurred_at: occurredAt.toISOString(),
|
|
182
|
+
};
|
|
183
|
+
}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Row + input types for the document pipeline (Phase 1).
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the columns defined in `schema.sql` for `raw_sources` and
|
|
5
|
+
* `raw_documents`. The CHECK constraints in SQL accept the full enum
|
|
6
|
+
* range so later phases (managed_blob, inline_small_text) can populate
|
|
7
|
+
* those values without a schema change; Phase 1 service-layer code
|
|
8
|
+
* still only writes `storage_mode = 'pointer_only'`.
|
|
9
|
+
*/
|
|
10
|
+
export type RawStorageMode = 'pointer_only' | 'managed_blob' | 'inline_small_text';
|
|
11
|
+
export type RegistrationStatus = 'registered' | 'registration_failed';
|
|
12
|
+
export type RawStorageStatus = 'pointer_recorded' | 'blob_stored' | 'inline_text_stored' | 'raw_storage_failed'
|
|
13
|
+
/**
|
|
14
|
+
* Terminal state for a tombstoned managed-blob row whose bytes were
|
|
15
|
+
* successfully deleted from the configured `RawContentStore`. Set by
|
|
16
|
+
* the Phase-3 cleanup path *after* the soft-delete and *after* the
|
|
17
|
+
* adapter's delete call returned; lets retries of `DELETE
|
|
18
|
+
* /v1/documents/:id` distinguish "blob is gone" from
|
|
19
|
+
* "blob still needs cleanup" (raw_storage_failed).
|
|
20
|
+
*/
|
|
21
|
+
| 'blob_deleted'
|
|
22
|
+
/**
|
|
23
|
+
* Filecoin lifecycle refactor (Slice 2): the provider accepted the
|
|
24
|
+
* upload but storage / retrievability is not yet confirmed. The
|
|
25
|
+
* upload service writes this when the adapter's `put()` returned
|
|
26
|
+
* `status: 'pending'` (an eventual provider). The future Phase 3
|
|
27
|
+
* reconciliation worker polls `head()` and promotes the row to
|
|
28
|
+
* `blob_available` (success) or `blob_archival_failed` (permanent
|
|
29
|
+
* failure).
|
|
30
|
+
*/
|
|
31
|
+
| 'blob_pending'
|
|
32
|
+
/**
|
|
33
|
+
* Reserved for the Phase 3 reconciliation worker. No Phase-1
|
|
34
|
+
* writer; the schema and the union just have to accept it so the
|
|
35
|
+
* Phase 3 worker can flip a row from `blob_pending` once `head()`
|
|
36
|
+
* confirms retrievability.
|
|
37
|
+
*/
|
|
38
|
+
| 'blob_available'
|
|
39
|
+
/**
|
|
40
|
+
* Reserved for the Phase 3 reconciler's permanent-failure path. No
|
|
41
|
+
* Phase-1 writer.
|
|
42
|
+
*/
|
|
43
|
+
| 'blob_archival_failed'
|
|
44
|
+
/**
|
|
45
|
+
* Reserved for Phase 2 Filecoin deletes against providers that
|
|
46
|
+
* support unpin-only semantics. No Phase-1 writer.
|
|
47
|
+
*/
|
|
48
|
+
| 'blob_tombstoned'
|
|
49
|
+
/**
|
|
50
|
+
* Filecoin lifecycle refactor (Phase 5) — transient state during
|
|
51
|
+
* the upload pipeline's α/β/β2/γ split. Phase α writes this with a
|
|
52
|
+
* `raw_storage_claim_id` after seizing the slot; Phase γ flips it
|
|
53
|
+
* to the final terminal state (`blob_stored` / `blob_pending` /
|
|
54
|
+
* `blob_available`) once the adapter returns. A row that stays in
|
|
55
|
+
* `blob_uploading` past a process restart is recoverable via
|
|
56
|
+
* same-bytes idempotent retry of `uploadRaw`; the Phase 6
|
|
57
|
+
* reconciler does NOT process `blob_uploading` rows.
|
|
58
|
+
*/
|
|
59
|
+
| 'blob_uploading';
|
|
60
|
+
/**
|
|
61
|
+
* Phase B (document-ingest hardening) — text-extraction layer status.
|
|
62
|
+
* Mirrors the values in `raw_documents.extraction_status` (CHECK
|
|
63
|
+
* constraint in `schema.sql`).
|
|
64
|
+
*/
|
|
65
|
+
export type ExtractionStatus = 'not_required' | 'pending' | 'running' | 'complete' | 'unsupported' | 'failed';
|
|
66
|
+
/**
|
|
67
|
+
* Phase B — semantic indexing layer status (chunk + embed + store).
|
|
68
|
+
* Mirrors `raw_documents.semantic_index_status`. Note that `'running'`
|
|
69
|
+
* is internally written inside the indexer's BEGIN..COMMIT
|
|
70
|
+
* transaction; under READ COMMITTED isolation other connections do
|
|
71
|
+
* NOT observe it. The state lives on the row only as a CAS marker;
|
|
72
|
+
* UI rendering of "indexing in progress" requires a future
|
|
73
|
+
* async-worker design that commits `'running'` before doing the
|
|
74
|
+
* work, with a lease/heartbeat for crash recovery.
|
|
75
|
+
*/
|
|
76
|
+
export type SemanticIndexStatus = 'not_required' | 'pending' | 'running' | 'complete' | 'failed' | 'stale';
|
|
77
|
+
/** Layer that produced the most-recent failure recorded on a row. */
|
|
78
|
+
export type LastErrorLayer = 'raw_storage' | 'extraction' | 'semantic_index';
|
|
79
|
+
/**
|
|
80
|
+
* Phase B — most-recent failure envelope persisted on `raw_documents.last_error`.
|
|
81
|
+
*
|
|
82
|
+
* Single most-recent failure per row; cleared on the next successful
|
|
83
|
+
* transition for that layer. Snake_case at the storage layer and on
|
|
84
|
+
* the wire so JSONB columns and HTTP responses share one shape.
|
|
85
|
+
*/
|
|
86
|
+
export interface LastError {
|
|
87
|
+
layer: LastErrorLayer;
|
|
88
|
+
/** Bounded enum chosen by the producing layer (e.g. `'managed_storage_disabled'`, `'index_text_too_large'`). */
|
|
89
|
+
code: string;
|
|
90
|
+
/** Human-readable detail. Producers should truncate to a sensible cap. */
|
|
91
|
+
message: string;
|
|
92
|
+
/** ISO 8601 UTC timestamp. */
|
|
93
|
+
occurred_at: string;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Persisted shape of a `raw_sources` row. `account_id` is nullable for
|
|
97
|
+
* sources that do not have a per-account scoping concept (e.g. manual
|
|
98
|
+
* webapp uploads).
|
|
99
|
+
*/
|
|
100
|
+
export interface RawSourceRow {
|
|
101
|
+
id: string;
|
|
102
|
+
userId: string;
|
|
103
|
+
sourceSite: string;
|
|
104
|
+
provider: string;
|
|
105
|
+
accountId: string | null;
|
|
106
|
+
storageMode: RawStorageMode;
|
|
107
|
+
retentionPolicy: Record<string, unknown>;
|
|
108
|
+
consentPolicy: Record<string, unknown>;
|
|
109
|
+
createdAt: Date;
|
|
110
|
+
updatedAt: Date;
|
|
111
|
+
}
|
|
112
|
+
export interface UpsertRawSourceInput {
|
|
113
|
+
userId: string;
|
|
114
|
+
sourceSite: string;
|
|
115
|
+
provider: string;
|
|
116
|
+
accountId?: string | null;
|
|
117
|
+
storageMode?: RawStorageMode;
|
|
118
|
+
retentionPolicy?: Record<string, unknown>;
|
|
119
|
+
consentPolicy?: Record<string, unknown>;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Persisted shape of a `raw_documents` row. Phase 1 callers see
|
|
123
|
+
* `storageUri = null`, `storageProvider = null`, and
|
|
124
|
+
* `rawStorageStatus = 'pointer_recorded'` for every active row.
|
|
125
|
+
*/
|
|
126
|
+
export interface RawDocumentRow {
|
|
127
|
+
id: string;
|
|
128
|
+
userId: string;
|
|
129
|
+
rawSourceId: string;
|
|
130
|
+
externalId: string;
|
|
131
|
+
externalUri: string | null;
|
|
132
|
+
displayName: string | null;
|
|
133
|
+
mimeType: string | null;
|
|
134
|
+
sizeBytes: number | null;
|
|
135
|
+
contentHash: string | null;
|
|
136
|
+
providerVersion: string | null;
|
|
137
|
+
sourceModifiedAt: Date | null;
|
|
138
|
+
storageMode: RawStorageMode;
|
|
139
|
+
storageUri: string | null;
|
|
140
|
+
storageProvider: string | null;
|
|
141
|
+
registrationStatus: RegistrationStatus;
|
|
142
|
+
rawStorageStatus: RawStorageStatus;
|
|
143
|
+
/**
|
|
144
|
+
* Provider-side identifiers for the managed blob — CID, piece CID,
|
|
145
|
+
* deal id, onramp request id, gateway URL, etc. Set by the upload
|
|
146
|
+
* service from `StoredRawContent.providerMetadata`. Opaque to the
|
|
147
|
+
* upload pipeline; surfaced verbatim on the wire as
|
|
148
|
+
* `raw_storage_metadata`. Defaults to `{}` for pointer-only rows
|
|
149
|
+
* and for immediate providers (local_fs / s3) that don't yet
|
|
150
|
+
* populate the field.
|
|
151
|
+
*/
|
|
152
|
+
rawStorageMetadata: Record<string, unknown>;
|
|
153
|
+
metadata: Record<string, unknown>;
|
|
154
|
+
createdAt: Date;
|
|
155
|
+
updatedAt: Date;
|
|
156
|
+
deletedAt: Date | null;
|
|
157
|
+
/**
|
|
158
|
+
* Hash of the text last fed through `POST /v1/documents/:id/index`.
|
|
159
|
+
* Distinct from `contentHash` (the upstream/provider raw-content
|
|
160
|
+
* fingerprint). NULL until first indexed. Used by the Phase 2
|
|
161
|
+
* indexer's idempotency check.
|
|
162
|
+
*/
|
|
163
|
+
indexedContentHash: string | null;
|
|
164
|
+
indexedAt: Date | null;
|
|
165
|
+
/**
|
|
166
|
+
* Phase B per-layer status fields. Default `'not_required'` for
|
|
167
|
+
* legacy rows that predate the columns; new registrations
|
|
168
|
+
* targeting the document pipeline set safe initial states
|
|
169
|
+
* (`'pending'`) at registration time.
|
|
170
|
+
*/
|
|
171
|
+
extractionStatus: ExtractionStatus;
|
|
172
|
+
semanticIndexStatus: SemanticIndexStatus;
|
|
173
|
+
/** Most-recent failure across any layer; null when no layer is currently failed. */
|
|
174
|
+
lastError: LastError | null;
|
|
175
|
+
/**
|
|
176
|
+
* Phase 5 / Phase 6 private worker state. Holds the upload-pipeline
|
|
177
|
+
* claim during α/β/β2/γ and the reconciler claim during the
|
|
178
|
+
* blob_pending → blob_available promotion. These columns are
|
|
179
|
+
* INTERNAL — `formatRawDocument` and `formatPublicRawStorageMetadata`
|
|
180
|
+
* do NOT project them onto the wire; the upload service and the
|
|
181
|
+
* reconciler are the only readers/writers.
|
|
182
|
+
*/
|
|
183
|
+
rawStorageClaimId: string | null;
|
|
184
|
+
rawStorageClaimedAt: Date | null;
|
|
185
|
+
rawStorageLastCheckedAt: Date | null;
|
|
186
|
+
rawStorageNextCheckAt: Date | null;
|
|
187
|
+
rawStorageReconcileAttempts: number;
|
|
188
|
+
/**
|
|
189
|
+
* Durable "row entered blob_pending at" timestamp; the observability
|
|
190
|
+
* layer reads this for the `pending_age_seconds` metric. Set by
|
|
191
|
+
* Phase γ when writing `blob_pending`; cleared on terminal
|
|
192
|
+
* transitions out of pending (blob_available, blob_archival_failed)
|
|
193
|
+
* by the reconciler.
|
|
194
|
+
*/
|
|
195
|
+
rawStoragePendingSince: Date | null;
|
|
196
|
+
/**
|
|
197
|
+
* Step 7 of the storage-sibling plan — FK to the row's paired
|
|
198
|
+
* `storage_artifacts` entry. NULL for rows that pre-date Step 7
|
|
199
|
+
* and for registration stubs (no `external_uri`, no managed
|
|
200
|
+
* upload yet). The composite FK on
|
|
201
|
+
* `(storage_artifact_id, user_id)` makes cross-user links
|
|
202
|
+
* impossible at the persistence layer.
|
|
203
|
+
*/
|
|
204
|
+
storageArtifactId: string | null;
|
|
205
|
+
}
|
|
206
|
+
export interface RegisterRawDocumentInput {
|
|
207
|
+
userId: string;
|
|
208
|
+
rawSourceId: string;
|
|
209
|
+
externalId: string;
|
|
210
|
+
externalUri?: string | null;
|
|
211
|
+
displayName?: string | null;
|
|
212
|
+
mimeType?: string | null;
|
|
213
|
+
sizeBytes?: number | null;
|
|
214
|
+
contentHash?: string | null;
|
|
215
|
+
providerVersion?: string | null;
|
|
216
|
+
sourceModifiedAt?: Date | null;
|
|
217
|
+
storageMode?: RawStorageMode;
|
|
218
|
+
metadata?: Record<string, unknown>;
|
|
219
|
+
/**
|
|
220
|
+
* Phase B — restricted-initial-state status fields. Clients may
|
|
221
|
+
* declare `'pending'` (document pipeline expected to extract +
|
|
222
|
+
* index this row), `'not_required'` (default; pointer-only flow),
|
|
223
|
+
* or `'unsupported'` (extraction layer only — for known
|
|
224
|
+
* non-extractable file types). Service-owned transitions handle
|
|
225
|
+
* `'complete'` / `'failed'` / `'running'`; clients that supply
|
|
226
|
+
* those values are rejected at the schema layer.
|
|
227
|
+
*/
|
|
228
|
+
extractionStatus?: 'pending' | 'not_required' | 'unsupported';
|
|
229
|
+
semanticIndexStatus?: 'pending' | 'not_required';
|
|
230
|
+
}
|
|
231
|
+
export interface ListRawDocumentsInput {
|
|
232
|
+
userId: string;
|
|
233
|
+
sourceSite?: string;
|
|
234
|
+
limit?: number;
|
|
235
|
+
offset?: number;
|
|
236
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Row + input types for the document pipeline (Phase 1).
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the columns defined in `schema.sql` for `raw_sources` and
|
|
5
|
+
* `raw_documents`. The CHECK constraints in SQL accept the full enum
|
|
6
|
+
* range so later phases (managed_blob, inline_small_text) can populate
|
|
7
|
+
* those values without a schema change; Phase 1 service-layer code
|
|
8
|
+
* still only writes `storage_mode = 'pointer_only'`.
|
|
9
|
+
*/
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Raw-storage reconciler DB layer. The reconciler promotes
|
|
3
|
+
* `raw_storage_status='blob_pending'` rows on eventual providers once the
|
|
4
|
+
* adapter's `head()` confirms gateway retrievability (→
|
|
5
|
+
* `blob_available`) or, after exhausted retries, marks them
|
|
6
|
+
* `blob_archival_failed`.
|
|
7
|
+
*
|
|
8
|
+
* Concurrency model (rev-2 §3 + rev-6 §1): claim-then-release. Phase
|
|
9
|
+
* A grabs a batch in a short transaction with `FOR UPDATE SKIP
|
|
10
|
+
* LOCKED` so multiple reconciler instances partition the work
|
|
11
|
+
* deterministically without coordinator overhead. Slow
|
|
12
|
+
* network calls run with NO DB locks held. failure-transition's per-row UPDATE
|
|
13
|
+
* is guarded on `raw_storage_claim_id` so a stale claim cannot
|
|
14
|
+
* clobber a row another worker has since reclaimed.
|
|
15
|
+
*
|
|
16
|
+
* Eligibility predicate gates on TYPED columns only — no JSONB casts
|
|
17
|
+
* (rev-6 §2): a malformed JSONB shape can't masquerade as a fresh
|
|
18
|
+
* claim. The predicate also explicitly excludes `blob_uploading` rows
|
|
19
|
+
* — those recover through `uploadRaw`'s same-bytes idempotent retry,
|
|
20
|
+
* not the reconciler.
|
|
21
|
+
*/
|
|
22
|
+
import pg from 'pg';
|
|
23
|
+
/** One row's worth of state the reconciler needs to probe + update. */
|
|
24
|
+
export interface ReconcilerClaimedRow {
|
|
25
|
+
id: string;
|
|
26
|
+
userId: string;
|
|
27
|
+
storageUri: string;
|
|
28
|
+
storageProvider: string;
|
|
29
|
+
contentHash: string | null;
|
|
30
|
+
rawStorageStatus: 'blob_pending';
|
|
31
|
+
rawStorageMetadata: Record<string, unknown>;
|
|
32
|
+
rawStorageReconcileAttempts: number;
|
|
33
|
+
/**
|
|
34
|
+
* `raw_storage_pending_since` carried through so the reconciler
|
|
35
|
+
* can emit the `pending_age_seconds` observability gauge against
|
|
36
|
+
* the durable lifecycle timestamp (rev-8 §7). NULL only on rows
|
|
37
|
+
* seeded by a path that bypassed the finalization step — production rows always
|
|
38
|
+
* carry it.
|
|
39
|
+
*/
|
|
40
|
+
rawStoragePendingSince: Date | null;
|
|
41
|
+
/**
|
|
42
|
+
* True when the claim batch reclaimed a row whose previous
|
|
43
|
+
* `raw_storage_claim_id` was non-NULL (an earlier worker died /
|
|
44
|
+
* crashed). The `filecoin.reconcile.stale_claim_recovered`
|
|
45
|
+
* event uses this to differentiate fresh claims from recoveries.
|
|
46
|
+
*/
|
|
47
|
+
recoveredStaleClaim: boolean;
|
|
48
|
+
}
|
|
49
|
+
export interface ClaimBatchArgs {
|
|
50
|
+
claimId: string;
|
|
51
|
+
batchSize: number;
|
|
52
|
+
staleAfterMs: number;
|
|
53
|
+
provider: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* claim step: claim a batch of eligible eventual-provider `blob_pending` rows by
|
|
57
|
+
* writing `raw_storage_claim_id` + `raw_storage_claimed_at`. Skips
|
|
58
|
+
* rows another worker holds a fresh claim on. Returns the typed row
|
|
59
|
+
* state the reconciler will probe; the network call runs after this
|
|
60
|
+
* function returns + the caller commits the transaction.
|
|
61
|
+
*
|
|
62
|
+
* Eligibility predicate (rev-7 §3 — two-axis: claim ownership AND
|
|
63
|
+
* scheduled backoff):
|
|
64
|
+
* - `raw_storage_status = 'blob_pending'`
|
|
65
|
+
* - `storage_provider = args.provider`
|
|
66
|
+
* - `storage_uri IS NOT NULL` (rev-7 §1: the claim step-only rows with no
|
|
67
|
+
* URI recover via uploadRaw idempotency, NOT the reconciler)
|
|
68
|
+
* - `deleted_at IS NULL`
|
|
69
|
+
* - backoff elapsed: `next_check_at IS NULL OR next_check_at <= NOW()`
|
|
70
|
+
* - no live owner: claim_id NULL OR claimed_at older than staleAfterMs
|
|
71
|
+
*/
|
|
72
|
+
export declare function claimReconcileBatch(pool: pg.Pool, args: ClaimBatchArgs): Promise<ReadonlyArray<ReconcilerClaimedRow>>;
|
|
73
|
+
/**
|
|
74
|
+
* failure-transition — success: promote to `blob_available`. Guarded on claim_id
|
|
75
|
+
* + status='blob_pending' so a stale claim cannot promote a row
|
|
76
|
+
* another worker has since failed. Deep-merges the new
|
|
77
|
+
* provider keys into the existing sibling (rev-4 §3) so a status-
|
|
78
|
+
* only probe doesn't drop `cid`/`piece_cid`/`deals` the original
|
|
79
|
+
* upload wrote. Layer-scoped `last_error` clear (rev-4 §2): drops
|
|
80
|
+
* the envelope only when it was scoped to `raw_storage`.
|
|
81
|
+
*/
|
|
82
|
+
export declare function promoteToAvailableWithClient(pool: pg.Pool | pg.PoolClient, args: {
|
|
83
|
+
rowId: string;
|
|
84
|
+
claimId: string;
|
|
85
|
+
provider: string;
|
|
86
|
+
providerFields: Record<string, unknown>;
|
|
87
|
+
}): Promise<number>;
|
|
88
|
+
/**
|
|
89
|
+
* failure-transition — still-pending probe: clear the claim (release ownership)
|
|
90
|
+
* + increment attempts + advance `next_check_at` per the
|
|
91
|
+
* caller-computed backoff. Status STAYS `blob_pending` and
|
|
92
|
+
* `pending_since` is preserved.
|
|
93
|
+
*/
|
|
94
|
+
export declare function markStillPendingWithClient(pool: pg.Pool, args: {
|
|
95
|
+
rowId: string;
|
|
96
|
+
claimId: string;
|
|
97
|
+
nextCheckAtMs: number;
|
|
98
|
+
provider: string;
|
|
99
|
+
}): Promise<number>;
|
|
100
|
+
/**
|
|
101
|
+
* failure-transition — terminal failure: status → `blob_archival_failed`. Sets
|
|
102
|
+
* a fresh raw-storage `last_error` envelope, clears claim/pending
|
|
103
|
+
* state, resets attempts. Guarded on claim_id.
|
|
104
|
+
*/
|
|
105
|
+
export declare function markArchivalFailedWithClient(pool: pg.Pool | pg.PoolClient, args: {
|
|
106
|
+
rowId: string;
|
|
107
|
+
claimId: string;
|
|
108
|
+
lastError: Record<string, unknown>;
|
|
109
|
+
provider: string;
|
|
110
|
+
}): Promise<number>;
|