agent-working-memory 0.3.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 (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +311 -0
  3. package/dist/api/index.d.ts +2 -0
  4. package/dist/api/index.d.ts.map +1 -0
  5. package/dist/api/index.js +2 -0
  6. package/dist/api/index.js.map +1 -0
  7. package/dist/api/routes.d.ts +53 -0
  8. package/dist/api/routes.d.ts.map +1 -0
  9. package/dist/api/routes.js +388 -0
  10. package/dist/api/routes.js.map +1 -0
  11. package/dist/cli.d.ts +12 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +245 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/core/decay.d.ts +36 -0
  16. package/dist/core/decay.d.ts.map +1 -0
  17. package/dist/core/decay.js +38 -0
  18. package/dist/core/decay.js.map +1 -0
  19. package/dist/core/embeddings.d.ts +33 -0
  20. package/dist/core/embeddings.d.ts.map +1 -0
  21. package/dist/core/embeddings.js +76 -0
  22. package/dist/core/embeddings.js.map +1 -0
  23. package/dist/core/hebbian.d.ts +38 -0
  24. package/dist/core/hebbian.d.ts.map +1 -0
  25. package/dist/core/hebbian.js +74 -0
  26. package/dist/core/hebbian.js.map +1 -0
  27. package/dist/core/index.d.ts +4 -0
  28. package/dist/core/index.d.ts.map +1 -0
  29. package/dist/core/index.js +4 -0
  30. package/dist/core/index.js.map +1 -0
  31. package/dist/core/query-expander.d.ts +24 -0
  32. package/dist/core/query-expander.d.ts.map +1 -0
  33. package/dist/core/query-expander.js +58 -0
  34. package/dist/core/query-expander.js.map +1 -0
  35. package/dist/core/reranker.d.ts +25 -0
  36. package/dist/core/reranker.d.ts.map +1 -0
  37. package/dist/core/reranker.js +75 -0
  38. package/dist/core/reranker.js.map +1 -0
  39. package/dist/core/salience.d.ts +30 -0
  40. package/dist/core/salience.d.ts.map +1 -0
  41. package/dist/core/salience.js +81 -0
  42. package/dist/core/salience.js.map +1 -0
  43. package/dist/engine/activation.d.ts +38 -0
  44. package/dist/engine/activation.d.ts.map +1 -0
  45. package/dist/engine/activation.js +516 -0
  46. package/dist/engine/activation.js.map +1 -0
  47. package/dist/engine/connections.d.ts +31 -0
  48. package/dist/engine/connections.d.ts.map +1 -0
  49. package/dist/engine/connections.js +74 -0
  50. package/dist/engine/connections.js.map +1 -0
  51. package/dist/engine/consolidation-scheduler.d.ts +31 -0
  52. package/dist/engine/consolidation-scheduler.d.ts.map +1 -0
  53. package/dist/engine/consolidation-scheduler.js +115 -0
  54. package/dist/engine/consolidation-scheduler.js.map +1 -0
  55. package/dist/engine/consolidation.d.ts +62 -0
  56. package/dist/engine/consolidation.d.ts.map +1 -0
  57. package/dist/engine/consolidation.js +368 -0
  58. package/dist/engine/consolidation.js.map +1 -0
  59. package/dist/engine/eval.d.ts +22 -0
  60. package/dist/engine/eval.d.ts.map +1 -0
  61. package/dist/engine/eval.js +79 -0
  62. package/dist/engine/eval.js.map +1 -0
  63. package/dist/engine/eviction.d.ts +29 -0
  64. package/dist/engine/eviction.d.ts.map +1 -0
  65. package/dist/engine/eviction.js +86 -0
  66. package/dist/engine/eviction.js.map +1 -0
  67. package/dist/engine/index.d.ts +7 -0
  68. package/dist/engine/index.d.ts.map +1 -0
  69. package/dist/engine/index.js +7 -0
  70. package/dist/engine/index.js.map +1 -0
  71. package/dist/engine/retraction.d.ts +32 -0
  72. package/dist/engine/retraction.d.ts.map +1 -0
  73. package/dist/engine/retraction.js +77 -0
  74. package/dist/engine/retraction.js.map +1 -0
  75. package/dist/engine/staging.d.ts +33 -0
  76. package/dist/engine/staging.d.ts.map +1 -0
  77. package/dist/engine/staging.js +63 -0
  78. package/dist/engine/staging.js.map +1 -0
  79. package/dist/index.d.ts +2 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +95 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/mcp.d.ts +24 -0
  84. package/dist/mcp.d.ts.map +1 -0
  85. package/dist/mcp.js +532 -0
  86. package/dist/mcp.js.map +1 -0
  87. package/dist/storage/index.d.ts +2 -0
  88. package/dist/storage/index.d.ts.map +1 -0
  89. package/dist/storage/index.js +2 -0
  90. package/dist/storage/index.js.map +1 -0
  91. package/dist/storage/sqlite.d.ts +116 -0
  92. package/dist/storage/sqlite.d.ts.map +1 -0
  93. package/dist/storage/sqlite.js +750 -0
  94. package/dist/storage/sqlite.js.map +1 -0
  95. package/dist/types/agent.d.ts +30 -0
  96. package/dist/types/agent.d.ts.map +1 -0
  97. package/dist/types/agent.js +23 -0
  98. package/dist/types/agent.js.map +1 -0
  99. package/dist/types/checkpoint.d.ts +50 -0
  100. package/dist/types/checkpoint.d.ts.map +1 -0
  101. package/dist/types/checkpoint.js +8 -0
  102. package/dist/types/checkpoint.js.map +1 -0
  103. package/dist/types/engram.d.ts +165 -0
  104. package/dist/types/engram.d.ts.map +1 -0
  105. package/dist/types/engram.js +8 -0
  106. package/dist/types/engram.js.map +1 -0
  107. package/dist/types/eval.d.ts +84 -0
  108. package/dist/types/eval.d.ts.map +1 -0
  109. package/dist/types/eval.js +11 -0
  110. package/dist/types/eval.js.map +1 -0
  111. package/dist/types/index.d.ts +5 -0
  112. package/dist/types/index.d.ts.map +1 -0
  113. package/dist/types/index.js +5 -0
  114. package/dist/types/index.js.map +1 -0
  115. package/package.json +55 -0
  116. package/src/api/index.ts +1 -0
  117. package/src/api/routes.ts +528 -0
  118. package/src/cli.ts +260 -0
  119. package/src/core/decay.ts +61 -0
  120. package/src/core/embeddings.ts +82 -0
  121. package/src/core/hebbian.ts +91 -0
  122. package/src/core/index.ts +3 -0
  123. package/src/core/query-expander.ts +64 -0
  124. package/src/core/reranker.ts +99 -0
  125. package/src/core/salience.ts +95 -0
  126. package/src/engine/activation.ts +577 -0
  127. package/src/engine/connections.ts +101 -0
  128. package/src/engine/consolidation-scheduler.ts +123 -0
  129. package/src/engine/consolidation.ts +443 -0
  130. package/src/engine/eval.ts +100 -0
  131. package/src/engine/eviction.ts +99 -0
  132. package/src/engine/index.ts +6 -0
  133. package/src/engine/retraction.ts +98 -0
  134. package/src/engine/staging.ts +72 -0
  135. package/src/index.ts +100 -0
  136. package/src/mcp.ts +635 -0
  137. package/src/storage/index.ts +1 -0
  138. package/src/storage/sqlite.ts +893 -0
  139. package/src/types/agent.ts +65 -0
  140. package/src/types/checkpoint.ts +44 -0
  141. package/src/types/engram.ts +194 -0
  142. package/src/types/eval.ts +98 -0
  143. package/src/types/index.ts +4 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * ACT-R Base-Level Activation
3
+ *
4
+ * Based on Anderson's ACT-R cognitive architecture (1993).
5
+ * Memories that are accessed more recently and more frequently
6
+ * have higher activation — a well-established model of human memory.
7
+ *
8
+ * Formula: B(M) = ln(n + 1) - d * ln(ageDays / (n + 1))
9
+ *
10
+ * Where:
11
+ * n = access count
12
+ * d = decay exponent (default 0.5)
13
+ * ageDays = age of memory in days
14
+ */
15
+ export declare function baseLevelActivation(accessCount: number, ageDays: number, decayExponent?: number): number;
16
+ /**
17
+ * Softplus — smooth approximation of ReLU.
18
+ * Used to keep activation scores positive without hard clipping.
19
+ */
20
+ export declare function softplus(x: number): number;
21
+ /**
22
+ * Composite activation score combining content match, temporal decay,
23
+ * Hebbian boost, and confidence.
24
+ *
25
+ * Score = contentMatch * softplus(B(M) + scale * hebbianBoost) * confidence
26
+ */
27
+ export declare function compositeScore(params: {
28
+ contentMatch: number;
29
+ accessCount: number;
30
+ ageDays: number;
31
+ hebbianBoost: number;
32
+ confidence: number;
33
+ decayExponent?: number;
34
+ hebbianScale?: number;
35
+ }): number;
36
+ //# sourceMappingURL=decay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decay.d.ts","sourceRoot":"","sources":["../../src/core/decay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,aAAa,GAAE,MAAY,GAC1B,MAAM,CAIR;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE1C;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,MAAM,CAaT"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * ACT-R Base-Level Activation
3
+ *
4
+ * Based on Anderson's ACT-R cognitive architecture (1993).
5
+ * Memories that are accessed more recently and more frequently
6
+ * have higher activation — a well-established model of human memory.
7
+ *
8
+ * Formula: B(M) = ln(n + 1) - d * ln(ageDays / (n + 1))
9
+ *
10
+ * Where:
11
+ * n = access count
12
+ * d = decay exponent (default 0.5)
13
+ * ageDays = age of memory in days
14
+ */
15
+ export function baseLevelActivation(accessCount, ageDays, decayExponent = 0.5) {
16
+ const n = Math.max(accessCount, 0);
17
+ const age = Math.max(ageDays, 0.001); // Avoid log(0)
18
+ return Math.log(n + 1) - decayExponent * Math.log(age / (n + 1));
19
+ }
20
+ /**
21
+ * Softplus — smooth approximation of ReLU.
22
+ * Used to keep activation scores positive without hard clipping.
23
+ */
24
+ export function softplus(x) {
25
+ return Math.log(1 + Math.exp(x));
26
+ }
27
+ /**
28
+ * Composite activation score combining content match, temporal decay,
29
+ * Hebbian boost, and confidence.
30
+ *
31
+ * Score = contentMatch * softplus(B(M) + scale * hebbianBoost) * confidence
32
+ */
33
+ export function compositeScore(params) {
34
+ const { contentMatch, accessCount, ageDays, hebbianBoost, confidence, decayExponent = 0.5, hebbianScale = 1.0, } = params;
35
+ const bm = baseLevelActivation(accessCount, ageDays, decayExponent);
36
+ return contentMatch * softplus(bm + hebbianScale * hebbianBoost) * confidence;
37
+ }
38
+ //# sourceMappingURL=decay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decay.js","sourceRoot":"","sources":["../../src/core/decay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,UAAU,mBAAmB,CACjC,WAAmB,EACnB,OAAe,EACf,gBAAwB,GAAG;IAE3B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,eAAe;IACrD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,CAAS;IAChC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,MAQ9B;IACC,MAAM,EACJ,YAAY,EACZ,WAAW,EACX,OAAO,EACP,YAAY,EACZ,UAAU,EACV,aAAa,GAAG,GAAG,EACnB,YAAY,GAAG,GAAG,GACnB,GAAG,MAAM,CAAC;IAEX,MAAM,EAAE,GAAG,mBAAmB,CAAC,WAAW,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IACpE,OAAO,YAAY,GAAG,QAAQ,CAAC,EAAE,GAAG,YAAY,GAAG,YAAY,CAAC,GAAG,UAAU,CAAC;AAChF,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Embedding Engine — local vector embeddings via transformers.js
3
+ *
4
+ * Default: gte-small (384 dimensions, ~34MB int8, MTEB 61.4) for semantic similarity.
5
+ * Configurable via AWM_EMBED_MODEL env var.
6
+ * Model is downloaded once on first use and cached locally.
7
+ *
8
+ * Singleton pattern — call getEmbedder() to get the shared instance.
9
+ */
10
+ import { type FeatureExtractionPipeline } from '@huggingface/transformers';
11
+ /**
12
+ * Get or initialize the embedding pipeline (singleton).
13
+ * First call downloads the model (~22MB), subsequent calls are instant.
14
+ */
15
+ export declare function getEmbedder(): Promise<FeatureExtractionPipeline>;
16
+ /**
17
+ * Generate an embedding vector for a text string.
18
+ * Returns a normalized float32 array of length DIMENSIONS.
19
+ */
20
+ export declare function embed(text: string): Promise<number[]>;
21
+ /**
22
+ * Generate embeddings for multiple texts in a batch.
23
+ * More efficient than calling embed() in a loop.
24
+ */
25
+ export declare function embedBatch(texts: string[]): Promise<number[][]>;
26
+ /**
27
+ * Cosine similarity between two normalized vectors.
28
+ * Since vectors are pre-normalized, this is just the dot product.
29
+ */
30
+ export declare function cosineSimilarity(a: number[], b: number[]): number;
31
+ /** Vector dimensions for this model */
32
+ export declare const EMBEDDING_DIMENSIONS: number;
33
+ //# sourceMappingURL=embeddings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../src/core/embeddings.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAY,KAAK,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AASrF;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,yBAAyB,CAAC,CAatE;AAED;;;GAGG;AACH,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAK3D;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAWrE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAQjE;AAED,uCAAuC;AACvC,eAAO,MAAM,oBAAoB,QAAa,CAAC"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Embedding Engine — local vector embeddings via transformers.js
3
+ *
4
+ * Default: gte-small (384 dimensions, ~34MB int8, MTEB 61.4) for semantic similarity.
5
+ * Configurable via AWM_EMBED_MODEL env var.
6
+ * Model is downloaded once on first use and cached locally.
7
+ *
8
+ * Singleton pattern — call getEmbedder() to get the shared instance.
9
+ */
10
+ import { pipeline } from '@huggingface/transformers';
11
+ const MODEL_ID = process.env.AWM_EMBED_MODEL ?? 'Xenova/all-MiniLM-L6-v2';
12
+ const DIMENSIONS = parseInt(process.env.AWM_EMBED_DIMS ?? '384', 10);
13
+ const POOLING = (process.env.AWM_EMBED_POOLING ?? 'mean');
14
+ let instance = null;
15
+ let initPromise = null;
16
+ /**
17
+ * Get or initialize the embedding pipeline (singleton).
18
+ * First call downloads the model (~22MB), subsequent calls are instant.
19
+ */
20
+ export async function getEmbedder() {
21
+ if (instance)
22
+ return instance;
23
+ if (initPromise)
24
+ return initPromise;
25
+ initPromise = pipeline('feature-extraction', MODEL_ID, {
26
+ dtype: 'fp32',
27
+ }).then(pipe => {
28
+ instance = pipe;
29
+ console.log(`Embedding model loaded: ${MODEL_ID} (${DIMENSIONS}d)`);
30
+ return pipe;
31
+ });
32
+ return initPromise;
33
+ }
34
+ /**
35
+ * Generate an embedding vector for a text string.
36
+ * Returns a normalized float32 array of length DIMENSIONS.
37
+ */
38
+ export async function embed(text) {
39
+ const embedder = await getEmbedder();
40
+ const result = await embedder(text, { pooling: POOLING, normalize: true });
41
+ // result is a Tensor — extract the data
42
+ return Array.from(result.data).slice(0, DIMENSIONS);
43
+ }
44
+ /**
45
+ * Generate embeddings for multiple texts in a batch.
46
+ * More efficient than calling embed() in a loop.
47
+ */
48
+ export async function embedBatch(texts) {
49
+ if (texts.length === 0)
50
+ return [];
51
+ const embedder = await getEmbedder();
52
+ const result = await embedder(texts, { pooling: POOLING, normalize: true });
53
+ const data = result.data;
54
+ const vectors = [];
55
+ for (let i = 0; i < texts.length; i++) {
56
+ vectors.push(Array.from(data.slice(i * DIMENSIONS, (i + 1) * DIMENSIONS)));
57
+ }
58
+ return vectors;
59
+ }
60
+ /**
61
+ * Cosine similarity between two normalized vectors.
62
+ * Since vectors are pre-normalized, this is just the dot product.
63
+ */
64
+ export function cosineSimilarity(a, b) {
65
+ if (a.length !== b.length || a.length === 0)
66
+ return 0;
67
+ let dot = 0;
68
+ for (let i = 0; i < a.length; i++) {
69
+ dot += a[i] * b[i];
70
+ }
71
+ // Clamp to [-1, 1] to handle floating point drift
72
+ return Math.max(-1, Math.min(1, dot));
73
+ }
74
+ /** Vector dimensions for this model */
75
+ export const EMBEDDING_DIMENSIONS = DIMENSIONS;
76
+ //# sourceMappingURL=embeddings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/core/embeddings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Hebbian Learning — "neurons that fire together wire together"
3
+ *
4
+ * When two engrams are co-activated (retrieved together in the same
5
+ * activation query), their association weight increases.
6
+ *
7
+ * Log-space weight update prevents runaway growth:
8
+ * logNew = log(w) + signal * log(1 + rate)
9
+ *
10
+ * Associations decay symmetrically when unused.
11
+ */
12
+ /**
13
+ * Strengthen an association weight after co-activation.
14
+ */
15
+ export declare function strengthenAssociation(currentWeight: number, signal?: number, rate?: number): number;
16
+ /**
17
+ * Weaken an association weight due to lack of co-activation.
18
+ * Called periodically by the connection engine.
19
+ */
20
+ export declare function decayAssociation(currentWeight: number, daysSinceActivation: number, halfLife?: number): number;
21
+ /**
22
+ * Ring buffer for tracking recent co-activations.
23
+ * Feeds the Hebbian worker — when two engrams appear in the buffer
24
+ * within a window, their association is strengthened.
25
+ */
26
+ export declare class CoActivationBuffer {
27
+ private buffer;
28
+ private maxSize;
29
+ constructor(maxSize?: number);
30
+ push(engramId: string): void;
31
+ pushBatch(engramIds: string[]): void;
32
+ /**
33
+ * Get all pairs of engrams that were co-activated within windowMs.
34
+ */
35
+ getCoActivatedPairs(windowMs?: number): [string, string][];
36
+ clear(): void;
37
+ }
38
+ //# sourceMappingURL=hebbian.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hebbian.d.ts","sourceRoot":"","sources":["../../src/core/hebbian.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,MAAM,EACrB,MAAM,GAAE,MAAY,EACpB,IAAI,GAAE,MAAa,GAClB,MAAM,CAIR;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,MAAM,EACrB,mBAAmB,EAAE,MAAM,EAC3B,QAAQ,GAAE,MAAY,GACrB,MAAM,CAGR;AAED;;;;GAIG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAiD;IAC/D,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE,MAAW;IAIhC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAO5B,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAMpC;;OAEG;IACH,mBAAmB,CAAC,QAAQ,GAAE,MAAa,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;IAiBhE,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Hebbian Learning — "neurons that fire together wire together"
3
+ *
4
+ * When two engrams are co-activated (retrieved together in the same
5
+ * activation query), their association weight increases.
6
+ *
7
+ * Log-space weight update prevents runaway growth:
8
+ * logNew = log(w) + signal * log(1 + rate)
9
+ *
10
+ * Associations decay symmetrically when unused.
11
+ */
12
+ const MIN_WEIGHT = 0.001;
13
+ const MAX_WEIGHT = 5.0; // Cap at 5 to prevent graph walk explosion
14
+ /**
15
+ * Strengthen an association weight after co-activation.
16
+ */
17
+ export function strengthenAssociation(currentWeight, signal = 1.0, rate = 0.25) {
18
+ const logW = Math.log(Math.max(currentWeight, MIN_WEIGHT));
19
+ const logNew = logW + signal * Math.log(1 + rate);
20
+ return Math.min(Math.exp(logNew), MAX_WEIGHT);
21
+ }
22
+ /**
23
+ * Weaken an association weight due to lack of co-activation.
24
+ * Called periodically by the connection engine.
25
+ */
26
+ export function decayAssociation(currentWeight, daysSinceActivation, halfLife = 7.0 // days
27
+ ) {
28
+ const decayFactor = Math.pow(0.5, daysSinceActivation / halfLife);
29
+ return Math.max(currentWeight * decayFactor, MIN_WEIGHT);
30
+ }
31
+ /**
32
+ * Ring buffer for tracking recent co-activations.
33
+ * Feeds the Hebbian worker — when two engrams appear in the buffer
34
+ * within a window, their association is strengthened.
35
+ */
36
+ export class CoActivationBuffer {
37
+ buffer = [];
38
+ maxSize;
39
+ constructor(maxSize = 50) {
40
+ this.maxSize = maxSize;
41
+ }
42
+ push(engramId) {
43
+ this.buffer.push({ engramId, timestamp: Date.now() });
44
+ if (this.buffer.length > this.maxSize) {
45
+ this.buffer.shift();
46
+ }
47
+ }
48
+ pushBatch(engramIds) {
49
+ for (const id of engramIds) {
50
+ this.push(id);
51
+ }
52
+ }
53
+ /**
54
+ * Get all pairs of engrams that were co-activated within windowMs.
55
+ */
56
+ getCoActivatedPairs(windowMs = 5000) {
57
+ const pairs = [];
58
+ for (let i = 0; i < this.buffer.length; i++) {
59
+ for (let j = i + 1; j < this.buffer.length; j++) {
60
+ const a = this.buffer[i];
61
+ const b = this.buffer[j];
62
+ if (a.engramId !== b.engramId &&
63
+ Math.abs(a.timestamp - b.timestamp) <= windowMs) {
64
+ pairs.push([a.engramId, b.engramId]);
65
+ }
66
+ }
67
+ }
68
+ return pairs;
69
+ }
70
+ clear() {
71
+ this.buffer = [];
72
+ }
73
+ }
74
+ //# sourceMappingURL=hebbian.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hebbian.js","sourceRoot":"","sources":["../../src/core/hebbian.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,UAAU,GAAG,KAAK,CAAC;AACzB,MAAM,UAAU,GAAG,GAAG,CAAC,CAAE,2CAA2C;AAEpE;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,aAAqB,EACrB,SAAiB,GAAG,EACpB,OAAe,IAAI;IAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAClD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,aAAqB,EACrB,mBAA2B,EAC3B,WAAmB,GAAG,CAAC,OAAO;;IAE9B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,mBAAmB,GAAG,QAAQ,CAAC,CAAC;IAClE,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,WAAW,EAAE,UAAU,CAAC,CAAC;AAC3D,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,kBAAkB;IACrB,MAAM,GAA8C,EAAE,CAAC;IACvD,OAAO,CAAS;IAExB,YAAY,UAAkB,EAAE;QAC9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,QAAgB;QACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACtD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,SAAS,CAAC,SAAmB;QAC3B,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,WAAmB,IAAI;QACzC,MAAM,KAAK,GAAuB,EAAE,CAAC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChD,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACzB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACzB,IACE,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ;oBACzB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,IAAI,QAAQ,EAC/C,CAAC;oBACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ export * from './decay.js';
2
+ export * from './hebbian.js';
3
+ export * from './salience.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './decay.js';
2
+ export * from './hebbian.js';
3
+ export * from './salience.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Query Expander — rewrites queries with synonyms and related terms.
3
+ *
4
+ * Uses Xenova/flan-t5-small (~80MB ONNX) to expand search queries
5
+ * with related terms that improve BM25 recall.
6
+ *
7
+ * Example: "What is Caroline's identity?" →
8
+ * "What is Caroline's identity? Caroline personal gender transgender self"
9
+ *
10
+ * Singleton pattern — call getExpander() to get the shared instance.
11
+ */
12
+ import { type Text2TextGenerationPipeline } from '@huggingface/transformers';
13
+ /**
14
+ * Get or initialize the text generation pipeline (singleton).
15
+ * First call downloads the model (~80MB), subsequent calls are instant.
16
+ */
17
+ export declare function getExpander(): Promise<Text2TextGenerationPipeline>;
18
+ /**
19
+ * Expand a query with related terms and synonyms.
20
+ * Returns the original query + generated expansion terms.
21
+ * Falls back to the original query on any error.
22
+ */
23
+ export declare function expandQuery(originalQuery: string): Promise<string>;
24
+ //# sourceMappingURL=query-expander.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-expander.d.ts","sourceRoot":"","sources":["../../src/core/query-expander.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAY,KAAK,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAOvF;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,2BAA2B,CAAC,CAaxE;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBxE"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Query Expander — rewrites queries with synonyms and related terms.
3
+ *
4
+ * Uses Xenova/flan-t5-small (~80MB ONNX) to expand search queries
5
+ * with related terms that improve BM25 recall.
6
+ *
7
+ * Example: "What is Caroline's identity?" →
8
+ * "What is Caroline's identity? Caroline personal gender transgender self"
9
+ *
10
+ * Singleton pattern — call getExpander() to get the shared instance.
11
+ */
12
+ import { pipeline } from '@huggingface/transformers';
13
+ const MODEL_ID = 'Xenova/flan-t5-small';
14
+ let instance = null;
15
+ let initPromise = null;
16
+ /**
17
+ * Get or initialize the text generation pipeline (singleton).
18
+ * First call downloads the model (~80MB), subsequent calls are instant.
19
+ */
20
+ export async function getExpander() {
21
+ if (instance)
22
+ return instance;
23
+ if (initPromise)
24
+ return initPromise;
25
+ initPromise = pipeline('text2text-generation', MODEL_ID, {
26
+ dtype: 'fp32',
27
+ }).then(pipe => {
28
+ instance = pipe;
29
+ console.log(`Query expander loaded: ${MODEL_ID}`);
30
+ return instance;
31
+ });
32
+ return initPromise;
33
+ }
34
+ /**
35
+ * Expand a query with related terms and synonyms.
36
+ * Returns the original query + generated expansion terms.
37
+ * Falls back to the original query on any error.
38
+ */
39
+ export async function expandQuery(originalQuery) {
40
+ try {
41
+ const expander = await getExpander();
42
+ const prompt = `Expand this search query with synonyms and related terms. Only output the additional terms, not the original query. Query: ${originalQuery}. Additional terms:`;
43
+ const result = await expander(prompt, {
44
+ max_new_tokens: 25,
45
+ no_repeat_ngram_size: 2,
46
+ });
47
+ const expanded = Array.isArray(result) ? result[0]?.generated_text ?? '' : '';
48
+ const cleanExpanded = expanded.trim();
49
+ if (cleanExpanded && cleanExpanded.length > 2) {
50
+ return `${originalQuery} ${cleanExpanded}`;
51
+ }
52
+ return originalQuery;
53
+ }
54
+ catch {
55
+ return originalQuery;
56
+ }
57
+ }
58
+ //# sourceMappingURL=query-expander.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-expander.js","sourceRoot":"","sources":["../../src/core/query-expander.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,QAAQ,EAAoC,MAAM,2BAA2B,CAAC;AAEvF,MAAM,QAAQ,GAAG,sBAAsB,CAAC;AAExC,IAAI,QAAQ,GAAuC,IAAI,CAAC;AACxD,IAAI,WAAW,GAAgD,IAAI,CAAC;AAEpE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IAEpC,WAAW,GAAG,QAAQ,CAAC,sBAAsB,EAAE,QAAQ,EAAE;QACvD,KAAK,EAAE,MAAM;KACd,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACb,QAAQ,GAAG,IAAmC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;QAClD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,aAAqB;IACrD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;QACrC,MAAM,MAAM,GAAG,8HAA8H,aAAa,qBAAqB,CAAC;QAEhL,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE;YACpC,cAAc,EAAE,EAAE;YAClB,oBAAoB,EAAE,CAAC;SACxB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,MAAM,CAAC,CAAC,CAAS,EAAE,cAAc,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEtC,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,OAAO,GAAG,aAAa,IAAI,aAAa,EAAE,CAAC;QAC7C,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,aAAa,CAAC;IACvB,CAAC;AACH,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Cross-Encoder Re-Ranker — scores (query, passage) pairs for relevance.
3
+ *
4
+ * Uses Xenova/ms-marco-MiniLM-L-6-v2 (~22MB ONNX) which is trained on
5
+ * MS-MARCO passage ranking. Unlike bi-encoders, cross-encoders see both
6
+ * query and passage together via full attention — much better at judging
7
+ * if a passage actually answers a question.
8
+ *
9
+ * Uses direct tokenizer + model inference (NOT the text-classification
10
+ * pipeline, which doesn't support text_pair and returns identical scores).
11
+ *
12
+ * Singleton pattern — call getReranker() to get the shared instance.
13
+ */
14
+ /** Kept for backwards compat — returns the model (unused externally). */
15
+ export declare function getReranker(): Promise<any>;
16
+ export interface RerankResult {
17
+ index: number;
18
+ score: number;
19
+ }
20
+ /**
21
+ * Re-rank candidate passages against a query using the cross-encoder.
22
+ * Returns results sorted by relevance score (descending).
23
+ */
24
+ export declare function rerank(query: string, passages: string[]): Promise<RerankResult[]>;
25
+ //# sourceMappingURL=reranker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reranker.d.ts","sourceRoot":"","sources":["../../src/core/reranker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AA+BH,yEAAyE;AACzE,wBAAsB,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,CAGhD;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAMD;;;GAGG;AACH,wBAAsB,MAAM,CAC1B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC,CAiCzB"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Cross-Encoder Re-Ranker — scores (query, passage) pairs for relevance.
3
+ *
4
+ * Uses Xenova/ms-marco-MiniLM-L-6-v2 (~22MB ONNX) which is trained on
5
+ * MS-MARCO passage ranking. Unlike bi-encoders, cross-encoders see both
6
+ * query and passage together via full attention — much better at judging
7
+ * if a passage actually answers a question.
8
+ *
9
+ * Uses direct tokenizer + model inference (NOT the text-classification
10
+ * pipeline, which doesn't support text_pair and returns identical scores).
11
+ *
12
+ * Singleton pattern — call getReranker() to get the shared instance.
13
+ */
14
+ import { AutoTokenizer, AutoModelForSequenceClassification, } from '@huggingface/transformers';
15
+ const DEFAULT_MODEL = 'Xenova/ms-marco-MiniLM-L-6-v2';
16
+ const MODEL_ID = process.env.AWM_RERANKER_MODEL || DEFAULT_MODEL;
17
+ let tokenizer = null;
18
+ let model = null;
19
+ let initPromise = null;
20
+ async function ensureLoaded() {
21
+ if (tokenizer && model)
22
+ return;
23
+ if (initPromise)
24
+ return initPromise;
25
+ initPromise = (async () => {
26
+ tokenizer = await AutoTokenizer.from_pretrained(MODEL_ID);
27
+ model = await AutoModelForSequenceClassification.from_pretrained(MODEL_ID, {
28
+ dtype: 'fp32',
29
+ });
30
+ console.log(`Re-ranker model loaded: ${MODEL_ID}`);
31
+ })();
32
+ return initPromise;
33
+ }
34
+ /** Kept for backwards compat — returns the model (unused externally). */
35
+ export async function getReranker() {
36
+ await ensureLoaded();
37
+ return model;
38
+ }
39
+ function sigmoid(x) {
40
+ return 1 / (1 + Math.exp(-x));
41
+ }
42
+ /**
43
+ * Re-rank candidate passages against a query using the cross-encoder.
44
+ * Returns results sorted by relevance score (descending).
45
+ */
46
+ export async function rerank(query, passages) {
47
+ if (passages.length === 0)
48
+ return [];
49
+ await ensureLoaded();
50
+ const results = [];
51
+ for (let i = 0; i < passages.length; i++) {
52
+ try {
53
+ // Tokenize as a query-passage PAIR using text_pair
54
+ const inputs = tokenizer(query, {
55
+ text_pair: passages[i],
56
+ padding: true,
57
+ truncation: true,
58
+ return_tensors: 'pt',
59
+ });
60
+ const output = await model(inputs);
61
+ // Model outputs raw logits — extract the single relevance logit
62
+ const logits = output.logits ?? output.last_hidden_state;
63
+ const rawLogit = logits.data[0];
64
+ // Apply sigmoid to map to 0-1 probability
65
+ results.push({ index: i, score: sigmoid(rawLogit) });
66
+ }
67
+ catch {
68
+ results.push({ index: i, score: 0 });
69
+ }
70
+ }
71
+ // Sort by score descending
72
+ results.sort((a, b) => b.score - a.score);
73
+ return results;
74
+ }
75
+ //# sourceMappingURL=reranker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reranker.js","sourceRoot":"","sources":["../../src/core/reranker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EACL,aAAa,EACb,kCAAkC,GAGnC,MAAM,2BAA2B,CAAC;AAEnC,MAAM,aAAa,GAAG,+BAA+B,CAAC;AACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,aAAa,CAAC;AAEjE,IAAI,SAAS,GAA+B,IAAI,CAAC;AACjD,IAAI,KAAK,GAA2B,IAAI,CAAC;AACzC,IAAI,WAAW,GAAyB,IAAI,CAAC;AAE7C,KAAK,UAAU,YAAY;IACzB,IAAI,SAAS,IAAI,KAAK;QAAE,OAAO;IAC/B,IAAI,WAAW;QAAE,OAAO,WAAW,CAAC;IAEpC,WAAW,GAAG,CAAC,KAAK,IAAI,EAAE;QACxB,SAAS,GAAG,MAAM,aAAa,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC1D,KAAK,GAAG,MAAM,kCAAkC,CAAC,eAAe,CAAC,QAAQ,EAAE;YACzE,KAAK,EAAE,MAAM;SACd,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,2BAA2B,QAAQ,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,EAAE,CAAC;IAEL,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,YAAY,EAAE,CAAC;IACrB,OAAO,KAAK,CAAC;AACf,CAAC;AAOD,SAAS,OAAO,CAAC,CAAS;IACxB,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAC1B,KAAa,EACb,QAAkB;IAElB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,YAAY,EAAE,CAAC;IAErB,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,mDAAmD;YACnD,MAAM,MAAM,GAAG,SAAU,CAAC,KAAK,EAAE;gBAC/B,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACtB,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,IAAI;gBAChB,cAAc,EAAE,IAAI;aACrB,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,KAAM,CAAC,MAAM,CAAC,CAAC;YAEpC,gEAAgE;YAChE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,iBAAiB,CAAC;YACzD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAW,CAAC;YAE1C,0CAA0C;YAC1C,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1C,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Salience Filter — decides what's worth remembering.
3
+ *
4
+ * Codex feedback incorporated:
5
+ * - Persists raw feature scores for auditability
6
+ * - Returns reason codes for explainability
7
+ * - Thresholds are tunable per agent
8
+ * - Deterministic heuristics first, LLM augmentation optional
9
+ */
10
+ import type { SalienceFeatures } from '../types/index.js';
11
+ export type SalienceEventType = 'decision' | 'friction' | 'surprise' | 'causal' | 'observation';
12
+ export interface SalienceInput {
13
+ content: string;
14
+ eventType?: SalienceEventType;
15
+ surprise?: number;
16
+ decisionMade?: boolean;
17
+ causalDepth?: number;
18
+ resolutionEffort?: number;
19
+ }
20
+ export interface SalienceResult {
21
+ score: number;
22
+ disposition: 'active' | 'staging' | 'discard';
23
+ features: SalienceFeatures;
24
+ reasonCodes: string[];
25
+ }
26
+ /**
27
+ * Rule-based salience scorer with full audit trail.
28
+ */
29
+ export declare function evaluateSalience(input: SalienceInput, activeThreshold?: number, stagingThreshold?: number): SalienceResult;
30
+ //# sourceMappingURL=salience.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"salience.d.ts","sourceRoot":"","sources":["../../src/core/salience.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,GAAG,aAAa,CAAC;AAEhG,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAC9C,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAYD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,aAAa,EACpB,eAAe,GAAE,MAAY,EAC7B,gBAAgB,GAAE,MAAY,GAC7B,cAAc,CA+ChB"}