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,7 @@
1
+ export * from './activation.js';
2
+ export * from './staging.js';
3
+ export * from './connections.js';
4
+ export * from './eviction.js';
5
+ export * from './retraction.js';
6
+ export * from './eval.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Retraction Engine — negative memory / invalidation.
3
+ *
4
+ * Codex critique: "You need explicit anti-salience for wrong info.
5
+ * Otherwise wrong memories persist and compound mistakes."
6
+ *
7
+ * When an agent discovers a memory is wrong:
8
+ * 1. The original engram is marked retracted (not deleted — audit trail)
9
+ * 2. An invalidation association is created
10
+ * 3. Optionally, a counter-engram with correct info is created
11
+ * 4. Confidence of associated engrams is reduced (contamination check)
12
+ */
13
+ import type { EngramStore } from '../storage/sqlite.js';
14
+ import type { Retraction } from '../types/index.js';
15
+ export declare class RetractionEngine {
16
+ private store;
17
+ constructor(store: EngramStore);
18
+ /**
19
+ * Retract a memory — mark it invalid and optionally create a correction.
20
+ */
21
+ retract(retraction: Retraction): {
22
+ retractedId: string;
23
+ correctionId: string | null;
24
+ associatesAffected: number;
25
+ };
26
+ /**
27
+ * Reduce confidence of engrams associated with a retracted engram.
28
+ * Shallow propagation (depth 1) to avoid over-penalizing.
29
+ */
30
+ private propagateConfidenceReduction;
31
+ }
32
+ //# sourceMappingURL=retraction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retraction.d.ts","sourceRoot":"","sources":["../../src/engine/retraction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,KAAK,CAAc;gBAEf,KAAK,EAAE,WAAW;IAI9B;;OAEG;IACH,OAAO,CAAC,UAAU,EAAE,UAAU,GAAG;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAA;KAAE;IAwCjH;;;OAGG;IACH,OAAO,CAAC,4BAA4B;CA2BrC"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Retraction Engine — negative memory / invalidation.
3
+ *
4
+ * Codex critique: "You need explicit anti-salience for wrong info.
5
+ * Otherwise wrong memories persist and compound mistakes."
6
+ *
7
+ * When an agent discovers a memory is wrong:
8
+ * 1. The original engram is marked retracted (not deleted — audit trail)
9
+ * 2. An invalidation association is created
10
+ * 3. Optionally, a counter-engram with correct info is created
11
+ * 4. Confidence of associated engrams is reduced (contamination check)
12
+ */
13
+ export class RetractionEngine {
14
+ store;
15
+ constructor(store) {
16
+ this.store = store;
17
+ }
18
+ /**
19
+ * Retract a memory — mark it invalid and optionally create a correction.
20
+ */
21
+ retract(retraction) {
22
+ const target = this.store.getEngram(retraction.targetEngramId);
23
+ if (!target) {
24
+ throw new Error(`Engram ${retraction.targetEngramId} not found`);
25
+ }
26
+ // Mark the original as retracted
27
+ this.store.retractEngram(target.id, null);
28
+ let correctionId = null;
29
+ // Create counter-engram if correction content provided
30
+ if (retraction.counterContent) {
31
+ const correction = this.store.createEngram({
32
+ agentId: retraction.agentId,
33
+ concept: `correction:${target.concept}`,
34
+ content: retraction.counterContent,
35
+ tags: [...target.tags, 'correction', 'retraction'],
36
+ salience: Math.max(target.salience, 0.6), // Corrections are at least moderately salient
37
+ confidence: 0.7,
38
+ reasonCodes: ['retraction_correction', `invalidates:${target.id}`],
39
+ });
40
+ correctionId = correction.id;
41
+ // Create invalidation link
42
+ this.store.upsertAssociation(correction.id, target.id, 1.0, 'invalidation', 1.0);
43
+ // Update retracted_by to point to correction
44
+ this.store.retractEngram(target.id, correction.id);
45
+ }
46
+ // Reduce confidence of closely associated engrams (contamination spread)
47
+ const associatesAffected = this.propagateConfidenceReduction(target.id, 0.1, 1);
48
+ return { retractedId: target.id, correctionId, associatesAffected };
49
+ }
50
+ /**
51
+ * Reduce confidence of engrams associated with a retracted engram.
52
+ * Shallow propagation (depth 1) to avoid over-penalizing.
53
+ */
54
+ propagateConfidenceReduction(engramId, penalty, maxDepth, currentDepth = 0) {
55
+ if (currentDepth >= maxDepth)
56
+ return 0;
57
+ let affected = 0;
58
+ const associations = this.store.getAssociationsFor(engramId);
59
+ for (const assoc of associations) {
60
+ if (assoc.type === 'invalidation')
61
+ continue; // Don't penalize corrections
62
+ const neighborId = assoc.fromEngramId === engramId
63
+ ? assoc.toEngramId
64
+ : assoc.fromEngramId;
65
+ const neighbor = this.store.getEngram(neighborId);
66
+ if (!neighbor || neighbor.retracted)
67
+ continue;
68
+ // Scale penalty by association weight
69
+ const scaledPenalty = penalty * assoc.weight;
70
+ const newConfidence = Math.max(0.1, neighbor.confidence - scaledPenalty);
71
+ this.store.updateConfidence(neighborId, newConfidence);
72
+ affected++;
73
+ }
74
+ return affected;
75
+ }
76
+ }
77
+ //# sourceMappingURL=retraction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retraction.js","sourceRoot":"","sources":["../../src/engine/retraction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Staging Buffer — weak signal handler.
3
+ *
4
+ * Observations that don't meet the salience threshold for active memory
5
+ * go to staging. The staging buffer periodically:
6
+ * 1. Checks staged engrams against active memory for resonance
7
+ * 2. Promotes resonant engrams to active
8
+ * 3. Discards expired engrams that never resonated
9
+ *
10
+ * Modeled on hippocampal consolidation — provisional encoding
11
+ * that only persists if reactivated.
12
+ */
13
+ import type { EngramStore } from '../storage/sqlite.js';
14
+ import type { ActivationEngine } from './activation.js';
15
+ export declare class StagingBuffer {
16
+ private store;
17
+ private engine;
18
+ private checkInterval;
19
+ constructor(store: EngramStore, engine: ActivationEngine);
20
+ /**
21
+ * Start the periodic staging check.
22
+ */
23
+ start(intervalMs?: number): void;
24
+ stop(): void;
25
+ /**
26
+ * Sweep staged engrams: promote or discard.
27
+ */
28
+ sweep(): Promise<{
29
+ promoted: string[];
30
+ discarded: string[];
31
+ }>;
32
+ }
33
+ //# sourceMappingURL=staging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staging.d.ts","sourceRoot":"","sources":["../../src/engine/staging.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,aAAa,CAA+C;gBAExD,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB;IAKxD;;OAEG;IACH,KAAK,CAAC,UAAU,GAAE,MAAe,GAAG,IAAI;IAIxC,IAAI,IAAI,IAAI;IAOZ;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CA4BpE"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Staging Buffer — weak signal handler.
3
+ *
4
+ * Observations that don't meet the salience threshold for active memory
5
+ * go to staging. The staging buffer periodically:
6
+ * 1. Checks staged engrams against active memory for resonance
7
+ * 2. Promotes resonant engrams to active
8
+ * 3. Discards expired engrams that never resonated
9
+ *
10
+ * Modeled on hippocampal consolidation — provisional encoding
11
+ * that only persists if reactivated.
12
+ */
13
+ export class StagingBuffer {
14
+ store;
15
+ engine;
16
+ checkInterval = null;
17
+ constructor(store, engine) {
18
+ this.store = store;
19
+ this.engine = engine;
20
+ }
21
+ /**
22
+ * Start the periodic staging check.
23
+ */
24
+ start(intervalMs = 60_000) {
25
+ this.checkInterval = setInterval(() => this.sweep(), intervalMs);
26
+ }
27
+ stop() {
28
+ if (this.checkInterval) {
29
+ clearInterval(this.checkInterval);
30
+ this.checkInterval = null;
31
+ }
32
+ }
33
+ /**
34
+ * Sweep staged engrams: promote or discard.
35
+ */
36
+ async sweep() {
37
+ const promoted = [];
38
+ const discarded = [];
39
+ const expired = this.store.getExpiredStaging();
40
+ for (const engram of expired) {
41
+ // Check if this engram resonates with active memory
42
+ const results = await this.engine.activate({
43
+ agentId: engram.agentId,
44
+ context: `${engram.concept} ${engram.content}`,
45
+ limit: 3,
46
+ minScore: 0.3,
47
+ internal: true,
48
+ });
49
+ if (results.length > 0) {
50
+ // Resonance found — promote to active
51
+ this.store.updateStage(engram.id, 'active');
52
+ promoted.push(engram.id);
53
+ }
54
+ else {
55
+ // No resonance — discard
56
+ this.store.deleteEngram(engram.id);
57
+ discarded.push(engram.id);
58
+ }
59
+ }
60
+ return { promoted, discarded };
61
+ }
62
+ }
63
+ //# sourceMappingURL=staging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staging.js","sourceRoot":"","sources":["../../src/engine/staging.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,MAAM,OAAO,aAAa;IAChB,KAAK,CAAc;IACnB,MAAM,CAAmB;IACzB,aAAa,GAA0C,IAAI,CAAC;IAEpE,YAAY,KAAkB,EAAE,MAAwB;QACtD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAqB,MAAM;QAC/B,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,CAAC;IACnE,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAClC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC/C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,oDAAoD;YACpD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;gBACzC,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE;gBAC9C,KAAK,EAAE,CAAC;gBACR,QAAQ,EAAE,GAAG;gBACb,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;YAEH,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,sCAAsC;gBACtC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;gBAC5C,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,yBAAyB;gBACzB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACnC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACjC,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,95 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import Fastify from 'fastify';
4
+ // Load .env file if present (no external dependency)
5
+ try {
6
+ const envPath = resolve(process.cwd(), '.env');
7
+ const envContent = readFileSync(envPath, 'utf-8');
8
+ for (const line of envContent.split('\n')) {
9
+ const trimmed = line.trim();
10
+ if (!trimmed || trimmed.startsWith('#'))
11
+ continue;
12
+ const eqIdx = trimmed.indexOf('=');
13
+ if (eqIdx === -1)
14
+ continue;
15
+ const key = trimmed.slice(0, eqIdx).trim();
16
+ const val = trimmed.slice(eqIdx + 1).trim().replace(/^["']|["']$/g, '');
17
+ if (!process.env[key])
18
+ process.env[key] = val; // Don't override existing env
19
+ }
20
+ }
21
+ catch { /* No .env file — that's fine */ }
22
+ import { EngramStore } from './storage/sqlite.js';
23
+ import { ActivationEngine } from './engine/activation.js';
24
+ import { ConnectionEngine } from './engine/connections.js';
25
+ import { StagingBuffer } from './engine/staging.js';
26
+ import { EvictionEngine } from './engine/eviction.js';
27
+ import { RetractionEngine } from './engine/retraction.js';
28
+ import { EvalEngine } from './engine/eval.js';
29
+ import { ConsolidationEngine } from './engine/consolidation.js';
30
+ import { ConsolidationScheduler } from './engine/consolidation-scheduler.js';
31
+ import { registerRoutes } from './api/routes.js';
32
+ import { DEFAULT_AGENT_CONFIG } from './types/agent.js';
33
+ import { getEmbedder } from './core/embeddings.js';
34
+ import { getReranker } from './core/reranker.js';
35
+ import { getExpander } from './core/query-expander.js';
36
+ const PORT = parseInt(process.env.AWM_PORT ?? '8400', 10);
37
+ const DB_PATH = process.env.AWM_DB_PATH ?? 'memory.db';
38
+ const API_KEY = process.env.AWM_API_KEY ?? null;
39
+ async function main() {
40
+ // Storage
41
+ const store = new EngramStore(DB_PATH);
42
+ // Engines
43
+ const activationEngine = new ActivationEngine(store);
44
+ const connectionEngine = new ConnectionEngine(store, activationEngine);
45
+ const stagingBuffer = new StagingBuffer(store, activationEngine);
46
+ const evictionEngine = new EvictionEngine(store);
47
+ const retractionEngine = new RetractionEngine(store);
48
+ const evalEngine = new EvalEngine(store);
49
+ const consolidationEngine = new ConsolidationEngine(store);
50
+ const consolidationScheduler = new ConsolidationScheduler(store, consolidationEngine);
51
+ // API
52
+ const app = Fastify({ logger: true });
53
+ // Bearer token auth — only enforced when AWM_API_KEY is set
54
+ if (API_KEY) {
55
+ app.addHook('onRequest', async (req, reply) => {
56
+ if (req.url === '/health')
57
+ return; // Health check is always public
58
+ const bearer = req.headers.authorization;
59
+ const xApiKey = req.headers['x-api-key'];
60
+ if (bearer === `Bearer ${API_KEY}` || xApiKey === API_KEY)
61
+ return;
62
+ reply.code(401).send({ error: 'Unauthorized' });
63
+ });
64
+ console.log('API key auth enabled (AWM_API_KEY set)');
65
+ }
66
+ registerRoutes(app, {
67
+ store, activationEngine, connectionEngine,
68
+ evictionEngine, retractionEngine, evalEngine,
69
+ consolidationEngine, consolidationScheduler,
70
+ });
71
+ // Background tasks
72
+ stagingBuffer.start(DEFAULT_AGENT_CONFIG.stagingTtlMs);
73
+ consolidationScheduler.start();
74
+ // Pre-load ML models (downloads on first run: embeddings ~22MB, reranker ~22MB, expander ~80MB)
75
+ getEmbedder().catch(err => console.warn('Embedding model unavailable:', err.message));
76
+ getReranker().catch(err => console.warn('Reranker model unavailable:', err.message));
77
+ getExpander().catch(err => console.warn('Query expander model unavailable:', err.message));
78
+ // Start server
79
+ await app.listen({ port: PORT, host: '0.0.0.0' });
80
+ console.log(`AgentWorkingMemory v0.3.0 listening on port ${PORT}`);
81
+ // Graceful shutdown
82
+ const shutdown = () => {
83
+ consolidationScheduler.stop();
84
+ stagingBuffer.stop();
85
+ store.close();
86
+ process.exit(0);
87
+ };
88
+ process.on('SIGINT', shutdown);
89
+ process.on('SIGTERM', shutdown);
90
+ }
91
+ main().catch(err => {
92
+ console.error('Failed to start:', err);
93
+ process.exit(1);
94
+ });
95
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,qDAAqD;AACrD,IAAI,CAAC;IACH,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAClD,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,SAAS;QAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,8BAA8B;IAC/E,CAAC;AACH,CAAC;AAAC,MAAM,CAAC,CAAC,gCAAgC,CAAC,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,WAAW,CAAC;AACvD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC;AAEhD,KAAK,UAAU,IAAI;IACjB,UAAU;IACV,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IAEvC,UAAU;IACV,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACvE,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;IACjE,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC3D,MAAM,sBAAsB,GAAG,IAAI,sBAAsB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;IAEtF,MAAM;IACN,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtC,4DAA4D;IAC5D,IAAI,OAAO,EAAE,CAAC;QACZ,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE;YAC5C,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS;gBAAE,OAAO,CAAC,gCAAgC;YACnE,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;YACzC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAuB,CAAC;YAC/D,IAAI,MAAM,KAAK,UAAU,OAAO,EAAE,IAAI,OAAO,KAAK,OAAO;gBAAE,OAAO;YAClE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACxD,CAAC;IAED,cAAc,CAAC,GAAG,EAAE;QAClB,KAAK,EAAE,gBAAgB,EAAE,gBAAgB;QACzC,cAAc,EAAE,gBAAgB,EAAE,UAAU;QAC5C,mBAAmB,EAAE,sBAAsB;KAC5C,CAAC,CAAC;IAEH,mBAAmB;IACnB,aAAa,CAAC,KAAK,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;IACvD,sBAAsB,CAAC,KAAK,EAAE,CAAC;IAE/B,gGAAgG;IAChG,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IACtF,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,6BAA6B,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IACrF,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,mCAAmC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAE3F,eAAe;IACf,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,+CAA+C,IAAI,EAAE,CAAC,CAAC;IAEnE,oBAAoB;IACpB,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,sBAAsB,CAAC,IAAI,EAAE,CAAC;QAC9B,aAAa,CAAC,IAAI,EAAE,CAAC;QACrB,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;IACjB,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
package/dist/mcp.d.ts ADDED
@@ -0,0 +1,24 @@
1
+ /**
2
+ * MCP Server — Model Context Protocol interface for AgentWorkingMemory.
3
+ *
4
+ * Runs as a stdio-based MCP server that Claude Code connects to directly.
5
+ * Uses the storage and engine layers in-process (no HTTP overhead).
6
+ *
7
+ * Tools exposed (11):
8
+ * memory_write — store a memory (salience filter decides disposition)
9
+ * memory_recall — activate memories by context (cognitive retrieval)
10
+ * memory_feedback — report whether a recalled memory was useful
11
+ * memory_retract — invalidate a wrong memory with optional correction
12
+ * memory_stats — get memory health metrics
13
+ * memory_checkpoint — save structured execution state (survives compaction)
14
+ * memory_restore — restore state + targeted recall after compaction
15
+ * memory_task_add — create a prioritized task
16
+ * memory_task_update — change task status, priority, or blocking
17
+ * memory_task_list — list tasks filtered by status
18
+ * memory_task_next — get the highest-priority actionable task
19
+ *
20
+ * Run: npx tsx src/mcp.ts
21
+ * Config: add to ~/.claude.json or .mcp.json
22
+ */
23
+ export {};
24
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG"}