@monoes/memory 1.0.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/README.md +902 -0
- package/dist/agent-memory-scope.d.ts +131 -0
- package/dist/agent-memory-scope.d.ts.map +1 -0
- package/dist/agent-memory-scope.js +230 -0
- package/dist/agent-memory-scope.js.map +1 -0
- package/dist/agentdb-adapter.d.ts +165 -0
- package/dist/agentdb-adapter.d.ts.map +1 -0
- package/dist/agentdb-adapter.js +836 -0
- package/dist/agentdb-adapter.js.map +1 -0
- package/dist/agentdb-backend.d.ts +218 -0
- package/dist/agentdb-backend.d.ts.map +1 -0
- package/dist/agentdb-backend.js +879 -0
- package/dist/agentdb-backend.js.map +1 -0
- package/dist/auto-memory-bridge.d.ts +230 -0
- package/dist/auto-memory-bridge.d.ts.map +1 -0
- package/dist/auto-memory-bridge.js +730 -0
- package/dist/auto-memory-bridge.js.map +1 -0
- package/dist/cache-manager.d.ts +134 -0
- package/dist/cache-manager.d.ts.map +1 -0
- package/dist/cache-manager.js +410 -0
- package/dist/cache-manager.js.map +1 -0
- package/dist/checkpointer.d.ts +78 -0
- package/dist/checkpointer.d.ts.map +1 -0
- package/dist/checkpointer.js +174 -0
- package/dist/checkpointer.js.map +1 -0
- package/dist/controller-registry.d.ts +216 -0
- package/dist/controller-registry.d.ts.map +1 -0
- package/dist/controller-registry.js +897 -0
- package/dist/controller-registry.js.map +1 -0
- package/dist/database-provider.d.ts +87 -0
- package/dist/database-provider.d.ts.map +1 -0
- package/dist/database-provider.js +434 -0
- package/dist/database-provider.js.map +1 -0
- package/dist/diskann-backend.d.ts +126 -0
- package/dist/diskann-backend.d.ts.map +1 -0
- package/dist/diskann-backend.js +324 -0
- package/dist/diskann-backend.js.map +1 -0
- package/dist/episodic-store.d.ts +58 -0
- package/dist/episodic-store.d.ts.map +1 -0
- package/dist/episodic-store.js +160 -0
- package/dist/episodic-store.js.map +1 -0
- package/dist/hnsw-index.d.ts +111 -0
- package/dist/hnsw-index.d.ts.map +1 -0
- package/dist/hnsw-index.js +778 -0
- package/dist/hnsw-index.js.map +1 -0
- package/dist/hnsw-lite.d.ts +29 -0
- package/dist/hnsw-lite.d.ts.map +1 -0
- package/dist/hnsw-lite.js +236 -0
- package/dist/hnsw-lite.js.map +1 -0
- package/dist/hybrid-backend.d.ts +299 -0
- package/dist/hybrid-backend.d.ts.map +1 -0
- package/dist/hybrid-backend.js +804 -0
- package/dist/hybrid-backend.js.map +1 -0
- package/dist/index.d.ts +228 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +379 -0
- package/dist/index.js.map +1 -0
- package/dist/knowledge/document-chunker.d.ts +22 -0
- package/dist/knowledge/document-chunker.d.ts.map +1 -0
- package/dist/knowledge/document-chunker.js +52 -0
- package/dist/knowledge/document-chunker.js.map +1 -0
- package/dist/knowledge/index.d.ts +12 -0
- package/dist/knowledge/index.d.ts.map +1 -0
- package/dist/knowledge/index.js +9 -0
- package/dist/knowledge/index.js.map +1 -0
- package/dist/knowledge/knowledge-retriever.d.ts +48 -0
- package/dist/knowledge/knowledge-retriever.d.ts.map +1 -0
- package/dist/knowledge/knowledge-retriever.js +80 -0
- package/dist/knowledge/knowledge-retriever.js.map +1 -0
- package/dist/knowledge/knowledge-store.d.ts +58 -0
- package/dist/knowledge/knowledge-store.d.ts.map +1 -0
- package/dist/knowledge/knowledge-store.js +121 -0
- package/dist/knowledge/knowledge-store.js.map +1 -0
- package/dist/learning-bridge.d.ts +162 -0
- package/dist/learning-bridge.d.ts.map +1 -0
- package/dist/learning-bridge.js +522 -0
- package/dist/learning-bridge.js.map +1 -0
- package/dist/memory-graph.d.ts +123 -0
- package/dist/memory-graph.d.ts.map +1 -0
- package/dist/memory-graph.js +412 -0
- package/dist/memory-graph.js.map +1 -0
- package/dist/migration.d.ts +68 -0
- package/dist/migration.d.ts.map +1 -0
- package/dist/migration.js +513 -0
- package/dist/migration.js.map +1 -0
- package/dist/partitioned-hnsw.d.ts +65 -0
- package/dist/partitioned-hnsw.d.ts.map +1 -0
- package/dist/partitioned-hnsw.js +209 -0
- package/dist/partitioned-hnsw.js.map +1 -0
- package/dist/persistent-sona.d.ts +144 -0
- package/dist/persistent-sona.d.ts.map +1 -0
- package/dist/persistent-sona.js +333 -0
- package/dist/persistent-sona.js.map +1 -0
- package/dist/procedural/action-record.d.ts +19 -0
- package/dist/procedural/action-record.d.ts.map +1 -0
- package/dist/procedural/action-record.js +51 -0
- package/dist/procedural/action-record.js.map +1 -0
- package/dist/procedural/action-sequence-extractor.d.ts +25 -0
- package/dist/procedural/action-sequence-extractor.d.ts.map +1 -0
- package/dist/procedural/action-sequence-extractor.js +91 -0
- package/dist/procedural/action-sequence-extractor.js.map +1 -0
- package/dist/procedural/index.d.ts +14 -0
- package/dist/procedural/index.d.ts.map +1 -0
- package/dist/procedural/index.js +13 -0
- package/dist/procedural/index.js.map +1 -0
- package/dist/procedural/learned-skill.d.ts +17 -0
- package/dist/procedural/learned-skill.d.ts.map +1 -0
- package/dist/procedural/learned-skill.js +73 -0
- package/dist/procedural/learned-skill.js.map +1 -0
- package/dist/procedural/procedure-extractor-worker.d.ts +27 -0
- package/dist/procedural/procedure-extractor-worker.d.ts.map +1 -0
- package/dist/procedural/procedure-extractor-worker.js +39 -0
- package/dist/procedural/procedure-extractor-worker.js.map +1 -0
- package/dist/procedural/skill-registry.d.ts +25 -0
- package/dist/procedural/skill-registry.d.ts.map +1 -0
- package/dist/procedural/skill-registry.js +56 -0
- package/dist/procedural/skill-registry.js.map +1 -0
- package/dist/procedural/types.d.ts +67 -0
- package/dist/procedural/types.d.ts.map +1 -0
- package/dist/procedural/types.js +15 -0
- package/dist/procedural/types.js.map +1 -0
- package/dist/prompt-version-store.d.ts +59 -0
- package/dist/prompt-version-store.d.ts.map +1 -0
- package/dist/prompt-version-store.js +175 -0
- package/dist/prompt-version-store.js.map +1 -0
- package/dist/query-builder.d.ts +52 -0
- package/dist/query-builder.d.ts.map +1 -0
- package/dist/query-builder.js +134 -0
- package/dist/query-builder.js.map +1 -0
- package/dist/rvf-backend.d.ts +51 -0
- package/dist/rvf-backend.d.ts.map +1 -0
- package/dist/rvf-backend.js +499 -0
- package/dist/rvf-backend.js.map +1 -0
- package/dist/rvf-learning-store.d.ts +141 -0
- package/dist/rvf-learning-store.d.ts.map +1 -0
- package/dist/rvf-learning-store.js +344 -0
- package/dist/rvf-learning-store.js.map +1 -0
- package/dist/rvf-migration.d.ts +45 -0
- package/dist/rvf-migration.d.ts.map +1 -0
- package/dist/rvf-migration.js +254 -0
- package/dist/rvf-migration.js.map +1 -0
- package/dist/sqlite-backend.d.ts +127 -0
- package/dist/sqlite-backend.d.ts.map +1 -0
- package/dist/sqlite-backend.js +618 -0
- package/dist/sqlite-backend.js.map +1 -0
- package/dist/sqljs-backend.d.ts +128 -0
- package/dist/sqljs-backend.d.ts.map +1 -0
- package/dist/sqljs-backend.js +611 -0
- package/dist/sqljs-backend.js.map +1 -0
- package/dist/tier-manager.d.ts +79 -0
- package/dist/tier-manager.d.ts.map +1 -0
- package/dist/tier-manager.js +169 -0
- package/dist/tier-manager.js.map +1 -0
- package/dist/tiers/contextual.d.ts +43 -0
- package/dist/tiers/contextual.d.ts.map +1 -0
- package/dist/tiers/contextual.js +102 -0
- package/dist/tiers/contextual.js.map +1 -0
- package/dist/tiers/entity.d.ts +46 -0
- package/dist/tiers/entity.d.ts.map +1 -0
- package/dist/tiers/entity.js +106 -0
- package/dist/tiers/entity.js.map +1 -0
- package/dist/tiers/index.d.ts +4 -0
- package/dist/tiers/index.d.ts.map +1 -0
- package/dist/tiers/index.js +4 -0
- package/dist/tiers/index.js.map +1 -0
- package/dist/tiers/short-term.d.ts +42 -0
- package/dist/tiers/short-term.d.ts.map +1 -0
- package/dist/tiers/short-term.js +89 -0
- package/dist/tiers/short-term.js.map +1 -0
- package/dist/types/checkpoint.d.ts +44 -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.d.ts +526 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +58 -0
- package/dist/types.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,73 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learned-skill.js","sourceRoot":"","sources":["../../src/procedural/learned-skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProcedureExtractorWorker — Background worker that extracts action
|
|
3
|
+
* sequences from successful agent runs and stores them as learned
|
|
4
|
+
* skills in procedural memory (Task 45).
|
|
5
|
+
*
|
|
6
|
+
* Delegates to ActionSequenceExtractor for grouping and fingerprinting.
|
|
7
|
+
*
|
|
8
|
+
* @module v1/memory/procedural/procedure-extractor-worker
|
|
9
|
+
*/
|
|
10
|
+
import type { ActionRecord } from './types.js';
|
|
11
|
+
export interface ProcedureExtractionContext {
|
|
12
|
+
records: ActionRecord[];
|
|
13
|
+
minOccurrences?: number;
|
|
14
|
+
minSuccessRate?: number;
|
|
15
|
+
}
|
|
16
|
+
export interface ProcedureExtractionResult {
|
|
17
|
+
extracted: boolean;
|
|
18
|
+
skillsFound: number;
|
|
19
|
+
skillsStored: number;
|
|
20
|
+
durationMs: number;
|
|
21
|
+
}
|
|
22
|
+
export declare class ProcedureExtractorWorker {
|
|
23
|
+
readonly name: "procedure-extractor";
|
|
24
|
+
readonly priority: "low";
|
|
25
|
+
execute(context: ProcedureExtractionContext): Promise<ProcedureExtractionResult>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=procedure-extractor-worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"procedure-extractor-worker.d.ts","sourceRoot":"","sources":["../../src/procedural/procedure-extractor-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,wBAAwB;IACnC,QAAQ,CAAC,IAAI,EAAG,qBAAqB,CAAU;IAC/C,QAAQ,CAAC,QAAQ,EAAG,KAAK,CAAU;IAE7B,OAAO,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,yBAAyB,CAAC;CA4BvF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProcedureExtractorWorker — Background worker that extracts action
|
|
3
|
+
* sequences from successful agent runs and stores them as learned
|
|
4
|
+
* skills in procedural memory (Task 45).
|
|
5
|
+
*
|
|
6
|
+
* Delegates to ActionSequenceExtractor for grouping and fingerprinting.
|
|
7
|
+
*
|
|
8
|
+
* @module v1/memory/procedural/procedure-extractor-worker
|
|
9
|
+
*/
|
|
10
|
+
export class ProcedureExtractorWorker {
|
|
11
|
+
name = 'procedure-extractor';
|
|
12
|
+
priority = 'low';
|
|
13
|
+
async execute(context) {
|
|
14
|
+
const start = Date.now();
|
|
15
|
+
try {
|
|
16
|
+
const { ActionSequenceExtractor } = await import('./action-sequence-extractor.js');
|
|
17
|
+
const extractor = new ActionSequenceExtractor({
|
|
18
|
+
minSuccessCount: context.minOccurrences,
|
|
19
|
+
minAvgQualityScore: context.minSuccessRate,
|
|
20
|
+
});
|
|
21
|
+
const groups = extractor.extract(context.records);
|
|
22
|
+
return {
|
|
23
|
+
extracted: true,
|
|
24
|
+
skillsFound: groups.length,
|
|
25
|
+
skillsStored: groups.length,
|
|
26
|
+
durationMs: Date.now() - start,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
return {
|
|
31
|
+
extracted: false,
|
|
32
|
+
skillsFound: 0,
|
|
33
|
+
skillsStored: 0,
|
|
34
|
+
durationMs: Date.now() - start,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=procedure-extractor-worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"procedure-extractor-worker.js","sourceRoot":"","sources":["../../src/procedural/procedure-extractor-worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAiBH,MAAM,OAAO,wBAAwB;IAC1B,IAAI,GAAG,qBAA8B,CAAC;IACtC,QAAQ,GAAG,KAAc,CAAC;IAEnC,KAAK,CAAC,OAAO,CAAC,OAAmC;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;YAEnF,MAAM,SAAS,GAAG,IAAI,uBAAuB,CAAC;gBAC5C,eAAe,EAAE,OAAO,CAAC,cAAc;gBACvC,kBAAkB,EAAE,OAAO,CAAC,cAAc;aAC3C,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAElD,OAAO;gBACL,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,MAAM,CAAC,MAAM;gBAC1B,YAAY,EAAE,MAAM,CAAC,MAAM;gBAC3B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;aAC/B,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;gBACL,SAAS,EAAE,KAAK;gBAChB,WAAW,EAAE,CAAC;gBACd,YAAY,EAAE,CAAC;gBACf,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;aAC/B,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PromptVersionStore - JSONL-based prompt version management
|
|
3
|
+
*
|
|
4
|
+
* Stores prompt versions and experiments as append-only JSONL files.
|
|
5
|
+
* Supports versioning, A/B experiments, quality scoring, and line-level diffs.
|
|
6
|
+
*
|
|
7
|
+
* File layout:
|
|
8
|
+
* {dirPath}/versions.jsonl - one PromptVersion JSON per line
|
|
9
|
+
* {dirPath}/experiments.jsonl - one PromptExperiment JSON per line
|
|
10
|
+
*
|
|
11
|
+
* @module @monomind/memory/prompt-version-store
|
|
12
|
+
*/
|
|
13
|
+
export interface PromptVersion {
|
|
14
|
+
agentSlug: string;
|
|
15
|
+
version: string;
|
|
16
|
+
prompt: string;
|
|
17
|
+
changelog: string;
|
|
18
|
+
activeFrom: Date;
|
|
19
|
+
activeTo?: Date;
|
|
20
|
+
qualityScore?: number;
|
|
21
|
+
traceCount: number;
|
|
22
|
+
publishedBy: string;
|
|
23
|
+
createdAt: Date;
|
|
24
|
+
}
|
|
25
|
+
export interface PromptExperiment {
|
|
26
|
+
agentSlug: string;
|
|
27
|
+
control: string;
|
|
28
|
+
candidate: string;
|
|
29
|
+
trafficPct: number;
|
|
30
|
+
startedAt: Date;
|
|
31
|
+
endsAt?: Date;
|
|
32
|
+
winnerId?: string;
|
|
33
|
+
}
|
|
34
|
+
export interface DiffResult {
|
|
35
|
+
agentSlug: string;
|
|
36
|
+
versionA: string;
|
|
37
|
+
versionB: string;
|
|
38
|
+
additions: number;
|
|
39
|
+
deletions: number;
|
|
40
|
+
}
|
|
41
|
+
export declare class PromptVersionStore {
|
|
42
|
+
private readonly versionsPath;
|
|
43
|
+
private readonly experimentsPath;
|
|
44
|
+
constructor(dirPath: string);
|
|
45
|
+
save(version: PromptVersion): void;
|
|
46
|
+
getActive(agentSlug: string): PromptVersion | null;
|
|
47
|
+
listVersions(agentSlug: string): PromptVersion[];
|
|
48
|
+
setActive(agentSlug: string, version: string): void;
|
|
49
|
+
diff(agentSlug: string, vA: string, vB: string): DiffResult;
|
|
50
|
+
updateQualityScore(agentSlug: string, version: string, score: number): void;
|
|
51
|
+
saveExperiment(exp: PromptExperiment): void;
|
|
52
|
+
getExperiment(agentSlug: string): PromptExperiment | null;
|
|
53
|
+
concludeExperiment(agentSlug: string, winnerId: string): void;
|
|
54
|
+
private readVersions;
|
|
55
|
+
private writeVersions;
|
|
56
|
+
private readExperiments;
|
|
57
|
+
private writeExperiments;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=prompt-version-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-version-store.d.ts","sourceRoot":"","sources":["../src/prompt-version-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,IAAI,CAAC;IACjB,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,MAAM,CAAC,EAAE,IAAI,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAmFD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAE7B,OAAO,EAAE,MAAM;IAQ3B,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKlC,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAKlD,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,EAAE;IAMhD,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAenD,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,UAAU;IAsB3D,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAY3E,cAAc,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI;IAK3C,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI;IAKzD,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAY7D,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,gBAAgB;CAIzB"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PromptVersionStore - JSONL-based prompt version management
|
|
3
|
+
*
|
|
4
|
+
* Stores prompt versions and experiments as append-only JSONL files.
|
|
5
|
+
* Supports versioning, A/B experiments, quality scoring, and line-level diffs.
|
|
6
|
+
*
|
|
7
|
+
* File layout:
|
|
8
|
+
* {dirPath}/versions.jsonl - one PromptVersion JSON per line
|
|
9
|
+
* {dirPath}/experiments.jsonl - one PromptExperiment JSON per line
|
|
10
|
+
*
|
|
11
|
+
* @module @monomind/memory/prompt-version-store
|
|
12
|
+
*/
|
|
13
|
+
import * as fs from 'node:fs';
|
|
14
|
+
import * as path from 'node:path';
|
|
15
|
+
function versionToRecord(v) {
|
|
16
|
+
return {
|
|
17
|
+
agentSlug: v.agentSlug,
|
|
18
|
+
version: v.version,
|
|
19
|
+
prompt: v.prompt,
|
|
20
|
+
changelog: v.changelog,
|
|
21
|
+
activeFrom: v.activeFrom.toISOString(),
|
|
22
|
+
activeTo: v.activeTo ? v.activeTo.toISOString() : null,
|
|
23
|
+
qualityScore: v.qualityScore ?? null,
|
|
24
|
+
traceCount: v.traceCount,
|
|
25
|
+
publishedBy: v.publishedBy,
|
|
26
|
+
createdAt: v.createdAt.toISOString(),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function recordToVersion(r) {
|
|
30
|
+
return {
|
|
31
|
+
agentSlug: r.agentSlug,
|
|
32
|
+
version: r.version,
|
|
33
|
+
prompt: r.prompt,
|
|
34
|
+
changelog: r.changelog,
|
|
35
|
+
activeFrom: new Date(r.activeFrom),
|
|
36
|
+
activeTo: r.activeTo ? new Date(r.activeTo) : undefined,
|
|
37
|
+
qualityScore: r.qualityScore ?? undefined,
|
|
38
|
+
traceCount: r.traceCount,
|
|
39
|
+
publishedBy: r.publishedBy,
|
|
40
|
+
createdAt: new Date(r.createdAt),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function experimentToRecord(e) {
|
|
44
|
+
return {
|
|
45
|
+
agentSlug: e.agentSlug,
|
|
46
|
+
control: e.control,
|
|
47
|
+
candidate: e.candidate,
|
|
48
|
+
trafficPct: e.trafficPct,
|
|
49
|
+
startedAt: e.startedAt.toISOString(),
|
|
50
|
+
endsAt: e.endsAt ? e.endsAt.toISOString() : null,
|
|
51
|
+
winnerId: e.winnerId ?? null,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function recordToExperiment(r) {
|
|
55
|
+
return {
|
|
56
|
+
agentSlug: r.agentSlug,
|
|
57
|
+
control: r.control,
|
|
58
|
+
candidate: r.candidate,
|
|
59
|
+
trafficPct: r.trafficPct,
|
|
60
|
+
startedAt: new Date(r.startedAt),
|
|
61
|
+
endsAt: r.endsAt ? new Date(r.endsAt) : undefined,
|
|
62
|
+
winnerId: r.winnerId ?? undefined,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
// ===== Store =====
|
|
66
|
+
export class PromptVersionStore {
|
|
67
|
+
versionsPath;
|
|
68
|
+
experimentsPath;
|
|
69
|
+
constructor(dirPath) {
|
|
70
|
+
fs.mkdirSync(dirPath, { recursive: true });
|
|
71
|
+
this.versionsPath = path.join(dirPath, 'versions.jsonl');
|
|
72
|
+
this.experimentsPath = path.join(dirPath, 'experiments.jsonl');
|
|
73
|
+
}
|
|
74
|
+
// ---- versions ----
|
|
75
|
+
save(version) {
|
|
76
|
+
const line = JSON.stringify(versionToRecord(version)) + '\n';
|
|
77
|
+
fs.appendFileSync(this.versionsPath, line, 'utf-8');
|
|
78
|
+
}
|
|
79
|
+
getActive(agentSlug) {
|
|
80
|
+
const all = this.readVersions();
|
|
81
|
+
return all.find((v) => v.agentSlug === agentSlug && v.activeTo === undefined) ?? null;
|
|
82
|
+
}
|
|
83
|
+
listVersions(agentSlug) {
|
|
84
|
+
return this.readVersions()
|
|
85
|
+
.filter((v) => v.agentSlug === agentSlug)
|
|
86
|
+
.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
|
|
87
|
+
}
|
|
88
|
+
setActive(agentSlug, version) {
|
|
89
|
+
const all = this.readVersions();
|
|
90
|
+
const now = new Date();
|
|
91
|
+
for (const v of all) {
|
|
92
|
+
if (v.agentSlug === agentSlug && v.activeTo === undefined) {
|
|
93
|
+
v.activeTo = now;
|
|
94
|
+
}
|
|
95
|
+
if (v.agentSlug === agentSlug && v.version === version) {
|
|
96
|
+
v.activeTo = undefined;
|
|
97
|
+
v.activeFrom = now;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
this.writeVersions(all);
|
|
101
|
+
}
|
|
102
|
+
diff(agentSlug, vA, vB) {
|
|
103
|
+
const all = this.readVersions();
|
|
104
|
+
const a = all.find((v) => v.agentSlug === agentSlug && v.version === vA);
|
|
105
|
+
const b = all.find((v) => v.agentSlug === agentSlug && v.version === vB);
|
|
106
|
+
const linesA = a ? a.prompt.split('\n') : [];
|
|
107
|
+
const linesB = b ? b.prompt.split('\n') : [];
|
|
108
|
+
const setA = new Set(linesA);
|
|
109
|
+
const setB = new Set(linesB);
|
|
110
|
+
let additions = 0;
|
|
111
|
+
let deletions = 0;
|
|
112
|
+
for (const line of linesB) {
|
|
113
|
+
if (!setA.has(line))
|
|
114
|
+
additions++;
|
|
115
|
+
}
|
|
116
|
+
for (const line of linesA) {
|
|
117
|
+
if (!setB.has(line))
|
|
118
|
+
deletions++;
|
|
119
|
+
}
|
|
120
|
+
return { agentSlug, versionA: vA, versionB: vB, additions, deletions };
|
|
121
|
+
}
|
|
122
|
+
updateQualityScore(agentSlug, version, score) {
|
|
123
|
+
const all = this.readVersions();
|
|
124
|
+
for (const v of all) {
|
|
125
|
+
if (v.agentSlug === agentSlug && v.version === version) {
|
|
126
|
+
v.qualityScore = score;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
this.writeVersions(all);
|
|
130
|
+
}
|
|
131
|
+
// ---- experiments ----
|
|
132
|
+
saveExperiment(exp) {
|
|
133
|
+
const line = JSON.stringify(experimentToRecord(exp)) + '\n';
|
|
134
|
+
fs.appendFileSync(this.experimentsPath, line, 'utf-8');
|
|
135
|
+
}
|
|
136
|
+
getExperiment(agentSlug) {
|
|
137
|
+
const all = this.readExperiments();
|
|
138
|
+
return all.find((e) => e.agentSlug === agentSlug && e.winnerId === undefined) ?? null;
|
|
139
|
+
}
|
|
140
|
+
concludeExperiment(agentSlug, winnerId) {
|
|
141
|
+
const all = this.readExperiments();
|
|
142
|
+
for (const e of all) {
|
|
143
|
+
if (e.agentSlug === agentSlug && e.winnerId === undefined) {
|
|
144
|
+
e.winnerId = winnerId;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
this.writeExperiments(all);
|
|
148
|
+
}
|
|
149
|
+
// ---- private I/O ----
|
|
150
|
+
readVersions() {
|
|
151
|
+
if (!fs.existsSync(this.versionsPath))
|
|
152
|
+
return [];
|
|
153
|
+
const content = fs.readFileSync(this.versionsPath, 'utf-8').trim();
|
|
154
|
+
if (!content)
|
|
155
|
+
return [];
|
|
156
|
+
return content.split('\n').filter(Boolean).map((line) => recordToVersion(JSON.parse(line)));
|
|
157
|
+
}
|
|
158
|
+
writeVersions(versions) {
|
|
159
|
+
const data = versions.map((v) => JSON.stringify(versionToRecord(v))).join('\n') + '\n';
|
|
160
|
+
fs.writeFileSync(this.versionsPath, data, 'utf-8');
|
|
161
|
+
}
|
|
162
|
+
readExperiments() {
|
|
163
|
+
if (!fs.existsSync(this.experimentsPath))
|
|
164
|
+
return [];
|
|
165
|
+
const content = fs.readFileSync(this.experimentsPath, 'utf-8').trim();
|
|
166
|
+
if (!content)
|
|
167
|
+
return [];
|
|
168
|
+
return content.split('\n').filter(Boolean).map((line) => recordToExperiment(JSON.parse(line)));
|
|
169
|
+
}
|
|
170
|
+
writeExperiments(experiments) {
|
|
171
|
+
const data = experiments.map((e) => JSON.stringify(experimentToRecord(e))).join('\n') + '\n';
|
|
172
|
+
fs.writeFileSync(this.experimentsPath, data, 'utf-8');
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=prompt-version-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-version-store.js","sourceRoot":"","sources":["../src/prompt-version-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { MemoryQuery } from './types.js';
|
|
2
|
+
export type SortField = NonNullable<MemoryQuery['sortField']>;
|
|
3
|
+
export type SortDirection = NonNullable<MemoryQuery['sortDirection']>;
|
|
4
|
+
/**
|
|
5
|
+
* Fluent builder for MemoryQuery objects.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* const q = query()
|
|
9
|
+
* .semantic('authentication patterns')
|
|
10
|
+
* .inNamespace('security')
|
|
11
|
+
* .withTags(['critical'])
|
|
12
|
+
* .threshold(0.8)
|
|
13
|
+
* .limit(10)
|
|
14
|
+
* .build();
|
|
15
|
+
*/
|
|
16
|
+
export declare class QueryBuilder {
|
|
17
|
+
private _type;
|
|
18
|
+
private _content?;
|
|
19
|
+
private _namespace?;
|
|
20
|
+
private _tags?;
|
|
21
|
+
private _limit;
|
|
22
|
+
private _offset?;
|
|
23
|
+
private _threshold?;
|
|
24
|
+
private _sortField?;
|
|
25
|
+
private _sortDirection?;
|
|
26
|
+
semantic(content: string): this;
|
|
27
|
+
exact(key: string): this;
|
|
28
|
+
hybrid(content: string): this;
|
|
29
|
+
inNamespace(namespace: string): this;
|
|
30
|
+
withTags(tags: string[]): this;
|
|
31
|
+
limit(n: number): this;
|
|
32
|
+
offset(n: number): this;
|
|
33
|
+
threshold(t: number): this;
|
|
34
|
+
sortBy(field: SortField, direction?: SortDirection): this;
|
|
35
|
+
newestFirst(): this;
|
|
36
|
+
oldestFirst(): this;
|
|
37
|
+
recentlyAccessed(): this;
|
|
38
|
+
mostAccessed(): this;
|
|
39
|
+
reset(): this;
|
|
40
|
+
clone(): QueryBuilder;
|
|
41
|
+
build(): MemoryQuery;
|
|
42
|
+
}
|
|
43
|
+
/** Factory shorthand: `query().semantic('...').build()` */
|
|
44
|
+
export declare function query(): QueryBuilder;
|
|
45
|
+
/** Pre-built common query patterns */
|
|
46
|
+
export declare const QueryTemplates: {
|
|
47
|
+
recentInNamespace(namespace: string, limit?: number): MemoryQuery;
|
|
48
|
+
byTags(tags: string[], limit?: number): MemoryQuery;
|
|
49
|
+
semanticSearch(content: string, limit?: number, threshold?: number): MemoryQuery;
|
|
50
|
+
exactKey(namespace: string, key: string): MemoryQuery;
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=query-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../src/query-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAa,MAAM,YAAY,CAAC;AAEzD,MAAM,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;AAC9D,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;AAEtE;;;;;;;;;;;GAWG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAC,CAAW;IACzB,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAC,CAAY;IAC/B,OAAO,CAAC,cAAc,CAAC,CAAgB;IAEvC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM/B,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMxB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM7B,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAKpC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI;IAK9B,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKtB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKvB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAK1B,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,GAAE,aAAsB,GAAG,IAAI;IAOjE,WAAW,IAAI,IAAI;IACnB,WAAW,IAAI,IAAI;IACnB,gBAAgB,IAAI,IAAI;IACxB,YAAY,IAAI,IAAI;IAEpB,KAAK,IAAI,IAAI;IAab,KAAK,IAAI,YAAY;IAcrB,KAAK,IAAI,WAAW;CAcrB;AAED,2DAA2D;AAC3D,wBAAgB,KAAK,IAAI,YAAY,CAEpC;AAED,sCAAsC;AACtC,eAAO,MAAM,cAAc;iCACI,MAAM,mBAAe,WAAW;iBAIhD,MAAM,EAAE,mBAAe,WAAW;4BAIvB,MAAM,uCAAgC,WAAW;wBAIrD,MAAM,OAAO,MAAM,GAAG,WAAW;CAGtD,CAAC"}
|