agent-working-memory 0.11.0 → 0.12.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 (99) hide show
  1. package/README.md +29 -0
  2. package/dist/adapters/claude-code.d.ts.map +1 -1
  3. package/dist/adapters/claude-code.js +63 -3
  4. package/dist/adapters/claude-code.js.map +1 -1
  5. package/dist/adapters/common.d.ts.map +1 -1
  6. package/dist/adapters/common.js +329 -306
  7. package/dist/adapters/common.js.map +1 -1
  8. package/dist/api/routes.d.ts.map +1 -1
  9. package/dist/api/routes.js +29 -7
  10. package/dist/api/routes.js.map +1 -1
  11. package/dist/coordination/routes.d.ts.map +1 -1
  12. package/dist/coordination/routes.js +174 -170
  13. package/dist/coordination/routes.js.map +1 -1
  14. package/dist/core/embeddings.d.ts.map +1 -1
  15. package/dist/core/embeddings.js +3 -0
  16. package/dist/core/embeddings.js.map +1 -1
  17. package/dist/core/entity-extract.d.ts +3 -0
  18. package/dist/core/entity-extract.d.ts.map +1 -0
  19. package/dist/core/entity-extract.js +47 -0
  20. package/dist/core/entity-extract.js.map +1 -0
  21. package/dist/core/salience.d.ts.map +1 -1
  22. package/dist/core/salience.js +14 -2
  23. package/dist/core/salience.js.map +1 -1
  24. package/dist/core/whoami.d.ts +24 -0
  25. package/dist/core/whoami.d.ts.map +1 -0
  26. package/dist/core/whoami.js +66 -0
  27. package/dist/core/whoami.js.map +1 -0
  28. package/dist/core/write-pipeline.d.ts +9 -0
  29. package/dist/core/write-pipeline.d.ts.map +1 -1
  30. package/dist/core/write-pipeline.js +109 -68
  31. package/dist/core/write-pipeline.js.map +1 -1
  32. package/dist/core/write-telemetry.d.ts +33 -0
  33. package/dist/core/write-telemetry.d.ts.map +1 -0
  34. package/dist/core/write-telemetry.js +110 -0
  35. package/dist/core/write-telemetry.js.map +1 -0
  36. package/dist/engine/activation.d.ts +22 -12
  37. package/dist/engine/activation.d.ts.map +1 -1
  38. package/dist/engine/activation.js +133 -17
  39. package/dist/engine/activation.js.map +1 -1
  40. package/dist/engine/consolidation-scheduler.d.ts +1 -1
  41. package/dist/engine/consolidation-scheduler.js +1 -1
  42. package/dist/engine/consolidation.d.ts +1 -0
  43. package/dist/engine/consolidation.d.ts.map +1 -1
  44. package/dist/engine/consolidation.js +18 -0
  45. package/dist/engine/consolidation.js.map +1 -1
  46. package/dist/engine/eval.d.ts.map +1 -1
  47. package/dist/engine/eval.js +5 -1
  48. package/dist/engine/eval.js.map +1 -1
  49. package/dist/index.js +20 -2
  50. package/dist/index.js.map +1 -1
  51. package/dist/mcp.d.ts +2 -1
  52. package/dist/mcp.d.ts.map +1 -1
  53. package/dist/mcp.js +168 -100
  54. package/dist/mcp.js.map +1 -1
  55. package/dist/recipes/index.d.ts +57 -0
  56. package/dist/recipes/index.d.ts.map +1 -0
  57. package/dist/recipes/index.js +81 -0
  58. package/dist/recipes/index.js.map +1 -0
  59. package/dist/storage/pglite-schema.d.ts.map +1 -1
  60. package/dist/storage/pglite-schema.js +27 -0
  61. package/dist/storage/pglite-schema.js.map +1 -1
  62. package/dist/storage/pglite.d.ts +5 -0
  63. package/dist/storage/pglite.d.ts.map +1 -1
  64. package/dist/storage/pglite.js +180 -138
  65. package/dist/storage/pglite.js.map +1 -1
  66. package/dist/storage/postgres.d.ts +5 -0
  67. package/dist/storage/postgres.d.ts.map +1 -1
  68. package/dist/storage/postgres.js +180 -138
  69. package/dist/storage/postgres.js.map +1 -1
  70. package/dist/storage/sqlite.d.ts +9 -0
  71. package/dist/storage/sqlite.d.ts.map +1 -1
  72. package/dist/storage/sqlite.js +394 -326
  73. package/dist/storage/sqlite.js.map +1 -1
  74. package/dist/types/engram.d.ts +14 -0
  75. package/dist/types/engram.d.ts.map +1 -1
  76. package/dist/types/engram.js.map +1 -1
  77. package/package.json +1 -1
  78. package/src/adapters/claude-code.ts +66 -3
  79. package/src/adapters/common.ts +538 -515
  80. package/src/api/routes.ts +999 -971
  81. package/src/coordination/routes.ts +2155 -2150
  82. package/src/core/embeddings.ts +3 -0
  83. package/src/core/entity-extract.ts +47 -0
  84. package/src/core/salience.ts +529 -514
  85. package/src/core/whoami.ts +92 -0
  86. package/src/core/write-pipeline.ts +60 -8
  87. package/src/core/write-telemetry.ts +131 -0
  88. package/src/engine/activation.ts +1468 -1369
  89. package/src/engine/consolidation-scheduler.ts +1 -1
  90. package/src/engine/consolidation.ts +887 -869
  91. package/src/engine/eval.ts +6 -1
  92. package/src/index.ts +248 -227
  93. package/src/mcp.ts +1341 -1270
  94. package/src/recipes/index.ts +125 -0
  95. package/src/storage/pglite-schema.ts +27 -0
  96. package/src/storage/pglite.ts +1420 -1372
  97. package/src/storage/postgres.ts +1523 -1475
  98. package/src/storage/sqlite.ts +1936 -1861
  99. package/src/types/engram.ts +22 -0
@@ -19,6 +19,7 @@
19
19
 
20
20
  import { pipeline, type FeatureExtractionPipeline } from '@huggingface/transformers';
21
21
  import { dispatchEmbed, registerInProcessHandlers } from './ml-worker.js';
22
+ import { noteModelLoad } from './write-telemetry.js';
22
23
 
23
24
  const MODEL_ID = process.env.AWM_EMBED_MODEL ?? 'Xenova/bge-small-en-v1.5';
24
25
  const DIMENSIONS = parseInt(process.env.AWM_EMBED_DIMS ?? '384', 10);
@@ -32,8 +33,10 @@ let inProcessInitPromise: Promise<FeatureExtractionPipeline> | null = null;
32
33
  async function loadInProcess(): Promise<FeatureExtractionPipeline> {
33
34
  if (inProcessInstance) return inProcessInstance;
34
35
  if (inProcessInitPromise) return inProcessInitPromise;
36
+ const tLoadStart = performance.now();
35
37
  inProcessInitPromise = pipeline('feature-extraction', MODEL_ID, { dtype: 'fp32' }).then(pipe => {
36
38
  inProcessInstance = pipe;
39
+ noteModelLoad(performance.now() - tLoadStart);
37
40
  console.log(`Embedding model loaded in-process: ${MODEL_ID} (${DIMENSIONS}d)`);
38
41
  return pipe;
39
42
  });
@@ -0,0 +1,47 @@
1
+ // Copyright 2026 Robert Winter / Complete Ideas
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ /**
5
+ * Entity extraction for the entity inverted index (D9, 2026-07-30).
6
+ *
7
+ * v1 is deliberately conservative for precision: entities come ONLY from
8
+ * structured sources — prefix tags (`person=Seetha`, `ticket=18999`) and
9
+ * auto-tagger `entity:` tags — never from free-text guessing. Each entity is
10
+ * normalized to `key:value` lowercase so lookups are exact.
11
+ *
12
+ * This is pure write-time bookkeeping. Retrieval behavior is unchanged until
13
+ * D11 re-tests the graph features against the index (per the 2026-06-16
14
+ * entity-centric retrieval roadmap).
15
+ */
16
+
17
+ /** Prefix-tag keys whose values denote entities worth indexing. */
18
+ const ENTITY_KEYS = new Set([
19
+ 'person', 'ticket', 'member', 'horse', 'usef', 'event', 'proj', 'project',
20
+ 'skill', 'about', 'file', 'sp', 'table', 'agent', 'version', 'org',
21
+ ]);
22
+
23
+ /** Extract normalized `key:value` entities from a tag list. Deduped, order-stable. */
24
+ export function extractEntitiesFromTags(tags: string[]): string[] {
25
+ const out: string[] = [];
26
+ const seen = new Set<string>();
27
+ for (const raw of tags ?? []) {
28
+ const tag = String(raw).trim();
29
+ let entity: string | null = null;
30
+ const eq = tag.indexOf('=');
31
+ if (eq > 0) {
32
+ const key = tag.slice(0, eq).toLowerCase();
33
+ const value = tag.slice(eq + 1).trim().toLowerCase();
34
+ if (ENTITY_KEYS.has(key) && value.length > 0 && value.length <= 120) {
35
+ entity = `${key === 'project' ? 'proj' : key}:${value}`;
36
+ }
37
+ } else if (tag.toLowerCase().startsWith('entity:')) {
38
+ const value = tag.slice('entity:'.length).trim().toLowerCase();
39
+ if (value.length > 0 && value.length <= 120) entity = `entity:${value}`;
40
+ }
41
+ if (entity && !seen.has(entity)) {
42
+ seen.add(entity);
43
+ out.push(entity);
44
+ }
45
+ }
46
+ return out;
47
+ }