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.
- package/LICENSE +21 -0
- package/README.md +311 -0
- package/dist/api/index.d.ts +2 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +2 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/routes.d.ts +53 -0
- package/dist/api/routes.d.ts.map +1 -0
- package/dist/api/routes.js +388 -0
- package/dist/api/routes.js.map +1 -0
- package/dist/cli.d.ts +12 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +245 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/decay.d.ts +36 -0
- package/dist/core/decay.d.ts.map +1 -0
- package/dist/core/decay.js +38 -0
- package/dist/core/decay.js.map +1 -0
- package/dist/core/embeddings.d.ts +33 -0
- package/dist/core/embeddings.d.ts.map +1 -0
- package/dist/core/embeddings.js +76 -0
- package/dist/core/embeddings.js.map +1 -0
- package/dist/core/hebbian.d.ts +38 -0
- package/dist/core/hebbian.d.ts.map +1 -0
- package/dist/core/hebbian.js +74 -0
- package/dist/core/hebbian.js.map +1 -0
- package/dist/core/index.d.ts +4 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +4 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/query-expander.d.ts +24 -0
- package/dist/core/query-expander.d.ts.map +1 -0
- package/dist/core/query-expander.js +58 -0
- package/dist/core/query-expander.js.map +1 -0
- package/dist/core/reranker.d.ts +25 -0
- package/dist/core/reranker.d.ts.map +1 -0
- package/dist/core/reranker.js +75 -0
- package/dist/core/reranker.js.map +1 -0
- package/dist/core/salience.d.ts +30 -0
- package/dist/core/salience.d.ts.map +1 -0
- package/dist/core/salience.js +81 -0
- package/dist/core/salience.js.map +1 -0
- package/dist/engine/activation.d.ts +38 -0
- package/dist/engine/activation.d.ts.map +1 -0
- package/dist/engine/activation.js +516 -0
- package/dist/engine/activation.js.map +1 -0
- package/dist/engine/connections.d.ts +31 -0
- package/dist/engine/connections.d.ts.map +1 -0
- package/dist/engine/connections.js +74 -0
- package/dist/engine/connections.js.map +1 -0
- package/dist/engine/consolidation-scheduler.d.ts +31 -0
- package/dist/engine/consolidation-scheduler.d.ts.map +1 -0
- package/dist/engine/consolidation-scheduler.js +115 -0
- package/dist/engine/consolidation-scheduler.js.map +1 -0
- package/dist/engine/consolidation.d.ts +62 -0
- package/dist/engine/consolidation.d.ts.map +1 -0
- package/dist/engine/consolidation.js +368 -0
- package/dist/engine/consolidation.js.map +1 -0
- package/dist/engine/eval.d.ts +22 -0
- package/dist/engine/eval.d.ts.map +1 -0
- package/dist/engine/eval.js +79 -0
- package/dist/engine/eval.js.map +1 -0
- package/dist/engine/eviction.d.ts +29 -0
- package/dist/engine/eviction.d.ts.map +1 -0
- package/dist/engine/eviction.js +86 -0
- package/dist/engine/eviction.js.map +1 -0
- package/dist/engine/index.d.ts +7 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +7 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/retraction.d.ts +32 -0
- package/dist/engine/retraction.d.ts.map +1 -0
- package/dist/engine/retraction.js +77 -0
- package/dist/engine/retraction.js.map +1 -0
- package/dist/engine/staging.d.ts +33 -0
- package/dist/engine/staging.d.ts.map +1 -0
- package/dist/engine/staging.js +63 -0
- package/dist/engine/staging.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +95 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp.d.ts +24 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +532 -0
- package/dist/mcp.js.map +1 -0
- package/dist/storage/index.d.ts +2 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +2 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/sqlite.d.ts +116 -0
- package/dist/storage/sqlite.d.ts.map +1 -0
- package/dist/storage/sqlite.js +750 -0
- package/dist/storage/sqlite.js.map +1 -0
- package/dist/types/agent.d.ts +30 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +23 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/checkpoint.d.ts +50 -0
- package/dist/types/checkpoint.d.ts.map +1 -0
- package/dist/types/checkpoint.js +8 -0
- package/dist/types/checkpoint.js.map +1 -0
- package/dist/types/engram.d.ts +165 -0
- package/dist/types/engram.d.ts.map +1 -0
- package/dist/types/engram.js +8 -0
- package/dist/types/engram.js.map +1 -0
- package/dist/types/eval.d.ts +84 -0
- package/dist/types/eval.d.ts.map +1 -0
- package/dist/types/eval.js +11 -0
- package/dist/types/eval.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +55 -0
- package/src/api/index.ts +1 -0
- package/src/api/routes.ts +528 -0
- package/src/cli.ts +260 -0
- package/src/core/decay.ts +61 -0
- package/src/core/embeddings.ts +82 -0
- package/src/core/hebbian.ts +91 -0
- package/src/core/index.ts +3 -0
- package/src/core/query-expander.ts +64 -0
- package/src/core/reranker.ts +99 -0
- package/src/core/salience.ts +95 -0
- package/src/engine/activation.ts +577 -0
- package/src/engine/connections.ts +101 -0
- package/src/engine/consolidation-scheduler.ts +123 -0
- package/src/engine/consolidation.ts +443 -0
- package/src/engine/eval.ts +100 -0
- package/src/engine/eviction.ts +99 -0
- package/src/engine/index.ts +6 -0
- package/src/engine/retraction.ts +98 -0
- package/src/engine/staging.ts +72 -0
- package/src/index.ts +100 -0
- package/src/mcp.ts +635 -0
- package/src/storage/index.ts +1 -0
- package/src/storage/sqlite.ts +893 -0
- package/src/types/agent.ts +65 -0
- package/src/types/checkpoint.ts +44 -0
- package/src/types/engram.ts +194 -0
- package/src/types/eval.ts +98 -0
- package/src/types/index.ts +4 -0
|
@@ -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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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":"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"}
|
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"}
|