@snoai/memory 1.5.1 → 1.6.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.
Files changed (146) hide show
  1. package/README.md +1 -1
  2. package/dist/{access-tracker-D-riPZRY.d.ts → access-tracker-CFxRg7Bt.d.ts} +4 -4
  3. package/dist/{adapter-BM58hult.d.ts → adapter-BFtbOOw3.d.ts} +2 -2
  4. package/dist/{atomic-memory-extraction-BNBCB1XD.d.ts → atomic-memory-extraction-Bp7AWZqi.d.ts} +4 -4
  5. package/dist/{atomic-memory-extraction-BaBrfESt.js → atomic-memory-extraction-l65aofbl.js} +4 -4
  6. package/dist/{b-profile-section-dictionary-provider-D2kzg9Re.d.ts → b-profile-section-dictionary-provider-Buj_M-QA.d.ts} +1 -1
  7. package/dist/{capture-policy-detector-CoT-j_Ic.d.ts → capture-policy-detector-3tDQkBi9.d.ts} +1 -1
  8. package/dist/client.d.ts +1 -1
  9. package/dist/{config-BhlMin82.js → config-CByvnX3d.js} +49 -119
  10. package/dist/{derived-suppression-cache-BW52dq3w.d.ts → derived-suppression-cache-CcANI-p7.d.ts} +1 -1
  11. package/dist/diagnostic-encoder.js +1 -1
  12. package/dist/{index-BGu91bjB.d.ts → index-CJrMFlAU.d.ts} +12 -50
  13. package/dist/{index-GoYmsx8b.d.ts → index-Df9420Pl.d.ts} +2 -2
  14. package/dist/index.d.ts +9 -9
  15. package/dist/index.js +5 -5
  16. package/dist/internal/config/index.d.ts +2 -2
  17. package/dist/internal/config/index.js +13 -51
  18. package/dist/internal/config/plugin-config-schema.d.ts +1 -1
  19. package/dist/internal/config/plugin-config-schema.js +1 -1
  20. package/dist/internal/config/product-mode.d.ts +1 -1
  21. package/dist/internal/config/settings.d.ts +1 -1
  22. package/dist/internal/config/settings.js +16 -47
  23. package/dist/internal/config/skin-defaults.d.ts +1 -1
  24. package/dist/internal/contract/profile.d.ts +1 -1
  25. package/dist/internal/contract/routes.d.ts +1 -1
  26. package/dist/internal/engine/bindings/memory-cli-shared.d.ts +4 -4
  27. package/dist/internal/engine/bindings/memory-forget-tool.js +1 -1
  28. package/dist/internal/engine/bindings/memory-list-tool.js +1 -1
  29. package/dist/internal/engine/bindings/memory-recall-tool.js +1 -1
  30. package/dist/internal/engine/bindings/memory-reflection-resolve-tool.js +1 -1
  31. package/dist/internal/engine/bindings/memory-stats-tool.js +1 -1
  32. package/dist/internal/engine/bindings/memory-store-tool.js +3 -3
  33. package/dist/internal/engine/bindings/memory-tool-access.d.ts +1 -1
  34. package/dist/internal/engine/bindings/memory-tool-access.js +1 -1
  35. package/dist/internal/engine/bindings/memory-tool-results.d.ts +1 -1
  36. package/dist/internal/engine/bindings/memory-tool-results.js +1 -1
  37. package/dist/internal/engine/bindings/memory-tool-schemas.d.ts +5 -5
  38. package/dist/internal/engine/bindings/memory-tool-schemas.js +1 -1
  39. package/dist/internal/engine/bindings/memory-update-tool.js +2 -2
  40. package/dist/internal/engine/bindings/sno-station-mem-ambient-learning-hook.d.ts +4 -4
  41. package/dist/internal/engine/bindings/sno-station-mem-ambient-learning-hook.js +2 -2
  42. package/dist/internal/engine/bindings/sno-station-mem-auto-recall-hook.d.ts +4 -4
  43. package/dist/internal/engine/bindings/sno-station-mem-auto-recall-hook.js +1 -1
  44. package/dist/internal/engine/bindings/sno-station-mem-insight-distill-factory.d.ts +5 -5
  45. package/dist/internal/engine/bindings/sno-station-mem-insight-distill-factory.js +3 -2
  46. package/dist/internal/engine/bindings/sno-station-mem-message-transcript.js +2 -2
  47. package/dist/internal/engine/bindings/sno-station-mem-reset-hook.d.ts +3 -3
  48. package/dist/internal/engine/bindings/sno-station-mem-runtime-mode.d.ts +1 -1
  49. package/dist/internal/engine/eval/trace.js +3 -4
  50. package/dist/internal/engine/extraction/atomic-memory-extraction.d.ts +1 -1
  51. package/dist/internal/engine/extraction/atomic-memory-extraction.js +1 -1
  52. package/dist/internal/engine/extraction/b-profile-section-dictionary-provider.d.ts +1 -1
  53. package/dist/internal/engine/extraction/b-profile-section-rekey.d.ts +5 -5
  54. package/dist/internal/engine/extraction/capture-policy-detector.d.ts +1 -1
  55. package/dist/internal/engine/extraction/memory-metadata-codec.d.ts +2 -2
  56. package/dist/internal/engine/extraction/memory-temporality-classifier.d.ts +1 -1
  57. package/dist/internal/engine/extraction/memory-temporality-classifier.js +1 -1
  58. package/dist/internal/engine/observability/adapter.d.ts +1 -1
  59. package/dist/internal/engine/observability/memory-snapshot.d.ts +1 -1
  60. package/dist/internal/engine/observability/observable-embedder.d.ts +1 -1
  61. package/dist/internal/engine/observability/observable-llm-client.d.ts +1 -1
  62. package/dist/internal/engine/observability/observable-memory-store.d.ts +1 -1
  63. package/dist/internal/engine/observability/observable-memory-store.js +1 -1
  64. package/dist/internal/engine/observability/observable-retriever.d.ts +1 -1
  65. package/dist/internal/engine/observability/observable-retriever.js +1 -1
  66. package/dist/internal/engine/observability/runtime-diagnostics.d.ts +1 -1
  67. package/dist/internal/engine/observability/runtime-diagnostics.js +1 -1
  68. package/dist/internal/engine/operations/memory-tier-promoter.d.ts +1 -1
  69. package/dist/internal/engine/operations/runtime-audit-log.d.ts +2 -2
  70. package/dist/internal/engine/provider/provider-registration.d.ts +4 -4
  71. package/dist/internal/engine/provider/provider-row-renderer.d.ts +1 -1
  72. package/dist/internal/engine/reflection/reflection-command-hooks.d.ts +1 -1
  73. package/dist/internal/engine/reflection/reflection-command-hooks.js +1 -1
  74. package/dist/internal/engine/reflection/reflection-deps.d.ts +1 -1
  75. package/dist/internal/engine/reflection/reflection-embedded-generator.d.ts +1 -1
  76. package/dist/internal/engine/reflection/reflection-embedded-generator.js +1 -1
  77. package/dist/internal/engine/reflection/reflection-injection-hooks.d.ts +1 -1
  78. package/dist/internal/engine/reflection/reflection-injection-hooks.js +1 -1
  79. package/dist/internal/engine/reflection/reflection-lifecycle-hooks.d.ts +1 -1
  80. package/dist/internal/engine/reflection/reflection-lifecycle-hooks.js +1 -1
  81. package/dist/internal/engine/reflection/strategy-hook-runner.d.ts +3 -3
  82. package/dist/internal/engine/reflection/strategy-hook-runner.js +2 -2
  83. package/dist/internal/engine/retrieval/access-tracker.d.ts +1 -1
  84. package/dist/internal/engine/retrieval/retriever.d.ts +2 -2
  85. package/dist/internal/engine/retrieval/retriever.js +2 -2
  86. package/dist/internal/engine/shared/memory-kind-policy.d.ts +1 -1
  87. package/dist/internal/engine/shared/paths.d.ts +2 -2
  88. package/dist/internal/engine/shared/types.d.ts +2 -2
  89. package/dist/internal/engine/shared/types.js +1 -1
  90. package/dist/internal/engine/telemetry/observe-ledger.d.ts +1 -1
  91. package/dist/internal/model/llm-client.d.ts +2 -2
  92. package/dist/internal/model/llm-client.js +1 -1
  93. package/dist/internal/model/llm-mode-routing.d.ts +1 -1
  94. package/dist/internal/store/maintenance.d.ts +2 -2
  95. package/dist/internal/store/maintenance.js +3 -3
  96. package/dist/internal/store/store.d.ts +2 -2
  97. package/dist/internal/store/store.js +1 -1
  98. package/dist/{llm-client-Z_VkmTsW.js → llm-client-ByzZRemn.js} +7 -4
  99. package/dist/{llm-client-9XCsnmf0.d.ts → llm-client-nWW1o1F6.d.ts} +1 -1
  100. package/dist/{log-site-catalog.generated-lc-iJczN.js → log-site-catalog.generated-DsvDgHJa.js} +95 -165
  101. package/dist/log-site-catalog.json +1 -1
  102. package/dist/{memory-kind-policy-DcEvUTKl.d.ts → memory-kind-policy-BMebgugU.d.ts} +1 -1
  103. package/dist/{memory-metadata-codec-CLtCCf-b.d.ts → memory-metadata-codec-H8BniJM3.d.ts} +1 -1
  104. package/dist/{memory-runtime-De1T9jTv.js → memory-runtime-DXr1VO1p.js} +101 -168
  105. package/dist/{memory-snapshot-BXB2APN0.d.ts → memory-snapshot-CKnQovB5.d.ts} +2 -2
  106. package/dist/{memory-store-base-yOAD7Ff8.d.ts → memory-store-base-BHYXgsCq.d.ts} +3 -3
  107. package/dist/{memory-temporality-classifier-s7TjoKB-.js → memory-temporality-classifier-Bauwnls7.js} +1 -1
  108. package/dist/{memory-temporality-classifier-BxmM3FOb.d.ts → memory-temporality-classifier-Wi6WWeAj.d.ts} +1 -1
  109. package/dist/{memory-tier-promoter-DjJwYB4w.d.ts → memory-tier-promoter-m60-RlAj.d.ts} +1 -1
  110. package/dist/{memory-tool-dependencies-C8JSCWCz.js → memory-tool-dependencies-Cc4SJMtd.js} +1 -1
  111. package/dist/memory-tool-dependencies-D2fOC-KL.d.ts +14 -0
  112. package/dist/{observable-embedder-DCtHXucw.d.ts → observable-embedder-0FwxJMhJ.d.ts} +1 -1
  113. package/dist/{observable-llm-client-DykY0exK.d.ts → observable-llm-client-DY7w1Fj1.d.ts} +3 -3
  114. package/dist/{observable-memory-store-ZBTjMAHj.d.ts → observable-memory-store-C25Q_hoW.d.ts} +4 -4
  115. package/dist/{observable-retriever-f8ENkQnP.d.ts → observable-retriever-Cs9Bwzq6.d.ts} +5 -5
  116. package/dist/paths-obFSsJv3.d.ts +1 -0
  117. package/dist/{plugin-config-schema-D9riSXDg.js → plugin-config-schema-D-IoHmis.js} +22 -43
  118. package/dist/{plugin-config-schema-CsKKIHq9.d.ts → plugin-config-schema-DQh5njrS.d.ts} +8 -10
  119. package/dist/{profile-CxdMGvxU.d.ts → profile-CcvVR6K8.d.ts} +1 -1
  120. package/dist/{profile-section-writer-B54r7JN1.js → profile-section-writer-CR-WWIoB.js} +2 -2
  121. package/dist/{reflection-command-hooks-_B_XZBIz.d.ts → reflection-command-hooks-BRLqVNCi.d.ts} +4 -4
  122. package/dist/{reflection-command-hooks-a1kgC2cr.js → reflection-command-hooks-Der9aX0e.js} +4 -3
  123. package/dist/{reflection-deps-DQBHeGYK.d.ts → reflection-deps-C0TJ-gpU.d.ts} +2 -2
  124. package/dist/{reflection-embedded-generator-DEuTWrBh.js → reflection-embedded-generator-BEdDusPV.js} +2 -1
  125. package/dist/{reflection-embedded-generator-LmZQqGER.d.ts → reflection-embedded-generator-Cs59hWYr.d.ts} +3 -3
  126. package/dist/{reflection-injection-hooks-CTDCwu2_.d.ts → reflection-injection-hooks-Cy4bRemm.d.ts} +4 -4
  127. package/dist/{reflection-lifecycle-hooks-eFUc2mcd.d.ts → reflection-lifecycle-hooks-C-lf00DB.d.ts} +3 -3
  128. package/dist/{rem-batch-executor-D42YWCNg.js → rem-batch-executor-DiU8hSGc.js} +1 -1
  129. package/dist/{rem-trigger-BKr4Qmhn.js → rem-trigger-CBfyJVfh.js} +39 -432
  130. package/dist/{retriever-BsjtyINJ.d.ts → retriever-2RJYAvlD.d.ts} +10 -52
  131. package/dist/{retriever-CsBW6MZv.js → retriever-C54bXeDh.js} +30 -452
  132. package/dist/{runtime-audit-log-C-L0v2HU.d.ts → runtime-audit-log-D2Hqk_kl.d.ts} +1 -1
  133. package/dist/{server-BPOT66a_.js → server-BlbG5uOM.js} +4 -4
  134. package/dist/sidecar/main.js +2 -2
  135. package/dist/sno-station-mem-runtime-dependencies-ByI3b-wB.d.ts +31 -0
  136. package/dist/{sno-station-mem-runtime-dependencies-DES7ZvMt.js → sno-station-mem-runtime-dependencies-DsidkZi2.js} +6 -6
  137. package/dist/{store-DRwqWMTh.js → store-Bja1tVFw.js} +1 -1
  138. package/dist/{store-CukgAPqu.d.ts → store-Bz0y76cJ.d.ts} +1 -1
  139. package/dist/{strategy-hook-runner-s8dAEQ3P.js → strategy-hook-runner-F-ruiw48.js} +1 -1
  140. package/dist/{strategy-hook-runner-BlJxjMjC.d.ts → strategy-hook-runner-vbrWiDbK.d.ts} +7 -7
  141. package/dist/{types-C9Hngi-p.d.ts → types-El7jViCz.d.ts} +1 -1
  142. package/package.json +1 -1
  143. package/settings.default.json +2 -3
  144. package/dist/memory-tool-dependencies-BsaSVzC8.d.ts +0 -14
  145. package/dist/paths-m8yncZgm.d.ts +0 -1
  146. package/dist/sno-station-mem-runtime-dependencies-B47DIcei.d.ts +0 -31
@@ -1,4 +1,4 @@
1
- import { $ as FIXED_IDX_MEMORY_ACTIVE_TASK_CURRENT_REVISION, $n as MAX_CHUNK_FETCH_LIMIT, A as modelCallDestination, At as FIXED_MEMORY_PROFILE_RECOVERY_ENTRIES, B as FIXED_EXTERNAL_VALUE_49, C as getSnoStationMemStateDir, Cn as CHUNK_OVERLAP_TOKENS, Cr as LOCAL_EMBEDDING_CACHE_DIR_DEFAULT, Ct as FIXED_MEMORY_CHUNKS_MEM_FACET_IDX, D as settingsToPluginConfig, Dn as DEFAULT_IMPORTANCE, Dr as LocalReranker, Dt as FIXED_MEMORY_MEMORIES_FACT_ID_INSERT_GUARD, En as DEFAULT_BM25_WEIGHT, Er as LocalEmbedProvider, Et as FIXED_MEMORY_MEMORIES, Fn as EMBEDDER_DIM, G as FIXED_EXTERNAL_VALUE_55, H as FIXED_EXTERNAL_VALUE_52, Hn as HEAD_EXTRACT_OVERLAP_DROP_RATIO, In as EMBEDDER_MODEL_DEFAULT, Ir as REM_SIDECAR_TOKEN_HEADER, It as FIXED_MEMORY_SNO_EXTRACT_CHAT, J as FIXED_EXTERNAL_VALUE_58, Jn as LIGHTWEIGHT_FUSION_WEIGHT, K as FIXED_EXTERNAL_VALUE_56, Kn as INTRA_MEMORY_COSINE_THRESHOLD, Kt as FIXED_PROTOCOL_VALUE_69, Ln as EMBEDDER_PROVIDER_DEFAULT, Mn as DEFAULT_RERANK_TIMEOUT_MS, Mt as FIXED_MEMORY_PROVIDER_PROJECT_AGENTS, Nt as FIXED_MEMORY_PROVIDER_PROJECT_MAPPINGS, O as MODEL_CALLS, On as DEFAULT_RECALL_LIFECYCLE, Or as ensureModelDownloaded, Ot as FIXED_MEMORY_MEMORIES_FACT_ID_UPDATE_GUARD, P as observeAgentId, Pn as DEFAULT_VECTOR_WEIGHT, Q as FIXED_IDX_MEMORY, Rn as EVAL_QA_TRACES_FILENAME, Rt as FIXED_MEMORY_TASK_LIFECYCLE_COMMANDS, Sn as CHUNK_MIN_TOKENS, Sr as CachedEmbeddingProvider, St as FIXED_MEMORY_CHUNKS_MEMORY_ID_IDX, T as readSettings, Tn as CHUNK_TOKENIZER_MODE, Tt as FIXED_MEMORY_EXTRACTION_TIMESTAMPS, U as FIXED_EXTERNAL_VALUE_53, Un as HEAD_EXTRACT_TOKEN_BUDGET, V as FIXED_EXTERNAL_VALUE_51, Vn as HEAD_EXTRACT_MIN_CONTENT_TOKENS, W as FIXED_EXTERNAL_VALUE_54, Wn as IMPORTANCE_WEIGHT_BASE, X as FIXED_EXTERNAL_VALUE_8, Y as FIXED_EXTERNAL_VALUE_62, Yn as LIGHTWEIGHT_RERANK_PENALTY, Z as FIXED_EXTERNAL_VALUE_9, _t as FIXED_MEMORY_CHUNKS, a as REM_MODEL_OUTPUT_TOKEN_CAP, an as PERSISTED_PROVIDER_SYSTEM, ar as MULTI_HIT_BONUS_CAP, at as FIXED_IDX_MEMORY_MEMORIES_LANE_PROJECT, bn as CHUNKING_VERSION$1, br as experimentMmrDisabled, bt as FIXED_MEMORY_CHUNKS_AU, cn as SUPPORTED_LOCALES, cr as RECENCY_WEIGHT, ct as FIXED_IDX_MEMORY_MEMORIES_PROJECT_FACT_KEY_ACTIVE, d as getRemDiscoveryPath, dn as ADJACENCY_BONUS_PER_PAIR, dr as RERANK_BLEND_CROSS, dt as FIXED_MEMORY_ACTIVE_TASK_EVIDENCE, en as FIXED_VEC_MEMORY, er as MAX_LIST_LIMIT, et as FIXED_IDX_MEMORY_ACTIVE_TASK_EVIDENCE_INSTANCE, fr as RERANK_BLEND_VECTOR, ft as FIXED_MEMORY_ACTIVE_TASK_INSTANCES, g as readRemOperationalConfig, gt as FIXED_MEMORY_ACTIVE_TASK_TRANSITIONS, hr as TIME_DECAY_FLOOR, ht as FIXED_MEMORY_ACTIVE_TASK_REVISIONS, in as PERSISTED_CONTENT_HASH_V3, ir as MMR_LAMBDA, it as FIXED_IDX_MEMORY_MEMORIES_FACT_ID, jt as FIXED_MEMORY_PROVIDER_AGENT_MAPPINGS, k as MODEL_CALL_WORKLOAD, kt as FIXED_MEMORY_MIGRATION_MARKERS, lt as FIXED_IDX_MEMORY_MEMORIES_PROJECT_TIMESTAMP, mt as FIXED_MEMORY_ACTIVE_TASK_MIGRATION_MANIFESTS, nn as PERSISTED_CANDIDATE_HASH_V1, nt as FIXED_IDX_MEMORY_MEMORIES_CATEGORY, o as REM_RUN_PATH, or as MULTI_HIT_BONUS_PER_HIT, ot as FIXED_IDX_MEMORY_MEMORIES_PROJECT, pr as RETRIEVAL_STORAGE_CHUNK_PROFILE, pt as FIXED_MEMORY_ACTIVE_TASK_MIGRATION_EVIDENCE, q as FIXED_EXTERNAL_VALUE_57, qn as LIGHTWEIGHT_COSINE_WEIGHT, qt as FIXED_PROTOCOL_VALUE_73, r as REM_CORRELATION_ID_HEADER, rn as PERSISTED_CONTENT_HASH_V1, rt as FIXED_IDX_MEMORY_MEMORIES_CONTENT_HASH, s as REM_SIDECAR_HOST, sn as llmRoutingConfigSchema, st as FIXED_IDX_MEMORY_MEMORIES_PROJECT_CONTENT_HASH, tn as FIXED_VEC_MEMORY_CHUNKS, tt as FIXED_IDX_MEMORY_ACTIVE_TASK_INSTANCES_PROJECTION, un as ADJACENCY_BONUS_CAP, ut as FIXED_MEMORY, vn as BONUS_TOTAL_INVARIANT, vt as FIXED_MEMORY_CHUNKS_AD, wn as CHUNK_TARGET_TOKENS, wr as LOCAL_EMBEDDING_MODEL, wt as FIXED_MEMORY_CHUNKS_MEM_IDX, xn as CHUNK_MAX_TOKENS, xt as FIXED_MEMORY_CHUNKS_FTS, yn as CACHE_TTL_MS, yr as experimentCandidatePoolOverride, yt as FIXED_MEMORY_CHUNKS_AI, zt as FIXED_MEMORY_UNPLACED_CANDIDATES } from "./config-BhlMin82.js";
1
+ import { $ as FIXED_IDX_MEMORY_ACTIVE_TASK_CURRENT_REVISION, A as modelCallDestination, At as FIXED_MEMORY_PROFILE_RECOVERY_ENTRIES, B as FIXED_EXTERNAL_VALUE_49, C as getSnoStationMemStateDir, Cn as CHUNK_OVERLAP_TOKENS, Cr as ensureModelDownloaded, Ct as FIXED_MEMORY_CHUNKS_MEM_FACET_IDX, D as settingsToPluginConfig, Dn as DEFAULT_IMPORTANCE, Dt as FIXED_MEMORY_MEMORIES_FACT_ID_INSERT_GUARD, En as DEFAULT_BM25_WEIGHT, Et as FIXED_MEMORY_MEMORIES, Fn as EMBEDDER_DIM, G as FIXED_EXTERNAL_VALUE_55, H as FIXED_EXTERNAL_VALUE_52, Hn as HEAD_EXTRACT_OVERLAP_DROP_RATIO, In as EMBEDDER_MODEL_DEFAULT, It as FIXED_MEMORY_SNO_EXTRACT_CHAT, J as FIXED_EXTERNAL_VALUE_58, K as FIXED_EXTERNAL_VALUE_56, Kn as INTRA_MEMORY_COSINE_THRESHOLD, Kt as FIXED_PROTOCOL_VALUE_69, Ln as EMBEDDER_PROVIDER_DEFAULT, Mn as DEFAULT_RERANK_TIMEOUT_MS, Mt as FIXED_MEMORY_PROVIDER_PROJECT_AGENTS, Nt as FIXED_MEMORY_PROVIDER_PROJECT_MAPPINGS, O as MODEL_CALLS, On as DEFAULT_RECALL_LIFECYCLE, Ot as FIXED_MEMORY_MEMORIES_FACT_ID_UPDATE_GUARD, P as observeAgentId, Pn as DEFAULT_VECTOR_WEIGHT, Q as FIXED_IDX_MEMORY, Rn as EVAL_QA_TRACES_FILENAME, Rt as FIXED_MEMORY_TASK_LIFECYCLE_COMMANDS, Sn as CHUNK_MIN_TOKENS, Sr as LocalReranker, St as FIXED_MEMORY_CHUNKS_MEMORY_ID_IDX, T as readSettings, Tn as CHUNK_TOKENIZER_MODE, Tt as FIXED_MEMORY_EXTRACTION_TIMESTAMPS, U as FIXED_EXTERNAL_VALUE_53, Un as HEAD_EXTRACT_TOKEN_BUDGET, V as FIXED_EXTERNAL_VALUE_51, Vn as HEAD_EXTRACT_MIN_CONTENT_TOKENS, W as FIXED_EXTERNAL_VALUE_54, Wn as IMPORTANCE_WEIGHT_BASE, X as FIXED_EXTERNAL_VALUE_8, Xn as MAX_CHUNK_FETCH_LIMIT, Y as FIXED_EXTERNAL_VALUE_62, Z as FIXED_EXTERNAL_VALUE_9, Zn as MAX_LIST_LIMIT, _r as CachedEmbeddingProvider, _t as FIXED_MEMORY_CHUNKS, a as REM_MODEL_OUTPUT_TOKEN_CAP, an as PERSISTED_PROVIDER_SYSTEM, ar as RECENCY_WEIGHT, at as FIXED_IDX_MEMORY_MEMORIES_LANE_PROJECT, bn as CHUNKING_VERSION$1, bt as FIXED_MEMORY_CHUNKS_AU, cn as SUPPORTED_LOCALES, cr as RETRIEVAL_STORAGE_CHUNK_PROFILE, ct as FIXED_IDX_MEMORY_MEMORIES_PROJECT_FACT_KEY_ACTIVE, d as getRemDiscoveryPath, dn as ADJACENCY_BONUS_PER_PAIR, dt as FIXED_MEMORY_ACTIVE_TASK_EVIDENCE, en as FIXED_VEC_MEMORY, et as FIXED_IDX_MEMORY_ACTIVE_TASK_EVIDENCE_INSTANCE, ft as FIXED_MEMORY_ACTIVE_TASK_INSTANCES, g as readRemOperationalConfig, gt as FIXED_MEMORY_ACTIVE_TASK_TRANSITIONS, hr as experimentMmrDisabled, ht as FIXED_MEMORY_ACTIVE_TASK_REVISIONS, in as PERSISTED_CONTENT_HASH_V3, it as FIXED_IDX_MEMORY_MEMORIES_FACT_ID, jr as REM_SIDECAR_TOKEN_HEADER, jt as FIXED_MEMORY_PROVIDER_AGENT_MAPPINGS, k as MODEL_CALL_WORKLOAD, kt as FIXED_MEMORY_MIGRATION_MARKERS, lt as FIXED_IDX_MEMORY_MEMORIES_PROJECT_TIMESTAMP, mr as experimentCandidatePoolOverride, mt as FIXED_MEMORY_ACTIVE_TASK_MIGRATION_MANIFESTS, nn as PERSISTED_CANDIDATE_HASH_V1, nr as MULTI_HIT_BONUS_CAP, nt as FIXED_IDX_MEMORY_MEMORIES_CATEGORY, o as REM_RUN_PATH, ot as FIXED_IDX_MEMORY_MEMORIES_PROJECT, pt as FIXED_MEMORY_ACTIVE_TASK_MIGRATION_EVIDENCE, q as FIXED_EXTERNAL_VALUE_57, qt as FIXED_PROTOCOL_VALUE_73, r as REM_CORRELATION_ID_HEADER, rn as PERSISTED_CONTENT_HASH_V1, rr as MULTI_HIT_BONUS_PER_HIT, rt as FIXED_IDX_MEMORY_MEMORIES_CONTENT_HASH, s as REM_SIDECAR_HOST, sn as llmRoutingConfigSchema, st as FIXED_IDX_MEMORY_MEMORIES_PROJECT_CONTENT_HASH, tn as FIXED_VEC_MEMORY_CHUNKS, tr as MMR_LAMBDA, tt as FIXED_IDX_MEMORY_ACTIVE_TASK_INSTANCES_PROJECTION, un as ADJACENCY_BONUS_CAP, ur as TIME_DECAY_FLOOR, ut as FIXED_MEMORY, vn as BONUS_TOTAL_INVARIANT, vr as LOCAL_EMBEDDING_CACHE_DIR_DEFAULT, vt as FIXED_MEMORY_CHUNKS_AD, wn as CHUNK_TARGET_TOKENS, wt as FIXED_MEMORY_CHUNKS_MEM_IDX, xn as CHUNK_MAX_TOKENS, xr as LocalEmbedProvider, xt as FIXED_MEMORY_CHUNKS_FTS, yn as CACHE_TTL_MS, yr as LOCAL_EMBEDDING_MODEL, yt as FIXED_MEMORY_CHUNKS_AI, zt as FIXED_MEMORY_UNPLACED_CANDIDATES } from "./config-CByvnX3d.js";
2
2
  import { createLogger, createLogger as createLogger$1, currentLogContext, privateLogReference, withLogContext } from "@snoai/utils/logger";
3
3
  import path, { dirname, join, resolve } from "node:path";
4
4
  import { appendFileSync, closeSync, createReadStream, existsSync, fstatSync, fsyncSync, ftruncateSync, mkdirSync, openSync, readFileSync, readSync, realpathSync, renameSync, rmSync, statSync, writeFileSync, writeSync } from "node:fs";
@@ -6662,11 +6662,12 @@ function withProviderResponses(responses, run) {
6662
6662
  }
6663
6663
  /** Sno GPU request attribution (GPU_REQUEST_METADATA_STANDARD): self-reported labels, never identity. */
6664
6664
  const SNO_GPU_SOURCE = "sno-station";
6665
- function snoGpuAttributionHeaders(clientRequestId, callId) {
6665
+ function snoGpuAttributionHeaders(clientRequestId, callId, usageClass) {
6666
6666
  return {
6667
6667
  "X-Sno-Source": SNO_GPU_SOURCE,
6668
6668
  "X-Sno-Workload": callId ? MODEL_CALL_WORKLOAD[callId] : "station-aux",
6669
- "X-Request-ID": clientRequestId
6669
+ "X-Request-ID": clientRequestId,
6670
+ ...usageClass ? { "X-Sno-Usage-Class": usageClass } : {}
6670
6671
  };
6671
6672
  }
6672
6673
  async function observeRequest(input, run) {
@@ -6882,7 +6883,7 @@ async function callSnoProfileCompletion(request) {
6882
6883
  headers: {
6883
6884
  "Content-Type": "application/json",
6884
6885
  "X-Internal-Token": request.apiKey,
6885
- ...snoGpuAttributionHeaders(diagnostic.clientRequestId, request.callId),
6886
+ ...snoGpuAttributionHeaders(diagnostic.clientRequestId, request.callId, request.usageClass),
6886
6887
  ...request.operationId ? { "X-Sno-Operation": request.operationId } : {}
6887
6888
  },
6888
6889
  body: JSON.stringify({
@@ -6982,7 +6983,7 @@ async function snoStationMemDispatch(ctx) {
6982
6983
  if (typeof cfgExt.requestId === "string") headers["X-Request-ID"] = cfgExt.requestId;
6983
6984
  if (provider === "sno-gpu") {
6984
6985
  headers["X-Internal-Token"] = ctx.apiKey;
6985
- Object.assign(headers, snoGpuAttributionHeaders(diagnostic.clientRequestId, cfgExt.callId));
6986
+ Object.assign(headers, snoGpuAttributionHeaders(diagnostic.clientRequestId, cfgExt.callId, cfgExt.usageClass));
6986
6987
  if (typeof cfgExt.operationId === "string") headers["X-Sno-Operation"] = cfgExt.operationId;
6987
6988
  } else headers.Authorization = `Bearer ${ctx.apiKey}`;
6988
6989
  let response;
@@ -7058,6 +7059,7 @@ async function callProvider(ctx) {
7058
7059
  if (typeof raw.endpointUrl !== "string" || typeof raw.prompt !== "string" || typeof raw.timeoutMs !== "number") throw new Error("sno-station-mem llm-client: invalid raw profile completion config");
7059
7060
  return {
7060
7061
  ...await callSnoProfileCompletion({
7062
+ ...cfgExt.usageClass ? { usageClass: cfgExt.usageClass } : {},
7061
7063
  ...cfgExt.promptTemplateHash ? { promptTemplateHash: cfgExt.promptTemplateHash } : {},
7062
7064
  ...cfgExt.extractionSkillHash ? { extractionSkillHash: cfgExt.extractionSkillHash } : {},
7063
7065
  endpointUrl: raw.endpointUrl,
@@ -7220,6 +7222,7 @@ function buildPipelineConfig(preset, config, endpoint, request, destination, ope
7220
7222
  destination,
7221
7223
  ...request.requestId ? { requestId: request.requestId } : {},
7222
7224
  ...operationId ? { operationId } : {},
7225
+ ...config.usageClass ? { usageClass: config.usageClass } : {},
7223
7226
  ...request.promptTemplateHash ? { promptTemplateHash: request.promptTemplateHash } : {},
7224
7227
  ...request.extractionSkillHash ? { extractionSkillHash: request.extractionSkillHash } : {},
7225
7228
  ...request.signal ? { signal: request.signal } : {},
@@ -26704,9 +26707,8 @@ function buildConfigSnapshot() {
26704
26707
  HEAD_EXTRACT_OVERLAP_DROP_RATIO,
26705
26708
  HEAD_EXTRACT_TOKEN_BUDGET,
26706
26709
  INTRA_MEMORY_COSINE_THRESHOLD,
26707
- LIGHTWEIGHT_COSINE_WEIGHT,
26708
- LIGHTWEIGHT_FUSION_WEIGHT,
26709
- LIGHTWEIGHT_RERANK_PENALTY,
26710
+ LIGHTWEIGHT_COSINE_WEIGHT: 1,
26711
+ LIGHTWEIGHT_FUSION_WEIGHT: 0,
26710
26712
  MAX_CHUNKS_PER_PARENT: 16,
26711
26713
  MMR_LAMBDA,
26712
26714
  MULTI_HIT_BONUS_CAP,
@@ -27219,7 +27221,7 @@ const DEFAULT_RETRIEVAL_CONFIG = {
27219
27221
  vectorWeight: DEFAULT_VECTOR_WEIGHT,
27220
27222
  bm25Weight: DEFAULT_BM25_WEIGHT,
27221
27223
  minScore: 0,
27222
- rerank: "cross-encoder",
27224
+ rerank: "lightweight",
27223
27225
  candidatePoolSize: 64,
27224
27226
  recencyHalfLifeDays: 14,
27225
27227
  recencyWeight: RECENCY_WEIGHT,
@@ -27229,10 +27231,8 @@ const DEFAULT_RETRIEVAL_CONFIG = {
27229
27231
  lengthNormAnchor: 0,
27230
27232
  hardMinScore: 0,
27231
27233
  timeDecayHalfLifeDays: 60,
27232
- rerankBlendVector: RERANK_BLEND_VECTOR,
27233
- rerankBlendCross: RERANK_BLEND_CROSS,
27234
- lightweightFusionWeight: LIGHTWEIGHT_FUSION_WEIGHT,
27235
- lightweightCosineWeight: LIGHTWEIGHT_COSINE_WEIGHT,
27234
+ lightweightFusionWeight: 0,
27235
+ lightweightCosineWeight: 1,
27236
27236
  importanceWeightBase: IMPORTANCE_WEIGHT_BASE,
27237
27237
  timeDecayFloor: TIME_DECAY_FLOOR,
27238
27238
  mmrLambda: MMR_LAMBDA,
@@ -27528,11 +27528,7 @@ Object.assign(MemoryRetriever.prototype, {
27528
27528
  });
27529
27529
  fused = rerankOutcome.candidates;
27530
27530
  this.throwIfAborted(context);
27531
- const rerankStageMetadata = rerankOutcome.fallback ? {
27532
- ...rerankOutcome.stats,
27533
- rerankFallbackReason: rerankOutcome.fallback.reason
27534
- } : rerankOutcome.stats;
27535
- trace?.endStage(fused.map((r) => r.entry.id), fused.map((r) => r.score), rerankStageMetadata);
27531
+ trace?.endStage(fused.map((r) => r.entry.id), fused.map((r) => r.score));
27536
27532
  fused = this.applyScoringPipeline(fused, trace, context.limit, rerankOutcome.modelOrder);
27537
27533
  trace?.startStage("min_score_filter", fused.map((result) => result.entry.id));
27538
27534
  fused = fused.filter((result) => result.score >= (context.minScore ?? this.config.minScore));
@@ -27601,423 +27597,23 @@ Object.assign(MemoryRetriever.prototype, {
27601
27597
  }
27602
27598
  });
27603
27599
  //#endregion
27604
- //#region src/engine/retrieval/retrieval-rerank-provider.ts
27605
- function buildRerankRequest(apiKey, query, candidates) {
27606
- return {
27607
- headers: {
27608
- "Content-Type": "application/json",
27609
- Authorization: `Bearer ${apiKey}`,
27610
- "X-Sno-Source": "sno-station",
27611
- "X-Sno-Workload": "station-rerank"
27612
- },
27613
- body: {
27614
- query,
27615
- texts: candidates,
27616
- raw_scores: true
27617
- }
27618
- };
27619
- }
27620
- /** Sno's reranker answers a list of `{index, score}`, bare or under `results` / `data`. */
27621
- function parseRerankResponse(data) {
27622
- const parseItems = (items) => {
27623
- if (!Array.isArray(items)) return void 0;
27624
- const parsed = [];
27625
- for (const raw of items) {
27626
- const index = typeof raw?.index === "number" ? raw.index : Number(raw?.index);
27627
- if (!Number.isFinite(index)) continue;
27628
- let score;
27629
- for (const key of ["score", "relevance_score"]) {
27630
- const value = raw?.[key];
27631
- const n = typeof value === "number" ? value : Number(value);
27632
- if (Number.isFinite(n)) {
27633
- score = n;
27634
- break;
27635
- }
27636
- }
27637
- if (score === void 0) continue;
27638
- parsed.push({
27639
- index,
27640
- score
27641
- });
27642
- }
27643
- return parsed.length > 0 ? parsed : void 0;
27644
- };
27645
- const objectData = data && typeof data === "object" && !Array.isArray(data) ? data : void 0;
27646
- return parseItems(data) ?? parseItems(objectData?.results) ?? parseItems(objectData?.data);
27647
- }
27648
- //#endregion
27649
27600
  //#region src/engine/retrieval/retriever-rerank.ts
27650
27601
  /** @file retriever-rerank.ts
27651
- * @purpose Runs remote and local reranking.
27602
+ * @purpose Runs local cosine ordering and local model reranking.
27652
27603
  * @boundary Prototype-mounted MemoryRetriever methods; no constructor state ownership.
27653
27604
  */
27654
- const RERANK_TRANSIENT_ATTEMPTS = 3;
27655
- const RERANK_TRANSIENT_BACKOFF_MS = 200;
27656
- const RERANK_TRANSIENT_STATUSES = /* @__PURE__ */ new Set([
27657
- 429,
27658
- 502,
27659
- 503,
27660
- 504
27661
- ]);
27662
- const RERANK_RETRY_AFTER_MAX_MS = 5e3;
27663
- function isRerankTimeout(error) {
27664
- return error instanceof Error && (error.name === "TimeoutError" || error.name === "AbortError");
27665
- }
27666
- /**
27667
- * The reranker's refusal when a pair is over its window, as the endpoint states it:
27668
- * `{"detail":{"code":"input_token_limit_exceeded","max_input_tokens":512,
27669
- * "candidates":[{"index":0,"input_tokens":728,"excess_tokens":216}]}}` (measured 2026-09-14).
27670
- *
27671
- * It names every offending text, so the batch can be repaired and sent again instead of
27672
- * losing the scores of the 49 texts that were fine. The counts are the SERVER's, taken with
27673
- * the ranking model's tokenizer — which is not the embedder's — so they are the only exact
27674
- * measure available here of how far over the window a text is.
27675
- */
27676
- const RERANK_OVER_WINDOW_CODE = "input_token_limit_exceeded";
27677
- function parseOverWindowRefusal(body) {
27678
- let parsed;
27679
- try {
27680
- parsed = JSON.parse(body);
27681
- } catch {
27682
- return;
27683
- }
27684
- if (typeof parsed !== "object" || parsed === null) return void 0;
27685
- const detail = parsed.detail;
27686
- if (typeof detail !== "object" || detail === null) return void 0;
27687
- const shape = detail;
27688
- if (shape.code !== RERANK_OVER_WINDOW_CODE) return void 0;
27689
- if (typeof shape.max_input_tokens !== "number" || !Array.isArray(shape.candidates)) return;
27690
- const overLong = [];
27691
- for (const candidate of shape.candidates) {
27692
- if (typeof candidate !== "object" || candidate === null) continue;
27693
- const named = candidate;
27694
- if (typeof named.index !== "number" || typeof named.input_tokens !== "number") continue;
27695
- overLong.push({
27696
- index: named.index,
27697
- inputTokens: named.input_tokens
27698
- });
27699
- }
27700
- return overLong.length === 0 ? void 0 : {
27701
- maxInputTokens: shape.max_input_tokens,
27702
- overLong
27703
- };
27704
- }
27705
- function isTransientRerankError(error) {
27706
- if (isRerankTimeout(error)) return true;
27707
- return error instanceof TypeError && error.cause !== void 0;
27708
- }
27709
- async function fetchRerankWithRetry(send, stop) {
27710
- let lastError;
27711
- for (let attempt = 1; attempt <= RERANK_TRANSIENT_ATTEMPTS; attempt += 1) {
27712
- let retryDelayMs = RERANK_TRANSIENT_BACKOFF_MS * attempt;
27713
- try {
27714
- const reply = await send();
27715
- const { response } = reply;
27716
- if (response.ok) return reply;
27717
- if (!RERANK_TRANSIENT_STATUSES.has(response.status) || attempt === RERANK_TRANSIENT_ATTEMPTS) return { response };
27718
- if (response.status === 429) {
27719
- const retryAfter = response.headers.get("retry-after");
27720
- if (retryAfter !== null && /^\d+$/.test(retryAfter)) retryDelayMs = Math.min(Number.parseInt(retryAfter, 10) * 1e3, RERANK_RETRY_AFTER_MAX_MS);
27721
- }
27722
- await response.body?.cancel();
27723
- lastError = /* @__PURE__ */ new Error(`rerank API responded ${response.status}`);
27724
- } catch (error) {
27725
- if (!isTransientRerankError(error) || attempt === RERANK_TRANSIENT_ATTEMPTS || stop?.aborted) throw error;
27726
- lastError = error;
27727
- }
27728
- if (stop?.aborted) throw lastError;
27729
- await new Promise((resolve) => {
27730
- const onAbort = () => {
27731
- clearTimeout(timer);
27732
- resolve();
27733
- };
27734
- const timer = setTimeout(() => {
27735
- stop?.removeEventListener("abort", onAbort);
27736
- resolve();
27737
- }, retryDelayMs);
27738
- stop?.addEventListener("abort", onAbort, { once: true });
27739
- });
27740
- if (stop?.aborted) throw lastError;
27741
- }
27742
- throw lastError;
27743
- }
27744
27605
  Object.assign(MemoryRetriever.prototype, {
27745
27606
  async rerank(query, candidates, queryVector, options) {
27746
- if (candidates.length === 0) return { candidates };
27747
- if (this.config.rerank === "none") return { candidates };
27748
- const unranked = () => this.rerankLightweight(candidates, queryVector);
27749
- if (this.config.rerank === "cross-encoder" && !this.config.rerankApiKey) throw new RetrievalError("rerank \"cross-encoder\" requires retrieval.rerankApiKey; set the key, or set retrieval.rerank to \"lightweight\" to choose the local ranker");
27750
- if (this.config.rerank === "lightweight" || !this.config.rerankApiKey) return await this.rerankLocalModel(query, this.rerankLightweight(candidates, queryVector), options?.deadlineAt, options?.signal);
27751
- const rerankEndpoint = this.config.rerankEndpoint;
27752
- if (!rerankEndpoint) {
27753
- log$4.warn("rerank skipped: no reranker address", {}, {
27754
- event_name: "memory.retriever_rerank.diagnostic",
27755
- file: "packages/memory/src/engine/retrieval/retriever-rerank.ts",
27756
- function: "rerank",
27757
- site_id: "retrieval.retriever-rerank.rerank.6fbc6b3a22"
27758
- });
27759
- return {
27760
- candidates: unranked(),
27761
- fallback: { reason: "no_endpoint" }
27762
- };
27763
- }
27764
- const rerankTimeoutMs = this.config.rerankTimeoutMs ?? 15e3;
27765
- const stepBudget = AbortSignal.timeout(Math.max(0, Math.floor(options?.deadlineAt === void 0 ? rerankTimeoutMs : options.deadlineAt - Date.now())));
27766
- const stepStop = options?.signal ? AbortSignal.any([options.signal, stepBudget]) : stepBudget;
27767
- const rerankApiKey = this.config.rerankApiKey;
27768
- const maxCandidates = this.config.rerankMaxCandidates;
27769
- const overCap = maxCandidates !== void 0 && candidates.length > maxCandidates;
27770
- const toRerank = overCap ? candidates.slice(0, maxCandidates) : candidates;
27771
- const beyondCap = overCap ? candidates.slice(maxCandidates) : [];
27772
- const batchSize = 50;
27773
- const queryTokens = this.embedder.countTokens(query);
27774
- const documentTokenBudget = 509 - queryTokens;
27775
- if (documentTokenBudget <= 0) {
27776
- log$4.warn("rerank skipped: the query alone fills the reranker token window", {
27777
- queryTokens,
27778
- window: 512,
27779
- templateTokens: 3
27780
- }, {
27781
- event_name: "memory.retriever_rerank.diagnostic",
27782
- file: "packages/memory/src/engine/retrieval/retriever-rerank.ts",
27783
- function: "rerank",
27784
- site_id: "retrieval.retriever-rerank.rerank.query_over_window"
27785
- });
27786
- return {
27787
- candidates: unranked(),
27788
- fallback: { reason: "query_over_window" }
27789
- };
27790
- }
27791
- let truncatedCandidates = 0;
27792
- const rerankTexts = toRerank.map((c) => {
27793
- const bounded = this.embedder.truncateToTokens(c.entry.text, documentTokenBudget);
27794
- if (bounded !== c.entry.text) truncatedCandidates += 1;
27795
- return bounded;
27796
- });
27797
- if (truncatedCandidates > 0) log$4.warn("rerank candidates were cut to the document budget the query left", {
27798
- truncatedCandidates,
27799
- documentTokenBudget,
27800
- queryTokens
27801
- }, {
27802
- event_name: "memory.retriever_rerank.diagnostic",
27803
- file: "packages/memory/src/engine/retrieval/retriever-rerank.ts",
27804
- function: "rerank",
27805
- site_id: "retrieval.retriever-rerank.rerank.candidate_over_ceiling"
27806
- });
27807
- try {
27808
- const runBatch = async (start) => {
27809
- let batchTexts = rerankTexts.slice(start, start + batchSize);
27810
- for (let pass = 0;; pass += 1) {
27811
- const { headers, body } = buildRerankRequest(rerankApiKey, query, batchTexts);
27812
- const sendAttempt = async () => {
27813
- const clientRequestId = randomUUID();
27814
- const attemptStarted = performance.now();
27815
- let outcome = "failed";
27816
- let statusCode;
27817
- try {
27818
- const attempt = await fetch(rerankEndpoint, {
27819
- method: "POST",
27820
- headers: {
27821
- ...headers,
27822
- "X-Request-ID": clientRequestId
27823
- },
27824
- body: JSON.stringify(body),
27825
- signal: AbortSignal.any([AbortSignal.timeout(rerankTimeoutMs), stepStop])
27826
- });
27827
- statusCode = attempt.status;
27828
- if (!attempt.ok) {
27829
- outcome = "http_error";
27830
- return { response: attempt };
27831
- }
27832
- const data = await attempt.json();
27833
- outcome = "success";
27834
- return {
27835
- response: attempt,
27836
- data
27837
- };
27838
- } catch (error) {
27839
- outcome = isRerankTimeout(error) ? "timeout" : "failed";
27840
- throw error;
27841
- } finally {
27842
- log$4.info("Rerank request completed", {
27843
- outcome,
27844
- status_code: statusCode ?? "unavailable",
27845
- duration_ms: performance.now() - attemptStarted,
27846
- texts_sent: batchTexts.length,
27847
- client_request_id: clientRequestId
27848
- }, {
27849
- event_name: "rerank.request.completed",
27850
- file: "packages/memory/src/engine/retrieval/retriever-rerank.ts",
27851
- function: "runBatch",
27852
- site_id: "rerank.request.completed"
27853
- });
27854
- }
27855
- };
27856
- const { response, data } = await fetchRerankWithRetry(sendAttempt, stepStop);
27857
- if (!response.ok) {
27858
- const retryAfter = response.headers.get("retry-after");
27859
- const errorBody = await response.text().catch(() => "<unreadable body>");
27860
- const refusal = pass === 0 ? parseOverWindowRefusal(errorBody) : void 0;
27861
- if (refusal) {
27862
- const allowed = refusal.maxInputTokens - 3;
27863
- batchTexts = batchTexts.map((text, index) => {
27864
- const named = refusal.overLong.find((c) => c.index === index);
27865
- if (!named) return text;
27866
- const localTokens = this.embedder.countTokens(text);
27867
- const localPairTokens = queryTokens + localTokens;
27868
- const target = Math.max(1, Math.floor(allowed * localPairTokens / named.inputTokens) - queryTokens);
27869
- return this.embedder.truncateToTokens(text, target);
27870
- });
27871
- log$4.warn("rerank batch refused over its token window; resending the named texts cut to fit", {
27872
- status: response.status,
27873
- overLongCount: refusal.overLong.length,
27874
- maxInputTokens: refusal.maxInputTokens,
27875
- sentToRerankCount: batchTexts.length,
27876
- batchStart: start
27877
- }, {
27878
- event_name: "memory.retriever_rerank.diagnostic",
27879
- file: "packages/memory/src/engine/retrieval/retriever-rerank.ts",
27880
- function: "runBatch",
27881
- site_id: "retrieval.retriever-rerank.runBatch.over_window_repair"
27882
- });
27883
- continue;
27884
- }
27885
- log$4.warn("rerank API failed, using pre-rerank results", {
27886
- status: response.status,
27887
- endpoint_hash: createHash("sha256").update(rerankEndpoint).digest("hex"),
27888
- retryAfter,
27889
- sentToRerankCount: batchTexts.length,
27890
- batchStart: start,
27891
- body_length: errorBody.length
27892
- }, {
27893
- event_name: "memory.retriever_rerank.diagnostic",
27894
- file: "packages/memory/src/engine/retrieval/retriever-rerank.ts",
27895
- function: "runBatch",
27896
- site_id: "retrieval.retriever-rerank.runBatch.76d7d1fac6"
27897
- });
27898
- return "http_error";
27899
- }
27900
- const parsed = parseRerankResponse(data);
27901
- if (!parsed) {
27902
- log$4.warn("rerank API returned unparseable response", {
27903
- endpoint_hash: createHash("sha256").update(rerankEndpoint).digest("hex"),
27904
- batchStart: start
27905
- }, {
27906
- event_name: "memory.retriever_rerank.diagnostic",
27907
- file: "packages/memory/src/engine/retrieval/retriever-rerank.ts",
27908
- function: "runBatch",
27909
- site_id: "retrieval.retriever-rerank.runBatch.4429b8bd8a"
27910
- });
27911
- return "invalid_response";
27912
- }
27913
- const batchItems = [];
27914
- for (const item of parsed) {
27915
- if (item.index < 0 || item.index >= batchTexts.length) continue;
27916
- batchItems.push({
27917
- index: start + item.index,
27918
- score: item.score
27919
- });
27920
- }
27921
- return batchItems;
27922
- }
27923
- };
27924
- const batchStarts = [];
27925
- for (let start = 0; start < rerankTexts.length; start += batchSize) batchStarts.push(start);
27926
- const items = [];
27927
- for (let wave = 0; wave < batchStarts.length; wave += 4) {
27928
- const waveStarts = batchStarts.slice(wave, wave + 4);
27929
- const settled = await Promise.allSettled(waveStarts.map(runBatch));
27930
- for (const outcome of settled) if (outcome.status === "rejected" && outcome.reason instanceof RetrievalError) throw outcome.reason;
27931
- for (const outcome of settled) if (outcome.status === "rejected") throw outcome.reason;
27932
- for (const outcome of settled) if (outcome.status === "fulfilled" && typeof outcome.value === "string") return {
27933
- candidates: unranked(),
27934
- fallback: { reason: outcome.value }
27935
- };
27936
- for (const outcome of settled) if (outcome.status === "fulfilled" && typeof outcome.value !== "string") items.push(...outcome.value);
27937
- }
27938
- const blendCross = this.config.rerankBlendCross ?? .7;
27939
- const blendVector = this.config.rerankBlendVector ?? .3;
27940
- const returnedIndices = new Set(items.map((r) => r.index));
27941
- const reranked = [];
27942
- const seenIndices = /* @__PURE__ */ new Set();
27943
- for (const item of items) {
27944
- if (seenIndices.has(item.index)) continue;
27945
- seenIndices.add(item.index);
27946
- const candidate = toRerank[item.index];
27947
- if (!candidate) continue;
27948
- const sourceScore = this.getRerankSourceScore(candidate);
27949
- const blendedScore = clamp01(1 / (1 + Math.exp(-item.score)) * blendCross + sourceScore * blendVector, 0);
27950
- reranked.push({
27951
- ...candidate,
27952
- score: blendedScore,
27953
- sources: {
27954
- ...candidate.sources,
27955
- reranked: { score: item.score }
27956
- }
27957
- });
27958
- }
27959
- const unreturned = [...toRerank.filter((_, idx) => !returnedIndices.has(idx)), ...beyondCap].map((r) => ({
27960
- ...r,
27961
- score: clamp01(this.getRerankSourceScore(r) * LIGHTWEIGHT_RERANK_PENALTY, 0)
27962
- }));
27963
- const merged = [...reranked, ...unreturned].sort((a, b) => b.score - a.score);
27964
- log$4.debug("reranked", {
27965
- totalCandidateCount: candidates.length,
27966
- sentToRerankCount: toRerank.length,
27967
- returnedCount: reranked.length
27968
- }, {
27969
- event_name: "memory.retriever_rerank.diagnostic",
27970
- file: "packages/memory/src/engine/retrieval/retriever-rerank.ts",
27971
- function: "rerank",
27972
- site_id: "retrieval.retriever-rerank.rerank.7847c6248a"
27973
- });
27974
- return {
27975
- candidates: merged.length > 0 ? merged : candidates,
27976
- stats: {
27977
- rerankSentCount: toRerank.length,
27978
- rerankReturnedCount: reranked.length,
27979
- rerankBeyondCapCount: beyondCap.length
27980
- }
27981
- };
27982
- } catch (error) {
27983
- if (error instanceof RetrievalError) throw error;
27984
- let reason;
27985
- if (isRerankTimeout(error)) {
27986
- reason = "timeout";
27987
- log$4.warn("rerank API timed out, using pre-rerank results", {
27988
- timeoutMs: rerankTimeoutMs,
27989
- attempts: RERANK_TRANSIENT_ATTEMPTS
27990
- }, {
27991
- event_name: "memory.retriever_rerank.diagnostic",
27992
- file: "packages/memory/src/engine/retrieval/retriever-rerank.ts",
27993
- function: "rerank",
27994
- site_id: "retrieval.retriever-rerank.rerank.4af9c17c75"
27995
- });
27996
- } else {
27997
- reason = "request_error";
27998
- log$4.warn("rerank error, using pre-rerank results", {
27999
- error,
28000
- attempts: RERANK_TRANSIENT_ATTEMPTS
28001
- }, {
28002
- event_name: "memory.retriever_rerank.diagnostic",
28003
- file: "packages/memory/src/engine/retrieval/retriever-rerank.ts",
28004
- function: "rerank",
28005
- site_id: "retrieval.retriever-rerank.rerank.2c5fc67dbf"
28006
- });
28007
- }
28008
- return {
28009
- candidates: unranked(),
28010
- fallback: { reason }
28011
- };
28012
- }
27607
+ if (candidates.length === 0 || this.config.rerank === "none") return { candidates };
27608
+ return this.rerankLocalModel(query, this.rerankLightweight(candidates, queryVector), options?.deadlineAt, options?.signal);
28013
27609
  },
28014
27610
  rerankLightweight(candidates, queryVector) {
28015
27611
  if (queryVector.length === 0) return candidates;
28016
27612
  if (candidates.length === 0) return candidates;
28017
27613
  const chunkIds = candidates.map((c) => c.chunkId).filter((id) => id !== void 0);
28018
27614
  const vectorMap = chunkIds.length > 0 ? this.store.getVectorsByIds(chunkIds) : /* @__PURE__ */ new Map();
28019
- const wF = this.config.lightweightFusionWeight ?? .1;
28020
- const wC = this.config.lightweightCosineWeight ?? .9;
27615
+ const wF = this.config.lightweightFusionWeight ?? 0;
27616
+ const wC = this.config.lightweightCosineWeight ?? 1;
28021
27617
  let blendedCount = 0;
28022
27618
  let dimMismatchCount = 0;
28023
27619
  const reranked = candidates.map((candidate) => {
@@ -28083,9 +27679,10 @@ Object.assign(MemoryRetriever.prototype, {
28083
27679
  */
28084
27680
  async rerankLocalModel(query, ordered, deadlineAt, signal) {
28085
27681
  if (ordered.length < 2 || signal?.aborted || deadlineAt !== void 0 && Date.now() >= deadlineAt) return { candidates: ordered };
28086
- const head = ordered.slice(0, 15);
27682
+ const head = ordered.slice(0, 32);
28087
27683
  const started = performance.now();
28088
- const budgetMs = deadlineAt === void 0 ? this.config.rerankTimeoutMs ?? 15e3 : Math.max(0, Math.floor(deadlineAt - Date.now()));
27684
+ const budgetMs = Math.max(0, Math.floor(Math.min(DEFAULT_RERANK_TIMEOUT_MS, this.config.rerankTimeoutMs ?? 2e3, deadlineAt === void 0 ? DEFAULT_RERANK_TIMEOUT_MS : deadlineAt - Date.now())));
27685
+ if (budgetMs === 0) return { candidates: ordered };
28089
27686
  const stop = signal ? AbortSignal.any([signal, AbortSignal.timeout(budgetMs)]) : AbortSignal.timeout(budgetMs);
28090
27687
  const scoring = this.embedder.scoreRelevance(query, head.map((r) => r.entry.text), stop).catch((error) => {
28091
27688
  log$4.warn("local reranker failed; recall keeps the local ranking order", { error }, {
@@ -28095,11 +27692,23 @@ Object.assign(MemoryRetriever.prototype, {
28095
27692
  site_id: "retrieval.retriever-rerank.rerankLocalModel.failed"
28096
27693
  });
28097
27694
  });
28098
- const logits = await Promise.race([scoring, new Promise((resolve) => stop.addEventListener("abort", () => resolve(void 0), { once: true }))]);
27695
+ let onAbort = () => {};
27696
+ const aborted = new Promise((resolve) => {
27697
+ onAbort = () => resolve(void 0);
27698
+ stop.addEventListener("abort", onAbort, { once: true });
27699
+ });
27700
+ let logits;
27701
+ try {
27702
+ logits = await Promise.race([scoring, aborted]);
27703
+ } finally {
27704
+ stop.removeEventListener("abort", onAbort);
27705
+ }
28099
27706
  if (!logits || signal?.aborted) return { candidates: ordered };
27707
+ const minimum = Math.min(...logits);
27708
+ const span = Math.max(1e-9, Math.max(...logits) - minimum);
28100
27709
  const blended = head.map((candidate, index) => ({
28101
27710
  candidate,
28102
- value: logits[index] ?? Number.NEGATIVE_INFINITY
27711
+ value: .5 * (((logits[index] ?? minimum) - minimum) / span) + .5 * candidate.score
28103
27712
  }));
28104
27713
  blended.sort((a, b) => b.value - a.value || a.candidate.entry.id.localeCompare(b.candidate.entry.id));
28105
27714
  const slots = head.map((candidate) => candidate.score).sort((a, b) => b - a);
@@ -28128,9 +27737,6 @@ Object.assign(MemoryRetriever.prototype, {
28128
27737
  candidates: [...rescored, ...ordered.slice(head.length)],
28129
27738
  modelOrder: blended.map(({ candidate }) => candidate.entry.id)
28130
27739
  };
28131
- },
28132
- getRerankSourceScore(result) {
28133
- return clamp01(Math.max(result.sources.bm25?.score ?? 0, result.sources.vector?.score ?? 0), 0);
28134
27740
  }
28135
27741
  });
28136
27742
  //#endregion
@@ -28424,7 +28030,7 @@ Object.assign(MemoryRetriever.prototype, {
28424
28030
  },
28425
28031
  applyMmrDiversity(results) {
28426
28032
  if (results.length === 0) return results;
28427
- const lambda = this.config.mmrLambda ?? .7;
28033
+ const lambda = this.config.mmrLambda ?? .9;
28428
28034
  const chunkIds = results.map((r) => r.chunkId).filter((id) => id !== void 0);
28429
28035
  const vectorMap = chunkIds.length > 0 ? this.store.getVectorsByIds(chunkIds) : /* @__PURE__ */ new Map();
28430
28036
  const sorted = [...results].sort((a, b) => {
@@ -30231,7 +29837,7 @@ async function runWithCanonicalStoreWriteMutex(canonicalStorePath, action) {
30231
29837
  async function openBatchRuntime(input) {
30232
29838
  const settings = input.settings;
30233
29839
  const dbPath = settings.store.path;
30234
- const pluginConfig = settingsToPluginConfig(settings);
29840
+ const pluginConfig = settingsToPluginConfig(settings, "product");
30235
29841
  initSqliteRuntime(settings.store.encryptionKey);
30236
29842
  const embedder = createEmbedder(pluginConfig.embedding, getSnoStationMemStateDir());
30237
29843
  let store;
@@ -30258,6 +29864,7 @@ async function openBatchRuntime(input) {
30258
29864
  loadStorageExtensions(database);
30259
29865
  const llm = createLlmClient({
30260
29866
  preset: FIXED_MEMORY_SNO_EXTRACT_CHAT,
29867
+ usageClass: pluginConfig.extraction.llm.usageClass,
30261
29868
  operationId: input.jobId,
30262
29869
  apiKey: settings.snoGpu.apiKey,
30263
29870
  baseURL: settings.snoGpu.baseUrl,