overmind-mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +111 -0
  3. package/dist/.claude/sessions.json +4 -0
  4. package/dist/bin/cli.d.ts +3 -0
  5. package/dist/bin/cli.d.ts.map +1 -0
  6. package/dist/bin/cli.js +22 -0
  7. package/dist/bin/cli.js.map +1 -0
  8. package/dist/btc_enrichment.sql +42 -0
  9. package/dist/btc_enrichments_2026-02-05.json +57 -0
  10. package/dist/btc_pattern_2026-02-05_0523.json +24 -0
  11. package/dist/btc_pattern_enrichments.sql +69 -0
  12. package/dist/btc_pattern_enrichments_batch2.sql +78 -0
  13. package/dist/btc_pattern_enrichments_batch3.sql +93 -0
  14. package/dist/btc_pattern_enrichments_batch4.sql +58 -0
  15. package/dist/btc_pattern_enrichments_batch5.sql +113 -0
  16. package/dist/btc_pattern_enrichments_batch6.sql +42 -0
  17. package/dist/btc_sequence_0549_0553_2026-02-05.json +64 -0
  18. package/dist/btc_sequence_0621_0622_2026-02-05.json +36 -0
  19. package/dist/btc_sequence_enrichment_20260205.sql +59 -0
  20. package/dist/btc_sequence_enrichment_20260205_0557-0558.sql +45 -0
  21. package/dist/btc_sequence_volatility_collapse_2026-02-05.json +58 -0
  22. package/dist/btc_vector_analysis_2026-02-05.json +96 -0
  23. package/dist/check_schema.js +23 -0
  24. package/dist/check_schema_fa.js +22 -0
  25. package/dist/embed-analytics.json +1 -0
  26. package/dist/enrich_119847.js +121 -0
  27. package/dist/enrich_119850.js +105 -0
  28. package/dist/enrich_btc.js +57 -0
  29. package/dist/enrich_btc_batch5.js +95 -0
  30. package/dist/enrich_btc_batch6_sequence_0557_0558.js +78 -0
  31. package/dist/enrich_btc_batch_live.js +187 -0
  32. package/dist/enrich_btc_final.js +141 -0
  33. package/dist/enrich_btc_patterns.js +134 -0
  34. package/dist/enrich_pattern.js +48 -0
  35. package/dist/enrich_pattern.sql +26 -0
  36. package/dist/enrich_pattern_119857.js +54 -0
  37. package/dist/enrich_pattern_121084.js +57 -0
  38. package/dist/enrich_pattern_121086.js +66 -0
  39. package/dist/enrich_patterns.js +114 -0
  40. package/dist/enrich_patterns.sql +4 -0
  41. package/dist/enrichment.sql +17 -0
  42. package/dist/enrichments_data.js +36 -0
  43. package/dist/example.test.js +6 -0
  44. package/dist/import_pattern_enrichments_2026-02-05_volatility_collapse.sql +66 -0
  45. package/dist/index.d.ts +5 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +5 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/insert_enrichments.js +69 -0
  50. package/dist/insert_enrichments.mjs +94 -0
  51. package/dist/lib/config.d.ts +26 -0
  52. package/dist/lib/config.d.ts.map +1 -0
  53. package/dist/lib/config.js +31 -0
  54. package/dist/lib/config.js.map +1 -0
  55. package/dist/lib/sessions.d.ts +3 -0
  56. package/dist/lib/sessions.d.ts.map +1 -0
  57. package/dist/lib/sessions.js +40 -0
  58. package/dist/lib/sessions.js.map +1 -0
  59. package/dist/nul +0 -0
  60. package/dist/pattern_enrichment_119807.sql +34 -0
  61. package/dist/pattern_enrichment_119811.sql +22 -0
  62. package/dist/pattern_enrichment_119812.sql +23 -0
  63. package/dist/pattern_enrichment_119821_119822_exhaustion.sql +35 -0
  64. package/dist/pattern_enrichment_119826.sql +31 -0
  65. package/dist/pattern_enrichment_119847.sql +58 -0
  66. package/dist/pattern_enrichment_119848.sql +34 -0
  67. package/dist/pattern_enrichment_119853.sql +41 -0
  68. package/dist/pattern_enrichment_119856.sql +42 -0
  69. package/dist/pattern_enrichment_119857.sql +38 -0
  70. package/dist/pattern_enrichment_121027.sql +36 -0
  71. package/dist/pattern_enrichment_121067.sql +38 -0
  72. package/dist/pattern_enrichment_121086.sql +40 -0
  73. package/dist/pattern_enrichment_121090.sql +41 -0
  74. package/dist/pattern_enrichment_121138.sql +46 -0
  75. package/dist/pattern_enrichment_121172.sql +31 -0
  76. package/dist/pattern_enrichment_121189.sql +31 -0
  77. package/dist/pattern_enrichment_121195.sql +32 -0
  78. package/dist/pattern_enrichment_121207.sql +15 -0
  79. package/dist/pattern_enrichment_121214.sql +15 -0
  80. package/dist/pattern_enrichment_121217.sql +15 -0
  81. package/dist/pattern_enrichment_121221.sql +15 -0
  82. package/dist/pattern_enrichment_121314.sql +14 -0
  83. package/dist/pattern_enrichment_121316.sql +31 -0
  84. package/dist/pattern_enrichment_121325.sql +31 -0
  85. package/dist/pattern_enrichment_121327.sql +15 -0
  86. package/dist/pattern_enrichments_batch.sql +70 -0
  87. package/dist/pattern_enrichments_batch_2026-02-05.json +81 -0
  88. package/dist/prompts/agent_prompts.d.ts +2 -0
  89. package/dist/prompts/agent_prompts.d.ts.map +1 -0
  90. package/dist/prompts/agent_prompts.js +25 -0
  91. package/dist/prompts/agent_prompts.js.map +1 -0
  92. package/dist/run_enrichments.js +72 -0
  93. package/dist/server.d.ts +3 -0
  94. package/dist/server.d.ts.map +1 -0
  95. package/dist/server.js +62 -0
  96. package/dist/server.js.map +1 -0
  97. package/dist/services/AgentManager.d.ts +22 -0
  98. package/dist/services/AgentManager.d.ts.map +1 -0
  99. package/dist/services/AgentManager.js +163 -0
  100. package/dist/services/AgentManager.js.map +1 -0
  101. package/dist/services/ClaudeRunner.d.ts +19 -0
  102. package/dist/services/ClaudeRunner.d.ts.map +1 -0
  103. package/dist/services/ClaudeRunner.js +160 -0
  104. package/dist/services/ClaudeRunner.js.map +1 -0
  105. package/dist/services/PromptManager.d.ts +16 -0
  106. package/dist/services/PromptManager.d.ts.map +1 -0
  107. package/dist/services/PromptManager.js +54 -0
  108. package/dist/services/PromptManager.js.map +1 -0
  109. package/dist/start_bot.d.ts +2 -0
  110. package/dist/start_bot.d.ts.map +1 -0
  111. package/dist/start_bot.js +26 -0
  112. package/dist/start_bot.js.map +1 -0
  113. package/dist/tools/create_agent.d.ts +19 -0
  114. package/dist/tools/create_agent.d.ts.map +1 -0
  115. package/dist/tools/create_agent.js +49 -0
  116. package/dist/tools/create_agent.js.map +1 -0
  117. package/dist/tools/manage_agents.d.ts +35 -0
  118. package/dist/tools/manage_agents.d.ts.map +1 -0
  119. package/dist/tools/manage_agents.js +121 -0
  120. package/dist/tools/manage_agents.js.map +1 -0
  121. package/dist/tools/manage_prompts.d.ts +27 -0
  122. package/dist/tools/manage_prompts.d.ts.map +1 -0
  123. package/dist/tools/manage_prompts.js +66 -0
  124. package/dist/tools/manage_prompts.js.map +1 -0
  125. package/dist/tools/run_claude.d.ts +19 -0
  126. package/dist/tools/run_claude.d.ts.map +1 -0
  127. package/dist/tools/run_claude.js +66 -0
  128. package/dist/tools/run_claude.js.map +1 -0
  129. package/package.json +67 -0
@@ -0,0 +1,160 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { spawn } from 'child_process';
4
+ import { CONFIG, resolveConfigPath } from '../lib/config.js';
5
+ import { getLastSessionId, saveSessionId } from '../lib/sessions.js';
6
+ export class ClaudeRunner {
7
+ config;
8
+ timeoutMs;
9
+ constructor() {
10
+ this.config = CONFIG.CLAUDE;
11
+ this.timeoutMs = CONFIG.TIMEOUT_MS || 30000;
12
+ }
13
+ async runAgent(options) {
14
+ const { prompt, agentName, autoResume } = options;
15
+ let { sessionId } = options;
16
+ const { CORE, PERMISSIONS, PATHS } = this.config;
17
+ // --- Auto Resume ---
18
+ if (autoResume && agentName && !sessionId) {
19
+ const lastId = await getLastSessionId(agentName);
20
+ if (lastId) {
21
+ sessionId = lastId;
22
+ }
23
+ }
24
+ let settingsPath = resolveConfigPath(PATHS.SETTINGS);
25
+ if (agentName) {
26
+ const settingsDir = path.dirname(PATHS.SETTINGS);
27
+ const specificSettingsPath = resolveConfigPath(path.join(settingsDir, `settings_${agentName}.json`));
28
+ if (!fs.existsSync(specificSettingsPath)) {
29
+ return {
30
+ result: '',
31
+ error: `INVALID_AGENT`,
32
+ };
33
+ }
34
+ settingsPath = specificSettingsPath;
35
+ }
36
+ const cwd = process.cwd();
37
+ const relativeSettings = path.relative(cwd, settingsPath);
38
+ if (!relativeSettings.startsWith('..') && !path.isAbsolute(relativeSettings)) {
39
+ settingsPath = relativeSettings.startsWith('./') ? relativeSettings : `./${relativeSettings}`;
40
+ }
41
+ let mcpPath = resolveConfigPath(PATHS.MCP);
42
+ let tmpMcpPathToDelete = null;
43
+ let customTimeoutMs = this.timeoutMs;
44
+ // --- Isolation ---
45
+ if (agentName) {
46
+ try {
47
+ const agentSettingsPath = resolveConfigPath(path.join(path.dirname(PATHS.SETTINGS), `settings_${agentName}.json`));
48
+ if (fs.existsSync(agentSettingsPath)) {
49
+ const settings = JSON.parse(fs.readFileSync(agentSettingsPath, 'utf8'));
50
+ if (settings.env && settings.env.AGENT_TIMEOUT_MS) {
51
+ customTimeoutMs = parseInt(settings.env.AGENT_TIMEOUT_MS, 10) || customTimeoutMs;
52
+ }
53
+ if (settings.enableAllProjectMcpServers === false &&
54
+ Array.isArray(settings.enabledMcpjsonServers)) {
55
+ if (fs.existsSync(mcpPath)) {
56
+ const fullMcp = JSON.parse(fs.readFileSync(mcpPath, 'utf8'));
57
+ const filteredMcp = { mcpServers: {} };
58
+ for (const serverName of settings.enabledMcpjsonServers) {
59
+ if (fullMcp.mcpServers && fullMcp.mcpServers[serverName]) {
60
+ filteredMcp.mcpServers[serverName] = fullMcp.mcpServers[serverName];
61
+ }
62
+ }
63
+ const tmpMcpPath = path.join(path.dirname(agentSettingsPath), `mcp_${agentName}_tmp.json`);
64
+ fs.writeFileSync(tmpMcpPath, JSON.stringify(filteredMcp, null, 2));
65
+ mcpPath = tmpMcpPath;
66
+ tmpMcpPathToDelete = tmpMcpPath;
67
+ }
68
+ }
69
+ }
70
+ }
71
+ catch (_e) {
72
+ // Warning
73
+ }
74
+ }
75
+ const relativeMcp = path.relative(cwd, mcpPath);
76
+ if (!relativeMcp.startsWith('..') && !path.isAbsolute(relativeMcp)) {
77
+ mcpPath = relativeMcp.startsWith('./') ? relativeMcp : `./${relativeMcp}`;
78
+ }
79
+ const argsSpawn = [];
80
+ if (CORE)
81
+ argsSpawn.push(...CORE.split(' ').filter(Boolean));
82
+ if (PERMISSIONS)
83
+ argsSpawn.push(...PERMISSIONS.split(' ').filter(Boolean));
84
+ argsSpawn.push('--settings', `"${settingsPath}"`);
85
+ argsSpawn.push('--mcp-config', `"${mcpPath}"`);
86
+ if (sessionId) {
87
+ argsSpawn.push('--resume', sessionId);
88
+ }
89
+ return new Promise((resolve) => {
90
+ const cleanupTmpFiles = () => {
91
+ if (tmpMcpPathToDelete && fs.existsSync(tmpMcpPathToDelete)) {
92
+ try {
93
+ fs.unlinkSync(tmpMcpPathToDelete);
94
+ }
95
+ catch (_e) {
96
+ // Ignore unlink errors
97
+ }
98
+ }
99
+ };
100
+ const child = spawn('claude', argsSpawn, {
101
+ stdio: ['pipe', 'pipe', 'pipe'],
102
+ cwd: process.cwd(),
103
+ shell: process.platform === 'win32',
104
+ });
105
+ let stdout = '';
106
+ let stderr = '';
107
+ if (child.stdout) {
108
+ child.stdout.on('data', (d) => (stdout += d.toString()));
109
+ }
110
+ if (child.stderr) {
111
+ child.stderr.on('data', (d) => (stderr += d.toString()));
112
+ }
113
+ const timeout = setTimeout(() => {
114
+ child.kill();
115
+ cleanupTmpFiles();
116
+ resolve({ result: '', error: `TIMEOUT`, rawOutput: stdout });
117
+ }, customTimeoutMs);
118
+ child.on('close', async (code) => {
119
+ clearTimeout(timeout);
120
+ cleanupTmpFiles();
121
+ if (code !== 0 && !stdout) {
122
+ return resolve({ result: '', error: `EXIT_CODE_${code}`, rawOutput: stderr });
123
+ }
124
+ try {
125
+ let jsonStr = stdout.trim();
126
+ const jsonStartIndex = jsonStr.indexOf('{');
127
+ const jsonLastIndex = jsonStr.lastIndexOf('}');
128
+ if (jsonStartIndex >= 0 && jsonLastIndex > jsonStartIndex) {
129
+ jsonStr = jsonStr.substring(jsonStartIndex, jsonLastIndex + 1);
130
+ }
131
+ const response = JSON.parse(jsonStr || '{}');
132
+ if (agentName && response.session_id) {
133
+ await saveSessionId(agentName, response.session_id);
134
+ }
135
+ resolve({
136
+ result: response.result || JSON.stringify(response),
137
+ sessionId: response.session_id,
138
+ rawOutput: stdout,
139
+ });
140
+ }
141
+ catch (error) {
142
+ resolve({
143
+ result: '',
144
+ error: 'JSON_PARSE_ERROR',
145
+ rawOutput: stdout,
146
+ });
147
+ }
148
+ });
149
+ child.on('error', (err) => {
150
+ cleanupTmpFiles();
151
+ resolve({ result: '', error: err.message, rawOutput: '' });
152
+ });
153
+ if (child.stdin) {
154
+ child.stdin.write(prompt);
155
+ child.stdin.end();
156
+ }
157
+ });
158
+ }
159
+ }
160
+ //# sourceMappingURL=ClaudeRunner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClaudeRunner.js","sourceRoot":"","sources":["../../src/services/ClaudeRunner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export declare class PromptManager {
2
+ private baseDir;
3
+ private agentsDir;
4
+ constructor(customBaseDir?: string);
5
+ createPrompt(name: string, content: string): Promise<{
6
+ filePath: string;
7
+ existed: boolean;
8
+ }>;
9
+ editPrompt(name: string, search: string, replace: string): Promise<{
10
+ success: boolean;
11
+ filePath?: string;
12
+ error?: string;
13
+ }>;
14
+ getPromptContent(name: string): Promise<string | null>;
15
+ }
16
+ //# sourceMappingURL=PromptManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptManager.d.ts","sourceRoot":"","sources":["../../src/services/PromptManager.ts"],"names":[],"mappings":"AAIA,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;gBAEd,aAAa,CAAC,EAAE,MAAM;IAY5B,YAAY,CAChB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAa5C,UAAU,CACd,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAmB7D,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAQ7D"}
@@ -0,0 +1,54 @@
1
+ import fs from 'fs/promises';
2
+ import path from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ export class PromptManager {
5
+ baseDir;
6
+ agentsDir;
7
+ constructor(customBaseDir) {
8
+ if (customBaseDir) {
9
+ this.baseDir = customBaseDir;
10
+ }
11
+ else {
12
+ const currentFileUrl = import.meta.url;
13
+ const currentFilePath = fileURLToPath(currentFileUrl);
14
+ const projectRoot = path.resolve(path.dirname(currentFilePath), '../../');
15
+ this.baseDir = path.resolve(projectRoot, '.claude');
16
+ }
17
+ this.agentsDir = path.join(this.baseDir, 'agents');
18
+ }
19
+ async createPrompt(name, content) {
20
+ await fs.mkdir(this.agentsDir, { recursive: true });
21
+ const filePath = path.join(this.agentsDir, `${name}.md`);
22
+ const existed = await fs
23
+ .stat(filePath)
24
+ .then(() => true)
25
+ .catch(() => false);
26
+ await fs.writeFile(filePath, content, 'utf-8');
27
+ return { filePath, existed };
28
+ }
29
+ async editPrompt(name, search, replace) {
30
+ const filePath = path.join(this.agentsDir, `${name}.md`);
31
+ try {
32
+ const content = await fs.readFile(filePath, 'utf-8');
33
+ if (!content.includes(search)) {
34
+ return { success: false, error: 'SEARCH_NOT_FOUND', filePath };
35
+ }
36
+ const newContent = content.replace(search, replace);
37
+ await fs.writeFile(filePath, newContent, 'utf-8');
38
+ return { success: true, filePath };
39
+ }
40
+ catch (e) {
41
+ return { success: false, error: e instanceof Error ? e.message : String(e), filePath };
42
+ }
43
+ }
44
+ async getPromptContent(name) {
45
+ const filePath = path.join(this.agentsDir, `${name}.md`);
46
+ try {
47
+ return await fs.readFile(filePath, 'utf-8');
48
+ }
49
+ catch {
50
+ return null;
51
+ }
52
+ }
53
+ }
54
+ //# sourceMappingURL=PromptManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PromptManager.js","sourceRoot":"","sources":["../../src/services/PromptManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=start_bot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start_bot.d.ts","sourceRoot":"","sources":["../src/start_bot.ts"],"names":[],"mappings":""}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * ============================================================================
3
+ * LANCEUR BOT NEWS (Version MCP)
4
+ * ============================================================================
5
+ * Configure l'agent News et lance le serveur MCP.
6
+ */
7
+ import { createServer } from './index.js';
8
+ import { updateConfig } from './lib/config.js';
9
+ import path from 'path';
10
+ import { fileURLToPath } from 'url';
11
+ // 1. Configuration Spécifique pour Agent News
12
+ const currentFileUrl = import.meta.url;
13
+ const currentFilePath = fileURLToPath(currentFileUrl);
14
+ const scriptDir = path.dirname(currentFilePath); // .../Workflow/dist
15
+ const projectRoot = path.resolve(scriptDir, '..'); // .../Workflow
16
+ const newsSettingsPath = path.resolve(projectRoot, '.claude/settingsM.json');
17
+ const localMcpPath = path.resolve(projectRoot, '.mcp.json');
18
+ // Mettre à jour la config globale avant de créer le serveur
19
+ updateConfig(newsSettingsPath, localMcpPath);
20
+ console.error('📰 Démarrage du BOT NEWS (Mode MCP)...');
21
+ console.error(`🔧 Settings: ${newsSettingsPath}`);
22
+ console.error(`🔧 MCP Config: ${localMcpPath}`);
23
+ // 2. Démarrage du Serveur MCP
24
+ const server = createServer('Claude-Code MCP Runner');
25
+ server.start({ transportType: 'stdio' });
26
+ //# sourceMappingURL=start_bot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start_bot.js","sourceRoot":"","sources":["../src/start_bot.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,8CAA8C;AAC9C,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;AACvC,MAAM,eAAe,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;AACtD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,oBAAoB;AACrE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,eAAe;AAElE,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;AAC7E,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AAE5D,4DAA4D;AAC5D,YAAY,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;AAE7C,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;AACxD,OAAO,CAAC,KAAK,CAAC,gBAAgB,gBAAgB,EAAE,CAAC,CAAC;AAClD,OAAO,CAAC,KAAK,CAAC,kBAAkB,YAAY,EAAE,CAAC,CAAC;AAEhD,8BAA8B;AAC9B,MAAM,MAAM,GAAG,YAAY,CAAC,wBAAwB,CAAC,CAAC;AACtD,MAAM,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { z } from 'zod';
2
+ export declare const createAgentSchema: z.ZodObject<{
3
+ name: z.ZodString;
4
+ prompt: z.ZodString;
5
+ model: z.ZodDefault<z.ZodOptional<z.ZodString>>;
6
+ copyEnvFrom: z.ZodOptional<z.ZodString>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ prompt: string;
9
+ name: string;
10
+ model: string;
11
+ copyEnvFrom?: string | undefined;
12
+ }, {
13
+ prompt: string;
14
+ name: string;
15
+ model?: string | undefined;
16
+ copyEnvFrom?: string | undefined;
17
+ }>;
18
+ export declare function createAgent(args: z.infer<typeof createAgentSchema>): Promise<any>;
19
+ //# sourceMappingURL=create_agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_agent.d.ts","sourceRoot":"","sources":["../../src/tools/create_agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;EAkB5B,CAAC;AAGH,wBAAsB,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CA+BvF"}
@@ -0,0 +1,49 @@
1
+ import { z } from 'zod';
2
+ import path from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ import { AgentManager } from '../services/AgentManager.js';
5
+ export const createAgentSchema = z.object({
6
+ name: z
7
+ .string()
8
+ .describe("Nom de l'agent (ex: agent_finance). Sera utilisé pour les noms de fichiers."),
9
+ prompt: z.string().describe("Le prompt système (instructions) de l'agent."),
10
+ model: z
11
+ .string()
12
+ .optional()
13
+ .default('claude-sonnet-4-5')
14
+ .describe('Modèle à utiliser. Supporte tous les modèles compatibles avec Claude Code (Anthropic, OpenAI, DeepSeek, Glm, Minimax, etc.). Ex: claude-sonnet-4-5, gpt-4, deepseek-chat'),
15
+ copyEnvFrom: z
16
+ .string()
17
+ .optional()
18
+ .describe("Chemin vers un settings.json existant pour copier les variables d'environnement (ex: .claude/settingsM.json)"),
19
+ });
20
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
21
+ export async function createAgent(args) {
22
+ const manager = new AgentManager();
23
+ const { name, prompt, model, copyEnvFrom } = args;
24
+ const currentFileUrl = import.meta.url;
25
+ const currentFilePath = fileURLToPath(currentFileUrl);
26
+ // src/tools/create_agent.ts -> src/tools -> src -> Workflow
27
+ const projectRoot = path.resolve(path.dirname(currentFilePath), '../../');
28
+ const result = await manager.createAgent(name, prompt, model, copyEnvFrom, projectRoot);
29
+ if (result.error === 'INVALID_NAME') {
30
+ return {
31
+ content: [
32
+ {
33
+ type: 'text',
34
+ text: `❌ **Nom d'agent invalide**\n\nLe nom '${name}' contient des caractères interdits.\n\n💡 **Règle:** Utilisez uniquement des lettres, chiffres, tirets (-) et underscores (_).\n\nExemple valide: 'agent_finance', 'expert-seo'`,
35
+ },
36
+ ],
37
+ isError: true,
38
+ };
39
+ }
40
+ return {
41
+ content: [
42
+ {
43
+ type: 'text',
44
+ text: `✅ Agent '${name}' créé avec succès !\n\n📂 Fichiers :\n- Prompt : ${result.promptPath}\n- Config : ${result.settingsPath}\n\n🚀 Pour lancer cet agent :\nnode dist/bin/cli.js --settings .claude/settings_${name}.json`,
45
+ },
46
+ ],
47
+ };
48
+ }
49
+ //# sourceMappingURL=create_agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create_agent.js","sourceRoot":"","sources":["../../src/tools/create_agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC;SACJ,MAAM,EAAE;SACR,QAAQ,CAAC,6EAA6E,CAAC;IAC1F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;IAC3E,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,OAAO,CAAC,mBAAmB,CAAC;SAC5B,QAAQ,CACP,0KAA0K,CAC3K;IACH,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,8GAA8G,CAC/G;CACJ,CAAC,CAAC;AAEH,8DAA8D;AAC9D,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAuC;IACvE,MAAM,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;IACnC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAElD,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IACvC,MAAM,eAAe,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;IACtD,4DAA4D;IAC5D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,CAAC;IAE1E,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IAExF,IAAI,MAAM,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;QACpC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,yCAAyC,IAAI,kLAAkL;iBACtO;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,YAAY,IAAI,qDAAqD,MAAM,CAAC,UAAU,gBAAgB,MAAM,CAAC,YAAY,oFAAoF,IAAI,OAAO;aAC/N;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { z } from 'zod';
2
+ export declare const listAgentsSchema: z.ZodObject<{
3
+ details: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
4
+ }, "strip", z.ZodTypeAny, {
5
+ details: boolean;
6
+ }, {
7
+ details?: boolean | undefined;
8
+ }>;
9
+ export declare const deleteAgentSchema: z.ZodObject<{
10
+ name: z.ZodString;
11
+ }, "strip", z.ZodTypeAny, {
12
+ name: string;
13
+ }, {
14
+ name: string;
15
+ }>;
16
+ export declare const updateAgentConfigSchema: z.ZodObject<{
17
+ name: z.ZodString;
18
+ model: z.ZodOptional<z.ZodString>;
19
+ mcpServers: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
20
+ env: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
21
+ }, "strip", z.ZodTypeAny, {
22
+ name: string;
23
+ model?: string | undefined;
24
+ mcpServers?: string[] | undefined;
25
+ env?: Record<string, string> | undefined;
26
+ }, {
27
+ name: string;
28
+ model?: string | undefined;
29
+ mcpServers?: string[] | undefined;
30
+ env?: Record<string, string> | undefined;
31
+ }>;
32
+ export declare function listAgents(args: z.infer<typeof listAgentsSchema>): Promise<any>;
33
+ export declare function deleteAgent(args: z.infer<typeof deleteAgentSchema>): Promise<any>;
34
+ export declare function updateAgentConfig(args: z.infer<typeof updateAgentConfigSchema>): Promise<any>;
35
+ //# sourceMappingURL=manage_agents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage_agents.d.ts","sourceRoot":"","sources":["../../src/tools/manage_agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,eAAO,MAAM,gBAAgB;;;;;;EAM3B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;EAE5B,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;EAoBlC,CAAC;AAKH,wBAAsB,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAyBrF;AAGD,wBAAsB,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAwBvF;AAGD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,GAC5C,OAAO,CAAC,GAAG,CAAC,CA0Cd"}
@@ -0,0 +1,121 @@
1
+ import { z } from 'zod';
2
+ import path from 'path';
3
+ import { AgentManager } from '../services/AgentManager.js';
4
+ // --- Schemas ---
5
+ export const listAgentsSchema = z.object({
6
+ details: z
7
+ .boolean()
8
+ .optional()
9
+ .default(false)
10
+ .describe('Si true, affiche les détails complets (modèle, config) de chaque agent.'),
11
+ });
12
+ export const deleteAgentSchema = z.object({
13
+ name: z.string().describe("Nom de l'agent à supprimer (ex: agent_finance)"),
14
+ });
15
+ export const updateAgentConfigSchema = z.object({
16
+ name: z.string().describe("Nom de l'agent à modifier"),
17
+ model: z
18
+ .string()
19
+ .optional()
20
+ .describe('Nouveau modèle à utiliser. Supporte tous les modèles compatibles avec Claude Code (Anthropic, OpenAI, DeepSeek, Glm, Minimax, etc.). Ex: claude-sonnet-4-5, gpt-4, deepseek-chat'),
21
+ mcpServers: z
22
+ .array(z.string())
23
+ .optional()
24
+ .describe("Liste complète des serveurs MCP à activer (remplace la liste existante). Ex: ['postgresql', 'news']"),
25
+ env: z
26
+ .record(z.string(), z.string())
27
+ .optional()
28
+ .describe("Variables d'environnement supplémentaires à définir ou écraser (ex: { 'API_KEY': '123' })"),
29
+ });
30
+ // --- Tools ---
31
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
32
+ export async function listAgents(args) {
33
+ const manager = new AgentManager();
34
+ try {
35
+ const agentsList = await manager.listAgents(args.details);
36
+ if (agentsList.length === 0) {
37
+ return {
38
+ content: [{ type: 'text', text: '📂 Aucun agent trouvé.' }],
39
+ };
40
+ }
41
+ return {
42
+ content: [
43
+ {
44
+ type: 'text',
45
+ text: `📋 **Liste des Agents Disponibles (${agentsList.length})** :\n\n${agentsList.join('\n\n')}`,
46
+ },
47
+ ],
48
+ };
49
+ }
50
+ catch (e) {
51
+ return {
52
+ isError: true,
53
+ content: [{ type: 'text', text: `❌ Erreur lors du listing des agents : ${e instanceof Error ? e.message : String(e)}` }],
54
+ };
55
+ }
56
+ }
57
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
58
+ export async function deleteAgent(args) {
59
+ const manager = new AgentManager();
60
+ const { name } = args;
61
+ const result = await manager.deleteAgent(name);
62
+ if (result.deletedFiles.length === 0 && result.errors.length === 0) {
63
+ return {
64
+ isError: true,
65
+ content: [{ type: 'text', text: `⚠️ Agent '${name}' introuvable (ni prompt, ni settings).` }],
66
+ };
67
+ }
68
+ let response = `🗑️ **Suppression de l'agent '${name}'**\n`;
69
+ if (result.deletedFiles.length > 0) {
70
+ response += `\n✅ Fichiers supprimés :\n${result.deletedFiles.map((f) => `- ${path.basename(f)}`).join('\n')}`;
71
+ }
72
+ if (result.errors.length > 0) {
73
+ response += `\n\n❌ Erreurs :\n${result.errors.join('\n')}`;
74
+ }
75
+ return {
76
+ content: [{ type: 'text', text: response }],
77
+ };
78
+ }
79
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
80
+ export async function updateAgentConfig(args) {
81
+ const manager = new AgentManager();
82
+ const { name, model, mcpServers, env } = args;
83
+ try {
84
+ const changes = await manager.updateAgentConfig(name, { model, mcpServers, env });
85
+ if (changes.length === 0) {
86
+ return {
87
+ content: [
88
+ { type: 'text', text: `⚠️ Aucune modification demandée pour l'agent '${name}'.` },
89
+ ],
90
+ };
91
+ }
92
+ return {
93
+ content: [
94
+ {
95
+ type: 'text',
96
+ text: `✅ Configuration de l'agent '${name}' mise à jour :\n${changes.join('\n')}`,
97
+ },
98
+ ],
99
+ };
100
+ }
101
+ catch (e) {
102
+ if (e && typeof e === 'object' && 'code' in e && e.code === 'ENOENT') {
103
+ return {
104
+ isError: true,
105
+ content: [
106
+ {
107
+ type: 'text',
108
+ text: `❌ **Agent Introuvable**\n\nImpossible de modifier la configuration pour '${name}' car le fichier settings est introuvable.\n\n💡 **Solution:** Vérifiez le nom de l'agent avec \`list_agents\`.`,
109
+ },
110
+ ],
111
+ };
112
+ }
113
+ return {
114
+ isError: true,
115
+ content: [
116
+ { type: 'text', text: `❌ Erreur lors de la mise à jour de '${name}': ${e instanceof Error ? e.message : String(e)}` },
117
+ ],
118
+ };
119
+ }
120
+ }
121
+ //# sourceMappingURL=manage_agents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage_agents.js","sourceRoot":"","sources":["../../src/tools/manage_agents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { z } from 'zod';
2
+ export declare const createPromptSchema: z.ZodObject<{
3
+ name: z.ZodString;
4
+ content: z.ZodString;
5
+ }, "strip", z.ZodTypeAny, {
6
+ name: string;
7
+ content: string;
8
+ }, {
9
+ name: string;
10
+ content: string;
11
+ }>;
12
+ export declare const editPromptSchema: z.ZodObject<{
13
+ name: z.ZodString;
14
+ search: z.ZodString;
15
+ replace: z.ZodString;
16
+ }, "strip", z.ZodTypeAny, {
17
+ replace: string;
18
+ search: string;
19
+ name: string;
20
+ }, {
21
+ replace: string;
22
+ search: string;
23
+ name: string;
24
+ }>;
25
+ export declare function createPrompt(args: z.infer<typeof createPromptSchema>): Promise<any>;
26
+ export declare function editPrompt(args: z.infer<typeof editPromptSchema>): Promise<any>;
27
+ //# sourceMappingURL=manage_prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage_prompts.d.ts","sourceRoot":"","sources":["../../src/tools/manage_prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,kBAAkB;;;;;;;;;EAG7B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;EAI3B,CAAC;AAKH,wBAAsB,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAczF;AAGD,wBAAsB,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAsCrF"}
@@ -0,0 +1,66 @@
1
+ import { z } from 'zod';
2
+ import { PromptManager } from '../services/PromptManager.js';
3
+ // --- Schemas ---
4
+ export const createPromptSchema = z.object({
5
+ name: z.string().describe("Nom du fichier prompt (sans extension). Ex: 'analyse_financiere'"),
6
+ content: z.string().describe('Contenu Markdown du prompt'),
7
+ });
8
+ export const editPromptSchema = z.object({
9
+ name: z.string().describe("Nom du fichier prompt à modifier (ex: 'agent_news')"),
10
+ search: z.string().describe('Le texte exact à rechercher et remplacer'),
11
+ replace: z.string().describe('Le nouveau texte de remplacement'),
12
+ });
13
+ // --- Tools ---
14
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
15
+ export async function createPrompt(args) {
16
+ const manager = new PromptManager();
17
+ const { name, content } = args;
18
+ const result = await manager.createPrompt(name, content);
19
+ return {
20
+ content: [
21
+ {
22
+ type: 'text',
23
+ text: `✅ Prompt '${name}' ${result.existed ? 'mis à jour' : 'créé'} avec succès.\n📍 ${result.filePath}`,
24
+ },
25
+ ],
26
+ };
27
+ }
28
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
+ export async function editPrompt(args) {
30
+ const manager = new PromptManager();
31
+ const { name, search, replace } = args;
32
+ const result = await manager.editPrompt(name, search, replace);
33
+ if (!result.success) {
34
+ if (result.error === 'SEARCH_NOT_FOUND') {
35
+ return {
36
+ isError: true,
37
+ content: [
38
+ {
39
+ type: 'text',
40
+ text: `❌ Erreur : Le texte recherché n'a pas été trouvé dans '${name}.md'.\n\nTexte recherché :\n${search}`,
41
+ },
42
+ ],
43
+ };
44
+ }
45
+ else {
46
+ return {
47
+ isError: true,
48
+ content: [
49
+ {
50
+ type: 'text',
51
+ text: `❌ Erreur lors de la lecture du fichier '${name}.md': ${result.error}`,
52
+ },
53
+ ],
54
+ };
55
+ }
56
+ }
57
+ return {
58
+ content: [
59
+ {
60
+ type: 'text',
61
+ text: `✅ Prompt '${name}' modifié avec succès.\n\n🔻 Avant :\n${search}\n\n🔺 Après :\n${replace}`,
62
+ },
63
+ ],
64
+ };
65
+ }
66
+ //# sourceMappingURL=manage_prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manage_prompts.js","sourceRoot":"","sources":["../../src/tools/manage_prompts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,kBAAkB;AAElB,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kEAAkE,CAAC;IAC7F,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;CAC3D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;IAChF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IACvE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;CACjE,CAAC,CAAC;AAEH,gBAAgB;AAEhB,8DAA8D;AAC9D,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAwC;IACzE,MAAM,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;IACpC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAE/B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEzD,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,aAAa,IAAI,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,qBAAqB,MAAM,CAAC,QAAQ,EAAE;aACzG;SACF;KACF,CAAC;AACJ,CAAC;AAED,8DAA8D;AAC9D,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAsC;IACrE,MAAM,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;IACpC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAEvC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAE/D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,IAAI,MAAM,CAAC,KAAK,KAAK,kBAAkB,EAAE,CAAC;YACxC,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,0DAA0D,IAAI,+BAA+B,MAAM,EAAE;qBAC5G;iBACF;aACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,2CAA2C,IAAI,SAAS,MAAM,CAAC,KAAK,EAAE;qBAC7E;iBACF;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,aAAa,IAAI,yCAAyC,MAAM,mBAAmB,OAAO,EAAE;aACnG;SACF;KACF,CAAC;AACJ,CAAC"}