@monoes/memory 1.0.5 → 1.0.6
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/README.md +72 -840
- package/dist/atomic-file.d.ts +17 -0
- package/dist/atomic-file.d.ts.map +1 -0
- package/dist/atomic-file.js +27 -0
- package/dist/atomic-file.js.map +1 -0
- package/dist/cache-manager.d.ts +0 -0
- package/dist/cache-manager.d.ts.map +1 -1
- package/dist/cache-manager.js +0 -0
- package/dist/cache-manager.js.map +1 -1
- package/dist/checkpointer.d.ts +13 -0
- package/dist/checkpointer.d.ts.map +1 -1
- package/dist/checkpointer.js +69 -6
- package/dist/checkpointer.js.map +1 -1
- package/dist/controller-registry.d.ts +2 -8
- package/dist/controller-registry.d.ts.map +1 -1
- package/dist/controller-registry.js +4 -49
- package/dist/controller-registry.js.map +1 -1
- package/dist/database-provider.d.ts +0 -0
- package/dist/database-provider.d.ts.map +0 -0
- package/dist/database-provider.js +0 -0
- package/dist/database-provider.js.map +1 -1
- package/dist/hnsw-index.d.ts +0 -0
- package/dist/hnsw-index.d.ts.map +1 -1
- package/dist/hnsw-index.js +0 -0
- package/dist/hnsw-index.js.map +1 -1
- package/dist/index.d.ts +0 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -17
- package/dist/index.js.map +1 -1
- package/dist/knowledge/document-chunker.d.ts +0 -0
- package/dist/knowledge/document-chunker.d.ts.map +0 -0
- package/dist/knowledge/document-chunker.js +0 -0
- package/dist/knowledge/document-chunker.js.map +1 -1
- package/dist/knowledge/index.d.ts +0 -0
- package/dist/knowledge/index.d.ts.map +0 -0
- package/dist/knowledge/index.js +0 -0
- package/dist/knowledge/index.js.map +0 -0
- package/dist/knowledge/knowledge-retriever.d.ts +0 -0
- package/dist/knowledge/knowledge-retriever.d.ts.map +1 -1
- package/dist/knowledge/knowledge-retriever.js +0 -0
- package/dist/knowledge/knowledge-retriever.js.map +1 -1
- package/dist/knowledge/knowledge-store.d.ts +0 -0
- package/dist/knowledge/knowledge-store.d.ts.map +1 -1
- package/dist/knowledge/knowledge-store.js +0 -0
- package/dist/knowledge/knowledge-store.js.map +0 -0
- package/dist/lancedb-backend.d.ts +5 -0
- package/dist/lancedb-backend.d.ts.map +1 -1
- package/dist/lancedb-backend.js +70 -12
- package/dist/lancedb-backend.js.map +1 -1
- package/dist/math-utils.d.ts +0 -0
- package/dist/math-utils.d.ts.map +0 -0
- package/dist/math-utils.js +0 -0
- package/dist/math-utils.js.map +0 -0
- package/dist/migration.d.ts +1 -0
- package/dist/migration.d.ts.map +1 -1
- package/dist/migration.js +50 -21
- package/dist/migration.js.map +1 -1
- package/dist/prompt-version-store.d.ts +0 -0
- package/dist/prompt-version-store.d.ts.map +1 -1
- package/dist/prompt-version-store.js +0 -0
- package/dist/prompt-version-store.js.map +0 -0
- package/dist/query-builder.d.ts +0 -0
- package/dist/query-builder.d.ts.map +1 -1
- package/dist/query-builder.js +0 -0
- package/dist/query-builder.js.map +1 -1
- package/dist/sqlite-backend.d.ts +0 -0
- package/dist/sqlite-backend.d.ts.map +1 -1
- package/dist/sqlite-backend.js +38 -9
- package/dist/sqlite-backend.js.map +1 -1
- package/dist/sqljs-backend.d.ts +1 -0
- package/dist/sqljs-backend.d.ts.map +1 -1
- package/dist/sqljs-backend.js +64 -13
- package/dist/sqljs-backend.js.map +1 -1
- package/dist/types/checkpoint.d.ts +0 -0
- package/dist/types/checkpoint.d.ts.map +0 -0
- package/dist/types/checkpoint.js +0 -0
- package/dist/types/checkpoint.js.map +0 -0
- package/dist/types.d.ts +1 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +0 -0
- package/dist/types.js.map +1 -1
- package/package.json +12 -13
- package/dist/agent-memory-scope.d.ts +0 -131
- package/dist/agent-memory-scope.d.ts.map +0 -1
- package/dist/agent-memory-scope.js +0 -230
- package/dist/agent-memory-scope.js.map +0 -1
- package/dist/auto-memory-bridge.d.ts +0 -230
- package/dist/auto-memory-bridge.d.ts.map +0 -1
- package/dist/auto-memory-bridge.js +0 -736
- package/dist/auto-memory-bridge.js.map +0 -1
- package/dist/episodic-store.d.ts +0 -58
- package/dist/episodic-store.d.ts.map +0 -1
- package/dist/episodic-store.js +0 -160
- package/dist/episodic-store.js.map +0 -1
- package/dist/learning-bridge.d.ts +0 -180
- package/dist/learning-bridge.d.ts.map +0 -1
- package/dist/learning-bridge.js +0 -566
- package/dist/learning-bridge.js.map +0 -1
- package/dist/memory-graph.d.ts +0 -125
- package/dist/memory-graph.d.ts.map +0 -1
- package/dist/memory-graph.js +0 -429
- package/dist/memory-graph.js.map +0 -1
- package/dist/procedural/action-record.d.ts +0 -19
- package/dist/procedural/action-record.d.ts.map +0 -1
- package/dist/procedural/action-record.js +0 -51
- package/dist/procedural/action-record.js.map +0 -1
- package/dist/procedural/action-sequence-extractor.d.ts +0 -25
- package/dist/procedural/action-sequence-extractor.d.ts.map +0 -1
- package/dist/procedural/action-sequence-extractor.js +0 -91
- package/dist/procedural/action-sequence-extractor.js.map +0 -1
- package/dist/procedural/index.d.ts +0 -14
- package/dist/procedural/index.d.ts.map +0 -1
- package/dist/procedural/index.js +0 -13
- package/dist/procedural/index.js.map +0 -1
- package/dist/procedural/learned-skill.d.ts +0 -17
- package/dist/procedural/learned-skill.d.ts.map +0 -1
- package/dist/procedural/learned-skill.js +0 -73
- package/dist/procedural/learned-skill.js.map +0 -1
- package/dist/procedural/skill-registry.d.ts +0 -25
- package/dist/procedural/skill-registry.d.ts.map +0 -1
- package/dist/procedural/skill-registry.js +0 -56
- package/dist/procedural/skill-registry.js.map +0 -1
- package/dist/procedural/types.d.ts +0 -67
- package/dist/procedural/types.d.ts.map +0 -1
- package/dist/procedural/types.js +0 -15
- package/dist/procedural/types.js.map +0 -1
- package/dist/tiers/contextual.d.ts +0 -45
- package/dist/tiers/contextual.d.ts.map +0 -1
- package/dist/tiers/contextual.js +0 -109
- package/dist/tiers/contextual.js.map +0 -1
- package/dist/tiers/entity.d.ts +0 -46
- package/dist/tiers/entity.d.ts.map +0 -1
- package/dist/tiers/entity.js +0 -106
- package/dist/tiers/entity.js.map +0 -1
- package/dist/tiers/index.d.ts +0 -4
- package/dist/tiers/index.d.ts.map +0 -1
- package/dist/tiers/index.js +0 -4
- package/dist/tiers/index.js.map +0 -1
- package/dist/tiers/short-term.d.ts +0 -42
- package/dist/tiers/short-term.d.ts.map +0 -1
- package/dist/tiers/short-term.js +0 -90
- package/dist/tiers/short-term.js.map +0 -1
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ActionSequenceExtractor — Groups action records into repeatable skill candidates.
|
|
3
|
-
*
|
|
4
|
-
* Part of Task 45 — Procedural Memory.
|
|
5
|
-
*/
|
|
6
|
-
import type { ActionRecord, ExtractionConfig, ActionSequenceGroup } from './types.js';
|
|
7
|
-
export declare class ActionSequenceExtractor {
|
|
8
|
-
private config;
|
|
9
|
-
constructor(config?: Partial<ExtractionConfig>);
|
|
10
|
-
/**
|
|
11
|
-
* Build a fingerprint for a sequence of actions: tool names joined with " -> "
|
|
12
|
-
*/
|
|
13
|
-
private fingerprint;
|
|
14
|
-
/**
|
|
15
|
-
* Extract action sequence groups from a flat list of records.
|
|
16
|
-
*
|
|
17
|
-
* 1. Group records by agentSlug
|
|
18
|
-
* 2. Within each agent, group by runId to get per-run sequences
|
|
19
|
-
* 3. Fingerprint each run sequence (toolName chain)
|
|
20
|
-
* 4. Group runs with identical fingerprints
|
|
21
|
-
* 5. Filter by minSuccessCount, minAvgQualityScore, maxSequenceLength
|
|
22
|
-
*/
|
|
23
|
-
extract(allRecords: ActionRecord[]): ActionSequenceGroup[];
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=action-sequence-extractor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"action-sequence-extractor.d.ts","sourceRoot":"","sources":["../../src/procedural/action-sequence-extractor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGtF,qBAAa,uBAAuB;IAClC,OAAO,CAAC,MAAM,CAAmB;gBAErB,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM;IAIlD;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;;;;;;;OAQG;IACH,OAAO,CAAC,UAAU,EAAE,YAAY,EAAE,GAAG,mBAAmB,EAAE;CA6E3D"}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ActionSequenceExtractor — Groups action records into repeatable skill candidates.
|
|
3
|
-
*
|
|
4
|
-
* Part of Task 45 — Procedural Memory.
|
|
5
|
-
*/
|
|
6
|
-
import { DEFAULT_EXTRACTION_CONFIG } from './types.js';
|
|
7
|
-
export class ActionSequenceExtractor {
|
|
8
|
-
config;
|
|
9
|
-
constructor(config = {}) {
|
|
10
|
-
this.config = { ...DEFAULT_EXTRACTION_CONFIG, ...config };
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Build a fingerprint for a sequence of actions: tool names joined with " -> "
|
|
14
|
-
*/
|
|
15
|
-
fingerprint(records) {
|
|
16
|
-
return records.map((r) => r.toolName).join(' -> ');
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Extract action sequence groups from a flat list of records.
|
|
20
|
-
*
|
|
21
|
-
* 1. Group records by agentSlug
|
|
22
|
-
* 2. Within each agent, group by runId to get per-run sequences
|
|
23
|
-
* 3. Fingerprint each run sequence (toolName chain)
|
|
24
|
-
* 4. Group runs with identical fingerprints
|
|
25
|
-
* 5. Filter by minSuccessCount, minAvgQualityScore, maxSequenceLength
|
|
26
|
-
*/
|
|
27
|
-
extract(allRecords) {
|
|
28
|
-
// Group by agentSlug
|
|
29
|
-
const byAgent = new Map();
|
|
30
|
-
for (const r of allRecords) {
|
|
31
|
-
const arr = byAgent.get(r.agentSlug) ?? [];
|
|
32
|
-
arr.push(r);
|
|
33
|
-
byAgent.set(r.agentSlug, arr);
|
|
34
|
-
}
|
|
35
|
-
const results = [];
|
|
36
|
-
for (const [agentSlug, records] of byAgent) {
|
|
37
|
-
// Group by runId
|
|
38
|
-
const byRun = new Map();
|
|
39
|
-
for (const r of records) {
|
|
40
|
-
const arr = byRun.get(r.runId) ?? [];
|
|
41
|
-
arr.push(r);
|
|
42
|
-
byRun.set(r.runId, arr);
|
|
43
|
-
}
|
|
44
|
-
// Sort each run's records by timestamp, compute fingerprint
|
|
45
|
-
const fingerprintGroups = new Map();
|
|
46
|
-
for (const [runId, runRecords] of byRun) {
|
|
47
|
-
const sorted = runRecords.sort((a, b) => a.timestamp.localeCompare(b.timestamp));
|
|
48
|
-
// Skip sequences that exceed max length
|
|
49
|
-
if (sorted.length > this.config.maxSequenceLength)
|
|
50
|
-
continue;
|
|
51
|
-
const fp = this.fingerprint(sorted);
|
|
52
|
-
const group = fingerprintGroups.get(fp) ?? { sequences: [], runIds: [] };
|
|
53
|
-
group.sequences.push(sorted);
|
|
54
|
-
group.runIds.push(runId);
|
|
55
|
-
fingerprintGroups.set(fp, group);
|
|
56
|
-
}
|
|
57
|
-
// Filter and build result groups
|
|
58
|
-
for (const [fp, group] of fingerprintGroups) {
|
|
59
|
-
// Only successful runs count
|
|
60
|
-
const successfulSequences = group.sequences.filter((seq) => seq.every((r) => r.outcome === 'success'));
|
|
61
|
-
const successCount = successfulSequences.length;
|
|
62
|
-
if (successCount < this.config.minSuccessCount)
|
|
63
|
-
continue;
|
|
64
|
-
// Compute average quality score across all records in successful sequences
|
|
65
|
-
const allQualityScores = [];
|
|
66
|
-
for (const seq of successfulSequences) {
|
|
67
|
-
for (const r of seq) {
|
|
68
|
-
if (r.qualityScore !== undefined) {
|
|
69
|
-
allQualityScores.push(r.qualityScore);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
const avgQualityScore = allQualityScores.length > 0
|
|
74
|
-
? allQualityScores.reduce((a, b) => a + b, 0) / allQualityScores.length
|
|
75
|
-
: 0;
|
|
76
|
-
if (avgQualityScore < this.config.minAvgQualityScore)
|
|
77
|
-
continue;
|
|
78
|
-
results.push({
|
|
79
|
-
agentSlug,
|
|
80
|
-
fingerprint: fp,
|
|
81
|
-
sequences: successfulSequences,
|
|
82
|
-
successCount,
|
|
83
|
-
avgQualityScore,
|
|
84
|
-
runIds: group.runIds.filter((_, i) => group.sequences[i].every((r) => r.outcome === 'success')),
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return results;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
//# sourceMappingURL=action-sequence-extractor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"action-sequence-extractor.js","sourceRoot":"","sources":["../../src/procedural/action-sequence-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Procedural Memory — Learn from Successful Executions
|
|
3
|
-
*
|
|
4
|
-
* Barrel export for Task 45.
|
|
5
|
-
*
|
|
6
|
-
* @module @monomind/memory/procedural
|
|
7
|
-
*/
|
|
8
|
-
export type { ActionOutcome, ActionRecord, ExtractionConfig, SkillTrigger, LearnedSkill, ActionSequenceGroup, } from './types.js';
|
|
9
|
-
export { DEFAULT_EXTRACTION_CONFIG } from './types.js';
|
|
10
|
-
export { ActionRecordStore } from './action-record.js';
|
|
11
|
-
export { ActionSequenceExtractor } from './action-sequence-extractor.js';
|
|
12
|
-
export { LearnedSkillSerializer } from './learned-skill.js';
|
|
13
|
-
export { SkillRegistry } from './skill-registry.js';
|
|
14
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/procedural/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,YAAY,EACV,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/procedural/index.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Procedural Memory — Learn from Successful Executions
|
|
3
|
-
*
|
|
4
|
-
* Barrel export for Task 45.
|
|
5
|
-
*
|
|
6
|
-
* @module @monomind/memory/procedural
|
|
7
|
-
*/
|
|
8
|
-
export { DEFAULT_EXTRACTION_CONFIG } from './types.js';
|
|
9
|
-
export { ActionRecordStore } from './action-record.js';
|
|
10
|
-
export { ActionSequenceExtractor } from './action-sequence-extractor.js';
|
|
11
|
-
export { LearnedSkillSerializer } from './learned-skill.js';
|
|
12
|
-
export { SkillRegistry } from './skill-registry.js';
|
|
13
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/procedural/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAWH,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LearnedSkillSerializer — Creates and serializes LearnedSkill objects.
|
|
3
|
-
*
|
|
4
|
-
* Part of Task 45 — Procedural Memory.
|
|
5
|
-
*/
|
|
6
|
-
import type { ActionRecord, LearnedSkill } from './types.js';
|
|
7
|
-
export declare class LearnedSkillSerializer {
|
|
8
|
-
/**
|
|
9
|
-
* Create a new LearnedSkill from extracted data.
|
|
10
|
-
*/
|
|
11
|
-
static create(name: string, agentSlug: string, triggerPattern: string, actionSequence: ActionRecord[], successCount: number, avgQualityScore: number, sourceRunIds: string[]): LearnedSkill;
|
|
12
|
-
/**
|
|
13
|
-
* Serialize a LearnedSkill to a markdown string with YAML frontmatter.
|
|
14
|
-
*/
|
|
15
|
-
static toMarkdown(skill: LearnedSkill): string;
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=learned-skill.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"learned-skill.d.ts","sourceRoot":"","sources":["../../src/procedural/learned-skill.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE7D,qBAAa,sBAAsB;IACjC;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,YAAY,EAAE,EAC9B,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,EAAE,GACrB,YAAY;IAqBf;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM;CAsC/C"}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* LearnedSkillSerializer — Creates and serializes LearnedSkill objects.
|
|
3
|
-
*
|
|
4
|
-
* Part of Task 45 — Procedural Memory.
|
|
5
|
-
*/
|
|
6
|
-
import { randomUUID } from 'crypto';
|
|
7
|
-
export class LearnedSkillSerializer {
|
|
8
|
-
/**
|
|
9
|
-
* Create a new LearnedSkill from extracted data.
|
|
10
|
-
*/
|
|
11
|
-
static create(name, agentSlug, triggerPattern, actionSequence, successCount, avgQualityScore, sourceRunIds) {
|
|
12
|
-
const now = new Date().toISOString();
|
|
13
|
-
return {
|
|
14
|
-
skillId: randomUUID(),
|
|
15
|
-
name,
|
|
16
|
-
agentSlug,
|
|
17
|
-
trigger: {
|
|
18
|
-
pattern: triggerPattern,
|
|
19
|
-
mode: 'exact',
|
|
20
|
-
minConfidence: 0.8,
|
|
21
|
-
},
|
|
22
|
-
actionSequence,
|
|
23
|
-
successCount,
|
|
24
|
-
avgQualityScore,
|
|
25
|
-
sourceRunIds,
|
|
26
|
-
createdAt: now,
|
|
27
|
-
lastUpdatedAt: now,
|
|
28
|
-
version: 1,
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Serialize a LearnedSkill to a markdown string with YAML frontmatter.
|
|
33
|
-
*/
|
|
34
|
-
static toMarkdown(skill) {
|
|
35
|
-
const lines = [];
|
|
36
|
-
lines.push('---');
|
|
37
|
-
lines.push(`skill_id: ${skill.skillId}`);
|
|
38
|
-
lines.push(`name: ${skill.name}`);
|
|
39
|
-
lines.push(`agent_slug: ${skill.agentSlug}`);
|
|
40
|
-
lines.push(`success_count: ${skill.successCount}`);
|
|
41
|
-
lines.push(`avg_quality_score: ${skill.avgQualityScore}`);
|
|
42
|
-
lines.push(`version: ${skill.version}`);
|
|
43
|
-
lines.push(`created_at: ${skill.createdAt}`);
|
|
44
|
-
lines.push(`last_updated_at: ${skill.lastUpdatedAt}`);
|
|
45
|
-
lines.push(`source_run_ids: [${skill.sourceRunIds.join(', ')}]`);
|
|
46
|
-
lines.push('---');
|
|
47
|
-
lines.push('');
|
|
48
|
-
lines.push(`# ${skill.name}`);
|
|
49
|
-
lines.push('');
|
|
50
|
-
lines.push('## Trigger');
|
|
51
|
-
lines.push('');
|
|
52
|
-
lines.push(`- Pattern: \`${skill.trigger.pattern}\``);
|
|
53
|
-
lines.push(`- Mode: ${skill.trigger.mode}`);
|
|
54
|
-
lines.push(`- Min Confidence: ${skill.trigger.minConfidence}`);
|
|
55
|
-
lines.push('');
|
|
56
|
-
lines.push('## Action Sequence');
|
|
57
|
-
lines.push('');
|
|
58
|
-
for (let i = 0; i < skill.actionSequence.length; i++) {
|
|
59
|
-
const step = skill.actionSequence[i];
|
|
60
|
-
lines.push(`### Step ${i + 1}: ${step.toolName}`);
|
|
61
|
-
lines.push('');
|
|
62
|
-
lines.push(`- Tool: \`${step.toolName}\``);
|
|
63
|
-
lines.push(`- Outcome: ${step.outcome}`);
|
|
64
|
-
lines.push(`- Duration: ${step.durationMs}ms`);
|
|
65
|
-
if (step.qualityScore !== undefined) {
|
|
66
|
-
lines.push(`- Quality: ${step.qualityScore}`);
|
|
67
|
-
}
|
|
68
|
-
lines.push('');
|
|
69
|
-
}
|
|
70
|
-
return lines.join('\n');
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
//# sourceMappingURL=learned-skill.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"learned-skill.js","sourceRoot":"","sources":["../../src/procedural/learned-skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SkillRegistry — JSONL-backed registry for learned skills.
|
|
3
|
-
*
|
|
4
|
-
* Part of Task 45 — Procedural Memory.
|
|
5
|
-
*/
|
|
6
|
-
import type { LearnedSkill } from './types.js';
|
|
7
|
-
export declare class SkillRegistry {
|
|
8
|
-
private filePath;
|
|
9
|
-
constructor(filePath: string);
|
|
10
|
-
/** Register a new learned skill */
|
|
11
|
-
register(skill: LearnedSkill): void;
|
|
12
|
-
/** List all registered skills */
|
|
13
|
-
list(): LearnedSkill[];
|
|
14
|
-
/** Get a skill by ID */
|
|
15
|
-
get(skillId: string): LearnedSkill | undefined;
|
|
16
|
-
/**
|
|
17
|
-
* Find a skill that matches the same fingerprint (agentSlug + tool sequence).
|
|
18
|
-
* Fingerprint = agentSlug + sorted tool names joined by " -> ".
|
|
19
|
-
*/
|
|
20
|
-
findByFingerprint(skill: LearnedSkill): LearnedSkill | undefined;
|
|
21
|
-
/** Update a skill by ID (rewrites the entire file) */
|
|
22
|
-
update(skillId: string, updated: LearnedSkill): void;
|
|
23
|
-
private buildFingerprint;
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=skill-registry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-registry.d.ts","sourceRoot":"","sources":["../../src/procedural/skill-registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,MAAM;IAQ5B,mCAAmC;IACnC,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAInC,iCAAiC;IACjC,IAAI,IAAI,YAAY,EAAE;IAOtB,wBAAwB;IACxB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAI9C;;;OAGG;IACH,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,GAAG,SAAS;IAKhE,sDAAsD;IACtD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI;IAQpD,OAAO,CAAC,gBAAgB;CAIzB"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SkillRegistry — JSONL-backed registry for learned skills.
|
|
3
|
-
*
|
|
4
|
-
* Part of Task 45 — Procedural Memory.
|
|
5
|
-
*/
|
|
6
|
-
import { appendFileSync, readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
|
|
7
|
-
import { dirname } from 'path';
|
|
8
|
-
export class SkillRegistry {
|
|
9
|
-
filePath;
|
|
10
|
-
constructor(filePath) {
|
|
11
|
-
this.filePath = filePath;
|
|
12
|
-
const dir = dirname(filePath);
|
|
13
|
-
if (!existsSync(dir)) {
|
|
14
|
-
mkdirSync(dir, { recursive: true });
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
/** Register a new learned skill */
|
|
18
|
-
register(skill) {
|
|
19
|
-
appendFileSync(this.filePath, JSON.stringify(skill) + '\n', 'utf-8');
|
|
20
|
-
}
|
|
21
|
-
/** List all registered skills */
|
|
22
|
-
list() {
|
|
23
|
-
if (!existsSync(this.filePath))
|
|
24
|
-
return [];
|
|
25
|
-
const content = readFileSync(this.filePath, 'utf-8').trim();
|
|
26
|
-
if (!content)
|
|
27
|
-
return [];
|
|
28
|
-
return content.split('\n').filter(Boolean).map((line) => JSON.parse(line));
|
|
29
|
-
}
|
|
30
|
-
/** Get a skill by ID */
|
|
31
|
-
get(skillId) {
|
|
32
|
-
return this.list().find((s) => s.skillId === skillId);
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Find a skill that matches the same fingerprint (agentSlug + tool sequence).
|
|
36
|
-
* Fingerprint = agentSlug + sorted tool names joined by " -> ".
|
|
37
|
-
*/
|
|
38
|
-
findByFingerprint(skill) {
|
|
39
|
-
const fp = this.buildFingerprint(skill);
|
|
40
|
-
return this.list().find((s) => this.buildFingerprint(s) === fp);
|
|
41
|
-
}
|
|
42
|
-
/** Update a skill by ID (rewrites the entire file) */
|
|
43
|
-
update(skillId, updated) {
|
|
44
|
-
const all = this.list();
|
|
45
|
-
const idx = all.findIndex((s) => s.skillId === skillId);
|
|
46
|
-
if (idx === -1)
|
|
47
|
-
return;
|
|
48
|
-
all[idx] = updated;
|
|
49
|
-
writeFileSync(this.filePath, all.map((s) => JSON.stringify(s)).join('\n') + '\n', 'utf-8');
|
|
50
|
-
}
|
|
51
|
-
buildFingerprint(skill) {
|
|
52
|
-
const toolChain = skill.actionSequence.map((a) => a.toolName).join(' -> ');
|
|
53
|
-
return `${skill.agentSlug}::${toolChain}`;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=skill-registry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-registry.js","sourceRoot":"","sources":["../../src/procedural/skill-registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxF,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAG/B,MAAM,OAAO,aAAa;IAChB,QAAQ,CAAS;IAEzB,YAAY,QAAgB;QAC1B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,QAAQ,CAAC,KAAmB;QAC1B,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IACvE,CAAC;IAED,iCAAiC;IACjC,IAAI;QACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5D,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAiB,CAAC,CAAC;IAC7F,CAAC;IAED,wBAAwB;IACxB,GAAG,CAAC,OAAe;QACjB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;IACxD,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAC,KAAmB;QACnC,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,sDAAsD;IACtD,MAAM,CAAC,OAAe,EAAE,OAAqB;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;QACxD,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,OAAO;QACvB,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;QACnB,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7F,CAAC;IAEO,gBAAgB,CAAC,KAAmB;QAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3E,OAAO,GAAG,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;IAC5C,CAAC;CACF"}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Procedural Memory Types
|
|
3
|
-
*
|
|
4
|
-
* Types for learning from successful agent executions.
|
|
5
|
-
* Part of Task 45 — Procedural Memory.
|
|
6
|
-
*/
|
|
7
|
-
/** Outcome of a single tool action */
|
|
8
|
-
export type ActionOutcome = 'success' | 'failure' | 'partial';
|
|
9
|
-
/** A single recorded action within an agent run */
|
|
10
|
-
export interface ActionRecord {
|
|
11
|
-
recordId: string;
|
|
12
|
-
runId: string;
|
|
13
|
-
agentId: string;
|
|
14
|
-
agentSlug: string;
|
|
15
|
-
toolName: string;
|
|
16
|
-
toolInput: Record<string, unknown>;
|
|
17
|
-
toolOutput?: string;
|
|
18
|
-
outcome: ActionOutcome;
|
|
19
|
-
durationMs: number;
|
|
20
|
-
qualityScore?: number;
|
|
21
|
-
timestamp: string;
|
|
22
|
-
}
|
|
23
|
-
/** Configuration for extracting learned skills from action records */
|
|
24
|
-
export interface ExtractionConfig {
|
|
25
|
-
/** Minimum number of successful occurrences before extraction (default 3) */
|
|
26
|
-
minSuccessCount: number;
|
|
27
|
-
/** Minimum average quality score threshold (default 0.75) */
|
|
28
|
-
minAvgQualityScore: number;
|
|
29
|
-
/** Maximum actions in a sequence (default 12) */
|
|
30
|
-
maxSequenceLength: number;
|
|
31
|
-
/** How far back to look in days (default 30) */
|
|
32
|
-
lookbackDays: number;
|
|
33
|
-
/** Minimum similarity for grouping sequences (default 0.85) */
|
|
34
|
-
minSimilarityForGrouping: number;
|
|
35
|
-
}
|
|
36
|
-
/** Default extraction configuration */
|
|
37
|
-
export declare const DEFAULT_EXTRACTION_CONFIG: ExtractionConfig;
|
|
38
|
-
/** Trigger condition for a learned skill */
|
|
39
|
-
export interface SkillTrigger {
|
|
40
|
-
pattern: string;
|
|
41
|
-
mode: 'exact' | 'semantic';
|
|
42
|
-
minConfidence: number;
|
|
43
|
-
}
|
|
44
|
-
/** A learned skill extracted from repeated successful executions */
|
|
45
|
-
export interface LearnedSkill {
|
|
46
|
-
skillId: string;
|
|
47
|
-
name: string;
|
|
48
|
-
agentSlug: string;
|
|
49
|
-
trigger: SkillTrigger;
|
|
50
|
-
actionSequence: ActionRecord[];
|
|
51
|
-
successCount: number;
|
|
52
|
-
avgQualityScore: number;
|
|
53
|
-
sourceRunIds: string[];
|
|
54
|
-
createdAt: string;
|
|
55
|
-
lastUpdatedAt: string;
|
|
56
|
-
version: number;
|
|
57
|
-
}
|
|
58
|
-
/** A group of similar action sequences discovered by the extractor */
|
|
59
|
-
export interface ActionSequenceGroup {
|
|
60
|
-
agentSlug: string;
|
|
61
|
-
fingerprint: string;
|
|
62
|
-
sequences: ActionRecord[][];
|
|
63
|
-
successCount: number;
|
|
64
|
-
avgQualityScore: number;
|
|
65
|
-
runIds: string[];
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/procedural/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,sCAAsC;AACtC,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE9D,mDAAmD;AACnD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,aAAa,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,sEAAsE;AACtE,MAAM,WAAW,gBAAgB;IAC/B,6EAA6E;IAC7E,eAAe,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iDAAiD;IACjD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gDAAgD;IAChD,YAAY,EAAE,MAAM,CAAC;IACrB,+DAA+D;IAC/D,wBAAwB,EAAE,MAAM,CAAC;CAClC;AAED,uCAAuC;AACvC,eAAO,MAAM,yBAAyB,EAAE,gBAMvC,CAAC;AAEF,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,GAAG,UAAU,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,oEAAoE;AACpE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,YAAY,CAAC;IACtB,cAAc,EAAE,YAAY,EAAE,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,sEAAsE;AACtE,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,YAAY,EAAE,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB"}
|
package/dist/procedural/types.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Procedural Memory Types
|
|
3
|
-
*
|
|
4
|
-
* Types for learning from successful agent executions.
|
|
5
|
-
* Part of Task 45 — Procedural Memory.
|
|
6
|
-
*/
|
|
7
|
-
/** Default extraction configuration */
|
|
8
|
-
export const DEFAULT_EXTRACTION_CONFIG = {
|
|
9
|
-
minSuccessCount: 3,
|
|
10
|
-
minAvgQualityScore: 0.75,
|
|
11
|
-
maxSequenceLength: 12,
|
|
12
|
-
lookbackDays: 30,
|
|
13
|
-
minSimilarityForGrouping: 0.85,
|
|
14
|
-
};
|
|
15
|
-
//# sourceMappingURL=types.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/procedural/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAkCH,uCAAuC;AACvC,MAAM,CAAC,MAAM,yBAAyB,GAAqB;IACzD,eAAe,EAAE,CAAC;IAClB,kBAAkB,EAAE,IAAI;IACxB,iBAAiB,EAAE,EAAE;IACrB,YAAY,EAAE,EAAE;IAChB,wBAAwB,EAAE,IAAI;CAC/B,CAAC"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ContextualMemory — Compressed session summaries (Task 09)
|
|
3
|
-
*
|
|
4
|
-
* Wraps an IMemoryBackend to persist session summaries and
|
|
5
|
-
* provides token-budget-aware retrieval of relevant context.
|
|
6
|
-
*
|
|
7
|
-
* @module v1/memory/tiers/contextual
|
|
8
|
-
*/
|
|
9
|
-
import type { IMemoryBackend } from '../types.js';
|
|
10
|
-
export interface SessionSummary {
|
|
11
|
-
sessionId: string;
|
|
12
|
-
agentSlugs: string[];
|
|
13
|
-
summary: string;
|
|
14
|
-
tokenCount: number;
|
|
15
|
-
createdAt: number;
|
|
16
|
-
}
|
|
17
|
-
export declare class ContextualMemory {
|
|
18
|
-
private readonly backend;
|
|
19
|
-
private summaries;
|
|
20
|
-
private readonly namespace;
|
|
21
|
-
private warmed;
|
|
22
|
-
/** Cached newest-first sorted summary list. Invalidated on store. */
|
|
23
|
-
private sortedCache;
|
|
24
|
-
constructor(backend: IMemoryBackend, namespace?: string);
|
|
25
|
-
/**
|
|
26
|
-
* Load persisted summaries from the backend into the in-memory cache.
|
|
27
|
-
* Called automatically before the first read so cross-session summaries
|
|
28
|
-
* are visible without an explicit initialization step.
|
|
29
|
-
*/
|
|
30
|
-
warm(): Promise<void>;
|
|
31
|
-
/**
|
|
32
|
-
* Persist a session summary both in the local map and the
|
|
33
|
-
* backing memory store.
|
|
34
|
-
*/
|
|
35
|
-
storeSummary(summary: SessionSummary): Promise<void>;
|
|
36
|
-
/**
|
|
37
|
-
* Retrieve summaries whose content matches the query (simple
|
|
38
|
-
* substring match over the local cache), respecting a maximum
|
|
39
|
-
* token budget. Summaries are returned newest-first.
|
|
40
|
-
*/
|
|
41
|
-
retrieveContext(query: string, maxTokens?: number): Promise<string>;
|
|
42
|
-
/** Look up a summary by session ID (local cache only). */
|
|
43
|
-
getSummary(sessionId: string): SessionSummary | undefined;
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=contextual.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contextual.d.ts","sourceRoot":"","sources":["../../src/tiers/contextual.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAoB,MAAM,aAAa,CAAC;AAGpE,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,gBAAgB;IAQzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAP1B,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,qEAAqE;IACrE,OAAO,CAAC,WAAW,CAAiC;gBAGjC,OAAO,EAAE,cAAc,EACxC,SAAS,SAAyB;IAKpC;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA8B3B;;;OAGG;IACG,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB1D;;;;OAIG;IACG,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,SAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IA0BvE,0DAA0D;IAC1D,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;CAG1D"}
|
package/dist/tiers/contextual.js
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ContextualMemory — Compressed session summaries (Task 09)
|
|
3
|
-
*
|
|
4
|
-
* Wraps an IMemoryBackend to persist session summaries and
|
|
5
|
-
* provides token-budget-aware retrieval of relevant context.
|
|
6
|
-
*
|
|
7
|
-
* @module v1/memory/tiers/contextual
|
|
8
|
-
*/
|
|
9
|
-
import { createDefaultEntry } from '../types.js';
|
|
10
|
-
export class ContextualMemory {
|
|
11
|
-
backend;
|
|
12
|
-
summaries = new Map();
|
|
13
|
-
namespace;
|
|
14
|
-
warmed = false;
|
|
15
|
-
/** Cached newest-first sorted summary list. Invalidated on store. */
|
|
16
|
-
sortedCache = null;
|
|
17
|
-
constructor(backend, namespace = 'contextual-summaries') {
|
|
18
|
-
this.backend = backend;
|
|
19
|
-
this.namespace = namespace;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Load persisted summaries from the backend into the in-memory cache.
|
|
23
|
-
* Called automatically before the first read so cross-session summaries
|
|
24
|
-
* are visible without an explicit initialization step.
|
|
25
|
-
*/
|
|
26
|
-
async warm() {
|
|
27
|
-
if (this.warmed)
|
|
28
|
-
return;
|
|
29
|
-
this.warmed = true;
|
|
30
|
-
try {
|
|
31
|
-
const entries = await this.backend.query({
|
|
32
|
-
type: 'hybrid',
|
|
33
|
-
namespace: this.namespace,
|
|
34
|
-
tags: ['session-summary'],
|
|
35
|
-
limit: 10000,
|
|
36
|
-
});
|
|
37
|
-
for (const entry of entries) {
|
|
38
|
-
const sessionId = entry.metadata?.sessionId;
|
|
39
|
-
if (!sessionId || this.summaries.has(sessionId))
|
|
40
|
-
continue;
|
|
41
|
-
this.summaries.set(sessionId, {
|
|
42
|
-
sessionId,
|
|
43
|
-
agentSlugs: entry.metadata?.agentSlugs ?? [],
|
|
44
|
-
summary: entry.content,
|
|
45
|
-
tokenCount: entry.metadata?.tokenCount ?? 0,
|
|
46
|
-
createdAt: entry.createdAt,
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
this.sortedCache = null;
|
|
50
|
-
}
|
|
51
|
-
catch {
|
|
52
|
-
// Backend unavailable — proceed with empty cache
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Persist a session summary both in the local map and the
|
|
57
|
-
* backing memory store.
|
|
58
|
-
*/
|
|
59
|
-
async storeSummary(summary) {
|
|
60
|
-
this.summaries.set(summary.sessionId, summary);
|
|
61
|
-
this.sortedCache = null; // invalidate sort cache
|
|
62
|
-
const input = {
|
|
63
|
-
key: `ctx-summary:${summary.sessionId}`,
|
|
64
|
-
content: summary.summary,
|
|
65
|
-
namespace: this.namespace,
|
|
66
|
-
tags: ['session-summary', ...summary.agentSlugs],
|
|
67
|
-
metadata: {
|
|
68
|
-
sessionId: summary.sessionId,
|
|
69
|
-
agentSlugs: summary.agentSlugs,
|
|
70
|
-
tokenCount: summary.tokenCount,
|
|
71
|
-
},
|
|
72
|
-
};
|
|
73
|
-
const entry = createDefaultEntry(input);
|
|
74
|
-
entry.createdAt = summary.createdAt;
|
|
75
|
-
entry.updatedAt = summary.createdAt;
|
|
76
|
-
await this.backend.store(entry);
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* Retrieve summaries whose content matches the query (simple
|
|
80
|
-
* substring match over the local cache), respecting a maximum
|
|
81
|
-
* token budget. Summaries are returned newest-first.
|
|
82
|
-
*/
|
|
83
|
-
async retrieveContext(query, maxTokens = 2000) {
|
|
84
|
-
await this.warm();
|
|
85
|
-
const lowerQuery = query.toLowerCase();
|
|
86
|
-
if (!this.sortedCache) {
|
|
87
|
-
this.sortedCache = Array.from(this.summaries.values()).sort((a, b) => b.createdAt - a.createdAt);
|
|
88
|
-
}
|
|
89
|
-
const sorted = this.sortedCache;
|
|
90
|
-
const parts = [];
|
|
91
|
-
let budget = maxTokens;
|
|
92
|
-
for (const s of sorted) {
|
|
93
|
-
if (budget <= 0)
|
|
94
|
-
break;
|
|
95
|
-
if (s.summary.toLowerCase().includes(lowerQuery) || lowerQuery === '') {
|
|
96
|
-
if (s.tokenCount <= budget) {
|
|
97
|
-
parts.push(s.summary);
|
|
98
|
-
budget -= s.tokenCount;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
return parts.join('\n\n');
|
|
103
|
-
}
|
|
104
|
-
/** Look up a summary by session ID (local cache only). */
|
|
105
|
-
getSummary(sessionId) {
|
|
106
|
-
return this.summaries.get(sessionId);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
//# sourceMappingURL=contextual.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contextual.js","sourceRoot":"","sources":["../../src/tiers/contextual.ts"],"names":[],"mappings":"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"}
|