overmind-mcp 0.0.2-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +137 -0
- package/assets/overmind_core_closeup.png +0 -0
- package/assets/overmind_mcp_banner.png +0 -0
- package/assets/overmind_mcp_banner_slim.png +0 -0
- package/assets/overmind_mcp_final_banner.png +0 -0
- package/assets/overmind_mcp_pro_banner.png +0 -0
- package/assets/overmind_mcp_pro_banner_v2.png +0 -0
- package/assets/overmind_mcp_pro_banner_v3.png +0 -0
- package/assets/terminal_preview.png +0 -0
- package/dist/bin/cli.d.ts +3 -0
- package/dist/bin/cli.d.ts.map +1 -0
- package/dist/bin/cli.js +481 -0
- package/dist/bin/cli.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/InstallHelper.d.ts +14 -0
- package/dist/lib/InstallHelper.d.ts.map +1 -0
- package/dist/lib/InstallHelper.js +113 -0
- package/dist/lib/InstallHelper.js.map +1 -0
- package/dist/lib/config.d.ts +58 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +110 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/envUtils.d.ts +10 -0
- package/dist/lib/envUtils.d.ts.map +1 -0
- package/dist/lib/envUtils.js +24 -0
- package/dist/lib/envUtils.js.map +1 -0
- package/dist/lib/loadEnv.d.ts +2 -0
- package/dist/lib/loadEnv.d.ts.map +1 -0
- package/dist/lib/loadEnv.js +26 -0
- package/dist/lib/loadEnv.js.map +1 -0
- package/dist/lib/logger.d.ts +8 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +81 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/modelMapping.d.ts +18 -0
- package/dist/lib/modelMapping.d.ts.map +1 -0
- package/dist/lib/modelMapping.js +88 -0
- package/dist/lib/modelMapping.js.map +1 -0
- package/dist/lib/sessions.d.ts +4 -0
- package/dist/lib/sessions.d.ts.map +1 -0
- package/dist/lib/sessions.js +108 -0
- package/dist/lib/sessions.js.map +1 -0
- package/dist/memory/MemoryFactory.d.ts +11 -0
- package/dist/memory/MemoryFactory.d.ts.map +1 -0
- package/dist/memory/MemoryFactory.js +19 -0
- package/dist/memory/MemoryFactory.js.map +1 -0
- package/dist/memory/PostgresMemoryProvider.d.ts +29 -0
- package/dist/memory/PostgresMemoryProvider.d.ts.map +1 -0
- package/dist/memory/PostgresMemoryProvider.js +372 -0
- package/dist/memory/PostgresMemoryProvider.js.map +1 -0
- package/dist/memory/types.d.ts +70 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +2 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/prompts/agent_prompts.d.ts +2 -0
- package/dist/prompts/agent_prompts.d.ts.map +1 -0
- package/dist/prompts/agent_prompts.js +21 -0
- package/dist/prompts/agent_prompts.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +174 -0
- package/dist/server.js.map +1 -0
- package/dist/services/AgentManager.d.ts +28 -0
- package/dist/services/AgentManager.d.ts.map +1 -0
- package/dist/services/AgentManager.js +393 -0
- package/dist/services/AgentManager.js.map +1 -0
- package/dist/services/ClaudeRunner.d.ts +27 -0
- package/dist/services/ClaudeRunner.d.ts.map +1 -0
- package/dist/services/ClaudeRunner.js +426 -0
- package/dist/services/ClaudeRunner.js.map +1 -0
- package/dist/services/ClineRunner.d.ts +23 -0
- package/dist/services/ClineRunner.d.ts.map +1 -0
- package/dist/services/ClineRunner.js +95 -0
- package/dist/services/ClineRunner.js.map +1 -0
- package/dist/services/GeminiRunner.d.ts +23 -0
- package/dist/services/GeminiRunner.d.ts.map +1 -0
- package/dist/services/GeminiRunner.js +236 -0
- package/dist/services/GeminiRunner.js.map +1 -0
- package/dist/services/KiloRunner.d.ts +32 -0
- package/dist/services/KiloRunner.d.ts.map +1 -0
- package/dist/services/KiloRunner.js +413 -0
- package/dist/services/KiloRunner.js.map +1 -0
- package/dist/services/NousHermesRunner.d.ts +24 -0
- package/dist/services/NousHermesRunner.d.ts.map +1 -0
- package/dist/services/NousHermesRunner.js +318 -0
- package/dist/services/NousHermesRunner.js.map +1 -0
- package/dist/services/OpenClawRunner.d.ts +22 -0
- package/dist/services/OpenClawRunner.d.ts.map +1 -0
- package/dist/services/OpenClawRunner.js +89 -0
- package/dist/services/OpenClawRunner.js.map +1 -0
- package/dist/services/OpenCodeRunner.d.ts +22 -0
- package/dist/services/OpenCodeRunner.d.ts.map +1 -0
- package/dist/services/OpenCodeRunner.js +91 -0
- package/dist/services/OpenCodeRunner.js.map +1 -0
- package/dist/services/PromptManager.d.ts +16 -0
- package/dist/services/PromptManager.d.ts.map +1 -0
- package/dist/services/PromptManager.js +54 -0
- package/dist/services/PromptManager.js.map +1 -0
- package/dist/services/QwenCliRunner.d.ts +22 -0
- package/dist/services/QwenCliRunner.d.ts.map +1 -0
- package/dist/services/QwenCliRunner.js +90 -0
- package/dist/services/QwenCliRunner.js.map +1 -0
- package/dist/tools/config_example.d.ts +18 -0
- package/dist/tools/config_example.d.ts.map +1 -0
- package/dist/tools/config_example.js +253 -0
- package/dist/tools/config_example.js.map +1 -0
- package/dist/tools/create_agent.d.ts +41 -0
- package/dist/tools/create_agent.d.ts.map +1 -0
- package/dist/tools/create_agent.js +75 -0
- package/dist/tools/create_agent.js.map +1 -0
- package/dist/tools/get_agent_configs.d.ts +18 -0
- package/dist/tools/get_agent_configs.d.ts.map +1 -0
- package/dist/tools/get_agent_configs.js +43 -0
- package/dist/tools/get_agent_configs.js.map +1 -0
- package/dist/tools/initialization_check.d.ts +2 -0
- package/dist/tools/initialization_check.d.ts.map +1 -0
- package/dist/tools/initialization_check.js +23 -0
- package/dist/tools/initialization_check.js.map +1 -0
- package/dist/tools/manage_agents.d.ts +80 -0
- package/dist/tools/manage_agents.d.ts.map +1 -0
- package/dist/tools/manage_agents.js +161 -0
- package/dist/tools/manage_agents.js.map +1 -0
- package/dist/tools/manage_prompts.d.ts +30 -0
- package/dist/tools/manage_prompts.d.ts.map +1 -0
- package/dist/tools/manage_prompts.js +64 -0
- package/dist/tools/manage_prompts.js.map +1 -0
- package/dist/tools/memory_runs.d.ts +14 -0
- package/dist/tools/memory_runs.d.ts.map +1 -0
- package/dist/tools/memory_runs.js +77 -0
- package/dist/tools/memory_runs.js.map +1 -0
- package/dist/tools/memory_search.d.ts +14 -0
- package/dist/tools/memory_search.d.ts.map +1 -0
- package/dist/tools/memory_search.js +46 -0
- package/dist/tools/memory_search.js.map +1 -0
- package/dist/tools/memory_store.d.ts +26 -0
- package/dist/tools/memory_store.d.ts.map +1 -0
- package/dist/tools/memory_store.js +46 -0
- package/dist/tools/memory_store.js.map +1 -0
- package/dist/tools/metadata.d.ts +20 -0
- package/dist/tools/metadata.d.ts.map +1 -0
- package/dist/tools/metadata.js +240 -0
- package/dist/tools/metadata.js.map +1 -0
- package/dist/tools/run_agent.d.ts +30 -0
- package/dist/tools/run_agent.d.ts.map +1 -0
- package/dist/tools/run_agent.js +80 -0
- package/dist/tools/run_agent.js.map +1 -0
- package/dist/tools/run_agent_cli.d.ts +21 -0
- package/dist/tools/run_agent_cli.d.ts.map +1 -0
- package/dist/tools/run_agent_cli.js +129 -0
- package/dist/tools/run_agent_cli.js.map +1 -0
- package/dist/tools/run_agents_parallel.d.ts +34 -0
- package/dist/tools/run_agents_parallel.d.ts.map +1 -0
- package/dist/tools/run_agents_parallel.js +104 -0
- package/dist/tools/run_agents_parallel.js.map +1 -0
- package/dist/tools/run_claude.d.ts +19 -0
- package/dist/tools/run_claude.d.ts.map +1 -0
- package/dist/tools/run_claude.js +99 -0
- package/dist/tools/run_claude.js.map +1 -0
- package/dist/tools/run_cline.d.ts +28 -0
- package/dist/tools/run_cline.d.ts.map +1 -0
- package/dist/tools/run_cline.js +77 -0
- package/dist/tools/run_cline.js.map +1 -0
- package/dist/tools/run_gemini.d.ts +24 -0
- package/dist/tools/run_gemini.d.ts.map +1 -0
- package/dist/tools/run_gemini.js +81 -0
- package/dist/tools/run_gemini.js.map +1 -0
- package/dist/tools/run_hermes.d.ts +25 -0
- package/dist/tools/run_hermes.d.ts.map +1 -0
- package/dist/tools/run_hermes.js +93 -0
- package/dist/tools/run_hermes.js.map +1 -0
- package/dist/tools/run_kilo.d.ts +32 -0
- package/dist/tools/run_kilo.d.ts.map +1 -0
- package/dist/tools/run_kilo.js +92 -0
- package/dist/tools/run_kilo.js.map +1 -0
- package/dist/tools/run_openclaw.d.ts +24 -0
- package/dist/tools/run_openclaw.d.ts.map +1 -0
- package/dist/tools/run_openclaw.js +74 -0
- package/dist/tools/run_openclaw.js.map +1 -0
- package/dist/tools/run_opencode.d.ts +24 -0
- package/dist/tools/run_opencode.d.ts.map +1 -0
- package/dist/tools/run_opencode.js +74 -0
- package/dist/tools/run_opencode.js.map +1 -0
- package/dist/tools/run_qwencli.d.ts +24 -0
- package/dist/tools/run_qwencli.d.ts.map +1 -0
- package/dist/tools/run_qwencli.js +59 -0
- package/dist/tools/run_qwencli.js.map +1 -0
- package/package.json +86 -0
|
@@ -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,22 @@
|
|
|
1
|
+
export interface RunAgentOptions {
|
|
2
|
+
prompt: string;
|
|
3
|
+
agentName?: string;
|
|
4
|
+
sessionId?: string;
|
|
5
|
+
autoResume?: boolean;
|
|
6
|
+
cwd?: string;
|
|
7
|
+
configPath?: string;
|
|
8
|
+
silent?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface RunAgentResult {
|
|
11
|
+
result: string;
|
|
12
|
+
sessionId?: string;
|
|
13
|
+
error?: string;
|
|
14
|
+
rawOutput?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare class QwenCLIRunner {
|
|
17
|
+
private config;
|
|
18
|
+
private timeoutMs;
|
|
19
|
+
constructor();
|
|
20
|
+
runAgent(options: RunAgentOptions): Promise<RunAgentResult>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=QwenCliRunner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QwenCliRunner.d.ts","sourceRoot":"","sources":["../../src/services/QwenCliRunner.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAS;;IAOpB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;CA2FlE"}
|
|
@@ -0,0 +1,90 @@
|
|
|
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
|
+
import { interpolateEnvVars } from '../lib/envUtils.js';
|
|
7
|
+
export class QwenCLIRunner {
|
|
8
|
+
config;
|
|
9
|
+
timeoutMs;
|
|
10
|
+
constructor() {
|
|
11
|
+
this.config = CONFIG.CLAUDE;
|
|
12
|
+
this.timeoutMs = CONFIG.TIMEOUT_MS || 900000;
|
|
13
|
+
}
|
|
14
|
+
async runAgent(options) {
|
|
15
|
+
const { prompt, agentName, autoResume } = options;
|
|
16
|
+
let { sessionId } = options;
|
|
17
|
+
const { PATHS } = this.config;
|
|
18
|
+
// --- Auto Resume ---
|
|
19
|
+
if (autoResume && agentName && !sessionId) {
|
|
20
|
+
const lastId = await getLastSessionId(agentName, options.configPath, 'qwencli');
|
|
21
|
+
if (lastId) {
|
|
22
|
+
sessionId = lastId;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
let customTimeoutMs = this.timeoutMs;
|
|
26
|
+
// --- Isolation ---
|
|
27
|
+
if (agentName) {
|
|
28
|
+
try {
|
|
29
|
+
const agentSettingsPath = resolveConfigPath(path.join(path.dirname(PATHS.SETTINGS), `settings_${agentName}.json`), options.configPath);
|
|
30
|
+
if (fs.existsSync(agentSettingsPath)) {
|
|
31
|
+
let settings = JSON.parse(fs.readFileSync(agentSettingsPath, 'utf8'));
|
|
32
|
+
// --- New interpolation logic ---
|
|
33
|
+
settings = interpolateEnvVars(settings);
|
|
34
|
+
if (settings.env && settings.env.AGENT_TIMEOUT_MS) {
|
|
35
|
+
customTimeoutMs = parseInt(settings.env.AGENT_TIMEOUT_MS, 10) || customTimeoutMs;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (_e) {
|
|
40
|
+
// silent
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// qwen-code CLI: `qwen -p "prompt"` (non-interactive mode via stdin)
|
|
44
|
+
const argsSpawn = ['-p', prompt];
|
|
45
|
+
return new Promise((resolve) => {
|
|
46
|
+
const isWin = process.platform === 'win32';
|
|
47
|
+
// `qwen` binary from @qwen-code/qwen-code global install
|
|
48
|
+
const command = isWin ? 'qwen.cmd' : 'qwen';
|
|
49
|
+
const child = spawn(command, argsSpawn, {
|
|
50
|
+
cwd: options.cwd || process.cwd(),
|
|
51
|
+
shell: isWin,
|
|
52
|
+
windowsHide: true,
|
|
53
|
+
env: {
|
|
54
|
+
...process.env,
|
|
55
|
+
...(agentName ? { OVERMIND_AGENT_NAME: agentName } : {}),
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
let stdout = '';
|
|
59
|
+
let stderr = '';
|
|
60
|
+
if (child.stdout)
|
|
61
|
+
child.stdout.on('data', (d) => (stdout += d.toString()));
|
|
62
|
+
if (child.stderr)
|
|
63
|
+
child.stderr.on('data', (d) => (stderr += d.toString()));
|
|
64
|
+
const timeout = setTimeout(() => {
|
|
65
|
+
child.kill();
|
|
66
|
+
resolve({ result: '', error: 'TIMEOUT', rawOutput: stdout });
|
|
67
|
+
}, customTimeoutMs);
|
|
68
|
+
child.on('close', async (code) => {
|
|
69
|
+
clearTimeout(timeout);
|
|
70
|
+
if (code !== 0 && !stdout) {
|
|
71
|
+
return resolve({ result: '', error: `EXIT_CODE_${code}`, rawOutput: stderr });
|
|
72
|
+
}
|
|
73
|
+
if (agentName && sessionId) {
|
|
74
|
+
await saveSessionId(agentName, sessionId, options.configPath, 'qwencli');
|
|
75
|
+
}
|
|
76
|
+
resolve({
|
|
77
|
+
result: stdout.trim(),
|
|
78
|
+
sessionId,
|
|
79
|
+
rawOutput: stdout,
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
child.on('error', (err) => {
|
|
83
|
+
resolve({ result: '', error: err.message, rawOutput: '' });
|
|
84
|
+
});
|
|
85
|
+
if (child.stdin)
|
|
86
|
+
child.stdin.end();
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=QwenCliRunner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QwenCliRunner.js","sourceRoot":"","sources":["../../src/services/QwenCliRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const configExampleSchema: z.ZodObject<{
|
|
3
|
+
provider: z.ZodEnum<{
|
|
4
|
+
ilmu: "ilmu";
|
|
5
|
+
glm: "glm";
|
|
6
|
+
minimax: "minimax";
|
|
7
|
+
openrouter: "openrouter";
|
|
8
|
+
overmind: "overmind";
|
|
9
|
+
minimaxi: "minimaxi";
|
|
10
|
+
}>;
|
|
11
|
+
}, z.core.$loose>;
|
|
12
|
+
export declare function configExample(args: z.infer<typeof configExampleSchema>): Promise<{
|
|
13
|
+
content: {
|
|
14
|
+
type: "text";
|
|
15
|
+
text: string;
|
|
16
|
+
}[];
|
|
17
|
+
}>;
|
|
18
|
+
//# sourceMappingURL=config_example.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config_example.d.ts","sourceRoot":"","sources":["../../src/tools/config_example.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,mBAAmB;;;;;;;;;iBAMhB,CAAC;AAEjB,wBAAsB,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC;;;;;GAuP5E"}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const configExampleSchema = z
|
|
3
|
+
.object({
|
|
4
|
+
provider: z
|
|
5
|
+
.enum(['glm', 'minimax', 'openrouter', 'ilmu', 'minimaxi', 'overmind'])
|
|
6
|
+
.describe('Le fournisseur pour lequel vous voulez un exemple de configuration.'),
|
|
7
|
+
})
|
|
8
|
+
.passthrough();
|
|
9
|
+
export async function configExample(args) {
|
|
10
|
+
const { provider } = args;
|
|
11
|
+
let text = '';
|
|
12
|
+
const interpolationNotice = `
|
|
13
|
+
💡 **NOUVEAUTÉ : INTERPOLATION DE VARIABLES**
|
|
14
|
+
Vous pouvez désormais utiliser des variables du fichier \`.env\` dans vos fichiers \`settings_[agent].json\`.
|
|
15
|
+
Les variables commençant par \`$\` seront automatiquement remplacées par leur valeur réelle au moment de l'exécution.
|
|
16
|
+
`;
|
|
17
|
+
switch (provider) {
|
|
18
|
+
case 'glm':
|
|
19
|
+
text = `🚀 **EXEMPLE DE CONFIGURATION POUR GLM / Z.AI (ANTHROPIC PROXY)**
|
|
20
|
+
|
|
21
|
+
### 📂 settings_[nom_agent].json
|
|
22
|
+
\`\`\`json
|
|
23
|
+
{
|
|
24
|
+
"env": {
|
|
25
|
+
"ANTHROPIC_MODEL": "$Z_AI_MODEL", // Se réfère à Z_AI_MODEL dans le .env
|
|
26
|
+
"ANTHROPIC_AUTH_TOKEN": "$Z_AI_API_KEY",
|
|
27
|
+
"ANTHROPIC_BASE_URL": "$Z_AI_BASE_URL",
|
|
28
|
+
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "claude-sonnet-4-6",
|
|
29
|
+
"ANTHROPIC_DEFAULT_OPUS_MODEL": "claude-opus-4-7",
|
|
30
|
+
"ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-4-6",
|
|
31
|
+
"API_TIMEOUT_MS": "3000000"
|
|
32
|
+
},
|
|
33
|
+
"enableAllProjectMcpServers": false,
|
|
34
|
+
"enabledMcpjsonServers": [
|
|
35
|
+
"postgresql-server",
|
|
36
|
+
"memory"
|
|
37
|
+
],
|
|
38
|
+
"agent": "nom_agent",
|
|
39
|
+
"runner": "claude"
|
|
40
|
+
}
|
|
41
|
+
\`\`\`
|
|
42
|
+
${interpolationNotice}`;
|
|
43
|
+
break;
|
|
44
|
+
case 'ilmu':
|
|
45
|
+
text = `🚀 **EXEMPLE DE CONFIGURATION POUR ILMU AI**
|
|
46
|
+
|
|
47
|
+
### 📂 settings_[nom_agent].json
|
|
48
|
+
\`\`\`json
|
|
49
|
+
{
|
|
50
|
+
"env": {
|
|
51
|
+
"ANTHROPIC_MODEL": "$Z_AI_MODEL", // Interpolé depuis le .env
|
|
52
|
+
"ANTHROPIC_AUTH_TOKEN": "$Z_AI_API_KEY",
|
|
53
|
+
"ANTHROPIC_BASE_URL": "$Z_AI_BASE_URL",
|
|
54
|
+
"API_TIMEOUT_MS": "900000"
|
|
55
|
+
},
|
|
56
|
+
"enableAllProjectMcpServers": false,
|
|
57
|
+
"enabledMcpjsonServers": [
|
|
58
|
+
"postgresql-server",
|
|
59
|
+
"memory",
|
|
60
|
+
"discord-server"
|
|
61
|
+
],
|
|
62
|
+
"agent": "ilmu_agent",
|
|
63
|
+
"runner": "kilo"
|
|
64
|
+
}
|
|
65
|
+
\`\`\`
|
|
66
|
+
${interpolationNotice}`;
|
|
67
|
+
break;
|
|
68
|
+
case 'minimax':
|
|
69
|
+
text = `🚀 **EXEMPLE DE CONFIGURATION POUR MINIMAX (VIA PROXY ANTHROPIC)**
|
|
70
|
+
|
|
71
|
+
### 📂 settings_[nom_agent].json
|
|
72
|
+
\`\`\`json
|
|
73
|
+
{
|
|
74
|
+
"env": {
|
|
75
|
+
"ANTHROPIC_BASE_URL": "https://api.minimax.io/anthropic",
|
|
76
|
+
"ANTHROPIC_AUTH_TOKEN": "$MINIMAX_API_KEY", // Utilisez une variable .env
|
|
77
|
+
"API_TIMEOUT_MS": "3000000",
|
|
78
|
+
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": 1,
|
|
79
|
+
"ANTHROPIC_MODEL": "The_Chaos_Prophet",
|
|
80
|
+
"ANTHROPIC_SMALL_FAST_MODEL": "MiniMax-M2",
|
|
81
|
+
"ANTHROPIC_DEFAULT_SONNET_MODEL": "MiniMax-M2",
|
|
82
|
+
"ANTHROPIC_DEFAULT_OPUS_MODEL": "MiniMax-M2",
|
|
83
|
+
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "MiniMax-M2"
|
|
84
|
+
},
|
|
85
|
+
"agent": "nom_agent",
|
|
86
|
+
"runner": "claude"
|
|
87
|
+
}
|
|
88
|
+
\`\`\`
|
|
89
|
+
${interpolationNotice}`;
|
|
90
|
+
break;
|
|
91
|
+
case 'openrouter':
|
|
92
|
+
text = `🚀 **EXEMPLE DE CONFIGURATION POUR OPENROUTER (VIA PROXY ANTHROPIC)**
|
|
93
|
+
|
|
94
|
+
### 📂 settings_[nom_agent].json
|
|
95
|
+
\`\`\`json
|
|
96
|
+
{
|
|
97
|
+
"env": {
|
|
98
|
+
"ANTHROPIC_BASE_URL": "https://openrouter.ai/api/v1",
|
|
99
|
+
"ANTHROPIC_AUTH_TOKEN": "$OPENROUTER_API_KEY", // Utilisez une variable .env
|
|
100
|
+
"API_TIMEOUT_MS": "3000000",
|
|
101
|
+
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": 1,
|
|
102
|
+
"ANTHROPIC_MODEL": "anthropic/claude-3-5-sonnet",
|
|
103
|
+
"ANTHROPIC_SMALL_FAST_MODEL": "anthropic/claude-3-haiku",
|
|
104
|
+
"ANTHROPIC_DEFAULT_SONNET_MODEL": "anthropic/claude-3-5-sonnet",
|
|
105
|
+
"ANTHROPIC_DEFAULT_OPUS_MODEL": "anthropic/claude-3-opus",
|
|
106
|
+
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "anthropic/claude-3-haiku"
|
|
107
|
+
},
|
|
108
|
+
"agent": "nom_agent",
|
|
109
|
+
"runner": "claude"
|
|
110
|
+
}
|
|
111
|
+
\`\`\`
|
|
112
|
+
${interpolationNotice}`;
|
|
113
|
+
break;
|
|
114
|
+
case 'minimaxi':
|
|
115
|
+
text = `🚀 **EXEMPLE DE CONFIGURATION POUR MINIMAXI (VERSION ALTERNATIVE)**
|
|
116
|
+
|
|
117
|
+
### 📂 settings_[nom_agent].json
|
|
118
|
+
\`\`\`json
|
|
119
|
+
{
|
|
120
|
+
"env": {
|
|
121
|
+
"ANTHROPIC_MODEL": "MiniMax-Text-01",
|
|
122
|
+
"ANTHROPIC_AUTH_TOKEN": "$MINIMAXI_API_KEY", // Configuré dans le .env
|
|
123
|
+
"ANTHROPIC_BASE_URL": "$MINIMAXI_BASE_URL",
|
|
124
|
+
"ANTHROPIC_SMALL_FAST_MODEL": "MiniMax-Text-01",
|
|
125
|
+
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "MiniMax-Text-01",
|
|
126
|
+
"ANTHROPIC_DEFAULT_OPUS_MODEL": "MiniMax-Text-01",
|
|
127
|
+
"ANTHROPIC_DEFAULT_SONNET_MODEL": "MiniMax-Text-01",
|
|
128
|
+
"API_TIMEOUT_MS": "900000",
|
|
129
|
+
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
|
|
130
|
+
"agent": "minimax_agent"
|
|
131
|
+
},
|
|
132
|
+
"agent": "minimax_agent",
|
|
133
|
+
"runner": "claude"
|
|
134
|
+
}
|
|
135
|
+
\`\`\`
|
|
136
|
+
${interpolationNotice}`;
|
|
137
|
+
break;
|
|
138
|
+
// ─── OVERMIND: Guide complet $VAR + FALLBACK TOKENS ───
|
|
139
|
+
case 'overmind':
|
|
140
|
+
text = `🎯 **GUIDE COMPLET : SUBSTITUTION $VAR ET FALLBACK TOKENS**
|
|
141
|
+
|
|
142
|
+
Overmind supporte deux mécanismes puissant pour vos agents :
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
### 1️⃣ SUBSTITUTION $VAR (tous les runners)
|
|
147
|
+
|
|
148
|
+
Les settings de vos agents peuvent référencer des variables d'environnement du \`.env\` avec la syntaxe \`$NOM_VARIABLE\`.
|
|
149
|
+
|
|
150
|
+
\`\`\`json
|
|
151
|
+
{
|
|
152
|
+
"env": {
|
|
153
|
+
"ANTHROPIC_AUTH_TOKEN": "$ANTHROPIC_AUTH_TOKEN_1",
|
|
154
|
+
"ANTHROPIC_BASE_URL": "$Z_AI_BASE_URL"
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
\`\`\`
|
|
158
|
+
|
|
159
|
+
Au runtime, Overmind remplace automatiquement \`$ANTHROPIC_AUTH_TOKEN_1\` par sa valeur réelle depuis le \`.env\`.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
### 2️⃣ RETRY AUTOMATIQUE SUR ERREUR 401 (ClaudeRunner + KiloRunner)
|
|
164
|
+
|
|
165
|
+
Si une erreur d'authentification (401) se produit, Overmind peut RETENTER automatiquement avec des tokens de secours.
|
|
166
|
+
|
|
167
|
+
**Détection :** \`401\`, \`unauthorized\`, \`invalid api key\`, \`authentication failed\`, \`auth error\`
|
|
168
|
+
|
|
169
|
+
**Flow :** Token primaire → AUTH_FALLBACK_1 → AUTH_FALLBACK_2 → AUTH_FALLBACK_3 → ÉCHEC
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
### 📂 EXEMPLE COMPLET : ClaudeRunner avec fallback
|
|
174
|
+
|
|
175
|
+
\`\`\`json
|
|
176
|
+
{
|
|
177
|
+
"model": "claude-sonnet-4-20250514",
|
|
178
|
+
"env": {
|
|
179
|
+
"ANTHROPIC_AUTH_TOKEN": "$ANTHROPIC_AUTH_TOKEN",
|
|
180
|
+
"AUTH_FALLBACK_1": "$ANTHROPIC_AUTH_TOKEN_1",
|
|
181
|
+
"AUTH_FALLBACK_2": "$ANTHROPIC_AUTH_TOKEN_2",
|
|
182
|
+
"AUTH_FALLBACK_3": "$ANTHROPIC_AUTH_TOKEN_3"
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
\`\`\`
|
|
186
|
+
|
|
187
|
+
**.env associé :**
|
|
188
|
+
\`\`\`
|
|
189
|
+
ANTHROPIC_AUTH_TOKEN=sk-cp-primary... # Token principal ( utilisation normale )
|
|
190
|
+
ANTHROPIC_AUTH_TOKEN_1=sk-cp-xxx... # Fallback #1
|
|
191
|
+
ANTHROPIC_AUTH_TOKEN_2=sk-cp-yyy... # Fallback #2
|
|
192
|
+
ANTHROPIC_AUTH_TOKEN_3=sk-cp-zzz... # Fallback #3
|
|
193
|
+
\`\`\`
|
|
194
|
+
|
|
195
|
+
**Comment ça marche :**
|
|
196
|
+
1. L'agent commence avec \`ANTHROPIC_AUTH_TOKEN\` = \`$ANTHROPIC_AUTH_TOKEN\` → résolu → \`sk-cp-primary...\`
|
|
197
|
+
2. Si erreur 401 → retry avec \`AUTH_FALLBACK_1\` → \`sk-cp-xxx...\`
|
|
198
|
+
3. Si erreur 401 → retry avec \`AUTH_FALLBACK_2\` → \`sk-cp-yyy...\`
|
|
199
|
+
4. Si erreur 401 → retry avec \`AUTH_FALLBACK_3\` → \`sk-cp-zzz...\`
|
|
200
|
+
5. Si erreur 401 → \`AUTH_ERROR_ALL_FALLBACKS_EXHAUSTED\`
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
### 📂 EXEMPLE COMPLET : KiloRunner avec fallback
|
|
205
|
+
|
|
206
|
+
\`\`\`json
|
|
207
|
+
{
|
|
208
|
+
"model": "claude-sonnet-4-20250514",
|
|
209
|
+
"env": {
|
|
210
|
+
"OPENAI_API_KEY": "$ANTHROPIC_AUTH_TOKEN",
|
|
211
|
+
"AUTH_FALLBACK_1": "$ANTHROPIC_AUTH_TOKEN_1",
|
|
212
|
+
"AUTH_FALLBACK_2": "$ANTHROPIC_AUTH_TOKEN_2",
|
|
213
|
+
"AUTH_FALLBACK_3": "$ANTHROPIC_AUTH_TOKEN_3"
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
\`\`\`
|
|
217
|
+
|
|
218
|
+
> Kilo utilise \`OPENAI_API_KEY\` comme clé primaire (compatible OpenAI / OpenRouter /etc.).
|
|
219
|
+
|
|
220
|
+
> Kilo utilise \`OPENAI_API_KEY\` comme clé primaire (compatible OpenAI-compatible API).
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
### 📂 EXEMPLE : Variable $VAR simple (sans fallback)
|
|
225
|
+
|
|
226
|
+
\`\`\`json
|
|
227
|
+
{
|
|
228
|
+
"model": "claude-sonnet-4-20250514",
|
|
229
|
+
"env": {
|
|
230
|
+
"ANTHROPIC_AUTH_TOKEN": "$ANTHROPIC_AUTH_TOKEN",
|
|
231
|
+
"ANTHROPIC_BASE_URL": "$Z_AI_BASE_URL",
|
|
232
|
+
"API_TIMEOUT_MS": "$API_TIMEOUT_MS"
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
\`\`\`
|
|
236
|
+
|
|
237
|
+
Les \`$VAR\` peuvent être sur n'importe quelle valeur de \`env\`.
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
### ⚠️ RÈGLES IMPORTANTES
|
|
242
|
+
|
|
243
|
+
- Les clés \`AUTH_FALLBACK_1\`, \`AUTH_FALLBACK_2\`, \`AUTH_FALLBACK_3\` sont réservées par Overmind pour le retry 401.
|
|
244
|
+
- La substitution est à **un seul niveau** : \`$MINIMAXI_API_KEY\` est remplacé, mais pas récursivement.
|
|
245
|
+
- Les tokens sont résolution **avant** le spawn de l'agent.
|
|
246
|
+
- Le retry ne fonctionne que sur erreur **401/auth** — pas sur les erreurs de réseau ou rate limit.`;
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
return {
|
|
250
|
+
content: [{ type: 'text', text }],
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=config_example.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config_example.js","sourceRoot":"","sources":["../../src/tools/config_example.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC;SACR,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;SACtE,QAAQ,CAAC,qEAAqE,CAAC;CACnF,CAAC;KACD,WAAW,EAAE,CAAC;AAEjB,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAyC;IAC3E,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAC1B,IAAI,IAAI,GAAG,EAAE,CAAC;IAEd,MAAM,mBAAmB,GAAG;;;;GAI3B,CAAC;IAEF,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,KAAK;YACR,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;EAuBX,mBAAmB,EAAE,CAAC;YAClB,MAAM;QACR,KAAK,MAAM;YACT,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;EAqBX,mBAAmB,EAAE,CAAC;YAClB,MAAM;QACR,KAAK,SAAS;YACZ,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;EAoBX,mBAAmB,EAAE,CAAC;YAClB,MAAM;QACR,KAAK,YAAY;YACf,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;EAoBX,mBAAmB,EAAE,CAAC;YAClB,MAAM;QACR,KAAK,UAAU;YACb,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;EAqBX,mBAAmB,EAAE,CAAC;YAClB,MAAM;QAER,yDAAyD;QACzD,KAAK,UAAU;YACb,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oGA0GuF,CAAC;YAC/F,MAAM;IACV,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC;KAC3C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const createAgentSchema: z.ZodObject<{
|
|
3
|
+
name: z.ZodString;
|
|
4
|
+
prompt: z.ZodString;
|
|
5
|
+
runner: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
6
|
+
claude: "claude";
|
|
7
|
+
gemini: "gemini";
|
|
8
|
+
kilo: "kilo";
|
|
9
|
+
qwencli: "qwencli";
|
|
10
|
+
hermes: "hermes";
|
|
11
|
+
openclaw: "openclaw";
|
|
12
|
+
cline: "cline";
|
|
13
|
+
opencode: "opencode";
|
|
14
|
+
}>>>;
|
|
15
|
+
model: z.ZodOptional<z.ZodString>;
|
|
16
|
+
copyEnvFrom: z.ZodOptional<z.ZodString>;
|
|
17
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
18
|
+
code: "code";
|
|
19
|
+
architect: "architect";
|
|
20
|
+
ask: "ask";
|
|
21
|
+
debug: "debug";
|
|
22
|
+
orchestrator: "orchestrator";
|
|
23
|
+
plan: "plan";
|
|
24
|
+
act: "act";
|
|
25
|
+
}>>;
|
|
26
|
+
cliPath: z.ZodOptional<z.ZodString>;
|
|
27
|
+
}, z.core.$strip>;
|
|
28
|
+
export declare function createAgent(args: z.infer<typeof createAgentSchema>): Promise<{
|
|
29
|
+
content: {
|
|
30
|
+
type: "text";
|
|
31
|
+
text: string;
|
|
32
|
+
}[];
|
|
33
|
+
isError: boolean;
|
|
34
|
+
} | {
|
|
35
|
+
content: {
|
|
36
|
+
type: "text";
|
|
37
|
+
text: string;
|
|
38
|
+
}[];
|
|
39
|
+
isError?: undefined;
|
|
40
|
+
}>;
|
|
41
|
+
//# 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;;;;;;;;;;;;;;;;;;;;;;;;;iBAuC5B,CAAC;AAEH,wBAAsB,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC;;;;;;;;;;;;GAuDxE"}
|
|
@@ -0,0 +1,75 @@
|
|
|
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 unique de l'agent (ex: 'sniper_analyst'). Ce nom servira d'identifiant pour sa mémoire sémantique isolée."),
|
|
9
|
+
prompt: z
|
|
10
|
+
.string()
|
|
11
|
+
.describe("Le prompt système OBLIGATOIRE. Tu DOIS y définir le persona de l'agent, ses missions, les outils MCP qu'il est autorisé à utiliser, et lui ordonner de consulter/enrichir systématiquement sa mémoire Overmind."),
|
|
12
|
+
runner: z
|
|
13
|
+
.enum(['claude', 'gemini', 'kilo', 'qwencli', 'openclaw', 'cline', 'opencode', 'hermes'])
|
|
14
|
+
.optional()
|
|
15
|
+
.default('claude')
|
|
16
|
+
.describe('Type de runner pour cet agent (défaut: claude)'),
|
|
17
|
+
model: z
|
|
18
|
+
.string()
|
|
19
|
+
.optional()
|
|
20
|
+
.describe("Surnom original ou Modèle technique (ex: 'The Chaos Prophet', 'claude-sonnet-4-6'). Le protocole 'Custom-Nickname' d'Overmind permet d'assigner n'importe quel nom ici pour personnaliser votre Cortex. Le runner se chargera automatiquement de mapper ce surnom vers un modèle valide pour l'API."),
|
|
21
|
+
copyEnvFrom: z
|
|
22
|
+
.string()
|
|
23
|
+
.optional()
|
|
24
|
+
.describe("Chemin vers un settings.json existant pour copier les variables d'environnement (ex: .claude/settingsM.json)"),
|
|
25
|
+
// Options spécifiques à certains runners
|
|
26
|
+
mode: z
|
|
27
|
+
.enum(['code', 'architect', 'ask', 'debug', 'orchestrator', 'plan', 'act'])
|
|
28
|
+
.optional()
|
|
29
|
+
.describe('Mode spécifique pour Kilo (code, architect, ask, debug, orchestrator) ou Cline (plan, act)'),
|
|
30
|
+
cliPath: z
|
|
31
|
+
.string()
|
|
32
|
+
.optional()
|
|
33
|
+
.describe('Chemin vers l\'exécutable CLI (ex: "cline", "opencode")'),
|
|
34
|
+
});
|
|
35
|
+
export async function createAgent(args) {
|
|
36
|
+
const manager = new AgentManager();
|
|
37
|
+
const { name, prompt, runner, model, copyEnvFrom, mode, cliPath } = args;
|
|
38
|
+
const currentFileUrl = import.meta.url;
|
|
39
|
+
const currentFilePath = fileURLToPath(currentFileUrl);
|
|
40
|
+
const projectRoot = path.resolve(path.dirname(currentFilePath), '../../');
|
|
41
|
+
const defaultModel = process.env.ANTHROPIC_MODEL || 'claude-sonnet-4-6';
|
|
42
|
+
const result = await manager.createAgent(name, prompt, model || defaultModel, copyEnvFrom, projectRoot, runner, mode, cliPath);
|
|
43
|
+
if (result.error === 'INVALID_NAME') {
|
|
44
|
+
return {
|
|
45
|
+
content: [
|
|
46
|
+
{
|
|
47
|
+
type: 'text',
|
|
48
|
+
text: `❌ **Nom d'agent invalide**\n\nLe nom '${name}' contient des caractères interdits.`,
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
isError: true,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
// Message de succès adapté selon le runner
|
|
55
|
+
const runnerInfo = {
|
|
56
|
+
claude: 'Claude Code',
|
|
57
|
+
gemini: 'Gemini',
|
|
58
|
+
kilo: 'Kilocode',
|
|
59
|
+
qwencli: 'Qwen CLI',
|
|
60
|
+
openclaw: 'OpenClaw',
|
|
61
|
+
cline: 'Cline',
|
|
62
|
+
opencode: 'OpenCode',
|
|
63
|
+
hermes: 'Nous Hermes',
|
|
64
|
+
};
|
|
65
|
+
const runnerName = runnerInfo[runner] || 'Claude Code';
|
|
66
|
+
return {
|
|
67
|
+
content: [
|
|
68
|
+
{
|
|
69
|
+
type: 'text',
|
|
70
|
+
text: `[OK] Agent '${name}' créé avec succès pour ${runnerName} !\n\n[FILES] Fichiers créés :\n- Prompt : ${result.promptPath}\n- Config : ${result.settingsPath}\n\n[RUN] Pour lancer cet agent avec le runner ${runner} :\n\`\`\`bash\n# Via l'outil MCP run_agent:\nrun_agent(runner: "${runner}", agentName: "${name}", prompt: "votre prompt")\n\`\`\`\n\n[INFO] **Runners disponibles:**\n- claude: Claude Code (défaut)\n- gemini: Gemini\n- kilo: Kilocode${mode ? ` (mode: ${mode})` : ''}\n- qwencli: Qwen CLI\n- openclaw: OpenClaw\n- cline: Cline${mode ? ` (mode: ${mode})` : ''}\n- opencode: OpenCode\n- hermes: Nous Hermes`,
|
|
71
|
+
},
|
|
72
|
+
],
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# 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,CACP,+GAA+G,CAChH;IACH,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,CACP,iNAAiN,CAClN;IACH,MAAM,EAAE,CAAC;SACN,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;SACxF,QAAQ,EAAE;SACV,OAAO,CAAC,QAAQ,CAAC;SACjB,QAAQ,CAAC,gDAAgD,CAAC;IAC7D,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,qSAAqS,CACtS;IACH,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,8GAA8G,CAC/G;IACH,yCAAyC;IACzC,IAAI,EAAE,CAAC;SACJ,IAAI,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;SAC1E,QAAQ,EAAE;SACV,QAAQ,CACP,4FAA4F,CAC7F;IACH,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,yDAAyD,CAAC;CACvE,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAuC;IACvE,MAAM,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;IACnC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAEzE,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IACvC,MAAM,eAAe,GAAG,aAAa,CAAC,cAAc,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,CAAC;IAE1E,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,mBAAmB,CAAC;IAExE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CACtC,IAAI,EACJ,MAAM,EACN,KAAK,IAAI,YAAY,EACrB,WAAW,EACX,WAAW,EACX,MAAM,EACN,IAAI,EACJ,OAAO,CACR,CAAC;IAEF,IAAI,MAAM,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;QACpC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,yCAAyC,IAAI,sCAAsC;iBAC1F;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,2CAA2C;IAC3C,MAAM,UAAU,GAAG;QACjB,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,QAAQ;QAChB,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,UAAU;QACnB,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,aAAa;KACtB,CAAC;IAEF,MAAM,UAAU,GAAG,UAAU,CAAC,MAAiC,CAAC,IAAI,aAAa,CAAC;IAElF,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,eAAe,IAAI,2BAA2B,UAAU,8CAA8C,MAAM,CAAC,UAAU,gBAAgB,MAAM,CAAC,YAAY,kDAAkD,MAAM,oEAAoE,MAAM,kBAAkB,IAAI,4IAA4I,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,8DAA8D,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,+CAA+C;aAC9mB;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const getAgentConfigsSchema: z.ZodObject<{
|
|
3
|
+
name: z.ZodString;
|
|
4
|
+
}, z.core.$strip>;
|
|
5
|
+
export declare function getAgentConfigs(args: z.infer<typeof getAgentConfigsSchema>): Promise<{
|
|
6
|
+
content: {
|
|
7
|
+
type: "text";
|
|
8
|
+
text: string;
|
|
9
|
+
}[];
|
|
10
|
+
isError?: undefined;
|
|
11
|
+
} | {
|
|
12
|
+
isError: boolean;
|
|
13
|
+
content: {
|
|
14
|
+
type: "text";
|
|
15
|
+
text: string;
|
|
16
|
+
}[];
|
|
17
|
+
}>;
|
|
18
|
+
//# sourceMappingURL=get_agent_configs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_agent_configs.d.ts","sourceRoot":"","sources":["../../src/tools/get_agent_configs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,qBAAqB;;iBAEhC,CAAC;AAEH,wBAAsB,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC;;;;;;;;;;;;GAuChF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { AgentManager } from '../services/AgentManager.js';
|
|
3
|
+
export const getAgentConfigsSchema = z.object({
|
|
4
|
+
name: z.string().describe("Nom de l'agent dont on veut voir les configurations."),
|
|
5
|
+
});
|
|
6
|
+
export async function getAgentConfigs(args) {
|
|
7
|
+
const manager = new AgentManager();
|
|
8
|
+
const { name } = args;
|
|
9
|
+
try {
|
|
10
|
+
const configs = await manager.getDetailedConfigs(name);
|
|
11
|
+
let response = `🧠 **CONFIGURATION HUB — AGENT : ${name.toUpperCase()}**\n\n`;
|
|
12
|
+
for (const [file, content] of Object.entries(configs)) {
|
|
13
|
+
response += `#### 📂 ${file}\n`;
|
|
14
|
+
if (content === 'MISSING') {
|
|
15
|
+
const solution = file === '.mcp.json'
|
|
16
|
+
? `Utilisez 'update_agent_config' pour synchroniser les serveurs MCP.`
|
|
17
|
+
: `Utilisez 'create_agent' pour initialiser cet agent.`;
|
|
18
|
+
response += `> [!CAUTION]\n`;
|
|
19
|
+
response += `> **Fichier non trouvé.**\n`;
|
|
20
|
+
response += `> 💡 Suggestion: ${solution}\n\n`;
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
const ext = file.endsWith('.md') ? 'markdown' : 'json';
|
|
24
|
+
response += `\`\`\`${ext}\n${content}\n\`\`\`\n\n`;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return {
|
|
28
|
+
content: [{ type: 'text', text: response }],
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
return {
|
|
33
|
+
isError: true,
|
|
34
|
+
content: [
|
|
35
|
+
{
|
|
36
|
+
type: 'text',
|
|
37
|
+
text: `❌ Erreur lors de la récupération des configs pour ${name} : ${e instanceof Error ? e.message : String(e)}`,
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=get_agent_configs.js.map
|