pi-harness-runtime 1.1.95 → 1.1.97

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 (226) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/harness/loop-runtime.ts +3 -0
  3. package/index.ts +130 -29
  4. package/package.json +2 -1
  5. package/packages/a2a-adapter/package.json +1 -1
  6. package/packages/architecture-generator/package.json +1 -1
  7. package/packages/auth/package.json +1 -1
  8. package/packages/autonomous-refactor/package.json +1 -1
  9. package/packages/autonomous-runtime/package.json +1 -1
  10. package/packages/cache-strategy/package.json +1 -1
  11. package/packages/capability-registry/package.json +1 -1
  12. package/packages/checkpoint/package.json +1 -1
  13. package/packages/cli-plugin-sdk/package.json +1 -1
  14. package/packages/clipboard/package.json +1 -1
  15. package/packages/clipboard-plugin/package.json +1 -1
  16. package/packages/code-generation/package.json +1 -1
  17. package/packages/code-review/package.json +1 -1
  18. package/packages/codex-adapter/package.json +1 -1
  19. package/packages/config-capture/package.json +1 -1
  20. package/packages/context-compiler/package.json +1 -1
  21. package/packages/context-discovery/package.json +1 -1
  22. package/packages/context-manager/package.json +1 -1
  23. package/packages/cookie-sanitizer/package.json +1 -1
  24. package/packages/cost-optimizer/package.json +1 -1
  25. package/packages/dependency-analyzer/package.json +1 -1
  26. package/packages/django-plugin/package.json +1 -1
  27. package/packages/doc-generator/package.json +1 -1
  28. package/packages/evaluation-engine/package.json +1 -1
  29. package/packages/evaluation-runner/package.json +1 -1
  30. package/packages/event-bus/package.json +1 -1
  31. package/packages/event-store/package.json +1 -1
  32. package/packages/experience-replay/package.json +1 -1
  33. package/packages/feedback-collector/package.json +1 -1
  34. package/packages/file-copy-helper/package.json +1 -1
  35. package/packages/framework-detector/package.json +1 -1
  36. package/packages/framework-plugin-sdk/package.json +1 -1
  37. package/packages/frappe-plugin/package.json +1 -1
  38. package/packages/generic-web-plugin/package.json +1 -1
  39. package/packages/health-monitor/package.json +1 -1
  40. package/packages/intent-analyzer/package.json +1 -1
  41. package/packages/jev-judge/package.json +1 -1
  42. package/packages/knowledge-graph/package.json +1 -1
  43. package/packages/knowledge-retrieval/package.json +1 -1
  44. package/packages/laravel-plugin/package.json +1 -1
  45. package/packages/learning-engine/package.json +1 -1
  46. package/packages/mcp-adapter/package.json +1 -1
  47. package/packages/memory-engine/package.json +1 -1
  48. package/packages/milestone-manager/package.json +1 -1
  49. package/packages/model-registry/package.json +1 -1
  50. package/packages/nextjs-plugin/package.json +1 -1
  51. package/packages/notification/package.json +1 -1
  52. package/packages/observability/package.json +1 -1
  53. package/packages/okf-indexer/package.json +1 -1
  54. package/packages/performance-optimizer/package.json +1 -1
  55. package/packages/privilege-broker/package.json +1 -1
  56. package/packages/project-analyzer/package.json +1 -1
  57. package/packages/project-bootstrap/package.json +1 -1
  58. package/packages/projection-engine/package.json +1 -1
  59. package/packages/prompt-compiler/package.json +1 -1
  60. package/packages/prompt-versioning/package.json +1 -1
  61. package/packages/provider-adapter-sdk/package.json +1 -1
  62. package/packages/provider-router/package.json +1 -1
  63. package/packages/provider-selector/package.json +1 -1
  64. package/packages/providers/package.json +1 -1
  65. package/packages/qdrant-skills/dist/client.d.ts +51 -0
  66. package/packages/qdrant-skills/dist/client.d.ts.map +1 -0
  67. package/packages/qdrant-skills/dist/client.js +105 -0
  68. package/packages/qdrant-skills/dist/client.js.map +1 -0
  69. package/packages/qdrant-skills/dist/embedder.d.ts +39 -0
  70. package/packages/qdrant-skills/dist/embedder.d.ts.map +1 -0
  71. package/packages/qdrant-skills/dist/embedder.js +101 -0
  72. package/packages/qdrant-skills/dist/embedder.js.map +1 -0
  73. package/packages/qdrant-skills/dist/index.d.ts +25 -0
  74. package/packages/qdrant-skills/dist/index.d.ts.map +1 -0
  75. package/packages/qdrant-skills/dist/index.js +25 -0
  76. package/packages/qdrant-skills/dist/index.js.map +1 -0
  77. package/packages/qdrant-skills/package.json +27 -0
  78. package/packages/qdrant-skills/src/client.ts +178 -0
  79. package/packages/qdrant-skills/src/embedder.ts +137 -0
  80. package/packages/qdrant-skills/src/index.ts +42 -0
  81. package/packages/quota-manager/package.json +1 -1
  82. package/packages/rate-limiter/package.json +1 -1
  83. package/packages/react-vite-plugin/package.json +1 -1
  84. package/packages/release-manager/package.json +1 -1
  85. package/packages/requirement-compiler/package.json +1 -1
  86. package/packages/runtime/package.json +1 -1
  87. package/packages/scheduler/package.json +1 -1
  88. package/packages/scheduler-adapter/package.json +1 -1
  89. package/packages/session/package.json +1 -1
  90. package/packages/session-api/package.json +1 -1
  91. package/packages/session-export/package.json +1 -1
  92. package/packages/shared-context/package.json +1 -1
  93. package/packages/skill-mcp-client/package.json +1 -1
  94. package/packages/skill-registry/package.json +1 -1
  95. package/packages/skills/dist/index.d.ts +40 -0
  96. package/packages/skills/dist/index.d.ts.map +1 -0
  97. package/packages/skills/dist/index.js +84 -0
  98. package/packages/skills/dist/index.js.map +1 -0
  99. package/packages/skills/dist/linter.d.ts +38 -0
  100. package/packages/skills/dist/linter.d.ts.map +1 -0
  101. package/packages/skills/dist/linter.js +323 -0
  102. package/packages/skills/dist/linter.js.map +1 -0
  103. package/packages/skills/dist/loader.d.ts +74 -0
  104. package/packages/skills/dist/loader.d.ts.map +1 -0
  105. package/packages/skills/dist/loader.js +280 -0
  106. package/packages/skills/dist/loader.js.map +1 -0
  107. package/packages/skills/dist/parser.d.ts +32 -0
  108. package/packages/skills/dist/parser.d.ts.map +1 -0
  109. package/packages/skills/dist/parser.js +459 -0
  110. package/packages/skills/dist/parser.js.map +1 -0
  111. package/packages/skills/dist/scanner.d.ts +33 -0
  112. package/packages/skills/dist/scanner.d.ts.map +1 -0
  113. package/packages/skills/dist/scanner.js +257 -0
  114. package/packages/skills/dist/scanner.js.map +1 -0
  115. package/packages/skills/dist/skill-commands.d.ts +33 -0
  116. package/packages/skills/dist/skill-commands.d.ts.map +1 -0
  117. package/packages/skills/dist/skill-commands.js +239 -0
  118. package/packages/skills/dist/skill-commands.js.map +1 -0
  119. package/packages/skills/dist/skill-tool.d.ts +120 -0
  120. package/packages/skills/dist/skill-tool.d.ts.map +1 -0
  121. package/packages/skills/dist/skill-tool.js +239 -0
  122. package/packages/skills/dist/skill-tool.js.map +1 -0
  123. package/packages/skills/dist/skill-versioning.d.ts +123 -0
  124. package/packages/skills/dist/skill-versioning.d.ts.map +1 -0
  125. package/packages/skills/dist/skill-versioning.js +240 -0
  126. package/packages/skills/dist/skill-versioning.js.map +1 -0
  127. package/packages/skills/dist/types.d.ts +226 -0
  128. package/packages/skills/dist/types.d.ts.map +1 -0
  129. package/packages/skills/dist/types.js +21 -0
  130. package/packages/skills/dist/types.js.map +1 -0
  131. package/packages/skills/package.json +46 -0
  132. package/packages/skills/src/index.ts +95 -0
  133. package/packages/skills/src/linter.ts +371 -0
  134. package/packages/skills/src/loader.ts +335 -0
  135. package/packages/skills/src/parser.ts +548 -0
  136. package/packages/skills/src/scanner.ts +322 -0
  137. package/packages/skills/src/skill-commands.ts +318 -0
  138. package/packages/skills/src/skill-tool.ts +324 -0
  139. package/packages/skills/src/skill-versioning.ts +345 -0
  140. package/packages/skills/src/types.ts +259 -0
  141. package/packages/skills/test/init-skills.test.ts +118 -0
  142. package/packages/sprint-planner/package.json +1 -1
  143. package/packages/subscription-engine/package.json +1 -1
  144. package/packages/task-compiler/package.json +1 -1
  145. package/packages/tencentdb-memory/package.json +1 -1
  146. package/packages/tencentdb-sync/package.json +1 -1
  147. package/packages/test-data-generator/package.json +1 -1
  148. package/packages/test-generator/package.json +1 -1
  149. package/packages/todo-bd-sync/package.json +1 -1
  150. package/packages/token-estimation/package.json +1 -1
  151. package/packages/token-optimizer/package.json +1 -1
  152. package/packages/trajectory/dist/src/curator.d.ts +189 -0
  153. package/packages/trajectory/dist/src/curator.d.ts.map +1 -0
  154. package/packages/trajectory/dist/src/curator.js +340 -0
  155. package/packages/trajectory/dist/src/curator.js.map +1 -0
  156. package/packages/trajectory/dist/src/journey-renderer.d.ts +53 -0
  157. package/packages/trajectory/dist/src/journey-renderer.d.ts.map +1 -0
  158. package/packages/trajectory/dist/src/journey-renderer.js +324 -0
  159. package/packages/trajectory/dist/src/journey-renderer.js.map +1 -0
  160. package/packages/trajectory/dist/src/learning-graph.d.ts +159 -0
  161. package/packages/trajectory/dist/src/learning-graph.d.ts.map +1 -0
  162. package/packages/trajectory/dist/src/learning-graph.js +258 -0
  163. package/packages/trajectory/dist/src/learning-graph.js.map +1 -0
  164. package/packages/trajectory/dist/src/memory-store.d.ts +146 -0
  165. package/packages/trajectory/dist/src/memory-store.d.ts.map +1 -0
  166. package/packages/trajectory/dist/src/memory-store.js +472 -0
  167. package/packages/trajectory/dist/src/memory-store.js.map +1 -0
  168. package/packages/trajectory/dist/src/review-fork.d.ts +164 -0
  169. package/packages/trajectory/dist/src/review-fork.d.ts.map +1 -0
  170. package/packages/trajectory/dist/src/review-fork.js +332 -0
  171. package/packages/trajectory/dist/src/review-fork.js.map +1 -0
  172. package/packages/trajectory/dist/src/write-approval.d.ts +136 -0
  173. package/packages/trajectory/dist/src/write-approval.d.ts.map +1 -0
  174. package/packages/trajectory/dist/src/write-approval.js +281 -0
  175. package/packages/trajectory/dist/src/write-approval.js.map +1 -0
  176. package/packages/trajectory/package.json +1 -1
  177. package/packages/trajectory/src/curator.ts +485 -0
  178. package/packages/trajectory/src/journey-renderer.ts +399 -0
  179. package/packages/trajectory/src/learning-graph.ts +363 -0
  180. package/packages/trajectory/src/memory-store.ts +578 -0
  181. package/packages/trajectory/src/review-fork.ts +450 -0
  182. package/packages/trajectory/src/write-approval.ts +372 -0
  183. package/packages/tui/package.json +1 -1
  184. package/packages/types/package.json +1 -1
  185. package/packages/workflow-events/package.json +1 -1
  186. package/packages/workspace-scanner/package.json +1 -1
  187. package/packages/worktree/package.json +1 -1
  188. package/packages/write-review/dist/blackboard.d.ts +98 -0
  189. package/packages/write-review/dist/blackboard.d.ts.map +1 -0
  190. package/packages/write-review/dist/blackboard.js +289 -0
  191. package/packages/write-review/dist/blackboard.js.map +1 -0
  192. package/packages/write-review/dist/event-bus.d.ts +106 -0
  193. package/packages/write-review/dist/event-bus.d.ts.map +1 -0
  194. package/packages/write-review/dist/event-bus.js +294 -0
  195. package/packages/write-review/dist/event-bus.js.map +1 -0
  196. package/packages/write-review/dist/gate.d.ts +37 -0
  197. package/packages/write-review/dist/gate.d.ts.map +1 -0
  198. package/packages/write-review/dist/gate.js +138 -0
  199. package/packages/write-review/dist/gate.js.map +1 -0
  200. package/packages/write-review/dist/index.d.ts +22 -0
  201. package/packages/write-review/dist/index.d.ts.map +1 -0
  202. package/packages/write-review/dist/index.js +60 -0
  203. package/packages/write-review/dist/index.js.map +1 -0
  204. package/packages/write-review/dist/injection.d.ts +40 -0
  205. package/packages/write-review/dist/injection.d.ts.map +1 -0
  206. package/packages/write-review/dist/injection.js +179 -0
  207. package/packages/write-review/dist/injection.js.map +1 -0
  208. package/packages/write-review/dist/review.d.ts +54 -0
  209. package/packages/write-review/dist/review.d.ts.map +1 -0
  210. package/packages/write-review/dist/review.js +154 -0
  211. package/packages/write-review/dist/review.js.map +1 -0
  212. package/packages/write-review/dist/trigger.d.ts +39 -0
  213. package/packages/write-review/dist/trigger.d.ts.map +1 -0
  214. package/packages/write-review/dist/trigger.js +107 -0
  215. package/packages/write-review/dist/trigger.js.map +1 -0
  216. package/packages/write-review/dist/types.d.ts +78 -0
  217. package/packages/write-review/dist/types.d.ts.map +1 -0
  218. package/packages/write-review/dist/types.js +26 -0
  219. package/packages/write-review/dist/types.js.map +1 -0
  220. package/packages/write-review/package.json +1 -1
  221. package/packages/write-review/src/event-bus.ts +351 -0
  222. package/packages/write-review/src/index.ts +1 -0
  223. package/packages/write-review/src/injection.ts +25 -3
  224. package/proactive-compact.ts +51 -7
  225. package/scripts/sync-skills.ts +275 -0
  226. package/scripts/sync-to-qdrant.ts +398 -0
@@ -0,0 +1,472 @@
1
+ /**
2
+ * Memory Store - Persistent memory for agent notes and user preferences
3
+ *
4
+ * Based on Hermes Agent's memory system:
5
+ * - MEMORY.md: Agent's personal notes (environment facts, conventions, tool quirks)
6
+ * - USER.md: User preferences and patterns (Honcho dialectic modeling)
7
+ *
8
+ * Memory is injected into system prompt at session start.
9
+ */
10
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
11
+ import { join, dirname } from "node:path";
12
+ import { homedir } from "node:os";
13
+ /**
14
+ * Default memory store configuration
15
+ */
16
+ export const DEFAULT_MEMORY_CONFIG = {
17
+ memoryFile: "~/.pi-harness/memory/MEMORY.md",
18
+ userFile: "~/.pi-harness/memory/USER.md",
19
+ maxMemoryTokens: 1300,
20
+ };
21
+ /**
22
+ * Expand ~ in paths
23
+ */
24
+ function expandPath(path) {
25
+ if (path.startsWith("~/")) {
26
+ return join(homedir(), path.slice(2));
27
+ }
28
+ return path;
29
+ }
30
+ /**
31
+ * Generate fingerprint for content deduplication
32
+ */
33
+ function generateFingerprint(content) {
34
+ // Simple hash for fingerprinting
35
+ let hash = 0;
36
+ for (let i = 0; i < content.length; i++) {
37
+ const char = content.charCodeAt(i);
38
+ hash = ((hash << 5) - hash) + char;
39
+ hash = hash & hash; // Convert to 32bit integer
40
+ }
41
+ return Math.abs(hash).toString(16);
42
+ }
43
+ /**
44
+ * Memory Store class
45
+ */
46
+ export class MemoryStore {
47
+ config;
48
+ memoryFile;
49
+ userFile;
50
+ memoryCache = [];
51
+ userCache = [];
52
+ dirty = false;
53
+ constructor(config) {
54
+ this.config = { ...DEFAULT_MEMORY_CONFIG, ...config };
55
+ this.memoryFile = expandPath(this.config.memoryFile);
56
+ this.userFile = expandPath(this.config.userFile);
57
+ this.load();
58
+ }
59
+ /**
60
+ * Load memory from files
61
+ */
62
+ load() {
63
+ this.memoryCache = this.loadMemoryFile(this.memoryFile);
64
+ this.userCache = this.loadUserFile(this.userFile);
65
+ }
66
+ /**
67
+ * Load memory entries from file
68
+ */
69
+ loadMemoryFile(filePath) {
70
+ if (!existsSync(filePath)) {
71
+ return [];
72
+ }
73
+ try {
74
+ const content = readFileSync(filePath, "utf-8");
75
+ return this.parseMemoryMarkdown(content);
76
+ }
77
+ catch (err) {
78
+ console.error(`[MemoryStore] Failed to load ${filePath}:`, err);
79
+ return [];
80
+ }
81
+ }
82
+ /**
83
+ * Load user profile from file
84
+ */
85
+ loadUserFile(filePath) {
86
+ if (!existsSync(filePath)) {
87
+ return [];
88
+ }
89
+ try {
90
+ const content = readFileSync(filePath, "utf-8");
91
+ return this.parseUserMarkdown(content);
92
+ }
93
+ catch (err) {
94
+ console.error(`[MemoryStore] Failed to load ${filePath}:`, err);
95
+ return [];
96
+ }
97
+ }
98
+ /**
99
+ * Parse memory markdown format
100
+ */
101
+ parseMemoryMarkdown(content) {
102
+ const entries = [];
103
+ const lines = content.split("\n");
104
+ let currentEntry = null;
105
+ let currentContent = [];
106
+ for (const line of lines) {
107
+ // Check for entry separator
108
+ if (line.startsWith("---")) {
109
+ if (currentEntry && currentContent.length > 0) {
110
+ entries.push({
111
+ id: currentEntry.id,
112
+ content: currentContent.join("\n").trim(),
113
+ source: currentEntry.source || "agent",
114
+ created_at: currentEntry.created_at,
115
+ updated_at: currentEntry.updated_at,
116
+ tags: currentEntry.tags,
117
+ fingerprint: generateFingerprint(currentContent.join("\n")),
118
+ });
119
+ }
120
+ currentEntry = {};
121
+ currentContent = [];
122
+ continue;
123
+ }
124
+ // Parse metadata
125
+ if (line.includes(":") && currentEntry) {
126
+ const [key, ...valueParts] = line.split(":");
127
+ const value = valueParts.join(":").trim();
128
+ switch (key.trim()) {
129
+ case "id":
130
+ currentEntry.id = value;
131
+ break;
132
+ case "source":
133
+ currentEntry.source = value;
134
+ break;
135
+ case "created":
136
+ case "created_at":
137
+ currentEntry.created_at = value;
138
+ break;
139
+ case "updated":
140
+ case "updated_at":
141
+ currentEntry.updated_at = value;
142
+ break;
143
+ case "tags":
144
+ currentEntry.tags = value.split(",").map((t) => t.trim());
145
+ break;
146
+ }
147
+ }
148
+ else if (currentEntry?.id) {
149
+ currentContent.push(line);
150
+ }
151
+ }
152
+ // Push last entry
153
+ if (currentEntry && currentContent.length > 0) {
154
+ entries.push({
155
+ id: currentEntry.id,
156
+ content: currentContent.join("\n").trim(),
157
+ source: currentEntry.source || "agent",
158
+ created_at: currentEntry.created_at,
159
+ updated_at: currentEntry.updated_at,
160
+ tags: currentEntry.tags,
161
+ fingerprint: generateFingerprint(currentContent.join("\n")),
162
+ });
163
+ }
164
+ return entries;
165
+ }
166
+ /**
167
+ * Parse user profile markdown format
168
+ */
169
+ parseUserMarkdown(content) {
170
+ const entries = [];
171
+ const lines = content.split("\n");
172
+ let currentEntry = null;
173
+ let currentContent = [];
174
+ let currentCategory = "preference";
175
+ for (const line of lines) {
176
+ // Check for category header
177
+ if (line.startsWith("## ")) {
178
+ currentCategory = line.slice(3).trim().toLowerCase();
179
+ continue;
180
+ }
181
+ // Check for entry separator
182
+ if (line.startsWith("---")) {
183
+ if (currentEntry && currentContent.length > 0) {
184
+ entries.push({
185
+ id: currentEntry.id,
186
+ content: currentContent.join("\n").trim(),
187
+ category: currentEntry.category || currentCategory,
188
+ created_at: currentEntry.created_at,
189
+ updated_at: currentEntry.updated_at,
190
+ confidence: currentEntry.confidence ?? 0.8,
191
+ });
192
+ }
193
+ currentEntry = {};
194
+ currentContent = [];
195
+ continue;
196
+ }
197
+ // Parse metadata
198
+ if (line.includes(":") && currentEntry) {
199
+ const [key, ...valueParts] = line.split(":");
200
+ const value = valueParts.join(":").trim();
201
+ switch (key.trim()) {
202
+ case "id":
203
+ currentEntry.id = value;
204
+ break;
205
+ case "confidence":
206
+ currentEntry.confidence = parseFloat(value);
207
+ break;
208
+ }
209
+ }
210
+ else if (currentEntry?.id) {
211
+ currentContent.push(line);
212
+ }
213
+ }
214
+ // Push last entry
215
+ if (currentEntry && currentContent.length > 0) {
216
+ entries.push({
217
+ id: currentEntry.id,
218
+ content: currentContent.join("\n").trim(),
219
+ category: currentEntry.category || currentCategory,
220
+ created_at: currentEntry.created_at,
221
+ updated_at: currentEntry.updated_at,
222
+ confidence: currentEntry.confidence ?? 0.8,
223
+ });
224
+ }
225
+ return entries;
226
+ }
227
+ /**
228
+ * Save memory to file
229
+ */
230
+ save() {
231
+ if (!this.dirty)
232
+ return;
233
+ // Ensure directory exists
234
+ const memoryDir = dirname(this.memoryFile);
235
+ mkdirSync(memoryDir, { recursive: true });
236
+ // Write memory file
237
+ writeFileSync(this.memoryFile, this.serializeMemory(), "utf-8");
238
+ // Write user file
239
+ writeFileSync(this.userFile, this.serializeUser(), "utf-8");
240
+ this.dirty = false;
241
+ }
242
+ /**
243
+ * Serialize memory entries to markdown
244
+ */
245
+ serializeMemory() {
246
+ if (this.memoryCache.length === 0) {
247
+ return "# Memory\n\nNo entries yet.\n";
248
+ }
249
+ const lines = ["# Memory", "", "---"];
250
+ for (const entry of this.memoryCache) {
251
+ lines.push(`id: ${entry.id}`);
252
+ lines.push(`source: ${entry.source}`);
253
+ lines.push(`created_at: ${entry.created_at}`);
254
+ lines.push(`updated_at: ${entry.updated_at}`);
255
+ if (entry.tags?.length) {
256
+ lines.push(`tags: ${entry.tags.join(", ")}`);
257
+ }
258
+ lines.push("---");
259
+ lines.push(entry.content);
260
+ lines.push("");
261
+ lines.push("---");
262
+ lines.push("");
263
+ }
264
+ return lines.join("\n");
265
+ }
266
+ /**
267
+ * Serialize user entries to markdown
268
+ */
269
+ serializeUser() {
270
+ const categories = ["preference", "style", "workflow", "context"];
271
+ const lines = ["# User Preferences", ""];
272
+ for (const category of categories) {
273
+ const entries = this.userCache.filter((e) => e.category === category);
274
+ if (entries.length === 0)
275
+ continue;
276
+ lines.push(`## ${category.charAt(0).toUpperCase() + category.slice(1)}`, "");
277
+ for (const entry of entries) {
278
+ lines.push(`id: ${entry.id}`);
279
+ lines.push(`confidence: ${entry.confidence}`);
280
+ lines.push("---");
281
+ lines.push(entry.content);
282
+ lines.push("");
283
+ }
284
+ }
285
+ return lines.join("\n");
286
+ }
287
+ /**
288
+ * Add memory entry
289
+ */
290
+ addMemory(content, source = "agent", tags) {
291
+ const now = new Date().toISOString();
292
+ const entry = {
293
+ id: `mem_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,
294
+ content,
295
+ source,
296
+ created_at: now,
297
+ updated_at: now,
298
+ tags,
299
+ fingerprint: generateFingerprint(content),
300
+ };
301
+ // Check for duplicate
302
+ const existing = this.memoryCache.findIndex((e) => e.fingerprint === entry.fingerprint);
303
+ if (existing >= 0) {
304
+ // Update existing entry
305
+ this.memoryCache[existing].updated_at = now;
306
+ this.memoryCache[existing].content = content;
307
+ this.dirty = true;
308
+ this.save();
309
+ return this.memoryCache[existing];
310
+ }
311
+ this.memoryCache.push(entry);
312
+ this.dirty = true;
313
+ this.save();
314
+ return entry;
315
+ }
316
+ /**
317
+ * Replace memory entry
318
+ */
319
+ replaceMemory(oldText, newContent) {
320
+ const index = this.memoryCache.findIndex((e) => e.content.includes(oldText));
321
+ if (index < 0) {
322
+ return false;
323
+ }
324
+ this.memoryCache[index].content = newContent;
325
+ this.memoryCache[index].updated_at = new Date().toISOString();
326
+ this.memoryCache[index].fingerprint = generateFingerprint(newContent);
327
+ this.dirty = true;
328
+ this.save();
329
+ return true;
330
+ }
331
+ /**
332
+ * Remove memory entry
333
+ */
334
+ removeMemory(oldText) {
335
+ const index = this.memoryCache.findIndex((e) => e.content.includes(oldText));
336
+ if (index < 0) {
337
+ return false;
338
+ }
339
+ this.memoryCache.splice(index, 1);
340
+ this.dirty = true;
341
+ this.save();
342
+ return true;
343
+ }
344
+ /**
345
+ * Add user profile entry
346
+ */
347
+ addUserProfile(content, category = "preference", confidence = 0.8) {
348
+ const now = new Date().toISOString();
349
+ const entry = {
350
+ id: `user_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`,
351
+ content,
352
+ category,
353
+ created_at: now,
354
+ updated_at: now,
355
+ confidence,
356
+ };
357
+ this.userCache.push(entry);
358
+ this.dirty = true;
359
+ this.save();
360
+ return entry;
361
+ }
362
+ /**
363
+ * Get all memory entries
364
+ */
365
+ getMemory() {
366
+ return [...this.memoryCache];
367
+ }
368
+ /**
369
+ * Get all user profile entries
370
+ */
371
+ getUserProfile() {
372
+ return [...this.userCache];
373
+ }
374
+ /**
375
+ * Get memory as system prompt section
376
+ */
377
+ getMemorySection() {
378
+ if (this.memoryCache.length === 0) {
379
+ return "";
380
+ }
381
+ const lines = ["## Agent Memory", ""];
382
+ for (const entry of this.memoryCache) {
383
+ lines.push(`- ${entry.content}`);
384
+ if (entry.tags?.length) {
385
+ lines.push(` Tags: ${entry.tags.join(", ")}`);
386
+ }
387
+ }
388
+ lines.push("");
389
+ return lines.join("\n");
390
+ }
391
+ /**
392
+ * Get user preferences as system prompt section
393
+ */
394
+ getUserSection() {
395
+ if (this.userCache.length === 0) {
396
+ return "";
397
+ }
398
+ const lines = ["## User Preferences", ""];
399
+ for (const entry of this.userCache) {
400
+ if (entry.confidence < 0.5)
401
+ continue; // Skip low confidence
402
+ lines.push(`- [${entry.category}] ${entry.content}`);
403
+ }
404
+ lines.push("");
405
+ return lines.join("\n");
406
+ }
407
+ /**
408
+ * Search memory entries
409
+ */
410
+ searchMemory(query) {
411
+ const queryLower = query.toLowerCase();
412
+ return this.memoryCache.filter((e) => e.content.toLowerCase().includes(queryLower) ||
413
+ e.tags?.some((t) => t.toLowerCase().includes(queryLower)));
414
+ }
415
+ /**
416
+ * List pending entries (for write approval)
417
+ */
418
+ listPending() {
419
+ return {
420
+ memory: this.memoryCache.filter((e) => e.source === "agent"),
421
+ user: this.userCache,
422
+ };
423
+ }
424
+ /**
425
+ * Get approximate token count
426
+ */
427
+ getApproxTokenCount() {
428
+ const memory = this.serializeMemory();
429
+ const user = this.serializeUser();
430
+ // Rough estimate: 1 token ≈ 4 chars
431
+ return Math.ceil((memory.length + user.length) / 4);
432
+ }
433
+ /**
434
+ * Check if memory exceeds max tokens
435
+ */
436
+ isOverTokenLimit() {
437
+ return this.getApproxTokenCount() > this.config.maxMemoryTokens;
438
+ }
439
+ /**
440
+ * Compact memory (keep most recent/important entries)
441
+ */
442
+ compact() {
443
+ // Sort by updated_at descending, keep top entries
444
+ this.memoryCache.sort((a, b) => b.updated_at.localeCompare(a.updated_at));
445
+ // Keep entries until under token limit
446
+ const targetTokens = this.config.maxMemoryTokens * 0.8; // 80% of limit
447
+ const keptEntries = [];
448
+ let tokenCount = 0;
449
+ for (const entry of this.memoryCache) {
450
+ const entryTokens = Math.ceil(entry.content.length / 4);
451
+ if (tokenCount + entryTokens <= targetTokens) {
452
+ keptEntries.push(entry);
453
+ tokenCount += entryTokens;
454
+ }
455
+ }
456
+ this.memoryCache = keptEntries;
457
+ this.dirty = true;
458
+ this.save();
459
+ }
460
+ }
461
+ // Global memory store instance
462
+ let globalMemoryStore = null;
463
+ export function getGlobalMemoryStore() {
464
+ if (!globalMemoryStore) {
465
+ globalMemoryStore = new MemoryStore();
466
+ }
467
+ return globalMemoryStore;
468
+ }
469
+ export function createMemoryStore(config) {
470
+ return new MemoryStore(config);
471
+ }
472
+ //# sourceMappingURL=memory-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../../src/memory-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAoClC;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAsB;IACtD,UAAU,EAAE,gCAAgC;IAC5C,QAAQ,EAAE,8BAA8B;IACxC,eAAe,EAAE,IAAI;CACtB,CAAC;AAEF;;GAEG;AACH,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,OAAe;IAC1C,iCAAiC;IACjC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QACnC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,2BAA2B;IACjD,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,WAAW;IACd,MAAM,CAAoB;IAC1B,UAAU,CAAS;IACnB,QAAQ,CAAS;IACjB,WAAW,GAAkB,EAAE,CAAC;IAChC,SAAS,GAAuB,EAAE,CAAC;IACnC,KAAK,GAAG,KAAK,CAAC;IAEtB,YAAY,MAAmC;QAC7C,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,qBAAqB,EAAE,GAAG,MAAM,EAAE,CAAC;QACtD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,QAAgB;QACrC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,gCAAgC,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC;YAChE,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,QAAgB;QACnC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAChD,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,gCAAgC,QAAQ,GAAG,EAAE,GAAG,CAAC,CAAC;YAChE,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,mBAAmB,CAAC,OAAe;QACzC,MAAM,OAAO,GAAkB,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,YAAY,GAAgC,IAAI,CAAC;QACrD,IAAI,cAAc,GAAa,EAAE,CAAC;QAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,4BAA4B;YAC5B,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3B,IAAI,YAAY,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9C,OAAO,CAAC,IAAI,CAAC;wBACX,EAAE,EAAE,YAAY,CAAC,EAAG;wBACpB,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;wBACzC,MAAM,EAAE,YAAY,CAAC,MAAM,IAAI,OAAO;wBACtC,UAAU,EAAE,YAAY,CAAC,UAAW;wBACpC,UAAU,EAAE,YAAY,CAAC,UAAW;wBACpC,IAAI,EAAE,YAAY,CAAC,IAAI;wBACvB,WAAW,EAAE,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBAC5D,CAAC,CAAC;gBACL,CAAC;gBACD,YAAY,GAAG,EAAE,CAAC;gBAClB,cAAc,GAAG,EAAE,CAAC;gBACpB,SAAS;YACX,CAAC;YAED,iBAAiB;YACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,YAAY,EAAE,CAAC;gBACvC,MAAM,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC7C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;gBAE1C,QAAQ,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;oBACnB,KAAK,IAAI;wBACP,YAAa,CAAC,EAAE,GAAG,KAAK,CAAC;wBACzB,MAAM;oBACR,KAAK,QAAQ;wBACX,YAAa,CAAC,MAAM,GAAG,KAA8B,CAAC;wBACtD,MAAM;oBACR,KAAK,SAAS,CAAC;oBACf,KAAK,YAAY;wBACf,YAAa,CAAC,UAAU,GAAG,KAAK,CAAC;wBACjC,MAAM;oBACR,KAAK,SAAS,CAAC;oBACf,KAAK,YAAY;wBACf,YAAa,CAAC,UAAU,GAAG,KAAK,CAAC;wBACjC,MAAM;oBACR,KAAK,MAAM;wBACT,YAAa,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;wBAC3D,MAAM;gBACV,CAAC;YACH,CAAC;iBAAM,IAAI,YAAY,EAAE,EAAE,EAAE,CAAC;gBAC5B,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,IAAI,YAAY,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,YAAY,CAAC,EAAG;gBACpB,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;gBACzC,MAAM,EAAE,YAAY,CAAC,MAAM,IAAI,OAAO;gBACtC,UAAU,EAAE,YAAY,CAAC,UAAW;gBACpC,UAAU,EAAE,YAAY,CAAC,UAAW;gBACpC,IAAI,EAAE,YAAY,CAAC,IAAI;gBACvB,WAAW,EAAE,mBAAmB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC5D,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,OAAe;QACvC,MAAM,OAAO,GAAuB,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,YAAY,GAAqC,IAAI,CAAC;QAC1D,IAAI,cAAc,GAAa,EAAE,CAAC;QAClC,IAAI,eAAe,GAAG,YAAY,CAAC;QAEnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,4BAA4B;YAC5B,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3B,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACrD,SAAS;YACX,CAAC;YAED,4BAA4B;YAC5B,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3B,IAAI,YAAY,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC9C,OAAO,CAAC,IAAI,CAAC;wBACX,EAAE,EAAE,YAAY,CAAC,EAAG;wBACpB,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;wBACzC,QAAQ,EAAE,YAAY,CAAC,QAAQ,IAAK,eAAgD;wBACpF,UAAU,EAAE,YAAY,CAAC,UAAW;wBACpC,UAAU,EAAE,YAAY,CAAC,UAAW;wBACpC,UAAU,EAAE,YAAY,CAAC,UAAU,IAAI,GAAG;qBAC3C,CAAC,CAAC;gBACL,CAAC;gBACD,YAAY,GAAG,EAAE,CAAC;gBAClB,cAAc,GAAG,EAAE,CAAC;gBACpB,SAAS;YACX,CAAC;YAED,iBAAiB;YACjB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,YAAY,EAAE,CAAC;gBACvC,MAAM,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC7C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;gBAE1C,QAAQ,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;oBACnB,KAAK,IAAI;wBACP,YAAa,CAAC,EAAE,GAAG,KAAK,CAAC;wBACzB,MAAM;oBACR,KAAK,YAAY;wBACf,YAAa,CAAC,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;wBAC7C,MAAM;gBACV,CAAC;YACH,CAAC;iBAAM,IAAI,YAAY,EAAE,EAAE,EAAE,CAAC;gBAC5B,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,IAAI,YAAY,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,YAAY,CAAC,EAAG;gBACpB,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;gBACzC,QAAQ,EAAE,YAAY,CAAC,QAAQ,IAAK,eAAgD;gBACpF,UAAU,EAAE,YAAY,CAAC,UAAW;gBACpC,UAAU,EAAE,YAAY,CAAC,UAAW;gBACpC,UAAU,EAAE,YAAY,CAAC,UAAU,IAAI,GAAG;aAC3C,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QAExB,0BAA0B;QAC1B,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1C,oBAAoB;QACpB,aAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE,EAAE,OAAO,CAAC,CAAC;QAEhE,kBAAkB;QAClB,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,CAAC,CAAC;QAE5D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED;;OAEG;IACK,eAAe;QACrB,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO,+BAA+B,CAAC;QACzC,CAAC;QAED,MAAM,KAAK,GAAa,CAAC,UAAU,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAChD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;YAC9C,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;YAC9C,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/C,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACK,aAAa;QACnB,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;QAClE,MAAM,KAAK,GAAa,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC;QAEnD,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE,CAAC;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;YACtE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAEnC,KAAK,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAE7E,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC9B,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC9C,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,OAAe,EAAE,MAAM,GAA0B,OAAO,EAAE,IAAe;QACjF,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,KAAK,GAAgB;YACzB,EAAE,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YACjE,OAAO;YACP,MAAM;YACN,UAAU,EAAE,GAAG;YACf,UAAU,EAAE,GAAG;YACf,IAAI;YACJ,WAAW,EAAE,mBAAmB,CAAC,OAAO,CAAC;SAC1C,CAAC;QAEF,sBAAsB;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,KAAK,CAAC,WAAW,CAAC,CAAC;QACxF,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;YAClB,wBAAwB;YACxB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,UAAU,GAAG,GAAG,CAAC;YAC5C,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC;YAC7C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,OAAe,EAAE,UAAkB;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAC7C,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC5B,CAAC;QAEF,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,UAAU,CAAC;QAC7C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC9D,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;QACtE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,OAAe;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAC7C,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC5B,CAAC;QAEF,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,cAAc,CACZ,OAAe,EACf,QAAQ,GAAiC,YAAY,EACrD,UAAU,GAAW,GAAG;QAExB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,KAAK,GAAqB;YAC9B,EAAE,EAAE,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YAClE,OAAO;YACP,QAAQ;YACR,UAAU,EAAE,GAAG;YACf,UAAU,EAAE,GAAG;YACf,UAAU;SACX,CAAC;QAEF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QACtC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACjC,IAAI,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,WAAW,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAC1C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnC,IAAI,KAAK,CAAC,UAAU,GAAG,GAAG;gBAAE,SAAS,CAAC,sBAAsB;YAC5D,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,KAAa;QACxB,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAC5B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC5C,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAC5D,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,OAAO,CAAC;YAC5D,IAAI,EAAE,IAAI,CAAC,SAAS;SACrB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QAClC,oCAAoC;QACpC,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,mBAAmB,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;IAClE,CAAC;IAED;;OAEG;IACH,OAAO;QACL,kDAAkD;QAClD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC7B,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CACzC,CAAC;QAEF,uCAAuC;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC,eAAe;QACvE,MAAM,WAAW,GAAkB,EAAE,CAAC;QACtC,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACxD,IAAI,UAAU,GAAG,WAAW,IAAI,YAAY,EAAE,CAAC;gBAC7C,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACxB,UAAU,IAAI,WAAW,CAAC;YAC5B,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;CACF;AAED,+BAA+B;AAC/B,IAAI,iBAAiB,GAAuB,IAAI,CAAC;AAEjD,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,iBAAiB,GAAG,IAAI,WAAW,EAAE,CAAC;IACxC,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAmC;IACnE,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Background Review Fork
3
+ *
4
+ * Background review that analyzes trajectories and suggests:
5
+ * - Memory entries to persist
6
+ * - Skills to create/update
7
+ * - User preferences to learn
8
+ *
9
+ * Based on Hermes Agent's closed learning loop.
10
+ */
11
+ import type { Trajectory } from "./types.js";
12
+ /**
13
+ * Background review configuration
14
+ */
15
+ export interface BackgroundReviewConfig {
16
+ /** Enable background review */
17
+ enabled: boolean;
18
+ /** Cycles between reviews (1 = every cycle) */
19
+ nudgeInterval: number;
20
+ /** Reasoning effort for review */
21
+ reasoningEffort: "low" | "medium" | "high";
22
+ /** Route to cheaper model for review */
23
+ routeToCheaperModel: boolean;
24
+ /** Cheaper model to use */
25
+ cheaperModel?: string;
26
+ /** Require approval before writes */
27
+ writeApproval: boolean;
28
+ /** Defer review when GPU busy */
29
+ deferWhenGpuBusy: boolean;
30
+ /** Max age in seconds before running queued review */
31
+ deferMaxAgeSeconds: number;
32
+ }
33
+ /**
34
+ * Default background review configuration
35
+ */
36
+ export declare const DEFAULT_REVIEW_CONFIG: BackgroundReviewConfig;
37
+ /**
38
+ * Review suggestion types
39
+ */
40
+ export type SuggestionType = "memory" | "skill_create" | "skill_patch" | "user_profile" | "pattern";
41
+ /**
42
+ * Review suggestion
43
+ */
44
+ export interface ReviewSuggestion {
45
+ id: string;
46
+ type: SuggestionType;
47
+ priority: "low" | "medium" | "high";
48
+ content: string;
49
+ reason: string;
50
+ trajectoryId?: string;
51
+ metadata?: Record<string, unknown>;
52
+ }
53
+ /**
54
+ * Review result
55
+ */
56
+ export interface ReviewResult {
57
+ trajectoryId: string;
58
+ suggestions: ReviewSuggestion[];
59
+ patterns: string[];
60
+ corrections: string[];
61
+ timestamp: number;
62
+ }
63
+ /**
64
+ * Review event types
65
+ */
66
+ export type ReviewEvent = {
67
+ type: "review.started";
68
+ trajectoryId: string;
69
+ } | {
70
+ type: "review.completed";
71
+ result: ReviewResult;
72
+ } | {
73
+ type: "review.error";
74
+ error: string;
75
+ trajectoryId: string;
76
+ } | {
77
+ type: "suggestion.created";
78
+ suggestion: ReviewSuggestion;
79
+ } | {
80
+ type: "suggestion.approved";
81
+ suggestion: ReviewSuggestion;
82
+ } | {
83
+ type: "suggestion.rejected";
84
+ suggestion: ReviewSuggestion;
85
+ };
86
+ /**
87
+ * Review event handler
88
+ */
89
+ export type ReviewEventHandler = (event: ReviewEvent) => void;
90
+ /**
91
+ * Background Review Fork
92
+ */
93
+ export declare class BackgroundReviewFork {
94
+ private config;
95
+ private cycleCount;
96
+ private queuedReview;
97
+ private handlers;
98
+ private pendingSuggestions;
99
+ constructor(config?: Partial<BackgroundReviewConfig>);
100
+ /**
101
+ * Update configuration
102
+ */
103
+ updateConfig(config: Partial<BackgroundReviewConfig>): void;
104
+ /**
105
+ * Register event handler
106
+ */
107
+ on(handler: ReviewEventHandler): () => void;
108
+ /**
109
+ * Emit event to all handlers
110
+ */
111
+ private emit;
112
+ /**
113
+ * Process cycle end - check if review should run
114
+ */
115
+ onCycleEnd(trajectory: Trajectory): void;
116
+ /**
117
+ * Run review on trajectory
118
+ */
119
+ runReview(trajectory: Trajectory): Promise<ReviewResult>;
120
+ /**
121
+ * Analyze trajectory and generate suggestions
122
+ */
123
+ private analyzeTrajectory;
124
+ /**
125
+ * Generate skill content from trajectory
126
+ */
127
+ private generateSkillFromTrajectory;
128
+ /**
129
+ * Extract task type from request
130
+ */
131
+ private extractTaskType;
132
+ /**
133
+ * Extract user preferences from summary
134
+ */
135
+ private extractUserPreferences;
136
+ /**
137
+ * Get pending suggestions
138
+ */
139
+ getPendingSuggestions(): ReviewSuggestion[];
140
+ /**
141
+ * Approve suggestion
142
+ */
143
+ approveSuggestion(suggestionId: string): ReviewSuggestion | null;
144
+ /**
145
+ * Reject suggestion
146
+ */
147
+ rejectSuggestion(suggestionId: string): ReviewSuggestion | null;
148
+ /**
149
+ * Clear all pending suggestions
150
+ */
151
+ clearSuggestions(): void;
152
+ /**
153
+ * Get review stats
154
+ */
155
+ getStats(): {
156
+ cycleCount: number;
157
+ pendingCount: number;
158
+ enabled: boolean;
159
+ nudgeInterval: number;
160
+ };
161
+ }
162
+ export declare function getGlobalReviewFork(): BackgroundReviewFork;
163
+ export declare function createReviewFork(config?: Partial<BackgroundReviewConfig>): BackgroundReviewFork;
164
+ //# sourceMappingURL=review-fork.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-fork.d.ts","sourceRoot":"","sources":["../../src/review-fork.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAA4B,MAAM,YAAY,CAAC;AAGvE;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,+BAA+B;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,+CAA+C;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,kCAAkC;IAClC,eAAe,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC3C,wCAAwC;IACxC,mBAAmB,EAAE,OAAO,CAAC;IAC7B,2BAA2B;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qCAAqC;IACrC,aAAa,EAAE,OAAO,CAAC;IACvB,iCAAiC;IACjC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,sDAAsD;IACtD,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,sBAQnC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,QAAQ,GACR,cAAc,GACd,aAAa,GACb,cAAc,GACd,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,YAAY,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,oBAAoB,CAAC;IAAC,UAAU,EAAE,gBAAgB,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,UAAU,EAAE,gBAAgB,CAAA;CAAE,GAC7D;IAAE,IAAI,EAAE,qBAAqB,CAAC;IAAC,UAAU,EAAE,gBAAgB,CAAA;CAAE,CAAC;AAElE;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;AAE9D;;GAEG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,QAAQ,CAAsC;IACtD,OAAO,CAAC,kBAAkB,CAA0B;IAEpD,YAAY,MAAM,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,EAEnD;IAED;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG,IAAI,CAE1D;IAED;;OAEG;IACH,EAAE,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,IAAI,CAG1C;IAED;;OAEG;IACH,OAAO,CAAC,IAAI;IAUZ;;OAEG;IACH,UAAU,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAavC;IAED;;OAEG;IACG,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,CAwB7D;IAED;;OAEG;YACW,iBAAiB;IAyG/B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IA2CnC;;OAEG;IACH,OAAO,CAAC,eAAe;IAavB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAkB9B;;OAEG;IACH,qBAAqB,IAAI,gBAAgB,EAAE,CAE1C;IAED;;OAEG;IACH,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAQ/D;IAED;;OAEG;IACH,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAQ9D;IAED;;OAEG;IACH,gBAAgB,IAAI,IAAI,CAEvB;IAED;;OAEG;IACH,QAAQ,IAAI;QACV,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,EAAE,OAAO,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;KACvB,CAOA;CACF;AAKD,wBAAgB,mBAAmB,IAAI,oBAAoB,CAK1D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG,oBAAoB,CAE/F"}