@snoai/memory 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/README.md +1 -1
  2. package/dist/{atomic-extraction-reply-BJ9XV_9s.js → atomic-extraction-reply-DF_S9ROg.js} +6 -3
  3. package/dist/{atomic-memory-extraction-l65aofbl.js → atomic-memory-extraction-pL1_58Kw.js} +45 -6
  4. package/dist/{coding-skin-azRXA51Z.js → coding-skin-AW1UPUPY.js} +9 -1
  5. package/dist/coding-skin.d.ts +8 -0
  6. package/dist/coding-skin.js +2 -2
  7. package/dist/{config-CByvnX3d.js → config-BwUcq2zS.js} +12 -7
  8. package/dist/diagnostic-encoder.js +1 -1
  9. package/dist/index.js +5 -5
  10. package/dist/internal/config/settings.js +1 -1
  11. package/dist/internal/engine/bindings/memory-forget-tool.js +1 -1
  12. package/dist/internal/engine/bindings/memory-list-tool.js +1 -1
  13. package/dist/internal/engine/bindings/memory-recall-tool.js +1 -1
  14. package/dist/internal/engine/bindings/memory-reflection-resolve-tool.js +1 -1
  15. package/dist/internal/engine/bindings/memory-stats-tool.js +1 -1
  16. package/dist/internal/engine/bindings/memory-store-tool.js +3 -3
  17. package/dist/internal/engine/bindings/memory-tool-access.js +1 -1
  18. package/dist/internal/engine/bindings/memory-tool-results.js +1 -1
  19. package/dist/internal/engine/bindings/memory-tool-schemas.js +1 -1
  20. package/dist/internal/engine/bindings/memory-update-tool.js +2 -2
  21. package/dist/internal/engine/bindings/sno-station-mem-ambient-learning-hook.js +3 -3
  22. package/dist/internal/engine/bindings/sno-station-mem-auto-recall-hook.js +1 -1
  23. package/dist/internal/engine/bindings/sno-station-mem-insight-distill-factory.js +2 -2
  24. package/dist/internal/engine/bindings/sno-station-mem-message-transcript.js +2 -2
  25. package/dist/internal/engine/extraction/atomic-memory-extraction.js +1 -1
  26. package/dist/internal/engine/extraction/memory-temporality-classifier.js +1 -1
  27. package/dist/internal/engine/observability/observable-memory-store.js +1 -1
  28. package/dist/internal/engine/observability/runtime-diagnostics.js +3 -3
  29. package/dist/internal/engine/reflection/reflection-command-hooks.js +1 -1
  30. package/dist/internal/engine/reflection/reflection-embedded-generator.js +1 -1
  31. package/dist/internal/engine/reflection/reflection-injection-hooks.js +1 -1
  32. package/dist/internal/engine/reflection/reflection-lifecycle-hooks.js +1 -1
  33. package/dist/internal/engine/reflection/strategy-hook-runner.js +2 -2
  34. package/dist/internal/model/llm-client.js +1 -1
  35. package/dist/internal/model/llm-mode-routing.js +1 -1
  36. package/dist/internal/store/maintenance.js +3 -3
  37. package/dist/internal/store/store.js +1 -1
  38. package/dist/{llm-client-ByzZRemn.js → llm-client-Dq9FZPdC.js} +36 -6
  39. package/dist/{log-site-catalog.generated-DsvDgHJa.js → log-site-catalog.generated-Wze-GrOG.js} +90 -90
  40. package/dist/log-site-catalog.json +1 -1
  41. package/dist/{memory-runtime-DXr1VO1p.js → memory-runtime-B4A1t5DO.js} +139 -97
  42. package/dist/{memory-temporality-classifier-Bauwnls7.js → memory-temporality-classifier-CHcnOT5T.js} +2 -2
  43. package/dist/{memory-tool-dependencies-Cc4SJMtd.js → memory-tool-dependencies-CAVm0Sy4.js} +1 -1
  44. package/dist/{model-call-table-CPyQfBJ6.js → model-call-table-DjfbmUDl.js} +12 -7
  45. package/dist/{profile-section-writer-CR-WWIoB.js → profile-section-writer-3apndAJu.js} +2 -2
  46. package/dist/{reflection-command-hooks-Der9aX0e.js → reflection-command-hooks-B9UENMGV.js} +3 -3
  47. package/dist/{reflection-embedded-generator-BEdDusPV.js → reflection-embedded-generator-Do_r_LbU.js} +1 -1
  48. package/dist/{rem-batch-executor-DiU8hSGc.js → rem-batch-executor-BUgNyYLv.js} +1 -1
  49. package/dist/{rem-trigger-CBfyJVfh.js → rem-trigger-pg_cCp5U.js} +37 -7
  50. package/dist/{server-BlbG5uOM.js → server-CByyXSvp.js} +4 -4
  51. package/dist/sidecar/main.js +2 -2
  52. package/dist/{sno-station-mem-runtime-dependencies-DsidkZi2.js → sno-station-mem-runtime-dependencies-CgNS1dIM.js} +5 -5
  53. package/dist/{store-Bja1tVFw.js → store-DNgKOGWP.js} +1 -1
  54. package/dist/{strategy-hook-runner-F-ruiw48.js → strategy-hook-runner-Bg6rBY71.js} +1 -1
  55. package/package.json +1 -1
  56. package/settings.default.json +7 -7
  57. package/skills/extract-atomic-memory/SKILL.md +4 -3
  58. package/skills/extract-atomic-memory/references/capture.md +3 -2
@@ -5,6 +5,11 @@ const extract = {
5
5
  "agent-native": "host",
6
6
  "rem-enhanced": "sno-gpu"
7
7
  };
8
+ const extractHost = {
9
+ "local-first": "off",
10
+ "agent-native": "host",
11
+ "rem-enhanced": "host"
12
+ };
8
13
  const host = {
9
14
  "local-first": "off",
10
15
  "agent-native": "host",
@@ -54,7 +59,7 @@ const MODEL_CALLS = {
54
59
  E2: {
55
60
  description: "fact enrichment",
56
61
  occasion: "memoryExtract",
57
- destinations: extract,
62
+ destinations: extractHost,
58
63
  snoPreset: chat,
59
64
  transport: {
60
65
  host: "agent-host-seam",
@@ -90,7 +95,7 @@ const MODEL_CALLS = {
90
95
  E4: {
91
96
  description: "compound record split",
92
97
  occasion: "memoryExtract",
93
- destinations: extract,
98
+ destinations: extractHost,
94
99
  snoPreset: chat,
95
100
  transport: {
96
101
  host: "agent-host-seam",
@@ -108,7 +113,7 @@ const MODEL_CALLS = {
108
113
  E5: {
109
114
  description: "missing half recovery",
110
115
  occasion: "memoryExtract",
111
- destinations: extract,
116
+ destinations: extractHost,
112
117
  snoPreset: chat,
113
118
  transport: {
114
119
  host: "agent-host-seam",
@@ -126,7 +131,7 @@ const MODEL_CALLS = {
126
131
  E6: {
127
132
  description: "subject check",
128
133
  occasion: "memoryExtract",
129
- destinations: extract,
134
+ destinations: extractHost,
130
135
  snoPreset: chat,
131
136
  transport: {
132
137
  host: "agent-host-seam",
@@ -144,7 +149,7 @@ const MODEL_CALLS = {
144
149
  E7: {
145
150
  description: "unresolved subject recovery",
146
151
  occasion: "memoryExtract",
147
- destinations: extract,
152
+ destinations: extractHost,
148
153
  snoPreset: chat,
149
154
  transport: {
150
155
  host: "agent-host-seam",
@@ -162,7 +167,7 @@ const MODEL_CALLS = {
162
167
  E8: {
163
168
  description: "same entity judgment",
164
169
  occasion: "memoryExtract",
165
- destinations: extract,
170
+ destinations: extractHost,
166
171
  snoPreset: chat,
167
172
  transport: {
168
173
  host: "agent-host-seam",
@@ -234,7 +239,7 @@ const MODEL_CALLS = {
234
239
  E12: {
235
240
  description: "background state keying",
236
241
  occasion: "memoryExtract",
237
- destinations: extract,
242
+ destinations: extractHost,
238
243
  snoPreset: chat,
239
244
  transport: {
240
245
  host: "agent-host-seam",
@@ -2,11 +2,11 @@ import { MAX_LIST_LIMIT } from "./internal/config/index.js";
2
2
  import { SnoStationMemError, StorageError } from "./internal/engine/shared/errors.js";
3
3
  import { a as buildInsightMetadata, c as stringifyInsightMetadata, h as deriveFactKey, s as parseInsightMetadata } from "./memory-metadata-codec-DL1sbJiN.js";
4
4
  import { a as currentMutationAttemptId, f as runWithMutationAttempt } from "./runtime-audit-log-DK6xAYxh.js";
5
- import { n as LlmClientTerminalError } from "./llm-client-ByzZRemn.js";
5
+ import { n as LlmClientTerminalError } from "./llm-client-Dq9FZPdC.js";
6
6
  import { resolveLlmRoute } from "./internal/model/llm-mode-routing.js";
7
7
  import { boundSectionContent, buildIndexedText } from "./internal/engine/extraction/extraction-text-sanitizer.js";
8
8
  import { adapterAViewFromRecord, orderAdapterAPair, parseAdapterAChatVerdict, prospectiveProfileView, renderAdapterAChatPrompt, renderAdapterAPrompt } from "./internal/engine/rem/index.js";
9
- import { S as StaleSupersedeTargetError, a as resolveTaskLifecycle, c as buildTaskLifecycleCommandClaim, i as findUniqueActiveTaskByDescription, l as resolveTaskLifecycleEffectiveTime, n as acceptsTaskLifecycleJudgment, o as taskLifecycleCandidateSetVersion, r as buildTaskLifecycleCandidateSet, s as admitTaskLifecycleAssertion, w as TaskLifecycleStaleResolutionError } from "./store-Bja1tVFw.js";
9
+ import { S as StaleSupersedeTargetError, a as resolveTaskLifecycle, c as buildTaskLifecycleCommandClaim, i as findUniqueActiveTaskByDescription, l as resolveTaskLifecycleEffectiveTime, n as acceptsTaskLifecycleJudgment, o as taskLifecycleCandidateSetVersion, r as buildTaskLifecycleCandidateSet, s as admitTaskLifecycleAssertion, w as TaskLifecycleStaleResolutionError } from "./store-DNgKOGWP.js";
10
10
  import { o as canonicalizeProfileSectionName, r as recordTokenCounter } from "./memory-store-write-validation-B_hDG2zf.js";
11
11
  import { canExtractorWrite } from "./internal/engine/shared/memory-kind-policy.js";
12
12
  import { resolveHookAgentId } from "./internal/engine/bindings/sno-station-mem-runtime-mode.js";
@@ -3,14 +3,14 @@ import { a as buildInsightMetadata, c as stringifyInsightMetadata } from "./memo
3
3
  import { redactSecrets } from "./internal/engine/security/redact.js";
4
4
  import { t as checkMemoryOperation } from "./operation-cancellation-QcwC4mDX.js";
5
5
  import { setLruEntry } from "./internal/engine/shared/lru.js";
6
- import { i as createLlmClient } from "./llm-client-ByzZRemn.js";
6
+ import { i as createLlmClient } from "./llm-client-Dq9FZPdC.js";
7
7
  import { pickLlmRoutingConfig } from "./internal/model/llm-mode-routing.js";
8
8
  import { appendSelfImprovementEntry } from "./internal/engine/operations/learning-file-maintenance.js";
9
9
  import { getSnoStationMemDataDir } from "./internal/store/data-paths.js";
10
10
  import { resolveHookAgentId } from "./internal/engine/bindings/sno-station-mem-runtime-mode.js";
11
- import { n as createRetireByNameRunBudget, r as runProfileSectionUpdate } from "./profile-section-writer-CR-WWIoB.js";
11
+ import { n as createRetireByNameRunBudget, r as runProfileSectionUpdate } from "./profile-section-writer-3apndAJu.js";
12
12
  import { a as generateReflectionText, c as shouldSkipReflectionMessage, l as writeReflectionToFilesystem, s as readSessionConversationWithResetFallback, u as extractTextContent } from "./daily-log-generator-DEsiCs7o.js";
13
- import { a as resolveWorkspaceDirFromEvent, f as setReflectionDerivedCacheEntry, l as isSessionBoundaryReflectionAction, n as createReflectionGenerator, o as DEFAULT_REFLECTION_BOUNDARY_DERIVED_SUPPRESSION_MS, t as DEFAULT_MEMORY_LLM_CONFIG, u as setReflectionDerivedSuppression } from "./reflection-embedded-generator-BEdDusPV.js";
13
+ import { a as resolveWorkspaceDirFromEvent, f as setReflectionDerivedCacheEntry, l as isSessionBoundaryReflectionAction, n as createReflectionGenerator, o as DEFAULT_REFLECTION_BOUNDARY_DERIVED_SUPPRESSION_MS, t as DEFAULT_MEMORY_LLM_CONFIG, u as setReflectionDerivedSuppression } from "./reflection-embedded-generator-Do_r_LbU.js";
14
14
  import { i as buildReflectionMappedMetadata, n as createReflectionEventId, o as extractInjectableReflectionMappedMemoryItems, r as buildReflectionAntiPatternSignature, s as extractReflectionLearningGovernanceCandidates, t as storeReflectionEntries } from "./memory-entry-projector-B36Nwsi_.js";
15
15
  import { createLogger, currentLogContext, privateLogReference, withLogContext } from "@snoai/utils/logger";
16
16
  import { basename, join } from "node:path";
@@ -1,5 +1,5 @@
1
1
  import { X as FIXED_MEMORY_SNO_AI_EXTRACT } from "./signed-registry-constants-yq3DlG3B.js";
2
- import { i as createLlmClient } from "./llm-client-ByzZRemn.js";
2
+ import { i as createLlmClient } from "./llm-client-Dq9FZPdC.js";
3
3
  //#region src/engine/reflection/derived-line-cache.ts
4
4
  /**
5
5
  * Returns reflection derived cache entry from reflection cache keys state without side effects.
@@ -1,2 +1,2 @@
1
- import { c as runRemProductionOrderedWave } from "./rem-trigger-CBfyJVfh.js";
1
+ import { c as runRemProductionOrderedWave } from "./rem-trigger-pg_cCp5U.js";
2
2
  export { runRemProductionOrderedWave };
@@ -1,4 +1,4 @@
1
- import { $ as FIXED_IDX_MEMORY_ACTIVE_TASK_CURRENT_REVISION, A as modelCallDestination, At as FIXED_MEMORY_PROFILE_RECOVERY_ENTRIES, B as FIXED_EXTERNAL_VALUE_49, C as getSnoStationMemStateDir, Cn as CHUNK_OVERLAP_TOKENS, Cr as ensureModelDownloaded, Ct as FIXED_MEMORY_CHUNKS_MEM_FACET_IDX, D as settingsToPluginConfig, Dn as DEFAULT_IMPORTANCE, Dt as FIXED_MEMORY_MEMORIES_FACT_ID_INSERT_GUARD, En as DEFAULT_BM25_WEIGHT, Et as FIXED_MEMORY_MEMORIES, Fn as EMBEDDER_DIM, G as FIXED_EXTERNAL_VALUE_55, H as FIXED_EXTERNAL_VALUE_52, Hn as HEAD_EXTRACT_OVERLAP_DROP_RATIO, In as EMBEDDER_MODEL_DEFAULT, It as FIXED_MEMORY_SNO_EXTRACT_CHAT, J as FIXED_EXTERNAL_VALUE_58, K as FIXED_EXTERNAL_VALUE_56, Kn as INTRA_MEMORY_COSINE_THRESHOLD, Kt as FIXED_PROTOCOL_VALUE_69, Ln as EMBEDDER_PROVIDER_DEFAULT, Mn as DEFAULT_RERANK_TIMEOUT_MS, Mt as FIXED_MEMORY_PROVIDER_PROJECT_AGENTS, Nt as FIXED_MEMORY_PROVIDER_PROJECT_MAPPINGS, O as MODEL_CALLS, On as DEFAULT_RECALL_LIFECYCLE, Ot as FIXED_MEMORY_MEMORIES_FACT_ID_UPDATE_GUARD, P as observeAgentId, Pn as DEFAULT_VECTOR_WEIGHT, Q as FIXED_IDX_MEMORY, Rn as EVAL_QA_TRACES_FILENAME, Rt as FIXED_MEMORY_TASK_LIFECYCLE_COMMANDS, Sn as CHUNK_MIN_TOKENS, Sr as LocalReranker, St as FIXED_MEMORY_CHUNKS_MEMORY_ID_IDX, T as readSettings, Tn as CHUNK_TOKENIZER_MODE, Tt as FIXED_MEMORY_EXTRACTION_TIMESTAMPS, U as FIXED_EXTERNAL_VALUE_53, Un as HEAD_EXTRACT_TOKEN_BUDGET, V as FIXED_EXTERNAL_VALUE_51, Vn as HEAD_EXTRACT_MIN_CONTENT_TOKENS, W as FIXED_EXTERNAL_VALUE_54, Wn as IMPORTANCE_WEIGHT_BASE, X as FIXED_EXTERNAL_VALUE_8, Xn as MAX_CHUNK_FETCH_LIMIT, Y as FIXED_EXTERNAL_VALUE_62, Z as FIXED_EXTERNAL_VALUE_9, Zn as MAX_LIST_LIMIT, _r as CachedEmbeddingProvider, _t as FIXED_MEMORY_CHUNKS, a as REM_MODEL_OUTPUT_TOKEN_CAP, an as PERSISTED_PROVIDER_SYSTEM, ar as RECENCY_WEIGHT, at as FIXED_IDX_MEMORY_MEMORIES_LANE_PROJECT, bn as CHUNKING_VERSION$1, bt as FIXED_MEMORY_CHUNKS_AU, cn as SUPPORTED_LOCALES, cr as RETRIEVAL_STORAGE_CHUNK_PROFILE, ct as FIXED_IDX_MEMORY_MEMORIES_PROJECT_FACT_KEY_ACTIVE, d as getRemDiscoveryPath, dn as ADJACENCY_BONUS_PER_PAIR, dt as FIXED_MEMORY_ACTIVE_TASK_EVIDENCE, en as FIXED_VEC_MEMORY, et as FIXED_IDX_MEMORY_ACTIVE_TASK_EVIDENCE_INSTANCE, ft as FIXED_MEMORY_ACTIVE_TASK_INSTANCES, g as readRemOperationalConfig, gt as FIXED_MEMORY_ACTIVE_TASK_TRANSITIONS, hr as experimentMmrDisabled, ht as FIXED_MEMORY_ACTIVE_TASK_REVISIONS, in as PERSISTED_CONTENT_HASH_V3, it as FIXED_IDX_MEMORY_MEMORIES_FACT_ID, jr as REM_SIDECAR_TOKEN_HEADER, jt as FIXED_MEMORY_PROVIDER_AGENT_MAPPINGS, k as MODEL_CALL_WORKLOAD, kt as FIXED_MEMORY_MIGRATION_MARKERS, lt as FIXED_IDX_MEMORY_MEMORIES_PROJECT_TIMESTAMP, mr as experimentCandidatePoolOverride, mt as FIXED_MEMORY_ACTIVE_TASK_MIGRATION_MANIFESTS, nn as PERSISTED_CANDIDATE_HASH_V1, nr as MULTI_HIT_BONUS_CAP, nt as FIXED_IDX_MEMORY_MEMORIES_CATEGORY, o as REM_RUN_PATH, ot as FIXED_IDX_MEMORY_MEMORIES_PROJECT, pt as FIXED_MEMORY_ACTIVE_TASK_MIGRATION_EVIDENCE, q as FIXED_EXTERNAL_VALUE_57, qt as FIXED_PROTOCOL_VALUE_73, r as REM_CORRELATION_ID_HEADER, rn as PERSISTED_CONTENT_HASH_V1, rr as MULTI_HIT_BONUS_PER_HIT, rt as FIXED_IDX_MEMORY_MEMORIES_CONTENT_HASH, s as REM_SIDECAR_HOST, sn as llmRoutingConfigSchema, st as FIXED_IDX_MEMORY_MEMORIES_PROJECT_CONTENT_HASH, tn as FIXED_VEC_MEMORY_CHUNKS, tr as MMR_LAMBDA, tt as FIXED_IDX_MEMORY_ACTIVE_TASK_INSTANCES_PROJECTION, un as ADJACENCY_BONUS_CAP, ur as TIME_DECAY_FLOOR, ut as FIXED_MEMORY, vn as BONUS_TOTAL_INVARIANT, vr as LOCAL_EMBEDDING_CACHE_DIR_DEFAULT, vt as FIXED_MEMORY_CHUNKS_AD, wn as CHUNK_TARGET_TOKENS, wt as FIXED_MEMORY_CHUNKS_MEM_IDX, xn as CHUNK_MAX_TOKENS, xr as LocalEmbedProvider, xt as FIXED_MEMORY_CHUNKS_FTS, yn as CACHE_TTL_MS, yr as LOCAL_EMBEDDING_MODEL, yt as FIXED_MEMORY_CHUNKS_AI, zt as FIXED_MEMORY_UNPLACED_CANDIDATES } from "./config-CByvnX3d.js";
1
+ import { $ as FIXED_IDX_MEMORY_ACTIVE_TASK_CURRENT_REVISION, A as modelCallDestination, At as FIXED_MEMORY_PROFILE_RECOVERY_ENTRIES, B as FIXED_EXTERNAL_VALUE_49, C as getSnoStationMemStateDir, Cn as CHUNK_OVERLAP_TOKENS, Cr as ensureModelDownloaded, Ct as FIXED_MEMORY_CHUNKS_MEM_FACET_IDX, D as settingsToPluginConfig, Dn as DEFAULT_IMPORTANCE, Dt as FIXED_MEMORY_MEMORIES_FACT_ID_INSERT_GUARD, En as DEFAULT_BM25_WEIGHT, Et as FIXED_MEMORY_MEMORIES, Fn as EMBEDDER_DIM, G as FIXED_EXTERNAL_VALUE_55, H as FIXED_EXTERNAL_VALUE_52, Hn as HEAD_EXTRACT_OVERLAP_DROP_RATIO, In as EMBEDDER_MODEL_DEFAULT, It as FIXED_MEMORY_SNO_EXTRACT_CHAT, J as FIXED_EXTERNAL_VALUE_58, K as FIXED_EXTERNAL_VALUE_56, Kn as INTRA_MEMORY_COSINE_THRESHOLD, Kt as FIXED_PROTOCOL_VALUE_69, Ln as EMBEDDER_PROVIDER_DEFAULT, Mn as DEFAULT_RERANK_TIMEOUT_MS, Mt as FIXED_MEMORY_PROVIDER_PROJECT_AGENTS, Nt as FIXED_MEMORY_PROVIDER_PROJECT_MAPPINGS, O as MODEL_CALLS, On as DEFAULT_RECALL_LIFECYCLE, Ot as FIXED_MEMORY_MEMORIES_FACT_ID_UPDATE_GUARD, P as observeAgentId, Pn as DEFAULT_VECTOR_WEIGHT, Q as FIXED_IDX_MEMORY, Rn as EVAL_QA_TRACES_FILENAME, Rt as FIXED_MEMORY_TASK_LIFECYCLE_COMMANDS, Sn as CHUNK_MIN_TOKENS, Sr as LocalReranker, St as FIXED_MEMORY_CHUNKS_MEMORY_ID_IDX, T as readSettings, Tn as CHUNK_TOKENIZER_MODE, Tt as FIXED_MEMORY_EXTRACTION_TIMESTAMPS, U as FIXED_EXTERNAL_VALUE_53, Un as HEAD_EXTRACT_TOKEN_BUDGET, V as FIXED_EXTERNAL_VALUE_51, Vn as HEAD_EXTRACT_MIN_CONTENT_TOKENS, W as FIXED_EXTERNAL_VALUE_54, Wn as IMPORTANCE_WEIGHT_BASE, X as FIXED_EXTERNAL_VALUE_8, Xn as MAX_CHUNK_FETCH_LIMIT, Y as FIXED_EXTERNAL_VALUE_62, Z as FIXED_EXTERNAL_VALUE_9, Zn as MAX_LIST_LIMIT, _r as CachedEmbeddingProvider, _t as FIXED_MEMORY_CHUNKS, a as REM_MODEL_OUTPUT_TOKEN_CAP, an as PERSISTED_PROVIDER_SYSTEM, ar as RECENCY_WEIGHT, at as FIXED_IDX_MEMORY_MEMORIES_LANE_PROJECT, bn as CHUNKING_VERSION$1, bt as FIXED_MEMORY_CHUNKS_AU, cn as SUPPORTED_LOCALES, cr as RETRIEVAL_STORAGE_CHUNK_PROFILE, ct as FIXED_IDX_MEMORY_MEMORIES_PROJECT_FACT_KEY_ACTIVE, d as getRemDiscoveryPath, dn as ADJACENCY_BONUS_PER_PAIR, dt as FIXED_MEMORY_ACTIVE_TASK_EVIDENCE, en as FIXED_VEC_MEMORY, et as FIXED_IDX_MEMORY_ACTIVE_TASK_EVIDENCE_INSTANCE, ft as FIXED_MEMORY_ACTIVE_TASK_INSTANCES, g as readRemOperationalConfig, gt as FIXED_MEMORY_ACTIVE_TASK_TRANSITIONS, hr as experimentMmrDisabled, ht as FIXED_MEMORY_ACTIVE_TASK_REVISIONS, in as PERSISTED_CONTENT_HASH_V3, it as FIXED_IDX_MEMORY_MEMORIES_FACT_ID, jr as REM_SIDECAR_TOKEN_HEADER, jt as FIXED_MEMORY_PROVIDER_AGENT_MAPPINGS, k as MODEL_CALL_WORKLOAD, kt as FIXED_MEMORY_MIGRATION_MARKERS, lt as FIXED_IDX_MEMORY_MEMORIES_PROJECT_TIMESTAMP, mr as experimentCandidatePoolOverride, mt as FIXED_MEMORY_ACTIVE_TASK_MIGRATION_MANIFESTS, nn as PERSISTED_CANDIDATE_HASH_V1, nr as MULTI_HIT_BONUS_CAP, nt as FIXED_IDX_MEMORY_MEMORIES_CATEGORY, o as REM_RUN_PATH, ot as FIXED_IDX_MEMORY_MEMORIES_PROJECT, pt as FIXED_MEMORY_ACTIVE_TASK_MIGRATION_EVIDENCE, q as FIXED_EXTERNAL_VALUE_57, qt as FIXED_PROTOCOL_VALUE_73, r as REM_CORRELATION_ID_HEADER, rn as PERSISTED_CONTENT_HASH_V1, rr as MULTI_HIT_BONUS_PER_HIT, rt as FIXED_IDX_MEMORY_MEMORIES_CONTENT_HASH, s as REM_SIDECAR_HOST, sn as llmRoutingConfigSchema, st as FIXED_IDX_MEMORY_MEMORIES_PROJECT_CONTENT_HASH, tn as FIXED_VEC_MEMORY_CHUNKS, tr as MMR_LAMBDA, tt as FIXED_IDX_MEMORY_ACTIVE_TASK_INSTANCES_PROJECTION, un as ADJACENCY_BONUS_CAP, ur as TIME_DECAY_FLOOR, ut as FIXED_MEMORY, vn as BONUS_TOTAL_INVARIANT, vr as LOCAL_EMBEDDING_CACHE_DIR_DEFAULT, vt as FIXED_MEMORY_CHUNKS_AD, wn as CHUNK_TARGET_TOKENS, wt as FIXED_MEMORY_CHUNKS_MEM_IDX, xn as CHUNK_MAX_TOKENS, xr as LocalEmbedProvider, xt as FIXED_MEMORY_CHUNKS_FTS, yn as CACHE_TTL_MS, yr as LOCAL_EMBEDDING_MODEL, yt as FIXED_MEMORY_CHUNKS_AI, zt as FIXED_MEMORY_UNPLACED_CANDIDATES } from "./config-BwUcq2zS.js";
2
2
  import { createLogger, createLogger as createLogger$1, currentLogContext, privateLogReference, withLogContext } from "@snoai/utils/logger";
3
3
  import path, { dirname, join, resolve } from "node:path";
4
4
  import { appendFileSync, closeSync, createReadStream, existsSync, fstatSync, fsyncSync, ftruncateSync, mkdirSync, openSync, readFileSync, readSync, realpathSync, renameSync, rmSync, statSync, writeFileSync, writeSync } from "node:fs";
@@ -6944,6 +6944,32 @@ function isCcproxyOpenAiBaseUrl(value) {
6944
6944
  return false;
6945
6945
  }
6946
6946
  }
6947
+ /** Joins a chat-completion SSE stream into the body a non-streamed reply carries; `: ping` comments are skipped. */
6948
+ function assembleChatStream(text) {
6949
+ const body = {};
6950
+ let message;
6951
+ for (const line of text.split("\n")) {
6952
+ if (!line.startsWith("data:")) continue;
6953
+ const data = line.slice(5).trim();
6954
+ if (data === "[DONE]") break;
6955
+ const chunk = JSON.parse(data);
6956
+ body.id ??= chunk.id;
6957
+ body.model ??= chunk.model;
6958
+ if (chunk.usage) body.usage = chunk.usage;
6959
+ const choice = chunk.choices?.[0];
6960
+ if (!choice) continue;
6961
+ message ??= { content: "" };
6962
+ if (typeof choice.delta?.content === "string") message.content += choice.delta.content;
6963
+ if (choice.finish_reason) message.finishReason = choice.finish_reason;
6964
+ }
6965
+ return {
6966
+ ...body,
6967
+ choices: message ? [{
6968
+ message: { content: message.content },
6969
+ finish_reason: message.finishReason
6970
+ }] : []
6971
+ };
6972
+ }
6947
6973
  async function snoStationMemDispatch(ctx) {
6948
6974
  const cfgExt = ctx.config;
6949
6975
  const provider = ctx.provider;
@@ -6995,7 +7021,11 @@ async function snoStationMemDispatch(ctx) {
6995
7021
  body: JSON.stringify({
6996
7022
  model: ctx.model,
6997
7023
  messages: ctx.messages,
6998
- ...callBody
7024
+ ...callBody,
7025
+ ...provider === "sno-gpu" ? {
7026
+ stream: true,
7027
+ stream_options: { include_usage: true }
7028
+ } : {}
6999
7029
  })
7000
7030
  });
7001
7031
  diagnostic.headersAt = performance.now();
@@ -7013,7 +7043,7 @@ async function snoStationMemDispatch(ctx) {
7013
7043
  }
7014
7044
  let body;
7015
7045
  try {
7016
- body = await response.json();
7046
+ body = response.headers.get("content-type")?.includes("text/event-stream") ? assembleChatStream(await response.text()) : await response.json();
7017
7047
  diagnostic.bodyAt = performance.now();
7018
7048
  } catch (parseErr) {
7019
7049
  if (abortedProviderCategory(requestAbort)) throwTerminalAbort(parseErr, requestAbort);
@@ -7335,12 +7365,12 @@ function createLlmClient(config) {
7335
7365
  let lastError = null;
7336
7366
  let lastUsage = null;
7337
7367
  const resolveRequestTimeoutMs = (request) => {
7338
- if (destinationFor(request) !== "sno-gpu" || !request.callId.startsWith("E") || MODEL_CALLS[request.callId].occasion !== "memoryExtract") return request.timeoutMs ?? config.timeoutMs ?? 3e4;
7368
+ if (!request.callId.startsWith("E") || MODEL_CALLS[request.callId].occasion !== "memoryExtract") return request.timeoutMs ?? config.timeoutMs ?? 3e4;
7339
7369
  const operationDeadline = memoryOperationDeadline();
7340
7370
  if (operationDeadline === void 0) return request.timeoutMs ?? 3e5;
7341
7371
  const remainingMs = operationDeadline - performance.now();
7342
7372
  if (remainingMs <= 0) throw new LlmClientTerminalError("timeout", "Memory operation deadline exhausted before extraction");
7343
- return Math.min(request.timeoutMs ?? remainingMs, remainingMs);
7373
+ return Math.floor(Math.min(request.timeoutMs ?? remainingMs, remainingMs));
7344
7374
  };
7345
7375
  const destinationFor = (request) => {
7346
7376
  if (!config.routing) return "host";
@@ -7668,7 +7698,7 @@ function createLlmClient(config) {
7668
7698
  const attemptLimit = request.emptyReplyAttempts ?? EMPTY_REPLY_ATTEMPTS;
7669
7699
  for (let attempt = 2; attempt <= attemptLimit; attempt += 1) {
7670
7700
  if (content === null || content.raw.trim().length > 0 || budget.remaining <= 0) break;
7671
- const remainingMs = deadlineMs - performance.now();
7701
+ const remainingMs = Math.floor(deadlineMs - performance.now());
7672
7702
  if (remainingMs <= 0) break;
7673
7703
  log$20.debug("Retrying empty model reply", {
7674
7704
  call_id: request.callId,
@@ -29837,7 +29867,7 @@ async function runWithCanonicalStoreWriteMutex(canonicalStorePath, action) {
29837
29867
  async function openBatchRuntime(input) {
29838
29868
  const settings = input.settings;
29839
29869
  const dbPath = settings.store.path;
29840
- const pluginConfig = settingsToPluginConfig(settings, "product");
29870
+ const pluginConfig = settingsToPluginConfig(settings, process.env.SNO_USAGE_CLASS === "research" ? "research" : "product");
29841
29871
  initSqliteRuntime(settings.store.encryptionKey);
29842
29872
  const embedder = createEmbedder(pluginConfig.embedding, getSnoStationMemStateDir());
29843
29873
  let store;
@@ -1,5 +1,5 @@
1
- import { At as getAuditPath, Dt as appendAuditEntryStrict, K as REM_BUILT_OPERATION_TYPES, Ot as compactAuditLog, Pt as readJsonlLines, bt as ModelCallRefusedError, d as RemJobStore, f as parseRemJobStats, n as remNeedsHost, q as parseRemOperationType } from "./rem-trigger-CBfyJVfh.js";
2
- import { $n as MEMORY_SHUTDOWN_TIMEOUT_MS, Ar as MEMORY_SKIN_HEADER, C as getSnoStationMemStateDir, Dr as MEMORY_ERROR_STATUS, Er as MEMORY_DEFAULT_SKIN_ID, Mr as memoryMethod, S as getSidecarSocketPath, _ as readRemTestHoldMs, c as REM_SIDECAR_ORIGIN, d as getRemDiscoveryPath, f as getRemJobJournalPath, g as readRemOperationalConfig, i as REM_JOBS_PATH_PREFIX, kr as MEMORY_ROUTES, l as REM_SOURCE, r as REM_CORRELATION_ID_HEADER, s as REM_SIDECAR_HOST, u as getRemChassisJournalPath, v as SettingsUnavailableError, y as getDiscoveryPath } from "./config-CByvnX3d.js";
1
+ import { At as getAuditPath, Dt as appendAuditEntryStrict, K as REM_BUILT_OPERATION_TYPES, Ot as compactAuditLog, Pt as readJsonlLines, bt as ModelCallRefusedError, d as RemJobStore, f as parseRemJobStats, n as remNeedsHost, q as parseRemOperationType } from "./rem-trigger-pg_cCp5U.js";
2
+ import { $n as MEMORY_SHUTDOWN_TIMEOUT_MS, Ar as MEMORY_SKIN_HEADER, C as getSnoStationMemStateDir, Dr as MEMORY_ERROR_STATUS, Er as MEMORY_DEFAULT_SKIN_ID, Mr as memoryMethod, S as getSidecarSocketPath, _ as readRemTestHoldMs, c as REM_SIDECAR_ORIGIN, d as getRemDiscoveryPath, f as getRemJobJournalPath, g as readRemOperationalConfig, i as REM_JOBS_PATH_PREFIX, kr as MEMORY_ROUTES, l as REM_SOURCE, r as REM_CORRELATION_ID_HEADER, s as REM_SIDECAR_HOST, u as getRemChassisJournalPath, v as SettingsUnavailableError, y as getDiscoveryPath } from "./config-BwUcq2zS.js";
3
3
  import { t as ContractError } from "./error-D-wb-rZw.js";
4
4
  import { setImmediate } from "node:timers/promises";
5
5
  import { createLogger, currentLogContext, effectiveLogLevel, emitDiagnostic } from "@snoai/utils/logger";
@@ -335,7 +335,7 @@ async function startOwnedRemSidecar() {
335
335
  async open() {
336
336
  if (currentMemory) return currentMemory;
337
337
  if (settingsError) throw settingsError;
338
- openingMemory ??= import("./memory-runtime-DXr1VO1p.js").then((module) => module.MemoryRuntimePool.open()).then((pool) => {
338
+ openingMemory ??= import("./memory-runtime-B4A1t5DO.js").then((module) => module.MemoryRuntimePool.open()).then((pool) => {
339
339
  currentMemory = pool;
340
340
  if (stopping) pool.stopTimers();
341
341
  return pool;
@@ -730,7 +730,7 @@ async function runChassisJob(store, journal, waveId, holdMs, runtime) {
730
730
  cleanRefusalReasons.push(reason);
731
731
  await appendChassisRefusal(journal, queued, operation, "refused", reason);
732
732
  }
733
- const { runRemProductionOrderedWave } = await import("./rem-batch-executor-DiU8hSGc.js");
733
+ const { runRemProductionOrderedWave } = await import("./rem-batch-executor-BUgNyYLv.js");
734
734
  const result = enabledOperations.length === 0 ? {
735
735
  decision: "allow",
736
736
  reasonCode: null,
@@ -1,4 +1,4 @@
1
- import { Or as MEMORY_RECONNECT_INTERVAL_MS, m as isRemTraceEnabled, p as getRemTraceLogPath, v as SettingsUnavailableError } from "../config-CByvnX3d.js";
1
+ import { Or as MEMORY_RECONNECT_INTERVAL_MS, m as isRemTraceEnabled, p as getRemTraceLogPath, v as SettingsUnavailableError } from "../config-BwUcq2zS.js";
2
2
  import { setTimeout } from "node:timers/promises";
3
3
  import { addLogFileTarget, closeLogger, createLogger } from "@snoai/utils/logger";
4
4
  //#region src/sidecar/main.ts
@@ -6,7 +6,7 @@ import { addLogFileTarget, closeLogger, createLogger } from "@snoai/utils/logger
6
6
  * @purpose Boots the standalone local REM sidecar process.
7
7
  * @boundary Process environment, sidecar lifecycle, and local request-log destination.
8
8
  */
9
- const { startRemSidecar, DuplicateSidecarError } = await import("../server-BlbG5uOM.js");
9
+ const { startRemSidecar, DuplicateSidecarError } = await import("../server-CByyXSvp.js");
10
10
  let sidecar;
11
11
  for (let attempt = 1; !sidecar; attempt++) try {
12
12
  sidecar = await startRemSidecar();
@@ -4,12 +4,12 @@ import "./internal/engine/shared/types.js";
4
4
  import "./internal/engine/security/redact.js";
5
5
  import "./internal/engine/shared/utils.js";
6
6
  import "./runtime-audit-log-DK6xAYxh.js";
7
- import "./llm-client-ByzZRemn.js";
7
+ import "./llm-client-Dq9FZPdC.js";
8
8
  import "./capture-policy-detector-DaMfy9CZ.js";
9
9
  import "./ambient-learning-text-normalizer-CxjATmMp.js";
10
- import "./memory-temporality-classifier-Bauwnls7.js";
10
+ import "./memory-temporality-classifier-CHcnOT5T.js";
11
11
  import "./scopes-a4Kly9n7.js";
12
- import "./atomic-memory-extraction-l65aofbl.js";
12
+ import "./atomic-memory-extraction-pL1_58Kw.js";
13
13
  import "./internal/store/sqlite-runtime.js";
14
14
  import "./connection-BtK-3r-f.js";
15
15
  import "./internal/store/data-paths.js";
@@ -23,8 +23,8 @@ import "./retriever-C54bXeDh.js";
23
23
  import "./internal/engine/observability/observable-retriever.js";
24
24
  import "./internal/engine/observability/session-registry.js";
25
25
  import "./daily-log-generator-DEsiCs7o.js";
26
- import "./reflection-embedded-generator-BEdDusPV.js";
27
- import "./strategy-hook-runner-F-ruiw48.js";
26
+ import "./reflection-embedded-generator-Do_r_LbU.js";
27
+ import "./strategy-hook-runner-Bg6rBY71.js";
28
28
  import "./data-bootstrap-P8sie9WA.js";
29
29
  import "@snoai/sqlite-crypto";
30
30
  export {};
@@ -10,7 +10,7 @@ import { t as checkMemoryOperation } from "./operation-cancellation-QcwC4mDX.js"
10
10
  import { u as runWithMemoryAudit } from "./runtime-audit-log-DK6xAYxh.js";
11
11
  import { getSnoStationMemStateDir } from "./internal/contract/profile.js";
12
12
  import "./internal/engine/extraction/extraction-text-sanitizer.js";
13
- import "./memory-temporality-classifier-Bauwnls7.js";
13
+ import "./memory-temporality-classifier-CHcnOT5T.js";
14
14
  import { a as readMemorySourceOrder, i as readCorrectionMoment, n as compareMemoryRetirementOrder, o as readMemorySourceOrderOrOldest, r as compareMemorySourceOrder, s as sameSourceTurn, t as closeMemoryRow } from "./memory-source-order-YMRoeDLd.js";
15
15
  import { REM_UPDATE_LOCALES, deriveRemWriteIdentity, getRemUpdateLocaleResource, writeRemTwoFacetTransaction } from "./internal/engine/rem/index.js";
16
16
  import { n as state_vocabulary_default, r as attribute_dictionary_default, t as relations } from "./relation-dictionary-Cev1kyLe.js";
@@ -1,7 +1,7 @@
1
1
  import { DEFAULT_REFLECTION_SESSION_TTL_MS } from "./internal/config/index.js";
2
2
  import { setLruEntry, touchLruEntry } from "./internal/engine/shared/lru.js";
3
3
  import { n as createErrorSignalTracker } from "./error-signals-lMH2uAdV.js";
4
- import { i as pruneReflectionState } from "./reflection-embedded-generator-BEdDusPV.js";
4
+ import { i as pruneReflectionState } from "./reflection-embedded-generator-Do_r_LbU.js";
5
5
  import { a as loadAgentReflectionSlicesFromEntries } from "./memory-entry-projector-B36Nwsi_.js";
6
6
  import { createLogger } from "@snoai/utils/logger";
7
7
  //#region src/engine/reflection/reflection-slice-loader.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@snoai/memory",
3
- "version": "1.6.0",
3
+ "version": "1.7.0",
4
4
  "license": "Apache-2.0",
5
5
  "publishConfig": { "access": "public" },
6
6
  "repository": {
@@ -9,7 +9,7 @@
9
9
  "E2": {
10
10
  "local-first": "off",
11
11
  "agent-native": "host",
12
- "rem-enhanced": "sno-gpu"
12
+ "rem-enhanced": "host"
13
13
  },
14
14
  "E3": {
15
15
  "local-first": "off",
@@ -19,27 +19,27 @@
19
19
  "E4": {
20
20
  "local-first": "off",
21
21
  "agent-native": "host",
22
- "rem-enhanced": "sno-gpu"
22
+ "rem-enhanced": "host"
23
23
  },
24
24
  "E5": {
25
25
  "local-first": "off",
26
26
  "agent-native": "host",
27
- "rem-enhanced": "sno-gpu"
27
+ "rem-enhanced": "host"
28
28
  },
29
29
  "E6": {
30
30
  "local-first": "off",
31
31
  "agent-native": "host",
32
- "rem-enhanced": "sno-gpu"
32
+ "rem-enhanced": "host"
33
33
  },
34
34
  "E7": {
35
35
  "local-first": "off",
36
36
  "agent-native": "host",
37
- "rem-enhanced": "sno-gpu"
37
+ "rem-enhanced": "host"
38
38
  },
39
39
  "E8": {
40
40
  "local-first": "off",
41
41
  "agent-native": "host",
42
- "rem-enhanced": "sno-gpu"
42
+ "rem-enhanced": "host"
43
43
  },
44
44
  "E9": {
45
45
  "local-first": "off",
@@ -59,7 +59,7 @@
59
59
  "E12": {
60
60
  "local-first": "off",
61
61
  "agent-native": "host",
62
- "rem-enhanced": "sno-gpu"
62
+ "rem-enhanced": "host"
63
63
  },
64
64
  "P1": {
65
65
  "local-first": "off",
@@ -287,11 +287,12 @@ or `removed`, and is `null` otherwise. `value` for a to-do is the discrete actio
287
287
  Reply with one JSON object and nothing before or after it. Its shape is
288
288
 
289
289
  ```
290
- {"claims_found": ["<claim>", "<claim>"], "records": [{...}, {...}]}
290
+ {"claims_found": [<turn_index>, <turn_index>], "records": [{...}, {...}]}
291
291
  ```
292
292
 
293
- `claims_found` comes first, inside the object under its key: one short string for each claim
294
- you return, in the order the claims appear, and an empty array when the window states none.
293
+ `claims_found` comes first, inside the object under its key: for each claim you return, in the
294
+ order the claims appear, the `turn_index` of the turn that states it (a number, never the claim's
295
+ words), and an empty array when the window states none.
295
296
  `records` follows, one record for each entry of `claims_found`, each record complete as
296
297
  `response_schema` describes, with its `source_span` filled in. Listing the claims first is what
297
298
  makes the array complete: a reply that opens `records` at once is where whole turns go missing. The task-specific instructions the engine appends below (turns to account for, subject
@@ -102,8 +102,9 @@ Even when no claims remain, return the decisions; empty claims and facts do not
102
102
  ## Capture reply
103
103
 
104
104
  Return only JSON matching response_schema, with claims_found FIRST, decisions second, facts last.
105
- claims_found lists the claims you found before forming facts. Claims may merge or split into
106
- facts, so the two lists need not have the same length. Never return empty facts when claims_found
105
+ claims_found lists the claims you found before forming facts, one entry per claim: the turn_index
106
+ of the turn that states it, never the claim's words. Claims may merge or split into facts, so the
107
+ two lists need not have the same length. Never return empty facts when claims_found
107
108
  is nonempty. facts contains one self-contained
108
109
  sentence per captured claim, with integer ids 0..n-1 in list order. For a window with no claims,
109
110
  return empty claims_found and facts arrays, and still classify every user turn in decisions.