@monoes/memory 1.0.4 → 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.
Files changed (154) hide show
  1. package/README.md +72 -840
  2. package/dist/atomic-file.d.ts +17 -0
  3. package/dist/atomic-file.d.ts.map +1 -0
  4. package/dist/atomic-file.js +27 -0
  5. package/dist/atomic-file.js.map +1 -0
  6. package/dist/cache-manager.d.ts +0 -0
  7. package/dist/cache-manager.d.ts.map +1 -1
  8. package/dist/cache-manager.js +0 -0
  9. package/dist/cache-manager.js.map +1 -1
  10. package/dist/checkpointer.d.ts +13 -0
  11. package/dist/checkpointer.d.ts.map +1 -1
  12. package/dist/checkpointer.js +69 -6
  13. package/dist/checkpointer.js.map +1 -1
  14. package/dist/controller-registry.d.ts +2 -8
  15. package/dist/controller-registry.d.ts.map +1 -1
  16. package/dist/controller-registry.js +4 -49
  17. package/dist/controller-registry.js.map +1 -1
  18. package/dist/database-provider.d.ts +0 -0
  19. package/dist/database-provider.d.ts.map +0 -0
  20. package/dist/database-provider.js +0 -0
  21. package/dist/database-provider.js.map +1 -1
  22. package/dist/hnsw-index.d.ts +0 -0
  23. package/dist/hnsw-index.d.ts.map +1 -1
  24. package/dist/hnsw-index.js +0 -0
  25. package/dist/hnsw-index.js.map +1 -1
  26. package/dist/index.d.ts +0 -22
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +0 -19
  29. package/dist/index.js.map +1 -1
  30. package/dist/knowledge/document-chunker.d.ts +0 -0
  31. package/dist/knowledge/document-chunker.d.ts.map +0 -0
  32. package/dist/knowledge/document-chunker.js +0 -0
  33. package/dist/knowledge/document-chunker.js.map +1 -1
  34. package/dist/knowledge/index.d.ts +0 -0
  35. package/dist/knowledge/index.d.ts.map +0 -0
  36. package/dist/knowledge/index.js +0 -0
  37. package/dist/knowledge/index.js.map +0 -0
  38. package/dist/knowledge/knowledge-retriever.d.ts +0 -0
  39. package/dist/knowledge/knowledge-retriever.d.ts.map +1 -1
  40. package/dist/knowledge/knowledge-retriever.js +0 -0
  41. package/dist/knowledge/knowledge-retriever.js.map +1 -1
  42. package/dist/knowledge/knowledge-store.d.ts +0 -0
  43. package/dist/knowledge/knowledge-store.d.ts.map +1 -1
  44. package/dist/knowledge/knowledge-store.js +0 -0
  45. package/dist/knowledge/knowledge-store.js.map +0 -0
  46. package/dist/lancedb-backend.d.ts +5 -0
  47. package/dist/lancedb-backend.d.ts.map +1 -1
  48. package/dist/lancedb-backend.js +70 -12
  49. package/dist/lancedb-backend.js.map +1 -1
  50. package/dist/math-utils.d.ts +0 -0
  51. package/dist/math-utils.d.ts.map +0 -0
  52. package/dist/math-utils.js +0 -0
  53. package/dist/math-utils.js.map +0 -0
  54. package/dist/migration.d.ts +1 -0
  55. package/dist/migration.d.ts.map +1 -1
  56. package/dist/migration.js +50 -21
  57. package/dist/migration.js.map +1 -1
  58. package/dist/prompt-version-store.d.ts +0 -0
  59. package/dist/prompt-version-store.d.ts.map +1 -1
  60. package/dist/prompt-version-store.js +0 -0
  61. package/dist/prompt-version-store.js.map +0 -0
  62. package/dist/query-builder.d.ts +0 -0
  63. package/dist/query-builder.d.ts.map +1 -1
  64. package/dist/query-builder.js +0 -0
  65. package/dist/query-builder.js.map +1 -1
  66. package/dist/sqlite-backend.d.ts +0 -0
  67. package/dist/sqlite-backend.d.ts.map +1 -1
  68. package/dist/sqlite-backend.js +38 -9
  69. package/dist/sqlite-backend.js.map +1 -1
  70. package/dist/sqljs-backend.d.ts +1 -0
  71. package/dist/sqljs-backend.d.ts.map +1 -1
  72. package/dist/sqljs-backend.js +64 -13
  73. package/dist/sqljs-backend.js.map +1 -1
  74. package/dist/types/checkpoint.d.ts +0 -0
  75. package/dist/types/checkpoint.d.ts.map +0 -0
  76. package/dist/types/checkpoint.js +0 -0
  77. package/dist/types/checkpoint.js.map +0 -0
  78. package/dist/types.d.ts +1 -4
  79. package/dist/types.d.ts.map +1 -1
  80. package/dist/types.js +0 -0
  81. package/dist/types.js.map +1 -1
  82. package/package.json +12 -13
  83. package/dist/agent-memory-scope.d.ts +0 -131
  84. package/dist/agent-memory-scope.d.ts.map +0 -1
  85. package/dist/agent-memory-scope.js +0 -230
  86. package/dist/agent-memory-scope.js.map +0 -1
  87. package/dist/auto-memory-bridge.d.ts +0 -230
  88. package/dist/auto-memory-bridge.d.ts.map +0 -1
  89. package/dist/auto-memory-bridge.js +0 -736
  90. package/dist/auto-memory-bridge.js.map +0 -1
  91. package/dist/diskann-backend.d.ts +0 -126
  92. package/dist/diskann-backend.d.ts.map +0 -1
  93. package/dist/diskann-backend.js +0 -336
  94. package/dist/diskann-backend.js.map +0 -1
  95. package/dist/episodic-store.d.ts +0 -58
  96. package/dist/episodic-store.d.ts.map +0 -1
  97. package/dist/episodic-store.js +0 -160
  98. package/dist/episodic-store.js.map +0 -1
  99. package/dist/learning-bridge.d.ts +0 -180
  100. package/dist/learning-bridge.d.ts.map +0 -1
  101. package/dist/learning-bridge.js +0 -566
  102. package/dist/learning-bridge.js.map +0 -1
  103. package/dist/memory-graph.d.ts +0 -125
  104. package/dist/memory-graph.d.ts.map +0 -1
  105. package/dist/memory-graph.js +0 -429
  106. package/dist/memory-graph.js.map +0 -1
  107. package/dist/partitioned-hnsw.d.ts +0 -65
  108. package/dist/partitioned-hnsw.d.ts.map +0 -1
  109. package/dist/partitioned-hnsw.js +0 -209
  110. package/dist/partitioned-hnsw.js.map +0 -1
  111. package/dist/procedural/action-record.d.ts +0 -19
  112. package/dist/procedural/action-record.d.ts.map +0 -1
  113. package/dist/procedural/action-record.js +0 -51
  114. package/dist/procedural/action-record.js.map +0 -1
  115. package/dist/procedural/action-sequence-extractor.d.ts +0 -25
  116. package/dist/procedural/action-sequence-extractor.d.ts.map +0 -1
  117. package/dist/procedural/action-sequence-extractor.js +0 -91
  118. package/dist/procedural/action-sequence-extractor.js.map +0 -1
  119. package/dist/procedural/index.d.ts +0 -14
  120. package/dist/procedural/index.d.ts.map +0 -1
  121. package/dist/procedural/index.js +0 -13
  122. package/dist/procedural/index.js.map +0 -1
  123. package/dist/procedural/learned-skill.d.ts +0 -17
  124. package/dist/procedural/learned-skill.d.ts.map +0 -1
  125. package/dist/procedural/learned-skill.js +0 -73
  126. package/dist/procedural/learned-skill.js.map +0 -1
  127. package/dist/procedural/skill-registry.d.ts +0 -25
  128. package/dist/procedural/skill-registry.d.ts.map +0 -1
  129. package/dist/procedural/skill-registry.js +0 -56
  130. package/dist/procedural/skill-registry.js.map +0 -1
  131. package/dist/procedural/types.d.ts +0 -67
  132. package/dist/procedural/types.d.ts.map +0 -1
  133. package/dist/procedural/types.js +0 -15
  134. package/dist/procedural/types.js.map +0 -1
  135. package/dist/tier-manager.d.ts +0 -79
  136. package/dist/tier-manager.d.ts.map +0 -1
  137. package/dist/tier-manager.js +0 -173
  138. package/dist/tier-manager.js.map +0 -1
  139. package/dist/tiers/contextual.d.ts +0 -45
  140. package/dist/tiers/contextual.d.ts.map +0 -1
  141. package/dist/tiers/contextual.js +0 -109
  142. package/dist/tiers/contextual.js.map +0 -1
  143. package/dist/tiers/entity.d.ts +0 -46
  144. package/dist/tiers/entity.d.ts.map +0 -1
  145. package/dist/tiers/entity.js +0 -106
  146. package/dist/tiers/entity.js.map +0 -1
  147. package/dist/tiers/index.d.ts +0 -4
  148. package/dist/tiers/index.d.ts.map +0 -1
  149. package/dist/tiers/index.js +0 -4
  150. package/dist/tiers/index.js.map +0 -1
  151. package/dist/tiers/short-term.d.ts +0 -42
  152. package/dist/tiers/short-term.d.ts.map +0 -1
  153. package/dist/tiers/short-term.js +0 -90
  154. package/dist/tiers/short-term.js.map +0 -1
@@ -1,209 +0,0 @@
1
- /**
2
- * PartitionedHNSW — Timestamp-partitioned HNSW sub-indexes for temporal locality
3
- *
4
- * Partitions the HNSW vector index into time-bucket sub-indexes so that recent
5
- * entries are searched first, dramatically reducing average search latency for
6
- * workloads where recency correlates with relevance.
7
- *
8
- * Architecture:
9
- * - Entries are routed to a bucket based on Math.floor(createdAt / bucketMs)
10
- * - Each bucket owns an independent HNSWIndex (lazy-created)
11
- * - Search merges results across buckets, sorted by recency then similarity
12
- * - Old buckets can be evicted once they exceed maxBuckets
13
- *
14
- * Source: ICDE 2025 Timestamp-Partitioned HNSW
15
- *
16
- * @module v1/memory/partitioned-hnsw
17
- */
18
- function cosineSim(a, b) {
19
- if (a.length !== b.length || a.length === 0)
20
- return 0;
21
- let dot = 0;
22
- for (let i = 0; i < a.length; i++)
23
- dot += a[i] * b[i];
24
- // Vectors are pre-normalised, so dot == cosine similarity
25
- return dot;
26
- }
27
- function l2Norm(v) {
28
- let sum = 0;
29
- for (let i = 0; i < v.length; i++)
30
- sum += v[i] * v[i];
31
- const len = Math.sqrt(sum);
32
- if (len === 0)
33
- return v;
34
- const out = new Float32Array(v.length);
35
- for (let i = 0; i < v.length; i++)
36
- out[i] = v[i] / len;
37
- return out;
38
- }
39
- class TimeBucket {
40
- entries = [];
41
- _oldest = Infinity;
42
- _newest = 0;
43
- add(entry) {
44
- const normVec = entry.embedding ? l2Norm(entry.embedding) : null;
45
- this.entries.push({ entry, normVec });
46
- if (entry.createdAt < this._oldest)
47
- this._oldest = entry.createdAt;
48
- if (entry.createdAt > this._newest)
49
- this._newest = entry.createdAt;
50
- }
51
- remove(id) {
52
- const idx = this.entries.findIndex(e => e.entry.id === id);
53
- if (idx === -1)
54
- return false;
55
- const removed = this.entries.splice(idx, 1)[0];
56
- // Recompute _oldest/_newest if the removed entry was an extremum
57
- if (removed.entry.createdAt === this._oldest || removed.entry.createdAt === this._newest) {
58
- this._oldest = Infinity;
59
- this._newest = 0;
60
- for (const e of this.entries) {
61
- if (e.entry.createdAt < this._oldest)
62
- this._oldest = e.entry.createdAt;
63
- if (e.entry.createdAt > this._newest)
64
- this._newest = e.entry.createdAt;
65
- }
66
- }
67
- return true;
68
- }
69
- /** Approximate k-NN by brute-force within the bucket (buckets are small). */
70
- search(queryVec, limit, textQuery) {
71
- const scored = this.entries.map(({ entry, normVec }) => {
72
- let score = 0;
73
- if (queryVec && normVec) {
74
- score = cosineSim(queryVec, normVec);
75
- }
76
- else if (textQuery) {
77
- // Keyword fallback: count overlapping terms
78
- const terms = textQuery.toLowerCase().split(/\s+/);
79
- const content = entry.content.toLowerCase();
80
- const hits = terms.filter(t => content.includes(t)).length;
81
- score = hits / Math.max(terms.length, 1);
82
- }
83
- return { entry, score };
84
- });
85
- scored.sort((a, b) => b.score - a.score);
86
- return scored.slice(0, limit);
87
- }
88
- get size() { return this.entries.length; }
89
- get oldest() { return this.entries.length ? this._oldest : Infinity; }
90
- get newest() { return this.entries.length ? this._newest : 0; }
91
- }
92
- // ===== PartitionedHNSW =====
93
- export class PartitionedHNSW {
94
- bucketMs;
95
- maxBuckets;
96
- k;
97
- /** bucketKey → TimeBucket, ordered newest-first via insertion order */
98
- buckets = new Map();
99
- constructor(config = {}) {
100
- this.bucketMs = config.bucketMs ?? 60 * 60 * 1000; // 1 hour default
101
- this.maxBuckets = config.maxBuckets ?? 48; // 48 hours default retention
102
- this.k = config.k ?? 16;
103
- }
104
- /** Add a memory entry to its time-bucket. */
105
- add(entry) {
106
- const bucketKey = this.bucketKeyFor(entry.createdAt);
107
- if (!this.buckets.has(bucketKey)) {
108
- this.buckets.set(bucketKey, new TimeBucket());
109
- this.evictOldBuckets();
110
- // After eviction the bucket we just created may have been removed
111
- // (entry predates the retention window) — discard it silently.
112
- if (!this.buckets.has(bucketKey))
113
- return;
114
- }
115
- this.buckets.get(bucketKey).add(entry);
116
- }
117
- /**
118
- * Search across partitions, newest buckets first.
119
- * Stops early once `limit` results are collected or all buckets exhausted.
120
- *
121
- * @param queryEmbedding - optional query vector (cosine similarity)
122
- * @param textQuery - optional keyword fallback
123
- * @param limit - max results
124
- * @param fromMs - optional lower bound on createdAt (temporal filter)
125
- * @param toMs - optional upper bound on createdAt (temporal filter)
126
- */
127
- search(queryEmbedding, textQuery, limit, fromMs, toMs) {
128
- const normQuery = queryEmbedding ? l2Norm(queryEmbedding) : null;
129
- // Collect buckets in descending (newest-first) order
130
- const sortedKeys = [...this.buckets.keys()].sort((a, b) => b - a);
131
- const candidates = [];
132
- for (const key of sortedKeys) {
133
- // Skip buckets entirely outside the temporal filter
134
- const bucket = this.buckets.get(key);
135
- if (fromMs !== undefined && bucket.newest < fromMs)
136
- continue;
137
- if (toMs !== undefined && bucket.oldest > toMs)
138
- continue;
139
- const hits = bucket.search(normQuery, Math.max(limit, this.k), textQuery);
140
- for (const h of hits) {
141
- if (fromMs !== undefined && h.entry.createdAt < fromMs)
142
- continue;
143
- if (toMs !== undefined && h.entry.createdAt > toMs)
144
- continue;
145
- candidates.push({ ...h, bucketKey: key });
146
- }
147
- }
148
- // Sort by score desc, then by recency (bucketKey desc) as tiebreak
149
- candidates.sort((a, b) => b.score - a.score || b.bucketKey - a.bucketKey);
150
- const seen = new Set();
151
- const results = [];
152
- for (const { entry } of candidates) {
153
- if (!seen.has(entry.id)) {
154
- seen.add(entry.id);
155
- results.push(entry);
156
- }
157
- if (results.length >= limit)
158
- break;
159
- }
160
- return results;
161
- }
162
- /**
163
- * Remove an entry from its time-bucket by id and original createdAt timestamp.
164
- * Returns true if the entry was found and removed, false otherwise.
165
- */
166
- remove(id, createdAt) {
167
- const bucketKey = this.bucketKeyFor(createdAt);
168
- const bucket = this.buckets.get(bucketKey);
169
- if (!bucket)
170
- return false;
171
- return bucket.remove(id);
172
- }
173
- /** Stats per bucket for observability. */
174
- bucketStats() {
175
- return [...this.buckets.entries()].map(([key, bucket]) => ({
176
- bucketKey: key,
177
- entryCount: bucket.size,
178
- oldestMs: bucket.oldest,
179
- newestMs: bucket.newest,
180
- }));
181
- }
182
- get totalEntries() {
183
- let n = 0;
184
- for (const b of this.buckets.values())
185
- n += b.size;
186
- return n;
187
- }
188
- // ------------------------------------------------------------------
189
- // Private helpers
190
- // ------------------------------------------------------------------
191
- bucketKeyFor(createdAt) {
192
- return Math.floor(createdAt / this.bucketMs);
193
- }
194
- /** Evict the oldest bucket(s) when we exceed maxBuckets. */
195
- evictOldBuckets() {
196
- while (this.buckets.size > this.maxBuckets) {
197
- // Find the smallest bucket key (oldest in time), not first in insertion order.
198
- // Insertion order diverges from temporal order during bulk inserts or migrations.
199
- let oldestKey;
200
- for (const k of this.buckets.keys()) {
201
- if (oldestKey === undefined || k < oldestKey)
202
- oldestKey = k;
203
- }
204
- if (oldestKey !== undefined)
205
- this.buckets.delete(oldestKey);
206
- }
207
- }
208
- }
209
- //# sourceMappingURL=partitioned-hnsw.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"partitioned-hnsw.js","sourceRoot":"","sources":["../src/partitioned-hnsw.ts"],"names":[],"mappings":"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"}
@@ -1,19 +0,0 @@
1
- /**
2
- * ActionRecordStore — JSONL-backed append-only store for action records.
3
- *
4
- * Part of Task 45 — Procedural Memory.
5
- */
6
- import type { ActionRecord } from './types.js';
7
- export declare class ActionRecordStore {
8
- private filePath;
9
- constructor(filePath: string);
10
- /** Append a single action record to the JSONL file */
11
- record(rec: ActionRecord): void;
12
- /** Read all records from the JSONL file */
13
- private readAll;
14
- /** Query records by agent slug, optionally filtering by lookback days */
15
- queryByAgentSlug(slug: string, lookbackDays?: number): ActionRecord[];
16
- /** Get all records for a specific run, sorted by timestamp */
17
- getRunSequence(runId: string): ActionRecord[];
18
- }
19
- //# sourceMappingURL=action-record.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"action-record.d.ts","sourceRoot":"","sources":["../../src/procedural/action-record.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAS;gBAEb,QAAQ,EAAE,MAAM;IAQ5B,sDAAsD;IACtD,MAAM,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI;IAI/B,2CAA2C;IAC3C,OAAO,CAAC,OAAO;IAOf,yEAAyE;IACzE,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE;IAarE,8DAA8D;IAC9D,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE;CAK9C"}
@@ -1,51 +0,0 @@
1
- /**
2
- * ActionRecordStore — JSONL-backed append-only store for action records.
3
- *
4
- * Part of Task 45 — Procedural Memory.
5
- */
6
- import { appendFileSync, readFileSync, existsSync, mkdirSync } from 'fs';
7
- import { dirname } from 'path';
8
- export class ActionRecordStore {
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
- /** Append a single action record to the JSONL file */
18
- record(rec) {
19
- appendFileSync(this.filePath, JSON.stringify(rec) + '\n', 'utf-8');
20
- }
21
- /** Read all records from the JSONL file */
22
- readAll() {
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
- /** Query records by agent slug, optionally filtering by lookback days */
31
- queryByAgentSlug(slug, lookbackDays) {
32
- const all = this.readAll();
33
- const cutoff = lookbackDays
34
- ? new Date(Date.now() - lookbackDays * 24 * 60 * 60 * 1000).toISOString()
35
- : undefined;
36
- return all.filter((r) => {
37
- if (r.agentSlug !== slug)
38
- return false;
39
- if (cutoff && r.timestamp < cutoff)
40
- return false;
41
- return true;
42
- });
43
- }
44
- /** Get all records for a specific run, sorted by timestamp */
45
- getRunSequence(runId) {
46
- return this.readAll()
47
- .filter((r) => r.runId === runId)
48
- .sort((a, b) => a.timestamp.localeCompare(b.timestamp));
49
- }
50
- }
51
- //# sourceMappingURL=action-record.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"action-record.js","sourceRoot":"","sources":["../../src/procedural/action-record.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAG/B,MAAM,OAAO,iBAAiB;IACpB,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,sDAAsD;IACtD,MAAM,CAAC,GAAiB;QACtB,cAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;IAED,2CAA2C;IACnC,OAAO;QACb,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,yEAAyE;IACzE,gBAAgB,CAAC,IAAY,EAAE,YAAqB;QAClD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,YAAY;YACzB,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;YACzE,CAAC,CAAC,SAAS,CAAC;QAEd,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YACtB,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;YACvC,IAAI,MAAM,IAAI,CAAC,CAAC,SAAS,GAAG,MAAM;gBAAE,OAAO,KAAK,CAAC;YACjD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;IAED,8DAA8D;IAC9D,cAAc,CAAC,KAAa;QAC1B,OAAO,IAAI,CAAC,OAAO,EAAE;aAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;aAChC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5D,CAAC;CACF"}
@@ -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"}
@@ -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"}