@anuma/sdk 6.19.1 → 6.20.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.
@@ -5940,6 +5940,15 @@ interface RecallDiagnostics {
5940
5940
  degraded: RecallDegradation[];
5941
5941
  }
5942
5942
  type RetainAction = "create" | "merge" | "update" | "skip" | "suppressed" | "supersede";
5943
+ /**
5944
+ * The consolidation LLM's decision for a candidate, when it made one. Reported
5945
+ * on {@link RetainResult.consolidation} so a host can tell an LLM `noop` (the
5946
+ * fact already exists) from a cosine auto-merge — both arrive as
5947
+ * `action: "merge"` — and can read how often the model reaches for `supersede`
5948
+ * or `update` versus `create`. A degraded fallback create (LLM error, bad
5949
+ * response) carries no decision; `onFallback` reports those.
5950
+ */
5951
+ type ConsolidationAction = "create" | "update" | "noop" | "supersede";
5943
5952
  type RetainSource = "manual" | "auto-extracted" | "capsule";
5944
5953
  /**
5945
5954
  * Why a retain returned "create" instead of applying a consolidation decision.
@@ -6079,6 +6088,33 @@ interface RetainResult {
6079
6088
  tombstoneId?: string;
6080
6089
  /** Updated proof_count after this write. 0 when nothing was written (suppressed). */
6081
6090
  proofCount: number;
6091
+ /**
6092
+ * How close the write was to the threshold that allowed it. Absent on the
6093
+ * actions that have no such score (`create`, `update`, `supersede`, `skip`).
6094
+ *
6095
+ * The two paths report DIFFERENT things and a dashboard has to know which:
6096
+ *
6097
+ * - `suppressed` — an exact cosine against the tombstone, computed in
6098
+ * `findTombstoneMatch`.
6099
+ * - `merge` — the RANKER's score for the target, not a pure cosine. The
6100
+ * cosine is what cleared `minSimilarity`, but the supersession pass may
6101
+ * then adjust it (`oldScore - delta` / `newScore + delta`) before this
6102
+ * value is read, and can in principle reorder the winner. Read it as
6103
+ * "the score the merge was chosen on", within the supersession delta of
6104
+ * the cosine — not as the raw pairwise similarity.
6105
+ */
6106
+ similarity?: number;
6107
+ /**
6108
+ * What the consolidation LLM decided for this candidate, when consolidation
6109
+ * ran — see {@link ConsolidationAction}.
6110
+ *
6111
+ * Reported for the DECISION, not for what the write ended up doing, so the
6112
+ * two can disagree and be read as such: a `merge` carrying
6113
+ * `consolidation: "create"` is the model saying "new fact" and the strict
6114
+ * cosine stage merging anyway. Absent when consolidation did not run, and
6115
+ * absent on a degraded fallback create (`onFallback` owns that signal).
6116
+ */
6117
+ consolidation?: ConsolidationAction;
6082
6118
  }
6083
6119
 
6084
6120
  /**
@@ -6305,6 +6341,61 @@ interface ExtractFactsOptions extends PortalLlmAuth {
6305
6341
  * callers may leave it unset.
6306
6342
  */
6307
6343
  onAttempt?: (attempt: PortalLlmAttempt) => void;
6344
+ /**
6345
+ * Fired once per successful completion with how many candidates the model
6346
+ * emitted (`rawCount`) and how many survived {@link validateCandidates}
6347
+ * (`validCount`) — the non-string / empty / over-cap / low-signal / bad-
6348
+ * confidence drops that until now were a bare `continue` nobody counted.
6349
+ *
6350
+ * Without it a `no-facts` turn cannot be split into "the model found nothing"
6351
+ * and "the model found things we threw away", which is the difference between
6352
+ * a prompt problem and a validator problem. Counts only; never content.
6353
+ */
6354
+ onCandidatesParsed?: (stats: {
6355
+ rawCount: number;
6356
+ validCount: number;
6357
+ }) => void;
6358
+ }
6359
+ /**
6360
+ * Where a turn's candidates went between the model's completion and the vault —
6361
+ * every stage that can drop one, as a count. Returned by {@link extractAndRetain}
6362
+ * and forwarded on `TurnCompleteEvent` so a host can emit it; nothing here is
6363
+ * content.
6364
+ *
6365
+ * Reads as a funnel: `raw ≥ valid ≥ afterRedaction ≥ aboveConfidence`, then
6366
+ * `aboveConfidence = quarantined + retained + failed`.
6367
+ * @public
6368
+ */
6369
+ interface ExtractionFunnel {
6370
+ /** Candidates in the model's completion, before any validation. */
6371
+ rawCandidateCount: number;
6372
+ /** Survivors of {@link validateCandidates} (shape, length, low-signal, confidence-is-a-number). */
6373
+ validCandidateCount: number;
6374
+ /** Survivors of PII de-anonymization (equals `validCandidateCount` when redaction is off). */
6375
+ afterRedactionCount: number;
6376
+ /** Survivors of the `minConfidence` floor — the candidates that reached the injection screen. */
6377
+ aboveConfidenceCount: number;
6378
+ /**
6379
+ * Held for review by the injection screen and SUCCESSFULLY persisted — the
6380
+ * same set as `extractAndRetain`'s `quarantined`. A screened candidate whose
6381
+ * `retain()` threw is in `failedCount` instead, never both.
6382
+ */
6383
+ quarantinedCount: number;
6384
+ /** Written through `retain()` (any disposition). */
6385
+ retainedCount: number;
6386
+ /** `retain()` threw. */
6387
+ failedCount: number;
6388
+ }
6389
+ /**
6390
+ * Wall-clock split of one {@link extractAndRetain} call. The worker's
6391
+ * `durationMs` is the sum plus the screen; these say which half is slow.
6392
+ * @public
6393
+ */
6394
+ interface ExtractionTimings {
6395
+ /** The extraction LLM call, all attempts and backoff included. */
6396
+ extractMs: number;
6397
+ /** The retain loop — embeddings, consolidation LLM calls, writes — over every candidate. */
6398
+ retainMs: number;
6308
6399
  }
6309
6400
  /**
6310
6401
  * Stage 1 — call the LLM to extract candidate facts from the recent
@@ -6422,6 +6513,12 @@ declare function extractAndRetain(messages: AutoExtractMessage[], retainCtx: Ret
6422
6513
  * the give-up, so "extraction is failing" can be reported as *why* it failed.
6423
6514
  */
6424
6515
  failure?: PortalLlmFailure;
6516
+ /** Where the candidates went, stage by stage — see {@link ExtractionFunnel}. */
6517
+ funnel: ExtractionFunnel;
6518
+ /** Extract vs. retain wall-clock — see {@link ExtractionTimings}. */
6519
+ timings: ExtractionTimings;
6520
+ /** The extraction model this call asked for (the resolved default when unset). */
6521
+ model: string;
6425
6522
  }>;
6426
6523
 
6427
6524
  /**
@@ -7485,6 +7582,16 @@ interface TurnCompleteEvent {
7485
7582
  * carries content.
7486
7583
  */
7487
7584
  failure?: PortalLlmFailure;
7585
+ /**
7586
+ * Where the candidates went between the model and the vault, as counts — the
7587
+ * drops before `retain()` that `candidates`/`results` cannot show. See
7588
+ * {@link ExtractionFunnel}.
7589
+ */
7590
+ funnel?: ExtractionFunnel;
7591
+ /** Extract vs. retain wall-clock split of `durationMs`. See {@link ExtractionTimings}. */
7592
+ timings?: ExtractionTimings;
7593
+ /** The extraction model this turn asked for. */
7594
+ model?: string;
7488
7595
  }
7489
7596
  /** @public */
7490
7597
  /**
@@ -10753,4 +10860,4 @@ declare function refreshNotionAccessToken(params: NotionRefreshTokenParams): Pro
10753
10860
  */
10754
10861
  declare function createNotionTools(getAccessToken: () => string | null, requestNotionAccess: () => Promise<string>): ToolConfig[];
10755
10862
 
10756
- export { type AutoExtractMessage, type AutoExtractor, type Budget, CHUNKS_DISCARDED_ORIGIN, type CachedChunkVectors, type CachedServerTools, Conversation as ChatConversation, Message as ChatMessage, type ChatRole, type ChunkVectorCache, type ChunkingOptions, type ConsolidationFallbackReason, type ConversationMemoryInput, ConversationMemory as ConversationMemoryModel, type ConversationMemoryOperationsContext, type CreateAutoExtractorOptions, type CreateConversationOptions, type CreateDecaySweeperOptions, type CreateMessageOptions, type CreateVaultFolderOptions, type CreateVaultMemoryOptions, type CryptoPriceClassification, type CryptoPricePreProcessorOptions, DEFAULT_CACHE_EXPIRATION_MS, DEFAULT_CHUNK_CACHE_SIZE, DEFAULT_CHUNK_OVERLAP, DEFAULT_CHUNK_SIZE, DEFAULT_DECAY_POLICY, DEFAULT_MAX_CLASSIFIER_CALLS_PER_SWEEP, DEFAULT_MIN_CHUNK_SIZE, DEFAULT_PROFILE_FACETS, DEFAULT_PROFILE_FACT_TYPE_WEIGHTS, DEFAULT_PROFILE_PROOF_ALPHA, DEFAULT_PROFILE_TREND_MULTIPLIERS, DEFAULT_VAULT_CACHE_SIZE, DatabaseManager, type DatabaseManagerLogger, type DatabaseManagerOptions, type DecayCandidateRaw, type DecayClassifier, type DecayInput, type DecayPolicy, type DecaySweepResult, type DecaySweeper, type DecayVerdict, ENTITY_FANOUT, type EmbeddedWalletSignerFn, EncryptionKeyMissingError, type ExtractFactsOptions, type ExtractOutcome, type ExtractedCandidate, type ExtractedEntity, type ExtractionCursorStore, type FactType, type FileMetadata, type FlushResult, type GetConversationsPageOptions, type GetMessagesPageOptions, type GraphTraversalOptions, HARD_DELETE_WINDOW_MS, INFERENCE_ID_HEADER, type InjectionClassifierOptions, type InjectionReason, type LazyStoredConversation, type LlmDecayClassifierOptions, type LlmNeighborRefinerOptions, type Logger, LoggerProvider, type LoggerProviderProps, MAX_HOPS, MEDIUM_TTL_MS, type ManualFactType, type MemoriesNeedingTopicExtraction, type EmbeddingOptions as MemoryEngineEmbeddingOptions, type MemoryEngineResult, type MemoryEngineSearchOptions, type MemoryExtractedEvent, type MemoryKind, type MemoryQuarantinedEvent, type MemoryToVerify, type MemoryVaultSearchOptions, type MemoryVaultToolOptions, type MemoryVerification, type MessageRedactionResult, type MessageSkeleton, NEVER_TTL_MS, NODE_BUDGET, NOTION_OAUTH_CONFIG, type NeighborRefiner, type NotionAuthUrlParams, type NotionClientRegistration, type NotionExchangeCodeParams, type NotionOAuthEndpoints, type NotionPKCEChallenge, type NotionRefreshTokenParams, type NotionTokenResponse, type NowSource, type ObservationTrend, type ObservationTrendInput, PAST_EVENT_GRACE_MS, PII_PATTERNS, PROFILE_DOC_VERSION, type PhotoIngestResult, type PhotoMediaRef, type PiiCategory, type PiiMatch, type PiiPattern, PiiRedactor, type PiiRedactorOptions, type PlatformStorage, type PortalLlmAuth, type PortalLlmFailure, type PortalLlmFailureReason, type ProfileConfigFingerprint, type ProfileDoc, type ProfileFacet, type ProfileFacetKey, type ProfileSalienceInput, type ProfileSection, type PromptPreProcessor, type PromptPreProcessorContext, type PublishedPhotoMemory, type QuantizedEmbedding, type QuarantinedMemoryInfo, QueueManager, type QueueStatus, RECALL_MAX_LIMIT, RECALL_TOOL_NAME, type RankableVaultMemory, type RankedMemory, type RankedProfileCandidate, type RecallContext, type RecallDegradation, type RecallDiagnostics, type RecallOptions, type RecallResult, type RecallToolCallbacks, type RecallToolOptions, type RecencyOptions, type RedactionResult, type ReflectOptions, type ReflectResult, type RequestEncryptionKeyOptions, RerankerUnavailableError, type ResumeStreamOptions, type ResumeStreamResult, type ResumeStreamWithStorageResult, type RetainAction, type RetainContext, type RetainOptions, type RetainResult, type RetainSource, SDK_SCHEMA_VERSION, SHORT_TTL_MS, STREAM_RESUMABLE_HEADER, type ScoreBreakdown, type ScoreProfileSalienceOptions, type ScreenResult, type ScreenedCandidate, type SearchSource, type SendMessageWithStorageArgs, type SendMessageWithStorageDetachedResult, type SendMessageWithStorageResult, type ServerToolsOptions, type ServerToolsResponse, type SignMessageFn, type StockPriceClassification, type StockPricePreProcessorOptions, type ChatCompletionUsage as StoredChatCompletionUsage, type StoredConversation, type StoredConversationMemory, type StoredMessage, type StoredMessageWithSimilarity, type StoredVaultFolder, VaultFolder as StoredVaultFolderModel, type StoredVaultMemory, VaultMemory as StoredVaultMemoryModel, StreamExpiredError, type StreamMetaEvent, type StreamResumeHandle, type SynthesizeProfileOptions, TOOL_RESULT_ORIGIN, TOPICS_EXTRACTION_VERSION, TOPIC_EXTRACTION_BATCH_SIZE, TREND_RECENT_WINDOW_DAYS, TREND_STALE_WINDOW_DAYS, type TextChunk, type TopicExtractOptions, type TopicExtractionInput, type TopicExtractionRunResult, type TopicSkipReason, type TurnCompleteEvent, type TurnSkippedEvent, type UncheckedReason, type UnverifiableReason, type UpdateVaultFolderOptions, type UpdateVaultMemoryOptions, type UseChatStorageOptions, type UseChatStorageResult, type UseCreditsOptions, type UseCreditsResult, type UseModelsOptions, type UseModelsResult, VAULT_SIZE_HOP_CAP, type VaultEmbeddingCache, type VaultFolderOperationsContext, type VaultMemoryOperationsContext, type VaultMemoryVisibility, type VaultMemoryWriter, type VaultSaveOperation, type VaultSearchResult, type VaultWriteAction, type VaultWriteInput, type VaultWriteOutcome, type VerificationSources, type VerifyMemoriesForPublishOptions, WalletPoller, type WeatherClassification, type WeatherPreProcessorOptions, type WebSearchClassification, type WebSearchPreProcessorOptions, addConversationMemoriesOp, archiveVaultMemoryOp, backfillMemoryTopicsOp, buildNotionAuthUrl, capHopsForDensity, chatStorageMigrations, chatStorageSchema, chunkAndEmbedAllMessages, chunkAndEmbedMessage, chunkText, classifyCryptoPrice, classifyCryptoPriceBatch, classifyDecay, classifyInjectionCandidates, classifyObservationTrend, classifyStockPrice, classifyStockPriceBatch, classifyWeather, classifyWeatherBatch, classifyWebSearch, classifyWebSearchBatch, clearAllEncryptionKeys, clearAllEncryptionState, clearConversationMemoriesOp, clearEncryptionKey, clearLazyTitleCache, clearServerToolsCache, consoleLogger, conversationMemoryToStored, cosineInt8, createAutoExtractor, createChunkVectorCache, createCryptoPricePreProcessor, createDecaySweeper, createLlmDecayClassifier, createLlmNeighborRefiner, createMemoryEngineTool, createMemoryVaultSearchTool, createMemoryVaultTool, createMessageSourceResolver, createNotionTools, createPlatformCursorStore, createRecallTool, createStockPricePreProcessor, createStreamingDeAnonymizer, createVaultEmbeddingCache, createVaultFolderOp, createVaultMemoriesBatchOp, createVaultMemoryOp, createWeatherPreProcessor, createWebSearchPreProcessor, decodeChunkVector, decryptConversationTitle, deleteAllVaultMemoriesForUserOp, deleteVaultFolderOp, deleteVaultMemoryOp, dequantizeEmbedding, discoverNotionOAuthEndpoints, eagerEmbedContent, embedAllMessages, embedMessage, encodeChunkVector, ensureDefaultFoldersOp, exchangeNotionCode, extractAndLinkEntitiesForMemoriesOp, extractAndRetain, extractEntitiesForMemories, extractFacts, generateConversationId, generateEmbedding, generateEmbeddings, generateNotionPKCE, getAllVaultFoldersOp, getAllVaultMemoriesOp, getAllVaultMemoryContentsOp, getCachedServerTools, getConversationMemoriesOp, getConversationsByProjectLazyOp, getConversationsLazyOp, getConversationsPageOp, getDecayCandidatesRawOp, getLogger, getMemoriesNeedingTopicExtractionOp, getServerTools, getUnfiledVaultMemoriesOp, getVaultFolderMemoryCountOp, getVaultMemoriesByIdsOp, getVaultMemoryOp, getVaultRankingProjectionsOp, hardDeleteDecayedOp, hasEncryptionKey, ingestPublishedPhotoMemoriesOp, injectionSignatureCatalog, isDegradedTopicSkip, isPiiRedactor, isRerankerAvailable, maskScopedEmbeddingCache, moveMemoriesToFolderOp, noopLogger, onKeyAvailable, parseMedia, preEmbedVaultMemories, quantizeEmbedding, queueManager, rankProfileCandidates, recall, reflect, refreshEncryptionKeyIfMatches, refreshNotionAccessToken, registerNotionClient, relinkMemoryTopicsOp, requestEncryptionKey, resolvePiiRedactor, restoreVaultMemoryOp, resumeStream, retain, scoreProfileSalience, screenCandidatesForInjection, sdkMigrations, sdkModelClasses, sdkSchema, searchVaultMemories, seedEncryptionKeys, setLogger, setMemoryVisibilityOp, shouldChunkMessage, stampTopicsExtractedAtOp, streamCancelPath, streamReplayPath, summarizeObservationTrends, supersedeVaultMemoryOp, synthesizeProfile, traverseGraphLane, ttlForType, updateVaultFolderContextOp, updateVaultFolderOp, updateVaultMemoryEmbeddingOp, updateVaultMemoryOp, upsertMessageOp, useChat, useChatStorage, useCredits, useEncryption, useModels, verifyMemoriesForPublish, xhrTransport };
10863
+ export { type AutoExtractMessage, type AutoExtractor, type Budget, CHUNKS_DISCARDED_ORIGIN, type CachedChunkVectors, type CachedServerTools, Conversation as ChatConversation, Message as ChatMessage, type ChatRole, type ChunkVectorCache, type ChunkingOptions, type ConsolidationAction, type ConsolidationFallbackReason, type ConversationMemoryInput, ConversationMemory as ConversationMemoryModel, type ConversationMemoryOperationsContext, type CreateAutoExtractorOptions, type CreateConversationOptions, type CreateDecaySweeperOptions, type CreateMessageOptions, type CreateVaultFolderOptions, type CreateVaultMemoryOptions, type CryptoPriceClassification, type CryptoPricePreProcessorOptions, DEFAULT_CACHE_EXPIRATION_MS, DEFAULT_CHUNK_CACHE_SIZE, DEFAULT_CHUNK_OVERLAP, DEFAULT_CHUNK_SIZE, DEFAULT_DECAY_POLICY, DEFAULT_MAX_CLASSIFIER_CALLS_PER_SWEEP, DEFAULT_MIN_CHUNK_SIZE, DEFAULT_PROFILE_FACETS, DEFAULT_PROFILE_FACT_TYPE_WEIGHTS, DEFAULT_PROFILE_PROOF_ALPHA, DEFAULT_PROFILE_TREND_MULTIPLIERS, DEFAULT_VAULT_CACHE_SIZE, DatabaseManager, type DatabaseManagerLogger, type DatabaseManagerOptions, type DecayCandidateRaw, type DecayClassifier, type DecayInput, type DecayPolicy, type DecaySweepResult, type DecaySweeper, type DecayVerdict, ENTITY_FANOUT, type EmbeddedWalletSignerFn, EncryptionKeyMissingError, type ExtractFactsOptions, type ExtractOutcome, type ExtractedCandidate, type ExtractedEntity, type ExtractionCursorStore, type ExtractionFunnel, type ExtractionTimings, type FactType, type FileMetadata, type FlushResult, type GetConversationsPageOptions, type GetMessagesPageOptions, type GraphTraversalOptions, HARD_DELETE_WINDOW_MS, INFERENCE_ID_HEADER, type InjectionClassifierOptions, type InjectionReason, type LazyStoredConversation, type LlmDecayClassifierOptions, type LlmNeighborRefinerOptions, type Logger, LoggerProvider, type LoggerProviderProps, MAX_HOPS, MEDIUM_TTL_MS, type ManualFactType, type MemoriesNeedingTopicExtraction, type EmbeddingOptions as MemoryEngineEmbeddingOptions, type MemoryEngineResult, type MemoryEngineSearchOptions, type MemoryExtractedEvent, type MemoryKind, type MemoryQuarantinedEvent, type MemoryToVerify, type MemoryVaultSearchOptions, type MemoryVaultToolOptions, type MemoryVerification, type MessageRedactionResult, type MessageSkeleton, NEVER_TTL_MS, NODE_BUDGET, NOTION_OAUTH_CONFIG, type NeighborRefiner, type NotionAuthUrlParams, type NotionClientRegistration, type NotionExchangeCodeParams, type NotionOAuthEndpoints, type NotionPKCEChallenge, type NotionRefreshTokenParams, type NotionTokenResponse, type NowSource, type ObservationTrend, type ObservationTrendInput, PAST_EVENT_GRACE_MS, PII_PATTERNS, PROFILE_DOC_VERSION, type PhotoIngestResult, type PhotoMediaRef, type PiiCategory, type PiiMatch, type PiiPattern, PiiRedactor, type PiiRedactorOptions, type PlatformStorage, type PortalLlmAuth, type PortalLlmFailure, type PortalLlmFailureReason, type ProfileConfigFingerprint, type ProfileDoc, type ProfileFacet, type ProfileFacetKey, type ProfileSalienceInput, type ProfileSection, type PromptPreProcessor, type PromptPreProcessorContext, type PublishedPhotoMemory, type QuantizedEmbedding, type QuarantinedMemoryInfo, QueueManager, type QueueStatus, RECALL_MAX_LIMIT, RECALL_TOOL_NAME, type RankableVaultMemory, type RankedMemory, type RankedProfileCandidate, type RecallContext, type RecallDegradation, type RecallDiagnostics, type RecallOptions, type RecallResult, type RecallToolCallbacks, type RecallToolOptions, type RecencyOptions, type RedactionResult, type ReflectOptions, type ReflectResult, type RequestEncryptionKeyOptions, RerankerUnavailableError, type ResumeStreamOptions, type ResumeStreamResult, type ResumeStreamWithStorageResult, type RetainAction, type RetainContext, type RetainOptions, type RetainResult, type RetainSource, SDK_SCHEMA_VERSION, SHORT_TTL_MS, STREAM_RESUMABLE_HEADER, type ScoreBreakdown, type ScoreProfileSalienceOptions, type ScreenResult, type ScreenedCandidate, type SearchSource, type SendMessageWithStorageArgs, type SendMessageWithStorageDetachedResult, type SendMessageWithStorageResult, type ServerToolsOptions, type ServerToolsResponse, type SignMessageFn, type StockPriceClassification, type StockPricePreProcessorOptions, type ChatCompletionUsage as StoredChatCompletionUsage, type StoredConversation, type StoredConversationMemory, type StoredMessage, type StoredMessageWithSimilarity, type StoredVaultFolder, VaultFolder as StoredVaultFolderModel, type StoredVaultMemory, VaultMemory as StoredVaultMemoryModel, StreamExpiredError, type StreamMetaEvent, type StreamResumeHandle, type SynthesizeProfileOptions, TOOL_RESULT_ORIGIN, TOPICS_EXTRACTION_VERSION, TOPIC_EXTRACTION_BATCH_SIZE, TREND_RECENT_WINDOW_DAYS, TREND_STALE_WINDOW_DAYS, type TextChunk, type TopicExtractOptions, type TopicExtractionInput, type TopicExtractionRunResult, type TopicSkipReason, type TurnCompleteEvent, type TurnSkippedEvent, type UncheckedReason, type UnverifiableReason, type UpdateVaultFolderOptions, type UpdateVaultMemoryOptions, type UseChatStorageOptions, type UseChatStorageResult, type UseCreditsOptions, type UseCreditsResult, type UseModelsOptions, type UseModelsResult, VAULT_SIZE_HOP_CAP, type VaultEmbeddingCache, type VaultFolderOperationsContext, type VaultMemoryOperationsContext, type VaultMemoryVisibility, type VaultMemoryWriter, type VaultSaveOperation, type VaultSearchResult, type VaultWriteAction, type VaultWriteInput, type VaultWriteOutcome, type VerificationSources, type VerifyMemoriesForPublishOptions, WalletPoller, type WeatherClassification, type WeatherPreProcessorOptions, type WebSearchClassification, type WebSearchPreProcessorOptions, addConversationMemoriesOp, archiveVaultMemoryOp, backfillMemoryTopicsOp, buildNotionAuthUrl, capHopsForDensity, chatStorageMigrations, chatStorageSchema, chunkAndEmbedAllMessages, chunkAndEmbedMessage, chunkText, classifyCryptoPrice, classifyCryptoPriceBatch, classifyDecay, classifyInjectionCandidates, classifyObservationTrend, classifyStockPrice, classifyStockPriceBatch, classifyWeather, classifyWeatherBatch, classifyWebSearch, classifyWebSearchBatch, clearAllEncryptionKeys, clearAllEncryptionState, clearConversationMemoriesOp, clearEncryptionKey, clearLazyTitleCache, clearServerToolsCache, consoleLogger, conversationMemoryToStored, cosineInt8, createAutoExtractor, createChunkVectorCache, createCryptoPricePreProcessor, createDecaySweeper, createLlmDecayClassifier, createLlmNeighborRefiner, createMemoryEngineTool, createMemoryVaultSearchTool, createMemoryVaultTool, createMessageSourceResolver, createNotionTools, createPlatformCursorStore, createRecallTool, createStockPricePreProcessor, createStreamingDeAnonymizer, createVaultEmbeddingCache, createVaultFolderOp, createVaultMemoriesBatchOp, createVaultMemoryOp, createWeatherPreProcessor, createWebSearchPreProcessor, decodeChunkVector, decryptConversationTitle, deleteAllVaultMemoriesForUserOp, deleteVaultFolderOp, deleteVaultMemoryOp, dequantizeEmbedding, discoverNotionOAuthEndpoints, eagerEmbedContent, embedAllMessages, embedMessage, encodeChunkVector, ensureDefaultFoldersOp, exchangeNotionCode, extractAndLinkEntitiesForMemoriesOp, extractAndRetain, extractEntitiesForMemories, extractFacts, generateConversationId, generateEmbedding, generateEmbeddings, generateNotionPKCE, getAllVaultFoldersOp, getAllVaultMemoriesOp, getAllVaultMemoryContentsOp, getCachedServerTools, getConversationMemoriesOp, getConversationsByProjectLazyOp, getConversationsLazyOp, getConversationsPageOp, getDecayCandidatesRawOp, getLogger, getMemoriesNeedingTopicExtractionOp, getServerTools, getUnfiledVaultMemoriesOp, getVaultFolderMemoryCountOp, getVaultMemoriesByIdsOp, getVaultMemoryOp, getVaultRankingProjectionsOp, hardDeleteDecayedOp, hasEncryptionKey, ingestPublishedPhotoMemoriesOp, injectionSignatureCatalog, isDegradedTopicSkip, isPiiRedactor, isRerankerAvailable, maskScopedEmbeddingCache, moveMemoriesToFolderOp, noopLogger, onKeyAvailable, parseMedia, preEmbedVaultMemories, quantizeEmbedding, queueManager, rankProfileCandidates, recall, reflect, refreshEncryptionKeyIfMatches, refreshNotionAccessToken, registerNotionClient, relinkMemoryTopicsOp, requestEncryptionKey, resolvePiiRedactor, restoreVaultMemoryOp, resumeStream, retain, scoreProfileSalience, screenCandidatesForInjection, sdkMigrations, sdkModelClasses, sdkSchema, searchVaultMemories, seedEncryptionKeys, setLogger, setMemoryVisibilityOp, shouldChunkMessage, stampTopicsExtractedAtOp, streamCancelPath, streamReplayPath, summarizeObservationTrends, supersedeVaultMemoryOp, synthesizeProfile, traverseGraphLane, ttlForType, updateVaultFolderContextOp, updateVaultFolderOp, updateVaultMemoryEmbeddingOp, updateVaultMemoryOp, upsertMessageOp, useChat, useChatStorage, useCredits, useEncryption, useModels, verifyMemoriesForPublish, xhrTransport };
@@ -133,7 +133,7 @@ import {
133
133
  upsertMessageOp,
134
134
  useEncryption,
135
135
  vaultMemoryToStored
136
- } from "./chunk-GRU24OP4.mjs";
136
+ } from "./chunk-7HRJOHW4.mjs";
137
137
  import {
138
138
  PII_PATTERNS,
139
139
  PiiRedactor,
@@ -6646,6 +6646,7 @@ async function retain(content, ctx, options = {}) {
6646
6646
  const threshold = options.autoMergeThreshold ?? DEFAULT_AUTO_MERGE_THRESHOLD;
6647
6647
  const resolvedScope = options.scope ?? DEFAULT_SCOPE;
6648
6648
  let supersedeTargetIds = [];
6649
+ let consolidationDecidedCreate = false;
6649
6650
  let supersedeContent;
6650
6651
  let prepared;
6651
6652
  if (enableAutoMerge) {
@@ -6673,8 +6674,12 @@ async function retain(content, ctx, options = {}) {
6673
6674
  const outcome = await tryConsolidate(trimmed, ctx, options, prepared);
6674
6675
  if (outcome) {
6675
6676
  if ("done" in outcome) return outcome.done;
6676
- supersedeTargetIds = outcome.supersede;
6677
- supersedeContent = outcome.content;
6677
+ if ("create" in outcome) {
6678
+ consolidationDecidedCreate = true;
6679
+ } else {
6680
+ supersedeTargetIds = outcome.supersede;
6681
+ supersedeContent = outcome.content;
6682
+ }
6678
6683
  }
6679
6684
  }
6680
6685
  if (supersedeTargetIds.length === 0) {
@@ -6724,7 +6729,14 @@ async function retain(content, ctx, options = {}) {
6724
6729
  action: "merge",
6725
6730
  memoryId: targetId,
6726
6731
  targetId,
6727
- proofCount: updated.proofCount ?? (existing.proofCount ?? 1) + 1
6732
+ proofCount: updated.proofCount ?? (existing.proofCount ?? 1) + 1,
6733
+ similarity: matches[0].similarity,
6734
+ // Stage 1 may have run and explicitly said `create`, and Stage 2
6735
+ // then found a strict-cosine match anyway. Reporting the decision
6736
+ // here is what makes that DISAGREEMENT visible — without it the
6737
+ // model's create silently vanished from the distribution whenever
6738
+ // the cosine stage won.
6739
+ ...consolidationDecidedCreate && { consolidation: "create" }
6728
6740
  };
6729
6741
  }
6730
6742
  await assertMergeTargetGoneOrThrow(ctx, targetId);
@@ -6737,12 +6749,18 @@ async function retain(content, ctx, options = {}) {
6737
6749
  const embedding = reusableQueryEmbedding ?? await generateEmbedding(contentToWrite, ctx.embeddingOptions);
6738
6750
  const embeddingModel = ctx.embeddingOptions.model ?? DEFAULT_API_EMBEDDING_MODEL;
6739
6751
  if (options.respectTombstones) {
6740
- const tombstoneId = await findTombstoneMatch(embedding, embeddingModel, resolvedScope, ctx, {
6752
+ const tombstone = await findTombstoneMatch(embedding, embeddingModel, resolvedScope, ctx, {
6741
6753
  threshold,
6742
6754
  folderId: options.folderId
6743
6755
  });
6744
- if (tombstoneId) {
6745
- return { action: "suppressed", memoryId: tombstoneId, tombstoneId, proofCount: 0 };
6756
+ if (tombstone) {
6757
+ return {
6758
+ action: "suppressed",
6759
+ memoryId: tombstone.id,
6760
+ tombstoneId: tombstone.id,
6761
+ proofCount: 0,
6762
+ similarity: tombstone.similarity
6763
+ };
6746
6764
  }
6747
6765
  }
6748
6766
  const createOpts = {
@@ -6809,7 +6827,8 @@ async function retain(content, ctx, options = {}) {
6809
6827
  action: "supersede",
6810
6828
  memoryId: created2.uniqueId,
6811
6829
  targetId: primaryTargetId,
6812
- proofCount: 1
6830
+ proofCount: 1,
6831
+ consolidation: "supersede"
6813
6832
  };
6814
6833
  }
6815
6834
  notifyConsolidationFallback(
@@ -6823,7 +6842,8 @@ async function retain(content, ctx, options = {}) {
6823
6842
  return {
6824
6843
  action: "create",
6825
6844
  memoryId: created.uniqueId,
6826
- proofCount: 1
6845
+ proofCount: 1,
6846
+ ...consolidationDecidedCreate && { consolidation: "create" }
6827
6847
  };
6828
6848
  }
6829
6849
  function unionStrings(a, b) {
@@ -6853,7 +6873,7 @@ async function findTombstoneMatch(embedding, embeddingModel, scope, ctx, opts) {
6853
6873
  bestId = row.uniqueId;
6854
6874
  }
6855
6875
  }
6856
- return bestId;
6876
+ return bestId === null ? null : { id: bestId, similarity: bestSim };
6857
6877
  }
6858
6878
  function pickEventTimeUpdate(existing, incoming) {
6859
6879
  if (incoming === void 0 || incoming === null) return void 0;
@@ -6895,7 +6915,7 @@ async function tryConsolidate(trimmed, ctx, options, prepared) {
6895
6915
  }));
6896
6916
  const { consolidateMemory: doConsolidate } = await import("./consolidate-XBYKAFKT.mjs");
6897
6917
  const decision = await doConsolidate(trimmed, candidates, consolidateOptions);
6898
- if (decision.action === "create") return null;
6918
+ if (decision.action === "create") return decision.fallbackReason ? null : { create: true };
6899
6919
  if (decision.action === "supersede" && decision.content) {
6900
6920
  const requestedIds = decision.targetIds?.length ? decision.targetIds : decision.targetId ? [decision.targetId] : [];
6901
6921
  if (requestedIds.length === 0) return null;
@@ -6954,7 +6974,8 @@ async function tryConsolidate(trimmed, ctx, options, prepared) {
6954
6974
  action: "merge",
6955
6975
  memoryId: decision.targetId,
6956
6976
  targetId: decision.targetId,
6957
- proofCount: updated.proofCount ?? (existing.proofCount ?? 1) + 1
6977
+ proofCount: updated.proofCount ?? (existing.proofCount ?? 1) + 1,
6978
+ consolidation: "noop"
6958
6979
  }
6959
6980
  };
6960
6981
  }
@@ -7007,7 +7028,8 @@ async function tryConsolidate(trimmed, ctx, options, prepared) {
7007
7028
  action: "update",
7008
7029
  memoryId: decision.targetId,
7009
7030
  targetId: decision.targetId,
7010
- proofCount: updated.proofCount ?? (existing.proofCount ?? 1) + 1
7031
+ proofCount: updated.proofCount ?? (existing.proofCount ?? 1) + 1,
7032
+ consolidation: "update"
7011
7033
  }
7012
7034
  };
7013
7035
  }
@@ -7149,6 +7171,11 @@ Extract durable user facts.`,
7149
7171
  fallbackSourceId,
7150
7172
  options.userIdentity ?? []
7151
7173
  );
7174
+ const rawCandidates = parsed.candidates;
7175
+ options.onCandidatesParsed?.({
7176
+ rawCount: Array.isArray(rawCandidates) ? rawCandidates.length : 0,
7177
+ validCount: candidates.length
7178
+ });
7152
7179
  if (!redactor) return candidates;
7153
7180
  const restored = restoreCandidates(candidates, redactor, options.userIdentity ?? []);
7154
7181
  if (candidates.length > 0 && restored.length === 0) {
@@ -7185,8 +7212,12 @@ async function extractAndRetain(messages, retainCtx, options) {
7185
7212
  let exhaustedEmpty = false;
7186
7213
  let exhaustedFailure;
7187
7214
  let droppedAfterRedaction = false;
7215
+ let rawCandidateCount = 0;
7216
+ let validCandidateCount = 0;
7188
7217
  const callerOnExhaustedEmpty = options.extract.onExhaustedEmpty;
7189
7218
  const callerOnCandidatesDropped = options.extract.onCandidatesDropped;
7219
+ const callerOnCandidatesParsed = options.extract.onCandidatesParsed;
7220
+ const tExtract = Date.now();
7190
7221
  const candidates = await extractFacts(messages, {
7191
7222
  ...options.extract,
7192
7223
  onExhaustedEmpty: (failure) => {
@@ -7197,8 +7228,14 @@ async function extractAndRetain(messages, retainCtx, options) {
7197
7228
  onCandidatesDropped: () => {
7198
7229
  droppedAfterRedaction = true;
7199
7230
  callerOnCandidatesDropped?.();
7231
+ },
7232
+ onCandidatesParsed: (stats) => {
7233
+ rawCandidateCount = stats.rawCount;
7234
+ validCandidateCount = stats.validCount;
7235
+ callerOnCandidatesParsed?.(stats);
7200
7236
  }
7201
7237
  });
7238
+ const extractMs = Date.now() - tExtract;
7202
7239
  const filtered = candidates.filter((c) => c.confidence >= minConfidence);
7203
7240
  const log = getLogger();
7204
7241
  const screened = screenCandidatesForInjection(filtered);
@@ -7246,6 +7283,7 @@ async function extractAndRetain(messages, retainCtx, options) {
7246
7283
  const results = [];
7247
7284
  const quarantinedInfo = [];
7248
7285
  let failedWrites = 0;
7286
+ const tRetain = Date.now();
7249
7287
  for (const { candidate, isQuarantined, reason, signature } of toRetain) {
7250
7288
  try {
7251
7289
  const result = await retain(candidate.content, retainCtx, {
@@ -7312,6 +7350,21 @@ async function extractAndRetain(messages, retainCtx, options) {
7312
7350
  failedCount: failedWrites,
7313
7351
  outcome,
7314
7352
  quarantined: quarantinedInfo,
7353
+ funnel: {
7354
+ rawCandidateCount,
7355
+ validCandidateCount,
7356
+ afterRedactionCount: candidates.length,
7357
+ aboveConfidenceCount: filtered.length,
7358
+ // The PERSISTED quarantines (`quarantinedInfo`), not the screened list: a
7359
+ // screened candidate whose retain() throws is counted in `failedCount`,
7360
+ // and counting it here too would double it and break the identity below.
7361
+ // This also keeps the count equal to `quarantined.length` on the result.
7362
+ quarantinedCount: quarantinedInfo.length,
7363
+ retainedCount: results.length,
7364
+ failedCount: failedWrites
7365
+ },
7366
+ timings: { extractMs, retainMs: Date.now() - tRetain },
7367
+ model: options.extract.model ?? DEFAULT_EXTRACTION_MODEL,
7315
7368
  // Only meaningful alongside `outcome: "empty-after-retry"`. Returned as well
7316
7369
  // as pushed through the callback so a consumer that only inspects the result
7317
7370
  // (rather than wiring a hook) can still report WHY.
@@ -7565,27 +7618,23 @@ function createAutoExtractor(options) {
7565
7618
  const t0 = Date.now();
7566
7619
  void (async () => {
7567
7620
  try {
7568
- const { candidates, results, failedCount, outcome, failure } = await extractAndRetain(
7569
- window,
7570
- retainCtx,
7571
- {
7572
- extract,
7573
- ...options.minConfidence !== void 0 && { minConfidence: options.minConfidence },
7574
- ...options.entityCtx !== void 0 && { entityCtx: options.entityCtx },
7575
- ...options.scope !== void 0 && { scope: options.scope },
7576
- ...options.folderId !== void 0 && { folderId: options.folderId },
7577
- ...consolidateOptions !== void 0 && { consolidateOptions },
7578
- ...injectionClassifierOptions !== void 0 && {
7579
- injectionClassifier: injectionClassifierOptions
7580
- },
7581
- ...options.onCandidateFailed && {
7582
- onCandidateFailed: (candidate, error) => options.onCandidateFailed?.({ candidate, error, conversationId })
7583
- },
7584
- ...options.onMemoryQuarantined && {
7585
- onQuarantined: (info) => options.onMemoryQuarantined?.({ ...info, conversationId })
7586
- }
7621
+ const { candidates, results, failedCount, outcome, failure, funnel, timings, model } = await extractAndRetain(window, retainCtx, {
7622
+ extract,
7623
+ ...options.minConfidence !== void 0 && { minConfidence: options.minConfidence },
7624
+ ...options.entityCtx !== void 0 && { entityCtx: options.entityCtx },
7625
+ ...options.scope !== void 0 && { scope: options.scope },
7626
+ ...options.folderId !== void 0 && { folderId: options.folderId },
7627
+ ...consolidateOptions !== void 0 && { consolidateOptions },
7628
+ ...injectionClassifierOptions !== void 0 && {
7629
+ injectionClassifier: injectionClassifierOptions
7630
+ },
7631
+ ...options.onCandidateFailed && {
7632
+ onCandidateFailed: (candidate, error) => options.onCandidateFailed?.({ candidate, error, conversationId })
7633
+ },
7634
+ ...options.onMemoryQuarantined && {
7635
+ onQuarantined: (info) => options.onMemoryQuarantined?.({ ...info, conversationId })
7587
7636
  }
7588
- );
7637
+ });
7589
7638
  if (outcome !== "empty-after-retry") {
7590
7639
  const advancedTo = window[window.length - 1].id;
7591
7640
  stateFor(conversationId).watermark = advancedTo;
@@ -7606,6 +7655,9 @@ function createAutoExtractor(options) {
7606
7655
  durationMs: Date.now() - t0,
7607
7656
  conversationId,
7608
7657
  outcome,
7658
+ funnel,
7659
+ timings,
7660
+ model,
7609
7661
  // Only set alongside `outcome: "empty-after-retry"`. Spread so the key
7610
7662
  // is absent rather than explicitly undefined on a healthy turn —
7611
7663
  // analytics backends store an explicit undefined as a real value.
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  recall
3
- } from "./chunk-GRU24OP4.mjs";
3
+ } from "./chunk-7HRJOHW4.mjs";
4
4
  import "./chunk-WUG6GTHO.mjs";
5
5
  import "./chunk-GYKJOWEO.mjs";
6
6
  export {
package/dist/index.d.mts CHANGED
@@ -4453,6 +4453,10 @@ type GetApiV1AdminUsersLookupData = {
4453
4453
  * Email address (requires Privy credentials)
4454
4454
  */
4455
4455
  email?: string;
4456
+ /**
4457
+ * Portal account id
4458
+ */
4459
+ account_id?: number;
4456
4460
  };
4457
4461
  url: '/api/v1/admin/users/lookup';
4458
4462
  };
@@ -4639,6 +4643,10 @@ type PostApiV1ChatCompletionsErrors = {
4639
4643
  * Model provider rate limit exceeded
4640
4644
  */
4641
4645
  429: ResponseErrorResponse;
4646
+ /**
4647
+ * Client closed the request before a response was produced
4648
+ */
4649
+ 499: ResponseErrorResponse;
4642
4650
  /**
4643
4651
  * Internal Server Error
4644
4652
  */
@@ -5619,6 +5627,10 @@ type PostApiV1EmbeddingsErrors = {
5619
5627
  * Model provider rate limit exceeded
5620
5628
  */
5621
5629
  429: ResponseErrorResponse;
5630
+ /**
5631
+ * Client closed the request before a response was produced
5632
+ */
5633
+ 499: ResponseErrorResponse;
5622
5634
  /**
5623
5635
  * Internal Server Error
5624
5636
  */
@@ -5838,6 +5850,10 @@ type PostApiV1ResponsesErrors = {
5838
5850
  * Model provider rate limit exceeded
5839
5851
  */
5840
5852
  429: ResponseErrorResponse;
5853
+ /**
5854
+ * Client closed the request before a response was produced
5855
+ */
5856
+ 499: ResponseErrorResponse;
5841
5857
  /**
5842
5858
  * Internal Server Error
5843
5859
  */
@@ -6760,7 +6776,7 @@ declare const deleteApiV1AdminTextReset: <ThrowOnError extends boolean = false>(
6760
6776
  /**
6761
6777
  * Lookup user by identifier
6762
6778
  *
6763
- * Retrieves account details, all app enrollments with balances, and text registrations. Accepts wallet_address, phone, telegram, or email (exactly one required). When the identifier resolves to a Privy user that has no portal account (e.g. a Privy signup that never onboarded), returns 200 with account=null, portal_account_exists=false, and a privy block describing the Privy identity, instead of 404 — so an operator can still see (and delete) the Privy user.
6779
+ * Retrieves account details, all app enrollments with balances, and text registrations. Accepts wallet_address, phone, telegram, email or account_id (exactly one required). The response's privy block carries the email, resolved from the account's Privy DID when the query itself did not go through Privy. When the identifier resolves to a Privy user that has no portal account (e.g. a Privy signup that never onboarded), returns 200 with account=null, portal_account_exists=false, and a privy block describing the Privy identity, instead of 404 — so an operator can still see (and delete) the Privy user.
6764
6780
  */
6765
6781
  declare const getApiV1AdminUsersLookup: <ThrowOnError extends boolean = false>(options: Options<GetApiV1AdminUsersLookupData, ThrowOnError>) => RequestResult<GetApiV1AdminUsersLookupResponses, GetApiV1AdminUsersLookupErrors, ThrowOnError>;
6766
6782
  /**
package/dist/index.d.ts CHANGED
@@ -4453,6 +4453,10 @@ type GetApiV1AdminUsersLookupData = {
4453
4453
  * Email address (requires Privy credentials)
4454
4454
  */
4455
4455
  email?: string;
4456
+ /**
4457
+ * Portal account id
4458
+ */
4459
+ account_id?: number;
4456
4460
  };
4457
4461
  url: '/api/v1/admin/users/lookup';
4458
4462
  };
@@ -4639,6 +4643,10 @@ type PostApiV1ChatCompletionsErrors = {
4639
4643
  * Model provider rate limit exceeded
4640
4644
  */
4641
4645
  429: ResponseErrorResponse;
4646
+ /**
4647
+ * Client closed the request before a response was produced
4648
+ */
4649
+ 499: ResponseErrorResponse;
4642
4650
  /**
4643
4651
  * Internal Server Error
4644
4652
  */
@@ -5619,6 +5627,10 @@ type PostApiV1EmbeddingsErrors = {
5619
5627
  * Model provider rate limit exceeded
5620
5628
  */
5621
5629
  429: ResponseErrorResponse;
5630
+ /**
5631
+ * Client closed the request before a response was produced
5632
+ */
5633
+ 499: ResponseErrorResponse;
5622
5634
  /**
5623
5635
  * Internal Server Error
5624
5636
  */
@@ -5838,6 +5850,10 @@ type PostApiV1ResponsesErrors = {
5838
5850
  * Model provider rate limit exceeded
5839
5851
  */
5840
5852
  429: ResponseErrorResponse;
5853
+ /**
5854
+ * Client closed the request before a response was produced
5855
+ */
5856
+ 499: ResponseErrorResponse;
5841
5857
  /**
5842
5858
  * Internal Server Error
5843
5859
  */
@@ -6760,7 +6776,7 @@ declare const deleteApiV1AdminTextReset: <ThrowOnError extends boolean = false>(
6760
6776
  /**
6761
6777
  * Lookup user by identifier
6762
6778
  *
6763
- * Retrieves account details, all app enrollments with balances, and text registrations. Accepts wallet_address, phone, telegram, or email (exactly one required). When the identifier resolves to a Privy user that has no portal account (e.g. a Privy signup that never onboarded), returns 200 with account=null, portal_account_exists=false, and a privy block describing the Privy identity, instead of 404 — so an operator can still see (and delete) the Privy user.
6779
+ * Retrieves account details, all app enrollments with balances, and text registrations. Accepts wallet_address, phone, telegram, email or account_id (exactly one required). The response's privy block carries the email, resolved from the account's Privy DID when the query itself did not go through Privy. When the identifier resolves to a Privy user that has no portal account (e.g. a Privy signup that never onboarded), returns 200 with account=null, portal_account_exists=false, and a privy block describing the Privy identity, instead of 404 — so an operator can still see (and delete) the Privy user.
6764
6780
  */
6765
6781
  declare const getApiV1AdminUsersLookup: <ThrowOnError extends boolean = false>(options: Options<GetApiV1AdminUsersLookupData, ThrowOnError>) => RequestResult<GetApiV1AdminUsersLookupResponses, GetApiV1AdminUsersLookupErrors, ThrowOnError>;
6766
6782
  /**
@@ -7196,7 +7196,7 @@ function createMemoryVaultSearchTool(vaultCtx, embeddingOptions, cache, searchOp
7196
7196
  subQueries = decomp.subQueries;
7197
7197
  }
7198
7198
  }
7199
- const { recall: recall2 } = await import("./recall-D6ODL36R.mjs");
7199
+ const { recall: recall2 } = await import("./recall-B3M4BWQ2.mjs");
7200
7200
  let recallDegraded = [];
7201
7201
  const result = await recall2(
7202
7202
  query,