micro-models-agent 0.2.63 → 0.2.64

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 (82) hide show
  1. package/README.md +354 -354
  2. package/dist/agent/loop.d.ts.map +1 -1
  3. package/dist/agent/loop.js +119 -3
  4. package/dist/agent/loop.js.map +1 -1
  5. package/dist/agent/tool-executor.d.ts +2 -10
  6. package/dist/agent/tool-executor.d.ts.map +1 -1
  7. package/dist/agent/tool-executor.js +92 -1
  8. package/dist/agent/tool-executor.js.map +1 -1
  9. package/dist/async-map.d.ts +6 -0
  10. package/dist/async-map.d.ts.map +1 -0
  11. package/dist/async-map.js +16 -0
  12. package/dist/async-map.js.map +1 -0
  13. package/dist/blog-api/types/index.d.ts +2 -0
  14. package/dist/blog-api/types/index.d.ts.map +1 -0
  15. package/dist/blog-api/types/index.js +2 -0
  16. package/dist/blog-api/types/index.js.map +1 -0
  17. package/dist/cli/config.js +1 -1
  18. package/dist/cli/config.js.map +1 -1
  19. package/dist/config/config.d.ts +10 -0
  20. package/dist/config/config.d.ts.map +1 -1
  21. package/dist/config/config.js +29 -2
  22. package/dist/config/config.js.map +1 -1
  23. package/dist/config/types.d.ts +16 -1
  24. package/dist/config/types.d.ts.map +1 -1
  25. package/dist/examples.d.ts +22 -0
  26. package/dist/examples.d.ts.map +1 -0
  27. package/dist/examples.js +45 -0
  28. package/dist/examples.js.map +1 -0
  29. package/dist/fibonacci.d.ts +19 -0
  30. package/dist/fibonacci.d.ts.map +1 -0
  31. package/dist/fibonacci.js +61 -0
  32. package/dist/fibonacci.js.map +1 -0
  33. package/dist/plugins/builtin/lint-on-write/index.ts +96 -96
  34. package/dist/plugins/builtin/notify/index.js +6 -6
  35. package/dist/plugins/builtin/notify/index.ts +104 -104
  36. package/dist/repl.d.ts +5 -0
  37. package/dist/repl.d.ts.map +1 -0
  38. package/dist/repl.js +472 -0
  39. package/dist/repl.js.map +1 -0
  40. package/dist/skills/builtin/agent-test/SKILL.md +68 -68
  41. package/dist/skills/builtin/grill-me/SKILL.md +46 -46
  42. package/dist/sort.d.ts +8 -0
  43. package/dist/sort.d.ts.map +1 -0
  44. package/dist/sort.js +36 -0
  45. package/dist/sort.js.map +1 -0
  46. package/dist/stack.d.ts +9 -0
  47. package/dist/stack.d.ts.map +1 -0
  48. package/dist/stack.js +22 -0
  49. package/dist/stack.js.map +1 -0
  50. package/dist/test-run.d.ts +2 -0
  51. package/dist/test-run.d.ts.map +1 -0
  52. package/dist/test-run.js +13 -0
  53. package/dist/test-run.js.map +1 -0
  54. package/dist/tools/subagent.d.ts +16 -1
  55. package/dist/tools/subagent.d.ts.map +1 -1
  56. package/dist/tools/subagent.js +84 -9
  57. package/dist/tools/subagent.js.map +1 -1
  58. package/dist/ui/components/diff-view.d.ts +8 -0
  59. package/dist/ui/components/diff-view.d.ts.map +1 -0
  60. package/dist/ui/components/diff-view.js +25 -0
  61. package/dist/ui/components/diff-view.js.map +1 -0
  62. package/dist/ui/double-press.d.ts +9 -0
  63. package/dist/ui/double-press.d.ts.map +1 -0
  64. package/dist/ui/double-press.js +18 -0
  65. package/dist/ui/double-press.js.map +1 -0
  66. package/dist/ui/opentui-renderer.d.ts +53 -0
  67. package/dist/ui/opentui-renderer.d.ts.map +1 -0
  68. package/dist/ui/opentui-renderer.js +463 -0
  69. package/dist/ui/opentui-renderer.js.map +1 -0
  70. package/dist/utils/memoize.d.ts +14 -0
  71. package/dist/utils/memoize.d.ts.map +1 -0
  72. package/dist/utils/memoize.js +51 -0
  73. package/dist/utils/memoize.js.map +1 -0
  74. package/dist/utils/types.d.ts +6 -0
  75. package/dist/utils/types.d.ts.map +1 -0
  76. package/dist/utils/types.js +2 -0
  77. package/dist/utils/types.js.map +1 -0
  78. package/dist/utils.d.ts +22 -0
  79. package/dist/utils.d.ts.map +1 -0
  80. package/dist/utils.js +81 -0
  81. package/dist/utils.js.map +1 -0
  82. package/package.json +2 -2
package/dist/repl.js ADDED
@@ -0,0 +1,472 @@
1
+ import { readFileSync, writeFileSync } from 'node:fs';
2
+ import { globSync } from 'node:fs';
3
+ import { execSync } from 'node:child_process';
4
+ import { executeBash } from './tools/bash.js';
5
+ import { runAgentLoop } from './agent/loop.js';
6
+ import { loadMemory, saveMemory, searchMemory, loadAllMemory, ensureMemoryDir, removeMemoryEntry, exportMemory } from './agent/memory.js';
7
+ import { listInstalledSkills } from './skills/loader.js';
8
+ import { listSessions, loadSession, createNamedSession, createAutoSession, formatSessionList } from './session/store.js';
9
+ import { rebuildCodeIndex, rebuildProjectMap } from './indexer/cache.js';
10
+ import { getTheme } from './styling/index.js';
11
+ function slashRead(path, renderer) {
12
+ const theme = getTheme();
13
+ try {
14
+ const content = readFileSync(path, 'utf-8');
15
+ const lines = content.split('\n');
16
+ const maxLines = 200;
17
+ renderer.writeNewline();
18
+ const shown = lines.slice(0, maxLines);
19
+ renderer.writeFileOutput(shown);
20
+ if (lines.length > maxLines) {
21
+ renderer.writeDim(` ... (${lines.length - maxLines} more lines)`);
22
+ }
23
+ renderer.writeNewline();
24
+ }
25
+ catch (e) {
26
+ renderer.writeError(e.message);
27
+ }
28
+ }
29
+ function slashFind(pattern, renderer) {
30
+ const theme = getTheme();
31
+ try {
32
+ const IGNORE = ['node_modules', '.git', 'dist', '.mma', 'build', '__pycache__'];
33
+ const fixedPattern = pattern.includes('/') || pattern.includes('\\') ? pattern : `**/${pattern}`;
34
+ const results = globSync(fixedPattern).filter(f => !f.split(/[/\\]/).some(p => IGNORE.includes(p)));
35
+ if (results.length === 0) {
36
+ renderer.writeDim(' No matches');
37
+ return;
38
+ }
39
+ for (const f of results) {
40
+ renderer.writeLine(`${theme.indent}${theme.filePath(f)}`);
41
+ }
42
+ }
43
+ catch (e) {
44
+ renderer.writeError(e.message);
45
+ }
46
+ }
47
+ function slashSearch(pattern, renderer) {
48
+ const theme = getTheme();
49
+ try {
50
+ const result = execSync(`findstr /s /n /c:"${pattern}" *.ts *.js *.tsx *.jsx *.json *.md`, { encoding: 'utf-8', timeout: 10000 });
51
+ const lines = result.trim().split('\n').slice(0, 30);
52
+ if (lines.length === 0 || (lines.length === 1 && lines[0] === '')) {
53
+ renderer.writeDim(' No matches');
54
+ return;
55
+ }
56
+ for (const line of lines) {
57
+ renderer.writeLine(`${theme.indent}${line}`);
58
+ }
59
+ if (result.trim().split('\n').length > 30) {
60
+ renderer.writeDim(` ... (${result.trim().split('\n').length - 30} more)`);
61
+ }
62
+ }
63
+ catch (e) {
64
+ if (e.status === 1) {
65
+ renderer.writeDim(' No matches');
66
+ }
67
+ else {
68
+ renderer.writeError(e.message);
69
+ }
70
+ }
71
+ }
72
+ function slashWrite(path, content, renderer) {
73
+ const theme = getTheme();
74
+ try {
75
+ writeFileSync(path, content, 'utf-8');
76
+ renderer.writeSuccess(`written to ${theme.filePath(path)}`);
77
+ }
78
+ catch (e) {
79
+ renderer.writeError(e.message);
80
+ }
81
+ }
82
+ function slashEdit(args, renderer) {
83
+ const theme = getTheme();
84
+ const parts = args.split(/\s+/);
85
+ if (parts.length < 3) {
86
+ renderer.writeInfo(' Usage: /edit <file> <line> <new content>');
87
+ renderer.writeInfo(' Example: /edit src/index.ts 5 const x = 1;');
88
+ return;
89
+ }
90
+ const [filePath, lineStr, ...rest] = parts;
91
+ const lineNum = parseInt(lineStr, 10);
92
+ if (isNaN(lineNum) || lineNum < 1) {
93
+ renderer.writeDim(' Line number must be a positive integer');
94
+ return;
95
+ }
96
+ const newContent = rest.join(' ');
97
+ try {
98
+ const content = readFileSync(filePath, 'utf-8');
99
+ const lines = content.split('\n');
100
+ if (lineNum > lines.length) {
101
+ renderer.writeWarning(` File has only ${lines.length} lines`);
102
+ return;
103
+ }
104
+ lines[lineNum - 1] = newContent;
105
+ writeFileSync(filePath, lines.join('\n'), 'utf-8');
106
+ renderer.writeSuccess(`Line ${lineNum} updated in ${theme.filePath(filePath)}`);
107
+ }
108
+ catch (e) {
109
+ renderer.writeError(e.message);
110
+ }
111
+ }
112
+ async function slashBash(cmd, renderer) {
113
+ const result = await executeBash(cmd);
114
+ if (result.stdout)
115
+ renderer.write(result.stdout);
116
+ if (result.stderr)
117
+ renderer.writeError(result.stderr);
118
+ }
119
+ function slashSkill(args, renderer) {
120
+ const subcmd = args.trim() || 'list';
121
+ switch (subcmd) {
122
+ case 'list': {
123
+ const skills = listInstalledSkills();
124
+ if (skills.length === 0) {
125
+ renderer.writeDim(' No skills installed.');
126
+ renderer.writeDim(' Skills are loaded from: ~/.mma/skills/, ~/.claude/skills/, .claude/skills/, .agents/skills/');
127
+ renderer.writeDim(' Reference skills in prompts with @skill-name');
128
+ }
129
+ else {
130
+ renderer.writeInfo(` Installed skills (${skills.length}):`);
131
+ for (const s of skills) {
132
+ renderer.writeLine(` @${s}`);
133
+ }
134
+ }
135
+ break;
136
+ }
137
+ default:
138
+ renderer.writeInfo(' Usage: /skill [list]');
139
+ }
140
+ }
141
+ function slashMemory(args, renderer) {
142
+ ensureMemoryDir();
143
+ if (!args.trim()) {
144
+ const summary = loadAllMemory();
145
+ if (summary) {
146
+ renderer.writeLine(summary);
147
+ }
148
+ else {
149
+ renderer.writeDim(' Project memory is empty. Use /memory add <type> <text>');
150
+ }
151
+ return;
152
+ }
153
+ const parts = args.trim().split(/\s+/);
154
+ const subcommand = parts[0];
155
+ const rest = parts.slice(1);
156
+ const type = rest[0] || '';
157
+ const text = rest.slice(1).join(' ') || '';
158
+ switch (subcommand) {
159
+ case 'show': {
160
+ if (!type) {
161
+ renderer.writeInfo(' Usage: /memory show <type> (project|conventions|decisions|errors|history)');
162
+ return;
163
+ }
164
+ const content = loadMemory(type);
165
+ renderer.writeNewline();
166
+ renderer.writeLine(content);
167
+ renderer.writeNewline();
168
+ break;
169
+ }
170
+ case 'add': {
171
+ if (!type || !text) {
172
+ renderer.writeInfo(' Usage: /memory add <type> <text>');
173
+ renderer.writeInfo(' Types: project, conventions, decisions, errors, history');
174
+ return;
175
+ }
176
+ saveMemory(type, text.slice(0, 60), text);
177
+ renderer.writeSuccess(`Saved to .mma/memory/${type}.md`);
178
+ break;
179
+ }
180
+ case 'search': {
181
+ if (!type) {
182
+ renderer.writeInfo(' Usage: /memory search <query>');
183
+ return;
184
+ }
185
+ const results = searchMemory(type);
186
+ if (results.length === 0) {
187
+ renderer.writeDim(' No matches');
188
+ return;
189
+ }
190
+ renderer.writeInfo(` Found ${results.length} matches:`);
191
+ for (const r of results) {
192
+ renderer.writeLine(` [${r.type}] ${r.match}`);
193
+ }
194
+ break;
195
+ }
196
+ case 'remove': {
197
+ if (!type) {
198
+ renderer.writeInfo(' Usage: /memory remove <type> <line-number>');
199
+ renderer.writeInfo(' First use /memory show <type> to see entries with line numbers.');
200
+ return;
201
+ }
202
+ const lineNum = parseInt(text, 10);
203
+ if (isNaN(lineNum) || lineNum < 1) {
204
+ renderer.writeDim(' Line number must be a positive integer');
205
+ return;
206
+ }
207
+ const removed = removeMemoryEntry(type, lineNum);
208
+ if (removed) {
209
+ renderer.writeSuccess(`Entry removed from ${type}.md`);
210
+ }
211
+ else {
212
+ renderer.writeError(' Could not remove entry (line number out of range?)');
213
+ }
214
+ break;
215
+ }
216
+ case 'export': {
217
+ const exported = exportMemory();
218
+ if (exported) {
219
+ renderer.writeSuccess(`Memory exported to ${exported}`);
220
+ }
221
+ else {
222
+ renderer.writeDim(' No memory to export');
223
+ }
224
+ break;
225
+ }
226
+ default: {
227
+ renderer.writeInfo(' Usage: /memory [show <type>|add <type> <text>|search <query>|remove <type> <line>|export]');
228
+ }
229
+ }
230
+ }
231
+ function slashSessions(renderer) {
232
+ const sessions = listSessions();
233
+ renderer.writeLine(formatSessionList(sessions));
234
+ }
235
+ async function slashResume(args, provider, registry, history, renderer) {
236
+ if (!args.trim()) {
237
+ renderer.writeInfo(' Usage: /resume <session-id>');
238
+ renderer.writeInfo(' Use /sessions to see available sessions.');
239
+ return;
240
+ }
241
+ const session = loadSession(args.trim());
242
+ if (!session) {
243
+ renderer.writeError(` Session "${args.trim()}" not found.`);
244
+ return;
245
+ }
246
+ renderer.writeInfo(`Resumed session: ${session.id} (${session.messages.length} messages)`);
247
+ renderer.writeDim(`Provider: ${session.provider}`);
248
+ renderer.writeNewline();
249
+ const lastUser = session.messages.filter(m => m.role === 'user').pop();
250
+ const prevMsgs = session.messages.filter(m => m.role !== 'system').map(m => ({ role: m.role, content: m.content }));
251
+ if (lastUser) {
252
+ const result = await runAgentLoop(provider, registry, lastUser.content, undefined, prevMsgs, renderer);
253
+ for (const msg of result.messages) {
254
+ if (msg.role !== 'system') {
255
+ history.push({ role: msg.role, content: msg.content });
256
+ }
257
+ }
258
+ }
259
+ }
260
+ function slashSave(args, history, provider, renderer) {
261
+ if (history.length === 0) {
262
+ renderer.writeDim(' No conversation to save.');
263
+ return;
264
+ }
265
+ const name = args.trim() || '';
266
+ const providerLabel = `${provider.model}`;
267
+ const filePath = createNamedSession(name, history, providerLabel, process.cwd(), { totalTokens: 0, compactCount: 0 });
268
+ const id = filePath.split(/[/\\]/).pop()?.replace('.json', '') || '';
269
+ renderer.writeSuccess(`Session saved: ${id}${name ? ` (${name})` : ''}`);
270
+ }
271
+ function slashClear(history, renderer) {
272
+ history.length = 0;
273
+ renderer.writeInfo(' Context cleared. Starting new session.');
274
+ }
275
+ function slashIndex(args, renderer) {
276
+ const subcmd = args.trim() || 'status';
277
+ switch (subcmd) {
278
+ case 'rebuild': {
279
+ renderer.writeInfo(' Rebuilding code index...');
280
+ const { formatted } = rebuildCodeIndex(process.cwd());
281
+ renderer.writeLine(formatted);
282
+ renderer.writeSuccess('Code index rebuilt');
283
+ break;
284
+ }
285
+ case 'map': {
286
+ renderer.writeInfo(' Rebuilding project map...');
287
+ const { formatted } = rebuildProjectMap(process.cwd());
288
+ renderer.writeLine(formatted);
289
+ renderer.writeSuccess('Project map rebuilt');
290
+ break;
291
+ }
292
+ case 'status': {
293
+ const { getOrBuildCodeIndex, getOrBuildProjectMap } = require('./indexer/cache.js');
294
+ const { formatted: mapFormatted } = getOrBuildProjectMap(process.cwd());
295
+ const { formatted: idxFormatted } = getOrBuildCodeIndex(process.cwd());
296
+ renderer.writeLine(mapFormatted.split('\n').slice(0, 3).join('\n'));
297
+ renderer.writeNewline();
298
+ renderer.writeLine(idxFormatted.split('\n').slice(0, 3).join('\n'));
299
+ break;
300
+ }
301
+ default:
302
+ renderer.writeInfo(' Usage: /index [status|rebuild|map]');
303
+ }
304
+ }
305
+ export async function runRepl(provider, registry, modelLabel, renderer) {
306
+ const memorySummary = loadAllMemory();
307
+ renderer.writeHeading(`MMA v0.1 — ${modelLabel}`);
308
+ if (memorySummary) {
309
+ renderer.writeLine(memorySummary);
310
+ }
311
+ renderer.writeDim('Type /help for commands, /exit to quit');
312
+ renderer.writeNewline();
313
+ let currentWritePath = null;
314
+ let writeBuffer = [];
315
+ let conversationHistory = [];
316
+ const sigintHandler = () => {
317
+ if (conversationHistory.length > 0) {
318
+ createAutoSession(conversationHistory, modelLabel, process.cwd(), { totalTokens: 0, compactCount: 0 });
319
+ renderer.writeSuccess('\nSession auto-saved.');
320
+ }
321
+ renderer.destroy();
322
+ process.exit(0);
323
+ };
324
+ process.on('SIGINT', sigintHandler);
325
+ while (true) {
326
+ let line;
327
+ try {
328
+ line = await renderer.prompt('MMA> ');
329
+ }
330
+ catch {
331
+ break;
332
+ }
333
+ if (!line.trim())
334
+ continue;
335
+ if (currentWritePath) {
336
+ if (line.trim() === 'EOF') {
337
+ slashWrite(currentWritePath, writeBuffer.join('\n'), renderer);
338
+ currentWritePath = null;
339
+ writeBuffer = [];
340
+ }
341
+ else {
342
+ writeBuffer.push(line);
343
+ }
344
+ continue;
345
+ }
346
+ if (line.startsWith('/')) {
347
+ const spaceIdx = line.indexOf(' ');
348
+ const cmd = spaceIdx === -1 ? line.slice(1) : line.slice(1, spaceIdx);
349
+ const args = spaceIdx === -1 ? '' : line.slice(spaceIdx + 1);
350
+ switch (cmd) {
351
+ case 'exit':
352
+ case 'quit':
353
+ if (conversationHistory.length > 0) {
354
+ createAutoSession(conversationHistory, modelLabel, process.cwd(), { totalTokens: 0, compactCount: 0 });
355
+ renderer.writeSuccess('Session auto-saved.');
356
+ }
357
+ renderer.writeDim('Bye!');
358
+ renderer.destroy();
359
+ return;
360
+ case 'help':
361
+ renderer.writeDim(`
362
+ /bash <cmd> — run shell command
363
+ /read <file> — display file with line numbers
364
+ /edit <file> <n> — replace line N in file with rest of args
365
+ /write <file> — write file (end with EOF on its own line)
366
+ /find <pattern> — find files by glob pattern
367
+ /search <pattern> — search file contents
368
+ /git <args> — git operations
369
+ /memory — show memory summary
370
+ /memory show <t> — show memory type content
371
+ /memory add <t> — add memory entry
372
+ /memory search <q> — search memory
373
+ /memory remove <t> <n> — remove entry N from type
374
+ /memory export — export memory to .mma/memory-export.md
375
+ /skill — list installed skills
376
+ /sessions — list saved sessions
377
+ /resume <id> — resume a session
378
+ /save [name] — save current session
379
+ /clear — clear context (new session)
380
+ /index [cmd] — index status/rebuild/map
381
+ /stop — stop agent loop
382
+ /exit — exit MMA
383
+ `);
384
+ break;
385
+ case 'bash':
386
+ await slashBash(args, renderer);
387
+ break;
388
+ case 'read':
389
+ slashRead(args, renderer);
390
+ break;
391
+ case 'write':
392
+ if (!args) {
393
+ renderer.writeInfo(' Usage: /write <file> (then type content, end with EOF)');
394
+ }
395
+ else {
396
+ currentWritePath = args;
397
+ renderer.writeDim(' Type your content. End with EOF on its own line:');
398
+ }
399
+ break;
400
+ case 'edit':
401
+ slashEdit(args, renderer);
402
+ break;
403
+ case 'find':
404
+ slashFind(args, renderer);
405
+ break;
406
+ case 'search':
407
+ slashSearch(args, renderer);
408
+ break;
409
+ case 'git':
410
+ await slashBash(`git ${args}`, renderer);
411
+ break;
412
+ case 'memory':
413
+ slashMemory(args, renderer);
414
+ break;
415
+ case 'skill':
416
+ slashSkill(args, renderer);
417
+ break;
418
+ case 'sessions':
419
+ slashSessions(renderer);
420
+ break;
421
+ case 'resume':
422
+ await slashResume(args, provider, registry, conversationHistory, renderer);
423
+ break;
424
+ case 'save':
425
+ slashSave(args, conversationHistory, provider, renderer);
426
+ break;
427
+ case 'clear':
428
+ case 'new':
429
+ slashClear(conversationHistory, renderer);
430
+ break;
431
+ case 'stop':
432
+ renderer.writeDim(' Stopping agent loop...');
433
+ renderer.destroy();
434
+ return;
435
+ case 'index':
436
+ slashIndex(args, renderer);
437
+ break;
438
+ default:
439
+ renderer.writeError(` Unknown command: /${cmd}. `);
440
+ renderer.writeDim('Type /help');
441
+ }
442
+ continue;
443
+ }
444
+ const result = await runAgentLoop(provider, registry, line, undefined, conversationHistory, renderer, modelLabel);
445
+ const newMessages = result.messages;
446
+ for (const msg of newMessages) {
447
+ if (msg.role !== 'system') {
448
+ conversationHistory.push({ role: msg.role, content: msg.content });
449
+ }
450
+ }
451
+ if (result.questionPending) {
452
+ const { question, choices } = result.questionPending;
453
+ renderer.writeNewline();
454
+ renderer.writeWarning(` Question: ${question}`);
455
+ if (choices && choices.length > 0) {
456
+ for (let i = 0; i < choices.length; i++) {
457
+ renderer.writeLine(` ${i + 1}. ${choices[i]}`);
458
+ }
459
+ }
460
+ renderer.writeNewline();
461
+ const answer = await renderer.prompt(' Your answer: ');
462
+ conversationHistory.push({ role: 'user', content: answer });
463
+ const answerResult = await runAgentLoop(provider, registry, `User answered: ${answer}`, undefined, conversationHistory, renderer, modelLabel);
464
+ for (const msg of answerResult.messages) {
465
+ if (msg.role !== 'system') {
466
+ conversationHistory.push({ role: msg.role, content: msg.content });
467
+ }
468
+ }
469
+ }
470
+ }
471
+ }
472
+ //# sourceMappingURL=repl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.js","sourceRoot":"","sources":["../src/repl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAG9C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC1I,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACzH,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEzE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,SAAS,SAAS,CAAC,IAAY,EAAE,QAAwB;IACvD,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,GAAG,CAAC;QACrB,QAAQ,CAAC,YAAY,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QACvC,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,KAAK,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;YAC5B,QAAQ,CAAC,QAAQ,CAAC,UAAU,KAAK,CAAC,MAAM,GAAG,QAAQ,cAAc,CAAC,CAAC;QACrE,CAAC;QACD,QAAQ,CAAC,YAAY,EAAE,CAAC;IAC1B,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,OAAe,EAAE,QAAwB;IAC1D,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QAChF,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,EAAE,CAAC;QACjG,MAAM,OAAO,GAAI,QAAQ,CAAC,YAAY,CAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,QAAQ,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,OAAe,EAAE,QAAwB;IAC5D,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,qBAAqB,OAAO,qCAAqC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QAClI,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACrD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;YAClE,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,QAAQ,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAC1C,QAAQ,CAAC,QAAQ,CAAC,UAAU,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,IAAK,CAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,UAAU,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,OAAe,EAAE,QAAwB;IACzE,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACtC,QAAQ,CAAC,YAAY,CAAC,cAAc,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,QAAwB;IACvD,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,QAAQ,CAAC,SAAS,CAAC,4CAA4C,CAAC,CAAC;QACjE,QAAQ,CAAC,SAAS,CAAC,8CAA8C,CAAC,CAAC;QACnE,OAAO;IACT,CAAC;IACD,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;IAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACtC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAClC,QAAQ,CAAC,QAAQ,CAAC,0CAA0C,CAAC,CAAC;QAC9D,OAAO;IACT,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC3B,QAAQ,CAAC,YAAY,CAAC,mBAAmB,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;YAC/D,OAAO;QACT,CAAC;QACD,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC;QAChC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QACnD,QAAQ,CAAC,YAAY,CAAC,QAAQ,OAAO,eAAe,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,QAAwB;IAC5D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,MAAM,CAAC,MAAM;QAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjD,IAAI,MAAM,CAAC,MAAM;QAAE,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,QAAwB;IACxD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC;IACrC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;YACrC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxB,QAAQ,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;gBAC5C,QAAQ,CAAC,QAAQ,CAAC,+FAA+F,CAAC,CAAC;gBACnH,QAAQ,CAAC,QAAQ,CAAC,gDAAgD,CAAC,CAAC;YACtE,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,SAAS,CAAC,uBAAuB,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;gBAC7D,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;oBACvB,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;YACD,MAAM;QACR,CAAC;QACD;YACE,QAAQ,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,QAAwB;IACzD,eAAe,EAAE,CAAC;IAElB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;QAChC,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,QAAQ,CAAC,0DAA0D,CAAC,CAAC;QAChF,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAE3C,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,QAAQ,CAAC,SAAS,CAAC,6EAA6E,CAAC,CAAC;gBAClG,OAAO;YACT,CAAC;YACD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;YACjC,QAAQ,CAAC,YAAY,EAAE,CAAC;YACxB,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC5B,QAAQ,CAAC,YAAY,EAAE,CAAC;YACxB,MAAM;QACR,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACnB,QAAQ,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;gBACzD,QAAQ,CAAC,SAAS,CAAC,2DAA2D,CAAC,CAAC;gBAChF,OAAO;YACT,CAAC;YACD,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAC1C,QAAQ,CAAC,YAAY,CAAC,wBAAwB,IAAI,KAAK,CAAC,CAAC;YACzD,MAAM;QACR,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,QAAQ,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;gBACtD,OAAO;YACT,CAAC;YACD,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;gBAClC,OAAO;YACT,CAAC;YACD,QAAQ,CAAC,SAAS,CAAC,WAAW,OAAO,CAAC,MAAM,WAAW,CAAC,CAAC;YACzD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACjD,CAAC;YACD,MAAM;QACR,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,QAAQ,CAAC,SAAS,CAAC,8CAA8C,CAAC,CAAC;gBACnE,QAAQ,CAAC,SAAS,CAAC,mEAAmE,CAAC,CAAC;gBACxF,OAAO;YACT,CAAC;YACD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACnC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAClC,QAAQ,CAAC,QAAQ,CAAC,0CAA0C,CAAC,CAAC;gBAC9D,OAAO;YACT,CAAC;YACD,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACjD,IAAI,OAAO,EAAE,CAAC;gBACZ,QAAQ,CAAC,YAAY,CAAC,sBAAsB,IAAI,KAAK,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,UAAU,CAAC,sDAAsD,CAAC,CAAC;YAC9E,CAAC;YACD,MAAM;QACR,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;YAChC,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,YAAY,CAAC,sBAAsB,QAAQ,EAAE,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;YAC7C,CAAC;YACD,MAAM;QACR,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,QAAQ,CAAC,SAAS,CAAC,6FAA6F,CAAC,CAAC;QACpH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,QAAwB;IAC7C,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,QAAqB,EAAE,QAAsB,EAAE,OAA0D,EAAE,QAAwB;IAC1K,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;QACjB,QAAQ,CAAC,SAAS,CAAC,+BAA+B,CAAC,CAAC;QACpD,QAAQ,CAAC,SAAS,CAAC,4CAA4C,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,QAAQ,CAAC,UAAU,CAAC,cAAc,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAC7D,OAAO;IACT,CAAC;IACD,QAAQ,CAAC,SAAS,CAAC,oBAAoB,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,MAAM,YAAY,CAAC,CAAC;IAC3F,QAAQ,CAAC,QAAQ,CAAC,aAAa,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACnD,QAAQ,CAAC,YAAY,EAAE,CAAC;IACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;IACvE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAqC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACrJ,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACvG,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAA4B,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACjF,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,OAA0D,EAAE,QAAqB,EAAE,QAAwB;IAC1I,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,QAAQ,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;IAC/B,MAAM,aAAa,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC1C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;IACtH,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IACrE,QAAQ,CAAC,YAAY,CAAC,kBAAkB,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,UAAU,CAAC,OAA4C,EAAE,QAAwB;IACxF,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IACnB,QAAQ,CAAC,SAAS,CAAC,0CAA0C,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,UAAU,CAAC,IAAY,EAAE,QAAwB;IACxD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,QAAQ,CAAC;IACvC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,QAAQ,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;YACjD,MAAM,EAAE,SAAS,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACtD,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAC9B,QAAQ,CAAC,YAAY,CAAC,oBAAoB,CAAC,CAAC;YAC5C,MAAM;QACR,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,QAAQ,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;YAClD,MAAM,EAAE,SAAS,EAAE,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACvD,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAC9B,QAAQ,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC;YAC7C,MAAM;QACR,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;YACpF,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACxE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACvE,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACpE,QAAQ,CAAC,YAAY,EAAE,CAAC;YACxB,QAAQ,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YACpE,MAAM;QACR,CAAC;QACD;YACE,QAAQ,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,QAAqB,EAAE,QAAsB,EAAE,UAAkB,EAAE,QAAwB;IACvH,MAAM,aAAa,GAAG,aAAa,EAAE,CAAC;IAEtC,QAAQ,CAAC,YAAY,CAAC,cAAc,UAAU,EAAE,CAAC,CAAC;IAClD,IAAI,aAAa,EAAE,CAAC;QAClB,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;IACpC,CAAC;IACD,QAAQ,CAAC,QAAQ,CAAC,wCAAwC,CAAC,CAAC;IAC5D,QAAQ,CAAC,YAAY,EAAE,CAAC;IAExB,IAAI,gBAAgB,GAAkB,IAAI,CAAC;IAC3C,IAAI,WAAW,GAAa,EAAE,CAAC;IAC/B,IAAI,mBAAmB,GAAsD,EAAE,CAAC;IAEhF,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,iBAAiB,CAAC,mBAAmB,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;YACvG,QAAQ,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC;QACjD,CAAC;QACD,QAAQ,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;IAEpC,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM;QACR,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAAE,SAAS;QAE3B,IAAI,gBAAgB,EAAE,CAAC;YACrB,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;gBAC1B,UAAU,CAAC,gBAAgB,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAC/D,gBAAgB,GAAG,IAAI,CAAC;gBACxB,WAAW,GAAG,EAAE,CAAC;YACnB,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;YACD,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACnC,MAAM,GAAG,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;YACtE,MAAM,IAAI,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;YAE7D,QAAQ,GAAG,EAAE,CAAC;gBACZ,KAAK,MAAM,CAAC;gBACZ,KAAK,MAAM;oBACT,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACnC,iBAAiB,CAAC,mBAAmB,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC;wBACvG,QAAQ,CAAC,YAAY,CAAC,qBAAqB,CAAC,CAAC;oBAC/C,CAAC;oBACD,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBAC1B,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACnB,OAAO;gBACT,KAAK,MAAM;oBACT,QAAQ,CAAC,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;;;WAsBjB,CAAC,CAAC;oBACH,MAAM;gBACR,KAAK,MAAM;oBACT,MAAM,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAChC,MAAM;gBACR,KAAK,MAAM;oBACT,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAC1B,MAAM;gBACR,KAAK,OAAO;oBACV,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,QAAQ,CAAC,SAAS,CAAC,2DAA2D,CAAC,CAAC;oBAClF,CAAC;yBAAM,CAAC;wBACN,gBAAgB,GAAG,IAAI,CAAC;wBACxB,QAAQ,CAAC,QAAQ,CAAC,oDAAoD,CAAC,CAAC;oBAC1E,CAAC;oBACD,MAAM;gBACR,KAAK,MAAM;oBACT,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAC1B,MAAM;gBACR,KAAK,MAAM;oBACT,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAC1B,MAAM;gBACR,KAAK,QAAQ;oBACX,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAC5B,MAAM;gBACR,KAAK,KAAK;oBACR,MAAM,SAAS,CAAC,OAAO,IAAI,EAAE,EAAE,QAAQ,CAAC,CAAC;oBACzC,MAAM;gBACR,KAAK,QAAQ;oBACX,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAC5B,MAAM;gBACR,KAAK,OAAO;oBACV,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAC3B,MAAM;gBACR,KAAK,UAAU;oBACb,aAAa,CAAC,QAAQ,CAAC,CAAC;oBACxB,MAAM;gBACR,KAAK,QAAQ;oBACX,MAAM,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,mBAAmB,EAAE,QAAQ,CAAC,CAAC;oBAC3E,MAAM;gBACR,KAAK,MAAM;oBACT,SAAS,CAAC,IAAI,EAAE,mBAAmB,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;oBACzD,MAAM;gBACR,KAAK,OAAO,CAAC;gBACb,KAAK,KAAK;oBACR,UAAU,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;oBAC1C,MAAM;gBACR,KAAK,MAAM;oBACT,QAAQ,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;oBAC9C,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACnB,OAAO;gBACT,KAAK,OAAO;oBACV,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAC3B,MAAM;gBACR;oBACE,QAAQ,CAAC,UAAU,CAAC,uBAAuB,GAAG,IAAI,CAAC,CAAC;oBACpD,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YACpC,CAAC;YACD,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,mBAAmB,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QAClH,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC;QAEpC,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC9B,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC1B,mBAAmB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAA4B,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC7F,CAAC;QACH,CAAC;QAED,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC3B,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC;YACrD,QAAQ,CAAC,YAAY,EAAE,CAAC;YACxB,QAAQ,CAAC,YAAY,CAAC,eAAe,QAAQ,EAAE,CAAC,CAAC;YACjD,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACxC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;YACD,QAAQ,CAAC,YAAY,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;YACxD,mBAAmB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAE5D,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,MAAM,EAAE,EAAE,SAAS,EAAE,mBAAmB,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;YAC9I,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;gBACxC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC1B,mBAAmB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAA4B,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC7F,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1,68 +1,68 @@
1
- # Agent Test — тестирование MMA агента
2
-
3
- Навык для автоматизированного тестирования ответов MMA агента на разных сценариях.
4
-
5
- ## Запуск
6
-
7
- ```bash
8
- # Все сценарии
9
- bun run test-agent-conversation.ts
10
-
11
- # Один сценарий
12
- bun run test-agent-conversation.ts --scenario chat
13
-
14
- # Список сценариев
15
- bun run test-agent-conversation.ts --list
16
- ```
17
-
18
- ## Добавление нового сценария
19
-
20
- Отредактируй `test-agent-conversation.ts`, секция `SCENARIOS`:
21
-
22
- ```ts
23
- {
24
- name: 'my-new-scenario', // уникальное имя
25
- description: 'Описание что тестируем',
26
- prompts: [
27
- 'Промпт 1',
28
- 'Промпт 2',
29
- 'Промпт 3',
30
- ],
31
- },
32
- ```
33
-
34
- Затем запусти: `bun run test-agent-conversation.ts --scenario my-new-scenario`
35
-
36
- ## Текущие сценарии
37
-
38
- | Имя | Описание | Промптов |
39
- |-----|----------|----------|
40
- | chat | Простая беседа | 8 |
41
- | read | Чтение файлов | 3 |
42
- | code | Написание кода | 3 |
43
- | project | Микро-проект из 5 файлов | 1 |
44
- | topics | Смена тем | 4 |
45
-
46
- ## Что проверяется автоматически
47
-
48
- - **Пустые ответы** — модель не ответила
49
- - **User profile** — модель упомянула профиль пользователя (запрещено)
50
- - **Tool calls** — какие инструменты были использованы
51
- - **Длина ответов** — min/max/avg
52
-
53
- ## Настройка через env
54
-
55
- ```bash
56
- MMA_LLM_URL=http://localhost:1234/v1 # URL LLM сервера
57
- MMA_LLM_MODEL=qwen/qwen3.5-9b # Модель
58
- MMA_CTX=32768 # Размер контекста
59
- ```
60
-
61
- ## Структура
62
-
63
- ```
64
- test-agent-conversation.ts — основной скрипт (все сценарии + анализ)
65
- test-llm-direct.ts — прямой вызов LLM (для отладки)
66
- test-compare.ts — сравнение direct fetch vs provider
67
- test-thinking.ts — тест thinking/reasoning модели
68
- ```
1
+ # Agent Test — тестирование MMA агента
2
+
3
+ Навык для автоматизированного тестирования ответов MMA агента на разных сценариях.
4
+
5
+ ## Запуск
6
+
7
+ ```bash
8
+ # Все сценарии
9
+ bun run test-agent-conversation.ts
10
+
11
+ # Один сценарий
12
+ bun run test-agent-conversation.ts --scenario chat
13
+
14
+ # Список сценариев
15
+ bun run test-agent-conversation.ts --list
16
+ ```
17
+
18
+ ## Добавление нового сценария
19
+
20
+ Отредактируй `test-agent-conversation.ts`, секция `SCENARIOS`:
21
+
22
+ ```ts
23
+ {
24
+ name: 'my-new-scenario', // уникальное имя
25
+ description: 'Описание что тестируем',
26
+ prompts: [
27
+ 'Промпт 1',
28
+ 'Промпт 2',
29
+ 'Промпт 3',
30
+ ],
31
+ },
32
+ ```
33
+
34
+ Затем запусти: `bun run test-agent-conversation.ts --scenario my-new-scenario`
35
+
36
+ ## Текущие сценарии
37
+
38
+ | Имя | Описание | Промптов |
39
+ |-----|----------|----------|
40
+ | chat | Простая беседа | 8 |
41
+ | read | Чтение файлов | 3 |
42
+ | code | Написание кода | 3 |
43
+ | project | Микро-проект из 5 файлов | 1 |
44
+ | topics | Смена тем | 4 |
45
+
46
+ ## Что проверяется автоматически
47
+
48
+ - **Пустые ответы** — модель не ответила
49
+ - **User profile** — модель упомянула профиль пользователя (запрещено)
50
+ - **Tool calls** — какие инструменты были использованы
51
+ - **Длина ответов** — min/max/avg
52
+
53
+ ## Настройка через env
54
+
55
+ ```bash
56
+ MMA_LLM_URL=http://localhost:1234/v1 # URL LLM сервера
57
+ MMA_LLM_MODEL=qwen/qwen3.5-9b # Модель
58
+ MMA_CTX=32768 # Размер контекста
59
+ ```
60
+
61
+ ## Структура
62
+
63
+ ```
64
+ test-agent-conversation.ts — основной скрипт (все сценарии + анализ)
65
+ test-llm-direct.ts — прямой вызов LLM (для отладки)
66
+ test-compare.ts — сравнение direct fetch vs provider
67
+ test-thinking.ts — тест thinking/reasoning модели
68
+ ```