agent-working-memory 0.7.17 → 0.8.5

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 (186) hide show
  1. package/README.md +156 -15
  2. package/dist/adapters/common.js +202 -202
  3. package/dist/adapters/http.js +22 -22
  4. package/dist/api/routes.d.ts +1 -1
  5. package/dist/api/routes.d.ts.map +1 -1
  6. package/dist/api/routes.js +258 -79
  7. package/dist/api/routes.js.map +1 -1
  8. package/dist/cli/migrate.d.ts +42 -0
  9. package/dist/cli/migrate.d.ts.map +1 -0
  10. package/dist/cli/migrate.js +268 -0
  11. package/dist/cli/migrate.js.map +1 -0
  12. package/dist/cli.js +147 -103
  13. package/dist/cli.js.map +1 -1
  14. package/dist/coordination/circuit-breaker.d.ts +24 -0
  15. package/dist/coordination/circuit-breaker.d.ts.map +1 -0
  16. package/dist/coordination/circuit-breaker.js +70 -0
  17. package/dist/coordination/circuit-breaker.js.map +1 -0
  18. package/dist/coordination/failure-modes.d.ts +21 -0
  19. package/dist/coordination/failure-modes.d.ts.map +1 -0
  20. package/dist/coordination/failure-modes.js +49 -0
  21. package/dist/coordination/failure-modes.js.map +1 -0
  22. package/dist/coordination/peer-decisions.js +7 -7
  23. package/dist/coordination/routes.d.ts.map +1 -1
  24. package/dist/coordination/routes.js +44 -1
  25. package/dist/coordination/routes.js.map +1 -1
  26. package/dist/coordination/schema.d.ts.map +1 -1
  27. package/dist/coordination/schema.js +18 -0
  28. package/dist/coordination/schema.js.map +1 -1
  29. package/dist/coordination/schemas.d.ts +9 -9
  30. package/dist/coordination/stale.d.ts +9 -1
  31. package/dist/coordination/stale.d.ts.map +1 -1
  32. package/dist/coordination/stale.js +53 -9
  33. package/dist/coordination/stale.js.map +1 -1
  34. package/dist/core/embeddings.d.ts +16 -10
  35. package/dist/core/embeddings.d.ts.map +1 -1
  36. package/dist/core/embeddings.js +54 -38
  37. package/dist/core/embeddings.js.map +1 -1
  38. package/dist/core/ml-worker-entry.d.ts +17 -0
  39. package/dist/core/ml-worker-entry.d.ts.map +1 -0
  40. package/dist/core/ml-worker-entry.js +193 -0
  41. package/dist/core/ml-worker-entry.js.map +1 -0
  42. package/dist/core/ml-worker.d.ts +59 -0
  43. package/dist/core/ml-worker.d.ts.map +1 -0
  44. package/dist/core/ml-worker.js +253 -0
  45. package/dist/core/ml-worker.js.map +1 -0
  46. package/dist/core/query-expander.d.ts +13 -15
  47. package/dist/core/query-expander.d.ts.map +1 -1
  48. package/dist/core/query-expander.js +48 -54
  49. package/dist/core/query-expander.js.map +1 -1
  50. package/dist/core/reranker.d.ts +9 -19
  51. package/dist/core/reranker.d.ts.map +1 -1
  52. package/dist/core/reranker.js +33 -35
  53. package/dist/core/reranker.js.map +1 -1
  54. package/dist/core/salience.d.ts +32 -5
  55. package/dist/core/salience.d.ts.map +1 -1
  56. package/dist/core/salience.js +201 -28
  57. package/dist/core/salience.js.map +1 -1
  58. package/dist/core/write-pipeline.d.ts +10 -2
  59. package/dist/core/write-pipeline.d.ts.map +1 -1
  60. package/dist/core/write-pipeline.js +218 -49
  61. package/dist/core/write-pipeline.js.map +1 -1
  62. package/dist/engine/activation.d.ts +2 -2
  63. package/dist/engine/activation.d.ts.map +1 -1
  64. package/dist/engine/activation.js +238 -115
  65. package/dist/engine/activation.js.map +1 -1
  66. package/dist/engine/confidence.d.ts +62 -0
  67. package/dist/engine/confidence.d.ts.map +1 -0
  68. package/dist/engine/confidence.js +100 -0
  69. package/dist/engine/confidence.js.map +1 -0
  70. package/dist/engine/connections.d.ts +47 -8
  71. package/dist/engine/connections.d.ts.map +1 -1
  72. package/dist/engine/connections.js +83 -22
  73. package/dist/engine/connections.js.map +1 -1
  74. package/dist/engine/consolidation-scheduler.d.ts +46 -10
  75. package/dist/engine/consolidation-scheduler.d.ts.map +1 -1
  76. package/dist/engine/consolidation-scheduler.js +170 -50
  77. package/dist/engine/consolidation-scheduler.js.map +1 -1
  78. package/dist/engine/consolidation.d.ts +16 -2
  79. package/dist/engine/consolidation.d.ts.map +1 -1
  80. package/dist/engine/consolidation.js +143 -44
  81. package/dist/engine/consolidation.js.map +1 -1
  82. package/dist/engine/eval.d.ts +2 -2
  83. package/dist/engine/eval.d.ts.map +1 -1
  84. package/dist/engine/eval.js +9 -9
  85. package/dist/engine/eval.js.map +1 -1
  86. package/dist/engine/eviction.d.ts +4 -4
  87. package/dist/engine/eviction.d.ts.map +1 -1
  88. package/dist/engine/eviction.js +15 -15
  89. package/dist/engine/eviction.js.map +1 -1
  90. package/dist/engine/retraction.d.ts +93 -5
  91. package/dist/engine/retraction.d.ts.map +1 -1
  92. package/dist/engine/retraction.js +238 -19
  93. package/dist/engine/retraction.js.map +1 -1
  94. package/dist/engine/staging.d.ts +1 -1
  95. package/dist/engine/staging.d.ts.map +1 -1
  96. package/dist/engine/staging.js +3 -3
  97. package/dist/engine/staging.js.map +1 -1
  98. package/dist/hooks/sidecar.d.ts +1 -1
  99. package/dist/hooks/sidecar.d.ts.map +1 -1
  100. package/dist/hooks/sidecar.js +4 -4
  101. package/dist/hooks/sidecar.js.map +1 -1
  102. package/dist/index.js +48 -31
  103. package/dist/index.js.map +1 -1
  104. package/dist/mcp.js +167 -141
  105. package/dist/mcp.js.map +1 -1
  106. package/dist/storage/factory.d.ts +55 -0
  107. package/dist/storage/factory.d.ts.map +1 -0
  108. package/dist/storage/factory.js +135 -0
  109. package/dist/storage/factory.js.map +1 -0
  110. package/dist/storage/pglite-schema.d.ts +20 -0
  111. package/dist/storage/pglite-schema.d.ts.map +1 -0
  112. package/dist/storage/pglite-schema.js +165 -0
  113. package/dist/storage/pglite-schema.js.map +1 -0
  114. package/dist/storage/pglite.d.ts +187 -0
  115. package/dist/storage/pglite.d.ts.map +1 -0
  116. package/dist/storage/pglite.js +1114 -0
  117. package/dist/storage/pglite.js.map +1 -0
  118. package/dist/storage/sqlite.d.ts +117 -0
  119. package/dist/storage/sqlite.d.ts.map +1 -1
  120. package/dist/storage/sqlite.js +357 -8
  121. package/dist/storage/sqlite.js.map +1 -1
  122. package/dist/storage/store.d.ts +63 -0
  123. package/dist/storage/store.d.ts.map +1 -0
  124. package/dist/storage/store.js +27 -0
  125. package/dist/storage/store.js.map +1 -0
  126. package/dist/types/engram.d.ts +92 -2
  127. package/dist/types/engram.d.ts.map +1 -1
  128. package/dist/types/engram.js.map +1 -1
  129. package/package.json +3 -1
  130. package/src/adapters/claude-code.ts +218 -218
  131. package/src/adapters/codex.ts +252 -252
  132. package/src/adapters/common.ts +411 -411
  133. package/src/adapters/cursor.ts +135 -135
  134. package/src/adapters/http.ts +93 -93
  135. package/src/adapters/index.ts +31 -31
  136. package/src/adapters/types.ts +75 -75
  137. package/src/api/index.ts +3 -3
  138. package/src/api/routes.ts +970 -714
  139. package/src/cli/migrate.ts +307 -0
  140. package/src/cli.ts +755 -719
  141. package/src/coordination/circuit-breaker.ts +83 -0
  142. package/src/coordination/events.ts +90 -90
  143. package/src/coordination/failure-modes.ts +50 -0
  144. package/src/coordination/peer-decisions.ts +105 -105
  145. package/src/coordination/plugin-loader.ts +60 -60
  146. package/src/coordination/plugin.ts +44 -44
  147. package/src/coordination/routes.ts +56 -1
  148. package/src/coordination/schema.ts +13 -0
  149. package/src/coordination/stale.ts +80 -11
  150. package/src/coordination/types.ts +311 -311
  151. package/src/coordination/write-mutex.ts +69 -69
  152. package/src/core/auto-tagger.ts +168 -168
  153. package/src/core/decay.ts +63 -63
  154. package/src/core/embeddings.ts +110 -93
  155. package/src/core/index.ts +5 -5
  156. package/src/core/logger.ts +36 -36
  157. package/src/core/ml-worker-entry.ts +194 -0
  158. package/src/core/ml-worker.ts +281 -0
  159. package/src/core/query-expander.ts +122 -128
  160. package/src/core/reranker.ts +119 -125
  161. package/src/core/salience.ts +200 -33
  162. package/src/core/write-pipeline.ts +521 -343
  163. package/src/engine/activation.ts +235 -109
  164. package/src/engine/confidence.ts +120 -0
  165. package/src/engine/connections.ts +162 -103
  166. package/src/engine/consolidation-scheduler.ts +242 -125
  167. package/src/engine/consolidation.ts +138 -45
  168. package/src/engine/eval.ts +102 -102
  169. package/src/engine/eviction.ts +101 -101
  170. package/src/engine/index.ts +8 -8
  171. package/src/engine/retraction.ts +366 -116
  172. package/src/engine/staging.ts +74 -74
  173. package/src/hooks/sidecar.ts +5 -5
  174. package/src/index.ts +226 -212
  175. package/src/mcp.ts +1145 -1121
  176. package/src/storage/factory.ts +147 -0
  177. package/src/storage/index.ts +3 -3
  178. package/src/storage/pglite-schema.ts +166 -0
  179. package/src/storage/pglite.ts +1363 -0
  180. package/src/storage/sqlite.ts +402 -7
  181. package/src/storage/store.ts +80 -0
  182. package/src/types/agent.ts +67 -67
  183. package/src/types/checkpoint.ts +46 -46
  184. package/src/types/engram.ts +101 -3
  185. package/src/types/eval.ts +100 -100
  186. package/src/types/index.ts +6 -6
@@ -76,11 +76,40 @@ const CONFIDENCE_PRIORS = {
76
76
  * Set process.env.AWM_WRITE_PIPELINE=off to revert to legacy create-only
77
77
  * behavior (the same write inputs but every write creates a new engram).
78
78
  */
79
- export function performWrite(engines, input) {
79
+ export async function performWrite(engines, input) {
80
80
  const { store, connectionEngine } = engines;
81
81
  const enableReinforcement = input.enableReinforcement !== false
82
82
  && process.env.AWM_WRITE_PIPELINE !== 'off';
83
- const noveltyResult = computeNoveltyWithMatch(store, input.agentId, input.concept, input.content, input.workspace ?? null);
83
+ // Profiling: AWM_PROFILE_WRITE=1 logs ms-per-phase to stderr (v0.8.2).
84
+ // Off by default; zero cost when unset.
85
+ const profile = process.env.AWM_PROFILE_WRITE === '1';
86
+ const startTotal = profile ? performance.now() : 0;
87
+ let tNovelty = 0, tCreate = 0, tEmbed = 0;
88
+ // Pre-embed once (v0.8.5): the embedding is needed for cosine-based novelty
89
+ // and is also the embedding we'll store on the engram. Computing it once
90
+ // here costs ~50-100ms but saves the post-write async embed pass (which
91
+ // used to run after createEngram). Net cost is the same; we just pay it
92
+ // synchronously up front in exchange for a backend-agnostic novelty signal.
93
+ //
94
+ // If embed fails (model not loaded, hardware issue), we silently fall back
95
+ // to BM25-only novelty and write without an embedding (the async embed
96
+ // hook below will retry).
97
+ // Disable via AWM_NOVELTY_EMBED=0 to keep writes ultra-fast at the cost
98
+ // of cross-backend novelty consistency.
99
+ const tStartEmbed = profile ? performance.now() : 0;
100
+ let prewriteEmbedding = null;
101
+ if (process.env.AWM_NOVELTY_EMBED !== '0') {
102
+ try {
103
+ prewriteEmbedding = await embed(`${input.concept} ${input.content}`);
104
+ }
105
+ catch { /* fall through — async embed will retry later */ }
106
+ }
107
+ if (profile)
108
+ tEmbed = performance.now() - tStartEmbed;
109
+ const tStartNovelty = profile ? performance.now() : 0;
110
+ const noveltyResult = await computeNoveltyWithMatch(store, input.agentId, input.concept, input.content, input.workspace ?? null, prewriteEmbedding);
111
+ if (profile)
112
+ tNovelty = performance.now() - tStartNovelty;
84
113
  // Effective event type — auto-promote user-feedback content.
85
114
  const effectiveEventType = input.eventType ?? (detectUserFeedback(input.content) ? 'user_feedback' : 'observation');
86
115
  // Effective memory class — auto-canonical for user-feedback and verified findings.
@@ -99,8 +128,10 @@ export function performWrite(engines, input) {
99
128
  memoryClass: effectiveMemoryClass,
100
129
  });
101
130
  // -- Reinforce / Supersede branching --
131
+ const tStartCreate = profile ? performance.now() : 0;
132
+ let result = null;
102
133
  if (enableReinforcement && noveltyResult.matchedEngramId) {
103
- const matched = store.getEngram(noveltyResult.matchedEngramId);
134
+ const matched = await store.getEngram(noveltyResult.matchedEngramId);
104
135
  if (matched) {
105
136
  const newConcept = (input.concept ?? '').toLowerCase().trim();
106
137
  const matchedConcept = (matched.concept ?? '').toLowerCase().trim();
@@ -109,51 +140,162 @@ export function performWrite(engines, input) {
109
140
  const isCorrectionSignal = effectiveEventType === 'surprise'
110
141
  || effectiveEventType === 'friction';
111
142
  if (isCorrectionSignal) {
112
- // R3 — supersede the matched engram with the new write
113
- return createNewEngram(engines, input, salience, noveltyResult, {
143
+ // R3 — supersede the matched engram with the new write.
144
+ // Force `active` disposition (v0.8.5): the user explicitly flagged
145
+ // this write as a correction (eventType=surprise/friction). Without
146
+ // this override, cosine-based novelty (which correctly recognizes
147
+ // the correction's semantic similarity to the engram it's
148
+ // correcting) would push salience low and the correction would
149
+ // land in 'staging'. That broke the R2 superseder-reinforce chain
150
+ // for later writes (the chain requires stage='active'). The user's
151
+ // explicit correction intent must win over the duplicate-detection
152
+ // signal. R3 corrections always go active.
153
+ const correctionSalience = {
154
+ ...salience,
155
+ disposition: 'active',
156
+ reasonCodes: [...salience.reasonCodes, 'correction:override-active'],
157
+ };
158
+ result = await createNewEngram(engines, input, correctionSalience, noveltyResult, {
114
159
  effectiveEventType,
115
160
  effectiveMemoryClass,
116
161
  supersedesId: matched.id,
117
- });
118
- }
119
- // R2 — health check on the matched engram
120
- const isHealthy = matched.stage === 'active'
121
- && matched.confidence >= HEALTHY_CONFIDENCE_FLOOR
122
- && matched.supersededBy == null;
123
- if (isHealthy) {
124
- // R1 — reinforce
125
- return reinforceMatched(store, matched, noveltyResult, salience);
162
+ }, prewriteEmbedding);
126
163
  }
127
- // Unhealthy match but it was superseded — try to reinforce the superseder
128
- if (matched.supersededBy) {
129
- const superseder = store.getEngram(matched.supersededBy);
130
- if (superseder && superseder.stage === 'active'
131
- && superseder.confidence >= HEALTHY_CONFIDENCE_FLOOR
132
- && superseder.supersededBy == null) {
133
- return reinforceMatched(store, superseder, noveltyResult, salience);
164
+ else {
165
+ // R2 — health check on the matched engram
166
+ const isHealthy = matched.stage === 'active'
167
+ && matched.confidence >= HEALTHY_CONFIDENCE_FLOOR
168
+ && matched.supersededBy == null;
169
+ if (isHealthy) {
170
+ // R1 — reinforce (and merge new content into matched engram, v0.8.5)
171
+ result = await reinforceMatched(store, matched, noveltyResult, salience, input.content, input.concept);
172
+ }
173
+ else if (matched.supersededBy) {
174
+ // Unhealthy match but it was superseded — try to reinforce the superseder
175
+ const superseder = await store.getEngram(matched.supersededBy);
176
+ if (superseder && superseder.stage === 'active'
177
+ && superseder.confidence >= HEALTHY_CONFIDENCE_FLOOR
178
+ && superseder.supersededBy == null) {
179
+ result = await reinforceMatched(store, superseder, noveltyResult, salience, input.content, input.concept);
180
+ }
134
181
  }
135
182
  }
136
- // Otherwise fall through to create new
137
183
  }
138
184
  }
139
185
  }
140
- // -- Default: create new engram --
141
- return createNewEngram(engines, input, salience, noveltyResult, {
142
- effectiveEventType,
143
- effectiveMemoryClass,
144
- supersedesId: input.supersedes,
145
- });
186
+ // -- Default: create new engram (if no reinforce/supersede branch fired) --
187
+ if (!result) {
188
+ result = await createNewEngram(engines, input, salience, noveltyResult, {
189
+ effectiveEventType,
190
+ effectiveMemoryClass,
191
+ supersedesId: input.supersedes,
192
+ }, prewriteEmbedding);
193
+ }
194
+ if (profile)
195
+ tCreate = performance.now() - tStartCreate;
196
+ if (profile) {
197
+ const total = performance.now() - startTotal;
198
+ // Single-line stderr log; cheap to grep, easy to disable.
199
+ // Format: [write] action=create novelty=42.1ms create=18.3ms total=60.4ms agent=x id=y
200
+ // eslint-disable-next-line no-console
201
+ console.error(`[awm-write] action=${result.action} embed=${tEmbed.toFixed(1)}ms novelty=${tNovelty.toFixed(1)}ms create=${tCreate.toFixed(1)}ms total=${total.toFixed(1)}ms agent=${input.agentId} id=${result.engram.id}`);
202
+ }
203
+ return result;
146
204
  }
147
- function reinforceMatched(store, matched, noveltyResult, salience) {
205
+ /**
206
+ * Reinforce-merge upper bound on content length (chars). When an engram's
207
+ * merged content would exceed this, we drop the OLDEST reinforced segment(s)
208
+ * to make room for the new one. Recency wins because later reinforces
209
+ * usually elaborate on the topic with more specific keywords. Configurable
210
+ * via `AWM_REINFORCE_MAX_CONTENT_LEN`.
211
+ *
212
+ * Default lowered to 1500 chars (~375 tokens) in v0.8.5 follow-up after
213
+ * test:tokens showed 4000-char cap produced 3.5× baseline AWM context size
214
+ * on concept-collision corpora (e.g. concept="${task} conversation"). 1500
215
+ * is large enough to hold ~3–4 reinforced segments without blowing token
216
+ * budget on recall.
217
+ */
218
+ const REINFORCE_MAX_CONTENT_LEN = Number(process.env.AWM_REINFORCE_MAX_CONTENT_LEN ?? 1500);
219
+ const REINFORCE_SEPARATOR = '\n\n--- reinforced ---\n';
220
+ /**
221
+ * Merge new content into an existing engram on reinforce (v0.8.5).
222
+ *
223
+ * Prior behavior: reinforce-on-duplicate kept ONLY the first write's
224
+ * content. Subsequent same-concept writes bumped confidence + accessCount
225
+ * but their content was discarded. When the new content carried valuable
226
+ * keyword detail (later writes elaborating on the topic), that information
227
+ * was lost — confirmed via scripts/trace-recall-divergence.ts on
228
+ * test:tokens, where multi-turn auth-assistant content (HS256, refresh
229
+ * tokens, 15 min, 7 day) consolidated into the FIRST auth-assistant turn's
230
+ * content (just "I'll set up JWT auth with jsonwebtoken...") losing all
231
+ * keyword info.
232
+ *
233
+ * Behavior: append the new content with a separator, unless it's already a
234
+ * substring of the existing content (true repeat — no info gain). When the
235
+ * projected length exceeds REINFORCE_MAX_CONTENT_LEN, drop the OLDEST
236
+ * reinforced segment(s) until it fits. The first segment (original write)
237
+ * is also evictable if subsequent reinforces have replaced it with more
238
+ * specific content.
239
+ *
240
+ * Returns `{ merged, appended }` so callers can skip the re-embed + DB
241
+ * update when nothing changed.
242
+ */
243
+ function mergeReinforcedContent(existing, addition) {
244
+ const trimmed = (addition ?? '').trim();
245
+ if (!trimmed)
246
+ return { merged: existing, appended: false };
247
+ // Already-covered: new content is a substring of existing — true repeat.
248
+ if (existing.includes(trimmed))
249
+ return { merged: existing, appended: false };
250
+ // Split into segments on the separator so we can drop oldest on overflow.
251
+ const segments = existing.split(REINFORCE_SEPARATOR);
252
+ segments.push(trimmed);
253
+ let projected = segments.join(REINFORCE_SEPARATOR);
254
+ // Drop oldest segments until the projected content fits the cap. Always
255
+ // keep the new content (segments[last]) — if even the new addition alone
256
+ // exceeds the cap, we keep it anyway since recency drives value.
257
+ while (projected.length > REINFORCE_MAX_CONTENT_LEN && segments.length > 1) {
258
+ segments.shift();
259
+ projected = segments.join(REINFORCE_SEPARATOR);
260
+ }
261
+ return { merged: projected, appended: true };
262
+ }
263
+ async function reinforceMatched(store, matched, noveltyResult, salience,
264
+ /** The new write's content, so we can merge it into the matched engram (v0.8.5). */
265
+ newContent = '',
266
+ /** The new write's concept, used for re-embed text when content changes. */
267
+ newConceptHint = '') {
148
268
  const previousConfidence = matched.confidence;
149
269
  const previousAccessCount = matched.accessCount;
150
270
  const newConfidence = Math.min(REINFORCE_CONFIDENCE_CEIL, previousConfidence + REINFORCE_CONFIDENCE_DELTA);
151
- store.updateConfidence(matched.id, newConfidence);
152
- store.touchEngram(matched.id);
271
+ await store.updateConfidence(matched.id, newConfidence);
272
+ await store.touchEngram(matched.id);
273
+ // v0.8.5: merge new content into existing engram so reinforce-on-duplicate
274
+ // doesn't throw away later writes' information. Re-embed the merged
275
+ // content so semantic recall reflects the accumulated knowledge.
276
+ let mergedContent = matched.content;
277
+ if (newContent && process.env.AWM_REINFORCE_MERGE_CONTENT !== '0') {
278
+ const result = mergeReinforcedContent(matched.content, newContent);
279
+ if (result.appended) {
280
+ mergedContent = result.merged;
281
+ try {
282
+ await store.updateContent(matched.id, mergedContent);
283
+ // Re-embed the merged content so cosine recall surfaces the new
284
+ // info. Use concept + merged-content; embedding model truncates
285
+ // beyond 512 tokens but the topic anchor (early content) drives
286
+ // the vector for retrieval purposes.
287
+ const conceptForEmbed = newConceptHint || matched.concept;
288
+ const newVec = await embed(`${conceptForEmbed} ${mergedContent}`);
289
+ await store.updateEmbedding(matched.id, newVec);
290
+ }
291
+ catch { /* merge is best-effort — confidence bump already landed */ }
292
+ }
293
+ }
153
294
  // Return the engram with the updated values reflected (the DB write
154
295
  // happened above; the in-memory object is one snapshot behind).
155
296
  const refreshed = {
156
297
  ...matched,
298
+ content: mergedContent,
157
299
  confidence: newConfidence,
158
300
  accessCount: previousAccessCount + 1,
159
301
  lastAccessed: new Date(),
@@ -166,7 +308,10 @@ function reinforceMatched(store, matched, noveltyResult, salience) {
166
308
  reinforce: { previousConfidence, newConfidence, previousAccessCount },
167
309
  };
168
310
  }
169
- function createNewEngram(engines, input, salience, noveltyResult, meta) {
311
+ async function createNewEngram(engines, input, salience, noveltyResult, meta,
312
+ /** Pre-computed embedding from performWrite (v0.8.5). If non-null, used
313
+ * directly + skips the post-create async embed pass. */
314
+ prewriteEmbedding = null) {
170
315
  const { store, connectionEngine } = engines;
171
316
  const isLowSalience = salience.disposition === 'discard';
172
317
  // Confidence: caller wins, then disposition-aware prior, then fall back
@@ -180,7 +325,7 @@ function createNewEngram(engines, input, salience, noveltyResult, meta) {
180
325
  const tags = [...(input.tags ?? [])];
181
326
  if (isLowSalience && !tags.includes('low-salience'))
182
327
  tags.push('low-salience');
183
- const engram = store.createEngram({
328
+ const engram = await store.createEngram({
184
329
  agentId: input.agentId,
185
330
  concept: input.concept,
186
331
  content: input.content,
@@ -193,37 +338,61 @@ function createNewEngram(engines, input, salience, noveltyResult, meta) {
193
338
  memoryType: input.memoryType,
194
339
  ttl: salience.disposition === 'staging' ? DEFAULT_AGENT_CONFIG.stagingTtlMs : undefined,
195
340
  supersedes: meta.supersedesId,
341
+ sequence: input.sequence,
342
+ references: input.references,
343
+ embedding: prewriteEmbedding && prewriteEmbedding.length > 0
344
+ ? prewriteEmbedding
345
+ : undefined,
196
346
  });
197
347
  if (salience.disposition === 'staging') {
198
- store.updateStage(engram.id, 'staging');
348
+ await store.updateStage(engram.id, 'staging');
199
349
  }
200
350
  // Supersession side-effects: mark the old engram, add causal edge.
201
351
  if (meta.supersedesId) {
202
352
  try {
203
- const oldEngram = store.getEngram(meta.supersedesId);
353
+ const oldEngram = await store.getEngram(meta.supersedesId);
204
354
  if (oldEngram) {
205
- store.supersedeEngram(meta.supersedesId, engram.id);
206
- store.upsertAssociation(engram.id, oldEngram.id, 0.8, 'causal', 0.9);
355
+ await store.supersedeEngram(meta.supersedesId, engram.id);
356
+ await store.upsertAssociation(engram.id, oldEngram.id, 0.8, 'causal', 0.9);
207
357
  }
208
358
  }
209
359
  catch { /* supersession is best-effort */ }
210
360
  }
211
- // Connection discovery — only for non-staged writes (active or low-salience)
212
- if (salience.disposition === 'active' || isLowSalience) {
361
+ // Connection discovery — only for non-staged writes (active or low-salience).
362
+ // Structural engrams skip connection discovery: they're event-log records,
363
+ // not observations the agent needs to think about (0.8 Cluster A).
364
+ //
365
+ // v0.8.2: enqueueAndMaybeFlush queues for the next consolidation cycle
366
+ // (cheap, no event-loop blocking). For cold-start agents (fewer than
367
+ // AWM_CONNECTION_COLD_START_THRESHOLD active engrams, default 10), the
368
+ // queue drains inline as a background task so the first few writes still
369
+ // build a useful association graph before the next consolidation fires.
370
+ const isStructural = meta.effectiveMemoryClass === 'structural';
371
+ if ((salience.disposition === 'active' || isLowSalience) && !isStructural) {
213
372
  try {
214
- connectionEngine.enqueue(engram.id);
373
+ connectionEngine.enqueueAndMaybeFlush(engram.id, input.agentId);
215
374
  }
216
375
  catch { /* non-fatal */ }
217
376
  }
218
- // Async embed — never blocks the response, failure non-fatal
219
- embed(`${input.concept} ${input.content}`)
220
- .then(vec => {
221
- try {
222
- store.updateEmbedding(engram.id, vec);
223
- }
224
- catch { /* engram may be evicted */ }
225
- })
226
- .catch(() => { });
377
+ // Async embed — never blocks the response, failure non-fatal.
378
+ // Structural engrams skip embedding by default (deterministic retrieval only).
379
+ // Caller can override by passing `embed: true` on the write input.
380
+ //
381
+ // v0.8.5: skip the async embed entirely when performWrite already
382
+ // pre-computed the embedding for cosine-based novelty. The embedding
383
+ // was passed to createEngram above; no re-embed needed.
384
+ const alreadyEmbedded = prewriteEmbedding != null && prewriteEmbedding.length > 0;
385
+ const shouldEmbed = (!isStructural || input.embed === true) && !alreadyEmbedded;
386
+ if (shouldEmbed) {
387
+ embed(`${input.concept} ${input.content}`)
388
+ .then(async (vec) => {
389
+ try {
390
+ await store.updateEmbedding(engram.id, vec);
391
+ }
392
+ catch { /* engram may be evicted */ }
393
+ })
394
+ .catch(() => { });
395
+ }
227
396
  const action = meta.supersedesId ? 'supersede' : 'create';
228
397
  return {
229
398
  action,
@@ -1 +1 @@
1
- {"version":3,"file":"write-pipeline.js","sourceRoot":"","sources":["../../src/core/write-pipeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write-pipeline.js","sourceRoot":"","sources":["../../src/core/write-pipeline.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,7 @@
18
18
  */
19
19
  import { ValidationGatedBuffer } from '../core/hebbian.js';
20
20
  import type { ActivationResult, ActivationQuery } from '../types/index.js';
21
- import type { EngramStore } from '../storage/sqlite.js';
21
+ import type { IEngramStore as EngramStore } from '../storage/store.js';
22
22
  export declare class ActivationEngine {
23
23
  private store;
24
24
  private coActivationBuffer;
@@ -50,7 +50,7 @@ export declare class ActivationEngine {
50
50
  * Called by memory_feedback — only strengthens when retrieval was useful.
51
51
  * This prevents hub toxicity from noisy co-retrieval (Kairos-inspired).
52
52
  */
53
- resolveHebbianFeedback(engramId: string, useful: boolean): number;
53
+ resolveHebbianFeedback(engramId: string, useful: boolean): Promise<number>;
54
54
  private explain;
55
55
  }
56
56
  //# sourceMappingURL=activation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../src/engine/activation.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,EAA6C,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAItG,OAAO,KAAK,EACF,gBAAgB,EAAE,eAAe,EAC1C,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAoIxD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,QAAQ,CAAC,cAAc,EAAE,qBAAqB,CAAC;gBAEnC,KAAK,EAAE,WAAW;IAM9B;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IA6kBnE;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAKnC;IAEF,OAAO,CAAC,SAAS;IA+FjB;;;;OAIG;IACH,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM;IAwBjE,OAAO,CAAC,OAAO;CAchB"}
1
+ {"version":3,"file":"activation.d.ts","sourceRoot":"","sources":["../../src/engine/activation.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,EAA6C,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAKtG,OAAO,KAAK,EACF,gBAAgB,EAAE,eAAe,EAC1C,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,YAAY,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAoIvE,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,QAAQ,CAAC,cAAc,EAAE,qBAAqB,CAAC;gBAEnC,KAAK,EAAE,WAAW;IAM9B;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IA0sBnE;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAKnC;YAEY,SAAS;IA+FvB;;;;OAIG;IACG,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBhF,OAAO,CAAC,OAAO;CAchB"}