@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,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Sync hook keeping `storage_artifacts.status` in lockstep
|
|
3
|
+
* with `raw_documents.raw_storage_status`.
|
|
4
|
+
*
|
|
5
|
+
* Step 7 of the storage-sibling plan. Every existing raw-storage
|
|
6
|
+
* transition (upload finalize, reconciler success/failure, cleanup
|
|
7
|
+
* success/failure) calls this hook after mutating `raw_documents`
|
|
8
|
+
* so the paired `storage_artifacts` row tracks the same lifecycle.
|
|
9
|
+
*
|
|
10
|
+
* v1 keeps `raw_documents` as the source of truth for document-
|
|
11
|
+
* backed uploads — the artifact row is a synchronized projection.
|
|
12
|
+
* The follow-up Webapp Storage UI PR (source plan Phase 8) makes
|
|
13
|
+
* `storage_artifacts` the source of truth and switches the document
|
|
14
|
+
* formatter to a join-projection. Until then, the helper guarantees
|
|
15
|
+
* both rows agree.
|
|
16
|
+
*
|
|
17
|
+
* Status mapping (plan rev 6 §Step 7):
|
|
18
|
+
*
|
|
19
|
+
* pointer_recorded (with external_uri / pointer artifact) → 'stored'
|
|
20
|
+
* pointer_recorded (no artifact linked) → no-op
|
|
21
|
+
* blob_stored → 'stored'
|
|
22
|
+
* blob_pending → 'pending'
|
|
23
|
+
* blob_uploading → 'pending' (transient)
|
|
24
|
+
* blob_available → 'available'
|
|
25
|
+
* blob_archival_failed → 'failed'
|
|
26
|
+
* raw_storage_failed → 'failed'
|
|
27
|
+
* blob_tombstoned → 'deleted'
|
|
28
|
+
* blob_deleted → 'deleted'
|
|
29
|
+
* inline_text_stored → no-op (inline; no artifact)
|
|
30
|
+
*/
|
|
31
|
+
import { markArchivalFailedWithClient, promoteToAvailableWithClient, } from './raw-storage-reconciliation-repository.js';
|
|
32
|
+
import { buildLastError } from './raw-document-status-repository.js';
|
|
33
|
+
/**
|
|
34
|
+
* Canonical raw_storage cleanup-failure envelope. Persisted to both
|
|
35
|
+
* `raw_documents.last_error` (via `markCleanupFailedAndSyncArtifact`)
|
|
36
|
+
* and the linked `storage_artifacts.last_error`. The provider's raw
|
|
37
|
+
* exception message is funneled through `buildLastError` so the
|
|
38
|
+
* central `sanitizeLastErrorMessage` cap (1 KiB) and control-char
|
|
39
|
+
* collapse apply uniformly — multi-line stack traces, sensitive
|
|
40
|
+
* URLs in error blobs, and oversized provider envelopes never reach
|
|
41
|
+
* the JSONB column unfiltered. The `storage_provider` field is
|
|
42
|
+
* appended after sanitization so the envelope shape stays
|
|
43
|
+
* additive on top of the canonical `LastError`.
|
|
44
|
+
*/
|
|
45
|
+
export function buildRawStorageCleanupFailureEnvelope(message, storageProvider) {
|
|
46
|
+
return {
|
|
47
|
+
...buildLastError('raw_storage', 'managed_blob_cleanup_failed', message),
|
|
48
|
+
storage_provider: storageProvider,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
const STATUS_MAP = {
|
|
52
|
+
pointer_recorded: 'stored',
|
|
53
|
+
blob_stored: 'stored',
|
|
54
|
+
blob_pending: 'pending',
|
|
55
|
+
blob_uploading: 'pending',
|
|
56
|
+
blob_available: 'available',
|
|
57
|
+
blob_archival_failed: 'failed',
|
|
58
|
+
raw_storage_failed: 'failed',
|
|
59
|
+
blob_tombstoned: 'deleted',
|
|
60
|
+
blob_deleted: 'deleted',
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Map a single `raw_documents` row's new status onto its linked
|
|
64
|
+
* `storage_artifacts` row. Resolves the link inside the same query
|
|
65
|
+
* pair (no separate read) so the hook is safe to call inside the
|
|
66
|
+
* existing transactions that wrap the raw-storage transitions.
|
|
67
|
+
*
|
|
68
|
+
* No-op (silently) when:
|
|
69
|
+
* - the document is not linked to an artifact (`storage_artifact_id IS NULL`),
|
|
70
|
+
* - the new raw status maps to no artifact state (e.g. `inline_text_stored`).
|
|
71
|
+
*
|
|
72
|
+
* The function deliberately does NOT scope by `user_id` — the
|
|
73
|
+
* caller has already vouched for the row by holding the row's
|
|
74
|
+
* advisory lock or having authenticated the request that triggered
|
|
75
|
+
* the transition.
|
|
76
|
+
*/
|
|
77
|
+
export async function syncArtifactStatusFromRawDocument(client, args) {
|
|
78
|
+
const mapped = STATUS_MAP[args.newRawStatus];
|
|
79
|
+
if (mapped === undefined)
|
|
80
|
+
return;
|
|
81
|
+
const lookup = await client.query(`SELECT storage_artifact_id FROM raw_documents WHERE id = $1`, [args.rawDocumentId]);
|
|
82
|
+
if (lookup.rowCount === 0)
|
|
83
|
+
return;
|
|
84
|
+
const artifactId = lookup.rows[0].storage_artifact_id;
|
|
85
|
+
if (artifactId === null)
|
|
86
|
+
return;
|
|
87
|
+
await applyArtifactTransition(client, artifactId, mapped, args.lastError);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Reconciler paired promote: flip the document to `blob_available`
|
|
91
|
+
* AND sync the artifact in one transaction. Two-row drift is
|
|
92
|
+
* impossible — either both rows commit or both roll back.
|
|
93
|
+
*/
|
|
94
|
+
export async function promoteAndSyncArtifact(pool, args) {
|
|
95
|
+
const client = await pool.connect();
|
|
96
|
+
try {
|
|
97
|
+
await client.query('BEGIN');
|
|
98
|
+
const rowCount = await promoteToAvailableWithClient(client, args);
|
|
99
|
+
if (rowCount === 0) {
|
|
100
|
+
await client.query('ROLLBACK');
|
|
101
|
+
return 0;
|
|
102
|
+
}
|
|
103
|
+
await syncArtifactStatusFromRawDocument(client, {
|
|
104
|
+
rawDocumentId: args.rowId,
|
|
105
|
+
newRawStatus: 'blob_available',
|
|
106
|
+
});
|
|
107
|
+
await client.query('COMMIT');
|
|
108
|
+
return rowCount;
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
await client.query('ROLLBACK').catch(() => undefined);
|
|
112
|
+
throw err;
|
|
113
|
+
}
|
|
114
|
+
finally {
|
|
115
|
+
client.release();
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Reconciler paired archival-fail: flip the document to
|
|
120
|
+
* `blob_archival_failed` AND sync the artifact (with the
|
|
121
|
+
* `last_error` envelope) in one transaction.
|
|
122
|
+
*/
|
|
123
|
+
export async function markArchivalFailedAndSyncArtifact(pool, args) {
|
|
124
|
+
const client = await pool.connect();
|
|
125
|
+
try {
|
|
126
|
+
await client.query('BEGIN');
|
|
127
|
+
const rowCount = await markArchivalFailedWithClient(client, args);
|
|
128
|
+
if (rowCount === 0) {
|
|
129
|
+
await client.query('ROLLBACK');
|
|
130
|
+
return 0;
|
|
131
|
+
}
|
|
132
|
+
await syncArtifactStatusFromRawDocument(client, {
|
|
133
|
+
rawDocumentId: args.rowId,
|
|
134
|
+
newRawStatus: 'blob_archival_failed',
|
|
135
|
+
lastError: args.lastError,
|
|
136
|
+
});
|
|
137
|
+
await client.query('COMMIT');
|
|
138
|
+
return rowCount;
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
await client.query('ROLLBACK').catch(() => undefined);
|
|
142
|
+
throw err;
|
|
143
|
+
}
|
|
144
|
+
finally {
|
|
145
|
+
client.release();
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Document-keyed paired marker for the cleanup path. Each blob
|
|
150
|
+
* cleanup carries its `rawDocumentId` (see
|
|
151
|
+
* `ManagedBlobRefRow.rawDocumentId`) so the sync never needs to
|
|
152
|
+
* disambiguate by URI. The raw_documents UPDATE is owner-scoped;
|
|
153
|
+
* if zero rows match (cross-user mismatch or already-terminal),
|
|
154
|
+
* the artifact sync is skipped — preventing a mismatched caller
|
|
155
|
+
* from flipping another user's artifact.
|
|
156
|
+
*/
|
|
157
|
+
export async function markCleanupSuccessAndSyncArtifact(pool, args) {
|
|
158
|
+
const newRawStatus = args.semantics === 'deleted' ? 'blob_deleted' : 'blob_tombstoned';
|
|
159
|
+
const client = await pool.connect();
|
|
160
|
+
try {
|
|
161
|
+
await client.query('BEGIN');
|
|
162
|
+
const result = await client.query(`UPDATE raw_documents
|
|
163
|
+
SET raw_storage_status = $1, updated_at = NOW()
|
|
164
|
+
WHERE user_id = $2 AND id = $3`, [newRawStatus, args.userId, args.rawDocumentId]);
|
|
165
|
+
if ((result.rowCount ?? 0) === 0) {
|
|
166
|
+
// Cross-user mismatch or row missing — leave the artifact
|
|
167
|
+
// untouched. The link belongs to another user (or no row);
|
|
168
|
+
// mirroring through id-only would clobber theirs.
|
|
169
|
+
await client.query('ROLLBACK');
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
await syncArtifactStatusFromRawDocument(client, {
|
|
173
|
+
rawDocumentId: args.rawDocumentId,
|
|
174
|
+
newRawStatus,
|
|
175
|
+
});
|
|
176
|
+
await client.query('COMMIT');
|
|
177
|
+
}
|
|
178
|
+
catch (err) {
|
|
179
|
+
await client.query('ROLLBACK').catch(() => undefined);
|
|
180
|
+
throw err;
|
|
181
|
+
}
|
|
182
|
+
finally {
|
|
183
|
+
client.release();
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Document-keyed paired failure marker. Mirrors
|
|
188
|
+
* `markCleanupSuccessAndSyncArtifact` but for the failure branch
|
|
189
|
+
* (`raw_storage_failed`). Same owner-scope gating.
|
|
190
|
+
*
|
|
191
|
+
* Retry-friendly: the UPDATE matches on `(user_id, id)` only — a row
|
|
192
|
+
* that is ALREADY `raw_storage_failed` is re-marked so a fresh
|
|
193
|
+
* provider error replaces the prior envelope on both
|
|
194
|
+
* `raw_documents.last_error` AND the linked
|
|
195
|
+
* `storage_artifacts.last_error`. Mirrors the failure-marker pattern
|
|
196
|
+
* elsewhere in the codebase, where retries land the newest, most-
|
|
197
|
+
* useful error rather than discarding it. Cross-user mismatches
|
|
198
|
+
* still roll back via the owner-scoped WHERE.
|
|
199
|
+
*/
|
|
200
|
+
export async function markCleanupFailedAndSyncArtifact(pool, args) {
|
|
201
|
+
const client = await pool.connect();
|
|
202
|
+
try {
|
|
203
|
+
await client.query('BEGIN');
|
|
204
|
+
const hasError = args.lastError !== undefined;
|
|
205
|
+
const result = await client.query(`UPDATE raw_documents
|
|
206
|
+
SET raw_storage_status = 'raw_storage_failed',
|
|
207
|
+
last_error = CASE WHEN $3::boolean THEN $4::jsonb ELSE last_error END,
|
|
208
|
+
updated_at = NOW()
|
|
209
|
+
WHERE user_id = $1 AND id = $2`, [
|
|
210
|
+
args.userId,
|
|
211
|
+
args.rawDocumentId,
|
|
212
|
+
hasError,
|
|
213
|
+
hasError ? JSON.stringify(args.lastError) : null,
|
|
214
|
+
]);
|
|
215
|
+
if ((result.rowCount ?? 0) === 0) {
|
|
216
|
+
await client.query('ROLLBACK');
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
await syncArtifactStatusFromRawDocument(client, {
|
|
220
|
+
rawDocumentId: args.rawDocumentId,
|
|
221
|
+
newRawStatus: 'raw_storage_failed',
|
|
222
|
+
lastError: args.lastError,
|
|
223
|
+
});
|
|
224
|
+
await client.query('COMMIT');
|
|
225
|
+
}
|
|
226
|
+
catch (err) {
|
|
227
|
+
await client.query('ROLLBACK').catch(() => undefined);
|
|
228
|
+
throw err;
|
|
229
|
+
}
|
|
230
|
+
finally {
|
|
231
|
+
client.release();
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
async function applyArtifactTransition(client, artifactId, mapped, lastError) {
|
|
235
|
+
if (mapped === 'deleted') {
|
|
236
|
+
await client.query(`UPDATE storage_artifacts
|
|
237
|
+
SET status = 'deleted',
|
|
238
|
+
deleted_at = COALESCE(deleted_at, NOW()),
|
|
239
|
+
delete_attempt_id = NULL,
|
|
240
|
+
updated_at = NOW()
|
|
241
|
+
WHERE id = $1`, [artifactId]);
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
if (mapped === 'failed') {
|
|
245
|
+
await client.query(`UPDATE storage_artifacts
|
|
246
|
+
SET status = 'failed',
|
|
247
|
+
last_error = COALESCE($2::jsonb, last_error),
|
|
248
|
+
updated_at = NOW()
|
|
249
|
+
WHERE id = $1`, [artifactId, lastError === undefined ? null : JSON.stringify(lastError)]);
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
// Success transitions clear last_error so a retry path doesn't
|
|
253
|
+
// surface a stale envelope alongside `status='available'`.
|
|
254
|
+
await client.query(`UPDATE storage_artifacts
|
|
255
|
+
SET status = $2,
|
|
256
|
+
last_error = NULL,
|
|
257
|
+
updated_at = NOW()
|
|
258
|
+
WHERE id = $1`, [artifactId, mapped]);
|
|
259
|
+
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase-3 managed-blob helpers for the document pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Split out of `raw-document-repository.ts` to keep that module under
|
|
5
|
+
* the workspace 400-LOC cap as the managed-blob surface grew. This
|
|
6
|
+
* module owns every read/update that touches the
|
|
7
|
+
* `storage_mode='managed_blob'` slice of `raw_documents`:
|
|
8
|
+
*
|
|
9
|
+
* - Lookups for blob URIs that need cleanup
|
|
10
|
+
* (`listManagedBlobs*`, `listOrphanedManagedBlobs*`).
|
|
11
|
+
* - The post-upload row-promotion helper
|
|
12
|
+
* (`updateRawDocumentBlobStorageWithClient`).
|
|
13
|
+
*
|
|
14
|
+
* Cleanup state-machine markers used to live here as URI-keyed
|
|
15
|
+
* updates; the paired artifact-sync implementation replaced them with the id-keyed paired helpers
|
|
16
|
+
* in `db/raw-doc-artifact-sync.ts`.
|
|
17
|
+
*
|
|
18
|
+
* The base registry CRUD (insert / list / get / soft-delete /
|
|
19
|
+
* source-site lookups) and the indexer hash setter stay in
|
|
20
|
+
* `raw-document-repository.ts` so this module can stay tightly
|
|
21
|
+
* scoped to the managed-blob lifecycle.
|
|
22
|
+
*
|
|
23
|
+
* No row-mapping helpers are needed here — every function returns
|
|
24
|
+
* `(storage_provider, storage_uri)` tuples or executes UPDATEs, so
|
|
25
|
+
* the snake_case → camelCase mapping the registry CRUD needs lives
|
|
26
|
+
* with the registry helpers, not here.
|
|
27
|
+
*/
|
|
28
|
+
import pg from 'pg';
|
|
29
|
+
/** Shape returned by every managed-blob lookup in this module.
|
|
30
|
+
* `rawDocumentId` lets the cleanup loop sync the linked
|
|
31
|
+
* `storage_artifacts` row by id — URIs are not globally unique
|
|
32
|
+
* across documents, so id-keyed sync removes the ambiguity.
|
|
33
|
+
* `rawStorageMetadata` carries the provider-specific sidecar so
|
|
34
|
+
* `cleanupManagedBlobs` can pass it as opaque hints to
|
|
35
|
+
* `RawContentStore.delete` (e.g. the Filecoin adapter uses
|
|
36
|
+
* `filecoin.copies[].piece_id` + `data_set_id` to delete a
|
|
37
|
+
* freshly-uploaded piece without relying on the SDK's
|
|
38
|
+
* CID→active-piece lookup). Non-Filecoin adapters ignore it. */
|
|
39
|
+
export interface ManagedBlobRefRow {
|
|
40
|
+
rawDocumentId: string;
|
|
41
|
+
storageProvider: string;
|
|
42
|
+
storageUri: string;
|
|
43
|
+
rawStorageMetadata: Record<string, unknown>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* `(storage_provider, storage_uri)` tuples for the *active* managed-blob
|
|
47
|
+
* row of a single document. Caller hands the result to
|
|
48
|
+
* `cleanupManagedBlobs()` *after* the DB transaction commits. Active-only
|
|
49
|
+
* (deleted_at IS NULL) — soft-deleted rows are skipped to avoid
|
|
50
|
+
* double-deleting blobs after a prior cascade.
|
|
51
|
+
*/
|
|
52
|
+
export declare function listManagedBlobsForDocumentWithClient(client: pg.Pool | pg.PoolClient, userId: string, documentId: string): Promise<ManagedBlobRefRow[]>;
|
|
53
|
+
/**
|
|
54
|
+
* Source-scoped sibling of `listManagedBlobsForDocumentWithClient`.
|
|
55
|
+
* Used by `deleteBySource` so source-reset can hand a complete blob
|
|
56
|
+
* list to the post-commit cleanup pass.
|
|
57
|
+
*/
|
|
58
|
+
export declare function listManagedBlobsBySourceWithClient(client: pg.PoolClient, userId: string, sourceSite: string): Promise<ManagedBlobRefRow[]>;
|
|
59
|
+
/**
|
|
60
|
+
* Active managed-blob URIs for a user (`userId` set) or globally
|
|
61
|
+
* (`userId` undefined). Used by `deleteAll`'s pre-hard-delete cleanup
|
|
62
|
+
* hook so the wipe can flush the blob store before dropping the rows.
|
|
63
|
+
*/
|
|
64
|
+
export declare function listManagedBlobsForUser(pool: pg.Pool, userId?: string): Promise<ManagedBlobRefRow[]>;
|
|
65
|
+
/**
|
|
66
|
+
* Retry-safe lookup: managed-blob URIs that need cleanup *for a
|
|
67
|
+
* soft-deleted document* whose prior cleanup pass failed. Consulted by
|
|
68
|
+
* a retry of `DELETE /v1/documents/:id` so it can re-attempt
|
|
69
|
+
* `store.delete()` on the orphan instead of returning
|
|
70
|
+
* `already_deleted=true` while the blob is still present.
|
|
71
|
+
*
|
|
72
|
+
* Filters: `deleted_at IS NOT NULL` (only soft-deleted rows), and
|
|
73
|
+
* `raw_storage_status = 'raw_storage_failed'` (only the rows whose
|
|
74
|
+
* cleanup failed — `blob_deleted` rows are already clean).
|
|
75
|
+
*/
|
|
76
|
+
export declare function listOrphanedManagedBlobsForDocument(pool: pg.Pool, userId: string, documentId: string): Promise<ManagedBlobRefRow[]>;
|
|
77
|
+
/**
|
|
78
|
+
* Source-scoped sibling of `listOrphanedManagedBlobsForDocument`. Used
|
|
79
|
+
* by the retry path of `POST /v1/memories/reset-source` so a second
|
|
80
|
+
* reset-by-source after a partially-failed cleanup can still find the
|
|
81
|
+
* orphan blobs to retry on.
|
|
82
|
+
*/
|
|
83
|
+
export declare function listOrphanedManagedBlobsBySource(pool: pg.Pool, userId: string, sourceSite: string): Promise<ManagedBlobRefRow[]>;
|
|
84
|
+
/**
|
|
85
|
+
* the claim step: short-tx slot claim. Writes `raw_storage_status =
|
|
86
|
+
* 'blob_uploading'` + claim_id + claimed_at + plaintext content_hash +
|
|
87
|
+
* plaintext size_bytes.
|
|
88
|
+
*
|
|
89
|
+
* `clearDurableUri` (rev-fix HIGH 2) selects between the two
|
|
90
|
+
* recovery paths:
|
|
91
|
+
* - `true` (reclaimAndUpload): the row may carry a stale URI /
|
|
92
|
+
* provider / metadata from a prior failed attempt — clear them
|
|
93
|
+
* so a crash before the durable URI-write step cannot leave a finalize-recovery
|
|
94
|
+
* window pointing at the old bytes. `raw_storage_pending_since`
|
|
95
|
+
* is cleared too (the row is leaving the pending state).
|
|
96
|
+
* - `false` (finalize-recovery): preserve `storage_uri`,
|
|
97
|
+
* `storage_provider`, and `raw_storage_metadata`. the finalization step alone
|
|
98
|
+
* promotes the row; β + β2 are skipped because the bytes are
|
|
99
|
+
* already durable on the provider.
|
|
100
|
+
*/
|
|
101
|
+
export declare function claimUploadSlotWithClient(client: pg.PoolClient, args: {
|
|
102
|
+
userId: string;
|
|
103
|
+
documentId: string;
|
|
104
|
+
claimId: string;
|
|
105
|
+
contentHash: string;
|
|
106
|
+
sizeBytes: number;
|
|
107
|
+
clearDurableUri: boolean;
|
|
108
|
+
}): Promise<number>;
|
|
109
|
+
/**
|
|
110
|
+
* the durable URI-write step: short-tx durable URI record. Writes storage_mode,
|
|
111
|
+
* storage_uri, storage_provider, raw_storage_metadata. Status STAYS
|
|
112
|
+
* `blob_uploading` — the finalization step flips it. Guarded by claim_id so a
|
|
113
|
+
* stale claim's β2 cannot clobber a row another worker has since
|
|
114
|
+
* reclaimed. Returns rowCount; caller compensates with a delete on 0.
|
|
115
|
+
*/
|
|
116
|
+
export declare function recordUploadResultWithClient(client: pg.PoolClient | pg.Pool, args: {
|
|
117
|
+
userId: string;
|
|
118
|
+
documentId: string;
|
|
119
|
+
claimId: string;
|
|
120
|
+
storageUri: string;
|
|
121
|
+
storageProvider: string;
|
|
122
|
+
rawStorageMetadata: Record<string, unknown>;
|
|
123
|
+
}): Promise<number>;
|
|
124
|
+
/**
|
|
125
|
+
* the finalization step: compare-and-set status flip. Writes the final
|
|
126
|
+
* raw_storage_status, sets pending_since when entering blob_pending,
|
|
127
|
+
* clears the claim, and layer-scopes the last_error clear (drops
|
|
128
|
+
* raw_storage envelopes only). Guarded on claim_id + storage_uri NOT
|
|
129
|
+
* NULL. Returns rowCount.
|
|
130
|
+
*/
|
|
131
|
+
export declare function finalizeUploadStatusWithClient(client: pg.PoolClient | pg.Pool, args: {
|
|
132
|
+
userId: string;
|
|
133
|
+
documentId: string;
|
|
134
|
+
claimId: string;
|
|
135
|
+
finalStatus: 'blob_stored' | 'blob_pending' | 'blob_available';
|
|
136
|
+
}): Promise<number>;
|
|
137
|
+
/**
|
|
138
|
+
* the provider-write step failure-path: clear an active claim and flip the row to
|
|
139
|
+
* raw_storage_failed with a sanitized last_error envelope. Guarded
|
|
140
|
+
* by claim_id so a stale claim's failure marker cannot overwrite a
|
|
141
|
+
* subsequent successful retry. Returns rowCount.
|
|
142
|
+
*/
|
|
143
|
+
export declare function failClaimedUploadWithClient(client: pg.PoolClient | pg.Pool, args: {
|
|
144
|
+
userId: string;
|
|
145
|
+
documentId: string;
|
|
146
|
+
claimId: string;
|
|
147
|
+
lastError: Record<string, unknown>;
|
|
148
|
+
}): Promise<number>;
|