@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,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LLM provider abstraction for chat completions.
|
|
3
|
+
* Supports OpenAI, Ollama, and any OpenAI-compatible API (LM Studio, etc).
|
|
4
|
+
* Provider is selected via PROVIDER_LLM env var.
|
|
5
|
+
*/
|
|
6
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
7
|
+
import OpenAI from 'openai';
|
|
8
|
+
import { Agent as UndiciAgent } from 'undici';
|
|
9
|
+
import { retryOnRateLimit } from './api-retry.js';
|
|
10
|
+
import { estimateCostUsd, getCostStage, summarizeUsage, writeCostEvent, } from './cost-telemetry.js';
|
|
11
|
+
import { ClaudeCodeLLM } from './claude-code-llm.js';
|
|
12
|
+
let llmConfig = null;
|
|
13
|
+
/** Bind the LLM module's config. Called once by the composition root. */
|
|
14
|
+
export function initLlm(config) {
|
|
15
|
+
llmConfig = config;
|
|
16
|
+
provider = null;
|
|
17
|
+
providerKey = '';
|
|
18
|
+
}
|
|
19
|
+
function requireConfig() {
|
|
20
|
+
if (!llmConfig) {
|
|
21
|
+
throw new Error('llm.ts: initLlm(config) must be called at composition-root time before chat. See runtime-container.ts.');
|
|
22
|
+
}
|
|
23
|
+
return llmConfig;
|
|
24
|
+
}
|
|
25
|
+
/** Extended-timeout dispatcher for slow local models (e.g. qwen3 thinking mode). */
|
|
26
|
+
const ollamaDispatcher = new UndiciAgent({ headersTimeout: 300_000, bodyTimeout: 300_000 });
|
|
27
|
+
function sanitizeTransportContent(content, aggressive = false) {
|
|
28
|
+
const normalized = content.normalize('NFKC');
|
|
29
|
+
const cleaned = Array.from(normalized).map((char) => {
|
|
30
|
+
const codePoint = char.codePointAt(0) ?? 0;
|
|
31
|
+
const isAllowedWhitespace = char === '\n' || char === '\r' || char === '\t';
|
|
32
|
+
const isControl = codePoint < 0x20 && !isAllowedWhitespace;
|
|
33
|
+
const isDelete = codePoint === 0x7f;
|
|
34
|
+
if (isControl || isDelete)
|
|
35
|
+
return ' ';
|
|
36
|
+
if (!aggressive)
|
|
37
|
+
return char;
|
|
38
|
+
if (codePoint >= 0x20 && codePoint <= 0x7e)
|
|
39
|
+
return char;
|
|
40
|
+
if (/\p{Letter}|\p{Number}/u.test(char))
|
|
41
|
+
return char;
|
|
42
|
+
return ' ';
|
|
43
|
+
}).join('');
|
|
44
|
+
return cleaned.replace(/[ \t]+/g, ' ').replace(/\n{3,}/g, '\n\n').trim();
|
|
45
|
+
}
|
|
46
|
+
function sanitizeMessages(messages, aggressive = false) {
|
|
47
|
+
return messages.map((message) => ({
|
|
48
|
+
...message,
|
|
49
|
+
content: sanitizeTransportContent(message.content, aggressive),
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
function isJsonBodyParseError(error) {
|
|
53
|
+
if (!(error instanceof Error))
|
|
54
|
+
return false;
|
|
55
|
+
return error.message.includes('parse the JSON body of your request');
|
|
56
|
+
}
|
|
57
|
+
/** OpenAI and any OpenAI-compatible API (LM Studio at localhost:1234/v1, etc). */
|
|
58
|
+
class OpenAICompatibleLLM {
|
|
59
|
+
client;
|
|
60
|
+
model;
|
|
61
|
+
constructor(apiKey, model, baseURL) {
|
|
62
|
+
this.client = new OpenAI({ apiKey, baseURL });
|
|
63
|
+
this.model = model;
|
|
64
|
+
}
|
|
65
|
+
async chat(messages, options = {}) {
|
|
66
|
+
try {
|
|
67
|
+
return await this.executeOpenAIRequest(messages, options, false);
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
if (!isJsonBodyParseError(error))
|
|
71
|
+
throw error;
|
|
72
|
+
return this.executeOpenAIRequest(messages, options, true);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/** Execute a single OpenAI-compatible request with optional aggressive sanitization. */
|
|
76
|
+
async executeOpenAIRequest(messages, options, aggressiveSanitize) {
|
|
77
|
+
const effectiveSeed = options.seed ?? requireConfig().llmSeed;
|
|
78
|
+
const request = () => this.client.chat.completions.create({
|
|
79
|
+
model: this.model,
|
|
80
|
+
messages: sanitizeMessages(messages, aggressiveSanitize),
|
|
81
|
+
temperature: options.temperature ?? 0,
|
|
82
|
+
max_tokens: options.maxTokens,
|
|
83
|
+
...(options.jsonMode ? { response_format: { type: 'json_object' } } : {}),
|
|
84
|
+
...(effectiveSeed !== undefined ? { seed: effectiveSeed } : {}),
|
|
85
|
+
});
|
|
86
|
+
const started = performance.now();
|
|
87
|
+
const response = await retryOnRateLimit(request);
|
|
88
|
+
recordOpenAICost(this.model, response.usage, started);
|
|
89
|
+
return response.choices[0].message.content ?? '';
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/** Record cost telemetry for an OpenAI-compatible response. */
|
|
93
|
+
function recordOpenAICost(model, responseUsage, started) {
|
|
94
|
+
const config = requireConfig();
|
|
95
|
+
const usage = summarizeUsage(responseUsage?.prompt_tokens ?? null, responseUsage?.completion_tokens ?? null, responseUsage?.total_tokens ?? null);
|
|
96
|
+
writeCostEvent({
|
|
97
|
+
stage: getCostStage(), provider: config.llmProvider, model, requestKind: 'chat',
|
|
98
|
+
durationMs: performance.now() - started, cacheHit: false,
|
|
99
|
+
inputTokens: usage.inputTokens ?? null, outputTokens: usage.outputTokens ?? null,
|
|
100
|
+
totalTokens: usage.totalTokens ?? null, estimatedCostUsd: estimateCostUsd(config.llmProvider, model, usage),
|
|
101
|
+
}, config);
|
|
102
|
+
}
|
|
103
|
+
/** Ollama via its native HTTP API at localhost:11434. */
|
|
104
|
+
class OllamaLLM {
|
|
105
|
+
baseUrl;
|
|
106
|
+
model;
|
|
107
|
+
constructor(model, baseUrl = 'http://localhost:11434') {
|
|
108
|
+
this.baseUrl = baseUrl;
|
|
109
|
+
this.model = model;
|
|
110
|
+
}
|
|
111
|
+
async chat(messages, options = {}) {
|
|
112
|
+
const config = requireConfig();
|
|
113
|
+
const effectiveSeed = options.seed ?? config.llmSeed;
|
|
114
|
+
const body = {
|
|
115
|
+
model: this.model,
|
|
116
|
+
messages,
|
|
117
|
+
stream: false,
|
|
118
|
+
think: false,
|
|
119
|
+
options: {
|
|
120
|
+
temperature: options.temperature ?? 0,
|
|
121
|
+
...(options.maxTokens ? { num_predict: options.maxTokens } : {}),
|
|
122
|
+
...(effectiveSeed !== undefined ? { seed: effectiveSeed } : {}),
|
|
123
|
+
},
|
|
124
|
+
...(options.jsonMode ? { format: 'json' } : {}),
|
|
125
|
+
};
|
|
126
|
+
const started = performance.now();
|
|
127
|
+
const response = await fetch(`${this.baseUrl}/api/chat`, {
|
|
128
|
+
method: 'POST',
|
|
129
|
+
headers: { 'Content-Type': 'application/json' },
|
|
130
|
+
body: JSON.stringify(body),
|
|
131
|
+
signal: AbortSignal.timeout(300_000),
|
|
132
|
+
// @ts-expect-error -- Node.js fetch supports undici dispatcher option
|
|
133
|
+
dispatcher: ollamaDispatcher,
|
|
134
|
+
});
|
|
135
|
+
if (!response.ok) {
|
|
136
|
+
throw new Error(`Ollama chat failed (${response.status}): ${await response.text()}`);
|
|
137
|
+
}
|
|
138
|
+
const data = await response.json();
|
|
139
|
+
const usage = summarizeUsage(data.prompt_eval_count ?? null, data.eval_count ?? null, null);
|
|
140
|
+
writeCostEvent({ stage: getCostStage(), provider: config.llmProvider, model: this.model, requestKind: 'chat', durationMs: performance.now() - started, cacheHit: false, inputTokens: usage.inputTokens ?? null, outputTokens: usage.outputTokens ?? null, totalTokens: usage.totalTokens ?? null, estimatedCostUsd: estimateCostUsd(config.llmProvider, this.model, usage) }, config);
|
|
141
|
+
const content = stripThinkingTags(data.message.content);
|
|
142
|
+
// Reasoning models (qwen3) put output in 'thinking' when content is empty.
|
|
143
|
+
if (!content && data.message.thinking) {
|
|
144
|
+
return stripThinkingTags(data.message.thinking);
|
|
145
|
+
}
|
|
146
|
+
return content;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/** Strip <think>...</think> tags that reasoning models (e.g. qwen3) emit. */
|
|
150
|
+
function stripThinkingTags(text) {
|
|
151
|
+
return text.replace(/<think>[\s\S]*?<\/think>\s*/g, '').trim();
|
|
152
|
+
}
|
|
153
|
+
/** Anthropic Claude API. */
|
|
154
|
+
class AnthropicLLM {
|
|
155
|
+
client;
|
|
156
|
+
model;
|
|
157
|
+
constructor(apiKey, model) {
|
|
158
|
+
this.client = new Anthropic({ apiKey });
|
|
159
|
+
this.model = model;
|
|
160
|
+
}
|
|
161
|
+
async chat(messages, options = {}) {
|
|
162
|
+
const config = requireConfig();
|
|
163
|
+
const systemMsg = messages.find((m) => m.role === 'system');
|
|
164
|
+
const nonSystemMsgs = messages
|
|
165
|
+
.filter((m) => m.role !== 'system')
|
|
166
|
+
.map((m) => ({ role: m.role, content: m.content }));
|
|
167
|
+
const request = () => this.client.messages.create({
|
|
168
|
+
model: this.model,
|
|
169
|
+
max_tokens: options.maxTokens ?? 1024,
|
|
170
|
+
temperature: options.temperature ?? 0,
|
|
171
|
+
...(systemMsg ? { system: systemMsg.content } : {}),
|
|
172
|
+
messages: nonSystemMsgs,
|
|
173
|
+
});
|
|
174
|
+
const started = performance.now();
|
|
175
|
+
const response = await retryOnRateLimit(request);
|
|
176
|
+
const usage = summarizeUsage(response.usage?.input_tokens ?? null, response.usage?.output_tokens ?? null, null);
|
|
177
|
+
writeCostEvent({ stage: getCostStage(), provider: config.llmProvider, model: this.model, requestKind: 'chat', durationMs: performance.now() - started, cacheHit: false, inputTokens: usage.inputTokens ?? null, outputTokens: usage.outputTokens ?? null, totalTokens: usage.totalTokens ?? null, estimatedCostUsd: estimateCostUsd(config.llmProvider, this.model, usage) }, config);
|
|
178
|
+
const textBlock = response.content.find((b) => b.type === 'text');
|
|
179
|
+
const raw = textBlock?.text ?? '';
|
|
180
|
+
// Strip <thinking> tags that some models produce in their text output
|
|
181
|
+
return raw.replace(/<thinking>[\s\S]*?<\/thinking>\s*/g, '').trim();
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/** Create LLM provider from config. */
|
|
185
|
+
export function createLLMProvider() {
|
|
186
|
+
const config = requireConfig();
|
|
187
|
+
switch (config.llmProvider) {
|
|
188
|
+
case 'openai':
|
|
189
|
+
return new OpenAICompatibleLLM(config.openaiApiKey, config.llmModel);
|
|
190
|
+
case 'ollama':
|
|
191
|
+
return new OllamaLLM(config.llmModel, config.ollamaBaseUrl);
|
|
192
|
+
case 'groq':
|
|
193
|
+
return new OpenAICompatibleLLM(config.groqApiKey ?? '', config.llmModel, 'https://api.groq.com/openai/v1');
|
|
194
|
+
case 'anthropic':
|
|
195
|
+
return new AnthropicLLM(config.anthropicApiKey ?? '', config.llmModel);
|
|
196
|
+
case 'google-genai':
|
|
197
|
+
return new OpenAICompatibleLLM(config.googleApiKey ?? '', config.llmModel, 'https://generativelanguage.googleapis.com/v1beta/openai/');
|
|
198
|
+
case 'claude-code':
|
|
199
|
+
return new ClaudeCodeLLM({
|
|
200
|
+
llmProvider: config.llmProvider,
|
|
201
|
+
llmModel: config.llmModel,
|
|
202
|
+
costLoggingEnabled: config.costLoggingEnabled,
|
|
203
|
+
costRunId: config.costRunId,
|
|
204
|
+
costLogDir: config.costLogDir,
|
|
205
|
+
});
|
|
206
|
+
case 'openai-compatible':
|
|
207
|
+
return new OpenAICompatibleLLM(config.llmApiKey ?? config.openaiApiKey, config.llmModel, config.llmApiUrl);
|
|
208
|
+
default:
|
|
209
|
+
throw new Error(`Unknown LLM provider: ${config.llmProvider}`);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
let provider = null;
|
|
213
|
+
let providerKey = '';
|
|
214
|
+
function getProviderKey() {
|
|
215
|
+
const config = requireConfig();
|
|
216
|
+
return [
|
|
217
|
+
config.llmProvider,
|
|
218
|
+
config.llmModel,
|
|
219
|
+
config.llmApiUrl ?? '',
|
|
220
|
+
config.ollamaBaseUrl,
|
|
221
|
+
].join('|');
|
|
222
|
+
}
|
|
223
|
+
function getProvider() {
|
|
224
|
+
const nextKey = getProviderKey();
|
|
225
|
+
if (!provider || nextKey !== providerKey) {
|
|
226
|
+
provider = createLLMProvider();
|
|
227
|
+
providerKey = nextKey;
|
|
228
|
+
}
|
|
229
|
+
return provider;
|
|
230
|
+
}
|
|
231
|
+
/** Singleton-like LLM accessor that refreshes when runtime config changes. */
|
|
232
|
+
export const llm = {
|
|
233
|
+
chat(messages, options) {
|
|
234
|
+
return getProvider().chat(messages, options);
|
|
235
|
+
},
|
|
236
|
+
};
|
|
237
|
+
/**
|
|
238
|
+
* Invoke an Anthropic model in forced tool-use mode and return the parsed
|
|
239
|
+
* tool input. Uses the module-local config (set by initLlm) for the API key.
|
|
240
|
+
*
|
|
241
|
+
* @param model - Anthropic model ID (e.g. 'claude-sonnet-4-5').
|
|
242
|
+
* @param system - System prompt.
|
|
243
|
+
* @param user - User message.
|
|
244
|
+
* @param toolSchema - Tool definition; the model is forced to call this tool.
|
|
245
|
+
* @returns Parsed tool input cast to T.
|
|
246
|
+
*/
|
|
247
|
+
export async function callAnthropicTool(model, system, user, toolSchema) {
|
|
248
|
+
const cfg = requireConfig();
|
|
249
|
+
const client = new Anthropic({ apiKey: cfg.anthropicApiKey ?? cfg.llmApiKey ?? '' });
|
|
250
|
+
const response = await client.messages.create({
|
|
251
|
+
model,
|
|
252
|
+
max_tokens: 4096,
|
|
253
|
+
system,
|
|
254
|
+
messages: [{ role: 'user', content: user }],
|
|
255
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
256
|
+
tools: [toolSchema],
|
|
257
|
+
tool_choice: { type: 'tool', name: toolSchema.name },
|
|
258
|
+
});
|
|
259
|
+
for (const block of response.content) {
|
|
260
|
+
if (block.type === 'tool_use' && block.name === toolSchema.name) {
|
|
261
|
+
return block.input;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
throw new Error(`Anthropic tool-use returned no ${toolSchema.name} block`);
|
|
265
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic projection helpers for dual-write memory cells.
|
|
3
|
+
* These helpers keep retrieval-oriented child rows aligned with the parent
|
|
4
|
+
* memory projection without adding a second LLM step yet.
|
|
5
|
+
*/
|
|
6
|
+
import type { AtomicFactProjection, FactInput, ForesightProjection } from './memory-service-types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Build the retrieval-facing atomic fact row for a parent memory.
|
|
9
|
+
* Current prototype uses one canonical fact row per stored fact; later work can
|
|
10
|
+
* expand this to multiple child facts per narrative episode.
|
|
11
|
+
*/
|
|
12
|
+
export declare function buildAtomicFactProjection(fact: FactInput, embedding: number[]): AtomicFactProjection;
|
|
13
|
+
/**
|
|
14
|
+
* Derive initial foresight rows from plan-like facts.
|
|
15
|
+
* This is intentionally conservative: only explicit plan facts are projected.
|
|
16
|
+
*/
|
|
17
|
+
export declare function buildForesightProjections(fact: FactInput, embedding: number[]): ForesightProjection[];
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic projection helpers for dual-write memory cells.
|
|
3
|
+
* These helpers keep retrieval-oriented child rows aligned with the parent
|
|
4
|
+
* memory projection without adding a second LLM step yet.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Build the retrieval-facing atomic fact row for a parent memory.
|
|
8
|
+
* Current prototype uses one canonical fact row per stored fact; later work can
|
|
9
|
+
* expand this to multiple child facts per narrative episode.
|
|
10
|
+
*/
|
|
11
|
+
export function buildAtomicFactProjection(fact, embedding) {
|
|
12
|
+
return {
|
|
13
|
+
factText: fact.fact,
|
|
14
|
+
embedding,
|
|
15
|
+
factType: fact.type,
|
|
16
|
+
importance: fact.importance,
|
|
17
|
+
keywords: fact.keywords,
|
|
18
|
+
metadata: {
|
|
19
|
+
headline: fact.headline,
|
|
20
|
+
entities: fact.entities,
|
|
21
|
+
relations: fact.relations,
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Derive initial foresight rows from plan-like facts.
|
|
27
|
+
* This is intentionally conservative: only explicit plan facts are projected.
|
|
28
|
+
*/
|
|
29
|
+
export function buildForesightProjections(fact, embedding) {
|
|
30
|
+
if (fact.type !== 'plan')
|
|
31
|
+
return [];
|
|
32
|
+
return [{
|
|
33
|
+
content: fact.fact,
|
|
34
|
+
embedding,
|
|
35
|
+
foresightType: 'plan',
|
|
36
|
+
metadata: {
|
|
37
|
+
headline: fact.headline,
|
|
38
|
+
keywords: fact.keywords,
|
|
39
|
+
},
|
|
40
|
+
}];
|
|
41
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AUDN (Add/Update/Delete/Noop) decision resolution and mutation execution.
|
|
3
|
+
* Handles fast-path AUDN, deferred AUDN, conflict candidate discovery,
|
|
4
|
+
* and the full mutation pipeline (update, supersede, delete canonical facts).
|
|
5
|
+
*/
|
|
6
|
+
import { type ClaimSlotInput } from '../db/claim-repository.js';
|
|
7
|
+
import { type AUDNDecision } from './extraction.js';
|
|
8
|
+
import { type CandidateMemory } from './conflict-policy.js';
|
|
9
|
+
import type { AudnFactContext, FactInput, FactResult, IngestTraceCandidate, MemoryServiceDeps, Outcome } from './memory-service-types.js';
|
|
10
|
+
export interface AudnTraceContext {
|
|
11
|
+
fact: FactInput;
|
|
12
|
+
logicalTimestamp?: Date;
|
|
13
|
+
writeSecurity: {
|
|
14
|
+
allowed: boolean;
|
|
15
|
+
blockedBy: string | null;
|
|
16
|
+
trust: {
|
|
17
|
+
score: number;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
entropyResult?: {
|
|
21
|
+
score: number;
|
|
22
|
+
entityNovelty: number;
|
|
23
|
+
semanticNovelty: number;
|
|
24
|
+
accepted: boolean;
|
|
25
|
+
} | null;
|
|
26
|
+
candidates: IngestTraceCandidate[];
|
|
27
|
+
}
|
|
28
|
+
/** Find conflict candidates, merge slot-aware candidates, and filter out superseded. */
|
|
29
|
+
export declare function findFilteredCandidates(deps: MemoryServiceDeps, userId: string, fact: FactInput, embedding: number[], claimSlot: ClaimSlotInput | null, supersededTargets: Set<string>): Promise<CandidateMemory[]>;
|
|
30
|
+
/** Resolve AUDN decision (fast/deferred/full) and execute it. */
|
|
31
|
+
export declare function resolveAndExecuteAudn(deps: MemoryServiceDeps, userId: string, fact: FactInput, embedding: number[], sourceSite: string, sourceUrl: string, episodeId: string, trustScore: number, claimSlot: ClaimSlotInput | null, logicalTimestamp: Date | undefined, filteredCandidates: CandidateMemory[], supersededTargets: Set<string>, workspace?: import('../db/repository-types.js').WorkspaceContext, traceContext?: AudnTraceContext): Promise<FactResult>;
|
|
32
|
+
/**
|
|
33
|
+
* Execute an AUDN decision via the standard ingest seam.
|
|
34
|
+
*
|
|
35
|
+
* Exposed (renamed from the legacy private `executeDecision`) so that the
|
|
36
|
+
* TBC executor in `tbc-execution.ts` can route Affirm/Update/Retract/
|
|
37
|
+
* Supersede through the same mutation path AUDN uses today, keeping the
|
|
38
|
+
* fail-closed semantics in place.
|
|
39
|
+
*/
|
|
40
|
+
export declare function executeAudnDecision(deps: MemoryServiceDeps, decision: AUDNDecision, candidateIds: Set<string>, ctx: AudnFactContext): Promise<{
|
|
41
|
+
outcome: Outcome;
|
|
42
|
+
memoryId: string | null;
|
|
43
|
+
}>;
|