erosolar-cli 1.7.55 → 1.7.56
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/package.json +1 -1
- package/dist/active-stack-security.d.ts +0 -110
- package/dist/active-stack-security.js +0 -313
- package/dist/active-stack-security.js.map +0 -1
- package/dist/advanced-targeting.d.ts +0 -113
- package/dist/advanced-targeting.js +0 -252
- package/dist/advanced-targeting.js.map +0 -1
- package/dist/bin/adapters/node/index.js +0 -33
- package/dist/bin/adapters/types.js +0 -1
- package/dist/bin/alpha-zero/agentWrapper.js +0 -165
- package/dist/bin/alpha-zero/codeEvaluator.js +0 -272
- package/dist/bin/alpha-zero/competitiveRunner.js +0 -219
- package/dist/bin/alpha-zero/index.js +0 -98
- package/dist/bin/alpha-zero/introspection.js +0 -298
- package/dist/bin/alpha-zero/metricsTracker.js +0 -207
- package/dist/bin/alpha-zero/security/core.js +0 -269
- package/dist/bin/alpha-zero/security/google.js +0 -308
- package/dist/bin/alpha-zero/security/googleLoader.js +0 -40
- package/dist/bin/alpha-zero/security/index.js +0 -31
- package/dist/bin/alpha-zero/security/simulation.js +0 -274
- package/dist/bin/alpha-zero/selfModification.js +0 -231
- package/dist/bin/alpha-zero/types.js +0 -30
- package/dist/bin/bin/erosolar-optimized.js +0 -205
- package/dist/bin/capabilities/agentSpawningCapability.js +0 -116
- package/dist/bin/capabilities/bashCapability.js +0 -22
- package/dist/bin/capabilities/cloudCapability.js +0 -36
- package/dist/bin/capabilities/codeAnalysisCapability.js +0 -22
- package/dist/bin/capabilities/codeQualityCapability.js +0 -23
- package/dist/bin/capabilities/dependencySecurityCapability.js +0 -22
- package/dist/bin/capabilities/devCapability.js +0 -22
- package/dist/bin/capabilities/editCapability.js +0 -28
- package/dist/bin/capabilities/emailCapability.js +0 -20
- package/dist/bin/capabilities/enhancedGitCapability.js +0 -221
- package/dist/bin/capabilities/filesystemCapability.js +0 -22
- package/dist/bin/capabilities/globCapability.js +0 -28
- package/dist/bin/capabilities/interactionCapability.js +0 -20
- package/dist/bin/capabilities/learnCapability.js +0 -22
- package/dist/bin/capabilities/mcpCapability.js +0 -20
- package/dist/bin/capabilities/notebookCapability.js +0 -28
- package/dist/bin/capabilities/planningCapability.js +0 -27
- package/dist/bin/capabilities/refactoringCapability.js +0 -23
- package/dist/bin/capabilities/repoChecksCapability.js +0 -22
- package/dist/bin/capabilities/searchCapability.js +0 -22
- package/dist/bin/capabilities/skillCapability.js +0 -76
- package/dist/bin/capabilities/taskManagementCapability.js +0 -20
- package/dist/bin/capabilities/testingCapability.js +0 -23
- package/dist/bin/capabilities/toolManifest.js +0 -159
- package/dist/bin/capabilities/toolRegistry.js +0 -114
- package/dist/bin/capabilities/webCapability.js +0 -20
- package/dist/bin/config.js +0 -139
- package/dist/bin/contracts/v1/agent.js +0 -7
- package/dist/bin/contracts/v1/agentProfileManifest.js +0 -8
- package/dist/bin/contracts/v1/agentRules.js +0 -9
- package/dist/bin/contracts/v1/toolAccess.js +0 -8
- package/dist/bin/erosolar-optimized.d.ts +0 -12
- package/dist/bin/erosolar-optimized.d.ts.map +0 -1
- package/dist/bin/erosolar-optimized.js +0 -239
- package/dist/bin/erosolar-optimized.js.map +0 -1
- package/dist/bin/headless/headlessApp.js +0 -172
- package/dist/bin/mcp/config.js +0 -202
- package/dist/bin/mcp/stdioClient.js +0 -172
- package/dist/bin/mcp/toolBridge.js +0 -104
- package/dist/bin/mcp/types.js +0 -1
- package/dist/bin/plugins/index.js +0 -113
- package/dist/bin/plugins/providers/anthropic/index.js +0 -25
- package/dist/bin/plugins/providers/deepseek/index.js +0 -24
- package/dist/bin/plugins/providers/google/index.js +0 -26
- package/dist/bin/plugins/providers/index.js +0 -19
- package/dist/bin/plugins/providers/ollama/index.js +0 -59
- package/dist/bin/plugins/providers/openai/index.js +0 -26
- package/dist/bin/plugins/providers/xai/index.js +0 -24
- package/dist/bin/plugins/tools/agentSpawning/agentSpawningPlugin.js +0 -8
- package/dist/bin/plugins/tools/bash/localBashPlugin.js +0 -13
- package/dist/bin/plugins/tools/checks/localRepoChecksPlugin.js +0 -13
- package/dist/bin/plugins/tools/cloud/cloudPlugin.js +0 -13
- package/dist/bin/plugins/tools/codeAnalysis/codeAnalysisPlugin.js +0 -13
- package/dist/bin/plugins/tools/codeQuality/codeQualityPlugin.js +0 -13
- package/dist/bin/plugins/tools/dependency/dependencyPlugin.js +0 -11
- package/dist/bin/plugins/tools/development/devPlugin.js +0 -13
- package/dist/bin/plugins/tools/edit/editPlugin.js +0 -14
- package/dist/bin/plugins/tools/email/emailPlugin.js +0 -11
- package/dist/bin/plugins/tools/enhancedGit/enhancedGitPlugin.js +0 -8
- package/dist/bin/plugins/tools/filesystem/localFilesystemPlugin.js +0 -13
- package/dist/bin/plugins/tools/glob/globPlugin.js +0 -14
- package/dist/bin/plugins/tools/index.js +0 -2
- package/dist/bin/plugins/tools/interaction/interactionPlugin.js +0 -11
- package/dist/bin/plugins/tools/learn/learnPlugin.js +0 -13
- package/dist/bin/plugins/tools/mcp/mcpPlugin.js +0 -8
- package/dist/bin/plugins/tools/nodeDefaults.js +0 -56
- package/dist/bin/plugins/tools/notebook/notebookPlugin.js +0 -14
- package/dist/bin/plugins/tools/planning/planningPlugin.js +0 -14
- package/dist/bin/plugins/tools/refactoring/refactoringPlugin.js +0 -11
- package/dist/bin/plugins/tools/registry.js +0 -57
- package/dist/bin/plugins/tools/search/localSearchPlugin.js +0 -13
- package/dist/bin/plugins/tools/skills/skillPlugin.js +0 -8
- package/dist/bin/plugins/tools/taskManagement/taskManagementPlugin.js +0 -11
- package/dist/bin/plugins/tools/testing/testingPlugin.js +0 -11
- package/dist/bin/plugins/tools/web/webPlugin.js +0 -11
- package/dist/bin/providers/anthropicProvider.js +0 -329
- package/dist/bin/providers/googleProvider.js +0 -203
- package/dist/bin/providers/openaiChatCompletionsProvider.js +0 -208
- package/dist/bin/providers/openaiResponsesProvider.js +0 -249
- package/dist/bin/providers/providerFactory.js +0 -24
- package/dist/bin/runtime/agentController.js +0 -321
- package/dist/bin/runtime/agentHost.js +0 -153
- package/dist/bin/runtime/agentSession.js +0 -195
- package/dist/bin/runtime/node.js +0 -10
- package/dist/bin/runtime/universal.js +0 -28
- package/dist/bin/skills/skillRepository.js +0 -236
- package/dist/bin/skills/types.js +0 -1
- package/dist/bin/subagents/taskRunner.js +0 -269
- package/dist/bin/tools/backgroundBashTools.js +0 -211
- package/dist/bin/tools/bashTools.js +0 -159
- package/dist/bin/tools/cloudTools.js +0 -864
- package/dist/bin/tools/codeAnalysisTools.js +0 -641
- package/dist/bin/tools/codeQualityTools.js +0 -294
- package/dist/bin/tools/dependencyTools.js +0 -282
- package/dist/bin/tools/devTools.js +0 -238
- package/dist/bin/tools/diffUtils.js +0 -137
- package/dist/bin/tools/editTools.js +0 -134
- package/dist/bin/tools/emailTools.js +0 -448
- package/dist/bin/tools/fileTools.js +0 -282
- package/dist/bin/tools/globTools.js +0 -173
- package/dist/bin/tools/grepTools.js +0 -332
- package/dist/bin/tools/interactionTools.js +0 -170
- package/dist/bin/tools/learnTools.js +0 -1818
- package/dist/bin/tools/notebookEditTools.js +0 -196
- package/dist/bin/tools/planningTools.js +0 -46
- package/dist/bin/tools/refactoringTools.js +0 -293
- package/dist/bin/tools/repoChecksTools.js +0 -160
- package/dist/bin/tools/searchTools.js +0 -206
- package/dist/bin/tools/skillTools.js +0 -177
- package/dist/bin/tools/taskManagementTools.js +0 -156
- package/dist/bin/tools/testingTools.js +0 -232
- package/dist/bin/tools/webTools.js +0 -480
- package/dist/bin/workspace.js +0 -106
- package/dist/bin/workspace.validator.js +0 -213
- package/dist/capabilities/offensiveSecurityCapability.d.ts +0 -26
- package/dist/capabilities/offensiveSecurityCapability.d.ts.map +0 -1
- package/dist/capabilities/offensiveSecurityCapability.js +0 -58
- package/dist/capabilities/offensiveSecurityCapability.js.map +0 -1
- package/dist/capabilities/realSecurityCapability.d.ts +0 -26
- package/dist/capabilities/realSecurityCapability.d.ts.map +0 -1
- package/dist/capabilities/realSecurityCapability.js +0 -53
- package/dist/capabilities/realSecurityCapability.js.map +0 -1
- package/dist/capabilities/securityCapability.d.ts +0 -32
- package/dist/capabilities/securityCapability.d.ts.map +0 -1
- package/dist/capabilities/securityCapability.js +0 -57
- package/dist/capabilities/securityCapability.js.map +0 -1
- package/dist/capabilities/ultimateSecurityCapability.d.ts +0 -42
- package/dist/capabilities/ultimateSecurityCapability.d.ts.map +0 -1
- package/dist/capabilities/ultimateSecurityCapability.js +0 -96
- package/dist/capabilities/ultimateSecurityCapability.js.map +0 -1
- package/dist/core/designThoughtCheck.d.ts +0 -196
- package/dist/core/designThoughtCheck.d.ts.map +0 -1
- package/dist/core/designThoughtCheck.js +0 -287
- package/dist/core/designThoughtCheck.js.map +0 -1
- package/dist/core/designThoughtCheckEngine.d.ts +0 -58
- package/dist/core/designThoughtCheckEngine.d.ts.map +0 -1
- package/dist/core/designThoughtCheckEngine.js +0 -358
- package/dist/core/designThoughtCheckEngine.js.map +0 -1
- package/dist/core/designThoughtCheckIntegration.d.ts +0 -103
- package/dist/core/designThoughtCheckIntegration.d.ts.map +0 -1
- package/dist/core/designThoughtCheckIntegration.js +0 -207
- package/dist/core/designThoughtCheckIntegration.js.map +0 -1
- package/dist/core/intelligenceTools.d.ts +0 -19
- package/dist/core/intelligenceTools.d.ts.map +0 -1
- package/dist/core/intelligenceTools.js +0 -453
- package/dist/core/intelligenceTools.js.map +0 -1
- package/dist/core/operationalTools.d.ts +0 -19
- package/dist/core/operationalTools.d.ts.map +0 -1
- package/dist/core/operationalTools.js +0 -467
- package/dist/core/operationalTools.js.map +0 -1
- package/dist/offensive/core/offensive-engine.d.ts +0 -171
- package/dist/offensive/core/offensive-engine.d.ts.map +0 -1
- package/dist/offensive/core/offensive-engine.js +0 -345
- package/dist/offensive/core/offensive-engine.js.map +0 -1
- package/dist/offensive/core/offensive-integration.d.ts +0 -129
- package/dist/offensive/core/offensive-integration.d.ts.map +0 -1
- package/dist/offensive/core/offensive-integration.js +0 -364
- package/dist/offensive/core/offensive-integration.js.map +0 -1
- package/dist/offensive/core/offensive-tools.d.ts +0 -55
- package/dist/offensive/core/offensive-tools.d.ts.map +0 -1
- package/dist/offensive/core/offensive-tools.js +0 -438
- package/dist/offensive/core/offensive-tools.js.map +0 -1
- package/dist/offensive/offensive-cli.d.ts +0 -48
- package/dist/offensive/offensive-cli.d.ts.map +0 -1
- package/dist/offensive/offensive-cli.js +0 -233
- package/dist/offensive/offensive-cli.js.map +0 -1
- package/dist/security/apt-simulation-cli.d.ts +0 -57
- package/dist/security/apt-simulation-cli.d.ts.map +0 -1
- package/dist/security/apt-simulation-cli.js +0 -278
- package/dist/security/apt-simulation-cli.js.map +0 -1
- package/dist/security/apt-simulation-engine-complete.d.ts +0 -97
- package/dist/security/apt-simulation-engine-complete.d.ts.map +0 -1
- package/dist/security/apt-simulation-engine-complete.js +0 -441
- package/dist/security/apt-simulation-engine-complete.js.map +0 -1
- package/dist/security/apt-simulation-engine.d.ts +0 -97
- package/dist/security/apt-simulation-engine.d.ts.map +0 -1
- package/dist/security/apt-simulation-engine.js +0 -441
- package/dist/security/apt-simulation-engine.js.map +0 -1
- package/dist/security/authorization.d.ts +0 -45
- package/dist/security/authorization.d.ts.map +0 -1
- package/dist/security/authorization.js +0 -128
- package/dist/security/authorization.js.map +0 -1
- package/dist/security/comprehensive-security-research.d.ts +0 -84
- package/dist/security/comprehensive-security-research.d.ts.map +0 -1
- package/dist/security/comprehensive-security-research.js +0 -211
- package/dist/security/comprehensive-security-research.js.map +0 -1
- package/dist/security/offensive/exploitationEngine.d.ts +0 -54
- package/dist/security/offensive/exploitationEngine.d.ts.map +0 -1
- package/dist/security/offensive/exploitationEngine.js +0 -263
- package/dist/security/offensive/exploitationEngine.js.map +0 -1
- package/dist/security/real/networkExploitation.d.ts +0 -92
- package/dist/security/real/networkExploitation.d.ts.map +0 -1
- package/dist/security/real/networkExploitation.js +0 -316
- package/dist/security/real/networkExploitation.js.map +0 -1
- package/dist/security/real/persistenceImplementation.d.ts +0 -62
- package/dist/security/real/persistenceImplementation.d.ts.map +0 -1
- package/dist/security/real/persistenceImplementation.js +0 -323
- package/dist/security/real/persistenceImplementation.js.map +0 -1
- package/dist/security/real/vulnerabilityScanner.d.ts +0 -73
- package/dist/security/real/vulnerabilityScanner.d.ts.map +0 -1
- package/dist/security/real/vulnerabilityScanner.js +0 -341
- package/dist/security/real/vulnerabilityScanner.js.map +0 -1
- package/dist/shell/capturePastePatch.d.ts +0 -9
- package/dist/shell/capturePastePatch.d.ts.map +0 -1
- package/dist/shell/capturePastePatch.js +0 -98
- package/dist/shell/capturePastePatch.js.map +0 -1
- package/dist/shell/enhancedInteractiveShell.d.ts +0 -90
- package/dist/shell/enhancedInteractiveShell.d.ts.map +0 -1
- package/dist/shell/enhancedInteractiveShell.js +0 -248
- package/dist/shell/enhancedInteractiveShell.js.map +0 -1
- package/dist/shell/inputProcessor.d.ts +0 -56
- package/dist/shell/inputProcessor.d.ts.map +0 -1
- package/dist/shell/inputProcessor.js +0 -172
- package/dist/shell/inputProcessor.js.map +0 -1
- package/dist/shell/interactiveShell-patch.d.ts +0 -27
- package/dist/shell/interactiveShell-patch.d.ts.map +0 -1
- package/dist/shell/interactiveShell-patch.js +0 -38
- package/dist/shell/interactiveShell-patch.js.map +0 -1
- package/dist/shell/interactiveShell-robust.d.ts +0 -26
- package/dist/shell/interactiveShell-robust.d.ts.map +0 -1
- package/dist/shell/interactiveShell-robust.js +0 -34
- package/dist/shell/interactiveShell-robust.js.map +0 -1
- package/dist/shell/multiLinePasteManager.d.ts +0 -106
- package/dist/shell/multiLinePasteManager.d.ts.map +0 -1
- package/dist/shell/multiLinePasteManager.js +0 -308
- package/dist/shell/multiLinePasteManager.js.map +0 -1
- package/dist/shell/processInputBlockPatch.d.ts +0 -8
- package/dist/shell/processInputBlockPatch.d.ts.map +0 -1
- package/dist/shell/processInputBlockPatch.js +0 -133
- package/dist/shell/processInputBlockPatch.js.map +0 -1
- package/dist/shell/unifiedInputProcessor.d.ts +0 -23
- package/dist/shell/unifiedInputProcessor.d.ts.map +0 -1
- package/dist/shell/unifiedInputProcessor.js +0 -92
- package/dist/shell/unifiedInputProcessor.js.map +0 -1
- package/dist/tools/enhancedSecurityTools.d.ts +0 -19
- package/dist/tools/enhancedSecurityTools.d.ts.map +0 -1
- package/dist/tools/enhancedSecurityTools.js +0 -215
- package/dist/tools/enhancedSecurityTools.js.map +0 -1
- package/dist/tools/offensiveSecurityTools.d.ts +0 -16
- package/dist/tools/offensiveSecurityTools.d.ts.map +0 -1
- package/dist/tools/offensiveSecurityTools.js +0 -285
- package/dist/tools/offensiveSecurityTools.js.map +0 -1
- package/dist/tools/realSecurityTools.d.ts +0 -18
- package/dist/tools/realSecurityTools.d.ts.map +0 -1
- package/dist/tools/realSecurityTools.js +0 -468
- package/dist/tools/realSecurityTools.js.map +0 -1
- package/dist/tools/securityTools.d.ts +0 -20
- package/dist/tools/securityTools.d.ts.map +0 -1
- package/dist/tools/securityTools.js +0 -449
- package/dist/tools/securityTools.js.map +0 -1
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
import { spawn } from 'node:child_process';
|
|
2
|
-
import { once } from 'node:events';
|
|
3
|
-
export class McpStdioClient {
|
|
4
|
-
constructor(config, workingDir) {
|
|
5
|
-
this.pending = new Map();
|
|
6
|
-
this.buffer = Buffer.alloc(0);
|
|
7
|
-
this.nextId = 1;
|
|
8
|
-
this.disposed = false;
|
|
9
|
-
this.stderrLog = [];
|
|
10
|
-
this.id = config.id;
|
|
11
|
-
this.description = config.description;
|
|
12
|
-
this.process = spawn(config.command, config.args, {
|
|
13
|
-
cwd: config.cwd ?? workingDir,
|
|
14
|
-
env: { ...process.env, ...config.env },
|
|
15
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
16
|
-
});
|
|
17
|
-
this.process.stdout.on('data', (chunk) => this.handleStdout(chunk));
|
|
18
|
-
this.process.stderr.on('data', (chunk) => this.handleStderr(chunk));
|
|
19
|
-
this.process.on('exit', (code, signal) => {
|
|
20
|
-
if (!this.disposed) {
|
|
21
|
-
const message = signal
|
|
22
|
-
? `MCP server "${this.id}" exited via signal ${signal}.`
|
|
23
|
-
: `MCP server "${this.id}" exited with code ${code}.`;
|
|
24
|
-
this.rejectAll(new Error(message));
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
this.ready = this.initialize();
|
|
28
|
-
}
|
|
29
|
-
async listTools() {
|
|
30
|
-
await this.ready;
|
|
31
|
-
const response = (await this.sendRequest('tools/list', {}));
|
|
32
|
-
return response?.tools ?? [];
|
|
33
|
-
}
|
|
34
|
-
async callTool(toolName, args) {
|
|
35
|
-
await this.ready;
|
|
36
|
-
const response = (await this.sendRequest('tools/call', {
|
|
37
|
-
name: toolName,
|
|
38
|
-
arguments: args ?? {},
|
|
39
|
-
}));
|
|
40
|
-
return response;
|
|
41
|
-
}
|
|
42
|
-
async dispose() {
|
|
43
|
-
if (this.disposed) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
this.disposed = true;
|
|
47
|
-
this.rejectAll(new Error(`MCP server "${this.id}" disposed.`));
|
|
48
|
-
this.process.kill();
|
|
49
|
-
await once(this.process, 'close').catch(() => { });
|
|
50
|
-
}
|
|
51
|
-
async initialize() {
|
|
52
|
-
await this.sendRequest('initialize', {
|
|
53
|
-
protocolVersion: '2024-11-05',
|
|
54
|
-
capabilities: {
|
|
55
|
-
tools: {
|
|
56
|
-
listChanged: true,
|
|
57
|
-
},
|
|
58
|
-
},
|
|
59
|
-
clientInfo: {
|
|
60
|
-
name: 'Erosolar CLI',
|
|
61
|
-
version: process.env['EROSOLAR_VERSION'] ?? 'dev',
|
|
62
|
-
},
|
|
63
|
-
});
|
|
64
|
-
await this.sendNotification('notifications/initialized', {});
|
|
65
|
-
}
|
|
66
|
-
async sendRequest(method, params) {
|
|
67
|
-
if (this.disposed) {
|
|
68
|
-
throw new Error(`MCP server "${this.id}" is not running.`);
|
|
69
|
-
}
|
|
70
|
-
const id = this.nextId++;
|
|
71
|
-
const payload = {
|
|
72
|
-
jsonrpc: '2.0',
|
|
73
|
-
id,
|
|
74
|
-
method,
|
|
75
|
-
params,
|
|
76
|
-
};
|
|
77
|
-
const serialized = JSON.stringify(payload);
|
|
78
|
-
this.process.stdin.write(`Content-Length: ${Buffer.byteLength(serialized, 'utf8')}\r\n\r\n${serialized}`);
|
|
79
|
-
return await new Promise((resolve, reject) => {
|
|
80
|
-
const timer = setTimeout(() => {
|
|
81
|
-
if (this.pending.has(id)) {
|
|
82
|
-
this.pending.delete(id);
|
|
83
|
-
reject(new Error(`Timed out waiting for "${method}" from MCP server "${this.id}".`));
|
|
84
|
-
}
|
|
85
|
-
}, 60000);
|
|
86
|
-
this.pending.set(id, { resolve, reject, method, timer });
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
async sendNotification(method, params) {
|
|
90
|
-
if (this.disposed) {
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
const payload = {
|
|
94
|
-
jsonrpc: '2.0',
|
|
95
|
-
method,
|
|
96
|
-
params,
|
|
97
|
-
};
|
|
98
|
-
const serialized = JSON.stringify(payload);
|
|
99
|
-
this.process.stdin.write(`Content-Length: ${Buffer.byteLength(serialized, 'utf8')}\r\n\r\n${serialized}`);
|
|
100
|
-
}
|
|
101
|
-
handleStdout(chunk) {
|
|
102
|
-
this.buffer = Buffer.concat([this.buffer, chunk]);
|
|
103
|
-
while (true) {
|
|
104
|
-
let headerIndex = this.buffer.indexOf('\r\n\r\n');
|
|
105
|
-
let delimiterLength = 4;
|
|
106
|
-
if (headerIndex === -1) {
|
|
107
|
-
headerIndex = this.buffer.indexOf('\n\n');
|
|
108
|
-
delimiterLength = 2;
|
|
109
|
-
}
|
|
110
|
-
if (headerIndex === -1) {
|
|
111
|
-
break;
|
|
112
|
-
}
|
|
113
|
-
const header = this.buffer.slice(0, headerIndex).toString('utf8');
|
|
114
|
-
const lengthMatch = header.match(/Content-Length:\s*(\d+)/i);
|
|
115
|
-
if (!lengthMatch) {
|
|
116
|
-
this.buffer = this.buffer.slice(headerIndex + 4);
|
|
117
|
-
continue;
|
|
118
|
-
}
|
|
119
|
-
const bodyLength = Number(lengthMatch[1]);
|
|
120
|
-
const totalLength = headerIndex + delimiterLength + bodyLength;
|
|
121
|
-
if (this.buffer.length < totalLength) {
|
|
122
|
-
break;
|
|
123
|
-
}
|
|
124
|
-
const body = this.buffer.slice(headerIndex + delimiterLength, totalLength).toString('utf8');
|
|
125
|
-
this.buffer = this.buffer.slice(totalLength);
|
|
126
|
-
this.handleMessage(body);
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
handleStderr(chunk) {
|
|
130
|
-
const text = chunk.toString('utf8').trim();
|
|
131
|
-
if (!text) {
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
this.stderrLog.push(text);
|
|
135
|
-
if (this.stderrLog.length > 5) {
|
|
136
|
-
this.stderrLog.shift();
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
handleMessage(payload) {
|
|
140
|
-
try {
|
|
141
|
-
const message = JSON.parse(payload);
|
|
142
|
-
if (typeof message.id === 'number' && this.pending.has(message.id)) {
|
|
143
|
-
const pending = this.pending.get(message.id);
|
|
144
|
-
this.pending.delete(message.id);
|
|
145
|
-
clearTimeout(pending.timer);
|
|
146
|
-
if (message.error) {
|
|
147
|
-
const errorMessage = message.error.message || `MCP server "${this.id}" returned an error.`;
|
|
148
|
-
const details = this.stderrLog.length ? `\n${this.stderrLog.join('\n')}` : '';
|
|
149
|
-
pending.reject(new Error(`${errorMessage}${details}`));
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
pending.resolve(message.result);
|
|
153
|
-
}
|
|
154
|
-
return;
|
|
155
|
-
}
|
|
156
|
-
if (message.method === 'notifications/tools/list_changed') {
|
|
157
|
-
// Tool list changed notification; callers can refresh by calling listTools again.
|
|
158
|
-
return;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
catch {
|
|
162
|
-
// Ignore malformed messages.
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
rejectAll(error) {
|
|
166
|
-
for (const pending of this.pending.values()) {
|
|
167
|
-
clearTimeout(pending.timer);
|
|
168
|
-
pending.reject(error);
|
|
169
|
-
}
|
|
170
|
-
this.pending.clear();
|
|
171
|
-
}
|
|
172
|
-
}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { loadMcpServers } from './config.js';
|
|
2
|
-
import { McpStdioClient } from './stdioClient.js';
|
|
3
|
-
export class McpToolBridge {
|
|
4
|
-
constructor(context) {
|
|
5
|
-
this.servers = [];
|
|
6
|
-
this.context = context;
|
|
7
|
-
}
|
|
8
|
-
async initialize() {
|
|
9
|
-
const configs = await loadMcpServers({
|
|
10
|
-
workingDir: this.context.workingDir,
|
|
11
|
-
env: this.context.env,
|
|
12
|
-
});
|
|
13
|
-
if (!configs.length) {
|
|
14
|
-
return [];
|
|
15
|
-
}
|
|
16
|
-
const suites = [];
|
|
17
|
-
for (const config of configs) {
|
|
18
|
-
try {
|
|
19
|
-
const client = new McpStdioClient(config, this.context.workingDir);
|
|
20
|
-
const tools = await client.listTools();
|
|
21
|
-
if (!tools.length) {
|
|
22
|
-
await client.dispose();
|
|
23
|
-
continue;
|
|
24
|
-
}
|
|
25
|
-
this.servers.push({ config, client, tools });
|
|
26
|
-
suites.push({
|
|
27
|
-
id: `mcp.${config.id}`,
|
|
28
|
-
description: `MCP server at ${config.description ?? config.command}`,
|
|
29
|
-
tools: tools.map((tool) => this.buildToolDefinition(config.id, client, tool)),
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
catch (error) {
|
|
33
|
-
// eslint-disable-next-line no-console
|
|
34
|
-
console.warn(`Failed to load MCP server "${config.id}" (${config.source}): ${error instanceof Error ? error.message : String(error)}`);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
return suites;
|
|
38
|
-
}
|
|
39
|
-
async dispose() {
|
|
40
|
-
await Promise.allSettled(this.servers.map((entry) => entry.client.dispose()));
|
|
41
|
-
this.servers = [];
|
|
42
|
-
}
|
|
43
|
-
buildToolDefinition(serverId, client, tool) {
|
|
44
|
-
const name = buildToolName(serverId, tool.name);
|
|
45
|
-
const description = tool.description
|
|
46
|
-
? `[${serverId}] ${tool.description}`
|
|
47
|
-
: `MCP tool "${tool.name}" from ${serverId}`;
|
|
48
|
-
return {
|
|
49
|
-
name,
|
|
50
|
-
description,
|
|
51
|
-
parameters: normalizeSchema(tool.inputSchema),
|
|
52
|
-
handler: async (args) => {
|
|
53
|
-
const response = await client.callTool(tool.name, args);
|
|
54
|
-
return formatToolResponse(response);
|
|
55
|
-
},
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
function buildToolName(serverId, toolName) {
|
|
60
|
-
const safeServer = serverId.replace(/[^a-z0-9_-]/gi, '_');
|
|
61
|
-
const safeTool = toolName.replace(/[^a-z0-9_-]/gi, '_');
|
|
62
|
-
return `mcp__${safeServer}__${safeTool}`;
|
|
63
|
-
}
|
|
64
|
-
function normalizeSchema(schema) {
|
|
65
|
-
if (schema && typeof schema === 'object') {
|
|
66
|
-
return schema;
|
|
67
|
-
}
|
|
68
|
-
return {
|
|
69
|
-
type: 'object',
|
|
70
|
-
additionalProperties: true,
|
|
71
|
-
properties: {},
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
function formatToolResponse(result) {
|
|
75
|
-
const blocks = Array.isArray(result?.content) ? result.content : [];
|
|
76
|
-
if (!blocks.length) {
|
|
77
|
-
return 'MCP tool completed without returning content.';
|
|
78
|
-
}
|
|
79
|
-
return blocks.map(formatContentBlock).join('\n\n');
|
|
80
|
-
}
|
|
81
|
-
function formatContentBlock(block) {
|
|
82
|
-
switch (block.type) {
|
|
83
|
-
case 'text':
|
|
84
|
-
return getStringField(block, 'text') ?? '';
|
|
85
|
-
case 'markdown':
|
|
86
|
-
return getStringField(block, 'markdown') ?? '';
|
|
87
|
-
case 'json': {
|
|
88
|
-
const jsonValue = block['json'];
|
|
89
|
-
return jsonValue !== undefined ? JSON.stringify(jsonValue, null, 2) : '';
|
|
90
|
-
}
|
|
91
|
-
case 'resource': {
|
|
92
|
-
const uri = getStringField(block, 'uri') ?? '(unknown uri)';
|
|
93
|
-
const description = getStringField(block, 'description');
|
|
94
|
-
return `Resource: ${uri}${description ? `\n${description}` : ''}`;
|
|
95
|
-
}
|
|
96
|
-
default:
|
|
97
|
-
return JSON.stringify(block, null, 2);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
function getStringField(block, key) {
|
|
101
|
-
const record = block;
|
|
102
|
-
const value = record[key];
|
|
103
|
-
return typeof value === 'string' ? value : null;
|
|
104
|
-
}
|
package/dist/bin/mcp/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Plugin System - Root Index
|
|
3
|
-
*
|
|
4
|
-
* Aggregates all plugin functionality for easy import.
|
|
5
|
-
*
|
|
6
|
-
* Principal Investigator: Bo Shang
|
|
7
|
-
* Framework: erosolar-cli
|
|
8
|
-
*/
|
|
9
|
-
// Re-export tool plugin system
|
|
10
|
-
export { registerToolPlugin, unregisterToolPlugin, listRegisteredToolPlugins, instantiateToolPlugins, } from './tools/index.js';
|
|
11
|
-
export { registerDefaultNodeToolPlugins } from './tools/nodeDefaults.js';
|
|
12
|
-
// Track loaded plugins
|
|
13
|
-
const loadedPlugins = new Map();
|
|
14
|
-
/**
|
|
15
|
-
* Register a plugin as loaded
|
|
16
|
-
*/
|
|
17
|
-
export function markPluginLoaded(plugin) {
|
|
18
|
-
loadedPlugins.set(plugin.id, plugin);
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Get a loaded plugin by ID
|
|
22
|
-
*/
|
|
23
|
-
export function getLoadedPlugin(id) {
|
|
24
|
-
return loadedPlugins.get(id);
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* List all loaded plugins
|
|
28
|
-
*/
|
|
29
|
-
export function listLoadedPlugins() {
|
|
30
|
-
return Array.from(loadedPlugins.values());
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* List available plugins (combines loaded + builtin)
|
|
34
|
-
*/
|
|
35
|
-
export function listAvailablePlugins() {
|
|
36
|
-
const available = new Set();
|
|
37
|
-
for (const id of BUILTIN_PLUGINS) {
|
|
38
|
-
available.add(id);
|
|
39
|
-
}
|
|
40
|
-
for (const id of loadedPlugins.keys()) {
|
|
41
|
-
available.add(id);
|
|
42
|
-
}
|
|
43
|
-
return Array.from(available);
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Get all plugin tool suites
|
|
47
|
-
*/
|
|
48
|
-
export function getAllPluginToolSuites() {
|
|
49
|
-
return listLoadedPlugins().filter((p) => p.enabled);
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Load a plugin by ID
|
|
53
|
-
*/
|
|
54
|
-
export async function loadPlugin(id) {
|
|
55
|
-
// Check if already loaded
|
|
56
|
-
const existing = loadedPlugins.get(id);
|
|
57
|
-
if (existing) {
|
|
58
|
-
return existing;
|
|
59
|
-
}
|
|
60
|
-
// Check if it's a builtin plugin
|
|
61
|
-
if (!BUILTIN_PLUGINS.includes(id)) {
|
|
62
|
-
return null;
|
|
63
|
-
}
|
|
64
|
-
// Create a loaded plugin entry
|
|
65
|
-
const plugin = {
|
|
66
|
-
id,
|
|
67
|
-
name: id.replace(/-/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase()),
|
|
68
|
-
version: '1.0.0',
|
|
69
|
-
enabled: true,
|
|
70
|
-
};
|
|
71
|
-
loadedPlugins.set(id, plugin);
|
|
72
|
-
return plugin;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Get plugin IDs from command line flags
|
|
76
|
-
*/
|
|
77
|
-
export function getPluginIdsFromFlags(flags) {
|
|
78
|
-
const ids = [];
|
|
79
|
-
for (const [flag, enabled] of Object.entries(flags)) {
|
|
80
|
-
if (enabled && BUILTIN_PLUGINS.includes(flag)) {
|
|
81
|
-
ids.push(flag);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return ids;
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Builtin plugin identifiers
|
|
88
|
-
*/
|
|
89
|
-
export const BUILTIN_PLUGINS = [
|
|
90
|
-
'local-filesystem',
|
|
91
|
-
'local-bash',
|
|
92
|
-
'local-search',
|
|
93
|
-
'edit',
|
|
94
|
-
'glob',
|
|
95
|
-
'web',
|
|
96
|
-
'mcp',
|
|
97
|
-
'code-analysis',
|
|
98
|
-
'code-quality',
|
|
99
|
-
'dependency',
|
|
100
|
-
'development',
|
|
101
|
-
'enhanced-git',
|
|
102
|
-
'interaction',
|
|
103
|
-
'notebook',
|
|
104
|
-
'planning',
|
|
105
|
-
'refactoring',
|
|
106
|
-
'skills',
|
|
107
|
-
'task-management',
|
|
108
|
-
'testing',
|
|
109
|
-
'agent-spawning',
|
|
110
|
-
'local-repo-checks',
|
|
111
|
-
'cloud',
|
|
112
|
-
'email',
|
|
113
|
-
];
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { AnthropicMessagesProvider } from '../../../providers/anthropicProvider.js';
|
|
2
|
-
import { registerProvider } from '../../../providers/providerFactory.js';
|
|
3
|
-
let registered = false;
|
|
4
|
-
export function registerAnthropicProviderPlugin() {
|
|
5
|
-
if (registered) {
|
|
6
|
-
return;
|
|
7
|
-
}
|
|
8
|
-
registerProvider('anthropic', (config) => {
|
|
9
|
-
const options = {
|
|
10
|
-
apiKey: requireEnv('ANTHROPIC_API_KEY'),
|
|
11
|
-
model: config.model,
|
|
12
|
-
...(typeof config.temperature === 'number' ? { temperature: config.temperature } : {}),
|
|
13
|
-
...(typeof config.maxTokens === 'number' ? { maxTokens: config.maxTokens } : {}),
|
|
14
|
-
};
|
|
15
|
-
return new AnthropicMessagesProvider(options);
|
|
16
|
-
});
|
|
17
|
-
registered = true;
|
|
18
|
-
}
|
|
19
|
-
function requireEnv(name) {
|
|
20
|
-
const value = process.env[name];
|
|
21
|
-
if (!value) {
|
|
22
|
-
throw new Error(`Missing required environment variable ${name}.`);
|
|
23
|
-
}
|
|
24
|
-
return value;
|
|
25
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { OpenAIChatCompletionsProvider } from '../../../providers/openaiChatCompletionsProvider.js';
|
|
2
|
-
import { registerProvider } from '../../../providers/providerFactory.js';
|
|
3
|
-
let registered = false;
|
|
4
|
-
export function registerDeepSeekProviderPlugin() {
|
|
5
|
-
if (registered) {
|
|
6
|
-
return;
|
|
7
|
-
}
|
|
8
|
-
registerProvider('deepseek', (config) => {
|
|
9
|
-
return new OpenAIChatCompletionsProvider({
|
|
10
|
-
apiKey: requireEnv('DEEPSEEK_API_KEY'),
|
|
11
|
-
model: config.model,
|
|
12
|
-
baseURL: 'https://api.deepseek.com',
|
|
13
|
-
providerId: 'deepseek',
|
|
14
|
-
});
|
|
15
|
-
});
|
|
16
|
-
registered = true;
|
|
17
|
-
}
|
|
18
|
-
function requireEnv(name) {
|
|
19
|
-
const value = process.env[name];
|
|
20
|
-
if (!value) {
|
|
21
|
-
throw new Error(`Missing required environment variable ${name}.`);
|
|
22
|
-
}
|
|
23
|
-
return value;
|
|
24
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { GoogleGenAIProvider } from '../../../providers/googleProvider.js';
|
|
2
|
-
import { registerProvider } from '../../../providers/providerFactory.js';
|
|
3
|
-
let registered = false;
|
|
4
|
-
export function registerGoogleProviderPlugin() {
|
|
5
|
-
if (registered) {
|
|
6
|
-
return;
|
|
7
|
-
}
|
|
8
|
-
registerProvider('google', (config) => {
|
|
9
|
-
const options = {
|
|
10
|
-
apiKey: requireEnv('GEMINI_API_KEY'),
|
|
11
|
-
model: config.model,
|
|
12
|
-
providerId: 'google',
|
|
13
|
-
...(typeof config.temperature === 'number' ? { temperature: config.temperature } : {}),
|
|
14
|
-
...(typeof config.maxTokens === 'number' ? { maxOutputTokens: config.maxTokens } : {}),
|
|
15
|
-
};
|
|
16
|
-
return new GoogleGenAIProvider(options);
|
|
17
|
-
});
|
|
18
|
-
registered = true;
|
|
19
|
-
}
|
|
20
|
-
function requireEnv(name) {
|
|
21
|
-
const value = process.env[name];
|
|
22
|
-
if (!value) {
|
|
23
|
-
throw new Error(`Missing required environment variable ${name}.`);
|
|
24
|
-
}
|
|
25
|
-
return value;
|
|
26
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { registerOpenAIProviderPlugin } from './openai/index.js';
|
|
2
|
-
import { registerAnthropicProviderPlugin } from './anthropic/index.js';
|
|
3
|
-
import { registerDeepSeekProviderPlugin } from './deepseek/index.js';
|
|
4
|
-
import { registerXaiProviderPlugin } from './xai/index.js';
|
|
5
|
-
import { registerGoogleProviderPlugin } from './google/index.js';
|
|
6
|
-
import { registerOllamaProviderPlugin } from './ollama/index.js';
|
|
7
|
-
let defaultsRegistered = false;
|
|
8
|
-
export function registerDefaultProviderPlugins() {
|
|
9
|
-
if (defaultsRegistered) {
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
registerOpenAIProviderPlugin();
|
|
13
|
-
registerAnthropicProviderPlugin();
|
|
14
|
-
registerDeepSeekProviderPlugin();
|
|
15
|
-
registerXaiProviderPlugin();
|
|
16
|
-
registerGoogleProviderPlugin();
|
|
17
|
-
registerOllamaProviderPlugin();
|
|
18
|
-
defaultsRegistered = true;
|
|
19
|
-
}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { OpenAIChatCompletionsProvider } from '../../../providers/openaiChatCompletionsProvider.js';
|
|
2
|
-
import { registerProvider } from '../../../providers/providerFactory.js';
|
|
3
|
-
let registered = false;
|
|
4
|
-
/**
|
|
5
|
-
* Register Ollama provider plugin.
|
|
6
|
-
*
|
|
7
|
-
* Ollama provides an OpenAI-compatible API, so we can reuse the OpenAI provider
|
|
8
|
-
* with a custom base URL. By default, Ollama runs on http://localhost:11434.
|
|
9
|
-
*/
|
|
10
|
-
export function registerOllamaProviderPlugin() {
|
|
11
|
-
if (registered) {
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
registerProvider('ollama', (config) => {
|
|
15
|
-
const baseURL = process.env['OLLAMA_BASE_URL'] || 'http://localhost:11434/v1';
|
|
16
|
-
const options = {
|
|
17
|
-
apiKey: 'ollama', // Ollama doesn't require an API key for local instances
|
|
18
|
-
model: config.model,
|
|
19
|
-
providerId: 'ollama',
|
|
20
|
-
baseURL,
|
|
21
|
-
...(typeof config.temperature === 'number' ? { temperature: config.temperature } : {}),
|
|
22
|
-
...(typeof config.maxTokens === 'number' ? { maxTokens: config.maxTokens } : {}),
|
|
23
|
-
};
|
|
24
|
-
return new OpenAIChatCompletionsProvider(options);
|
|
25
|
-
});
|
|
26
|
-
registered = true;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Query available models from local Ollama instance.
|
|
30
|
-
* Returns an array of model names that are currently available.
|
|
31
|
-
*/
|
|
32
|
-
export async function getAvailableOllamaModels(baseURL = 'http://localhost:11434') {
|
|
33
|
-
try {
|
|
34
|
-
const response = await fetch(`${baseURL}/api/tags`);
|
|
35
|
-
if (!response.ok) {
|
|
36
|
-
return [];
|
|
37
|
-
}
|
|
38
|
-
const data = (await response.json());
|
|
39
|
-
return data.models?.map((m) => m.name) ?? [];
|
|
40
|
-
}
|
|
41
|
-
catch {
|
|
42
|
-
return [];
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Check if Ollama is running and accessible.
|
|
47
|
-
*/
|
|
48
|
-
export async function isOllamaAvailable(baseURL = 'http://localhost:11434') {
|
|
49
|
-
try {
|
|
50
|
-
const response = await fetch(`${baseURL}/api/tags`, {
|
|
51
|
-
method: 'GET',
|
|
52
|
-
signal: AbortSignal.timeout(2000), // 2 second timeout
|
|
53
|
-
});
|
|
54
|
-
return response.ok;
|
|
55
|
-
}
|
|
56
|
-
catch {
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { OpenAIResponsesProvider } from '../../../providers/openaiResponsesProvider.js';
|
|
2
|
-
import { registerProvider } from '../../../providers/providerFactory.js';
|
|
3
|
-
let registered = false;
|
|
4
|
-
export function registerOpenAIProviderPlugin(providerId = 'openai') {
|
|
5
|
-
if (registered) {
|
|
6
|
-
return;
|
|
7
|
-
}
|
|
8
|
-
registerProvider(providerId, (config) => {
|
|
9
|
-
const options = {
|
|
10
|
-
apiKey: requireEnv('OPENAI_API_KEY'),
|
|
11
|
-
model: config.model,
|
|
12
|
-
providerId,
|
|
13
|
-
...(config.reasoningEffort ? { reasoningEffort: config.reasoningEffort } : {}),
|
|
14
|
-
...(config.textVerbosity ? { textVerbosity: config.textVerbosity } : {}),
|
|
15
|
-
};
|
|
16
|
-
return new OpenAIResponsesProvider(options);
|
|
17
|
-
});
|
|
18
|
-
registered = true;
|
|
19
|
-
}
|
|
20
|
-
function requireEnv(name) {
|
|
21
|
-
const value = process.env[name];
|
|
22
|
-
if (!value) {
|
|
23
|
-
throw new Error(`Missing required environment variable ${name}.`);
|
|
24
|
-
}
|
|
25
|
-
return value;
|
|
26
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { OpenAIChatCompletionsProvider } from '../../../providers/openaiChatCompletionsProvider.js';
|
|
2
|
-
import { registerProvider } from '../../../providers/providerFactory.js';
|
|
3
|
-
let registered = false;
|
|
4
|
-
export function registerXaiProviderPlugin() {
|
|
5
|
-
if (registered) {
|
|
6
|
-
return;
|
|
7
|
-
}
|
|
8
|
-
registerProvider('xai', (config) => {
|
|
9
|
-
return new OpenAIChatCompletionsProvider({
|
|
10
|
-
apiKey: requireEnv('XAI_API_KEY'),
|
|
11
|
-
model: config.model,
|
|
12
|
-
baseURL: 'https://api.x.ai/v1',
|
|
13
|
-
providerId: 'xai',
|
|
14
|
-
});
|
|
15
|
-
});
|
|
16
|
-
registered = true;
|
|
17
|
-
}
|
|
18
|
-
function requireEnv(name) {
|
|
19
|
-
const value = process.env[name];
|
|
20
|
-
if (!value) {
|
|
21
|
-
throw new Error(`Missing required environment variable ${name}.`);
|
|
22
|
-
}
|
|
23
|
-
return value;
|
|
24
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { AgentSpawningCapabilityModule } from '../../../capabilities/agentSpawningCapability.js';
|
|
2
|
-
export function createAgentSpawningToolPlugin() {
|
|
3
|
-
return {
|
|
4
|
-
id: 'tool.agent-spawning',
|
|
5
|
-
targets: ['node', 'cloud'],
|
|
6
|
-
create: () => new AgentSpawningCapabilityModule(),
|
|
7
|
-
};
|
|
8
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { BashCapabilityModule } from '../../../capabilities/bashCapability.js';
|
|
2
|
-
export function createLocalBashToolPlugin() {
|
|
3
|
-
return {
|
|
4
|
-
id: 'tool.bash.local',
|
|
5
|
-
description: 'Local bash execution with sandbox awareness.',
|
|
6
|
-
targets: ['node', 'cloud'],
|
|
7
|
-
create: (context) => {
|
|
8
|
-
return new BashCapabilityModule({
|
|
9
|
-
workingDir: context.workingDir,
|
|
10
|
-
});
|
|
11
|
-
},
|
|
12
|
-
};
|
|
13
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { RepoChecksCapabilityModule } from '../../../capabilities/repoChecksCapability.js';
|
|
2
|
-
export function createLocalRepoChecksPlugin() {
|
|
3
|
-
return {
|
|
4
|
-
id: 'tool.repo-checks.local',
|
|
5
|
-
description: 'Run npm-based repo checks (test/build/lint) in the sandboxed workspace.',
|
|
6
|
-
targets: ['node', 'cloud'],
|
|
7
|
-
create: (context) => {
|
|
8
|
-
return new RepoChecksCapabilityModule({
|
|
9
|
-
workingDir: context.workingDir,
|
|
10
|
-
});
|
|
11
|
-
},
|
|
12
|
-
};
|
|
13
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { CloudCapabilityModule } from '../../../capabilities/cloudCapability.js';
|
|
2
|
-
export function createCloudToolPlugin() {
|
|
3
|
-
return {
|
|
4
|
-
id: 'tool.cloud.deployment',
|
|
5
|
-
description: 'Multi-cloud deployment tools with auto-detection and auto-fix for Firebase, Aliyun, AWS, GCP, Azure, Vercel, Netlify, Cloudflare, and more.',
|
|
6
|
-
targets: ['node', 'cloud'],
|
|
7
|
-
create: (context) => {
|
|
8
|
-
return new CloudCapabilityModule({
|
|
9
|
-
workingDir: context.workingDir,
|
|
10
|
-
});
|
|
11
|
-
},
|
|
12
|
-
};
|
|
13
|
-
}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { CodeAnalysisCapabilityModule } from '../../../capabilities/codeAnalysisCapability.js';
|
|
2
|
-
export function createCodeAnalysisToolPlugin() {
|
|
3
|
-
return {
|
|
4
|
-
id: 'tool.code-analysis.structural',
|
|
5
|
-
description: 'Advanced code structure analysis, dependency tracking, and complexity metrics.',
|
|
6
|
-
targets: ['node'],
|
|
7
|
-
create: async (context) => {
|
|
8
|
-
return new CodeAnalysisCapabilityModule({
|
|
9
|
-
workingDir: context.workingDir,
|
|
10
|
-
});
|
|
11
|
-
},
|
|
12
|
-
};
|
|
13
|
-
}
|