@elvatis_com/elvatis-mcp 0.2.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.
- package/.env.example +61 -0
- package/LICENSE +190 -0
- package/README.md +471 -0
- package/dist/config.d.ts +39 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +45 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +146 -0
- package/dist/index.js.map +1 -0
- package/dist/spawn.d.ts +12 -0
- package/dist/spawn.d.ts.map +1 -0
- package/dist/spawn.js +55 -0
- package/dist/spawn.js.map +1 -0
- package/dist/ssh.d.ts +28 -0
- package/dist/ssh.d.ts.map +1 -0
- package/dist/ssh.js +171 -0
- package/dist/ssh.js.map +1 -0
- package/dist/tools/codex.d.ts +61 -0
- package/dist/tools/codex.d.ts.map +1 -0
- package/dist/tools/codex.js +63 -0
- package/dist/tools/codex.js.map +1 -0
- package/dist/tools/cron.d.ts +58 -0
- package/dist/tools/cron.d.ts.map +1 -0
- package/dist/tools/cron.js +88 -0
- package/dist/tools/cron.js.map +1 -0
- package/dist/tools/gemini.d.ts +75 -0
- package/dist/tools/gemini.d.ts.map +1 -0
- package/dist/tools/gemini.js +72 -0
- package/dist/tools/gemini.js.map +1 -0
- package/dist/tools/help.d.ts +31 -0
- package/dist/tools/help.d.ts.map +1 -0
- package/dist/tools/help.js +39 -0
- package/dist/tools/help.js.map +1 -0
- package/dist/tools/home.d.ts +108 -0
- package/dist/tools/home.d.ts.map +1 -0
- package/dist/tools/home.js +141 -0
- package/dist/tools/home.js.map +1 -0
- package/dist/tools/local-llm.d.ts +115 -0
- package/dist/tools/local-llm.d.ts.map +1 -0
- package/dist/tools/local-llm.js +123 -0
- package/dist/tools/local-llm.js.map +1 -0
- package/dist/tools/memory.d.ts +52 -0
- package/dist/tools/memory.d.ts.map +1 -0
- package/dist/tools/memory.js +92 -0
- package/dist/tools/memory.js.map +1 -0
- package/dist/tools/openclaw.d.ts +88 -0
- package/dist/tools/openclaw.d.ts.map +1 -0
- package/dist/tools/openclaw.js +119 -0
- package/dist/tools/openclaw.js.map +1 -0
- package/dist/tools/routing-rules.d.ts +21 -0
- package/dist/tools/routing-rules.d.ts.map +1 -0
- package/dist/tools/routing-rules.js +149 -0
- package/dist/tools/routing-rules.js.map +1 -0
- package/dist/tools/splitter.d.ts +49 -0
- package/dist/tools/splitter.d.ts.map +1 -0
- package/dist/tools/splitter.js +375 -0
- package/dist/tools/splitter.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Shared routing rules and constants used by mcp_help and prompt_split.
|
|
4
|
+
*
|
|
5
|
+
* Extracted so both tools operate from the same knowledge base.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.ROUTING_GUIDE = exports.KNOWN_AGENTS = exports.ROUTING_RULES = void 0;
|
|
9
|
+
exports.matchRules = matchRules;
|
|
10
|
+
exports.ROUTING_RULES = [
|
|
11
|
+
{
|
|
12
|
+
tool: 'codex_run',
|
|
13
|
+
keywords: [
|
|
14
|
+
'code', 'debug', 'refactor', 'function', 'class', 'bug', 'test', 'script',
|
|
15
|
+
'typescript', 'javascript', 'python', 'error', 'compile', 'build', 'lint',
|
|
16
|
+
'implement', 'write a', 'fix the', 'generate code', 'shell', 'bash',
|
|
17
|
+
],
|
|
18
|
+
reason: 'Coding and file-editing tasks are Codex\'s specialty.',
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
tool: 'gemini_run',
|
|
22
|
+
keywords: [
|
|
23
|
+
'summarize', 'explain', 'analyze', 'what is', 'describe', 'translate',
|
|
24
|
+
'image', 'photo', 'screenshot', 'long', 'document', 'pdf', 'compare',
|
|
25
|
+
'research', 'overview', 'draft', 'write an email', 'second opinion',
|
|
26
|
+
],
|
|
27
|
+
reason: 'Gemini excels at analysis, long-context tasks (1M tokens), and multimodal input.',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
tool: 'openclaw_run',
|
|
31
|
+
keywords: [
|
|
32
|
+
'trade', 'trading', 'portfolio', 'stock', 'position', 'pnl', 'market',
|
|
33
|
+
'plugin', 'automation', 'workflow', 'whatsapp',
|
|
34
|
+
'telegram', 'notify', 'alert', 'openclaw',
|
|
35
|
+
],
|
|
36
|
+
reason: 'OpenClaw has all trading plugins and custom workflows installed.',
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
tool: 'local_llm_run',
|
|
40
|
+
keywords: [
|
|
41
|
+
'quick', 'simple', 'local', 'offline', 'private', 'classify', 'label',
|
|
42
|
+
'rewrite', 'format', 'short answer', 'yes or no', 'extract', 'parse',
|
|
43
|
+
'convert', 'json', 'csv', 'rephrase', 'proofread', 'grammar',
|
|
44
|
+
],
|
|
45
|
+
reason: 'Local LLM is free, fast, and private. Best for simple classification, formatting, and extraction tasks.',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
tool: 'home_light / home_scene / home_sensors / home_climate / home_vacuum',
|
|
49
|
+
keywords: [
|
|
50
|
+
'light', 'lamp', 'bright', 'scene', 'temperature', 'thermostat',
|
|
51
|
+
'vacuum', 'sensor', 'humidity', 'co2', 'room', 'living room', 'bedroom',
|
|
52
|
+
'kitchen', 'home assistant', 'smart home',
|
|
53
|
+
],
|
|
54
|
+
reason: 'Home tools connect directly to Home Assistant.',
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
tool: 'openclaw_memory_write / openclaw_memory_read_today / openclaw_memory_search',
|
|
58
|
+
keywords: [
|
|
59
|
+
'remember', 'note', 'memory', 'log', 'record', 'save this', 'remind',
|
|
60
|
+
'what did i', 'yesterday', 'last week', 'wrote down',
|
|
61
|
+
],
|
|
62
|
+
reason: 'Memory tools read and write the daily log on the OpenClaw server.',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
tool: 'openclaw_cron_list / openclaw_cron_run / openclaw_cron_status',
|
|
66
|
+
keywords: [
|
|
67
|
+
'cron', 'scheduled', 'job', 'task', 'trigger', 'run now', 'schedule',
|
|
68
|
+
],
|
|
69
|
+
reason: 'Cron tools manage and trigger OpenClaw scheduled jobs.',
|
|
70
|
+
},
|
|
71
|
+
];
|
|
72
|
+
/** Score routing rules against a text. Returns matches sorted by score (highest first). */
|
|
73
|
+
function matchRules(text) {
|
|
74
|
+
const lower = text.toLowerCase();
|
|
75
|
+
const matches = [];
|
|
76
|
+
for (const rule of exports.ROUTING_RULES) {
|
|
77
|
+
const score = rule.keywords.filter(kw => lower.includes(kw)).length;
|
|
78
|
+
if (score > 0) {
|
|
79
|
+
matches.push({ tool: rule.tool, reason: rule.reason, score });
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
matches.sort((a, b) => b.score - a.score);
|
|
83
|
+
return matches;
|
|
84
|
+
}
|
|
85
|
+
/** Known single-call tool names (for validation in prompt_split). */
|
|
86
|
+
exports.KNOWN_AGENTS = new Set([
|
|
87
|
+
'codex_run', 'gemini_run', 'openclaw_run', 'local_llm_run',
|
|
88
|
+
'home_light', 'home_scene', 'home_sensors', 'home_climate',
|
|
89
|
+
'home_vacuum', 'home_get_state',
|
|
90
|
+
'openclaw_memory_write', 'openclaw_memory_read_today', 'openclaw_memory_search',
|
|
91
|
+
'openclaw_cron_list', 'openclaw_cron_run', 'openclaw_cron_status',
|
|
92
|
+
]);
|
|
93
|
+
exports.ROUTING_GUIDE = `
|
|
94
|
+
# elvatis-mcp: Sub-Agent Routing Guide
|
|
95
|
+
|
|
96
|
+
## Sub-Agents (spawn a separate AI to handle a task)
|
|
97
|
+
|
|
98
|
+
| Tool | Backend | Auth | Strengths |
|
|
99
|
+
|------|---------|------|-----------|
|
|
100
|
+
| \`openclaw_run\` | OpenClaw (claude/gpt/gemini + plugins) | SSH key | Trading plugins, automations, custom workflows, multi-step tasks |
|
|
101
|
+
| \`gemini_run\` | Google Gemini | Google login (cached) | Long context (1M tokens), multimodal, fast analysis, second opinions |
|
|
102
|
+
| \`codex_run\` | OpenAI Codex | OpenAI login (cached) | Coding, debugging, refactoring, file editing, shell scripting |
|
|
103
|
+
| \`local_llm_run\` | Local LLM (Ollama/LM Studio/llama.cpp) | None | Free, private, fast for simple tasks (classify, format, extract, rewrite) |
|
|
104
|
+
|
|
105
|
+
## Home Automation Tools (direct Home Assistant calls)
|
|
106
|
+
|
|
107
|
+
| Tool | What it does |
|
|
108
|
+
|------|-------------|
|
|
109
|
+
| \`home_light\` | Control any light (on/off/brightness/color) |
|
|
110
|
+
| \`home_climate\` | Set thermostat temperature and HVAC mode |
|
|
111
|
+
| \`home_scene\` | Activate a Hue scene in a room |
|
|
112
|
+
| \`home_vacuum\` | Start, stop, or dock the robot vacuum |
|
|
113
|
+
| \`home_sensors\` | Read all temp/humidity/CO2 sensors |
|
|
114
|
+
| \`home_get_state\` | Read any Home Assistant entity |
|
|
115
|
+
|
|
116
|
+
## Memory Tools (OpenClaw server)
|
|
117
|
+
|
|
118
|
+
| Tool | What it does |
|
|
119
|
+
|------|-------------|
|
|
120
|
+
| \`openclaw_memory_write\` | Write a note to today's log |
|
|
121
|
+
| \`openclaw_memory_read_today\` | Read today's memory log |
|
|
122
|
+
| \`openclaw_memory_search\` | Search memory across past N days |
|
|
123
|
+
|
|
124
|
+
## Cron Tools (OpenClaw server)
|
|
125
|
+
|
|
126
|
+
| Tool | What it does |
|
|
127
|
+
|------|-------------|
|
|
128
|
+
| \`openclaw_cron_list\` | List all scheduled cron jobs |
|
|
129
|
+
| \`openclaw_cron_run\` | Trigger a job immediately |
|
|
130
|
+
| \`openclaw_cron_status\` | Get scheduler status and recent runs |
|
|
131
|
+
|
|
132
|
+
## Prompt Splitting
|
|
133
|
+
|
|
134
|
+
| Tool | What it does |
|
|
135
|
+
|------|-------------|
|
|
136
|
+
| \`prompt_split\` | Analyze a complex prompt and split into sub-tasks with agent assignments |
|
|
137
|
+
|
|
138
|
+
## Decision Guide
|
|
139
|
+
|
|
140
|
+
- **Coding task** (write/fix/refactor code, shell scripts) -> \`codex_run\`
|
|
141
|
+
- **Trading/portfolio/market task** -> \`openclaw_run\`
|
|
142
|
+
- **Long document, image, or analysis** -> \`gemini_run\`
|
|
143
|
+
- **Simple formatting, extraction, classification** -> \`local_llm_run\`
|
|
144
|
+
- **Smart home control** -> appropriate \`home_*\` tool (no sub-agent needed)
|
|
145
|
+
- **Cross-check / second opinion** -> run both \`gemini_run\` and compare
|
|
146
|
+
- **Complex multi-step task** -> \`prompt_split\` first, then execute the plan
|
|
147
|
+
- **Coding task that also needs context** -> \`codex_run\` first, then \`gemini_run\` to review
|
|
148
|
+
`.trim();
|
|
149
|
+
//# sourceMappingURL=routing-rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routing-rules.js","sourceRoot":"","sources":["../../src/tools/routing-rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* prompt_split — analyze a complex prompt and split it into sub-tasks.
|
|
3
|
+
*
|
|
4
|
+
* Returns a structured plan showing which sub-agent handles each part,
|
|
5
|
+
* dependency ordering, and the actual prompts to send. The LLM client
|
|
6
|
+
* (Claude) then decides whether to execute them.
|
|
7
|
+
*
|
|
8
|
+
* Strategies:
|
|
9
|
+
* - "auto": short-circuit for single-domain, then try gemini -> local -> heuristic
|
|
10
|
+
* - "gemini": use Gemini CLI for analysis
|
|
11
|
+
* - "local": use local LLM for analysis
|
|
12
|
+
* - "heuristic": pure keyword-based splitting (no LLM call)
|
|
13
|
+
*/
|
|
14
|
+
import { z } from 'zod';
|
|
15
|
+
import { Config } from '../config.js';
|
|
16
|
+
export declare const promptSplitSchema: z.ZodObject<{
|
|
17
|
+
prompt: z.ZodString;
|
|
18
|
+
strategy: z.ZodDefault<z.ZodEnum<["auto", "gemini", "local", "heuristic"]>>;
|
|
19
|
+
}, "strip", z.ZodTypeAny, {
|
|
20
|
+
prompt: string;
|
|
21
|
+
strategy: "auto" | "gemini" | "local" | "heuristic";
|
|
22
|
+
}, {
|
|
23
|
+
prompt: string;
|
|
24
|
+
strategy?: "auto" | "gemini" | "local" | "heuristic" | undefined;
|
|
25
|
+
}>;
|
|
26
|
+
export interface Subtask {
|
|
27
|
+
id: string;
|
|
28
|
+
summary: string;
|
|
29
|
+
agent: string;
|
|
30
|
+
/** Suggested model for this subtask. User can override before execution. */
|
|
31
|
+
model: string;
|
|
32
|
+
prompt: string;
|
|
33
|
+
depends_on: string[];
|
|
34
|
+
reason: string;
|
|
35
|
+
}
|
|
36
|
+
export interface SplitPlan {
|
|
37
|
+
original_prompt: string;
|
|
38
|
+
subtasks: Subtask[];
|
|
39
|
+
parallelizable_groups: string[][];
|
|
40
|
+
estimated_total_seconds: number;
|
|
41
|
+
strategy_used: string;
|
|
42
|
+
/** Instructions for the LLM client on how to present and execute this plan. */
|
|
43
|
+
note: string;
|
|
44
|
+
}
|
|
45
|
+
export declare function handlePromptSplit(args: {
|
|
46
|
+
prompt: string;
|
|
47
|
+
strategy: string;
|
|
48
|
+
}, config: Config): Promise<SplitPlan>;
|
|
49
|
+
//# sourceMappingURL=splitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"splitter.d.ts","sourceRoot":"","sources":["../../src/tools/splitter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAMtC,eAAO,MAAM,iBAAiB;;;;;;;;;EAW5B,CAAC;AAIH,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,qBAAqB,EAAE,MAAM,EAAE,EAAE,CAAC;IAClC,uBAAuB,EAAE,MAAM,CAAC;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAC;CACd;AAsUD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAC1C,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,SAAS,CAAC,CA6DpB"}
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* prompt_split — analyze a complex prompt and split it into sub-tasks.
|
|
4
|
+
*
|
|
5
|
+
* Returns a structured plan showing which sub-agent handles each part,
|
|
6
|
+
* dependency ordering, and the actual prompts to send. The LLM client
|
|
7
|
+
* (Claude) then decides whether to execute them.
|
|
8
|
+
*
|
|
9
|
+
* Strategies:
|
|
10
|
+
* - "auto": short-circuit for single-domain, then try gemini -> local -> heuristic
|
|
11
|
+
* - "gemini": use Gemini CLI for analysis
|
|
12
|
+
* - "local": use local LLM for analysis
|
|
13
|
+
* - "heuristic": pure keyword-based splitting (no LLM call)
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.promptSplitSchema = void 0;
|
|
17
|
+
exports.handlePromptSplit = handlePromptSplit;
|
|
18
|
+
const zod_1 = require("zod");
|
|
19
|
+
const spawn_js_1 = require("../spawn.js");
|
|
20
|
+
const routing_rules_js_1 = require("./routing-rules.js");
|
|
21
|
+
// --- Schema ---
|
|
22
|
+
exports.promptSplitSchema = zod_1.z.object({
|
|
23
|
+
prompt: zod_1.z.string().describe('The complex prompt to analyze and split into sub-tasks.'),
|
|
24
|
+
strategy: zod_1.z.enum(['auto', 'gemini', 'local', 'heuristic']).default('auto').describe('How to analyze the prompt:\n'
|
|
25
|
+
+ ' "auto" (default): tries gemini, then local LLM, then heuristic\n'
|
|
26
|
+
+ ' "gemini": use Gemini CLI for smart analysis\n'
|
|
27
|
+
+ ' "local": use local LLM (LM Studio/Ollama) for analysis\n'
|
|
28
|
+
+ ' "heuristic": pure keyword splitting (no LLM, instant)'),
|
|
29
|
+
});
|
|
30
|
+
/** Default model suggestions per agent. The user can override any of these. */
|
|
31
|
+
const DEFAULT_MODELS = {
|
|
32
|
+
codex_run: 'gpt-5-codex',
|
|
33
|
+
gemini_run: 'gemini-2.5-flash',
|
|
34
|
+
openclaw_run: 'default (server-side)',
|
|
35
|
+
local_llm_run: 'currently loaded model',
|
|
36
|
+
home_light: 'n/a (direct API call)',
|
|
37
|
+
home_scene: 'n/a (direct API call)',
|
|
38
|
+
home_climate: 'n/a (direct API call)',
|
|
39
|
+
home_vacuum: 'n/a (direct API call)',
|
|
40
|
+
home_sensors: 'n/a (direct API call)',
|
|
41
|
+
home_get_state: 'n/a (direct API call)',
|
|
42
|
+
openclaw_memory_write: 'n/a (direct SSH call)',
|
|
43
|
+
openclaw_memory_read_today: 'n/a (direct SSH call)',
|
|
44
|
+
openclaw_memory_search: 'n/a (direct SSH call)',
|
|
45
|
+
openclaw_cron_list: 'n/a (direct SSH call)',
|
|
46
|
+
openclaw_cron_run: 'n/a (direct SSH call)',
|
|
47
|
+
openclaw_cron_status: 'n/a (direct SSH call)',
|
|
48
|
+
};
|
|
49
|
+
// --- LLM analysis prompt ---
|
|
50
|
+
function buildAnalysisPrompt(userPrompt) {
|
|
51
|
+
const agentList = routing_rules_js_1.ROUTING_RULES.map(r => `- ${r.tool}: ${r.reason}`).join('\n');
|
|
52
|
+
return `You are a task planner. Analyze the user's prompt and split it into sub-tasks.
|
|
53
|
+
|
|
54
|
+
Available agents:
|
|
55
|
+
${agentList}
|
|
56
|
+
|
|
57
|
+
Rules:
|
|
58
|
+
- Each sub-task gets exactly one agent
|
|
59
|
+
- Use depends_on to express ordering (task IDs like "t1", "t2")
|
|
60
|
+
- Tasks with no dependencies can run in parallel
|
|
61
|
+
- Keep prompts self-contained (include necessary context in each)
|
|
62
|
+
- For simple single-agent prompts, return just one task
|
|
63
|
+
- Use local_llm_run for simple formatting, extraction, or classification
|
|
64
|
+
- Use codex_run for coding tasks, gemini_run for analysis, openclaw_run for trading/automation
|
|
65
|
+
|
|
66
|
+
Available models per agent:
|
|
67
|
+
- codex_run: gpt-5-codex, gpt-5.4, o3
|
|
68
|
+
- gemini_run: gemini-2.5-flash, gemini-2.5-pro, gemini-3-pro
|
|
69
|
+
- local_llm_run: phi-4-mini (fast/simple), deepseek-r1-0528-qwen3-8b (reasoning), phi-4-reasoning-plus (quality)
|
|
70
|
+
- openclaw_run: default (uses server-side model selection)
|
|
71
|
+
|
|
72
|
+
Respond with ONLY valid JSON (no markdown fences, no explanation):
|
|
73
|
+
{
|
|
74
|
+
"subtasks": [
|
|
75
|
+
{
|
|
76
|
+
"id": "t1",
|
|
77
|
+
"summary": "short description",
|
|
78
|
+
"agent": "agent_name",
|
|
79
|
+
"model": "suggested model name",
|
|
80
|
+
"prompt": "the actual prompt to send to this agent",
|
|
81
|
+
"depends_on": [],
|
|
82
|
+
"reason": "why this agent and model"
|
|
83
|
+
}
|
|
84
|
+
]
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
User's prompt:
|
|
88
|
+
${userPrompt}`;
|
|
89
|
+
}
|
|
90
|
+
// --- Gemini-based analysis ---
|
|
91
|
+
async function splitViaGemini(prompt, config) {
|
|
92
|
+
const analysisPrompt = buildAnalysisPrompt(prompt);
|
|
93
|
+
const model = config.geminiModel ?? 'gemini-2.5-flash';
|
|
94
|
+
const cliArgs = ['-p', analysisPrompt, '--output-format', 'json'];
|
|
95
|
+
cliArgs.push('--model', model);
|
|
96
|
+
let raw;
|
|
97
|
+
try {
|
|
98
|
+
raw = await (0, spawn_js_1.spawnLocal)('gemini', cliArgs, 30000);
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
return parseSubtasksFromJson(raw);
|
|
104
|
+
}
|
|
105
|
+
// --- Local LLM-based analysis ---
|
|
106
|
+
async function splitViaLocalLlm(prompt, config) {
|
|
107
|
+
const endpoint = config.localLlmEndpoint ?? 'http://localhost:1234/v1';
|
|
108
|
+
const model = config.localLlmModel ?? '';
|
|
109
|
+
const url = `${endpoint.replace(/\/+$/, '')}/chat/completions`;
|
|
110
|
+
const body = {
|
|
111
|
+
messages: [
|
|
112
|
+
{ role: 'system', content: 'You are a task planner. Respond with ONLY valid JSON, no markdown fences.' },
|
|
113
|
+
{ role: 'user', content: buildAnalysisPrompt(prompt) },
|
|
114
|
+
],
|
|
115
|
+
temperature: 0.1,
|
|
116
|
+
};
|
|
117
|
+
if (model)
|
|
118
|
+
body['model'] = model;
|
|
119
|
+
let response;
|
|
120
|
+
try {
|
|
121
|
+
response = await fetch(url, {
|
|
122
|
+
method: 'POST',
|
|
123
|
+
headers: { 'Content-Type': 'application/json' },
|
|
124
|
+
body: JSON.stringify(body),
|
|
125
|
+
signal: AbortSignal.timeout(60000),
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
if (!response.ok)
|
|
132
|
+
return null;
|
|
133
|
+
try {
|
|
134
|
+
const data = (await response.json());
|
|
135
|
+
const content = data.choices?.[0]?.message?.content ?? '';
|
|
136
|
+
return parseSubtasksFromJson(content);
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// --- JSON parsing helper ---
|
|
143
|
+
function parseSubtasksFromJson(raw) {
|
|
144
|
+
// Try to extract JSON from the response (handle markdown fences, Gemini envelope, etc.)
|
|
145
|
+
let text = raw.trim();
|
|
146
|
+
// Gemini CLI --output-format json wraps in { response: "..." }
|
|
147
|
+
try {
|
|
148
|
+
const envelope = JSON.parse(text);
|
|
149
|
+
if (envelope.response) {
|
|
150
|
+
text = envelope.response;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
// Not a Gemini envelope, use raw text
|
|
155
|
+
}
|
|
156
|
+
// Strip <think>...</think> blocks from reasoning models (Deepseek R1, Phi 4 Reasoning, etc.)
|
|
157
|
+
text = text.replace(/<think>[\s\S]*?<\/think>/g, '').trim();
|
|
158
|
+
// Strip markdown fences
|
|
159
|
+
text = text.replace(/^```(?:json)?\s*/m, '').replace(/\s*```$/m, '').trim();
|
|
160
|
+
try {
|
|
161
|
+
const parsed = JSON.parse(text);
|
|
162
|
+
if (!Array.isArray(parsed.subtasks) || parsed.subtasks.length === 0)
|
|
163
|
+
return null;
|
|
164
|
+
const tasks = parsed.subtasks;
|
|
165
|
+
// Validate and sanitize
|
|
166
|
+
for (const task of tasks) {
|
|
167
|
+
if (!task.id || !task.agent || !task.prompt)
|
|
168
|
+
return null;
|
|
169
|
+
// Remap unknown agents to gemini_run
|
|
170
|
+
if (!routing_rules_js_1.KNOWN_AGENTS.has(task.agent)) {
|
|
171
|
+
task.agent = 'gemini_run';
|
|
172
|
+
task.reason = (task.reason || '') + ' (agent remapped: original not recognized)';
|
|
173
|
+
}
|
|
174
|
+
if (!Array.isArray(task.depends_on))
|
|
175
|
+
task.depends_on = [];
|
|
176
|
+
// Ensure model field exists
|
|
177
|
+
if (!task.model)
|
|
178
|
+
task.model = DEFAULT_MODELS[task.agent] ?? 'default';
|
|
179
|
+
}
|
|
180
|
+
// Validate dependency references
|
|
181
|
+
const ids = new Set(tasks.map(t => t.id));
|
|
182
|
+
for (const task of tasks) {
|
|
183
|
+
task.depends_on = task.depends_on.filter(dep => ids.has(dep));
|
|
184
|
+
}
|
|
185
|
+
return tasks;
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// --- Heuristic-based splitting ---
|
|
192
|
+
// Patterns that signal sequential ordering
|
|
193
|
+
const SEQUENTIAL_MARKERS = /\b(then|after that|next|finally|once done|when that's done|afterwards|subsequently)\b/i;
|
|
194
|
+
// Patterns that signal parallel/independent tasks
|
|
195
|
+
const PARALLEL_MARKERS = /\b(also|and also|additionally|plus|meanwhile|at the same time|separately)\b/i;
|
|
196
|
+
function splitViaHeuristic(prompt) {
|
|
197
|
+
// Split on sentence boundaries that follow logical connectors
|
|
198
|
+
const fragments = prompt
|
|
199
|
+
.split(/(?<=[.!?])\s+|(?:,?\s*(?:then|after that|next|finally|also|additionally|and then|plus)\s+)/i)
|
|
200
|
+
.map(f => f.trim())
|
|
201
|
+
.filter(f => f.length > 5);
|
|
202
|
+
if (fragments.length <= 1) {
|
|
203
|
+
// Single task, pick best agent
|
|
204
|
+
const matches = (0, routing_rules_js_1.matchRules)(prompt);
|
|
205
|
+
const agent = matches[0]?.tool.split(' / ')[0] ?? 'gemini_run';
|
|
206
|
+
return [{
|
|
207
|
+
id: 't1',
|
|
208
|
+
summary: prompt.substring(0, 80),
|
|
209
|
+
agent,
|
|
210
|
+
model: DEFAULT_MODELS[agent] ?? 'default',
|
|
211
|
+
prompt,
|
|
212
|
+
depends_on: [],
|
|
213
|
+
reason: matches[0]?.reason ?? 'Default to Gemini for general tasks.',
|
|
214
|
+
}];
|
|
215
|
+
}
|
|
216
|
+
const tasks = [];
|
|
217
|
+
let prevId = null;
|
|
218
|
+
for (let i = 0; i < fragments.length; i++) {
|
|
219
|
+
const frag = fragments[i];
|
|
220
|
+
const id = `t${i + 1}`;
|
|
221
|
+
const matches = (0, routing_rules_js_1.matchRules)(frag);
|
|
222
|
+
const agent = matches[0]?.tool.split(' / ')[0] ?? 'gemini_run';
|
|
223
|
+
// Check if this fragment follows a sequential marker in the original prompt
|
|
224
|
+
const beforeFrag = prompt.substring(0, prompt.indexOf(frag));
|
|
225
|
+
const isSequential = SEQUENTIAL_MARKERS.test(beforeFrag.slice(-50));
|
|
226
|
+
const isParallel = PARALLEL_MARKERS.test(beforeFrag.slice(-50));
|
|
227
|
+
const depends_on = [];
|
|
228
|
+
if (prevId && isSequential && !isParallel) {
|
|
229
|
+
depends_on.push(prevId);
|
|
230
|
+
}
|
|
231
|
+
tasks.push({
|
|
232
|
+
id,
|
|
233
|
+
summary: frag.substring(0, 80),
|
|
234
|
+
agent,
|
|
235
|
+
model: DEFAULT_MODELS[agent] ?? 'default',
|
|
236
|
+
prompt: frag,
|
|
237
|
+
depends_on,
|
|
238
|
+
reason: matches[0]?.reason ?? 'Default to Gemini for general tasks.',
|
|
239
|
+
});
|
|
240
|
+
prevId = id;
|
|
241
|
+
}
|
|
242
|
+
return tasks;
|
|
243
|
+
}
|
|
244
|
+
// --- Parallelizable groups computation ---
|
|
245
|
+
function computeGroups(tasks) {
|
|
246
|
+
// Topological sort into execution levels
|
|
247
|
+
const deps = new Map();
|
|
248
|
+
const levels = new Map();
|
|
249
|
+
for (const t of tasks) {
|
|
250
|
+
deps.set(t.id, new Set(t.depends_on));
|
|
251
|
+
}
|
|
252
|
+
// Compute level for each task (max dependency level + 1)
|
|
253
|
+
function getLevel(id, visited) {
|
|
254
|
+
if (levels.has(id))
|
|
255
|
+
return levels.get(id);
|
|
256
|
+
if (visited.has(id))
|
|
257
|
+
return 0; // Break circular dependency
|
|
258
|
+
visited.add(id);
|
|
259
|
+
const taskDeps = deps.get(id);
|
|
260
|
+
if (!taskDeps || taskDeps.size === 0) {
|
|
261
|
+
levels.set(id, 0);
|
|
262
|
+
return 0;
|
|
263
|
+
}
|
|
264
|
+
let maxDep = 0;
|
|
265
|
+
for (const dep of taskDeps) {
|
|
266
|
+
maxDep = Math.max(maxDep, getLevel(dep, visited) + 1);
|
|
267
|
+
}
|
|
268
|
+
levels.set(id, maxDep);
|
|
269
|
+
return maxDep;
|
|
270
|
+
}
|
|
271
|
+
for (const t of tasks) {
|
|
272
|
+
getLevel(t.id, new Set());
|
|
273
|
+
}
|
|
274
|
+
// Group by level
|
|
275
|
+
const groupMap = new Map();
|
|
276
|
+
for (const t of tasks) {
|
|
277
|
+
const level = levels.get(t.id) ?? 0;
|
|
278
|
+
if (!groupMap.has(level))
|
|
279
|
+
groupMap.set(level, []);
|
|
280
|
+
groupMap.get(level).push(t.id);
|
|
281
|
+
}
|
|
282
|
+
return Array.from(groupMap.entries())
|
|
283
|
+
.sort(([a], [b]) => a - b)
|
|
284
|
+
.map(([, ids]) => ids);
|
|
285
|
+
}
|
|
286
|
+
// --- Time estimates ---
|
|
287
|
+
const TIME_ESTIMATES = {
|
|
288
|
+
codex_run: 30,
|
|
289
|
+
gemini_run: 15,
|
|
290
|
+
openclaw_run: 60,
|
|
291
|
+
local_llm_run: 10,
|
|
292
|
+
};
|
|
293
|
+
function estimateTime(tasks, groups) {
|
|
294
|
+
// Sum the max time of each parallel group (sequential execution of groups)
|
|
295
|
+
let total = 0;
|
|
296
|
+
const taskMap = new Map(tasks.map(t => [t.id, t]));
|
|
297
|
+
for (const group of groups) {
|
|
298
|
+
let maxInGroup = 0;
|
|
299
|
+
for (const id of group) {
|
|
300
|
+
const task = taskMap.get(id);
|
|
301
|
+
const agentBase = task?.agent.split('_')[0] ?? '';
|
|
302
|
+
const est = TIME_ESTIMATES[task?.agent ?? ''] ?? (agentBase === 'home' ? 3 : 15);
|
|
303
|
+
maxInGroup = Math.max(maxInGroup, est);
|
|
304
|
+
}
|
|
305
|
+
total += maxInGroup;
|
|
306
|
+
}
|
|
307
|
+
return total;
|
|
308
|
+
}
|
|
309
|
+
// --- Main handler ---
|
|
310
|
+
async function handlePromptSplit(args, config) {
|
|
311
|
+
const { prompt, strategy } = args;
|
|
312
|
+
// Short-circuit: if keyword check shows single domain, skip LLM analysis
|
|
313
|
+
if (strategy === 'auto') {
|
|
314
|
+
const matches = (0, routing_rules_js_1.matchRules)(prompt);
|
|
315
|
+
if (matches.length > 0) {
|
|
316
|
+
const topTool = matches[0].tool;
|
|
317
|
+
const secondScore = matches[1]?.score ?? 0;
|
|
318
|
+
// If top match has 2x the score of second, it's clearly single-domain
|
|
319
|
+
if (matches[0].score >= 2 && matches[0].score > secondScore * 2) {
|
|
320
|
+
const agent = topTool.split(' / ')[0];
|
|
321
|
+
const tasks = [{
|
|
322
|
+
id: 't1',
|
|
323
|
+
summary: prompt.substring(0, 80),
|
|
324
|
+
agent,
|
|
325
|
+
model: DEFAULT_MODELS[agent] ?? 'default',
|
|
326
|
+
prompt,
|
|
327
|
+
depends_on: [],
|
|
328
|
+
reason: matches[0].reason,
|
|
329
|
+
}];
|
|
330
|
+
return buildPlan(prompt, tasks, 'short-circuit', 'Single-domain prompt detected. No splitting needed. Call the suggested agent directly.');
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
// Try strategies in order
|
|
335
|
+
let subtasks = null;
|
|
336
|
+
let strategyUsed = strategy;
|
|
337
|
+
if (strategy === 'gemini' || strategy === 'auto') {
|
|
338
|
+
subtasks = await splitViaGemini(prompt, config);
|
|
339
|
+
if (subtasks) {
|
|
340
|
+
strategyUsed = 'gemini';
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
if (!subtasks && (strategy === 'local' || strategy === 'auto')) {
|
|
344
|
+
subtasks = await splitViaLocalLlm(prompt, config);
|
|
345
|
+
if (subtasks) {
|
|
346
|
+
strategyUsed = 'local';
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
if (!subtasks) {
|
|
350
|
+
subtasks = splitViaHeuristic(prompt);
|
|
351
|
+
strategyUsed = strategy === 'heuristic' ? 'heuristic' : `${strategy}->heuristic (fallback)`;
|
|
352
|
+
}
|
|
353
|
+
const note = subtasks.length === 1
|
|
354
|
+
? 'This prompt maps to a single agent. No splitting required. '
|
|
355
|
+
+ 'Present the suggested agent and model to the user. They can confirm, change the model, or pick a different agent before you execute.'
|
|
356
|
+
: 'IMPORTANT: Present this plan to the user BEFORE executing. Show each subtask with its agent and model. '
|
|
357
|
+
+ 'The user may want to: (1) change the model for a specific task (e.g. "use gemini-2.5-pro for t2 instead of flash"), '
|
|
358
|
+
+ '(2) swap the agent entirely (e.g. "use local_llm_run for t3 instead of gemini"), '
|
|
359
|
+
+ '(3) skip or remove a subtask, (4) adjust dependencies or ordering. '
|
|
360
|
+
+ 'Once the user approves (or modifies) the plan, execute sub-tasks in dependency order. '
|
|
361
|
+
+ 'Tasks in the same parallelizable_group can be called concurrently.';
|
|
362
|
+
return buildPlan(prompt, subtasks, strategyUsed, note);
|
|
363
|
+
}
|
|
364
|
+
function buildPlan(prompt, subtasks, strategyUsed, note) {
|
|
365
|
+
const groups = computeGroups(subtasks);
|
|
366
|
+
return {
|
|
367
|
+
original_prompt: prompt,
|
|
368
|
+
subtasks,
|
|
369
|
+
parallelizable_groups: groups,
|
|
370
|
+
estimated_total_seconds: estimateTime(subtasks, groups),
|
|
371
|
+
strategy_used: strategyUsed,
|
|
372
|
+
note,
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
//# sourceMappingURL=splitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"splitter.js","sourceRoot":"","sources":["../../src/tools/splitter.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@elvatis_com/elvatis-mcp",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "MCP server for OpenClaw — expose smart home, memory, cron, and more to Claude Desktop, Cursor, Windsurf, and any MCP client",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"elvatis-mcp": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"dev": "tsc --watch",
|
|
13
|
+
"start": "node dist/index.js",
|
|
14
|
+
"typecheck": "tsc --noEmit",
|
|
15
|
+
"prepare": "npm run build",
|
|
16
|
+
"prepublishOnly": "npm run typecheck && npm run build"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"mcp",
|
|
20
|
+
"model-context-protocol",
|
|
21
|
+
"openclaw",
|
|
22
|
+
"elvatis",
|
|
23
|
+
"home-assistant",
|
|
24
|
+
"ai",
|
|
25
|
+
"claude"
|
|
26
|
+
],
|
|
27
|
+
"author": "Elvatis <emre.kohler@elvatis.com>",
|
|
28
|
+
"license": "Apache-2.0",
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"@modelcontextprotocol/sdk": "^1.10.2",
|
|
31
|
+
"dotenv": "^16.4.7",
|
|
32
|
+
"zod": "^3.24.2"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@types/node": "^22.0.0",
|
|
36
|
+
"typescript": "^5.9.3"
|
|
37
|
+
},
|
|
38
|
+
"engines": {
|
|
39
|
+
"node": ">=18"
|
|
40
|
+
},
|
|
41
|
+
"files": [
|
|
42
|
+
"dist",
|
|
43
|
+
"README.md",
|
|
44
|
+
"LICENSE",
|
|
45
|
+
".env.example"
|
|
46
|
+
],
|
|
47
|
+
"repository": {
|
|
48
|
+
"type": "git",
|
|
49
|
+
"url": "https://github.com/elvatis/elvatis-mcp.git"
|
|
50
|
+
},
|
|
51
|
+
"publishConfig": {
|
|
52
|
+
"access": "public"
|
|
53
|
+
}
|
|
54
|
+
}
|