@snoai/memory 1.2.9 → 1.2.11

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 (178) hide show
  1. package/README.md +4 -4
  2. package/dist/{access-tracker-D1e-2-Bb.d.ts → access-tracker-BOPHSJjf.d.ts} +4 -4
  3. package/dist/{adapter-TCrv5P-C.d.ts → adapter-lyb6RaQE.d.ts} +2 -2
  4. package/dist/{atomic-memory-extraction-C0n0wHzt.d.ts → atomic-memory-extraction-B_XpkhMd.d.ts} +7 -5
  5. package/dist/{atomic-memory-extraction-BG42OXou.js → atomic-memory-extraction-o2v8mp7G.js} +109 -50
  6. package/dist/{b-profile-section-dictionary-provider-y3DMQ518.d.ts → b-profile-section-dictionary-provider-BK5NBs-y.d.ts} +1 -1
  7. package/dist/{capture-policy-detector-BY7v5Cq1.d.ts → capture-policy-detector-BvVGmxxX.d.ts} +1 -1
  8. package/dist/{classifier-DnbbtwTS.d.ts → classifier-CXQxJJPP.d.ts} +1 -1
  9. package/dist/client.d.ts +1 -1
  10. package/dist/{coding-skin-_Qu3INZD.js → coding-skin-azRXA51Z.js} +2 -1
  11. package/dist/coding-skin.d.ts +1 -0
  12. package/dist/coding-skin.js +2 -2
  13. package/dist/{config-BCZRhUvW.js → config-C7LzSWhG.js} +9 -4
  14. package/dist/{connection-C9YD5sgm.js → connection-PQcq3TPO.js} +1 -1
  15. package/dist/{derived-suppression-cache-BLAH0nB9.d.ts → derived-suppression-cache-Ckwjey7I.d.ts} +1 -1
  16. package/dist/diagnostic-encoder.js +1 -1
  17. package/dist/{index-dQMkc_6y.d.ts → index-CsPUNkcm.d.ts} +2 -2
  18. package/dist/{index-BO4RU_mc.d.ts → index-DPfJrOFD.d.ts} +1 -1
  19. package/dist/{index-DL8AVj0Z.d.ts → index-Pb9LrHgL.d.ts} +4 -5
  20. package/dist/index.d.ts +12 -9
  21. package/dist/index.js +106 -51
  22. package/dist/internal/config/index.d.ts +1 -1
  23. package/dist/internal/config/index.js +4 -5
  24. package/dist/internal/config/plugin-config-schema.d.ts +1 -1
  25. package/dist/internal/config/plugin-config-schema.js +1 -1
  26. package/dist/internal/config/product-mode.d.ts +1 -1
  27. package/dist/internal/config/settings.d.ts +1 -1
  28. package/dist/internal/config/settings.js +4 -4
  29. package/dist/internal/config/skin-defaults.d.ts +1 -1
  30. package/dist/internal/contract/profile.d.ts +1 -1
  31. package/dist/internal/contract/routes.d.ts +1 -1
  32. package/dist/internal/engine/bindings/memory-cli-shared.d.ts +4 -4
  33. package/dist/internal/engine/bindings/memory-forget-tool.js +1 -1
  34. package/dist/internal/engine/bindings/memory-list-tool.js +1 -1
  35. package/dist/internal/engine/bindings/memory-recall-tool.js +2 -2
  36. package/dist/internal/engine/bindings/memory-reflection-resolve-tool.js +1 -1
  37. package/dist/internal/engine/bindings/memory-stats-tool.js +2 -2
  38. package/dist/internal/engine/bindings/memory-store-tool.js +4 -4
  39. package/dist/internal/engine/bindings/memory-tool-access.d.ts +1 -1
  40. package/dist/internal/engine/bindings/memory-tool-access.js +1 -1
  41. package/dist/internal/engine/bindings/memory-tool-results.d.ts +1 -1
  42. package/dist/internal/engine/bindings/memory-tool-results.js +1 -1
  43. package/dist/internal/engine/bindings/memory-tool-schemas.d.ts +5 -5
  44. package/dist/internal/engine/bindings/memory-tool-schemas.js +1 -1
  45. package/dist/internal/engine/bindings/memory-update-tool.js +3 -3
  46. package/dist/internal/engine/bindings/sno-station-mem-ambient-learning-hook.d.ts +4 -4
  47. package/dist/internal/engine/bindings/sno-station-mem-ambient-learning-hook.js +4 -4
  48. package/dist/internal/engine/bindings/sno-station-mem-auto-recall-hook.d.ts +4 -4
  49. package/dist/internal/engine/bindings/sno-station-mem-auto-recall-hook.js +3 -3
  50. package/dist/internal/engine/bindings/sno-station-mem-insight-distill-factory.d.ts +6 -6
  51. package/dist/internal/engine/bindings/sno-station-mem-insight-distill-factory.js +7 -5
  52. package/dist/internal/engine/bindings/sno-station-mem-message-transcript.js +2 -2
  53. package/dist/internal/engine/bindings/sno-station-mem-reset-hook.d.ts +3 -3
  54. package/dist/internal/engine/bindings/sno-station-mem-runtime-mode.d.ts +1 -1
  55. package/dist/internal/engine/bindings/sno-station-mem-runtime-mode.js +3 -3
  56. package/dist/internal/engine/extraction/atomic-memory-extraction.d.ts +1 -1
  57. package/dist/internal/engine/extraction/atomic-memory-extraction.js +1 -1
  58. package/dist/internal/engine/extraction/b-profile-section-dictionary-provider.d.ts +1 -1
  59. package/dist/internal/engine/extraction/b-profile-section-rekey.d.ts +5 -5
  60. package/dist/internal/engine/extraction/capture-policy-detector.d.ts +1 -1
  61. package/dist/internal/engine/extraction/memory-metadata-codec.d.ts +2 -2
  62. package/dist/internal/engine/extraction/memory-temporality-classifier.d.ts +1 -1
  63. package/dist/internal/engine/extraction/memory-temporality-classifier.js +1 -1
  64. package/dist/internal/engine/observability/adapter.d.ts +1 -1
  65. package/dist/internal/engine/observability/memory-snapshot.d.ts +1 -1
  66. package/dist/internal/engine/observability/observable-embedder.d.ts +1 -1
  67. package/dist/internal/engine/observability/observable-llm-client.d.ts +1 -1
  68. package/dist/internal/engine/observability/observable-llm-client.js +0 -2
  69. package/dist/internal/engine/observability/observable-memory-store.d.ts +1 -1
  70. package/dist/internal/engine/observability/observable-memory-store.js +2 -2
  71. package/dist/internal/engine/observability/observable-retriever.d.ts +1 -1
  72. package/dist/internal/engine/observability/observable-retriever.js +2 -2
  73. package/dist/internal/engine/observability/runtime-diagnostics.d.ts +1 -1
  74. package/dist/internal/engine/observability/runtime-diagnostics.js +3 -3
  75. package/dist/internal/engine/operations/daily-spend-estimator.js +1 -1
  76. package/dist/internal/engine/operations/memory-tier-promoter.d.ts +1 -1
  77. package/dist/internal/engine/operations/runtime-audit-log.d.ts +3 -3
  78. package/dist/internal/engine/operations/runtime-audit-log.js +2 -2
  79. package/dist/internal/engine/provider/provider-registration.d.ts +4 -4
  80. package/dist/internal/engine/provider/provider-row-renderer.d.ts +1 -1
  81. package/dist/internal/engine/reflection/reflection-command-hooks.d.ts +1 -1
  82. package/dist/internal/engine/reflection/reflection-command-hooks.js +1 -1
  83. package/dist/internal/engine/reflection/reflection-deps.d.ts +1 -1
  84. package/dist/internal/engine/reflection/reflection-embedded-generator.d.ts +1 -1
  85. package/dist/internal/engine/reflection/reflection-embedded-generator.js +1 -1
  86. package/dist/internal/engine/reflection/reflection-injection-hooks.d.ts +1 -1
  87. package/dist/internal/engine/reflection/reflection-injection-hooks.js +1 -1
  88. package/dist/internal/engine/reflection/reflection-lifecycle-hooks.d.ts +1 -1
  89. package/dist/internal/engine/reflection/reflection-lifecycle-hooks.js +1 -1
  90. package/dist/internal/engine/reflection/strategy-hook-runner.d.ts +3 -3
  91. package/dist/internal/engine/reflection/strategy-hook-runner.js +2 -2
  92. package/dist/internal/engine/rem/classifier.d.ts +1 -1
  93. package/dist/internal/engine/rem/index.d.ts +2 -2
  94. package/dist/internal/engine/rem/index.js +9 -7
  95. package/dist/internal/engine/retrieval/access-tracker.d.ts +1 -1
  96. package/dist/internal/engine/retrieval/retriever.d.ts +1 -1
  97. package/dist/internal/engine/retrieval/retriever.js +1 -1
  98. package/dist/internal/engine/security/memory-scope-policy.js +1 -1
  99. package/dist/internal/engine/security/scopes.js +2 -2
  100. package/dist/internal/engine/shared/memory-kind-policy.d.ts +1 -1
  101. package/dist/internal/engine/shared/paths.d.ts +2 -2
  102. package/dist/internal/engine/shared/types.d.ts +2 -2
  103. package/dist/internal/engine/shared/types.js +1 -1
  104. package/dist/internal/engine/shared/utils.d.ts +1 -1
  105. package/dist/internal/engine/shared/utils.js +2 -3
  106. package/dist/internal/engine/telemetry/memory-telemetry-api.js +2 -2
  107. package/dist/internal/engine/telemetry/observe-ledger.d.ts +1 -1
  108. package/dist/internal/engine/telemetry/observe-ledger.js +46 -19
  109. package/dist/internal/model/llm-client.d.ts +2 -2
  110. package/dist/internal/model/llm-client.js +1 -1
  111. package/dist/internal/model/llm-mode-routing.d.ts +1 -1
  112. package/dist/internal/model/llm-mode-routing.js +1 -1
  113. package/dist/internal/store/atomic-memory-cutover-sql.js +1 -1
  114. package/dist/internal/store/connection.js +1 -1
  115. package/dist/internal/store/maintenance.d.ts +2 -2
  116. package/dist/internal/store/maintenance.js +444 -40
  117. package/dist/internal/store/memory-kinds-cutover-migrator.js +1 -1
  118. package/dist/internal/store/migrations.js +1 -1
  119. package/dist/internal/store/store.d.ts +2 -2
  120. package/dist/internal/store/store.js +1 -1
  121. package/dist/{llm-client-RqmOEQkg.d.ts → llm-client-BTaUVmDe.d.ts} +1 -1
  122. package/dist/{llm-client-fVrzPcyz.js → llm-client-ConEyQEs.js} +51 -12
  123. package/dist/{log-site-catalog.generated-By86ZBRB.js → log-site-catalog.generated-Dzgj9o5c.js} +230 -195
  124. package/dist/log-site-catalog.json +1 -1
  125. package/dist/{memory-kind-policy-BOGb8thm.d.ts → memory-kind-policy-ClQEXeOL.d.ts} +1 -1
  126. package/dist/{memory-metadata-codec-DcSqjbWR.d.ts → memory-metadata-codec-wVAuoKrG.d.ts} +1 -1
  127. package/dist/{memory-runtime-CbuNkL0G.js → memory-runtime-C8ZIW2WL.js} +495 -304
  128. package/dist/{memory-scope-policy-DICSCURA.js → memory-scope-policy--TiLZnrE.js} +2 -2
  129. package/dist/{memory-snapshot-C5BnJ2rO.d.ts → memory-snapshot-uTdxJnIh.d.ts} +2 -2
  130. package/dist/{memory-store-base-z593oJ4h.d.ts → memory-store-base-Bk2dOKED.d.ts} +5 -6
  131. package/dist/{memory-store-shared-DqpWJXZZ.js → memory-store-shared-CURizQIy.js} +1 -1
  132. package/dist/{memory-telemetry-receipts-YsxbwOAf.js → memory-telemetry-receipts-cjIQGwdp.js} +5 -1
  133. package/dist/{memory-temporality-classifier-SzlUCgTj.d.ts → memory-temporality-classifier-CcxfHYoT.d.ts} +1 -1
  134. package/dist/{memory-temporality-classifier-CeSOL2vq.js → memory-temporality-classifier-MBJyJdvB.js} +2 -2
  135. package/dist/{memory-tier-promoter-Z7jprFB7.d.ts → memory-tier-promoter-MkZPQ8u1.d.ts} +1 -1
  136. package/dist/memory-tool-dependencies-CWnD5mia.d.ts +14 -0
  137. package/dist/{memory-tool-dependencies-CnaGABQG.js → memory-tool-dependencies-DUMY8SwB.js} +3 -3
  138. package/dist/{model-call-table-BZJQkbKX.js → model-call-table-BE97f37s.js} +6 -1
  139. package/dist/{observable-embedder-DjhGxHx2.d.ts → observable-embedder-CGr3Zejf.d.ts} +1 -1
  140. package/dist/{observable-llm-client-CLJLMmwA.d.ts → observable-llm-client-CXUA7Gi3.d.ts} +3 -3
  141. package/dist/{observable-memory-store-B48HV2NK.d.ts → observable-memory-store-BwwKcUzf.d.ts} +4 -4
  142. package/dist/{observable-retriever-CAdHncKh.d.ts → observable-retriever-bJbG9WtJ.d.ts} +5 -5
  143. package/dist/paths-DmmPxD_v.d.ts +1 -0
  144. package/dist/{plugin-config-schema-VBSPGEG3.d.ts → plugin-config-schema-BrhMvnXJ.d.ts} +3 -1
  145. package/dist/{plugin-config-schema-hIfZTELX.js → plugin-config-schema-Di-uKTP0.js} +1 -1
  146. package/dist/{profile-CQNCtVIu.d.ts → profile-CF5oDjR7.d.ts} +1 -1
  147. package/dist/{profile-section-writer-joJEIYhF.js → profile-section-writer-CmNa95uN.js} +3 -3
  148. package/dist/{reflection-command-hooks-Cl0ShtbF.d.ts → reflection-command-hooks-CM2mWb69.d.ts} +4 -4
  149. package/dist/{reflection-command-hooks-CG8n1GNK.js → reflection-command-hooks-CnTj8cKL.js} +3 -3
  150. package/dist/{reflection-deps-B0_cPBZt.d.ts → reflection-deps-B5I0nYZS.d.ts} +2 -2
  151. package/dist/{reflection-embedded-generator-C5kA0T0v.d.ts → reflection-embedded-generator-CogQIBcG.d.ts} +3 -3
  152. package/dist/{reflection-embedded-generator-D342_5o_.js → reflection-embedded-generator-DR525Moy.js} +1 -1
  153. package/dist/{reflection-injection-hooks-CtgcjLGx.d.ts → reflection-injection-hooks-BnbfZqpj.d.ts} +4 -4
  154. package/dist/{reflection-lifecycle-hooks-Pd7P9wya.d.ts → reflection-lifecycle-hooks-DMDhtidj.d.ts} +3 -3
  155. package/dist/{rem-batch-executor-ryxxkzQp.js → rem-batch-executor-DbV8Y-B-.js} +1 -1
  156. package/dist/{rem-consumer-retrieval-CR0dtcHR.js → rem-consumer-retrieval-CDMSCJYI.js} +2 -1
  157. package/dist/{rem-trigger-Dz_Jrr9p.js → rem-trigger-BSrGyG0s.js} +1666 -1010
  158. package/dist/{retriever-BXQmJMh0.js → retriever-Bzz6H8Mn.js} +2 -2
  159. package/dist/{retriever-DQdyGlkr.d.ts → retriever-DyxY59Lg.d.ts} +10 -8
  160. package/dist/{runtime-audit-log-BCeujlEp.js → runtime-audit-log-DK6xAYxh.js} +103 -2
  161. package/dist/{runtime-audit-log-Bn3JLBPj.d.ts → runtime-audit-log-DdhLlTxi.d.ts} +4 -2
  162. package/dist/{scopes-CSOn6zdd.js → scopes-a4Kly9n7.js} +1 -1
  163. package/dist/{server-DFLEPkQA.js → server-CjwHZY1P.js} +17 -320
  164. package/dist/sidecar/main.js +11 -4
  165. package/dist/sno-station-mem-runtime-dependencies-BZjUo6Jr.d.ts +31 -0
  166. package/dist/{sno-station-mem-runtime-dependencies-CY-XDHxU.js → sno-station-mem-runtime-dependencies-DlvM6mL7.js} +9 -9
  167. package/dist/{store-DKndKig1.d.ts → store-BDIAl2cc.d.ts} +1 -1
  168. package/dist/{store-CUk-jEGA.js → store-BQxkgJTX.js} +31 -23
  169. package/dist/{strategy-hook-runner-BSk_o6Yt.d.ts → strategy-hook-runner-DT9emgCZ.d.ts} +7 -7
  170. package/dist/{strategy-hook-runner-CWApiUZW.js → strategy-hook-runner-SvyyGBXw.js} +1 -1
  171. package/dist/{types-Del9J7UB.d.ts → types-Ae3a8562.d.ts} +1 -1
  172. package/dist/{utils-Ctb9aevJ.d.ts → utils-CDw2ttQf.d.ts} +2 -3
  173. package/package.json +2 -2
  174. package/settings.default.json +4 -4
  175. package/dist/memory-tool-dependencies-CJNppsKh.d.ts +0 -14
  176. package/dist/paths-D3dEsoE4.d.ts +0 -1
  177. package/dist/sno-station-mem-runtime-dependencies-8CRIkARK.d.ts +0 -31
  178. package/dist/{unplaced-candidate-migration-CbQHzcEM.js → unplaced-candidate-migration-BCcdQkcx.js} +1 -1
@@ -1,5 +1,5 @@
1
- import { $ as compareMemorySourceOrder, $t as ATOMIC_EXTRACTION_SKILL, A as recordTokenCounter, At as classifyLlmFailure, B as validateMemoryTelemetryMetadata, Bt as truncateGraphemes, C as resolveHookAgentId, Ct as createScopePolicy, D as closeAtomicArrivalRetirementTargets, Dt as createLlmClient, E as recordAtomicEntityIdentityJournal, F as AtomicExtractionCompletedElsewhere, Ft as clamp01, Gt as normalizeIsoDateTimeString, H as readChunkVecTableState, Ht as buildInsightMetadata, I as normalizeMemoryRelationPredicate, It as clampInt, J as orderAdapterAPair, Jt as AGGREGATION_OPERATIONS, K as adapterAViewFromRecord, Kt as parseIsoDateTimeMs, L as MemoryStore, Lt as stableHash, M as canonicalizeProfileSectionName, Mt as CODING_SKIN_LEDGER_MAX_CHARS, N as normalizeTopicToSectionName, Nt as CODING_SKIN_SESSION_QUERY, O as journalAtomicArrivalRetirementRefusal, Ot as isTerminalLlmFailure, P as getSnoStationMemDataDir, Pt as HOST_MODEL_DEADLINE_HEADER, Q as renderAdapterAPrompt, Qt as resolveLlmRoute, R as StaleSupersedeTargetError, Rt as stripHtmlTags, S as resolveTaskLifecycleEffectiveTime, St as MemoryScopePolicy, T as normalizeEntityName, Tt as LlmClientTerminalError, U as loadSqliteVecExtension, Ut as parseInsightMetadata, V as randomUUID$1, Vt as redactSecrets, Wt as stringifyInsightMetadata, X as prospectiveProfileView, Xt as normalizeCategory, Y as parseAdapterAChatVerdict, Yt as MEMORY_CATEGORIES, Z as renderAdapterAChatPrompt, Zt as pickLlmRoutingConfig, _ as findUniqueActiveTaskByDescription, _n as memoryFileWrite, _t as ALL_RESOURCES, an as relations, at as runWithMemoryAudit, b as admitTaskLifecycleAssertion, bn as forwardObserveLedgerUntilIdle, bt as SnoStationMemError, cn as isCalendarLabel, d as MemoryRetriever, dn as MEMORY_TELEMETRY_DELETE_REASONS, dt as resolveMemoryDate, en as ATOMIC_EXTRACTION_SKILL_HASH, et as readMemorySourceOrderOrOldest, f as DEFAULT_RETRIEVAL_CONFIG, fn as isMemoryTelemetryEventType, ft as unresolvedMemoryDate, g as buildTaskLifecycleCandidateSet, gn as checkMemoryOperation, gt as normalizeAmbientLearningText, h as acceptsTaskLifecycleJudgment, hn as openSqliteDatabaseReadonly, ht as stripEnvelopeMetadata, in as state_vocabulary_default, j as canExtractorWrite, jt as isTerminalLlmFailure$1, k as readAtomicArrivalRetirementCandidateSet, kt as withProviderResponses, ln as sessionZoneCarriedBy, lt as parseSessionTimestamp, m as Embedder, mn as openSqliteDatabase, mt as buildIndexedText, nn as modelReplyJsonCandidates, on as calculateCalendarTime, ot as runWithMemoryAuditSync, p as AccessTracker, pn as initSqliteRuntime, pt as boundSectionContent, q as isAdapterAVerdictReply, qt as deriveFactKey, rn as readModelReplyJson, rt as currentMutationAttemptId, sn as calendarInstructionSchema, st as runWithMutationAttempt, t as evaluateRemAutomaticTriggers, tn as atomicExtractionSkillReference, tt as appendAuditEntry, un as attribute_dictionary_default, ut as serializeIntervalMetadata, v as resolveTaskLifecycle, vn as memoryOperationSignal, vt as RESOURCES_BY_LOCALE, w as listAtomicMemoryEntityCandidates, wt as parseAgentIdFromSessionKey, x as buildTaskLifecycleCommandClaim, xt as StorageError, y as taskLifecycleCandidateSetVersion, yn as withMemoryOperation, yt as RetrievalError, z as TaskLifecycleStaleResolutionError, zt as stripRoleLabelPrefix } from "./rem-trigger-Dz_Jrr9p.js";
2
- import { A as SESSION_STRATEGIES, An as DEFAULT_REFLECTION_SESSION_TTL_MS, Bn as FTS_MERGE_INTERVAL_MS, Bt as FIXED_PROTOCOL_VALUE_64, C as getSnoStationMemStateDir, D as settingsToPluginConfig, E as defaultSettings, En as DEFAULT_IMPORTANCE, F as extractionConfigSchema, Ft as FIXED_MEMORY_SNO_EXTRACT_CHAT, Gn as INTEGRITY_CHECK_INTERVAL_MS, Ht as FIXED_PROTOCOL_VALUE_66, I as memoryReflectionConfigSchema, It as FIXED_MEMORY_SNO_EXTRACT_PROFILE, L as selfImprovementConfigSchema, M as isObserveAgentId, N as observeAgentId, Nt as FIXED_MEMORY_ROW_PATH_PATTERN, O as MODEL_CALLS, On as DEFAULT_RECALL_TOKEN_BUDGET, P as observeConfigSchema, Pt as FIXED_MEMORY_SNO_AI_EXTRACT, Qn as MAX_CANDIDATE_POOL_SIZE, Qt as FIXED_PROTOCOL_VALUE_79, R as sessionMemoryConfigSchema, T as readSettings, Ut as FIXED_PROTOCOL_VALUE_67, Vt as FIXED_PROTOCOL_VALUE_65, Wt as FIXED_PROTOCOL_VALUE_68, Xn as MAINTENANCE_TICK_MS, Xt as FIXED_PROTOCOL_VALUE_77, Yt as FIXED_PROTOCOL_VALUE_76, Zn as MAX_AGGREGATION_RESULT_TOKENS, Zt as FIXED_PROTOCOL_VALUE_78, _r as USAGE_OUTBOX_INTERVAL_MS, an as embeddingConfigSchema, b as getPrincipal, cn as isSupportedLocale, dn as ATOMIC_CAPTURE_OUTPUT_TOKEN_BUDGET, er as MAX_LIST_LIMIT, fn as ATOMIC_CAPTURE_TIMEOUT_MS, gn as BACKUP_MIN_FREE_DISK_RATIO, gr as USAGE_EVENT_RETENTION_INTERVAL_MS, h as readMaintenanceOverrides, hn as BACKUP_INTERVAL_MS, in as PERSISTED_PROVIDER_SYSTEM, j as retrievalConfigSchema, k as modelCallDestination, kn as DEFAULT_REFLECTION_ERROR_SCAN_MAX_CHARS, mn as ATOMIC_EXTRACTION_MAX_INPUT_TOKENS, mr as SNO_OBSERVE_FLUSH_TIMEOUT_MS, n as MEMORY_USAGE_FLUSH_INTERVAL_MS, qt as FIXED_PROTOCOL_VALUE_74, rr as MIN_RECALL_TOKEN_BUDGET, sr as PLANNER_STATISTICS_INTERVAL_MS, ur as REM_TRIGGER_CHECK_INTERVAL_MS, w as getStateDir, x as getSettingsPath, xr as recallLifecycleSchema, zn as FORGET_QUERY_MIN_SCORE, zt as FIXED_PROTOCOL_VALUE_63 } from "./config-BCZRhUvW.js";
1
+ import { $ as renderAdapterAChatPrompt, $t as MEMORY_CATEGORIES, A as journalAtomicArrivalRetirementRefusal, B as StaleSupersedeTargetError, Bt as debugContentPreview, C as buildTaskLifecycleCommandClaim, Cn as withMemoryOperation, Ct as withProviderResponses, D as normalizeEntityName, E as listAtomicMemoryEntityCandidates, Et as appendAuditEntry, F as normalizeTopicToSectionName, Ft as CODING_SKIN_LEDGER_MAX_CHARS, G as loadSqliteVecExtension, Gt as redactSecrets, H as validateMemoryTelemetryMetadata, Ht as stripHtmlTags, I as getSnoStationMemDataDir, It as CODING_SKIN_SESSION_QUERY, J as adapterAViewFromRecord, Jt as stringifyInsightMetadata, Kt as buildInsightMetadata, L as AtomicExtractionCompletedElsewhere, Lt as HOST_MODEL_DEADLINE_HEADER, M as recordTokenCounter, Mt as runWithMemoryAuditSync, N as canExtractorWrite, Nt as runWithMutationAttempt, O as recordAtomicEntityIdentityJournal, P as canonicalizeProfileSectionName, Q as prospectiveProfileView, Qt as AGGREGATION_OPERATIONS, R as normalizeMemoryRelationPredicate, Rt as clamp01, S as admitTaskLifecycleAssertion, Sn as memoryOperationSignal, St as isTerminalLlmFailure, T as resolveHookAgentId, Tt as isTerminalLlmFailure$1, U as randomUUID$1, Ut as stripRoleLabelPrefix, V as TaskLifecycleStaleResolutionError, Vt as stableHash, W as readChunkVecTableState, Wt as truncateGraphemes, X as orderAdapterAPair, Xt as parseIsoDateTimeMs, Y as isAdapterAVerdictReply, Yt as normalizeIsoDateTimeString, Z as parseAdapterAChatVerdict, Zt as deriveFactKey, _ as acceptsTaskLifecycleJudgment, _n as initSqliteRuntime, _t as createScopePolicy, an as atomicExtractionSkillReference, at as resolveMemoryDate, b as resolveTaskLifecycle, bn as checkMemoryOperation, cn as state_vocabulary_default, ct as buildIndexedText, dn as calendarInstructionSchema, dt as ALL_RESOURCES, en as normalizeCategory, et as renderAdapterAPrompt, fn as isCalendarLabel, ft as RESOURCES_BY_LOCALE, g as Embedder, gn as isMemoryTelemetryEventType, gt as MemoryScopePolicy, h as AccessTracker, hn as MEMORY_TELEMETRY_DELETE_REASONS, ht as StorageError, in as ATOMIC_EXTRACTION_SKILL_HASH, it as serializeIntervalMetadata, j as readAtomicArrivalRetirementCandidateSet, jt as runWithMemoryAudit, k as closeAtomicArrivalRetirementTargets, kt as currentMutationAttemptId, ln as relations, lt as stripEnvelopeMetadata, m as DEFAULT_RETRIEVAL_CONFIG, mn as attribute_dictionary_default, mt as SnoStationMemError, nn as resolveLlmRoute, nt as readMemorySourceOrderOrOldest, on as modelReplyJsonCandidates, ot as unresolvedMemoryDate, p as MemoryRetriever, pn as sessionZoneCarriedBy, pt as RetrievalError, qt as parseInsightMetadata, rn as ATOMIC_EXTRACTION_SKILL, rt as parseSessionTimestamp, sn as readModelReplyJson, st as boundSectionContent, t as evaluateRemAutomaticTriggers, tn as pickLlmRoutingConfig, tt as compareMemorySourceOrder, un as calculateCalendarTime, ut as normalizeAmbientLearningText, v as buildTaskLifecycleCandidateSet, vn as openSqliteDatabase, vt as parseAgentIdFromSessionKey, w as resolveTaskLifecycleEffectiveTime, wn as forwardObserveLedgerUntilIdle, wt as classifyLlmFailure, x as taskLifecycleCandidateSetVersion, xn as memoryFileWrite, xt as createLlmClient, y as findUniqueActiveTaskByDescription, yn as openSqliteDatabaseReadonly, yt as LlmClientTerminalError, z as MemoryStore, zt as clampInt } from "./rem-trigger-BSrGyG0s.js";
2
+ import { A as SESSION_STRATEGIES, An as DEFAULT_REFLECTION_SESSION_TTL_MS, Bn as FTS_MERGE_INTERVAL_MS, Bt as FIXED_PROTOCOL_VALUE_64, C as getSnoStationMemStateDir, D as settingsToPluginConfig, E as defaultSettings, En as DEFAULT_IMPORTANCE, F as extractionConfigSchema, Ft as FIXED_MEMORY_SNO_EXTRACT_CHAT, Gn as INTEGRITY_CHECK_INTERVAL_MS, Ht as FIXED_PROTOCOL_VALUE_66, I as memoryReflectionConfigSchema, It as FIXED_MEMORY_SNO_EXTRACT_PROFILE, L as selfImprovementConfigSchema, M as isObserveAgentId, N as observeAgentId, Nt as FIXED_MEMORY_ROW_PATH_PATTERN, O as MODEL_CALLS, On as DEFAULT_RECALL_TOKEN_BUDGET, P as observeConfigSchema, Pt as FIXED_MEMORY_SNO_AI_EXTRACT, Qn as MAX_CANDIDATE_POOL_SIZE, Qt as FIXED_PROTOCOL_VALUE_79, R as sessionMemoryConfigSchema, T as readSettings, Ut as FIXED_PROTOCOL_VALUE_67, Vt as FIXED_PROTOCOL_VALUE_65, Wt as FIXED_PROTOCOL_VALUE_68, Xn as MAINTENANCE_TICK_MS, Xt as FIXED_PROTOCOL_VALUE_77, Yt as FIXED_PROTOCOL_VALUE_76, Zn as MAX_AGGREGATION_RESULT_TOKENS, Zt as FIXED_PROTOCOL_VALUE_78, _r as USAGE_OUTBOX_INTERVAL_MS, an as embeddingConfigSchema, b as getPrincipal, cn as isSupportedLocale, dn as ATOMIC_CAPTURE_OUTPUT_TOKEN_BUDGET, er as MAX_LIST_LIMIT, fn as ATOMIC_CAPTURE_TIMEOUT_MS, gn as BACKUP_MIN_FREE_DISK_RATIO, gr as USAGE_EVENT_RETENTION_INTERVAL_MS, h as readMaintenanceOverrides, hn as BACKUP_INTERVAL_MS, in as PERSISTED_PROVIDER_SYSTEM, j as retrievalConfigSchema, k as modelCallDestination, kn as DEFAULT_REFLECTION_ERROR_SCAN_MAX_CHARS, mn as ATOMIC_EXTRACTION_MAX_INPUT_TOKENS, mr as SNO_OBSERVE_FLUSH_TIMEOUT_MS, n as MEMORY_USAGE_FLUSH_INTERVAL_MS, qt as FIXED_PROTOCOL_VALUE_74, rr as MIN_RECALL_TOKEN_BUDGET, sr as PLANNER_STATISTICS_INTERVAL_MS, ur as REM_TRIGGER_CHECK_INTERVAL_MS, w as getStateDir, x as getSettingsPath, xr as recallLifecycleSchema, zn as FORGET_QUERY_MIN_SCORE, zt as FIXED_PROTOCOL_VALUE_63 } from "./config-C7LzSWhG.js";
3
3
  import { n as DEGRADED_REASONS, t as ContractError } from "./error-D-wb-rZw.js";
4
4
  import { configureLogger, createLogger, currentLogContext, effectiveLogLevel, loggerFileStatus, privateLogReference, withLogContext } from "@snoai/utils/logger";
5
5
  import path, { basename, dirname, isAbsolute, join, posix, relative, resolve } from "node:path";
@@ -16,10 +16,10 @@ import { runIntegrityCheck } from "@snoai/sqlite-crypto";
16
16
  import { appendFile, link, lstat, mkdir, open, readFile, readdir, realpath, rm, stat, unlink, writeFile } from "node:fs/promises";
17
17
  import { Temporal } from "@js-temporal/polyfill";
18
18
  import { sanitizeContentIngress } from "@snoai/content-sanitizer";
19
+ import "node:readline";
19
20
  import "@sinclair/typebox";
20
21
  import { Semaphore } from "async-mutex";
21
22
  import { eld } from "eld/medium";
22
- import "node:readline";
23
23
  import { channel } from "node:diagnostics_channel";
24
24
  import "js-tiktoken";
25
25
  import { connect } from "node:net";
@@ -196,7 +196,7 @@ function addNumber(target, key, value) {
196
196
  }
197
197
  //#endregion
198
198
  //#region package.json
199
- var version = "1.2.9";
199
+ var version = "1.2.11";
200
200
  //#endregion
201
201
  //#region config/atomic-extraction-response.schema.json
202
202
  var atomic_extraction_response_schema_default = {
@@ -1057,7 +1057,7 @@ function fallbackAtomicCapturedFact(fact) {
1057
1057
  //#endregion
1058
1058
  //#region src/engine/observability/log-site-catalog.generated.ts
1059
1059
  const logSiteCatalog = {
1060
- "build_id": "83c1ad68062ce0cd0d7e4d48a14b38404ce5e55699713f12332b999e9f482f67",
1060
+ "build_id": "cfa0a6dc2622349a7cce144e91fc42d5d716fba04fbbad8133ae8a0627bc1150",
1061
1061
  "sites": {
1062
1062
  "memory.recall.budget.checked": {
1063
1063
  "file": "packages/memory/src/engine/bindings/memory-recall-tool.ts",
@@ -1146,30 +1146,30 @@ const logSiteCatalog = {
1146
1146
  "plugin.sno-station-mem-insight-distill-factory.buildInsightDistiller.8b084be5ca": {
1147
1147
  "file": "packages/memory/src/engine/bindings/sno-station-mem-insight-distill-factory.ts",
1148
1148
  "function": "buildInsightDistiller",
1149
- "line": 50,
1149
+ "line": 52,
1150
1150
  "column": 3,
1151
- "file_hash": "c8718a4fe10ce5857ee97ecc0ea0e595c27144c0ecec2b72a6c554634628a264"
1151
+ "file_hash": "94f127acf2405b98116454794b6441ebec5c0ee6dd57be7982746e863cfc81a3"
1152
1152
  },
1153
1153
  "plugin.sno-station-mem-insight-distill-factory.buildInsightDistiller.6cdc733c64": {
1154
1154
  "file": "packages/memory/src/engine/bindings/sno-station-mem-insight-distill-factory.ts",
1155
1155
  "function": "buildInsightDistiller",
1156
- "line": 57,
1156
+ "line": 59,
1157
1157
  "column": 3,
1158
- "file_hash": "c8718a4fe10ce5857ee97ecc0ea0e595c27144c0ecec2b72a6c554634628a264"
1158
+ "file_hash": "94f127acf2405b98116454794b6441ebec5c0ee6dd57be7982746e863cfc81a3"
1159
1159
  },
1160
1160
  "sno-station-mem-insight-distill-factory.buildInsightDistiller.847c5ab779": {
1161
1161
  "file": "packages/memory/src/engine/bindings/sno-station-mem-insight-distill-factory.ts",
1162
1162
  "function": "buildInsightDistiller",
1163
- "line": 61,
1163
+ "line": 63,
1164
1164
  "column": 3,
1165
- "file_hash": "c8718a4fe10ce5857ee97ecc0ea0e595c27144c0ecec2b72a6c554634628a264"
1165
+ "file_hash": "94f127acf2405b98116454794b6441ebec5c0ee6dd57be7982746e863cfc81a3"
1166
1166
  },
1167
1167
  "plugin.sno-station-mem-insight-distill-factory.buildInsightDistiller.888f96bfef": {
1168
1168
  "file": "packages/memory/src/engine/bindings/sno-station-mem-insight-distill-factory.ts",
1169
1169
  "function": "buildInsightDistiller",
1170
- "line": 112,
1170
+ "line": 114,
1171
1171
  "column": 3,
1172
- "file_hash": "c8718a4fe10ce5857ee97ecc0ea0e595c27144c0ecec2b72a6c554634628a264"
1172
+ "file_hash": "94f127acf2405b98116454794b6441ebec5c0ee6dd57be7982746e863cfc81a3"
1173
1173
  },
1174
1174
  "plugin.sno-station-mem-runtime-mode.runObserveLifecycleTask.d1856ccb13": {
1175
1175
  "file": "packages/memory/src/engine/bindings/sno-station-mem-runtime-mode.ts",
@@ -1272,142 +1272,142 @@ const logSiteCatalog = {
1272
1272
  "extraction.atomic-generic-extractor.enrichAtomicBatch": {
1273
1273
  "file": "packages/memory/src/engine/extraction/atomic-generic-extractor.ts",
1274
1274
  "function": "enrichAtomicBatch",
1275
- "line": 238,
1275
+ "line": 248,
1276
1276
  "column": 3,
1277
- "file_hash": "98658c78634ae9cd61e05173ea28d763a597d9496de5f2524b663c581a2acd9a"
1277
+ "file_hash": "163e508b5a43727e232340be6970864a540cb3ef92d4e320b9474e0163730534"
1278
1278
  },
1279
1279
  "extraction.atomic-generic-extractor.runAtomicNumericTurnSweep.7456414b06": {
1280
1280
  "file": "packages/memory/src/engine/extraction/atomic-generic-extractor.ts",
1281
1281
  "function": "runAtomicNumericTurnSweep",
1282
- "line": 463,
1282
+ "line": 473,
1283
1283
  "column": 3,
1284
- "file_hash": "98658c78634ae9cd61e05173ea28d763a597d9496de5f2524b663c581a2acd9a"
1284
+ "file_hash": "163e508b5a43727e232340be6970864a540cb3ef92d4e320b9474e0163730534"
1285
1285
  },
1286
1286
  "extraction.atomic-generic-extractor.runAtomicNumericTurnSweep.a373dfa454": {
1287
1287
  "file": "packages/memory/src/engine/extraction/atomic-generic-extractor.ts",
1288
1288
  "function": "runAtomicNumericTurnSweep",
1289
- "line": 471,
1289
+ "line": 481,
1290
1290
  "column": 3,
1291
- "file_hash": "98658c78634ae9cd61e05173ea28d763a597d9496de5f2524b663c581a2acd9a"
1291
+ "file_hash": "163e508b5a43727e232340be6970864a540cb3ef92d4e320b9474e0163730534"
1292
1292
  },
1293
1293
  "extraction.atomic-generic-extractor.runAtomicNumericTurnSweep.dc917b09a1": {
1294
1294
  "file": "packages/memory/src/engine/extraction/atomic-generic-extractor.ts",
1295
1295
  "function": "runAtomicNumericTurnSweep",
1296
- "line": 486,
1296
+ "line": 496,
1297
1297
  "column": 3,
1298
- "file_hash": "98658c78634ae9cd61e05173ea28d763a597d9496de5f2524b663c581a2acd9a"
1298
+ "file_hash": "163e508b5a43727e232340be6970864a540cb3ef92d4e320b9474e0163730534"
1299
1299
  },
1300
1300
  "extraction.atomic-generic-extractor.runAtomicNumericTurnSweep.5264647de8": {
1301
1301
  "file": "packages/memory/src/engine/extraction/atomic-generic-extractor.ts",
1302
1302
  "function": "runAtomicNumericTurnSweep",
1303
- "line": 495,
1303
+ "line": 505,
1304
1304
  "column": 3,
1305
- "file_hash": "98658c78634ae9cd61e05173ea28d763a597d9496de5f2524b663c581a2acd9a"
1305
+ "file_hash": "163e508b5a43727e232340be6970864a540cb3ef92d4e320b9474e0163730534"
1306
1306
  },
1307
1307
  "extraction.atomic-generic-extractor.runAtomicNumericTurnSweep.5f797c1175": {
1308
1308
  "file": "packages/memory/src/engine/extraction/atomic-generic-extractor.ts",
1309
1309
  "function": "runAtomicNumericTurnSweep",
1310
- "line": 571,
1310
+ "line": 581,
1311
1311
  "column": 3,
1312
- "file_hash": "98658c78634ae9cd61e05173ea28d763a597d9496de5f2524b663c581a2acd9a"
1312
+ "file_hash": "163e508b5a43727e232340be6970864a540cb3ef92d4e320b9474e0163730534"
1313
1313
  },
1314
1314
  "extraction.atomic-generic-extractor.runAtomicNumericTurnSweep.fdcb677e24": {
1315
1315
  "file": "packages/memory/src/engine/extraction/atomic-generic-extractor.ts",
1316
1316
  "function": "runAtomicNumericTurnSweep",
1317
- "line": 573,
1317
+ "line": 583,
1318
1318
  "column": 3,
1319
- "file_hash": "98658c78634ae9cd61e05173ea28d763a597d9496de5f2524b663c581a2acd9a"
1319
+ "file_hash": "163e508b5a43727e232340be6970864a540cb3ef92d4e320b9474e0163730534"
1320
1320
  },
1321
1321
  "extraction.atomic-generic-extractor.runAtomicGenericExtractionPass.cce4a719a3": {
1322
1322
  "file": "packages/memory/src/engine/extraction/atomic-generic-extractor.ts",
1323
1323
  "function": "captureAtomicWindow",
1324
- "line": 800,
1324
+ "line": 819,
1325
1325
  "column": 4,
1326
- "file_hash": "98658c78634ae9cd61e05173ea28d763a597d9496de5f2524b663c581a2acd9a"
1326
+ "file_hash": "163e508b5a43727e232340be6970864a540cb3ef92d4e320b9474e0163730534"
1327
1327
  },
1328
1328
  "extraction.atomic-generic-extractor.runAtomicGenericExtractionPass.98a701bd95": {
1329
1329
  "file": "packages/memory/src/engine/extraction/atomic-generic-extractor.ts",
1330
1330
  "function": "captureAtomicWindow",
1331
- "line": 824,
1331
+ "line": 843,
1332
1332
  "column": 3,
1333
- "file_hash": "98658c78634ae9cd61e05173ea28d763a597d9496de5f2524b663c581a2acd9a"
1333
+ "file_hash": "163e508b5a43727e232340be6970864a540cb3ef92d4e320b9474e0163730534"
1334
1334
  },
1335
1335
  "extraction.atomic-memory-extraction.extractAndPersist.7e1c9d2660": {
1336
1336
  "file": "packages/memory/src/engine/extraction/atomic-memory-extraction.ts",
1337
1337
  "function": "extractAndPersist",
1338
- "line": 699,
1338
+ "line": 720,
1339
1339
  "column": 4,
1340
- "file_hash": "5ecd44e633a4f433176757ac53d63660536224a00c26e56a0450cea0dcb8a993"
1340
+ "file_hash": "155293bf20505f110c69df5e852c49e67411c80b8b9fb3b8c5390b82e2fc47cc"
1341
1341
  },
1342
1342
  "memory.capture.completed": {
1343
1343
  "file": "packages/memory/src/engine/extraction/atomic-memory-extraction.ts",
1344
1344
  "function": "extractAndPersist",
1345
- "line": 852,
1345
+ "line": 877,
1346
1346
  "column": 4,
1347
- "file_hash": "5ecd44e633a4f433176757ac53d63660536224a00c26e56a0450cea0dcb8a993"
1347
+ "file_hash": "155293bf20505f110c69df5e852c49e67411c80b8b9fb3b8c5390b82e2fc47cc"
1348
1348
  },
1349
1349
  "extraction.atomic-memory-extraction.readStandingSubjectCandidates.b88c6fb3aa": {
1350
1350
  "file": "packages/memory/src/engine/extraction/atomic-memory-extraction.ts",
1351
1351
  "function": "readStandingSubjectCandidates",
1352
- "line": 990,
1352
+ "line": 1015,
1353
1353
  "column": 5,
1354
- "file_hash": "5ecd44e633a4f433176757ac53d63660536224a00c26e56a0450cea0dcb8a993"
1354
+ "file_hash": "155293bf20505f110c69df5e852c49e67411c80b8b9fb3b8c5390b82e2fc47cc"
1355
1355
  },
1356
1356
  "extraction.atomic-memory-extraction.reaskStandingSubjects.1288498dec": {
1357
1357
  "file": "packages/memory/src/engine/extraction/atomic-memory-extraction.ts",
1358
1358
  "function": "reaskStandingSubjects",
1359
- "line": 1244,
1359
+ "line": 1269,
1360
1360
  "column": 4,
1361
- "file_hash": "5ecd44e633a4f433176757ac53d63660536224a00c26e56a0450cea0dcb8a993"
1361
+ "file_hash": "155293bf20505f110c69df5e852c49e67411c80b8b9fb3b8c5390b82e2fc47cc"
1362
1362
  },
1363
1363
  "extraction.atomic-memory-extraction.reaskStandingSubjects.2b8785b171": {
1364
1364
  "file": "packages/memory/src/engine/extraction/atomic-memory-extraction.ts",
1365
1365
  "function": "reaskStandingSubjects",
1366
- "line": 1253,
1366
+ "line": 1278,
1367
1367
  "column": 2,
1368
- "file_hash": "5ecd44e633a4f433176757ac53d63660536224a00c26e56a0450cea0dcb8a993"
1368
+ "file_hash": "155293bf20505f110c69df5e852c49e67411c80b8b9fb3b8c5390b82e2fc47cc"
1369
1369
  },
1370
1370
  "extraction.atomic-memory-extraction.runAtomicMemoryExtraction.304a5a8d5c": {
1371
1371
  "file": "packages/memory/src/engine/extraction/atomic-memory-extraction.ts",
1372
1372
  "function": "runAtomicMemoryExtraction",
1373
- "line": 1523,
1373
+ "line": 1548,
1374
1374
  "column": 3,
1375
- "file_hash": "5ecd44e633a4f433176757ac53d63660536224a00c26e56a0450cea0dcb8a993"
1375
+ "file_hash": "155293bf20505f110c69df5e852c49e67411c80b8b9fb3b8c5390b82e2fc47cc"
1376
1376
  },
1377
1377
  "extraction.atomic-memory-extraction.over_token_ceiling": {
1378
1378
  "file": "packages/memory/src/engine/extraction/atomic-memory-extraction.ts",
1379
1379
  "function": "runAtomicMemoryExtraction",
1380
- "line": 1605,
1380
+ "line": 1630,
1381
1381
  "column": 3,
1382
- "file_hash": "5ecd44e633a4f433176757ac53d63660536224a00c26e56a0450cea0dcb8a993"
1382
+ "file_hash": "155293bf20505f110c69df5e852c49e67411c80b8b9fb3b8c5390b82e2fc47cc"
1383
1383
  },
1384
1384
  "extraction.atomic-memory-extraction.runAtomicMemoryExtraction.0d9673d494": {
1385
1385
  "file": "packages/memory/src/engine/extraction/atomic-memory-extraction.ts",
1386
1386
  "function": "runAtomicMemoryExtraction",
1387
- "line": 1672,
1387
+ "line": 1704,
1388
1388
  "column": 4,
1389
- "file_hash": "5ecd44e633a4f433176757ac53d63660536224a00c26e56a0450cea0dcb8a993"
1389
+ "file_hash": "155293bf20505f110c69df5e852c49e67411c80b8b9fb3b8c5390b82e2fc47cc"
1390
1390
  },
1391
1391
  "memory.extraction.window.completed": {
1392
1392
  "file": "packages/memory/src/engine/extraction/atomic-memory-extraction.ts",
1393
1393
  "function": "runAtomicMemoryExtraction",
1394
- "line": 1695,
1394
+ "line": 1730,
1395
1395
  "column": 3,
1396
- "file_hash": "5ecd44e633a4f433176757ac53d63660536224a00c26e56a0450cea0dcb8a993"
1396
+ "file_hash": "155293bf20505f110c69df5e852c49e67411c80b8b9fb3b8c5390b82e2fc47cc"
1397
1397
  },
1398
1398
  "extraction.atomic-memory-extraction.judgeArrivalRetirementPair.call_failed": {
1399
1399
  "file": "packages/memory/src/engine/extraction/atomic-memory-extraction.ts",
1400
1400
  "function": "judgeArrivalRetirementPair",
1401
- "line": 1732,
1401
+ "line": 1767,
1402
1402
  "column": 3,
1403
- "file_hash": "5ecd44e633a4f433176757ac53d63660536224a00c26e56a0450cea0dcb8a993"
1403
+ "file_hash": "155293bf20505f110c69df5e852c49e67411c80b8b9fb3b8c5390b82e2fc47cc"
1404
1404
  },
1405
1405
  "extraction.atomic-memory-extraction.judgeArrivalRetirementPair.reply_invalid": {
1406
1406
  "file": "packages/memory/src/engine/extraction/atomic-memory-extraction.ts",
1407
1407
  "function": "judgeArrivalRetirementPair",
1408
- "line": 1740,
1408
+ "line": 1775,
1409
1409
  "column": 3,
1410
- "file_hash": "5ecd44e633a4f433176757ac53d63660536224a00c26e56a0450cea0dcb8a993"
1410
+ "file_hash": "155293bf20505f110c69df5e852c49e67411c80b8b9fb3b8c5390b82e2fc47cc"
1411
1411
  },
1412
1412
  "extraction.atomic-progress-boundary.salvage_decisions": {
1413
1413
  "file": "packages/memory/src/engine/extraction/atomic-progress-boundary.ts",
@@ -1944,23 +1944,30 @@ const logSiteCatalog = {
1944
1944
  "memory.audit.append.failed": {
1945
1945
  "file": "packages/memory/src/engine/operations/runtime-audit-log.ts",
1946
1946
  "function": "enqueueAuditWrite",
1947
- "line": 297,
1947
+ "line": 307,
1948
1948
  "column": 4,
1949
- "file_hash": "0c6396aee17b5450a4a285cdaee2241a30f49e4a822899a8bd17554dbe939825"
1949
+ "file_hash": "07418176e3bf3f2379bc58bd9c34962cec64eea73d9c48c7008223e9d111b08e"
1950
+ },
1951
+ "memory.audit.compact.failed": {
1952
+ "file": "packages/memory/src/engine/operations/runtime-audit-log.ts",
1953
+ "function": "compactAuditLog",
1954
+ "line": 334,
1955
+ "column": 3,
1956
+ "file_hash": "07418176e3bf3f2379bc58bd9c34962cec64eea73d9c48c7008223e9d111b08e"
1950
1957
  },
1951
1958
  "memory.audit.detail.unknown": {
1952
1959
  "file": "packages/memory/src/engine/operations/runtime-audit-log.ts",
1953
1960
  "function": "prepareAuditEntry",
1954
- "line": 356,
1961
+ "line": 442,
1955
1962
  "column": 4,
1956
- "file_hash": "0c6396aee17b5450a4a285cdaee2241a30f49e4a822899a8bd17554dbe939825"
1963
+ "file_hash": "07418176e3bf3f2379bc58bd9c34962cec64eea73d9c48c7008223e9d111b08e"
1957
1964
  },
1958
1965
  "memory.audit.sync.failed": {
1959
1966
  "file": "packages/memory/src/engine/operations/runtime-audit-log.ts",
1960
1967
  "function": "appendAuditEntrySync",
1961
- "line": 406,
1968
+ "line": 493,
1962
1969
  "column": 3,
1963
- "file_hash": "0c6396aee17b5450a4a285cdaee2241a30f49e4a822899a8bd17554dbe939825"
1970
+ "file_hash": "07418176e3bf3f2379bc58bd9c34962cec64eea73d9c48c7008223e9d111b08e"
1964
1971
  },
1965
1972
  "memory.session.file.stat.failed": {
1966
1973
  "file": "packages/memory/src/engine/operations/session-summary-storage.ts",
@@ -2275,42 +2282,42 @@ const logSiteCatalog = {
2275
2282
  "function": "retrieve",
2276
2283
  "line": 41,
2277
2284
  "column": 3,
2278
- "file_hash": "4d3003c2fb293fb46140c7df579672c38d8c59863846d8fd92a065d2eaa99760"
2285
+ "file_hash": "23aa1ca28a758a8b5a14b83054e7f7ba6ba8d8cb332f0260461bcc4383c68263"
2279
2286
  },
2280
2287
  "memory.retrieval.completed": {
2281
2288
  "file": "packages/memory/src/engine/retrieval/retriever-execution.ts",
2282
2289
  "function": "retrieve",
2283
- "line": 173,
2290
+ "line": 174,
2284
2291
  "column": 4,
2285
- "file_hash": "4d3003c2fb293fb46140c7df579672c38d8c59863846d8fd92a065d2eaa99760"
2292
+ "file_hash": "23aa1ca28a758a8b5a14b83054e7f7ba6ba8d8cb332f0260461bcc4383c68263"
2286
2293
  },
2287
2294
  "memory.retrieval.failed": {
2288
2295
  "file": "packages/memory/src/engine/retrieval/retriever-execution.ts",
2289
2296
  "function": "retrieve",
2290
- "line": 185,
2297
+ "line": 186,
2291
2298
  "column": 4,
2292
- "file_hash": "4d3003c2fb293fb46140c7df579672c38d8c59863846d8fd92a065d2eaa99760"
2299
+ "file_hash": "23aa1ca28a758a8b5a14b83054e7f7ba6ba8d8cb332f0260461bcc4383c68263"
2293
2300
  },
2294
2301
  "memory.retrieval.traced.completed": {
2295
2302
  "file": "packages/memory/src/engine/retrieval/retriever-execution.ts",
2296
2303
  "function": "retrieveWithTrace",
2297
- "line": 260,
2304
+ "line": 262,
2298
2305
  "column": 4,
2299
- "file_hash": "4d3003c2fb293fb46140c7df579672c38d8c59863846d8fd92a065d2eaa99760"
2306
+ "file_hash": "23aa1ca28a758a8b5a14b83054e7f7ba6ba8d8cb332f0260461bcc4383c68263"
2300
2307
  },
2301
2308
  "memory.retrieval.traced.failed": {
2302
2309
  "file": "packages/memory/src/engine/retrieval/retriever-execution.ts",
2303
2310
  "function": "retrieveWithTrace",
2304
- "line": 268,
2311
+ "line": 270,
2305
2312
  "column": 4,
2306
- "file_hash": "4d3003c2fb293fb46140c7df579672c38d8c59863846d8fd92a065d2eaa99760"
2313
+ "file_hash": "23aa1ca28a758a8b5a14b83054e7f7ba6ba8d8cb332f0260461bcc4383c68263"
2307
2314
  },
2308
2315
  "memory.retrieval.tier.failed": {
2309
2316
  "file": "packages/memory/src/engine/retrieval/retriever-execution.ts",
2310
2317
  "function": "evaluateTopKTierTransitions",
2311
- "line": 337,
2318
+ "line": 339,
2312
2319
  "column": 5,
2313
- "file_hash": "4d3003c2fb293fb46140c7df579672c38d8c59863846d8fd92a065d2eaa99760"
2320
+ "file_hash": "23aa1ca28a758a8b5a14b83054e7f7ba6ba8d8cb332f0260461bcc4383c68263"
2314
2321
  },
2315
2322
  "retrieval.retriever-rerank.rerank.6fbc6b3a22": {
2316
2323
  "file": "packages/memory/src/engine/retrieval/retriever-rerank.ts",
@@ -2441,9 +2448,16 @@ const logSiteCatalog = {
2441
2448
  "memory-telemetry-events.<anonymous callback>.23cfef2d08": {
2442
2449
  "file": "packages/memory/src/engine/telemetry/memory-telemetry-events.ts",
2443
2450
  "function": "<anonymous callback>",
2444
- "line": 104,
2451
+ "line": 98,
2445
2452
  "column": 4,
2446
- "file_hash": "6d6fc8c3985f667d57a2f9701bffb62b5902b82f1ef52a68837de45644b82a9d"
2453
+ "file_hash": "af7b0b1639f5a7b8361c0c2821f1c1c7205611121adee5ae7aa3eb84189e5c58"
2454
+ },
2455
+ "memory.telemetry.signing.failed": {
2456
+ "file": "packages/memory/src/engine/telemetry/memory-telemetry-events.ts",
2457
+ "function": "writeReceiptEvent",
2458
+ "line": 117,
2459
+ "column": 4,
2460
+ "file_hash": "af7b0b1639f5a7b8361c0c2821f1c1c7205611121adee5ae7aa3eb84189e5c58"
2447
2461
  },
2448
2462
  "memory.usage.accept.failed": {
2449
2463
  "file": "packages/memory/src/engine/telemetry/memory-telemetry-outbox.ts",
@@ -2485,119 +2499,119 @@ const logSiteCatalog = {
2485
2499
  "function": "forwardObserveLedger",
2486
2500
  "line": 61,
2487
2501
  "column": 7,
2488
- "file_hash": "9374989d9fd58dfd7e9c4f3e56afd751009d927831139809082f7674b2d88bac"
2502
+ "file_hash": "749d13cc84a3adc40b3d67707ac6cc7552fd25c984fbddc48d51a766157b3939"
2489
2503
  },
2490
2504
  "shared.llm-client.resolveRequestTransport.8f631601af": {
2491
2505
  "file": "packages/memory/src/model/llm-client.ts",
2492
2506
  "function": "resolveRequestTransport",
2493
- "line": 375,
2507
+ "line": 399,
2494
2508
  "column": 4,
2495
- "file_hash": "a5d730eb7a668d1681770551488fc8cd860558df9d44bed6c96a99d292e08e34"
2509
+ "file_hash": "8a80c98ca7c0721edd7a9aaa79c56fc60f222cbf58b991281da832b8292b1fa2"
2496
2510
  },
2497
2511
  "shared.llm-client.resolveRequestTransport.ffa933b519": {
2498
2512
  "file": "packages/memory/src/model/llm-client.ts",
2499
2513
  "function": "resolveRequestTransport",
2500
- "line": 381,
2514
+ "line": 405,
2501
2515
  "column": 4,
2502
- "file_hash": "a5d730eb7a668d1681770551488fc8cd860558df9d44bed6c96a99d292e08e34"
2516
+ "file_hash": "8a80c98ca7c0721edd7a9aaa79c56fc60f222cbf58b991281da832b8292b1fa2"
2503
2517
  },
2504
2518
  "llm.host.request.completed": {
2505
2519
  "file": "packages/memory/src/model/llm-client.ts",
2506
2520
  "function": "requestContent",
2507
- "line": 430,
2521
+ "line": 455,
2508
2522
  "column": 6,
2509
- "file_hash": "a5d730eb7a668d1681770551488fc8cd860558df9d44bed6c96a99d292e08e34"
2523
+ "file_hash": "8a80c98ca7c0721edd7a9aaa79c56fc60f222cbf58b991281da832b8292b1fa2"
2510
2524
  },
2511
2525
  "llm.client.host_cancelled": {
2512
2526
  "file": "packages/memory/src/model/llm-client.ts",
2513
2527
  "function": "requestContent",
2514
- "line": 448,
2528
+ "line": 473,
2515
2529
  "column": 5,
2516
- "file_hash": "a5d730eb7a668d1681770551488fc8cd860558df9d44bed6c96a99d292e08e34"
2530
+ "file_hash": "8a80c98ca7c0721edd7a9aaa79c56fc60f222cbf58b991281da832b8292b1fa2"
2517
2531
  },
2518
2532
  "llm.client.host_error": {
2519
2533
  "file": "packages/memory/src/model/llm-client.ts",
2520
2534
  "function": "requestContent",
2521
- "line": 463,
2535
+ "line": 488,
2522
2536
  "column": 5,
2523
- "file_hash": "a5d730eb7a668d1681770551488fc8cd860558df9d44bed6c96a99d292e08e34"
2537
+ "file_hash": "8a80c98ca7c0721edd7a9aaa79c56fc60f222cbf58b991281da832b8292b1fa2"
2524
2538
  },
2525
2539
  "shared.llm-client.requestContent.ff17976562": {
2526
2540
  "file": "packages/memory/src/model/llm-client.ts",
2527
2541
  "function": "requestContent",
2528
- "line": 501,
2542
+ "line": 526,
2529
2543
  "column": 5,
2530
- "file_hash": "a5d730eb7a668d1681770551488fc8cd860558df9d44bed6c96a99d292e08e34"
2544
+ "file_hash": "8a80c98ca7c0721edd7a9aaa79c56fc60f222cbf58b991281da832b8292b1fa2"
2531
2545
  },
2532
2546
  "llm.client.raw_pipeline_failed": {
2533
2547
  "file": "packages/memory/src/model/llm-client.ts",
2534
2548
  "function": "requestContent",
2535
- "line": 524,
2549
+ "line": 549,
2536
2550
  "column": 5,
2537
- "file_hash": "a5d730eb7a668d1681770551488fc8cd860558df9d44bed6c96a99d292e08e34"
2551
+ "file_hash": "8a80c98ca7c0721edd7a9aaa79c56fc60f222cbf58b991281da832b8292b1fa2"
2538
2552
  },
2539
2553
  "llm.client.chat_pipeline_failed": {
2540
2554
  "file": "packages/memory/src/model/llm-client.ts",
2541
2555
  "function": "requestContent",
2542
- "line": 552,
2556
+ "line": 577,
2543
2557
  "column": 4,
2544
- "file_hash": "a5d730eb7a668d1681770551488fc8cd860558df9d44bed6c96a99d292e08e34"
2558
+ "file_hash": "8a80c98ca7c0721edd7a9aaa79c56fc60f222cbf58b991281da832b8292b1fa2"
2545
2559
  },
2546
2560
  "llm.client.empty_reply": {
2547
2561
  "file": "packages/memory/src/model/llm-client.ts",
2548
2562
  "function": "requestContent",
2549
- "line": 566,
2563
+ "line": 591,
2550
2564
  "column": 4,
2551
- "file_hash": "a5d730eb7a668d1681770551488fc8cd860558df9d44bed6c96a99d292e08e34"
2565
+ "file_hash": "8a80c98ca7c0721edd7a9aaa79c56fc60f222cbf58b991281da832b8292b1fa2"
2552
2566
  },
2553
2567
  "shared.llm-client.requestContentRetryingEmpty.cd874fefff": {
2554
2568
  "file": "packages/memory/src/model/llm-client.ts",
2555
2569
  "function": "requestContentRetryingEmpty",
2556
- "line": 607,
2570
+ "line": 634,
2557
2571
  "column": 5,
2558
- "file_hash": "a5d730eb7a668d1681770551488fc8cd860558df9d44bed6c96a99d292e08e34"
2572
+ "file_hash": "8a80c98ca7c0721edd7a9aaa79c56fc60f222cbf58b991281da832b8292b1fa2"
2559
2573
  },
2560
2574
  "llm.client.fallback.answered": {
2561
2575
  "file": "packages/memory/src/model/llm-client.ts",
2562
2576
  "function": "requestContentWithHostFallback",
2563
- "line": 660,
2577
+ "line": 690,
2564
2578
  "column": 6,
2565
- "file_hash": "a5d730eb7a668d1681770551488fc8cd860558df9d44bed6c96a99d292e08e34"
2579
+ "file_hash": "8a80c98ca7c0721edd7a9aaa79c56fc60f222cbf58b991281da832b8292b1fa2"
2566
2580
  },
2567
2581
  "llm.client.fallback.failed": {
2568
2582
  "file": "packages/memory/src/model/llm-client.ts",
2569
2583
  "function": "requestContentWithHostFallback",
2570
- "line": 677,
2584
+ "line": 707,
2571
2585
  "column": 3,
2572
- "file_hash": "a5d730eb7a668d1681770551488fc8cd860558df9d44bed6c96a99d292e08e34"
2586
+ "file_hash": "8a80c98ca7c0721edd7a9aaa79c56fc60f222cbf58b991281da832b8292b1fa2"
2573
2587
  },
2574
2588
  "llm.client.json.deadline_exhausted": {
2575
2589
  "file": "packages/memory/src/model/llm-client.ts",
2576
2590
  "function": "completeJson",
2577
- "line": 705,
2591
+ "line": 735,
2578
2592
  "column": 7,
2579
- "file_hash": "a5d730eb7a668d1681770551488fc8cd860558df9d44bed6c96a99d292e08e34"
2593
+ "file_hash": "8a80c98ca7c0721edd7a9aaa79c56fc60f222cbf58b991281da832b8292b1fa2"
2580
2594
  },
2581
2595
  "shared.llm-client.completeJson.e04c8e7e82": {
2582
2596
  "file": "packages/memory/src/model/llm-client.ts",
2583
2597
  "function": "completeJson",
2584
- "line": 721,
2598
+ "line": 751,
2585
2599
  "column": 5,
2586
- "file_hash": "a5d730eb7a668d1681770551488fc8cd860558df9d44bed6c96a99d292e08e34"
2600
+ "file_hash": "8a80c98ca7c0721edd7a9aaa79c56fc60f222cbf58b991281da832b8292b1fa2"
2587
2601
  },
2588
2602
  "llm.client.json.request_failed": {
2589
2603
  "file": "packages/memory/src/model/llm-client.ts",
2590
2604
  "function": "completeJson",
2591
- "line": 727,
2605
+ "line": 757,
2592
2606
  "column": 5,
2593
- "file_hash": "a5d730eb7a668d1681770551488fc8cd860558df9d44bed6c96a99d292e08e34"
2607
+ "file_hash": "8a80c98ca7c0721edd7a9aaa79c56fc60f222cbf58b991281da832b8292b1fa2"
2594
2608
  },
2595
2609
  "shared.llm-client.completeText.ffa933b519": {
2596
2610
  "file": "packages/memory/src/model/llm-client.ts",
2597
2611
  "function": "completeText",
2598
- "line": 750,
2612
+ "line": 780,
2599
2613
  "column": 5,
2600
- "file_hash": "a5d730eb7a668d1681770551488fc8cd860558df9d44bed6c96a99d292e08e34"
2614
+ "file_hash": "8a80c98ca7c0721edd7a9aaa79c56fc60f222cbf58b991281da832b8292b1fa2"
2601
2615
  },
2602
2616
  "llm.transport.request.completed": {
2603
2617
  "file": "packages/memory/src/model/llm-provider-transport.ts",
@@ -2625,7 +2639,7 @@ const logSiteCatalog = {
2625
2639
  "function": "<module>",
2626
2640
  "line": 20,
2627
2641
  "column": 3,
2628
- "file_hash": "fe128214b9e5234beb2929a3e3d1cc01e2df1968eb4063760df5ba3976daf042"
2642
+ "file_hash": "42d315fa1ae6cf990ca57b35a9942135a99457d561a89efce268750d10b9b45b"
2629
2643
  },
2630
2644
  "memory.sidecar.request.failed": {
2631
2645
  "file": "packages/memory/src/sidecar/memory-routes.ts",
@@ -2639,315 +2653,336 @@ const logSiteCatalog = {
2639
2653
  "function": "engineLog",
2640
2654
  "line": 62,
2641
2655
  "column": 2,
2642
- "file_hash": "0f7093edf0e9f0e6dc670bcfdcc7df602d8f87df31eaabbdb752acfcc72f7282"
2656
+ "file_hash": "35da43d808fe489030a9887a3d8838a5e125a4419376d9719a69b60e423d273c"
2657
+ },
2658
+ "memory.sidecar.pending_capture.pruned": {
2659
+ "file": "packages/memory/src/sidecar/memory-runtime.ts",
2660
+ "function": "constructor",
2661
+ "line": 115,
2662
+ "column": 15,
2663
+ "file_hash": "35da43d808fe489030a9887a3d8838a5e125a4419376d9719a69b60e423d273c"
2643
2664
  },
2644
2665
  "memory.sidecar.model.prepare.failed": {
2645
2666
  "file": "packages/memory/src/sidecar/memory-runtime.ts",
2646
2667
  "function": "prepareModel",
2647
- "line": 119,
2668
+ "line": 129,
2648
2669
  "column": 4,
2649
- "file_hash": "0f7093edf0e9f0e6dc670bcfdcc7df602d8f87df31eaabbdb752acfcc72f7282"
2670
+ "file_hash": "35da43d808fe489030a9887a3d8838a5e125a4419376d9719a69b60e423d273c"
2650
2671
  },
2651
- "memory.sidecar.pending_capture.failed": {
2672
+ "memory.sidecar.pending_capture.replay.failed": {
2652
2673
  "file": "packages/memory/src/sidecar/memory-runtime.ts",
2653
- "function": "replayPendingCaptures",
2654
- "line": 136,
2655
- "column": 5,
2656
- "file_hash": "0f7093edf0e9f0e6dc670bcfdcc7df602d8f87df31eaabbdb752acfcc72f7282"
2674
+ "function": "invoke",
2675
+ "line": 340,
2676
+ "column": 65,
2677
+ "file_hash": "35da43d808fe489030a9887a3d8838a5e125a4419376d9719a69b60e423d273c"
2657
2678
  },
2658
2679
  "memory.sidecar.usage.failed": {
2659
2680
  "file": "packages/memory/src/sidecar/memory-runtime.ts",
2660
2681
  "function": "<anonymous callback>",
2661
- "line": 427,
2682
+ "line": 460,
2662
2683
  "column": 5,
2663
- "file_hash": "0f7093edf0e9f0e6dc670bcfdcc7df602d8f87df31eaabbdb752acfcc72f7282"
2684
+ "file_hash": "35da43d808fe489030a9887a3d8838a5e125a4419376d9719a69b60e423d273c"
2664
2685
  },
2665
2686
  "rem-batch-executor.onStageError.d5f24d50d3": {
2666
2687
  "file": "packages/memory/src/sidecar/rem-batch-executor.ts",
2667
2688
  "function": "onStageError",
2668
- "line": 372,
2689
+ "line": 374,
2669
2690
  "column": 6,
2670
- "file_hash": "bc431f60c13a0dc770f975b073e41d4a27f4259eff6127e7f1781cc6c5523e27"
2691
+ "file_hash": "e9d0aca7158a1574da58485fdaa0ba369fe64c3bc7105650cb4863c88ac76612"
2671
2692
  },
2672
2693
  "rem-batch-executor.runRemBatchJobUnlocked.55c52b91cf": {
2673
2694
  "file": "packages/memory/src/sidecar/rem-batch-executor.ts",
2674
2695
  "function": "runRemBatchJobUnlocked",
2675
- "line": 510,
2696
+ "line": 521,
2676
2697
  "column": 5,
2677
- "file_hash": "bc431f60c13a0dc770f975b073e41d4a27f4259eff6127e7f1781cc6c5523e27"
2698
+ "file_hash": "e9d0aca7158a1574da58485fdaa0ba369fe64c3bc7105650cb4863c88ac76612"
2678
2699
  },
2679
2700
  "sidecar.batch.completed": {
2680
2701
  "file": "packages/memory/src/sidecar/rem-batch-executor.ts",
2681
2702
  "function": "runRemBatchJobUnlocked",
2682
- "line": 581,
2703
+ "line": 592,
2683
2704
  "column": 4,
2684
- "file_hash": "bc431f60c13a0dc770f975b073e41d4a27f4259eff6127e7f1781cc6c5523e27"
2705
+ "file_hash": "e9d0aca7158a1574da58485fdaa0ba369fe64c3bc7105650cb4863c88ac76612"
2685
2706
  },
2686
2707
  "rem-batch-executor.openBatchRuntime.86fa720e8f": {
2687
2708
  "file": "packages/memory/src/sidecar/rem-batch-executor.ts",
2688
2709
  "function": "openBatchRuntime",
2689
- "line": 647,
2710
+ "line": 658,
2690
2711
  "column": 3,
2691
- "file_hash": "bc431f60c13a0dc770f975b073e41d4a27f4259eff6127e7f1781cc6c5523e27"
2712
+ "file_hash": "e9d0aca7158a1574da58485fdaa0ba369fe64c3bc7105650cb4863c88ac76612"
2692
2713
  },
2693
2714
  "rem-batch-executor.onProviderResponse.df4f2d4fa1": {
2694
2715
  "file": "packages/memory/src/sidecar/rem-batch-executor.ts",
2695
2716
  "function": "onProviderResponse",
2696
- "line": 670,
2717
+ "line": 681,
2697
2718
  "column": 5,
2698
- "file_hash": "bc431f60c13a0dc770f975b073e41d4a27f4259eff6127e7f1781cc6c5523e27"
2719
+ "file_hash": "e9d0aca7158a1574da58485fdaa0ba369fe64c3bc7105650cb4863c88ac76612"
2699
2720
  },
2700
2721
  "rem-batch-executor.runUpdate.dbf2a836db": {
2701
2722
  "file": "packages/memory/src/sidecar/rem-batch-executor.ts",
2702
2723
  "function": "runUpdate",
2703
- "line": 929,
2724
+ "line": 939,
2704
2725
  "column": 3,
2705
- "file_hash": "bc431f60c13a0dc770f975b073e41d4a27f4259eff6127e7f1781cc6c5523e27"
2726
+ "file_hash": "e9d0aca7158a1574da58485fdaa0ba369fe64c3bc7105650cb4863c88ac76612"
2706
2727
  },
2707
2728
  "rem-batch-executor.runUpdate.7dfc387204": {
2708
2729
  "file": "packages/memory/src/sidecar/rem-batch-executor.ts",
2709
2730
  "function": "runUpdate",
2710
- "line": 1004,
2731
+ "line": 1017,
2711
2732
  "column": 4,
2712
- "file_hash": "bc431f60c13a0dc770f975b073e41d4a27f4259eff6127e7f1781cc6c5523e27"
2733
+ "file_hash": "e9d0aca7158a1574da58485fdaa0ba369fe64c3bc7105650cb4863c88ac76612"
2713
2734
  },
2714
2735
  "rem-batch-executor.runUpdate.7ffc737c24": {
2715
2736
  "file": "packages/memory/src/sidecar/rem-batch-executor.ts",
2716
2737
  "function": "runUpdate",
2717
- "line": 1048,
2738
+ "line": 1064,
2718
2739
  "column": 4,
2719
- "file_hash": "bc431f60c13a0dc770f975b073e41d4a27f4259eff6127e7f1781cc6c5523e27"
2740
+ "file_hash": "e9d0aca7158a1574da58485fdaa0ba369fe64c3bc7105650cb4863c88ac76612"
2720
2741
  },
2721
2742
  "rem-batch-executor.runReplace.e1e35e40e9": {
2722
2743
  "file": "packages/memory/src/sidecar/rem-batch-executor.ts",
2723
2744
  "function": "runReplace",
2724
- "line": 2371,
2745
+ "line": 2413,
2725
2746
  "column": 3,
2726
- "file_hash": "bc431f60c13a0dc770f975b073e41d4a27f4259eff6127e7f1781cc6c5523e27"
2747
+ "file_hash": "e9d0aca7158a1574da58485fdaa0ba369fe64c3bc7105650cb4863c88ac76612"
2727
2748
  },
2728
2749
  "rem-batch-executor.runReplace.de3a5f3ce3": {
2729
2750
  "file": "packages/memory/src/sidecar/rem-batch-executor.ts",
2730
2751
  "function": "runReplace",
2731
- "line": 2579,
2752
+ "line": 2621,
2732
2753
  "column": 4,
2733
- "file_hash": "bc431f60c13a0dc770f975b073e41d4a27f4259eff6127e7f1781cc6c5523e27"
2754
+ "file_hash": "e9d0aca7158a1574da58485fdaa0ba369fe64c3bc7105650cb4863c88ac76612"
2734
2755
  },
2735
2756
  "rem-batch-executor.runReplace.e4be8cfe8f": {
2736
2757
  "file": "packages/memory/src/sidecar/rem-batch-executor.ts",
2737
2758
  "function": "runReplace",
2738
- "line": 2825,
2759
+ "line": 2867,
2739
2760
  "column": 4,
2740
- "file_hash": "bc431f60c13a0dc770f975b073e41d4a27f4259eff6127e7f1781cc6c5523e27"
2761
+ "file_hash": "e9d0aca7158a1574da58485fdaa0ba369fe64c3bc7105650cb4863c88ac76612"
2741
2762
  },
2742
2763
  "memory.rem.refusal.release_failed": {
2743
2764
  "file": "packages/memory/src/sidecar/rem-batch-executor.ts",
2744
2765
  "function": "runReplace",
2745
- "line": 2951,
2766
+ "line": 2992,
2746
2767
  "column": 6,
2747
- "file_hash": "bc431f60c13a0dc770f975b073e41d4a27f4259eff6127e7f1781cc6c5523e27"
2768
+ "file_hash": "e9d0aca7158a1574da58485fdaa0ba369fe64c3bc7105650cb4863c88ac76612"
2748
2769
  },
2749
2770
  "rem-batch-executor.buildRemReplaceCandidateQueue.25aa1a67a6": {
2750
2771
  "file": "packages/memory/src/sidecar/rem-batch-executor.ts",
2751
2772
  "function": "buildRemReplaceCandidateQueue",
2752
- "line": 3172,
2773
+ "line": 3221,
2753
2774
  "column": 3,
2754
- "file_hash": "bc431f60c13a0dc770f975b073e41d4a27f4259eff6127e7f1781cc6c5523e27"
2775
+ "file_hash": "e9d0aca7158a1574da58485fdaa0ba369fe64c3bc7105650cb4863c88ac76612"
2755
2776
  },
2756
2777
  "rem-batch-executor.buildRemReplaceCandidateQueue.lookup_failed": {
2757
2778
  "file": "packages/memory/src/sidecar/rem-batch-executor.ts",
2758
2779
  "function": "buildRemReplaceCandidateQueue",
2759
- "line": 3254,
2780
+ "line": 3303,
2760
2781
  "column": 3,
2761
- "file_hash": "bc431f60c13a0dc770f975b073e41d4a27f4259eff6127e7f1781cc6c5523e27"
2782
+ "file_hash": "e9d0aca7158a1574da58485fdaa0ba369fe64c3bc7105650cb4863c88ac76612"
2762
2783
  },
2763
2784
  "rem-batch-executor.reserveReplaceStage.4e67e45fd5": {
2764
2785
  "file": "packages/memory/src/sidecar/rem-batch-executor.ts",
2765
2786
  "function": "reserveReplaceStage",
2766
- "line": 3701,
2787
+ "line": 3750,
2767
2788
  "column": 2,
2768
- "file_hash": "bc431f60c13a0dc770f975b073e41d4a27f4259eff6127e7f1781cc6c5523e27"
2789
+ "file_hash": "e9d0aca7158a1574da58485fdaa0ba369fe64c3bc7105650cb4863c88ac76612"
2790
+ },
2791
+ "rem-job-store.readCompletedJobs.invalid-line": {
2792
+ "file": "packages/memory/src/sidecar/rem-job-store.ts",
2793
+ "function": "readCompletedJobs",
2794
+ "line": 221,
2795
+ "column": 5,
2796
+ "file_hash": "a81d0a17a42dff1f164fccbbb446624f7cfa68e2c7823c760fcd678049c3c8da"
2769
2797
  },
2770
2798
  "rem-job-store.load.invalid-line": {
2771
2799
  "file": "packages/memory/src/sidecar/rem-job-store.ts",
2772
2800
  "function": "load",
2773
- "line": 316,
2801
+ "line": 329,
2774
2802
  "column": 5,
2775
- "file_hash": "e776f04d46e9e25fa74aea87a6074f7c8e34acd4362808f4ddfb675430e4927f"
2803
+ "file_hash": "a81d0a17a42dff1f164fccbbb446624f7cfa68e2c7823c760fcd678049c3c8da"
2776
2804
  },
2777
2805
  "rem.journal.failed": {
2778
2806
  "file": "packages/memory/src/sidecar/rem-job-store.ts",
2779
2807
  "function": "reportFailure",
2780
- "line": 366,
2808
+ "line": 419,
2781
2809
  "column": 3,
2782
- "file_hash": "e776f04d46e9e25fa74aea87a6074f7c8e34acd4362808f4ddfb675430e4927f"
2810
+ "file_hash": "a81d0a17a42dff1f164fccbbb446624f7cfa68e2c7823c760fcd678049c3c8da"
2783
2811
  },
2784
2812
  "memory.rem.trigger.state.unavailable": {
2785
2813
  "file": "packages/memory/src/sidecar/rem-trigger.ts",
2786
2814
  "function": "evaluateRemAutomaticTriggers",
2787
- "line": 141,
2815
+ "line": 143,
2788
2816
  "column": 3,
2789
- "file_hash": "3575c7bd5b92e71ab8f89db1a15f8cc5f50e052f440419dc59efbe99a4cf0e4d"
2817
+ "file_hash": "d9f3b0a31a68fa444b1401a235e8d781ebffd9b1c9345c66515d677240fdc584"
2790
2818
  },
2791
2819
  "rem-trigger.evaluateRemAutomaticTriggers.1d59077a5c": {
2792
2820
  "file": "packages/memory/src/sidecar/rem-trigger.ts",
2793
2821
  "function": "evaluateRemAutomaticTriggers",
2794
- "line": 169,
2822
+ "line": 171,
2795
2823
  "column": 4,
2796
- "file_hash": "3575c7bd5b92e71ab8f89db1a15f8cc5f50e052f440419dc59efbe99a4cf0e4d"
2824
+ "file_hash": "d9f3b0a31a68fa444b1401a235e8d781ebffd9b1c9345c66515d677240fdc584"
2797
2825
  },
2798
2826
  "rem-trigger.evaluateRemAutomaticTriggers.ebe1cdd204": {
2799
2827
  "file": "packages/memory/src/sidecar/rem-trigger.ts",
2800
2828
  "function": "evaluateRemAutomaticTriggers",
2801
- "line": 181,
2829
+ "line": 183,
2802
2830
  "column": 5,
2803
- "file_hash": "3575c7bd5b92e71ab8f89db1a15f8cc5f50e052f440419dc59efbe99a4cf0e4d"
2831
+ "file_hash": "d9f3b0a31a68fa444b1401a235e8d781ebffd9b1c9345c66515d677240fdc584"
2804
2832
  },
2805
2833
  "rem-trigger.evaluateRemAutomaticTriggers.46669e66ff": {
2806
2834
  "file": "packages/memory/src/sidecar/rem-trigger.ts",
2807
2835
  "function": "evaluateRemAutomaticTriggers",
2808
- "line": 191,
2836
+ "line": 193,
2809
2837
  "column": 5,
2810
- "file_hash": "3575c7bd5b92e71ab8f89db1a15f8cc5f50e052f440419dc59efbe99a4cf0e4d"
2838
+ "file_hash": "d9f3b0a31a68fa444b1401a235e8d781ebffd9b1c9345c66515d677240fdc584"
2811
2839
  },
2812
2840
  "memory.rem.trigger.state.write.failed": {
2813
2841
  "file": "packages/memory/src/sidecar/rem-trigger.ts",
2814
2842
  "function": "evaluateRemAutomaticTriggers",
2815
- "line": 212,
2843
+ "line": 214,
2816
2844
  "column": 18,
2817
- "file_hash": "3575c7bd5b92e71ab8f89db1a15f8cc5f50e052f440419dc59efbe99a4cf0e4d"
2845
+ "file_hash": "d9f3b0a31a68fa444b1401a235e8d781ebffd9b1c9345c66515d677240fdc584"
2818
2846
  },
2819
2847
  "sidecar.trigger.dispatch.accepted": {
2820
2848
  "file": "packages/memory/src/sidecar/rem-trigger.ts",
2821
2849
  "function": "dispatchRemWave",
2822
- "line": 340,
2850
+ "line": 352,
2823
2851
  "column": 3,
2824
- "file_hash": "3575c7bd5b92e71ab8f89db1a15f8cc5f50e052f440419dc59efbe99a4cf0e4d"
2852
+ "file_hash": "d9f3b0a31a68fa444b1401a235e8d781ebffd9b1c9345c66515d677240fdc584"
2853
+ },
2854
+ "sidecar.trigger.completion_jobs.read.failed": {
2855
+ "file": "packages/memory/src/sidecar/rem-trigger.ts",
2856
+ "function": "applyCompletedBaselines",
2857
+ "line": 387,
2858
+ "column": 3,
2859
+ "file_hash": "d9f3b0a31a68fa444b1401a235e8d781ebffd9b1c9345c66515d677240fdc584"
2825
2860
  },
2826
2861
  "sidecar.trigger.audit_read.failed": {
2827
2862
  "file": "packages/memory/src/sidecar/rem-trigger.ts",
2828
2863
  "function": "applyCompletedBaselines",
2829
- "line": 359,
2864
+ "line": 398,
2830
2865
  "column": 3,
2831
- "file_hash": "3575c7bd5b92e71ab8f89db1a15f8cc5f50e052f440419dc59efbe99a4cf0e4d"
2866
+ "file_hash": "d9f3b0a31a68fa444b1401a235e8d781ebffd9b1c9345c66515d677240fdc584"
2832
2867
  },
2833
2868
  "sidecar.trigger.audit_records.skipped": {
2834
2869
  "file": "packages/memory/src/sidecar/rem-trigger.ts",
2835
2870
  "function": "applyCompletedBaselines",
2836
- "line": 482,
2871
+ "line": 495,
2837
2872
  "column": 3,
2838
- "file_hash": "3575c7bd5b92e71ab8f89db1a15f8cc5f50e052f440419dc59efbe99a4cf0e4d"
2873
+ "file_hash": "d9f3b0a31a68fa444b1401a235e8d781ebffd9b1c9345c66515d677240fdc584"
2839
2874
  },
2840
2875
  "sidecar.duplicate.exit": {
2841
2876
  "file": "packages/memory/src/sidecar/server.ts",
2842
2877
  "function": "bindSidecarSocket",
2843
- "line": 141,
2878
+ "line": 142,
2844
2879
  "column": 6,
2845
- "file_hash": "c7a99e785b839d4f700e089fd71fe91ee36901ad9ded1a2629e52c48dd705e73"
2880
+ "file_hash": "d2b00aa94e2bd09f38d806331a87cd7bac4d10ea25db5b323ec470e45c1d8434"
2846
2881
  },
2847
2882
  "server.<anonymous callback>.5eb5a60e6b": {
2848
2883
  "file": "packages/memory/src/sidecar/server.ts",
2849
2884
  "function": "<anonymous callback>",
2850
- "line": 200,
2885
+ "line": 201,
2851
2886
  "column": 3,
2852
- "file_hash": "c7a99e785b839d4f700e089fd71fe91ee36901ad9ded1a2629e52c48dd705e73"
2887
+ "file_hash": "d2b00aa94e2bd09f38d806331a87cd7bac4d10ea25db5b323ec470e45c1d8434"
2853
2888
  },
2854
2889
  "server.<anonymous callback>.47c4662916": {
2855
2890
  "file": "packages/memory/src/sidecar/server.ts",
2856
2891
  "function": "recordRequest",
2857
- "line": 236,
2892
+ "line": 237,
2858
2893
  "column": 4,
2859
- "file_hash": "c7a99e785b839d4f700e089fd71fe91ee36901ad9ded1a2629e52c48dd705e73"
2894
+ "file_hash": "d2b00aa94e2bd09f38d806331a87cd7bac4d10ea25db5b323ec470e45c1d8434"
2860
2895
  },
2861
2896
  "server.<anonymous callback>.a7a2656a08": {
2862
2897
  "file": "packages/memory/src/sidecar/server.ts",
2863
2898
  "function": "<anonymous callback>",
2864
- "line": 276,
2899
+ "line": 277,
2865
2900
  "column": 5,
2866
- "file_hash": "c7a99e785b839d4f700e089fd71fe91ee36901ad9ded1a2629e52c48dd705e73"
2901
+ "file_hash": "d2b00aa94e2bd09f38d806331a87cd7bac4d10ea25db5b323ec470e45c1d8434"
2867
2902
  },
2868
2903
  "sidecar.discovery.published": {
2869
2904
  "file": "packages/memory/src/sidecar/server.ts",
2870
2905
  "function": "publishDiscovery",
2871
- "line": 306,
2906
+ "line": 307,
2872
2907
  "column": 30,
2873
- "file_hash": "c7a99e785b839d4f700e089fd71fe91ee36901ad9ded1a2629e52c48dd705e73"
2908
+ "file_hash": "d2b00aa94e2bd09f38d806331a87cd7bac4d10ea25db5b323ec470e45c1d8434"
2874
2909
  },
2875
2910
  "sidecar.discovery.failed": {
2876
2911
  "file": "packages/memory/src/sidecar/server.ts",
2877
2912
  "function": "publishDiscovery",
2878
- "line": 311,
2913
+ "line": 312,
2879
2914
  "column": 4,
2880
- "file_hash": "c7a99e785b839d4f700e089fd71fe91ee36901ad9ded1a2629e52c48dd705e73"
2915
+ "file_hash": "d2b00aa94e2bd09f38d806331a87cd7bac4d10ea25db5b323ec470e45c1d8434"
2881
2916
  },
2882
2917
  "server.startLockedRemSidecar.96a92b085b": {
2883
2918
  "file": "packages/memory/src/sidecar/server.ts",
2884
2919
  "function": "startLockedRemSidecar",
2885
- "line": 334,
2920
+ "line": 335,
2886
2921
  "column": 2,
2887
- "file_hash": "c7a99e785b839d4f700e089fd71fe91ee36901ad9ded1a2629e52c48dd705e73"
2922
+ "file_hash": "d2b00aa94e2bd09f38d806331a87cd7bac4d10ea25db5b323ec470e45c1d8434"
2888
2923
  },
2889
2924
  "sidecar.shutdown.timeout": {
2890
2925
  "file": "packages/memory/src/sidecar/server.ts",
2891
2926
  "function": "startRemSidecar.stop",
2892
- "line": 369,
2927
+ "line": 370,
2893
2928
  "column": 7,
2894
- "file_hash": "c7a99e785b839d4f700e089fd71fe91ee36901ad9ded1a2629e52c48dd705e73"
2929
+ "file_hash": "d2b00aa94e2bd09f38d806331a87cd7bac4d10ea25db5b323ec470e45c1d8434"
2895
2930
  },
2896
2931
  "sidecar.shutdown.task.running": {
2897
2932
  "file": "packages/memory/src/sidecar/server.ts",
2898
2933
  "function": "startRemSidecar.stop",
2899
- "line": 377,
2934
+ "line": 378,
2900
2935
  "column": 8,
2901
- "file_hash": "c7a99e785b839d4f700e089fd71fe91ee36901ad9ded1a2629e52c48dd705e73"
2936
+ "file_hash": "d2b00aa94e2bd09f38d806331a87cd7bac4d10ea25db5b323ec470e45c1d8434"
2902
2937
  },
2903
2938
  "sidecar.shutdown.completed": {
2904
2939
  "file": "packages/memory/src/sidecar/server.ts",
2905
2940
  "function": "startRemSidecar.stop",
2906
- "line": 392,
2941
+ "line": 393,
2907
2942
  "column": 5,
2908
- "file_hash": "c7a99e785b839d4f700e089fd71fe91ee36901ad9ded1a2629e52c48dd705e73"
2943
+ "file_hash": "d2b00aa94e2bd09f38d806331a87cd7bac4d10ea25db5b323ec470e45c1d8434"
2909
2944
  },
2910
2945
  "server.routeRequest.0ea180a77c": {
2911
2946
  "file": "packages/memory/src/sidecar/server.ts",
2912
2947
  "function": "routeRequest",
2913
- "line": 474,
2948
+ "line": 475,
2914
2949
  "column": 3,
2915
- "file_hash": "c7a99e785b839d4f700e089fd71fe91ee36901ad9ded1a2629e52c48dd705e73"
2950
+ "file_hash": "d2b00aa94e2bd09f38d806331a87cd7bac4d10ea25db5b323ec470e45c1d8434"
2916
2951
  },
2917
2952
  "server.runChassisJob.e7639bd8fc": {
2918
2953
  "file": "packages/memory/src/sidecar/server.ts",
2919
2954
  "function": "runChassisJob",
2920
- "line": 676,
2955
+ "line": 677,
2921
2956
  "column": 6,
2922
- "file_hash": "c7a99e785b839d4f700e089fd71fe91ee36901ad9ded1a2629e52c48dd705e73"
2957
+ "file_hash": "d2b00aa94e2bd09f38d806331a87cd7bac4d10ea25db5b323ec470e45c1d8434"
2923
2958
  },
2924
2959
  "sidecar.job.completed": {
2925
2960
  "file": "packages/memory/src/sidecar/server.ts",
2926
2961
  "function": "runChassisJob",
2927
- "line": 701,
2962
+ "line": 702,
2928
2963
  "column": 4,
2929
- "file_hash": "c7a99e785b839d4f700e089fd71fe91ee36901ad9ded1a2629e52c48dd705e73"
2964
+ "file_hash": "d2b00aa94e2bd09f38d806331a87cd7bac4d10ea25db5b323ec470e45c1d8434"
2930
2965
  },
2931
2966
  "server.failNonTerminalJob.cf84e07c6d": {
2932
2967
  "file": "packages/memory/src/sidecar/server.ts",
2933
2968
  "function": "failNonTerminalJob",
2934
- "line": 771,
2969
+ "line": 773,
2935
2970
  "column": 3,
2936
- "file_hash": "c7a99e785b839d4f700e089fd71fe91ee36901ad9ded1a2629e52c48dd705e73"
2971
+ "file_hash": "d2b00aa94e2bd09f38d806331a87cd7bac4d10ea25db5b323ec470e45c1d8434"
2937
2972
  },
2938
2973
  "server.recoverInterruptedJobs.15309ea841": {
2939
2974
  "file": "packages/memory/src/sidecar/server.ts",
2940
2975
  "function": "recoverInterruptedJobs",
2941
- "line": 806,
2976
+ "line": 808,
2942
2977
  "column": 4,
2943
- "file_hash": "c7a99e785b839d4f700e089fd71fe91ee36901ad9ded1a2629e52c48dd705e73"
2978
+ "file_hash": "d2b00aa94e2bd09f38d806331a87cd7bac4d10ea25db5b323ec470e45c1d8434"
2944
2979
  },
2945
2980
  "sidecar.operation.failed": {
2946
2981
  "file": "packages/memory/src/sidecar/server.ts",
2947
2982
  "function": "reportSidecarFailure",
2948
- "line": 982,
2983
+ "line": 986,
2949
2984
  "column": 2,
2950
- "file_hash": "c7a99e785b839d4f700e089fd71fe91ee36901ad9ded1a2629e52c48dd705e73"
2985
+ "file_hash": "d2b00aa94e2bd09f38d806331a87cd7bac4d10ea25db5b323ec470e45c1d8434"
2951
2986
  },
2952
2987
  "active-task-carrier-backfill.backfillActiveTaskCarriers.facdae917f": {
2953
2988
  "file": "packages/memory/src/store/active-task-carrier-backfill.ts",
@@ -5877,7 +5912,8 @@ async function retrieveForAutoRecall(retriever, input) {
5877
5912
  facetPolicy: "current-only",
5878
5913
  includeRefused: true,
5879
5914
  excludeInvalidatedBefore: input.nowMs,
5880
- excludeSuperseded: true
5915
+ excludeSuperseded: true,
5916
+ ...input.trackAccess === void 0 ? {} : { trackAccess: input.trackAccess }
5881
5917
  });
5882
5918
  const openRows = retrieved.filter((row) => isOpenRecallMetadata(row.entry.metadata));
5883
5919
  if (input.diagnostics) {
@@ -9202,7 +9238,8 @@ function parseBProfileMessages(conversationText) {
9202
9238
  * One logical task: one initial attempt plus at most one retry.
9203
9239
  *
9204
9240
  * The transport collapses "could not reach it" and "it answered with nothing" into a null
9205
- * completion, and both are retryable, as is a reply that fails either validation stage. A reply
9241
+ * completion; an empty answer ends the turn at once (asking again gets the same nothing), while
9242
+ * a connection failure or a reply that fails either validation stage is retried. A reply
9206
9243
  * that passes is never retried — including one whose candidates all dropped, which is a real
9207
9244
  * answer about that turn and not a failure to get one.
9208
9245
  */
@@ -9213,13 +9250,14 @@ async function extractOneTurn(prompt, llm, turnIndex, turnText) {
9213
9250
  raw = await llm.completeText({
9214
9251
  prompt,
9215
9252
  callId: "E9",
9216
- maxTokens: PROFILE_EXTRACTION_MAX_TOKENS
9253
+ maxTokens: PROFILE_EXTRACTION_MAX_TOKENS,
9254
+ emptyReplyAttempts: 1
9217
9255
  });
9218
9256
  } catch (error) {
9219
9257
  if (isRetryableTransportError(error)) continue;
9220
9258
  throw error;
9221
9259
  }
9222
- if (raw === null) continue;
9260
+ if (raw === null) return void 0;
9223
9261
  const outcome = readReply(raw, turnIndex, turnText);
9224
9262
  if (outcome) return outcome;
9225
9263
  }
@@ -9657,12 +9695,22 @@ function buildAtomicGenericExtractionPrompt(turns, sessionDateTime, locale = "en
9657
9695
  }
9658
9696
  function renderAtomicLaneContext(input) {
9659
9697
  const locale = input.locale ?? "en";
9698
+ const turns = numberAtomicTurns(input.turns);
9699
+ const preceding = [...input.contextTurns ?? []];
9700
+ const following = [...input.followingTurns ?? []];
9701
+ while (countTokens(JSON.stringify({
9702
+ turns,
9703
+ preceding,
9704
+ following
9705
+ })) > input.runParameters.maxInputTokens) if (preceding.length > 0) preceding.shift();
9706
+ else if (following.length > 0) following.pop();
9707
+ else break;
9660
9708
  return [
9661
9709
  `session_date_time: ${input.sessionDateTime ?? "unknown"}`,
9662
9710
  atomicExtractionSkillReference("surrounding-context"),
9663
- `preceding_context: ${renderAtomicPromptData(input.contextTurns ?? [], locale).value}`,
9664
- `following_context: ${renderAtomicPromptData(input.followingTurns ?? [], locale).value}`,
9665
- `transcript:\n${renderAtomicPromptData(numberAtomicTurns(input.turns), locale).value}`
9711
+ `preceding_context: ${renderAtomicPromptData(preceding, locale).value}`,
9712
+ `following_context: ${renderAtomicPromptData(following, locale).value}`,
9713
+ `transcript:\n${renderAtomicPromptData(turns, locale).value}`
9666
9714
  ].join("\n\n");
9667
9715
  }
9668
9716
  function buildAtomicCapturePrompt(input) {
@@ -10149,6 +10197,22 @@ async function splitAtomicCaptureTurn(input, outputTokenBudget, attempts, failed
10149
10197
  };
10150
10198
  }
10151
10199
  async function captureAtomicWindow(input, outputTokenBudget, attempts) {
10200
+ if (countTokens(JSON.stringify({
10201
+ turns: numberAtomicTurns(input.turns),
10202
+ preceding: [],
10203
+ following: []
10204
+ })) > input.runParameters.maxInputTokens) {
10205
+ if (input.turns.length > 1) return splitAtomicCaptureWindow(input, outputTokenBudget, attempts);
10206
+ if (splitTurnContent(input.turns[0]?.content ?? "") === void 0) {
10207
+ input.store.recordAtomicExtractionCalls(input.ledgerKey, input.nowMs());
10208
+ return {
10209
+ status: "pending",
10210
+ reason: "input-overflow",
10211
+ failedReply: ""
10212
+ };
10213
+ }
10214
+ return splitAtomicCaptureTurn(input, outputTokenBudget, attempts, "");
10215
+ }
10152
10216
  const sanitizedInput = sanitizeAtomicPromptValue(input.turns, input.locale ?? "en");
10153
10217
  const prompt = buildAtomicCapturePrompt(input);
10154
10218
  let lastReply = "";
@@ -10665,6 +10729,7 @@ function countTodoTransitionsWithoutSource(database) {
10665
10729
  */
10666
10730
  const log$7 = createLogger("sno-station-mem:atomic-extraction-windows");
10667
10731
  const windowDiagnosticContext = new AsyncLocalStorage();
10732
+ const arrivalRetirementContext = new AsyncLocalStorage();
10668
10733
  function windowDiagnostics() {
10669
10734
  return {
10670
10735
  proposed: 0,
@@ -10868,10 +10933,10 @@ function parseAtomicConversationTurns(conversationText) {
10868
10933
  if (current) turns.push(current);
10869
10934
  return turns;
10870
10935
  }
10871
- function atomicConversationWindows(turns) {
10936
+ function atomicConversationWindows(turns, captureBatch = false) {
10872
10937
  const userIndexes = turns.flatMap((turn, index) => turn.role === "user" ? [index] : []);
10873
10938
  if (userIndexes.length === 0) return [];
10874
- if (userIndexes.length <= 2) return [{
10939
+ if (captureBatch || userIndexes.length <= 2) return [{
10875
10940
  turns: [...turns],
10876
10941
  contextTurns: [],
10877
10942
  followingTurns: [],
@@ -11036,7 +11101,14 @@ function createSignedAtomicMemoryExtractionTransports(config, locale = "en") {
11036
11101
  retirementVerdict: { judge: (pair) => chat.completeText({
11037
11102
  prompt: adapterPrompt ? renderAdapterAPrompt(pair.older, pair.newer) : renderAdapterAChatPrompt(pair),
11038
11103
  hostPrompt: renderAdapterAChatPrompt(pair),
11039
- callId: "E10"
11104
+ callId: "E10",
11105
+ takeProviderAttempt: () => {
11106
+ const work = arrivalRetirementContext.getStore();
11107
+ if (!work) return true;
11108
+ if (work.providerCallsLeft <= 0) return false;
11109
+ work.providerCallsLeft -= 1;
11110
+ return true;
11111
+ }
11040
11112
  }) }
11041
11113
  };
11042
11114
  }
@@ -11050,7 +11122,12 @@ var AtomicInsightDistiller = class {
11050
11122
  this.config = config;
11051
11123
  }
11052
11124
  async extractAndPersist(conversationText, sessionKey, options = {}) {
11053
- return withLogContext({
11125
+ const retirement = {
11126
+ remaining: 3,
11127
+ providerCallsLeft: 3,
11128
+ ...this.config.scheduleArrivalRetirement ? { tasks: [] } : {}
11129
+ };
11130
+ return arrivalRetirementContext.run(retirement, () => withLogContext({
11054
11131
  operation_id: currentLogContext().operation_id ?? randomUUID(),
11055
11132
  session_reference: sessionKey
11056
11133
  }, async () => {
@@ -11059,7 +11136,7 @@ var AtomicInsightDistiller = class {
11059
11136
  let captureOutcome = "failed";
11060
11137
  try {
11061
11138
  if (!sessionKey.trim()) throw new Error("Atomic extraction requires sessionKey");
11062
- const windows = atomicConversationWindows(parseAtomicConversationTurns(conversationText));
11139
+ const windows = atomicConversationWindows(parseAtomicConversationTurns(conversationText), this.config.captureBatch);
11063
11140
  if (windows.length === 0) log$7.warn("atomic extraction found no parseable turn; nothing will be stored", { session_reference: privateLogReference(sessionKey) }, {
11064
11141
  event_name: "memory.atomic_memory_extraction.diagnostic",
11065
11142
  file: "packages/memory/src/engine/extraction/atomic-memory-extraction.ts",
@@ -11175,6 +11252,10 @@ var AtomicInsightDistiller = class {
11175
11252
  ...llmFailures > 0 ? { llmFailures } : {}
11176
11253
  };
11177
11254
  } finally {
11255
+ const tasks = retirement.tasks;
11256
+ if (tasks && tasks.length > 0) this.config.scheduleArrivalRetirement?.(async () => {
11257
+ for (const task of tasks) await task();
11258
+ });
11178
11259
  const sum = (field) => diagnostics.reduce((total, row) => total + row[field], 0);
11179
11260
  log$7[captureOutcome === "failed" ? "error" : "info"]("Memory capture completed", {
11180
11261
  outcome: captureOutcome === "failed" && sum("persisted") > 0 ? "partial" : captureOutcome,
@@ -11203,7 +11284,7 @@ var AtomicInsightDistiller = class {
11203
11284
  site_id: "memory.capture.completed"
11204
11285
  });
11205
11286
  }
11206
- });
11287
+ }));
11207
11288
  }
11208
11289
  };
11209
11290
  async function resolveSubjects(store, projectId, records, transport, jobId, nowMs) {
@@ -11768,37 +11849,47 @@ async function runAtomicMemoryExtraction(input) {
11768
11849
  diagnostic.outcome = write.createdCount > 0 ? "success" : "empty_success";
11769
11850
  publishClaims();
11770
11851
  const nominatedCards = cards.filter((card) => card.lane === "active");
11771
- for (const card of nominatedCards) {
11772
- const stored = input.store.findByExtractionIdempotencyKey(input.projectId, card.idempotencyKey);
11773
- if (stored === void 0) continue;
11774
- try {
11775
- await runAtomicArrivalRetirementJudgment({
11776
- store: input.store,
11777
- projectId: input.projectId,
11778
- jobId: input.ledgerKey.conversationId,
11779
- nominatedRowId: stored.id,
11780
- nowMs: atomicFactWrite.nowMs,
11781
- transport: input.transports.retirementVerdict
11782
- });
11783
- } catch (error) {
11784
- log$7.error("atomic arrival retirement failed after write; older facts stay current", {
11785
- nominatedRowId: stored.id,
11786
- session_reference: privateLogReference(input.ledgerKey.conversationId),
11787
- error
11788
- }, {
11789
- event_name: "memory.atomic_memory_extraction.diagnostic",
11790
- file: "packages/memory/src/engine/extraction/atomic-memory-extraction.ts",
11791
- function: "runAtomicMemoryExtraction",
11792
- site_id: "extraction.atomic-memory-extraction.runAtomicMemoryExtraction.0d9673d494"
11793
- });
11794
- journalAtomicArrivalRetirementRefusal(input.store, {
11795
- jobId: input.ledgerKey.conversationId,
11796
- nominatedRowId: stored.id,
11797
- reason: `judgment_failed:${error instanceof Error ? error.message : String(error)}`,
11798
- candidateSetSize: 0
11799
- });
11852
+ const retirement = arrivalRetirementContext.getStore() ?? {
11853
+ remaining: 3,
11854
+ providerCallsLeft: 3
11855
+ };
11856
+ const retire = async () => {
11857
+ for (const card of nominatedCards) {
11858
+ if (retirement.remaining <= 0 || retirement.providerCallsLeft <= 0) break;
11859
+ const stored = input.store.findByExtractionIdempotencyKey(input.projectId, card.idempotencyKey);
11860
+ if (stored === void 0) continue;
11861
+ try {
11862
+ await runAtomicArrivalRetirementJudgment({
11863
+ store: input.store,
11864
+ projectId: input.projectId,
11865
+ jobId: input.ledgerKey.conversationId,
11866
+ nominatedRowId: stored.id,
11867
+ nowMs: atomicFactWrite.nowMs,
11868
+ transport: input.transports.retirementVerdict,
11869
+ budget: retirement
11870
+ });
11871
+ } catch (error) {
11872
+ log$7.error("atomic arrival retirement failed after write; older facts stay current", {
11873
+ nominatedRowId: stored.id,
11874
+ session_reference: privateLogReference(input.ledgerKey.conversationId),
11875
+ error
11876
+ }, {
11877
+ event_name: "memory.atomic_memory_extraction.diagnostic",
11878
+ file: "packages/memory/src/engine/extraction/atomic-memory-extraction.ts",
11879
+ function: "runAtomicMemoryExtraction",
11880
+ site_id: "extraction.atomic-memory-extraction.runAtomicMemoryExtraction.0d9673d494"
11881
+ });
11882
+ journalAtomicArrivalRetirementRefusal(input.store, {
11883
+ jobId: input.ledgerKey.conversationId,
11884
+ nominatedRowId: stored.id,
11885
+ reason: `judgment_failed:${error instanceof Error ? error.message : String(error)}`,
11886
+ candidateSetSize: 0
11887
+ });
11888
+ }
11800
11889
  }
11801
- }
11890
+ };
11891
+ if (retirement.tasks) retirement.tasks.push(retire);
11892
+ else await retire();
11802
11893
  return {
11803
11894
  status: "complete",
11804
11895
  records: resolved.records,
@@ -11896,9 +11987,13 @@ async function runAtomicArrivalRetirementJudgment(input) {
11896
11987
  const candidateSet = await readAtomicArrivalRetirementCandidateSet(input.store, input);
11897
11988
  if (candidateSet === void 0 || candidateSet.candidateRows.length === 0) return;
11898
11989
  const replaced = /* @__PURE__ */ new Set();
11899
- const queue = [...candidateSet.candidateRows];
11990
+ const queue = candidateSet.candidateRows.slice(0, input.budget.remaining);
11991
+ input.budget.remaining -= queue.length;
11900
11992
  const judgeQueued = async () => {
11901
- for (let candidate = queue.shift(); candidate !== void 0; candidate = queue.shift()) if (await judgeArrivalRetirementPair(input, candidateSet, candidate) === "replacement") replaced.add(candidate.id);
11993
+ for (let candidate = queue.shift(); candidate !== void 0; candidate = queue.shift()) {
11994
+ if (input.budget.providerCallsLeft <= 0) break;
11995
+ if (await judgeArrivalRetirementPair(input, candidateSet, candidate) === "replacement") replaced.add(candidate.id);
11996
+ }
11902
11997
  };
11903
11998
  await Promise.all(Array.from({ length: ARRIVAL_RETIREMENT_PAIRS_IN_FLIGHT }, judgeQueued));
11904
11999
  await closeAtomicArrivalRetirementTargets(input.store, {
@@ -15156,7 +15251,7 @@ const diagnosticLog$4 = createLogger("sno-station-mem:sno-station-mem-insight-di
15156
15251
  * Assembles Insight Distill from validated inputs for deterministic plugin lifecycle
15157
15252
  * orchestration.
15158
15253
  */
15159
- function buildInsightDistiller(api, config, store, _embedder, _observability, _sessionUuidProvider, stateDir, agentPort) {
15254
+ function buildInsightDistiller(api, config, store, _embedder, _observability, _sessionUuidProvider, stateDir, agentPort, scheduleArrivalRetirement, captureBatch = false) {
15160
15255
  const routing = pickLlmRoutingConfig(config);
15161
15256
  const extractRoute = resolveLlmRoute({
15162
15257
  callId: "E1",
@@ -15252,7 +15347,9 @@ function buildInsightDistiller(api, config, store, _embedder, _observability, _s
15252
15347
  });
15253
15348
  return new AtomicInsightDistiller(store, transports, {
15254
15349
  defaultScope: config.scopes.default,
15255
- locale: config.language
15350
+ locale: config.language,
15351
+ scheduleArrivalRetirement,
15352
+ captureBatch
15256
15353
  });
15257
15354
  } catch (err) {
15258
15355
  throw new Error(`sno-station-mem insight-distill init failed: ${err instanceof Error ? err.message : String(err)}`);
@@ -17078,6 +17175,7 @@ var MemoryContractRuntime = class {
17078
17175
  registration;
17079
17176
  providers = /* @__PURE__ */ new Map();
17080
17177
  reflectionStates = /* @__PURE__ */ new Map();
17178
+ arrivalRetirements = /* @__PURE__ */ new Set();
17081
17179
  recall = {
17082
17180
  history: /* @__PURE__ */ new Map(),
17083
17181
  turns: /* @__PURE__ */ new Map(),
@@ -17091,6 +17189,7 @@ var MemoryContractRuntime = class {
17091
17189
  this.recall = previous.recall;
17092
17190
  }
17093
17191
  async close() {
17192
+ await Promise.allSettled(this.arrivalRetirements);
17094
17193
  for (const provider of this.providers.values()) await provider.close();
17095
17194
  this.providers.clear();
17096
17195
  this.reflectionStates.clear();
@@ -17311,7 +17410,10 @@ var MemoryContractRuntime = class {
17311
17410
  const context = await this.toolContext(scope);
17312
17411
  checkMemoryOperation();
17313
17412
  const runtimeContext = this.services;
17314
- const distiller = buildInsightDistiller(runtimeContext, config, this.services.store, this.services.embedder, this.services.observability, () => void 0, this.services.stateDir, this.services.agentPort);
17413
+ const distiller = buildInsightDistiller(runtimeContext, config, this.services.store, this.services.embedder, this.services.observability, () => void 0, this.services.stateDir, this.services.agentPort, (task) => {
17414
+ const pending = withMemoryOperation("arrival-retirement", void 0, task).catch((error) => this.services.logger.error(String(error))).finally(() => this.arrivalRetirements.delete(pending));
17415
+ this.arrivalRetirements.add(pending);
17416
+ }, true);
17315
17417
  const reason = {};
17316
17418
  const outcome = await onAgentEnd(runtimeContext, config, this.services.store, this.services.embedder, context.scopePolicy, distiller, {
17317
17419
  success: true,
@@ -17350,16 +17452,19 @@ var MemoryContractRuntime = class {
17350
17452
  contextText: "",
17351
17453
  unavailable: `${input.options.corpus} corpus not available from this provider`
17352
17454
  };
17455
+ const nativeHits = await (await this.provider(input.scope)).search(input.query, {
17456
+ maxResults: input.options.limit,
17457
+ minScore: input.options.minScore,
17458
+ sources: ["memory"],
17459
+ signal
17460
+ });
17461
+ this.recordReadUsage(nativeHits.map((hit) => basename(hit.path, ".md")), input.scope, recallId);
17462
+ this.recordRecallPreview(input.query, nativeHits.map((hit) => hit.snippet));
17353
17463
  return {
17354
17464
  degraded: false,
17355
17465
  recallId,
17356
17466
  contextText: "",
17357
- nativeHits: await (await this.provider(input.scope)).search(input.query, {
17358
- maxResults: input.options.limit,
17359
- minScore: input.options.minScore,
17360
- sources: ["memory"],
17361
- signal
17362
- })
17467
+ nativeHits
17363
17468
  };
17364
17469
  }
17365
17470
  if (input.options.source === "manual") {
@@ -17404,6 +17509,8 @@ var MemoryContractRuntime = class {
17404
17509
  text: contextText
17405
17510
  }];
17406
17511
  result.details.memories = entries;
17512
+ this.recordReadUsage(entries.map((entry) => entry.id), input.scope, recallId);
17513
+ if (!result.isError) this.recordRecallPreview(input.query, entries.map((entry) => entry.text));
17407
17514
  if (turn !== void 0) this.recordRecalled(sessionId, turn, entries.map((entry) => entry.id));
17408
17515
  return parseOutput("getRecall", {
17409
17516
  degraded: false,
@@ -17461,8 +17568,9 @@ var MemoryContractRuntime = class {
17461
17568
  const minimum = current === "prompt" ? options.minScore ?? settings.prompt.minScore : 0;
17462
17569
  const hits = await retrieveForAutoRecall(this.services.retriever, {
17463
17570
  query: current === "session-start" ? CODING_SKIN_SESSION_QUERY : query,
17464
- limit,
17571
+ limit: current === "prompt" ? limit * 4 : limit,
17465
17572
  minScore: minimum,
17573
+ trackAccess: current !== "prompt",
17466
17574
  scopeFilter: [context.scopePolicy.getDefaultScope()],
17467
17575
  signal: retrievalSignal,
17468
17576
  nowMs: Date.now(),
@@ -17470,8 +17578,9 @@ var MemoryContractRuntime = class {
17470
17578
  });
17471
17579
  retrievalSignal.throwIfAborted();
17472
17580
  prepared.push({
17473
- hits: current === "prompt" ? hits.filter((hit) => hit.denseScore === void 0 || hit.denseScore >= .5) : hits,
17474
- cap: cfg.maxChars
17581
+ hits: current === "prompt" ? hits.filter((hit) => hit.denseScore === void 0 || hit.denseScore >= .5).slice(0, limit) : hits,
17582
+ cap: cfg.maxChars,
17583
+ trackServed: current === "prompt"
17475
17584
  });
17476
17585
  }
17477
17586
  signal?.throwIfAborted();
@@ -17482,6 +17591,7 @@ var MemoryContractRuntime = class {
17482
17591
  const cap = Math.min(options.maxChars ?? prepared.reduce((sum, item) => sum + item.cap, 0), CODING_SKIN_LEDGER_MAX_CHARS - state.chars);
17483
17592
  const lines = [INJECTION_HEADER];
17484
17593
  const memoryIds = [];
17594
+ const servedFromPrompt = [];
17485
17595
  for (const batch of prepared) {
17486
17596
  let phaseChars = 67;
17487
17597
  for (const hit of batch.hits) {
@@ -17494,14 +17604,19 @@ var MemoryContractRuntime = class {
17494
17604
  lines.push(line);
17495
17605
  phaseChars += line.length + 1;
17496
17606
  memoryIds.push(current.id);
17607
+ if (batch.trackServed) servedFromPrompt.push(current.id);
17497
17608
  }
17498
17609
  }
17610
+ if (servedFromPrompt.length && this.services.config.recallLifecycle?.autoRecallAccessTracking === true) this.services.accessTracker.recordAccess(servedFromPrompt);
17611
+ this.recordRecallPreview(query, memoryIds.map((id) => this.services.store.getById(id)?.text));
17499
17612
  if (!memoryIds.length) return empty;
17500
17613
  const contextText = lines.join("\n");
17501
17614
  for (const id of memoryIds) state.ids.add(id);
17502
17615
  state.chars += contextText.length;
17503
17616
  this.recall.injection.set(key, state);
17504
17617
  this.recordRecalled(key, turn, memoryIds);
17618
+ this.recordReadUsage(memoryIds, scope, recallId);
17619
+ this.recordReadUsage(memoryIds, scope, recallId, "inject");
17505
17620
  return {
17506
17621
  degraded: false,
17507
17622
  recallId,
@@ -17509,6 +17624,38 @@ var MemoryContractRuntime = class {
17509
17624
  memoryIds
17510
17625
  };
17511
17626
  }
17627
+ recordRecallPreview(query, results) {
17628
+ if (!this.configured().config.debugContent) return;
17629
+ appendAuditEntry(this.services.stateDir, {
17630
+ event: "memory_searched",
17631
+ hook: "getRecall",
17632
+ resultStatus: "ok",
17633
+ decision: "content_preview",
17634
+ details: {
17635
+ queryPreview: debugContentPreview(query, true),
17636
+ topResultPreviews: results.slice(0, 5).map((text) => debugContentPreview(text, true))
17637
+ }
17638
+ });
17639
+ }
17640
+ recordReadUsage(ids, scope, turnId = scope.host?.sessionId ?? scope.session, eventType = "recall") {
17641
+ const outbox = this.services.telemetryUsage;
17642
+ if (!outbox) return;
17643
+ for (const [index, id] of ids.entries()) {
17644
+ const entry = this.services.store.getById(id);
17645
+ if (!entry) continue;
17646
+ outbox.tryAcceptUsage({
17647
+ eventType,
17648
+ factId: entry.factId ?? entry.id,
17649
+ memoryKind: entry.category,
17650
+ projectId: entry.projectId,
17651
+ agentId: this.agentId(scope),
17652
+ sessionUuid: scope.host?.observeSessionUuid ?? scope.session,
17653
+ turnId,
17654
+ retrievalRank: index + 1,
17655
+ metadata: eventType === "inject" ? { injection_surface: "memory_contract" } : { retrieval_rank: index + 1 }
17656
+ });
17657
+ }
17658
+ }
17512
17659
  async mutate(op, scope, signal) {
17513
17660
  return withMemoryOperation("mutate", signal, async () => {
17514
17661
  parseInput("mutate", {
@@ -17711,43 +17858,45 @@ var MemoryContractRuntime = class {
17711
17858
  ...sumStats(await Promise.all(readable.map((scopeId) => this.services.store.stats(scopeId))))
17712
17859
  }
17713
17860
  };
17714
- case "list": return {
17715
- degraded: false,
17716
- result: {
17717
- op: "list",
17718
- project,
17719
- entries: await this.services.store.list({
17720
- ...op,
17721
- projectIdFilter: readable,
17722
- importanceMin: op.importanceMin
17723
- })
17724
- }
17725
- };
17726
- case "listReflection": return {
17727
- degraded: false,
17728
- result: {
17729
- op: "listReflection",
17730
- project,
17731
- entries: await this.services.store.listReflectionItems({
17732
- ...op,
17733
- projectIdFilter: readable
17734
- })
17735
- }
17736
- };
17737
- case "get": {
17738
- if (op.path) return {
17861
+ case "list":
17862
+ case "listReflection": {
17863
+ const entries = op.op === "list" ? await this.services.store.list({
17864
+ ...op,
17865
+ projectIdFilter: readable,
17866
+ importanceMin: op.importanceMin
17867
+ }) : await this.services.store.listReflectionItems({
17868
+ ...op,
17869
+ projectIdFilter: readable
17870
+ });
17871
+ this.recordReadUsage(entries.map((entry) => entry.id), scope);
17872
+ return {
17739
17873
  degraded: false,
17740
17874
  result: {
17741
- op: "get",
17742
- entry: null,
17743
- file: await (await this.provider(scope)).readFile({
17744
- relPath: op.path,
17745
- from: op.from,
17746
- lines: op.lines
17747
- })
17875
+ op: op.op,
17876
+ project,
17877
+ entries
17748
17878
  }
17749
17879
  };
17880
+ }
17881
+ case "get": {
17882
+ if (op.path) {
17883
+ const file = await (await this.provider(scope)).readFile({
17884
+ relPath: op.path,
17885
+ from: op.from,
17886
+ lines: op.lines
17887
+ });
17888
+ this.recordReadUsage([basename(file.path, ".md")], scope);
17889
+ return {
17890
+ degraded: false,
17891
+ result: {
17892
+ op: "get",
17893
+ entry: null,
17894
+ file
17895
+ }
17896
+ };
17897
+ }
17750
17898
  const entry = op.id ? this.services.store.getById(op.id) : void 0;
17899
+ if (entry && readable.includes(entry.projectId)) this.recordReadUsage([entry.id], scope);
17751
17900
  return {
17752
17901
  degraded: false,
17753
17902
  result: {
@@ -17766,6 +17915,7 @@ var MemoryContractRuntime = class {
17766
17915
  });
17767
17916
  const project = await this.project(scope);
17768
17917
  const ids = signal.memoryIds.filter((id) => this.services.store.getById(id)?.projectId === project);
17918
+ if (signal.event === "inject") this.recordReadUsage(ids, scope, recallId, "inject");
17769
17919
  if (signal.event === "used") {
17770
17920
  this.services.accessTracker.recordAccess(ids);
17771
17921
  await this.services.accessTracker.flush();
@@ -19071,6 +19221,7 @@ var MemoryRuntimePool = class MemoryRuntimePool {
19071
19221
  modelReady = false;
19072
19222
  modelPreparationError;
19073
19223
  modelPreparation;
19224
+ replayingCaptures = false;
19074
19225
  usageOutbox;
19075
19226
  constructor(storePath, store, config, settings, observability, embedder) {
19076
19227
  this.storePath = storePath;
@@ -19084,6 +19235,17 @@ var MemoryRuntimePool = class MemoryRuntimePool {
19084
19235
  dbPath: storePath
19085
19236
  });
19086
19237
  store.sqlite.exec("CREATE TABLE IF NOT EXISTS pending_captures (id TEXT PRIMARY KEY, skin_id TEXT NOT NULL, request TEXT NOT NULL)");
19238
+ if (!store.sqlite.prepare("PRAGMA table_info(pending_captures)").all().some((column) => column.name === "attempt_count")) store.sqlite.exec("ALTER TABLE pending_captures ADD COLUMN attempt_count INTEGER NOT NULL DEFAULT 0");
19239
+ const { changes: pruned } = store.sqlite.prepare("DELETE FROM pending_captures WHERE id IN (SELECT id FROM pending_captures ORDER BY rowid DESC LIMIT -1 OFFSET 1000)").run();
19240
+ if (pruned) log.warn("Pending capture backlog exceeded capacity; oldest captures removed", {
19241
+ removed_count: pruned,
19242
+ rejection_reason: "capacity"
19243
+ }, {
19244
+ event_name: "memory.sidecar.pending_capture.pruned",
19245
+ file: "packages/memory/src/sidecar/memory-runtime.ts",
19246
+ function: "constructor",
19247
+ site_id: "memory.sidecar.pending_capture.pruned"
19248
+ });
19087
19249
  }
19088
19250
  async prepareModel() {
19089
19251
  try {
@@ -19106,18 +19268,32 @@ var MemoryRuntimePool = class MemoryRuntimePool {
19106
19268
  }
19107
19269
  }
19108
19270
  async replayPendingCaptures() {
19109
- const rows = this.store.sqlite.prepare("SELECT id, skin_id, request FROM pending_captures ORDER BY rowid").all();
19110
- for (const row of rows) try {
19111
- const result = await this.invoke("capture", JSON.parse(row.request), row.skin_id);
19112
- if (!result.degraded && "committed" in result && (result.committed || result.skipped || result.partial)) this.store.sqlite.prepare("DELETE FROM pending_captures WHERE id = ?").run(row.id);
19113
- else throw new Error("Pending capture was not completed");
19114
- } catch (error) {
19115
- log.error("Pending capture failed", { error }, {
19116
- event_name: "memory.sidecar.pending_capture.failed",
19117
- file: "packages/memory/src/sidecar/memory-runtime.ts",
19118
- function: "replayPendingCaptures",
19119
- site_id: "memory.sidecar.pending_capture.failed"
19120
- });
19271
+ if (this.replayingCaptures) return;
19272
+ this.replayingCaptures = true;
19273
+ try {
19274
+ const rows = this.store.sqlite.prepare("SELECT id, skin_id, request, attempt_count FROM pending_captures WHERE attempt_count < 3 ORDER BY rowid").all();
19275
+ for (const row of rows) {
19276
+ const { changes } = this.store.sqlite.prepare("UPDATE pending_captures SET attempt_count = attempt_count + 1 WHERE id = ? AND attempt_count < 3").run(row.id);
19277
+ if (!changes) continue;
19278
+ try {
19279
+ const result = await this.invoke("capture", JSON.parse(row.request), row.skin_id);
19280
+ if (!result.degraded && "committed" in result && (result.committed || result.skipped || result.partial)) this.store.sqlite.prepare("DELETE FROM pending_captures WHERE id = ?").run(row.id);
19281
+ else throw new Error("Pending capture was not completed");
19282
+ } catch (error) {
19283
+ const parked = row.attempt_count + 1 >= 3;
19284
+ log.error(parked ? "Pending capture parked after three failed attempts" : "Pending capture failed", {
19285
+ error,
19286
+ attempt_count: row.attempt_count + 1
19287
+ }, {
19288
+ event_name: parked ? "memory.sidecar.pending_capture.parked" : "memory.sidecar.pending_capture.failed",
19289
+ file: "packages/memory/src/sidecar/memory-runtime.ts",
19290
+ function: "replayPendingCaptures",
19291
+ site_id: parked ? "memory.sidecar.pending_capture.parked" : "memory.sidecar.pending_capture.failed"
19292
+ });
19293
+ }
19294
+ }
19295
+ } finally {
19296
+ this.replayingCaptures = false;
19121
19297
  }
19122
19298
  }
19123
19299
  static async open() {
@@ -19189,9 +19365,7 @@ var MemoryRuntimePool = class MemoryRuntimePool {
19189
19365
  }
19190
19366
  };
19191
19367
  let entry;
19192
- const agentPort = new RegisteredAgentPort(registration.model, () => {
19193
- entry.connected = false;
19194
- });
19368
+ const agentPort = new RegisteredAgentPort(registration.model);
19195
19369
  const observability = new PluginObservability(config, this.stateDir, engineLogger, {}, this.settings.telemetry.redactionRules);
19196
19370
  const embedder = new ObservableEmbedder(config.embedding, this.stateDir, observability, observeSessionUuid);
19197
19371
  const retriever = new ObservableMemoryRetriever(this.store, embedder, engineLogger, {
@@ -19335,6 +19509,18 @@ var MemoryRuntimePool = class MemoryRuntimePool {
19335
19509
  const request = JSON.stringify(capture);
19336
19510
  const existing = this.store.sqlite.prepare("SELECT request FROM pending_captures WHERE id = ?").get(id);
19337
19511
  if (existing && existing.request !== request) throw new Error("Pending capture identity reused with different content");
19512
+ if (!existing) {
19513
+ const { count } = this.store.sqlite.prepare("SELECT COUNT(*) AS count FROM pending_captures").get();
19514
+ const removed = count >= 1e3 ? this.store.sqlite.prepare("DELETE FROM pending_captures WHERE rowid = (SELECT rowid FROM pending_captures WHERE attempt_count >= 3 ORDER BY rowid LIMIT 1)").run() : void 0;
19515
+ if (count >= 1e3 && !removed?.changes) return {
19516
+ degraded: true,
19517
+ reason: "engine-failed",
19518
+ error: "Pending capture capacity exhausted",
19519
+ turnId: capture.turn.turnId,
19520
+ committed: false,
19521
+ accepted: false
19522
+ };
19523
+ }
19338
19524
  this.store.sqlite.prepare("INSERT OR IGNORE INTO pending_captures (id, skin_id, request) VALUES (?, ?, ?)").run(id, skinId, request);
19339
19525
  return {
19340
19526
  degraded: false,
@@ -19409,6 +19595,12 @@ var MemoryRuntimePool = class MemoryRuntimePool {
19409
19595
  entry
19410
19596
  }, () => withProviderResponses(responses, () => this.call(entry, method, body, signal)));
19411
19597
  const result = parseOutput(method, await entry.agentPort.run(call, method === "capture"));
19598
+ if (method === "capture" && !result.degraded && "committed" in result && (result.committed || result.skipped || result.partial)) this.replayPendingCaptures().catch((error) => log.error("Pending capture failed", { error }, {
19599
+ event_name: "memory.sidecar.pending_capture.failed",
19600
+ file: "packages/memory/src/sidecar/memory-runtime.ts",
19601
+ function: "invoke",
19602
+ site_id: "memory.sidecar.pending_capture.replay.failed"
19603
+ }));
19412
19604
  if (method === "onSessionEnd") {
19413
19605
  await this.emitProviderUsage(entry, scope, responses.splice(0));
19414
19606
  await this.snapshot(entry, "session_end", uuid);
@@ -19530,8 +19722,6 @@ var MemoryRuntimePool = class MemoryRuntimePool {
19530
19722
  eventType: "llm.call",
19531
19723
  sessionUuid: scope.host?.observeSessionUuid,
19532
19724
  payload: {
19533
- call_id: response.callId,
19534
- destination: response.destination,
19535
19725
  model: `${response.provider}:${response.model}`,
19536
19726
  prompt_tokens: response.usage.inputTokens,
19537
19727
  completion_tokens: response.usage.outputTokens,
@@ -19551,6 +19741,7 @@ var MemoryRuntimePool = class MemoryRuntimePool {
19551
19741
  /** The local memory event rows written since the last sync go up as `memory.telemetry` batches. */
19552
19742
  async forwardTelemetry(entry, sessionUuid) {
19553
19743
  await entry.observability.trackBestEffort("memory telemetry", async () => {
19744
+ await this.usageOutbox.flushPendingAsync();
19554
19745
  if ((await forwardMemoryTelemetryToObserve({
19555
19746
  sqlite: this.store.sqlite,
19556
19747
  observe: { tryEmit: (input) => entry.observability.tryEmit({