@elvatis_com/elvatis-mcp 0.9.0 → 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.
- package/.env.example +10 -0
- package/dist/config.d.ts +9 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +15 -0
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +38 -3
- package/dist/index.js.map +1 -1
- package/dist/rate-limiter.d.ts +83 -0
- package/dist/rate-limiter.d.ts.map +1 -0
- package/dist/rate-limiter.js +240 -0
- package/dist/rate-limiter.js.map +1 -0
- package/dist/tools/split-execute.d.ts +85 -0
- package/dist/tools/split-execute.d.ts.map +1 -0
- package/dist/tools/split-execute.js +249 -0
- package/dist/tools/split-execute.js.map +1 -0
- package/package.json +1 -1
package/.env.example
CHANGED
|
@@ -59,3 +59,13 @@ OPENCLAW_GATEWAY_URL=http://localhost:18789
|
|
|
59
59
|
# Useful when SSH fails with exit 255 and no output.
|
|
60
60
|
# -------------------------
|
|
61
61
|
# SSH_DEBUG=1
|
|
62
|
+
|
|
63
|
+
# -------------------------
|
|
64
|
+
# Rate limiting (optional)
|
|
65
|
+
# Directory for persistent usage data. Default: ~/.elvatis-mcp
|
|
66
|
+
# -------------------------
|
|
67
|
+
# ELVATIS_DATA_DIR=~/.elvatis-mcp
|
|
68
|
+
|
|
69
|
+
# Per-agent rate limit overrides (JSON string).
|
|
70
|
+
# Default limits: claude_run 5/min 30/hr 200/day, codex_run 5/min 30/hr 200/day, gemini_run 10/min 60/hr 500/day
|
|
71
|
+
# Example: RATE_LIMITS={"claude_run":{"perMinute":3,"perDay":100}}
|
package/dist/config.d.ts
CHANGED
|
@@ -34,6 +34,15 @@ export interface Config {
|
|
|
34
34
|
localLlmEndpoint?: string;
|
|
35
35
|
/** Default model identifier for the local LLM (as shown in LM Studio / Ollama) */
|
|
36
36
|
localLlmModel?: string;
|
|
37
|
+
/** Directory for persistent data (usage.json). Default: ~/.elvatis-mcp */
|
|
38
|
+
dataDir?: string;
|
|
39
|
+
/** Per-agent rate limit overrides. Keys: claude_run, codex_run, gemini_run */
|
|
40
|
+
rateLimits?: Record<string, {
|
|
41
|
+
perMinute?: number;
|
|
42
|
+
perHour?: number;
|
|
43
|
+
perDay?: number;
|
|
44
|
+
costPerCall?: number;
|
|
45
|
+
}>;
|
|
37
46
|
}
|
|
38
47
|
export declare function loadConfig(): Config;
|
|
39
48
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,MAAM,WAAW,MAAM;IACrB,2EAA2E;IAC3E,UAAU,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IAEjB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kFAAkF;IAClF,aAAa,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,MAAM,WAAW,MAAM;IACrB,2EAA2E;IAC3E,UAAU,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IAEjB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,yEAAyE;IACzE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kFAAkF;IAClF,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9G;AAED,wBAAgB,UAAU,IAAI,MAAM,CA6BnC"}
|
package/dist/config.js
CHANGED
|
@@ -40,6 +40,21 @@ function loadConfig() {
|
|
|
40
40
|
// Local LLM (LM Studio default port: 1234, Ollama: 11434, llama.cpp: 8080)
|
|
41
41
|
localLlmEndpoint: optional('LOCAL_LLM_ENDPOINT'),
|
|
42
42
|
localLlmModel: optional('LOCAL_LLM_MODEL'),
|
|
43
|
+
// Rate limiting
|
|
44
|
+
dataDir: optional('ELVATIS_DATA_DIR'),
|
|
45
|
+
rateLimits: parseRateLimits(optional('RATE_LIMITS')),
|
|
43
46
|
};
|
|
44
47
|
}
|
|
48
|
+
/** Parse RATE_LIMITS env var (JSON string) into per-agent config. */
|
|
49
|
+
function parseRateLimits(raw) {
|
|
50
|
+
if (!raw)
|
|
51
|
+
return undefined;
|
|
52
|
+
try {
|
|
53
|
+
return JSON.parse(raw);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
process.stderr.write(`[elvatis-mcp] Warning: RATE_LIMITS env var is not valid JSON, ignoring\n`);
|
|
57
|
+
return undefined;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
45
60
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAsDH,gCA6BC;AAjFD,SAAS,QAAQ,CAAC,GAAW;IAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,8BAA8B,CAAC,CAAC;IAC1F,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW,EAAE,QAAiB;IAC9C,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC;AACtC,CAAC;AA4CD,SAAgB,UAAU;IACxB,OAAO;QACL,4BAA4B;QAC5B,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC;QACzB,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC;QAC7B,kEAAkE;QAClE,UAAU,EAAE,QAAQ,CAAC,sBAAsB,EAAE,wBAAwB,CAAE;QACvE,YAAY,EAAE,QAAQ,CAAC,wBAAwB,CAAC;QAChD,YAAY;QACZ,SAAS,EAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAsB,IAAI,OAAO;QACxE,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,MAAM,EAAE,EAAE,CAAC;QAC9D,kDAAkD;QAClD,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC;QAC7B,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;QACtD,OAAO,EAAE,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAE;QAC5C,UAAU,EAAE,QAAQ,CAAC,cAAc,EAAE,wBAAwB,CAAE;QAC/D,4FAA4F;QAC5F,oBAAoB,EAAE,QAAQ,CAAC,wBAAwB,CAAC;QACxD,aAAa;QACb,WAAW,EAAE,QAAQ,CAAC,cAAc,CAAC;QACrC,YAAY;QACZ,UAAU,EAAE,QAAQ,CAAC,aAAa,CAAC;QACnC,2EAA2E;QAC3E,gBAAgB,EAAE,QAAQ,CAAC,oBAAoB,CAAC;QAChD,aAAa,EAAE,QAAQ,CAAC,iBAAiB,CAAC;QAC1C,gBAAgB;QAChB,OAAO,EAAE,QAAQ,CAAC,kBAAkB,CAAC;QACrC,UAAU,EAAE,eAAe,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;KACrD,CAAC;AACJ,CAAC;AAED,qEAAqE;AACrE,SAAS,eAAe,CACtB,GAAY;IAEZ,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAC;IAC3B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;QACjG,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;GAcG;AAuHH,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAC5C,gBAAgB,CAAC,EAAE,CAAC,YAAY,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzG,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -79,6 +79,8 @@ const dashboard_js_1 = require("./dashboard.js");
|
|
|
79
79
|
const llama_server_js_1 = require("./tools/llama-server.js");
|
|
80
80
|
const local_llm_js_1 = require("./tools/local-llm.js");
|
|
81
81
|
const splitter_js_1 = require("./tools/splitter.js");
|
|
82
|
+
const split_execute_js_1 = require("./tools/split-execute.js");
|
|
83
|
+
const rate_limiter_js_1 = require("./rate-limiter.js");
|
|
82
84
|
function toText(result) {
|
|
83
85
|
return JSON.stringify(result, null, 2);
|
|
84
86
|
}
|
|
@@ -87,6 +89,14 @@ function registerTool(server, name, description, schema, handler) {
|
|
|
87
89
|
}
|
|
88
90
|
async function main() {
|
|
89
91
|
const config = (0, config_js_1.loadConfig)();
|
|
92
|
+
// Initialize rate limiter with persistent storage
|
|
93
|
+
(0, rate_limiter_js_1.initRateLimiter)({
|
|
94
|
+
dataDir: config.dataDir,
|
|
95
|
+
limits: config.rateLimits,
|
|
96
|
+
});
|
|
97
|
+
// Flush usage data on shutdown
|
|
98
|
+
process.on('SIGINT', () => { (0, rate_limiter_js_1.flushNow)(); process.exit(0); });
|
|
99
|
+
process.on('SIGTERM', () => { (0, rate_limiter_js_1.flushNow)(); process.exit(0); });
|
|
90
100
|
const server = new mcp_js_1.McpServer({
|
|
91
101
|
name: 'elvatis-mcp',
|
|
92
102
|
version: '0.1.0',
|
|
@@ -111,11 +121,32 @@ async function main() {
|
|
|
111
121
|
registerTool(server, 'openclaw_status', 'Check if the OpenClaw daemon is running on the server and get version info', openclaw_js_1.openclawStatusSchema.shape, async (args) => ({ content: [{ type: 'text', text: toText(await (0, openclaw_js_1.handleOpenclawStatus)(args, config)) }] }));
|
|
112
122
|
registerTool(server, 'openclaw_plugins', 'List all plugins installed on the OpenClaw server', openclaw_js_1.openclawPluginsSchema.shape, async (args) => ({ content: [{ type: 'text', text: toText(await (0, openclaw_js_1.handleOpenclawPlugins)(args, config)) }] }));
|
|
113
123
|
// --- Gemini sub-agent (local spawn) ---
|
|
114
|
-
registerTool(server, 'gemini_run', 'Send a prompt to Google Gemini via the local gemini CLI. Fast, direct LLM call with no OpenClaw overhead. Uses cached Google auth — no API key required.', gemini_js_1.geminiRunSchema.shape, async (args) =>
|
|
124
|
+
registerTool(server, 'gemini_run', 'Send a prompt to Google Gemini via the local gemini CLI. Fast, direct LLM call with no OpenClaw overhead. Uses cached Google auth — no API key required.', gemini_js_1.geminiRunSchema.shape, async (args) => {
|
|
125
|
+
const quota = (0, rate_limiter_js_1.checkRateLimit)('gemini_run');
|
|
126
|
+
if (!quota.allowed)
|
|
127
|
+
return { content: [{ type: 'text', text: toText({ success: false, error: quota.reason, quota }) }] };
|
|
128
|
+
const result = await (0, gemini_js_1.handleGeminiRun)(args, config);
|
|
129
|
+
(0, rate_limiter_js_1.recordUsage)('gemini_run');
|
|
130
|
+
return { content: [{ type: 'text', text: toText(result) }] };
|
|
131
|
+
});
|
|
115
132
|
// --- Codex sub-agent (local spawn) ---
|
|
116
|
-
registerTool(server, 'codex_run', 'Send a task to OpenAI Codex via the local codex CLI. Specializes in coding tasks, file operations, and technical analysis. Uses cached OpenAI auth — no API key required.', codex_js_1.codexRunSchema.shape, async (args) =>
|
|
133
|
+
registerTool(server, 'codex_run', 'Send a task to OpenAI Codex via the local codex CLI. Specializes in coding tasks, file operations, and technical analysis. Uses cached OpenAI auth — no API key required.', codex_js_1.codexRunSchema.shape, async (args) => {
|
|
134
|
+
const quota = (0, rate_limiter_js_1.checkRateLimit)('codex_run');
|
|
135
|
+
if (!quota.allowed)
|
|
136
|
+
return { content: [{ type: 'text', text: toText({ success: false, error: quota.reason, quota }) }] };
|
|
137
|
+
const result = await (0, codex_js_1.handleCodexRun)(args, config);
|
|
138
|
+
(0, rate_limiter_js_1.recordUsage)('codex_run');
|
|
139
|
+
return { content: [{ type: 'text', text: toText(result) }] };
|
|
140
|
+
});
|
|
117
141
|
// --- Claude sub-agent (for non-Claude MCP clients like Cursor, Windsurf) ---
|
|
118
|
-
registerTool(server, 'claude_run', 'Send a prompt to Claude via the local Claude Code CLI. Use this when the MCP client is NOT Claude (e.g. Cursor, Windsurf, Zed) or for cross-checking results from other AI backends. Uses cached Anthropic auth.', claude_js_1.claudeRunSchema.shape, async (args) =>
|
|
142
|
+
registerTool(server, 'claude_run', 'Send a prompt to Claude via the local Claude Code CLI. Use this when the MCP client is NOT Claude (e.g. Cursor, Windsurf, Zed) or for cross-checking results from other AI backends. Uses cached Anthropic auth.', claude_js_1.claudeRunSchema.shape, async (args) => {
|
|
143
|
+
const quota = (0, rate_limiter_js_1.checkRateLimit)('claude_run');
|
|
144
|
+
if (!quota.allowed)
|
|
145
|
+
return { content: [{ type: 'text', text: toText({ success: false, error: quota.reason, quota }) }] };
|
|
146
|
+
const result = await (0, claude_js_1.handleClaudeRun)(args);
|
|
147
|
+
(0, rate_limiter_js_1.recordUsage)('claude_run');
|
|
148
|
+
return { content: [{ type: 'text', text: toText(result) }] };
|
|
149
|
+
});
|
|
119
150
|
// --- Local LLM sub-agent ---
|
|
120
151
|
registerTool(server, 'local_llm_run', 'Send a prompt to a local LLM (LM Studio, Ollama, llama.cpp, or any OpenAI-compatible server). Free, private, no API key needed. Best for simple tasks: classify, format, extract, rewrite, proofread. Set stream=true for token-by-token progress.', local_llm_js_1.localLlmRunSchema.shape, async (args, extra) => ({ content: [{ type: 'text', text: toText(await (0, local_llm_js_1.handleLocalLlmRun)(args, config, extra)) }] }));
|
|
121
152
|
// --- Routing and orchestration ---
|
|
@@ -126,6 +157,10 @@ async function main() {
|
|
|
126
157
|
+ 'Each subtask includes a suggested model that the user can override before execution. '
|
|
127
158
|
+ 'IMPORTANT: Always present the plan to the user for review before executing. '
|
|
128
159
|
+ 'Strategy: "auto" (default), "gemini", "local", or "heuristic".', splitter_js_1.promptSplitSchema.shape, async (args) => ({ content: [{ type: 'text', text: toText(await (0, splitter_js_1.handlePromptSplit)(args, config)) }] }));
|
|
160
|
+
registerTool(server, 'prompt_split_execute', 'Execute a prompt_split plan: runs subtasks in dependency order, dispatches to the correct sub-agent, '
|
|
161
|
+
+ 'passes results between dependent tasks, and enforces rate limits on cloud agents. '
|
|
162
|
+
+ 'Provide a "plan" from prompt_split, or just a "prompt" to generate and execute in one step. '
|
|
163
|
+
+ 'Use "overrides" to change agent/model/prompt per task or skip tasks. Set dry_run=true to preview.', split_execute_js_1.splitExecuteSchema.shape, async (args, extra) => ({ content: [{ type: 'text', text: toText(await (0, split_execute_js_1.handleSplitExecute)(args, config, extra)) }] }));
|
|
129
164
|
// --- System management ---
|
|
130
165
|
registerTool(server, 'system_status', 'Check health of all connected services at once: Home Assistant, OpenClaw (SSH), local LLM, Gemini CLI, Codex CLI. Returns a unified status overview with latency for each service.', system_status_js_1.systemStatusSchema.shape, async (args) => ({ content: [{ type: 'text', text: toText(await (0, system_status_js_1.handleSystemStatus)(args, config)) }] }));
|
|
131
166
|
registerTool(server, 'local_llm_models', 'List, load, or unload models on the local LLM server. "list" shows available models. "load"/"unload" switches models in LM Studio without opening the GUI (LM Studio only).', local_llm_models_js_1.localLlmModelsSchema.shape, async (args) => ({ content: [{ type: 'text', text: toText(await (0, local_llm_models_js_1.handleLocalLlmModels)(args, config)) }] }));
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AACA;;;;;;;;;;;;;;GAcG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,8EAA8E;AAC9E,wFAAwF;AACxF,2FAA2F;AAC3F,6EAA6E;AAC7E,2CAA6B;AAC7B,+CAAiC;AACjC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,uDAAuD;AAExE,oEAAoE;AACpE,wEAAiF;AACjF,2CAAyC;AAEzC,6CAOyB;AAEzB,iDAI2B;AAE3B,6CAIyB;AAEzB,qDAI6B;AAE7B,iDAE2B;AAE3B,+CAE0B;AAE1B,iDAE2B;AAE3B,6CAEyB;AAEzB,+DAEkC;AAElC,qEAEqC;AAErC,+DAEkC;AAElC,mEAEoC;AAEpC,+DAEkC;AAElC,iDAE2B;AAE3B,2DAKgC;AAEhC,iDAAwD;AAExD,6DAEiC;AAEjC,uDAE8B;AAE9B,qDAE6B;AAE7B,+DAEkC;AAElC,uDAE2B;AAE3B,SAAS,MAAM,CAAC,MAAe;IAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC;AAeD,SAAS,YAAY,CACnB,MAAiB,EACjB,IAAY,EACZ,WAAmB,EACnB,MAA+B,EAC/B,OAAoB;IAEnB,MAAc,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,IAAA,sBAAU,GAAE,CAAC;IAE5B,kDAAkD;IAClD,IAAA,iCAAe,EAAC;QACd,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,MAAM,EAAE,MAAM,CAAC,UAAU;KAC1B,CAAC,CAAC;IAEH,+BAA+B;IAC/B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAA,0BAAQ,GAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,IAAA,0BAAQ,GAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9D,MAAM,MAAM,GAAG,IAAI,kBAAS,CAAC;QAC3B,IAAI,EAAE,aAAa;QACnB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,+BAA+B;IAE/B,YAAY,CAAC,MAAM,EAAE,gBAAgB,EACnC,+GAA+G,EAC/G,wBAAc,CAAC,KAAK,EACpB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,wBAAc,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAC3G,CAAC;IAEF,YAAY,CAAC,MAAM,EAAE,YAAY,EAC/B,+FAA+F,EAC/F,qBAAW,CAAC,KAAK,EACjB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,qBAAW,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACxG,CAAC;IAEF,YAAY,CAAC,MAAM,EAAE,cAAc,EACjC,+EAA+E,EAC/E,uBAAa,CAAC,KAAK,EACnB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,uBAAa,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAC1G,CAAC;IAEF,YAAY,CAAC,MAAM,EAAE,YAAY,EAC/B,8EAA8E,EAC9E,qBAAW,CAAC,KAAK,EACjB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,qBAAW,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACxG,CAAC;IAEF,YAAY,CAAC,MAAM,EAAE,aAAa,EAChC,oFAAoF,EACpF,sBAAY,CAAC,KAAK,EAClB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,sBAAY,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACzG,CAAC;IAEF,YAAY,CAAC,MAAM,EAAE,cAAc,EACjC,mGAAmG,EACnG,uBAAa,CAAC,KAAK,EACnB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,uBAAa,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAC1G,CAAC;IAEF,gDAAgD;IAEhD,YAAY,CAAC,MAAM,EAAE,uBAAuB,EAC1C,0IAA0I,EAC1I,6BAAiB,CAAC,KAAK,EACvB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,6BAAiB,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAC9G,CAAC;IAEF,YAAY,CAAC,MAAM,EAAE,4BAA4B,EAC/C,mDAAmD,EACnD,iCAAqB,CAAC,KAAK,EAC3B,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,iCAAqB,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAClH,CAAC;IAEF,YAAY,CAAC,MAAM,EAAE,wBAAwB,EAC3C,+FAA+F,EAC/F,8BAAkB,CAAC,KAAK,EACxB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,8BAAkB,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAC/G,CAAC;IAEF,8CAA8C;IAE9C,YAAY,CAAC,MAAM,EAAE,oBAAoB,EACvC,uCAAuC,EACvC,wBAAc,CAAC,KAAK,EACpB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,wBAAc,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAC3G,CAAC;IAEF,YAAY,CAAC,MAAM,EAAE,mBAAmB,EACtC,oDAAoD,EACpD,uBAAa,CAAC,KAAK,EACnB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,uBAAa,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAC1G,CAAC;IAEF,YAAY,CAAC,MAAM,EAAE,sBAAsB,EACzC,iDAAiD,EACjD,0BAAgB,CAAC,KAAK,EACtB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,0BAAgB,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAC7G,CAAC;IAEF,uDAAuD;IAEvD,YAAY,CAAC,MAAM,EAAE,cAAc,EACjC,iPAAiP,EACjP,+BAAiB,CAAC,KAAK,EACvB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,+BAAiB,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAC9G,CAAC;IAEF,YAAY,CAAC,MAAM,EAAE,iBAAiB,EACpC,4EAA4E,EAC5E,kCAAoB,CAAC,KAAK,EAC1B,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,kCAAoB,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACjH,CAAC;IAEF,YAAY,CAAC,MAAM,EAAE,kBAAkB,EACrC,mDAAmD,EACnD,mCAAqB,CAAC,KAAK,EAC3B,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,mCAAqB,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAClH,CAAC;IAEF,yCAAyC;IAEzC,YAAY,CAAC,MAAM,EAAE,YAAY,EAC/B,0JAA0J,EAC1J,2BAAe,CAAC,KAAK,EACrB,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,KAAK,GAAG,IAAA,gCAAc,EAAC,YAAY,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACzH,MAAM,MAAM,GAAG,MAAM,IAAA,2BAAe,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC;QAC1D,IAAA,6BAAW,EAAC,YAAY,CAAC,CAAC;QAC1B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;IAC/D,CAAC,CACF,CAAC;IAEF,wCAAwC;IAExC,YAAY,CAAC,MAAM,EAAE,WAAW,EAC9B,2KAA2K,EAC3K,yBAAc,CAAC,KAAK,EACpB,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,KAAK,GAAG,IAAA,gCAAc,EAAC,WAAW,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACzH,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAc,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC;QACzD,IAAA,6BAAW,EAAC,WAAW,CAAC,CAAC;QACzB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;IAC/D,CAAC,CACF,CAAC;IAEF,8EAA8E;IAE9E,YAAY,CAAC,MAAM,EAAE,YAAY,EAC/B,kNAAkN,EAClN,2BAAe,CAAC,KAAK,EACrB,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,KAAK,GAAG,IAAA,gCAAc,EAAC,YAAY,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACzH,MAAM,MAAM,GAAG,MAAM,IAAA,2BAAe,EAAC,IAAW,CAAC,CAAC;QAClD,IAAA,6BAAW,EAAC,YAAY,CAAC,CAAC;QAC1B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;IAC/D,CAAC,CACF,CAAC;IAEF,8BAA8B;IAE9B,YAAY,CAAC,MAAM,EAAE,eAAe,EAClC,oPAAoP,EACpP,gCAAiB,CAAC,KAAK,EACvB,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,gCAAiB,EAAC,IAAW,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAC5H,CAAC;IAEF,oCAAoC;IAEpC,YAAY,CAAC,MAAM,EAAE,UAAU,EAC7B,4NAA4N,EAC5N,uBAAa,CAAC,KAAK,EACnB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,uBAAa,EAAC,IAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAClG,CAAC;IAEF,YAAY,CAAC,MAAM,EAAE,cAAc,EACjC,+EAA+E;UAC7E,4GAA4G;UAC5G,uDAAuD;UACvD,uFAAuF;UACvF,8EAA8E;UAC9E,gEAAgE,EAClE,+BAAiB,CAAC,KAAK,EACvB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,+BAAiB,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAC9G,CAAC;IAEF,YAAY,CAAC,MAAM,EAAE,sBAAsB,EACzC,uGAAuG;UACrG,oFAAoF;UACpF,8FAA8F;UAC9F,mGAAmG,EACrG,qCAAkB,CAAC,KAAK,EACxB,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,qCAAkB,EAAC,IAAW,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAC7H,CAAC;IAEF,4BAA4B;IAE5B,YAAY,CAAC,MAAM,EAAE,eAAe,EAClC,oLAAoL,EACpL,qCAAkB,CAAC,KAAK,EACxB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,qCAAkB,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAC/G,CAAC;IAEF,YAAY,CAAC,MAAM,EAAE,kBAAkB,EACrC,6KAA6K,EAC7K,0CAAoB,CAAC,KAAK,EAC1B,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,0CAAoB,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACjH,CAAC;IAEF,YAAY,CAAC,MAAM,EAAE,eAAe,EAClC,8IAA8I,EAC9I,qCAAkB,CAAC,KAAK,EACxB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,qCAAkB,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAC/G,CAAC;IAEF,YAAY,CAAC,MAAM,EAAE,iBAAiB,EACpC,oIAAoI,EACpI,yCAAoB,CAAC,KAAK,EAC1B,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,yCAAoB,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACjH,CAAC;IAEF,YAAY,CAAC,MAAM,EAAE,eAAe,EAClC,yKAAyK,EACzK,qCAAkB,CAAC,KAAK,EACxB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,qCAAkB,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAC/G,CAAC;IAEF,wBAAwB;IAExB,YAAY,CAAC,MAAM,EAAE,iBAAiB,EACpC,uGAAuG,EACvG,gCAAoB,CAAC,KAAK,EAC1B,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,gCAAoB,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACjH,CAAC;IAEF,mCAAmC;IAEnC,YAAY,CAAC,MAAM,EAAE,sBAAsB,EACzC,mNAAmN,EACnN,iCAAgB,CAAC,KAAK,EACtB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,iCAAgB,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAC7G,CAAC;IAEF,YAAY,CAAC,MAAM,EAAE,oBAAoB,EACvC,0EAA0E,EAC1E,+BAAc,CAAC,KAAK,EACpB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,+BAAc,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAC3G,CAAC;IAEF,YAAY,CAAC,MAAM,EAAE,sBAAsB,EACzC,8BAA8B,EAC9B,iCAAgB,CAAC,KAAK,EACtB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,iCAAgB,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAC7G,CAAC;IAEF,YAAY,CAAC,MAAM,EAAE,uBAAuB,EAC1C,2EAA2E,EAC3E,kCAAiB,CAAC,KAAK,EACvB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,kCAAiB,EAAC,IAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAC9G,CAAC;IAEF,sCAAsC;IAEtC,YAAY,CAAC,MAAM,EAAE,cAAc,EACjC,gHAAgH;UAC9G,8EAA8E;UAC9E,uGAAuG,EACzG,mCAAiB,CAAC,KAAK,EACvB,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,IAAA,mCAAiB,EAAC,IAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACtG,CAAC;IAEF,yDAAyD;IAEzD,KAAK,UAAU,cAAc,CAAC,GAAkC;QAC9D,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAA,qCAAsB,EAAC,MAAM,CAAC,CAAC;YAClD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC,CAAC;YACnE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,GAAG,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,oBAAoB;IAEpB,IAAI,MAAM,CAAC,SAAS,KAAK,OAAO,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;QAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAEnE,yEAAyE;QACzE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,gBAAgB;QACtD,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,wDAAa,MAAM,GAAC,CAAC;QAChE,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YACrD,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBAC7C,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC;iBAAM,IAAI,GAAG,CAAC,GAAG,KAAK,aAAa,EAAE,CAAC;gBACrC,mCAAmC;gBACnC,MAAM,IAAI,GAAG,MAAM,IAAA,qCAAkB,EAAC,EAAS,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAC5F,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;YACpD,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,QAAQ,4CAA4C,CAAC,CAAC;YAC7G,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC,CAAC,CAAC;QACH,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE;YAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+CAA+C,QAAQ,WAAW,CAAC,CAAC;QAC3F,CAAC,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,YAAY,EAAE,GAAG,wDAAa,MAAM,GAAC,CAAC;QAC9C,MAAM,EAAE,6BAA6B,EAAE,GAAG,wDAAa,oDAAoD,GAAC,CAAC;QAC7G,MAAM,SAAS,GAAG,IAAI,6BAA6B,CAAC,EAAE,kBAAkB,EAAE,SAAS,EAAE,CAAC,CAAC;QACvF,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YACjD,IAAI,GAAG,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;gBACvB,MAAM,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC1C,CAAC;iBAAM,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE,CAAC;gBACpD,MAAM,cAAc,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC;iBAAM,IAAI,GAAG,CAAC,GAAG,KAAK,aAAa,EAAE,CAAC;gBACrC,MAAM,IAAI,GAAG,MAAM,IAAA,qCAAkB,EAAC,EAAS,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;gBAC5F,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qDAAqD,MAAM,CAAC,QAAQ,QAAQ,CAAC,CAAC;YACnG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,+CAA+C,MAAM,CAAC,QAAQ,WAAW,CAAC,CAAC;QAClG,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAAC;IACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rate limiter and cost tracker for cloud sub-agents.
|
|
3
|
+
*
|
|
4
|
+
* Tracks usage per agent (claude_run, codex_run, gemini_run) with configurable
|
|
5
|
+
* rate limits per minute/hour/day. Persists usage data to JSON so limits
|
|
6
|
+
* survive server restarts.
|
|
7
|
+
*
|
|
8
|
+
* Local agents (local_llm_run, home_*, openclaw_*) are not rate-limited.
|
|
9
|
+
*/
|
|
10
|
+
export interface RateLimitConfig {
|
|
11
|
+
/** Max calls per minute (0 = unlimited) */
|
|
12
|
+
perMinute: number;
|
|
13
|
+
/** Max calls per hour (0 = unlimited) */
|
|
14
|
+
perHour: number;
|
|
15
|
+
/** Max calls per day (0 = unlimited) */
|
|
16
|
+
perDay: number;
|
|
17
|
+
/** Estimated cost per call in USD (for tracking, not enforcement) */
|
|
18
|
+
costPerCall: number;
|
|
19
|
+
}
|
|
20
|
+
export interface UsageRecord {
|
|
21
|
+
agent: string;
|
|
22
|
+
timestamp: number;
|
|
23
|
+
/** Estimated cost of this call in USD */
|
|
24
|
+
cost: number;
|
|
25
|
+
}
|
|
26
|
+
export interface UsageState {
|
|
27
|
+
/** Usage records (pruned to last 24h on load) */
|
|
28
|
+
records: UsageRecord[];
|
|
29
|
+
/** Running cost totals per agent */
|
|
30
|
+
dailyCosts: Record<string, number>;
|
|
31
|
+
/** Date string (YYYY-MM-DD) for dailyCosts reset */
|
|
32
|
+
costDate: string;
|
|
33
|
+
}
|
|
34
|
+
export interface QuotaInfo {
|
|
35
|
+
agent: string;
|
|
36
|
+
allowed: boolean;
|
|
37
|
+
/** Reason if not allowed */
|
|
38
|
+
reason?: string;
|
|
39
|
+
usage: {
|
|
40
|
+
lastMinute: number;
|
|
41
|
+
lastHour: number;
|
|
42
|
+
lastDay: number;
|
|
43
|
+
};
|
|
44
|
+
limits: {
|
|
45
|
+
perMinute: number;
|
|
46
|
+
perHour: number;
|
|
47
|
+
perDay: number;
|
|
48
|
+
};
|
|
49
|
+
estimatedCostToday: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Initialize the rate limiter. Call once at startup.
|
|
53
|
+
*/
|
|
54
|
+
export declare function initRateLimiter(opts?: {
|
|
55
|
+
dataDir?: string;
|
|
56
|
+
limits?: Record<string, Partial<RateLimitConfig>>;
|
|
57
|
+
}): void;
|
|
58
|
+
/**
|
|
59
|
+
* Check if an agent call is allowed under current rate limits.
|
|
60
|
+
* Does NOT record usage (call recordUsage after the call succeeds).
|
|
61
|
+
*/
|
|
62
|
+
export declare function checkRateLimit(agent: string): QuotaInfo;
|
|
63
|
+
/**
|
|
64
|
+
* Record a successful agent call. Updates usage state and schedules a flush.
|
|
65
|
+
*/
|
|
66
|
+
export declare function recordUsage(agent: string): void;
|
|
67
|
+
/**
|
|
68
|
+
* Get quota info for all rate-limited agents.
|
|
69
|
+
*/
|
|
70
|
+
export declare function getAllQuotas(): QuotaInfo[];
|
|
71
|
+
/**
|
|
72
|
+
* Get a summary of today's estimated costs.
|
|
73
|
+
*/
|
|
74
|
+
export declare function getCostSummary(): {
|
|
75
|
+
date: string;
|
|
76
|
+
agents: Record<string, number>;
|
|
77
|
+
total: number;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Force an immediate flush (call on server shutdown).
|
|
81
|
+
*/
|
|
82
|
+
export declare function flushNow(): void;
|
|
83
|
+
//# sourceMappingURL=rate-limiter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../src/rate-limiter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,iDAAiD;IACjD,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,MAAM,EAAE;QACN,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAwBD;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;CACnD,GAAG,IAAI,CAIP;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CA+CvD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAwB/C;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,SAAS,EAAE,CAM1C;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAOhG;AAoED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,IAAI,CAM/B"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Rate limiter and cost tracker for cloud sub-agents.
|
|
4
|
+
*
|
|
5
|
+
* Tracks usage per agent (claude_run, codex_run, gemini_run) with configurable
|
|
6
|
+
* rate limits per minute/hour/day. Persists usage data to JSON so limits
|
|
7
|
+
* survive server restarts.
|
|
8
|
+
*
|
|
9
|
+
* Local agents (local_llm_run, home_*, openclaw_*) are not rate-limited.
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
+
}) : function(o, v) {
|
|
25
|
+
o["default"] = v;
|
|
26
|
+
});
|
|
27
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
+
var ownKeys = function(o) {
|
|
29
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
+
var ar = [];
|
|
31
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
+
return ar;
|
|
33
|
+
};
|
|
34
|
+
return ownKeys(o);
|
|
35
|
+
};
|
|
36
|
+
return function (mod) {
|
|
37
|
+
if (mod && mod.__esModule) return mod;
|
|
38
|
+
var result = {};
|
|
39
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
+
__setModuleDefault(result, mod);
|
|
41
|
+
return result;
|
|
42
|
+
};
|
|
43
|
+
})();
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.initRateLimiter = initRateLimiter;
|
|
46
|
+
exports.checkRateLimit = checkRateLimit;
|
|
47
|
+
exports.recordUsage = recordUsage;
|
|
48
|
+
exports.getAllQuotas = getAllQuotas;
|
|
49
|
+
exports.getCostSummary = getCostSummary;
|
|
50
|
+
exports.flushNow = flushNow;
|
|
51
|
+
const fs = __importStar(require("fs"));
|
|
52
|
+
const path = __importStar(require("path"));
|
|
53
|
+
const os = __importStar(require("os"));
|
|
54
|
+
// --- Default limits ---
|
|
55
|
+
const DEFAULT_LIMITS = {
|
|
56
|
+
claude_run: { perMinute: 5, perHour: 30, perDay: 200, costPerCall: 0.03 },
|
|
57
|
+
codex_run: { perMinute: 5, perHour: 30, perDay: 200, costPerCall: 0.02 },
|
|
58
|
+
gemini_run: { perMinute: 10, perHour: 60, perDay: 500, costPerCall: 0.01 },
|
|
59
|
+
};
|
|
60
|
+
// --- State ---
|
|
61
|
+
let state = {
|
|
62
|
+
records: [],
|
|
63
|
+
dailyCosts: {},
|
|
64
|
+
costDate: todayString(),
|
|
65
|
+
};
|
|
66
|
+
let dataDir = path.join(os.homedir(), '.elvatis-mcp');
|
|
67
|
+
let customLimits = {};
|
|
68
|
+
let flushTimer = null;
|
|
69
|
+
// --- Public API ---
|
|
70
|
+
/**
|
|
71
|
+
* Initialize the rate limiter. Call once at startup.
|
|
72
|
+
*/
|
|
73
|
+
function initRateLimiter(opts) {
|
|
74
|
+
if (opts?.dataDir)
|
|
75
|
+
dataDir = opts.dataDir;
|
|
76
|
+
if (opts?.limits)
|
|
77
|
+
customLimits = opts.limits;
|
|
78
|
+
loadUsageState();
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Check if an agent call is allowed under current rate limits.
|
|
82
|
+
* Does NOT record usage (call recordUsage after the call succeeds).
|
|
83
|
+
*/
|
|
84
|
+
function checkRateLimit(agent) {
|
|
85
|
+
const limits = getLimits(agent);
|
|
86
|
+
if (!limits) {
|
|
87
|
+
// No limits configured for this agent (local/home tools)
|
|
88
|
+
return {
|
|
89
|
+
agent,
|
|
90
|
+
allowed: true,
|
|
91
|
+
usage: { lastMinute: 0, lastHour: 0, lastDay: 0 },
|
|
92
|
+
limits: { perMinute: 0, perHour: 0, perDay: 0 },
|
|
93
|
+
estimatedCostToday: 0,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
const now = Date.now();
|
|
97
|
+
const oneMinAgo = now - 60000;
|
|
98
|
+
const oneHourAgo = now - 3600000;
|
|
99
|
+
const oneDayAgo = now - 86400000;
|
|
100
|
+
const agentRecords = state.records.filter(r => r.agent === agent);
|
|
101
|
+
const lastMinute = agentRecords.filter(r => r.timestamp > oneMinAgo).length;
|
|
102
|
+
const lastHour = agentRecords.filter(r => r.timestamp > oneHourAgo).length;
|
|
103
|
+
const lastDay = agentRecords.filter(r => r.timestamp > oneDayAgo).length;
|
|
104
|
+
const usage = { lastMinute, lastHour, lastDay };
|
|
105
|
+
const limitsInfo = {
|
|
106
|
+
perMinute: limits.perMinute,
|
|
107
|
+
perHour: limits.perHour,
|
|
108
|
+
perDay: limits.perDay,
|
|
109
|
+
};
|
|
110
|
+
let allowed = true;
|
|
111
|
+
let reason;
|
|
112
|
+
if (limits.perMinute > 0 && lastMinute >= limits.perMinute) {
|
|
113
|
+
allowed = false;
|
|
114
|
+
reason = `Rate limit exceeded: ${lastMinute}/${limits.perMinute} calls in the last minute`;
|
|
115
|
+
}
|
|
116
|
+
else if (limits.perHour > 0 && lastHour >= limits.perHour) {
|
|
117
|
+
allowed = false;
|
|
118
|
+
reason = `Rate limit exceeded: ${lastHour}/${limits.perHour} calls in the last hour`;
|
|
119
|
+
}
|
|
120
|
+
else if (limits.perDay > 0 && lastDay >= limits.perDay) {
|
|
121
|
+
allowed = false;
|
|
122
|
+
reason = `Rate limit exceeded: ${lastDay}/${limits.perDay} calls in the last day`;
|
|
123
|
+
}
|
|
124
|
+
const estimatedCostToday = state.dailyCosts[agent] ?? 0;
|
|
125
|
+
return { agent, allowed, reason, usage, limits: limitsInfo, estimatedCostToday };
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Record a successful agent call. Updates usage state and schedules a flush.
|
|
129
|
+
*/
|
|
130
|
+
function recordUsage(agent) {
|
|
131
|
+
const limits = getLimits(agent);
|
|
132
|
+
const cost = limits?.costPerCall ?? 0;
|
|
133
|
+
// Reset daily costs if date changed
|
|
134
|
+
const today = todayString();
|
|
135
|
+
if (state.costDate !== today) {
|
|
136
|
+
state.dailyCosts = {};
|
|
137
|
+
state.costDate = today;
|
|
138
|
+
}
|
|
139
|
+
state.records.push({
|
|
140
|
+
agent,
|
|
141
|
+
timestamp: Date.now(),
|
|
142
|
+
cost,
|
|
143
|
+
});
|
|
144
|
+
state.dailyCosts[agent] = (state.dailyCosts[agent] ?? 0) + cost;
|
|
145
|
+
// Prune old records (keep last 24h only)
|
|
146
|
+
const cutoff = Date.now() - 86400000;
|
|
147
|
+
state.records = state.records.filter(r => r.timestamp > cutoff);
|
|
148
|
+
scheduleFlush();
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Get quota info for all rate-limited agents.
|
|
152
|
+
*/
|
|
153
|
+
function getAllQuotas() {
|
|
154
|
+
const agents = new Set([
|
|
155
|
+
...Object.keys(DEFAULT_LIMITS),
|
|
156
|
+
...Object.keys(customLimits),
|
|
157
|
+
]);
|
|
158
|
+
return Array.from(agents).map(agent => checkRateLimit(agent));
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Get a summary of today's estimated costs.
|
|
162
|
+
*/
|
|
163
|
+
function getCostSummary() {
|
|
164
|
+
const today = todayString();
|
|
165
|
+
if (state.costDate !== today) {
|
|
166
|
+
return { date: today, agents: {}, total: 0 };
|
|
167
|
+
}
|
|
168
|
+
const total = Object.values(state.dailyCosts).reduce((sum, c) => sum + c, 0);
|
|
169
|
+
return { date: today, agents: { ...state.dailyCosts }, total };
|
|
170
|
+
}
|
|
171
|
+
// --- Internal helpers ---
|
|
172
|
+
function getLimits(agent) {
|
|
173
|
+
const defaults = DEFAULT_LIMITS[agent];
|
|
174
|
+
if (!defaults)
|
|
175
|
+
return null;
|
|
176
|
+
const overrides = customLimits[agent];
|
|
177
|
+
if (!overrides)
|
|
178
|
+
return defaults;
|
|
179
|
+
return {
|
|
180
|
+
perMinute: overrides.perMinute ?? defaults.perMinute,
|
|
181
|
+
perHour: overrides.perHour ?? defaults.perHour,
|
|
182
|
+
perDay: overrides.perDay ?? defaults.perDay,
|
|
183
|
+
costPerCall: overrides.costPerCall ?? defaults.costPerCall,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
function todayString() {
|
|
187
|
+
return new Date().toISOString().slice(0, 10);
|
|
188
|
+
}
|
|
189
|
+
function usageFilePath() {
|
|
190
|
+
return path.join(dataDir, 'usage.json');
|
|
191
|
+
}
|
|
192
|
+
function loadUsageState() {
|
|
193
|
+
try {
|
|
194
|
+
const raw = fs.readFileSync(usageFilePath(), 'utf-8');
|
|
195
|
+
const loaded = JSON.parse(raw);
|
|
196
|
+
// Prune records older than 24h
|
|
197
|
+
const cutoff = Date.now() - 86400000;
|
|
198
|
+
loaded.records = (loaded.records ?? []).filter(r => r.timestamp > cutoff);
|
|
199
|
+
// Reset daily costs if date changed
|
|
200
|
+
const today = todayString();
|
|
201
|
+
if (loaded.costDate !== today) {
|
|
202
|
+
loaded.dailyCosts = {};
|
|
203
|
+
loaded.costDate = today;
|
|
204
|
+
}
|
|
205
|
+
state = loaded;
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
// File doesn't exist or is corrupt, start fresh
|
|
209
|
+
state = { records: [], dailyCosts: {}, costDate: todayString() };
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
function scheduleFlush() {
|
|
213
|
+
if (flushTimer)
|
|
214
|
+
return;
|
|
215
|
+
// Debounce: flush at most once per 5 seconds
|
|
216
|
+
flushTimer = setTimeout(() => {
|
|
217
|
+
flushTimer = null;
|
|
218
|
+
flushUsageState();
|
|
219
|
+
}, 5000);
|
|
220
|
+
}
|
|
221
|
+
function flushUsageState() {
|
|
222
|
+
try {
|
|
223
|
+
fs.mkdirSync(dataDir, { recursive: true });
|
|
224
|
+
fs.writeFileSync(usageFilePath(), JSON.stringify(state, null, 2), 'utf-8');
|
|
225
|
+
}
|
|
226
|
+
catch (err) {
|
|
227
|
+
process.stderr.write(`[elvatis-mcp] Failed to persist usage data: ${err}\n`);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Force an immediate flush (call on server shutdown).
|
|
232
|
+
*/
|
|
233
|
+
function flushNow() {
|
|
234
|
+
if (flushTimer) {
|
|
235
|
+
clearTimeout(flushTimer);
|
|
236
|
+
flushTimer = null;
|
|
237
|
+
}
|
|
238
|
+
flushUsageState();
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=rate-limiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../src/rate-limiter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* prompt_split_execute — execute a SplitPlan produced by prompt_split.
|
|
3
|
+
*
|
|
4
|
+
* Takes a plan (or runs prompt_split inline), executes subtasks in dependency
|
|
5
|
+
* order using parallelizable_groups, passes results between dependent tasks,
|
|
6
|
+
* and enforces rate limits on cloud agents.
|
|
7
|
+
*/
|
|
8
|
+
import { z } from 'zod';
|
|
9
|
+
import { Config } from '../config.js';
|
|
10
|
+
import type { ToolExtra } from '../index.js';
|
|
11
|
+
import type { SplitPlan } from './splitter.js';
|
|
12
|
+
export declare const splitExecuteSchema: z.ZodObject<{
|
|
13
|
+
plan: z.ZodOptional<z.ZodAny>;
|
|
14
|
+
prompt: z.ZodOptional<z.ZodString>;
|
|
15
|
+
overrides: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
16
|
+
id: z.ZodString;
|
|
17
|
+
agent: z.ZodOptional<z.ZodString>;
|
|
18
|
+
model: z.ZodOptional<z.ZodString>;
|
|
19
|
+
prompt: z.ZodOptional<z.ZodString>;
|
|
20
|
+
skip: z.ZodOptional<z.ZodBoolean>;
|
|
21
|
+
}, "strip", z.ZodTypeAny, {
|
|
22
|
+
id: string;
|
|
23
|
+
model?: string | undefined;
|
|
24
|
+
prompt?: string | undefined;
|
|
25
|
+
agent?: string | undefined;
|
|
26
|
+
skip?: boolean | undefined;
|
|
27
|
+
}, {
|
|
28
|
+
id: string;
|
|
29
|
+
model?: string | undefined;
|
|
30
|
+
prompt?: string | undefined;
|
|
31
|
+
agent?: string | undefined;
|
|
32
|
+
skip?: boolean | undefined;
|
|
33
|
+
}>, "many">>;
|
|
34
|
+
dry_run: z.ZodDefault<z.ZodBoolean>;
|
|
35
|
+
}, "strip", z.ZodTypeAny, {
|
|
36
|
+
dry_run: boolean;
|
|
37
|
+
prompt?: string | undefined;
|
|
38
|
+
plan?: any;
|
|
39
|
+
overrides?: {
|
|
40
|
+
id: string;
|
|
41
|
+
model?: string | undefined;
|
|
42
|
+
prompt?: string | undefined;
|
|
43
|
+
agent?: string | undefined;
|
|
44
|
+
skip?: boolean | undefined;
|
|
45
|
+
}[] | undefined;
|
|
46
|
+
}, {
|
|
47
|
+
prompt?: string | undefined;
|
|
48
|
+
plan?: any;
|
|
49
|
+
overrides?: {
|
|
50
|
+
id: string;
|
|
51
|
+
model?: string | undefined;
|
|
52
|
+
prompt?: string | undefined;
|
|
53
|
+
agent?: string | undefined;
|
|
54
|
+
skip?: boolean | undefined;
|
|
55
|
+
}[] | undefined;
|
|
56
|
+
dry_run?: boolean | undefined;
|
|
57
|
+
}>;
|
|
58
|
+
interface TaskResult {
|
|
59
|
+
id: string;
|
|
60
|
+
agent: string;
|
|
61
|
+
status: 'success' | 'error' | 'skipped' | 'rate_limited';
|
|
62
|
+
result?: unknown;
|
|
63
|
+
error?: string;
|
|
64
|
+
duration_ms?: number;
|
|
65
|
+
}
|
|
66
|
+
interface ExecutionResult {
|
|
67
|
+
plan: SplitPlan;
|
|
68
|
+
results: TaskResult[];
|
|
69
|
+
total_duration_ms: number;
|
|
70
|
+
summary: string;
|
|
71
|
+
}
|
|
72
|
+
export declare function handleSplitExecute(args: {
|
|
73
|
+
plan?: unknown;
|
|
74
|
+
prompt?: string;
|
|
75
|
+
overrides?: Array<{
|
|
76
|
+
id: string;
|
|
77
|
+
agent?: string;
|
|
78
|
+
model?: string;
|
|
79
|
+
prompt?: string;
|
|
80
|
+
skip?: boolean;
|
|
81
|
+
}>;
|
|
82
|
+
dry_run: boolean;
|
|
83
|
+
}, config: Config, extra?: ToolExtra): Promise<ExecutionResult>;
|
|
84
|
+
export {};
|
|
85
|
+
//# sourceMappingURL=split-execute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"split-execute.d.ts","sourceRoot":"","sources":["../../src/tools/split-execute.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAW,MAAM,eAAe,CAAC;AAqBxD,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAa7B,CAAC;AAIH,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,cAAc,CAAC;IACzD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,UAAU,eAAe;IACvB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB;AAID,wBAAsB,kBAAkB,CACtC,IAAI,EAAE;IACJ,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACnG,OAAO,EAAE,OAAO,CAAC;CAClB,EACD,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,SAAS,GAChB,OAAO,CAAC,eAAe,CAAC,CAiJ1B"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* prompt_split_execute — execute a SplitPlan produced by prompt_split.
|
|
4
|
+
*
|
|
5
|
+
* Takes a plan (or runs prompt_split inline), executes subtasks in dependency
|
|
6
|
+
* order using parallelizable_groups, passes results between dependent tasks,
|
|
7
|
+
* and enforces rate limits on cloud agents.
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
+
var ownKeys = function(o) {
|
|
27
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
+
var ar = [];
|
|
29
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
return ownKeys(o);
|
|
33
|
+
};
|
|
34
|
+
return function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
})();
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
exports.splitExecuteSchema = void 0;
|
|
44
|
+
exports.handleSplitExecute = handleSplitExecute;
|
|
45
|
+
const zod_1 = require("zod");
|
|
46
|
+
const rate_limiter_js_1 = require("../rate-limiter.js");
|
|
47
|
+
// Lazy imports to avoid circular dependency at module load time.
|
|
48
|
+
// Each handler is imported on first use and cached.
|
|
49
|
+
let _handleGeminiRun = null;
|
|
50
|
+
let _handleCodexRun = null;
|
|
51
|
+
let _handleClaudeRun = null;
|
|
52
|
+
let _handleLocalLlmRun = null;
|
|
53
|
+
let _handleOpenclawRun = null;
|
|
54
|
+
let _handlePromptSplit = null;
|
|
55
|
+
// --- Schema ---
|
|
56
|
+
const subtaskOverrideSchema = zod_1.z.object({
|
|
57
|
+
id: zod_1.z.string(),
|
|
58
|
+
agent: zod_1.z.string().optional(),
|
|
59
|
+
model: zod_1.z.string().optional(),
|
|
60
|
+
prompt: zod_1.z.string().optional(),
|
|
61
|
+
skip: zod_1.z.boolean().optional(),
|
|
62
|
+
}).describe('Override fields for a specific subtask');
|
|
63
|
+
exports.splitExecuteSchema = zod_1.z.object({
|
|
64
|
+
plan: zod_1.z.any().optional().describe('A SplitPlan object (from prompt_split). If omitted, provide "prompt" to generate one.'),
|
|
65
|
+
prompt: zod_1.z.string().optional().describe('If no plan is provided, run prompt_split with this prompt first (heuristic strategy).'),
|
|
66
|
+
overrides: zod_1.z.array(subtaskOverrideSchema).optional().describe('Optional per-task overrides: change agent, model, prompt, or skip a task.'),
|
|
67
|
+
dry_run: zod_1.z.boolean().default(false).describe('If true, return the plan with rate limit checks but do not execute.'),
|
|
68
|
+
});
|
|
69
|
+
// --- Handler ---
|
|
70
|
+
async function handleSplitExecute(args, config, extra) {
|
|
71
|
+
// Step 1: Get or generate plan
|
|
72
|
+
let plan;
|
|
73
|
+
if (args.plan && typeof args.plan === 'object') {
|
|
74
|
+
plan = args.plan;
|
|
75
|
+
}
|
|
76
|
+
else if (args.prompt) {
|
|
77
|
+
if (!_handlePromptSplit)
|
|
78
|
+
_handlePromptSplit = (await Promise.resolve().then(() => __importStar(require('./splitter.js')))).handlePromptSplit;
|
|
79
|
+
plan = await _handlePromptSplit({ prompt: args.prompt, strategy: 'heuristic' }, config);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
return {
|
|
83
|
+
plan: { original_prompt: '', subtasks: [], parallelizable_groups: [], estimated_total_seconds: 0, strategy_used: 'none', note: '' },
|
|
84
|
+
results: [],
|
|
85
|
+
total_duration_ms: 0,
|
|
86
|
+
summary: 'Error: provide either "plan" or "prompt".',
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
// Step 2: Apply overrides
|
|
90
|
+
if (args.overrides) {
|
|
91
|
+
const overrideMap = new Map(args.overrides.map(o => [o.id, o]));
|
|
92
|
+
for (const task of plan.subtasks) {
|
|
93
|
+
const override = overrideMap.get(task.id);
|
|
94
|
+
if (!override)
|
|
95
|
+
continue;
|
|
96
|
+
if (override.agent)
|
|
97
|
+
task.agent = override.agent;
|
|
98
|
+
if (override.model)
|
|
99
|
+
task.model = override.model;
|
|
100
|
+
if (override.prompt)
|
|
101
|
+
task.prompt = override.prompt;
|
|
102
|
+
}
|
|
103
|
+
// Mark skipped tasks
|
|
104
|
+
var skippedIds = new Set(args.overrides.filter(o => o.skip).map(o => o.id));
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
var skippedIds = new Set();
|
|
108
|
+
}
|
|
109
|
+
// Step 3: Rate limit pre-check (dry run or pre-flight)
|
|
110
|
+
const rateLimitIssues = [];
|
|
111
|
+
for (const task of plan.subtasks) {
|
|
112
|
+
if (skippedIds.has(task.id))
|
|
113
|
+
continue;
|
|
114
|
+
const quota = (0, rate_limiter_js_1.checkRateLimit)(task.agent);
|
|
115
|
+
if (!quota.allowed) {
|
|
116
|
+
rateLimitIssues.push(`${task.id} (${task.agent}): ${quota.reason}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (args.dry_run) {
|
|
120
|
+
return {
|
|
121
|
+
plan,
|
|
122
|
+
results: plan.subtasks.map(t => ({
|
|
123
|
+
id: t.id,
|
|
124
|
+
agent: t.agent,
|
|
125
|
+
status: skippedIds.has(t.id) ? 'skipped' : 'success',
|
|
126
|
+
})),
|
|
127
|
+
total_duration_ms: 0,
|
|
128
|
+
summary: rateLimitIssues.length > 0
|
|
129
|
+
? `Dry run complete. Rate limit issues: ${rateLimitIssues.join('; ')}`
|
|
130
|
+
: `Dry run complete. ${plan.subtasks.length} tasks ready to execute.`,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
// Step 4: Execute groups in order
|
|
134
|
+
const results = [];
|
|
135
|
+
const resultMap = new Map();
|
|
136
|
+
const startTime = Date.now();
|
|
137
|
+
// Send progress if available
|
|
138
|
+
const progressToken = extra?._meta?.progressToken;
|
|
139
|
+
const sendProgress = progressToken && extra?.sendNotification
|
|
140
|
+
? async (msg) => {
|
|
141
|
+
await extra.sendNotification({
|
|
142
|
+
method: 'notifications/progress',
|
|
143
|
+
params: { progressToken, progress: results.length, total: plan.subtasks.length, message: msg },
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
: async (_msg) => { };
|
|
147
|
+
for (const group of plan.parallelizable_groups) {
|
|
148
|
+
const groupTasks = group
|
|
149
|
+
.map(id => plan.subtasks.find(t => t.id === id))
|
|
150
|
+
.filter((t) => t != null);
|
|
151
|
+
// Execute tasks in this group concurrently
|
|
152
|
+
const groupPromises = groupTasks.map(async (task) => {
|
|
153
|
+
// Skip?
|
|
154
|
+
if (skippedIds.has(task.id)) {
|
|
155
|
+
return { id: task.id, agent: task.agent, status: 'skipped' };
|
|
156
|
+
}
|
|
157
|
+
// Rate limit check (re-check at execution time)
|
|
158
|
+
const quota = (0, rate_limiter_js_1.checkRateLimit)(task.agent);
|
|
159
|
+
if (!quota.allowed) {
|
|
160
|
+
return {
|
|
161
|
+
id: task.id,
|
|
162
|
+
agent: task.agent,
|
|
163
|
+
status: 'rate_limited',
|
|
164
|
+
error: quota.reason,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
// Inject prior results into prompt if task has dependencies
|
|
168
|
+
let prompt = task.prompt;
|
|
169
|
+
if (task.depends_on.length > 0) {
|
|
170
|
+
const priorResults = task.depends_on
|
|
171
|
+
.map(depId => {
|
|
172
|
+
const r = resultMap.get(depId);
|
|
173
|
+
return r ? `[Result from ${depId}]: ${typeof r === 'string' ? r : JSON.stringify(r)}` : null;
|
|
174
|
+
})
|
|
175
|
+
.filter(Boolean);
|
|
176
|
+
if (priorResults.length > 0) {
|
|
177
|
+
prompt = `${prompt}\n\nContext from prior tasks:\n${priorResults.join('\n')}`;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
await sendProgress(`Running ${task.id}: ${task.summary}`);
|
|
181
|
+
const taskStart = Date.now();
|
|
182
|
+
try {
|
|
183
|
+
const result = await dispatchTask(task, prompt, config, extra);
|
|
184
|
+
const duration = Date.now() - taskStart;
|
|
185
|
+
(0, rate_limiter_js_1.recordUsage)(task.agent);
|
|
186
|
+
resultMap.set(task.id, result);
|
|
187
|
+
return { id: task.id, agent: task.agent, status: 'success', result, duration_ms: duration };
|
|
188
|
+
}
|
|
189
|
+
catch (err) {
|
|
190
|
+
const duration = Date.now() - taskStart;
|
|
191
|
+
return { id: task.id, agent: task.agent, status: 'error', error: String(err), duration_ms: duration };
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
const groupResults = await Promise.all(groupPromises);
|
|
195
|
+
results.push(...groupResults);
|
|
196
|
+
}
|
|
197
|
+
const totalDuration = Date.now() - startTime;
|
|
198
|
+
const succeeded = results.filter(r => r.status === 'success').length;
|
|
199
|
+
const failed = results.filter(r => r.status === 'error').length;
|
|
200
|
+
const skipped = results.filter(r => r.status === 'skipped').length;
|
|
201
|
+
const rateLimited = results.filter(r => r.status === 'rate_limited').length;
|
|
202
|
+
let summary = `Executed ${succeeded}/${plan.subtasks.length} tasks in ${(totalDuration / 1000).toFixed(1)}s.`;
|
|
203
|
+
if (failed > 0)
|
|
204
|
+
summary += ` ${failed} failed.`;
|
|
205
|
+
if (skipped > 0)
|
|
206
|
+
summary += ` ${skipped} skipped.`;
|
|
207
|
+
if (rateLimited > 0)
|
|
208
|
+
summary += ` ${rateLimited} rate-limited.`;
|
|
209
|
+
await sendProgress(summary);
|
|
210
|
+
return { plan, results, total_duration_ms: totalDuration, summary };
|
|
211
|
+
}
|
|
212
|
+
// --- Dispatch ---
|
|
213
|
+
async function dispatchTask(task, prompt, config, extra) {
|
|
214
|
+
switch (task.agent) {
|
|
215
|
+
case 'gemini_run': {
|
|
216
|
+
if (!_handleGeminiRun)
|
|
217
|
+
_handleGeminiRun = (await Promise.resolve().then(() => __importStar(require('./gemini.js')))).handleGeminiRun;
|
|
218
|
+
return _handleGeminiRun({ prompt, model: task.model !== 'gemini-2.5-flash' ? task.model : undefined, timeout_seconds: 60 }, config);
|
|
219
|
+
}
|
|
220
|
+
case 'codex_run': {
|
|
221
|
+
if (!_handleCodexRun)
|
|
222
|
+
_handleCodexRun = (await Promise.resolve().then(() => __importStar(require('./codex.js')))).handleCodexRun;
|
|
223
|
+
return _handleCodexRun({ prompt, model: task.model !== 'gpt-5-codex' ? task.model : undefined, sandbox: 'full-auto', timeout_seconds: 120 }, config);
|
|
224
|
+
}
|
|
225
|
+
case 'claude_run': {
|
|
226
|
+
if (!_handleClaudeRun)
|
|
227
|
+
_handleClaudeRun = (await Promise.resolve().then(() => __importStar(require('./claude.js')))).handleClaudeRun;
|
|
228
|
+
return _handleClaudeRun({ prompt, model: task.model !== 'claude-sonnet-4-6' ? task.model : undefined, timeout_seconds: 60 });
|
|
229
|
+
}
|
|
230
|
+
case 'local_llm_run': {
|
|
231
|
+
if (!_handleLocalLlmRun)
|
|
232
|
+
_handleLocalLlmRun = (await Promise.resolve().then(() => __importStar(require('./local-llm.js')))).handleLocalLlmRun;
|
|
233
|
+
return _handleLocalLlmRun({ prompt, timeout_seconds: 60, stream: false }, config, extra);
|
|
234
|
+
}
|
|
235
|
+
case 'openclaw_run': {
|
|
236
|
+
if (!_handleOpenclawRun)
|
|
237
|
+
_handleOpenclawRun = (await Promise.resolve().then(() => __importStar(require('./openclaw.js')))).handleOpenclawRun;
|
|
238
|
+
return _handleOpenclawRun({ message: prompt, timeout_seconds: 120 }, config);
|
|
239
|
+
}
|
|
240
|
+
default:
|
|
241
|
+
// For non-dispatchable agents (home_*, memory_*, cron_*), return guidance
|
|
242
|
+
return {
|
|
243
|
+
note: `Agent "${task.agent}" cannot be auto-dispatched. Call the tool directly with the prompt.`,
|
|
244
|
+
prompt,
|
|
245
|
+
agent: task.agent,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=split-execute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"split-execute.js","sourceRoot":"","sources":["../../src/tools/split-execute.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elvatis_com/elvatis-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "MCP server for OpenClaw — expose smart home, memory, cron, and more to Claude Desktop, Cursor, Windsurf, and any MCP client",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|