agentinit 1.4.1 → 1.6.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/CHANGELOG.md +19 -0
- package/README.md +209 -0
- package/dist/agentinit-1.6.0.tgz +0 -0
- package/dist/agents/Agent.d.ts +110 -0
- package/dist/agents/Agent.d.ts.map +1 -0
- package/dist/agents/Agent.js +174 -0
- package/dist/agents/Agent.js.map +1 -0
- package/dist/agents/ClaudeAgent.d.ts +50 -0
- package/dist/agents/ClaudeAgent.d.ts.map +1 -0
- package/dist/agents/ClaudeAgent.js +249 -0
- package/dist/agents/ClaudeAgent.js.map +1 -0
- package/dist/agents/ClaudeDesktopAgent.d.ts +49 -0
- package/dist/agents/ClaudeDesktopAgent.d.ts.map +1 -0
- package/dist/agents/ClaudeDesktopAgent.js +143 -0
- package/dist/agents/ClaudeDesktopAgent.js.map +1 -0
- package/dist/agents/CodexCliAgent.d.ts +48 -0
- package/dist/agents/CodexCliAgent.d.ts.map +1 -0
- package/dist/agents/CodexCliAgent.js +262 -0
- package/dist/agents/CodexCliAgent.js.map +1 -0
- package/dist/agents/CursorAgent.d.ts +44 -0
- package/dist/agents/CursorAgent.d.ts.map +1 -0
- package/dist/agents/CursorAgent.js +231 -0
- package/dist/agents/CursorAgent.js.map +1 -0
- package/dist/agents/DroidAgent.d.ts +52 -0
- package/dist/agents/DroidAgent.d.ts.map +1 -0
- package/dist/agents/DroidAgent.js +228 -0
- package/dist/agents/DroidAgent.js.map +1 -0
- package/dist/agents/GeminiCliAgent.d.ts +40 -0
- package/dist/agents/GeminiCliAgent.d.ts.map +1 -0
- package/dist/agents/GeminiCliAgent.js +195 -0
- package/dist/agents/GeminiCliAgent.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +33365 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/apply.d.ts +2 -0
- package/dist/commands/apply.d.ts.map +1 -0
- package/dist/commands/apply.js +468 -0
- package/dist/commands/apply.js.map +1 -0
- package/dist/commands/config.d.ts +8 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +6 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/detect.d.ts +6 -0
- package/dist/commands/detect.d.ts.map +1 -0
- package/dist/commands/detect.js +55 -0
- package/dist/commands/detect.js.map +1 -0
- package/dist/commands/init.d.ts +7 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +105 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/mcp.d.ts +8 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +127 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/subagents.d.ts +9 -0
- package/dist/commands/subagents.d.ts.map +1 -0
- package/dist/commands/subagents.js +6 -0
- package/dist/commands/subagents.js.map +1 -0
- package/dist/commands/sync.d.ts +7 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +49 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/verifyMcp.d.ts +2 -0
- package/dist/commands/verifyMcp.d.ts.map +1 -0
- package/dist/commands/verifyMcp.js +215 -0
- package/dist/commands/verifyMcp.js.map +1 -0
- package/dist/constants/index.d.ts +3 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +3 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/constants/mcp.d.ts +9 -0
- package/dist/constants/mcp.d.ts.map +1 -0
- package/dist/constants/mcp.js +28 -0
- package/dist/constants/mcp.js.map +1 -0
- package/dist/constants/tokens.d.ts +6 -0
- package/dist/constants/tokens.d.ts.map +1 -0
- package/dist/constants/tokens.js +5 -0
- package/dist/constants/tokens.js.map +1 -0
- package/dist/core/agentDetector.d.ts +9 -0
- package/dist/core/agentDetector.d.ts.map +1 -0
- package/dist/core/agentDetector.js +51 -0
- package/dist/core/agentDetector.js.map +1 -0
- package/dist/core/agentManager.d.ts +55 -0
- package/dist/core/agentManager.d.ts.map +1 -0
- package/dist/core/agentManager.js +113 -0
- package/dist/core/agentManager.js.map +1 -0
- package/dist/core/configMerger.d.ts +49 -0
- package/dist/core/configMerger.d.ts.map +1 -0
- package/dist/core/configMerger.js +180 -0
- package/dist/core/configMerger.js.map +1 -0
- package/dist/core/mcpClient.d.ts +38 -0
- package/dist/core/mcpClient.d.ts.map +1 -0
- package/dist/core/mcpClient.js +416 -0
- package/dist/core/mcpClient.js.map +1 -0
- package/dist/core/mcpFilter.d.ts +44 -0
- package/dist/core/mcpFilter.d.ts.map +1 -0
- package/dist/core/mcpFilter.js +126 -0
- package/dist/core/mcpFilter.js.map +1 -0
- package/dist/core/mcpParser.d.ts +25 -0
- package/dist/core/mcpParser.d.ts.map +1 -0
- package/dist/core/mcpParser.js +297 -0
- package/dist/core/mcpParser.js.map +1 -0
- package/dist/core/propagator.d.ts +25 -0
- package/dist/core/propagator.d.ts.map +1 -0
- package/dist/core/propagator.js +154 -0
- package/dist/core/propagator.js.map +1 -0
- package/dist/core/rulesApplicator.d.ts +29 -0
- package/dist/core/rulesApplicator.d.ts.map +1 -0
- package/dist/core/rulesApplicator.js +181 -0
- package/dist/core/rulesApplicator.js.map +1 -0
- package/dist/core/rulesParser.d.ts +41 -0
- package/dist/core/rulesParser.d.ts.map +1 -0
- package/dist/core/rulesParser.js +260 -0
- package/dist/core/rulesParser.js.map +1 -0
- package/dist/core/rulesTemplateLoader.d.ts +31 -0
- package/dist/core/rulesTemplateLoader.d.ts.map +1 -0
- package/dist/core/rulesTemplateLoader.js +75 -0
- package/dist/core/rulesTemplateLoader.js.map +1 -0
- package/dist/core/stackDetector.d.ts +16 -0
- package/dist/core/stackDetector.d.ts.map +1 -0
- package/dist/core/stackDetector.js +234 -0
- package/dist/core/stackDetector.js.map +1 -0
- package/dist/core/templateEngine.d.ts +15 -0
- package/dist/core/templateEngine.d.ts.map +1 -0
- package/dist/core/templateEngine.js +260 -0
- package/dist/core/templateEngine.js.map +1 -0
- package/dist/core/tomlGenerator.d.ts +24 -0
- package/dist/core/tomlGenerator.d.ts.map +1 -0
- package/dist/core/tomlGenerator.js +185 -0
- package/dist/core/tomlGenerator.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -33195
- package/dist/index.js.map +1 -0
- package/dist/lib/index.d.ts +39 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +40 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/types/index.d.ts +23 -0
- package/dist/lib/types/index.d.ts.map +1 -0
- package/dist/lib/types/index.js +23 -0
- package/dist/lib/types/index.js.map +1 -0
- package/dist/lib/utils/index.d.ts +18 -0
- package/dist/lib/utils/index.d.ts.map +1 -0
- package/dist/lib/utils/index.js +21 -0
- package/dist/lib/utils/index.js.map +1 -0
- package/dist/lib/verifier/index.d.ts +22 -0
- package/dist/lib/verifier/index.d.ts.map +1 -0
- package/dist/lib/verifier/index.js +22 -0
- package/dist/lib/verifier/index.js.map +1 -0
- package/dist/registry/mcpRegistry.d.ts +12 -0
- package/dist/registry/mcpRegistry.d.ts.map +1 -0
- package/dist/registry/mcpRegistry.js +114 -0
- package/dist/registry/mcpRegistry.js.map +1 -0
- package/dist/types/index.d.ts +180 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +21 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/rules.d.ts +51 -0
- package/dist/types/rules.d.ts.map +1 -0
- package/dist/types/rules.js +2 -0
- package/dist/types/rules.js.map +1 -0
- package/dist/utils/fs.d.ts +12 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +91 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/logger.d.ts +14 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +36 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/paths.d.ts +77 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +140 -0
- package/dist/utils/paths.js.map +1 -0
- package/package.json +30 -6
- package/dist/agentinit-1.4.1.tgz +0 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { readFileSync } from 'fs';
|
|
2
|
+
import { fileURLToPath } from 'url';
|
|
3
|
+
import { dirname, join } from 'path';
|
|
4
|
+
export const DEFAULT_CONNECTION_TIMEOUT_MS = 30000;
|
|
5
|
+
// Dynamic version from package.json
|
|
6
|
+
function getPackageVersion() {
|
|
7
|
+
try {
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
+
const __dirname = dirname(__filename);
|
|
10
|
+
const packageJsonPath = join(__dirname, '../../package.json');
|
|
11
|
+
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
|
|
12
|
+
return packageJson.version || '1.0.0';
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return '1.0.0';
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export const MCP_VERIFIER_CONFIG = {
|
|
19
|
+
name: "agentinit-verifier",
|
|
20
|
+
version: getPackageVersion()
|
|
21
|
+
};
|
|
22
|
+
export class TimeoutError extends Error {
|
|
23
|
+
constructor(message) {
|
|
24
|
+
super(message);
|
|
25
|
+
this.name = 'TimeoutError';
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/constants/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAErC,MAAM,CAAC,MAAM,6BAA6B,GAAG,KAAK,CAAC;AAEnD,oCAAoC;AACpC,SAAS,iBAAiB;IACxB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;QACvE,OAAO,WAAW,CAAC,OAAO,IAAI,OAAO,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,oBAAoB;IAC1B,OAAO,EAAE,iBAAiB,EAAE;CACpB,CAAC;AAEX,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/constants/tokens.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB;;;CAGzB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,OAAO,sBAAsB,CAAC,MAAM,OAAO,sBAAsB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/constants/tokens.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,GAAG,EAAE,IAAI;IACT,MAAM,EAAE,KAAK;CACL,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AgentConfig } from '../types/index.js';
|
|
2
|
+
export declare class AgentDetector {
|
|
3
|
+
private readonly agentConfigs;
|
|
4
|
+
detectAgents(projectPath: string): Promise<AgentConfig[]>;
|
|
5
|
+
private checkAgentFiles;
|
|
6
|
+
detectAgentByName(projectPath: string, agentName: string): Promise<AgentConfig | null>;
|
|
7
|
+
getSupportedAgents(): string[];
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=agentDetector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentDetector.d.ts","sourceRoot":"","sources":["../../src/core/agentDetector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAW3B;IAEI,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YAiBjD,eAAe;IAavB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAc5F,kBAAkB,IAAI,MAAM,EAAE;CAG/B"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { resolve } from 'path';
|
|
2
|
+
import { fileExists } from '../utils/fs.js';
|
|
3
|
+
export class AgentDetector {
|
|
4
|
+
agentConfigs = [
|
|
5
|
+
{ name: 'cursor', files: ['.cursorrules', '.cursor/settings.json'] },
|
|
6
|
+
{ name: 'claude', files: ['CLAUDE.md', '.claude/config.md'] },
|
|
7
|
+
{ name: 'windsurf', files: ['.windsurfrules', '.windsurf'] },
|
|
8
|
+
{ name: 'copilot', files: ['.github/copilot.yml'] },
|
|
9
|
+
{ name: 'codeium', files: ['.codeium/config.json'] },
|
|
10
|
+
{ name: 'codex', files: ['.codex/config.toml'] },
|
|
11
|
+
{ name: 'gemini', files: ['.gemini/settings.json'] }
|
|
12
|
+
];
|
|
13
|
+
async detectAgents(projectPath) {
|
|
14
|
+
const results = [];
|
|
15
|
+
for (const config of this.agentConfigs) {
|
|
16
|
+
const detected = await this.checkAgentFiles(projectPath, config.files);
|
|
17
|
+
results.push({
|
|
18
|
+
name: config.name,
|
|
19
|
+
files: config.files,
|
|
20
|
+
detected: detected.found,
|
|
21
|
+
...(detected.path && { configPath: detected.path })
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
return results;
|
|
25
|
+
}
|
|
26
|
+
async checkAgentFiles(projectPath, files) {
|
|
27
|
+
for (const file of files) {
|
|
28
|
+
const fullPath = resolve(projectPath, file);
|
|
29
|
+
if (await fileExists(fullPath)) {
|
|
30
|
+
return { found: true, path: fullPath };
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return { found: false };
|
|
34
|
+
}
|
|
35
|
+
async detectAgentByName(projectPath, agentName) {
|
|
36
|
+
const config = this.agentConfigs.find(c => c.name === agentName);
|
|
37
|
+
if (!config)
|
|
38
|
+
return null;
|
|
39
|
+
const detected = await this.checkAgentFiles(projectPath, config.files);
|
|
40
|
+
return {
|
|
41
|
+
name: config.name,
|
|
42
|
+
files: config.files,
|
|
43
|
+
detected: detected.found,
|
|
44
|
+
...(detected.path && { configPath: detected.path })
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
getSupportedAgents() {
|
|
48
|
+
return this.agentConfigs.map(c => c.name);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=agentDetector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentDetector.js","sourceRoot":"","sources":["../../src/core/agentDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C,MAAM,OAAO,aAAa;IACP,YAAY,GAGxB;QACH,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,cAAc,EAAE,uBAAuB,CAAC,EAAE;QACpE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,WAAW,EAAE,mBAAmB,CAAC,EAAE;QAC7D,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,gBAAgB,EAAE,WAAW,CAAC,EAAE;QAC5D,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,qBAAqB,CAAC,EAAE;QACnD,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,sBAAsB,CAAC,EAAE;QACpD,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,oBAAoB,CAAC,EAAE;QAChD,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,uBAAuB,CAAC,EAAE;KACrD,CAAC;IAEF,KAAK,CAAC,YAAY,CAAC,WAAmB;QACpC,MAAM,OAAO,GAAkB,EAAE,CAAC;QAElC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAEvE,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,QAAQ,EAAE,QAAQ,CAAC,KAAK;gBACxB,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;aACpD,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,WAAmB,EACnB,KAAe;QAEf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAC5C,IAAI,MAAM,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YACzC,CAAC;QACH,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,WAAmB,EAAE,SAAiB;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QAEzB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAEvE,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,QAAQ,EAAE,QAAQ,CAAC,KAAK;YACxB,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;SACpD,CAAC;IACJ,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;CACF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Agent } from '../agents/Agent.js';
|
|
2
|
+
import type { AgentDetectionResult } from '../types/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Manager class for AI coding agents
|
|
5
|
+
* Handles agent registration, detection, and selection
|
|
6
|
+
*/
|
|
7
|
+
export declare class AgentManager {
|
|
8
|
+
private agents;
|
|
9
|
+
constructor();
|
|
10
|
+
/**
|
|
11
|
+
* Register the default supported agents
|
|
12
|
+
*/
|
|
13
|
+
private registerDefaultAgents;
|
|
14
|
+
/**
|
|
15
|
+
* Get all registered agents
|
|
16
|
+
*/
|
|
17
|
+
getAllAgents(): Agent[];
|
|
18
|
+
/**
|
|
19
|
+
* Get an agent by its ID
|
|
20
|
+
*/
|
|
21
|
+
getAgentById(id: string): Agent | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* Get all supported agent IDs
|
|
24
|
+
*/
|
|
25
|
+
getSupportedAgentIds(): string[];
|
|
26
|
+
/**
|
|
27
|
+
* Detect which agents are present in the given project path
|
|
28
|
+
*/
|
|
29
|
+
detectAgents(projectPath: string): Promise<AgentDetectionResult[]>;
|
|
30
|
+
/**
|
|
31
|
+
* Detect a specific agent by ID in the project path
|
|
32
|
+
*/
|
|
33
|
+
detectAgentById(projectPath: string, agentId: string): Promise<AgentDetectionResult | null>;
|
|
34
|
+
/**
|
|
35
|
+
* Get the primary detected agent (first one found, prioritized by registration order)
|
|
36
|
+
*/
|
|
37
|
+
getPrimaryAgent(projectPath: string): Promise<AgentDetectionResult | null>;
|
|
38
|
+
/**
|
|
39
|
+
* Register a custom agent
|
|
40
|
+
*/
|
|
41
|
+
registerAgent(agent: Agent): void;
|
|
42
|
+
/**
|
|
43
|
+
* Check if any agents are present in the project
|
|
44
|
+
*/
|
|
45
|
+
hasAnyAgents(projectPath: string): Promise<boolean>;
|
|
46
|
+
/**
|
|
47
|
+
* Get a summary of all detected agents
|
|
48
|
+
*/
|
|
49
|
+
getDetectionSummary(projectPath: string): Promise<string>;
|
|
50
|
+
/**
|
|
51
|
+
* Filter agents by their capabilities
|
|
52
|
+
*/
|
|
53
|
+
getAgentsByCapability(capability: keyof Agent['capabilities']): Agent[];
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=agentManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentManager.d.ts","sourceRoot":"","sources":["../../src/core/agentManager.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAe;;IAM7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAW7B;;OAEG;IACH,YAAY,IAAI,KAAK,EAAE;IAIvB;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAI3C;;OAEG;IACH,oBAAoB,IAAI,MAAM,EAAE;IAIhC;;OAEG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAaxE;;OAEG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IASjG;;OAEG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAKhF;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAMjC;;OAEG;IACG,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKzD;;OAEG;IACG,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAW/D;;OAEG;IACH,qBAAqB,CAAC,UAAU,EAAE,MAAM,KAAK,CAAC,cAAc,CAAC,GAAG,KAAK,EAAE;CAMxE"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { ClaudeAgent } from '../agents/ClaudeAgent.js';
|
|
2
|
+
import { ClaudeDesktopAgent } from '../agents/ClaudeDesktopAgent.js';
|
|
3
|
+
import { CodexCliAgent } from '../agents/CodexCliAgent.js';
|
|
4
|
+
import { GeminiCliAgent } from '../agents/GeminiCliAgent.js';
|
|
5
|
+
import { CursorAgent } from '../agents/CursorAgent.js';
|
|
6
|
+
import { DroidAgent } from '../agents/DroidAgent.js';
|
|
7
|
+
/**
|
|
8
|
+
* Manager class for AI coding agents
|
|
9
|
+
* Handles agent registration, detection, and selection
|
|
10
|
+
*/
|
|
11
|
+
export class AgentManager {
|
|
12
|
+
agents = [];
|
|
13
|
+
constructor() {
|
|
14
|
+
this.registerDefaultAgents();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Register the default supported agents
|
|
18
|
+
*/
|
|
19
|
+
registerDefaultAgents() {
|
|
20
|
+
this.agents = [
|
|
21
|
+
new ClaudeAgent(),
|
|
22
|
+
new ClaudeDesktopAgent(),
|
|
23
|
+
new CodexCliAgent(),
|
|
24
|
+
new GeminiCliAgent(),
|
|
25
|
+
new CursorAgent(),
|
|
26
|
+
new DroidAgent()
|
|
27
|
+
];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get all registered agents
|
|
31
|
+
*/
|
|
32
|
+
getAllAgents() {
|
|
33
|
+
return [...this.agents];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Get an agent by its ID
|
|
37
|
+
*/
|
|
38
|
+
getAgentById(id) {
|
|
39
|
+
return this.agents.find(agent => agent.id === id);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Get all supported agent IDs
|
|
43
|
+
*/
|
|
44
|
+
getSupportedAgentIds() {
|
|
45
|
+
return this.agents.map(agent => agent.id);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Detect which agents are present in the given project path
|
|
49
|
+
*/
|
|
50
|
+
async detectAgents(projectPath) {
|
|
51
|
+
const results = [];
|
|
52
|
+
for (const agent of this.agents) {
|
|
53
|
+
const detection = await agent.detectPresence(projectPath);
|
|
54
|
+
if (detection) {
|
|
55
|
+
results.push(detection);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return results;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Detect a specific agent by ID in the project path
|
|
62
|
+
*/
|
|
63
|
+
async detectAgentById(projectPath, agentId) {
|
|
64
|
+
const agent = this.getAgentById(agentId);
|
|
65
|
+
if (!agent) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
return await agent.detectPresence(projectPath);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get the primary detected agent (first one found, prioritized by registration order)
|
|
72
|
+
*/
|
|
73
|
+
async getPrimaryAgent(projectPath) {
|
|
74
|
+
const detectedAgents = await this.detectAgents(projectPath);
|
|
75
|
+
return detectedAgents.length > 0 ? detectedAgents[0] : null;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Register a custom agent
|
|
79
|
+
*/
|
|
80
|
+
registerAgent(agent) {
|
|
81
|
+
// Remove existing agent with same ID if present
|
|
82
|
+
this.agents = this.agents.filter(existing => existing.id !== agent.id);
|
|
83
|
+
this.agents.push(agent);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Check if any agents are present in the project
|
|
87
|
+
*/
|
|
88
|
+
async hasAnyAgents(projectPath) {
|
|
89
|
+
const detected = await this.detectAgents(projectPath);
|
|
90
|
+
return detected.length > 0;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get a summary of all detected agents
|
|
94
|
+
*/
|
|
95
|
+
async getDetectionSummary(projectPath) {
|
|
96
|
+
const detected = await this.detectAgents(projectPath);
|
|
97
|
+
if (detected.length === 0) {
|
|
98
|
+
return 'No AI coding agents detected in this project.';
|
|
99
|
+
}
|
|
100
|
+
const agentNames = detected.map(d => d.agent.name).join(', ');
|
|
101
|
+
return `Detected ${detected.length} agent${detected.length > 1 ? 's' : ''}: ${agentNames}`;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Filter agents by their capabilities
|
|
105
|
+
*/
|
|
106
|
+
getAgentsByCapability(capability) {
|
|
107
|
+
return this.agents.filter(agent => {
|
|
108
|
+
const cap = agent.capabilities[capability];
|
|
109
|
+
return typeof cap === 'boolean' ? cap : Object.values(cap).some(Boolean);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=agentManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agentManager.js","sourceRoot":"","sources":["../../src/core/agentManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration file merging utility
|
|
3
|
+
* Handles merging of JSON and TOML configuration files
|
|
4
|
+
*/
|
|
5
|
+
export declare class ConfigMerger {
|
|
6
|
+
/**
|
|
7
|
+
* Merge JSON configurations
|
|
8
|
+
* Deep merges objects, arrays are replaced entirely
|
|
9
|
+
*/
|
|
10
|
+
static mergeJSON(existing: any, newData: any): any;
|
|
11
|
+
/**
|
|
12
|
+
* Merge TOML configurations
|
|
13
|
+
* Similar to JSON merge but handles TOML-specific formatting
|
|
14
|
+
*/
|
|
15
|
+
static mergeTOML(existingToml: string, newData: any): string;
|
|
16
|
+
/**
|
|
17
|
+
* Safely parse JSON with error handling
|
|
18
|
+
*/
|
|
19
|
+
static parseJSON(jsonString: string, fallback?: any): any;
|
|
20
|
+
/**
|
|
21
|
+
* Safely parse TOML with error handling
|
|
22
|
+
*/
|
|
23
|
+
static parseTOML(tomlString: string, fallback?: any): any;
|
|
24
|
+
/**
|
|
25
|
+
* Format JSON with standard formatting
|
|
26
|
+
*/
|
|
27
|
+
static formatJSON(data: any): string;
|
|
28
|
+
/**
|
|
29
|
+
* Format TOML with custom formatting for better readability
|
|
30
|
+
*/
|
|
31
|
+
static formatTOML(data: any, options?: {
|
|
32
|
+
header?: string;
|
|
33
|
+
sectionSeparator?: boolean;
|
|
34
|
+
compactArrays?: boolean;
|
|
35
|
+
}): string;
|
|
36
|
+
/**
|
|
37
|
+
* Convert multi-line arrays to single-line format in TOML
|
|
38
|
+
*/
|
|
39
|
+
private static compactArrays;
|
|
40
|
+
/**
|
|
41
|
+
* Deep clone an object (utility method)
|
|
42
|
+
*/
|
|
43
|
+
static deepClone(obj: any): any;
|
|
44
|
+
/**
|
|
45
|
+
* Merge arrays with deduplication
|
|
46
|
+
*/
|
|
47
|
+
static mergeArrays(existing: any[], newItems: any[], keyField?: string): any[];
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=configMerger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configMerger.d.ts","sourceRoot":"","sources":["../../src/core/configMerger.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,qBAAa,YAAY;IACvB;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,GAAG,GAAG;IAwBlD;;;OAGG;IACH,MAAM,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,MAAM;IAgB5D;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,GAAE,GAAQ,GAAG,GAAG;IAa7D;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,GAAE,GAAQ,GAAG,GAAG;IAa7D;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM;IAIpC;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,GAAE;QACpC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;KACpB,GAAG,MAAM;IAsCf;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAmB5B;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG;IAc/B;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE;CAsB/E"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import * as TOML from '@iarna/toml';
|
|
2
|
+
/**
|
|
3
|
+
* Configuration file merging utility
|
|
4
|
+
* Handles merging of JSON and TOML configuration files
|
|
5
|
+
*/
|
|
6
|
+
export class ConfigMerger {
|
|
7
|
+
/**
|
|
8
|
+
* Merge JSON configurations
|
|
9
|
+
* Deep merges objects, arrays are replaced entirely
|
|
10
|
+
*/
|
|
11
|
+
static mergeJSON(existing, newData) {
|
|
12
|
+
if (!existing)
|
|
13
|
+
return newData;
|
|
14
|
+
if (!newData)
|
|
15
|
+
return existing;
|
|
16
|
+
const merged = { ...existing };
|
|
17
|
+
for (const [key, value] of Object.entries(newData)) {
|
|
18
|
+
if (value === null || value === undefined) {
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if (typeof value === 'object' && !Array.isArray(value) &&
|
|
22
|
+
merged[key] && typeof merged[key] === 'object' && !Array.isArray(merged[key])) {
|
|
23
|
+
// Deep merge objects
|
|
24
|
+
merged[key] = this.mergeJSON(merged[key], value);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
// Replace primitive values and arrays
|
|
28
|
+
merged[key] = value;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return merged;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Merge TOML configurations
|
|
35
|
+
* Similar to JSON merge but handles TOML-specific formatting
|
|
36
|
+
*/
|
|
37
|
+
static mergeTOML(existingToml, newData) {
|
|
38
|
+
let existingConfig = {};
|
|
39
|
+
if (existingToml && existingToml.trim()) {
|
|
40
|
+
try {
|
|
41
|
+
existingConfig = TOML.parse(existingToml);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
console.warn('Warning: Existing TOML configuration is invalid, starting fresh');
|
|
45
|
+
existingConfig = {};
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const merged = this.mergeJSON(existingConfig, newData);
|
|
49
|
+
return TOML.stringify(merged);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Safely parse JSON with error handling
|
|
53
|
+
*/
|
|
54
|
+
static parseJSON(jsonString, fallback = {}) {
|
|
55
|
+
if (!jsonString || !jsonString.trim()) {
|
|
56
|
+
return fallback;
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
return JSON.parse(jsonString);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
console.warn('Warning: Invalid JSON, using fallback value');
|
|
63
|
+
return fallback;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Safely parse TOML with error handling
|
|
68
|
+
*/
|
|
69
|
+
static parseTOML(tomlString, fallback = {}) {
|
|
70
|
+
if (!tomlString || !tomlString.trim()) {
|
|
71
|
+
return fallback;
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
return TOML.parse(tomlString);
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
console.warn('Warning: Invalid TOML, using fallback value');
|
|
78
|
+
return fallback;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Format JSON with standard formatting
|
|
83
|
+
*/
|
|
84
|
+
static formatJSON(data) {
|
|
85
|
+
return JSON.stringify(data, null, 2);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Format TOML with custom formatting for better readability
|
|
89
|
+
*/
|
|
90
|
+
static formatTOML(data, options = {}) {
|
|
91
|
+
let tomlString = TOML.stringify(data);
|
|
92
|
+
if (options.compactArrays) {
|
|
93
|
+
tomlString = this.compactArrays(tomlString);
|
|
94
|
+
}
|
|
95
|
+
const lines = tomlString.split('\n');
|
|
96
|
+
const formattedLines = [];
|
|
97
|
+
// Add header if provided
|
|
98
|
+
if (options.header) {
|
|
99
|
+
formattedLines.push(`# ${options.header}`);
|
|
100
|
+
formattedLines.push('# Generated automatically by agentinit');
|
|
101
|
+
formattedLines.push('');
|
|
102
|
+
}
|
|
103
|
+
let lastWasSection = false;
|
|
104
|
+
for (const line of lines) {
|
|
105
|
+
const trimmedLine = line.trim();
|
|
106
|
+
if (trimmedLine.startsWith('[') && trimmedLine.endsWith(']')) {
|
|
107
|
+
// Section header
|
|
108
|
+
if (options.sectionSeparator && lastWasSection) {
|
|
109
|
+
formattedLines.push(''); // Add blank line between sections
|
|
110
|
+
}
|
|
111
|
+
formattedLines.push(trimmedLine);
|
|
112
|
+
lastWasSection = true;
|
|
113
|
+
}
|
|
114
|
+
else if (trimmedLine) {
|
|
115
|
+
formattedLines.push(trimmedLine);
|
|
116
|
+
lastWasSection = false;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return formattedLines.join('\n') + '\n';
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Convert multi-line arrays to single-line format in TOML
|
|
123
|
+
*/
|
|
124
|
+
static compactArrays(tomlString) {
|
|
125
|
+
return tomlString.replace(/(\w+)\s*=\s*\[\s*\n((?:\s*[^[\]]+,?\s*\n)*)\s*\]/g, (match, key, content) => {
|
|
126
|
+
const items = content
|
|
127
|
+
.split('\n')
|
|
128
|
+
.map((line) => line.trim())
|
|
129
|
+
.filter((line) => line && line !== '')
|
|
130
|
+
.map((line) => line.replace(/,$/, '').trim())
|
|
131
|
+
.filter((item) => item);
|
|
132
|
+
if (items.length > 0) {
|
|
133
|
+
return `${key} = [${items.join(', ')}]`;
|
|
134
|
+
}
|
|
135
|
+
return `${key} = []`;
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Deep clone an object (utility method)
|
|
140
|
+
*/
|
|
141
|
+
static deepClone(obj) {
|
|
142
|
+
if (obj === null || typeof obj !== 'object')
|
|
143
|
+
return obj;
|
|
144
|
+
if (obj instanceof Date)
|
|
145
|
+
return new Date(obj.getTime());
|
|
146
|
+
if (Array.isArray(obj))
|
|
147
|
+
return obj.map(item => this.deepClone(item));
|
|
148
|
+
const cloned = {};
|
|
149
|
+
for (const key in obj) {
|
|
150
|
+
if (obj.hasOwnProperty(key)) {
|
|
151
|
+
cloned[key] = this.deepClone(obj[key]);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return cloned;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Merge arrays with deduplication
|
|
158
|
+
*/
|
|
159
|
+
static mergeArrays(existing, newItems, keyField) {
|
|
160
|
+
if (!Array.isArray(existing))
|
|
161
|
+
existing = [];
|
|
162
|
+
if (!Array.isArray(newItems))
|
|
163
|
+
return existing;
|
|
164
|
+
if (!keyField) {
|
|
165
|
+
// Simple deduplication
|
|
166
|
+
return [...new Set([...existing, ...newItems])];
|
|
167
|
+
}
|
|
168
|
+
// Deduplication by key field
|
|
169
|
+
const merged = [...existing];
|
|
170
|
+
const existingKeys = new Set(existing.map(item => item[keyField]));
|
|
171
|
+
for (const newItem of newItems) {
|
|
172
|
+
if (!existingKeys.has(newItem[keyField])) {
|
|
173
|
+
merged.push(newItem);
|
|
174
|
+
existingKeys.add(newItem[keyField]);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return merged;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=configMerger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configMerger.js","sourceRoot":"","sources":["../../src/core/configMerger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { MCPServerConfig, MCPVerificationResult } from '../types/index.js';
|
|
2
|
+
export declare class MCPVerificationError extends Error {
|
|
3
|
+
readonly serverName: string;
|
|
4
|
+
constructor(message: string, serverName: string);
|
|
5
|
+
}
|
|
6
|
+
export declare class MCPVerifier {
|
|
7
|
+
private defaultTimeout;
|
|
8
|
+
constructor(defaultTimeout?: number);
|
|
9
|
+
/**
|
|
10
|
+
* Color utility function for token display
|
|
11
|
+
*/
|
|
12
|
+
private colorizeTokenCount;
|
|
13
|
+
/**
|
|
14
|
+
* Calculate token counts for MCP tools based on how they appear in Claude's context
|
|
15
|
+
*/
|
|
16
|
+
private calculateToolTokens;
|
|
17
|
+
/**
|
|
18
|
+
* Verify a single MCP server
|
|
19
|
+
*/
|
|
20
|
+
verifyServer(server: MCPServerConfig, timeout?: number): Promise<MCPVerificationResult>;
|
|
21
|
+
/**
|
|
22
|
+
* Verify multiple MCP servers
|
|
23
|
+
*/
|
|
24
|
+
verifyServers(servers: MCPServerConfig[], timeout?: number): Promise<MCPVerificationResult[]>;
|
|
25
|
+
/**
|
|
26
|
+
* Create the appropriate transport for the server type
|
|
27
|
+
*/
|
|
28
|
+
private createTransport;
|
|
29
|
+
/**
|
|
30
|
+
* Connect to the server and retrieve capabilities
|
|
31
|
+
*/
|
|
32
|
+
private connectAndVerify;
|
|
33
|
+
/**
|
|
34
|
+
* Format verification results for display
|
|
35
|
+
*/
|
|
36
|
+
formatResults(results: MCPVerificationResult[]): string;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=mcpClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpClient.d.ts","sourceRoot":"","sources":["../../src/core/mcpClient.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EAKtB,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,oBAAqB,SAAQ,KAAK;aACA,UAAU,EAAE,MAAM;gBAAnD,OAAO,EAAE,MAAM,EAAkB,UAAU,EAAE,MAAM;CAIhE;AAGD,qBAAa,WAAW;IACtB,OAAO,CAAC,cAAc,CAAS;gBAEnB,cAAc,GAAE,MAAsC;IAIlE;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAsE3B;;OAEG;IACG,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAiF7F;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAsBnG;;OAEG;YACW,eAAe;IA0C7B;;OAEG;YACW,gBAAgB;IA8G9B;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,qBAAqB,EAAE,GAAG,MAAM;CAiFxD"}
|