agentinit 1.6.0 → 1.8.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 +40 -0
- package/README.md +220 -114
- package/dist/agents/Agent.d.ts +44 -0
- package/dist/agents/Agent.d.ts.map +1 -1
- package/dist/agents/Agent.js +111 -22
- package/dist/agents/Agent.js.map +1 -1
- package/dist/agents/AiderAgent.d.ts +9 -0
- package/dist/agents/AiderAgent.d.ts.map +1 -0
- package/dist/agents/AiderAgent.js +135 -0
- package/dist/agents/AiderAgent.js.map +1 -0
- package/dist/agents/ClaudeAgent.d.ts +4 -0
- package/dist/agents/ClaudeAgent.d.ts.map +1 -1
- package/dist/agents/ClaudeAgent.js +33 -18
- package/dist/agents/ClaudeAgent.js.map +1 -1
- package/dist/agents/ClaudeDesktopAgent.d.ts +5 -0
- package/dist/agents/ClaudeDesktopAgent.d.ts.map +1 -1
- package/dist/agents/ClaudeDesktopAgent.js +31 -1
- package/dist/agents/ClaudeDesktopAgent.js.map +1 -1
- package/dist/agents/ClineAgent.d.ts +8 -0
- package/dist/agents/ClineAgent.d.ts.map +1 -0
- package/dist/agents/ClineAgent.js +42 -0
- package/dist/agents/ClineAgent.js.map +1 -0
- package/dist/agents/CodexCliAgent.d.ts +4 -0
- package/dist/agents/CodexCliAgent.d.ts.map +1 -1
- package/dist/agents/CodexCliAgent.js +38 -8
- package/dist/agents/CodexCliAgent.js.map +1 -1
- package/dist/agents/CopilotAgent.d.ts +9 -0
- package/dist/agents/CopilotAgent.d.ts.map +1 -0
- package/dist/agents/CopilotAgent.js +131 -0
- package/dist/agents/CopilotAgent.js.map +1 -0
- package/dist/agents/CursorAgent.d.ts +4 -4
- package/dist/agents/CursorAgent.d.ts.map +1 -1
- package/dist/agents/CursorAgent.js +32 -43
- package/dist/agents/CursorAgent.js.map +1 -1
- package/dist/agents/DroidAgent.d.ts +5 -0
- package/dist/agents/DroidAgent.d.ts.map +1 -1
- package/dist/agents/DroidAgent.js +37 -18
- package/dist/agents/DroidAgent.js.map +1 -1
- package/dist/agents/GeminiCliAgent.d.ts +4 -0
- package/dist/agents/GeminiCliAgent.d.ts.map +1 -1
- package/dist/agents/GeminiCliAgent.js +37 -8
- package/dist/agents/GeminiCliAgent.js.map +1 -1
- package/dist/agents/MarkdownRulesAgent.d.ts +13 -0
- package/dist/agents/MarkdownRulesAgent.d.ts.map +1 -0
- package/dist/agents/MarkdownRulesAgent.js +53 -0
- package/dist/agents/MarkdownRulesAgent.js.map +1 -0
- package/dist/agents/RooCodeAgent.d.ts +9 -0
- package/dist/agents/RooCodeAgent.d.ts.map +1 -0
- package/dist/agents/RooCodeAgent.js +131 -0
- package/dist/agents/RooCodeAgent.js.map +1 -0
- package/dist/agents/WindsurfAgent.d.ts +9 -0
- package/dist/agents/WindsurfAgent.d.ts.map +1 -0
- package/dist/agents/WindsurfAgent.js +127 -0
- package/dist/agents/WindsurfAgent.js.map +1 -0
- package/dist/agents/ZedAgent.d.ts +9 -0
- package/dist/agents/ZedAgent.d.ts.map +1 -0
- package/dist/agents/ZedAgent.js +127 -0
- package/dist/agents/ZedAgent.js.map +1 -0
- package/dist/cli.js +29992 -11107
- package/dist/cli.js.map +1 -1
- package/dist/commands/apply.d.ts +10 -0
- package/dist/commands/apply.d.ts.map +1 -1
- package/dist/commands/apply.js +136 -5
- package/dist/commands/apply.js.map +1 -1
- package/dist/commands/detect.d.ts.map +1 -1
- package/dist/commands/detect.js +25 -0
- package/dist/commands/detect.js.map +1 -1
- package/dist/commands/init.js +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/mcp.d.ts +2 -7
- package/dist/commands/mcp.d.ts.map +1 -1
- package/dist/commands/mcp.js +541 -110
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/plugins.d.ts +3 -0
- package/dist/commands/plugins.d.ts.map +1 -0
- package/dist/commands/plugins.js +309 -0
- package/dist/commands/plugins.js.map +1 -0
- package/dist/commands/revert.d.ts +7 -0
- package/dist/commands/revert.d.ts.map +1 -0
- package/dist/commands/revert.js +48 -0
- package/dist/commands/revert.js.map +1 -0
- package/dist/commands/rules.d.ts +3 -0
- package/dist/commands/rules.d.ts.map +1 -0
- package/dist/commands/rules.js +354 -0
- package/dist/commands/rules.js.map +1 -0
- package/dist/commands/skills.d.ts +3 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +179 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/sync.d.ts +1 -0
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +18 -1
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/verifyMcp.d.ts.map +1 -1
- package/dist/commands/verifyMcp.js +27 -5
- package/dist/commands/verifyMcp.js.map +1 -1
- package/dist/constants/index.d.ts +1 -1
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +1 -1
- package/dist/constants/index.js.map +1 -1
- package/dist/constants/mcp.d.ts +1 -0
- package/dist/constants/mcp.d.ts.map +1 -1
- package/dist/constants/mcp.js +2 -0
- package/dist/constants/mcp.js.map +1 -1
- package/dist/core/agentDetector.d.ts.map +1 -1
- package/dist/core/agentDetector.js +8 -2
- package/dist/core/agentDetector.js.map +1 -1
- package/dist/core/agentManager.d.ts.map +1 -1
- package/dist/core/agentManager.js +12 -0
- package/dist/core/agentManager.js.map +1 -1
- package/dist/core/gitignoreManager.d.ts +8 -0
- package/dist/core/gitignoreManager.d.ts.map +1 -0
- package/dist/core/gitignoreManager.js +114 -0
- package/dist/core/gitignoreManager.js.map +1 -0
- package/dist/core/managedState.d.ts +42 -0
- package/dist/core/managedState.d.ts.map +1 -0
- package/dist/core/managedState.js +194 -0
- package/dist/core/managedState.js.map +1 -0
- package/dist/core/mcpClient.d.ts +124 -6
- package/dist/core/mcpClient.d.ts.map +1 -1
- package/dist/core/mcpClient.js +385 -39
- package/dist/core/mcpClient.js.map +1 -1
- package/dist/core/pluginManager.d.ts +134 -0
- package/dist/core/pluginManager.d.ts.map +1 -0
- package/dist/core/pluginManager.js +845 -0
- package/dist/core/pluginManager.js.map +1 -0
- package/dist/core/projectSkills.d.ts +19 -0
- package/dist/core/projectSkills.d.ts.map +1 -0
- package/dist/core/projectSkills.js +105 -0
- package/dist/core/projectSkills.js.map +1 -0
- package/dist/core/propagator.d.ts +8 -1
- package/dist/core/propagator.d.ts.map +1 -1
- package/dist/core/propagator.js +179 -36
- package/dist/core/propagator.js.map +1 -1
- package/dist/core/rulesApplicator.d.ts +0 -4
- package/dist/core/rulesApplicator.d.ts.map +1 -1
- package/dist/core/rulesApplicator.js +8 -39
- package/dist/core/rulesApplicator.js.map +1 -1
- package/dist/core/rulesTemplateLoader.js +2 -2
- package/dist/core/rulesTemplateLoader.js.map +1 -1
- package/dist/core/skillsManager.d.ts +61 -0
- package/dist/core/skillsManager.d.ts.map +1 -0
- package/dist/core/skillsManager.js +407 -0
- package/dist/core/skillsManager.js.map +1 -0
- package/dist/lib/utils/index.d.ts +3 -1
- package/dist/lib/utils/index.d.ts.map +1 -1
- package/dist/lib/utils/index.js +4 -1
- package/dist/lib/utils/index.js.map +1 -1
- package/dist/types/index.d.ts +24 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/jsonSchema.d.ts +31 -0
- package/dist/types/jsonSchema.d.ts.map +1 -0
- package/dist/types/jsonSchema.js +6 -0
- package/dist/types/jsonSchema.js.map +1 -0
- package/dist/types/plugins.d.ts +161 -0
- package/dist/types/plugins.d.ts.map +1 -0
- package/dist/types/plugins.js +2 -0
- package/dist/types/plugins.js.map +1 -0
- package/dist/types/skills.d.ts +50 -0
- package/dist/types/skills.d.ts.map +1 -0
- package/dist/types/skills.js +2 -0
- package/dist/types/skills.js.map +1 -0
- package/dist/utils/packageVersion.d.ts +105 -0
- package/dist/utils/packageVersion.d.ts.map +1 -0
- package/dist/utils/packageVersion.js +219 -0
- package/dist/utils/packageVersion.js.map +1 -0
- package/package.json +7 -2
- package/dist/agentinit-1.6.0.tgz +0 -0
- package/dist/registry/mcpRegistry.d.ts +0 -12
- package/dist/registry/mcpRegistry.d.ts.map +0 -1
- package/dist/registry/mcpRegistry.js +0 -114
- package/dist/registry/mcpRegistry.js.map +0 -1
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import { dirname, join, relative, resolve } from 'path';
|
|
3
|
+
import { fileExists } from '../utils/fs.js';
|
|
4
|
+
const MANAGED_STATE_FILE = 'managed-state.json';
|
|
5
|
+
const BACKUPS_DIR = 'backups';
|
|
6
|
+
function toPosixPath(value) {
|
|
7
|
+
return value.replace(/\\/g, '/');
|
|
8
|
+
}
|
|
9
|
+
async function pathType(targetPath) {
|
|
10
|
+
try {
|
|
11
|
+
const stat = await fs.stat(targetPath);
|
|
12
|
+
return stat.isDirectory() ? 'directory' : 'file';
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
async function copyDirectory(src, dest) {
|
|
19
|
+
await fs.mkdir(dest, { recursive: true });
|
|
20
|
+
const entries = await fs.readdir(src, { withFileTypes: true });
|
|
21
|
+
for (const entry of entries) {
|
|
22
|
+
const srcPath = join(src, entry.name);
|
|
23
|
+
const destPath = join(dest, entry.name);
|
|
24
|
+
if (entry.isDirectory()) {
|
|
25
|
+
await copyDirectory(srcPath, destPath);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
await fs.mkdir(dirname(destPath), { recursive: true });
|
|
29
|
+
await fs.copyFile(srcPath, destPath);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
async function copyPath(src, dest) {
|
|
34
|
+
const type = await pathType(src);
|
|
35
|
+
if (!type) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
await fs.mkdir(dirname(dest), { recursive: true });
|
|
39
|
+
if (type === 'directory') {
|
|
40
|
+
await copyDirectory(src, dest);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
await fs.copyFile(src, dest);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
export class ManagedStateStore {
|
|
47
|
+
projectPath;
|
|
48
|
+
state;
|
|
49
|
+
constructor(projectPath, state) {
|
|
50
|
+
this.projectPath = projectPath;
|
|
51
|
+
this.state = state;
|
|
52
|
+
}
|
|
53
|
+
static async open(projectPath) {
|
|
54
|
+
const agentInitDir = join(projectPath, '.agentinit');
|
|
55
|
+
const statePath = join(agentInitDir, MANAGED_STATE_FILE);
|
|
56
|
+
const emptyState = { version: 1, entries: [] };
|
|
57
|
+
try {
|
|
58
|
+
const raw = await fs.readFile(statePath, 'utf8');
|
|
59
|
+
const parsed = JSON.parse(raw);
|
|
60
|
+
if (!parsed || parsed.version !== 1 || !Array.isArray(parsed.entries)) {
|
|
61
|
+
return new ManagedStateStore(projectPath, emptyState);
|
|
62
|
+
}
|
|
63
|
+
return new ManagedStateStore(projectPath, parsed);
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
return new ManagedStateStore(projectPath, emptyState);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
get agentInitDir() {
|
|
70
|
+
return join(this.projectPath, '.agentinit');
|
|
71
|
+
}
|
|
72
|
+
get stateFilePath() {
|
|
73
|
+
return join(this.agentInitDir, MANAGED_STATE_FILE);
|
|
74
|
+
}
|
|
75
|
+
get backupsDir() {
|
|
76
|
+
return join(this.agentInitDir, BACKUPS_DIR);
|
|
77
|
+
}
|
|
78
|
+
normalizeRelativePath(targetPath, preserveTrailingSlash = false) {
|
|
79
|
+
const hasTrailingSlash = preserveTrailingSlash && /[\\/]$/.test(targetPath);
|
|
80
|
+
const relativePath = relative(this.projectPath, resolve(targetPath));
|
|
81
|
+
const normalizedPath = toPosixPath(relativePath);
|
|
82
|
+
if (hasTrailingSlash && normalizedPath) {
|
|
83
|
+
return normalizedPath.endsWith('/') ? normalizedPath : `${normalizedPath}/`;
|
|
84
|
+
}
|
|
85
|
+
return normalizedPath;
|
|
86
|
+
}
|
|
87
|
+
getEntry(targetPath) {
|
|
88
|
+
const relativePath = this.normalizeRelativePath(targetPath);
|
|
89
|
+
return this.state.entries.find(entry => entry.path === relativePath);
|
|
90
|
+
}
|
|
91
|
+
async createBackup(targetPath) {
|
|
92
|
+
if (!(await fileExists(targetPath))) {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
const relativeTargetPath = this.normalizeRelativePath(targetPath);
|
|
96
|
+
const backupPath = join(this.backupsDir, relativeTargetPath);
|
|
97
|
+
if (!(await fileExists(backupPath))) {
|
|
98
|
+
await copyPath(targetPath, backupPath);
|
|
99
|
+
}
|
|
100
|
+
return this.normalizeRelativePath(backupPath);
|
|
101
|
+
}
|
|
102
|
+
async trackGeneratedPath(targetPath, options) {
|
|
103
|
+
const existing = this.getEntry(targetPath);
|
|
104
|
+
if (existing) {
|
|
105
|
+
if (options.ignorePath && !existing.ignorePath) {
|
|
106
|
+
existing.ignorePath = this.normalizeRelativePath(options.ignorePath);
|
|
107
|
+
}
|
|
108
|
+
return existing;
|
|
109
|
+
}
|
|
110
|
+
const existedBefore = await fileExists(targetPath);
|
|
111
|
+
const backupPath = existedBefore ? await this.createBackup(targetPath) : undefined;
|
|
112
|
+
const entry = {
|
|
113
|
+
path: this.normalizeRelativePath(targetPath),
|
|
114
|
+
kind: options.kind,
|
|
115
|
+
source: options.source,
|
|
116
|
+
existedBefore,
|
|
117
|
+
...(backupPath ? { backupPath } : {}),
|
|
118
|
+
...(options.ignorePath ? { ignorePath: this.normalizeRelativePath(options.ignorePath, true) } : {}),
|
|
119
|
+
};
|
|
120
|
+
this.state.entries.push(entry);
|
|
121
|
+
return entry;
|
|
122
|
+
}
|
|
123
|
+
getEntries() {
|
|
124
|
+
return [...this.state.entries];
|
|
125
|
+
}
|
|
126
|
+
getIgnorePaths() {
|
|
127
|
+
if (this.state.entries.length === 0) {
|
|
128
|
+
return [];
|
|
129
|
+
}
|
|
130
|
+
const paths = new Set([
|
|
131
|
+
'.agentinit/managed-state.json',
|
|
132
|
+
'.agentinit/backups/',
|
|
133
|
+
]);
|
|
134
|
+
for (const entry of this.state.entries) {
|
|
135
|
+
if (entry.ignorePath) {
|
|
136
|
+
paths.add(entry.ignorePath);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return [...paths];
|
|
140
|
+
}
|
|
141
|
+
async save() {
|
|
142
|
+
await fs.mkdir(this.agentInitDir, { recursive: true });
|
|
143
|
+
await fs.writeFile(this.stateFilePath, JSON.stringify(this.state, null, 2), 'utf8');
|
|
144
|
+
}
|
|
145
|
+
async revertAll(options = {}) {
|
|
146
|
+
const summary = {
|
|
147
|
+
restored: 0,
|
|
148
|
+
removed: 0,
|
|
149
|
+
backupsRemoved: 0,
|
|
150
|
+
};
|
|
151
|
+
const entries = [...this.state.entries].sort((a, b) => b.path.length - a.path.length);
|
|
152
|
+
for (const entry of entries) {
|
|
153
|
+
const absolutePath = resolve(this.projectPath, entry.path);
|
|
154
|
+
const backupPath = entry.backupPath ? resolve(this.projectPath, entry.backupPath) : null;
|
|
155
|
+
if (entry.existedBefore && backupPath && (await fileExists(backupPath))) {
|
|
156
|
+
if (!options.dryRun) {
|
|
157
|
+
await fs.rm(absolutePath, { recursive: true, force: true }).catch(() => { });
|
|
158
|
+
await copyPath(backupPath, absolutePath);
|
|
159
|
+
}
|
|
160
|
+
summary.restored++;
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
if (!options.dryRun) {
|
|
164
|
+
await fs.rm(absolutePath, { recursive: true, force: true }).catch(() => { });
|
|
165
|
+
}
|
|
166
|
+
summary.removed++;
|
|
167
|
+
}
|
|
168
|
+
if (!options.keepBackups && backupPath && (await fileExists(backupPath))) {
|
|
169
|
+
if (!options.dryRun) {
|
|
170
|
+
await fs.rm(backupPath, { recursive: true, force: true }).catch(() => { });
|
|
171
|
+
}
|
|
172
|
+
summary.backupsRemoved++;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
if (!options.dryRun) {
|
|
176
|
+
this.state.entries.length = 0;
|
|
177
|
+
await fs.rm(this.stateFilePath, { force: true }).catch(() => { });
|
|
178
|
+
if (!options.keepBackups) {
|
|
179
|
+
await fs.rm(this.backupsDir, { recursive: true, force: true }).catch(() => { });
|
|
180
|
+
}
|
|
181
|
+
try {
|
|
182
|
+
const remainingEntries = await fs.readdir(this.agentInitDir);
|
|
183
|
+
if (remainingEntries.length === 0) {
|
|
184
|
+
await fs.rm(this.agentInitDir, { recursive: true, force: true });
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
// Ignore cleanup errors when the directory does not exist.
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return summary;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=managedState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managedState.js","sourceRoot":"","sources":["../../src/core/managedState.ts"],"names":[],"mappings":"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"}
|
package/dist/core/mcpClient.d.ts
CHANGED
|
@@ -1,27 +1,129 @@
|
|
|
1
|
-
import type { MCPServerConfig, MCPVerificationResult } from '../types/index.js';
|
|
1
|
+
import type { MCPServerConfig, MCPVerificationResult, MCPVerificationOptions } from '../types/index.js';
|
|
2
2
|
export declare class MCPVerificationError extends Error {
|
|
3
3
|
readonly serverName: string;
|
|
4
4
|
constructor(message: string, serverName: string);
|
|
5
5
|
}
|
|
6
6
|
export declare class MCPVerifier {
|
|
7
7
|
private defaultTimeout;
|
|
8
|
+
/**
|
|
9
|
+
* Creates a new MCP server verifier instance
|
|
10
|
+
*
|
|
11
|
+
* @param defaultTimeout - Default connection timeout in milliseconds (default: 30000)
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const verifier = new MCPVerifier();
|
|
16
|
+
* // or with custom timeout
|
|
17
|
+
* const verifier = new MCPVerifier(15000);
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
8
20
|
constructor(defaultTimeout?: number);
|
|
9
21
|
/**
|
|
10
22
|
* Color utility function for token display
|
|
11
23
|
*/
|
|
12
24
|
private colorizeTokenCount;
|
|
25
|
+
/**
|
|
26
|
+
* Check if tool has valid input schema with properties
|
|
27
|
+
*/
|
|
28
|
+
private hasValidInputSchema;
|
|
29
|
+
/**
|
|
30
|
+
* Format type information from schema property
|
|
31
|
+
*/
|
|
32
|
+
private formatType;
|
|
33
|
+
/**
|
|
34
|
+
* Format number range constraints
|
|
35
|
+
*/
|
|
36
|
+
private formatNumberRange;
|
|
37
|
+
/**
|
|
38
|
+
* Format string length constraints
|
|
39
|
+
*/
|
|
40
|
+
private formatStringLength;
|
|
41
|
+
/**
|
|
42
|
+
* Format array item constraints
|
|
43
|
+
*/
|
|
44
|
+
private formatArrayConstraints;
|
|
45
|
+
/**
|
|
46
|
+
* Collect all constraints for a parameter
|
|
47
|
+
*/
|
|
48
|
+
private formatConstraints;
|
|
49
|
+
/**
|
|
50
|
+
* Format a single parameter for display
|
|
51
|
+
*/
|
|
52
|
+
private formatParameter;
|
|
53
|
+
/**
|
|
54
|
+
* Format tool parameters from inputSchema for display
|
|
55
|
+
*/
|
|
56
|
+
private formatToolParameters;
|
|
13
57
|
/**
|
|
14
58
|
* Calculate token counts for MCP tools based on how they appear in Claude's context
|
|
15
59
|
*/
|
|
16
60
|
private calculateToolTokens;
|
|
17
61
|
/**
|
|
18
|
-
*
|
|
62
|
+
* Verifies a single MCP server and retrieves its capabilities
|
|
63
|
+
*
|
|
64
|
+
* @param server - MCP server configuration
|
|
65
|
+
* @param options - Verification options
|
|
66
|
+
* @param options.timeout - Connection timeout in milliseconds (overrides default)
|
|
67
|
+
* @param options.includeResourceContents - Fetch actual resource data (may be slow for large resources)
|
|
68
|
+
* @param options.includePromptDetails - Fetch prompt templates with full message content
|
|
69
|
+
* @param options.includeTokenCounts - Calculate token usage for tools (default: true)
|
|
70
|
+
* @returns Verification result with server capabilities, connection time, and status
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* const verifier = new MCPVerifier();
|
|
75
|
+
* const result = await verifier.verifyServer(
|
|
76
|
+
* {
|
|
77
|
+
* name: 'filesystem',
|
|
78
|
+
* type: MCPServerType.STDIO,
|
|
79
|
+
* command: 'npx',
|
|
80
|
+
* args: ['-y', '@modelcontextprotocol/server-filesystem', '/workspace']
|
|
81
|
+
* },
|
|
82
|
+
* {
|
|
83
|
+
* timeout: 10000,
|
|
84
|
+
* includeResourceContents: true,
|
|
85
|
+
* includePromptDetails: true
|
|
86
|
+
* }
|
|
87
|
+
* );
|
|
88
|
+
*
|
|
89
|
+
* if (result.status === 'success') {
|
|
90
|
+
* console.log(`Tools: ${result.capabilities.tools.length}`);
|
|
91
|
+
* console.log(`Total tokens: ${result.capabilities.totalToolTokens}`);
|
|
92
|
+
* }
|
|
93
|
+
* ```
|
|
19
94
|
*/
|
|
20
|
-
verifyServer(server: MCPServerConfig,
|
|
95
|
+
verifyServer(server: MCPServerConfig, options?: MCPVerificationOptions): Promise<MCPVerificationResult>;
|
|
21
96
|
/**
|
|
22
|
-
*
|
|
97
|
+
* Verifies multiple MCP servers in parallel
|
|
98
|
+
*
|
|
99
|
+
* @param servers - Array of MCP server configurations to verify
|
|
100
|
+
* @param options - Verification options (applied to all servers)
|
|
101
|
+
* @returns Array of verification results for each server
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* ```typescript
|
|
105
|
+
* const verifier = new MCPVerifier();
|
|
106
|
+
* const servers = [
|
|
107
|
+
* {
|
|
108
|
+
* name: 'filesystem',
|
|
109
|
+
* type: MCPServerType.STDIO,
|
|
110
|
+
* command: 'npx',
|
|
111
|
+
* args: ['-y', '@modelcontextprotocol/server-filesystem', '/workspace']
|
|
112
|
+
* },
|
|
113
|
+
* {
|
|
114
|
+
* name: 'github',
|
|
115
|
+
* type: MCPServerType.HTTP,
|
|
116
|
+
* url: 'https://api.githubcopilot.com/mcp/',
|
|
117
|
+
* headers: { Authorization: 'Bearer YOUR_TOKEN' }
|
|
118
|
+
* }
|
|
119
|
+
* ];
|
|
120
|
+
*
|
|
121
|
+
* const results = await verifier.verifyServers(servers, { timeout: 15000 });
|
|
122
|
+
* const successCount = results.filter(r => r.status === 'success').length;
|
|
123
|
+
* console.log(`${successCount}/${results.length} servers verified successfully`);
|
|
124
|
+
* ```
|
|
23
125
|
*/
|
|
24
|
-
verifyServers(servers: MCPServerConfig[],
|
|
126
|
+
verifyServers(servers: MCPServerConfig[], options?: MCPVerificationOptions): Promise<MCPVerificationResult[]>;
|
|
25
127
|
/**
|
|
26
128
|
* Create the appropriate transport for the server type
|
|
27
129
|
*/
|
|
@@ -31,7 +133,23 @@ export declare class MCPVerifier {
|
|
|
31
133
|
*/
|
|
32
134
|
private connectAndVerify;
|
|
33
135
|
/**
|
|
34
|
-
*
|
|
136
|
+
* Formats verification results for console display with color-coded output
|
|
137
|
+
*
|
|
138
|
+
* @param results - Array of verification results to format
|
|
139
|
+
* @returns Formatted string with tools, resources, prompts, and connection status
|
|
140
|
+
*
|
|
141
|
+
* @remarks
|
|
142
|
+
* - Token counts are color-coded: green (≤5k), yellow (5k-15k), red (>15k)
|
|
143
|
+
* - Resources and prompts are shown when DEBUG=1 or when content/templates are fetched
|
|
144
|
+
* - Failed servers display connection details for debugging
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* ```typescript
|
|
148
|
+
* const verifier = new MCPVerifier();
|
|
149
|
+
* const results = await verifier.verifyServers(servers);
|
|
150
|
+
* const formatted = verifier.formatResults(results);
|
|
151
|
+
* console.log(formatted);
|
|
152
|
+
* ```
|
|
35
153
|
*/
|
|
36
154
|
formatResults(results: MCPVerificationResult[]): string;
|
|
37
155
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcpClient.d.ts","sourceRoot":"","sources":["../../src/core/mcpClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcpClient.d.ts","sourceRoot":"","sources":["../../src/core/mcpClient.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,eAAe,EACf,qBAAqB,EAKrB,sBAAsB,EAGvB,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;IAE/B;;;;;;;;;;;OAWG;gBACS,cAAc,GAAE,MAAsC;IAIlE;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAM3B;;OAEG;IACH,OAAO,CAAC,UAAU;IAKlB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAoB9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAuCzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAsBvB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAc5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAoF3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACG,YAAY,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAiF7G;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACG,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAsBnH;;OAEG;YACW,eAAe;IA0C7B;;OAEG;YACW,gBAAgB;IAkN9B;;;;;;;;;;;;;;;;;;OAkBG;IACH,aAAa,CAAC,OAAO,EAAE,qBAAqB,EAAE,GAAG,MAAM;CAsHxD"}
|