autodev-cli 1.4.0 → 1.4.4
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/bin/autodev.js +0 -0
- package/out/agentBackup/archive.d.ts +44 -0
- package/out/agentBackup/archive.js +131 -0
- package/out/agentBackup/archive.js.map +1 -0
- package/out/agentBackup/export.d.ts +18 -0
- package/out/agentBackup/export.js +92 -0
- package/out/agentBackup/export.js.map +1 -0
- package/out/agentBackup/import.d.ts +21 -0
- package/out/agentBackup/import.js +40 -0
- package/out/agentBackup/import.js.map +1 -0
- package/out/agentBackup/index.d.ts +6 -0
- package/out/agentBackup/index.js +11 -0
- package/out/agentBackup/index.js.map +1 -0
- package/out/agentBackup/layout.d.ts +30 -0
- package/out/agentBackup/layout.js +126 -0
- package/out/agentBackup/layout.js.map +1 -0
- package/out/agentBackup/manifest.d.ts +24 -0
- package/out/agentBackup/manifest.js +70 -0
- package/out/agentBackup/manifest.js.map +1 -0
- package/out/agentBackup/opencodeDb.d.ts +20 -0
- package/out/agentBackup/opencodeDb.js +213 -0
- package/out/agentBackup/opencodeDb.js.map +1 -0
- package/out/agentBackup/sessionProviders.d.ts +35 -0
- package/out/agentBackup/sessionProviders.js +263 -0
- package/out/agentBackup/sessionProviders.js.map +1 -0
- package/out/agentBackup/upload.d.ts +9 -0
- package/out/agentBackup/upload.js +121 -0
- package/out/agentBackup/upload.js.map +1 -0
- package/out/cli.d.ts +1 -0
- package/out/cli.js +8 -0
- package/out/cli.js.map +1 -1
- package/out/cliExit.d.ts +34 -0
- package/out/cliExit.js +159 -0
- package/out/cliExit.js.map +1 -0
- package/out/commands/config.d.ts +2 -0
- package/out/commands/config.js +7 -7
- package/out/commands/config.js.map +1 -1
- package/out/commands/connect.d.ts +2 -0
- package/out/commands/connect.js +11 -0
- package/out/commands/connect.js.map +1 -1
- package/out/commands/export.d.ts +2 -0
- package/out/commands/export.js +79 -0
- package/out/commands/export.js.map +1 -0
- package/out/commands/import.d.ts +2 -0
- package/out/commands/import.js +92 -0
- package/out/commands/import.js.map +1 -0
- package/out/commands/init.d.ts +16 -0
- package/out/commands/init.js +9 -5
- package/out/commands/init.js.map +1 -1
- package/out/commands/resume.d.ts +2 -0
- package/out/commands/resume.js +65 -0
- package/out/commands/resume.js.map +1 -0
- package/out/commands/sessions.d.ts +2 -0
- package/out/commands/sessions.js +64 -0
- package/out/commands/sessions.js.map +1 -0
- package/out/commands/start.d.ts +2 -0
- package/out/commands/start.js +40 -7
- package/out/commands/start.js.map +1 -1
- package/out/commands/status.d.ts +2 -0
- package/out/commands/status.js +3 -3
- package/out/commands/status.js.map +1 -1
- package/out/commands/tailOutput.d.ts +12 -0
- package/out/commands/up.d.ts +3 -0
- package/out/configManager.d.ts +42 -0
- package/out/configManager.js +447 -0
- package/out/configManager.js.map +1 -0
- package/out/connect.d.ts +4 -0
- package/out/connect.js +7 -7
- package/out/connect.js.map +1 -1
- package/out/core/adapters.d.ts +34 -0
- package/out/core/adapters.js +84 -0
- package/out/core/adapters.js.map +1 -0
- package/out/core/commandHelpers.d.ts +12 -0
- package/out/core/commandHelpers.js +96 -0
- package/out/core/commandHelpers.js.map +1 -0
- package/out/core/projectMcp.d.ts +34 -0
- package/out/core/projectMcp.js +160 -0
- package/out/core/projectMcp.js.map +1 -0
- package/out/core/provider/BaseProvider.d.ts +14 -0
- package/out/core/provider/BaseProvider.js +25 -0
- package/out/core/provider/BaseProvider.js.map +1 -0
- package/out/core/provider/ProviderRegistry.d.ts +12 -0
- package/out/core/provider/ProviderRegistry.js +40 -0
- package/out/core/provider/ProviderRegistry.js.map +1 -0
- package/out/core/provider/contract.d.ts +62 -0
- package/out/core/provider/contract.js +9 -0
- package/out/core/provider/contract.js.map +1 -0
- package/out/core/provider/implementations.d.ts +54 -0
- package/out/core/provider/implementations.js +147 -0
- package/out/core/provider/implementations.js.map +1 -0
- package/out/core/settingsLoader.d.ts +221 -0
- package/out/core/settingsLoader.js +176 -0
- package/out/core/settingsLoader.js.map +1 -0
- package/out/discordGateway.d.ts +26 -0
- package/out/discordGateway.js +230 -0
- package/out/discordGateway.js.map +1 -0
- package/out/discordPoller.d.ts +28 -0
- package/out/discordPoller.js +247 -0
- package/out/discordPoller.js.map +1 -0
- package/out/dispatcher.d.ts +12 -0
- package/out/dispatcher.js +214 -0
- package/out/dispatcher.js.map +1 -0
- package/out/emailPoller.d.ts +42 -0
- package/out/emailPoller.js +221 -0
- package/out/emailPoller.js.map +1 -0
- package/out/git/gitService.d.ts +36 -0
- package/out/git/gitService.js +165 -0
- package/out/git/gitService.js.map +1 -0
- package/out/hookEventNormalizer.d.ts +39 -0
- package/out/hookEventNormalizer.js +397 -0
- package/out/hookEventNormalizer.js.map +1 -0
- package/out/hooksManager.d.ts +25 -0
- package/out/hooksManager.js +471 -0
- package/out/hooksManager.js.map +1 -0
- package/out/launchIde.d.ts +14 -0
- package/out/logger.d.ts +12 -0
- package/out/mcpEmailTest.d.ts +29 -0
- package/out/mcpEmailTest.js +245 -0
- package/out/mcpEmailTest.js.map +1 -0
- package/out/mcpInstallCheck.d.ts +23 -0
- package/out/mcpInstallCheck.js +219 -0
- package/out/mcpInstallCheck.js.map +1 -0
- package/out/mcpManager.d.ts +35 -0
- package/out/mcpManager.js +371 -0
- package/out/mcpManager.js.map +1 -0
- package/out/messageBuilder.d.ts +54 -0
- package/out/messageBuilder.js +373 -0
- package/out/messageBuilder.js.map +1 -0
- package/out/openCodeHooksManager.d.ts +23 -0
- package/out/openCodeHooksManager.js +511 -0
- package/out/openCodeHooksManager.js.map +1 -0
- package/out/periodicActions.d.ts +63 -0
- package/out/periodicActions.js +237 -0
- package/out/periodicActions.js.map +1 -0
- package/out/profileBuilder.d.ts +29 -0
- package/out/profileBuilder.js +366 -0
- package/out/profileBuilder.js.map +1 -0
- package/out/prompt.d.ts +12 -0
- package/out/prompt.js +18 -0
- package/out/prompt.js.map +1 -0
- package/out/protocolSections.d.ts +26 -0
- package/out/protocolSections.js +209 -0
- package/out/protocolSections.js.map +1 -0
- package/out/providers/claudeCliProvider.d.ts +71 -0
- package/out/providers/claudeCliProvider.js +425 -0
- package/out/providers/claudeCliProvider.js.map +1 -0
- package/out/providers/claudeTuiProvider.d.ts +23 -0
- package/out/providers/claudeTuiProvider.js +296 -0
- package/out/providers/claudeTuiProvider.js.map +1 -0
- package/out/providers/copilotCliProvider.d.ts +16 -0
- package/out/providers/copilotCliProvider.js +44 -0
- package/out/providers/copilotCliProvider.js.map +1 -0
- package/out/providers/copilotSdkProvider.d.ts +12 -0
- package/out/providers/copilotSdkProvider.js +445 -0
- package/out/providers/copilotSdkProvider.js.map +1 -0
- package/out/providers/grokTuiProvider.d.ts +14 -0
- package/out/providers/grokTuiProvider.js +271 -0
- package/out/providers/grokTuiProvider.js.map +1 -0
- package/out/providers/opencodeCliProvider.d.ts +29 -0
- package/out/providers/opencodeCliProvider.js +199 -0
- package/out/providers/opencodeCliProvider.js.map +1 -0
- package/out/providers/opencodeSdkProvider.d.ts +22 -0
- package/out/providers/opencodeSdkProvider.js +557 -0
- package/out/providers/opencodeSdkProvider.js.map +1 -0
- package/out/providers.d.ts +9 -0
- package/out/providers.js +44 -0
- package/out/providers.js.map +1 -0
- package/out/rateLimit.d.ts +18 -0
- package/out/rateLimit.js +90 -0
- package/out/rateLimit.js.map +1 -0
- package/out/rdp/auth.d.ts +55 -0
- package/out/rdp/auth.js +197 -0
- package/out/rdp/auth.js.map +1 -0
- package/out/rdp/bridge.d.ts +86 -0
- package/out/rdp/bridge.js +1398 -0
- package/out/rdp/bridge.js.map +1 -0
- package/out/rdp/constants.d.ts +86 -0
- package/out/rdp/constants.js +182 -0
- package/out/rdp/constants.js.map +1 -0
- package/out/rdp/index.d.ts +7 -0
- package/out/rdp/index.js +14 -0
- package/out/rdp/index.js.map +1 -0
- package/out/rdp/session.d.ts +30 -0
- package/out/rdp/session.js +196 -0
- package/out/rdp/session.js.map +1 -0
- package/out/rdp/types.d.ts +27 -0
- package/out/rdp/types.js +6 -0
- package/out/rdp/types.js.map +1 -0
- package/out/sdk/index.d.ts +22 -0
- package/out/sdk/index.js +81 -0
- package/out/sdk/index.js.map +1 -0
- package/out/sessionState.d.ts +54 -0
- package/out/sessionState.js +284 -0
- package/out/sessionState.js.map +1 -0
- package/out/sessions.d.ts +11 -0
- package/out/sessions.js +32 -0
- package/out/sessions.js.map +1 -0
- package/out/taskLoop.d.ts +152 -0
- package/out/taskLoop.js +2505 -0
- package/out/taskLoop.js.map +1 -0
- package/out/todo.d.ts +42 -0
- package/out/todo.js +311 -0
- package/out/todo.js.map +1 -0
- package/out/todoWriteManager.d.ts +26 -0
- package/out/todoWriteManager.js +44 -0
- package/out/todoWriteManager.js.map +1 -0
- package/out/vnc/auth.d.ts +52 -0
- package/out/vnc/auth.js +181 -0
- package/out/vnc/auth.js.map +1 -0
- package/out/vnc/bridge.d.ts +40 -0
- package/out/vnc/bridge.js +540 -0
- package/out/vnc/bridge.js.map +1 -0
- package/out/vnc/constants.d.ts +8 -0
- package/out/vnc/constants.js +34 -0
- package/out/vnc/constants.js.map +1 -0
- package/out/vnc/des.d.ts +6 -0
- package/out/vnc/des.js +93 -0
- package/out/vnc/des.js.map +1 -0
- package/out/vnc/index.d.ts +7 -0
- package/out/vnc/index.js +13 -0
- package/out/vnc/index.js.map +1 -0
- package/out/vnc/session.d.ts +18 -0
- package/out/vnc/session.js +193 -0
- package/out/vnc/session.js.map +1 -0
- package/out/vnc/types.d.ts +16 -0
- package/out/vnc/types.js +6 -0
- package/out/vnc/types.js.map +1 -0
- package/out/webSocketPoller.d.ts +95 -0
- package/out/webSocketPoller.js +986 -0
- package/out/webSocketPoller.js.map +1 -0
- package/out/webhook.d.ts +37 -0
- package/out/webhook.js +265 -0
- package/out/webhook.js.map +1 -0
- package/out/webhookPoller.d.ts +40 -0
- package/out/webhookPoller.js +378 -0
- package/out/webhookPoller.js.map +1 -0
- package/package.json +54 -41
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// mcpEmailTest — connectivity check that runs the *actual* mcp-email-server
|
|
4
|
+
// over stdio with the configured env, performs the MCP initialize handshake,
|
|
5
|
+
// lists tools, and invokes an IMAP-reading tool to prove credentials work.
|
|
6
|
+
//
|
|
7
|
+
// Why through the server (not raw IMAP/SMTP): it's the same code path the
|
|
8
|
+
// agent will use, so a green test means the agent will succeed too — covers
|
|
9
|
+
// env-var naming, package install state, IMAP+SMTP config, all in one shot.
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.testEmailViaMcp = testEmailViaMcp;
|
|
13
|
+
const child_process_1 = require("child_process");
|
|
14
|
+
const STEP_TIMEOUT_MS = 25000;
|
|
15
|
+
const TOTAL_TIMEOUT_MS = 60000;
|
|
16
|
+
class StdioMcpClient {
|
|
17
|
+
proc;
|
|
18
|
+
buf = '';
|
|
19
|
+
pending = new Map();
|
|
20
|
+
nextId = 1;
|
|
21
|
+
earlyStderr = '';
|
|
22
|
+
done = false;
|
|
23
|
+
constructor(proc) {
|
|
24
|
+
this.proc = proc;
|
|
25
|
+
proc.stdout.setEncoding('utf8');
|
|
26
|
+
proc.stderr.setEncoding('utf8');
|
|
27
|
+
proc.stdout.on('data', (chunk) => this._onStdout(chunk));
|
|
28
|
+
proc.stderr.on('data', (chunk) => { this.earlyStderr += chunk; });
|
|
29
|
+
proc.on('error', (e) => this._failAll(e));
|
|
30
|
+
proc.on('close', () => {
|
|
31
|
+
this.done = true;
|
|
32
|
+
this._failAll(new Error('mcp-email-server exited' + (this.earlyStderr ? `: ${this.earlyStderr.trim().slice(-300)}` : '')));
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
_onStdout(chunk) {
|
|
36
|
+
this.buf += chunk;
|
|
37
|
+
// mcp-email-server speaks newline-delimited JSON over stdout.
|
|
38
|
+
let nl;
|
|
39
|
+
while ((nl = this.buf.indexOf('\n')) >= 0) {
|
|
40
|
+
const line = this.buf.slice(0, nl).trim();
|
|
41
|
+
this.buf = this.buf.slice(nl + 1);
|
|
42
|
+
if (!line)
|
|
43
|
+
continue;
|
|
44
|
+
let msg;
|
|
45
|
+
try {
|
|
46
|
+
msg = JSON.parse(line);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
continue;
|
|
50
|
+
}
|
|
51
|
+
const id = msg['id'];
|
|
52
|
+
if (typeof id === 'number' && this.pending.has(id)) {
|
|
53
|
+
const p = this.pending.get(id);
|
|
54
|
+
this.pending.delete(id);
|
|
55
|
+
p.resolve(msg);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
_failAll(err) {
|
|
60
|
+
for (const p of this.pending.values()) {
|
|
61
|
+
p.reject(err);
|
|
62
|
+
}
|
|
63
|
+
this.pending.clear();
|
|
64
|
+
}
|
|
65
|
+
call(method, params) {
|
|
66
|
+
if (this.done)
|
|
67
|
+
return Promise.reject(new Error('server already exited'));
|
|
68
|
+
const id = this.nextId++;
|
|
69
|
+
const payload = JSON.stringify({ jsonrpc: '2.0', id, method, params: params ?? {} }) + '\n';
|
|
70
|
+
return new Promise((resolve, reject) => {
|
|
71
|
+
this.pending.set(id, { resolve, reject });
|
|
72
|
+
const t = setTimeout(() => {
|
|
73
|
+
if (this.pending.has(id)) {
|
|
74
|
+
this.pending.delete(id);
|
|
75
|
+
reject(new Error(`timeout after ${STEP_TIMEOUT_MS}ms waiting for ${method}` + (this.earlyStderr ? ` (stderr: ${this.earlyStderr.trim().slice(-200)})` : '')));
|
|
76
|
+
}
|
|
77
|
+
}, STEP_TIMEOUT_MS);
|
|
78
|
+
const wrap = (r) => { clearTimeout(t); resolve(r); };
|
|
79
|
+
const wrapErr = (e) => { clearTimeout(t); reject(e); };
|
|
80
|
+
this.pending.set(id, { resolve: wrap, reject: wrapErr });
|
|
81
|
+
try {
|
|
82
|
+
this.proc.stdin.write(payload);
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
this.pending.delete(id);
|
|
86
|
+
clearTimeout(t);
|
|
87
|
+
reject(e);
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
notify(method, params) {
|
|
92
|
+
if (this.done)
|
|
93
|
+
return;
|
|
94
|
+
try {
|
|
95
|
+
this.proc.stdin.write(JSON.stringify({ jsonrpc: '2.0', method, params: params ?? {} }) + '\n');
|
|
96
|
+
}
|
|
97
|
+
catch { /* ignore */ }
|
|
98
|
+
}
|
|
99
|
+
close() {
|
|
100
|
+
try {
|
|
101
|
+
this.proc.stdin.end();
|
|
102
|
+
}
|
|
103
|
+
catch { /* ignore */ }
|
|
104
|
+
try {
|
|
105
|
+
this.proc.kill();
|
|
106
|
+
}
|
|
107
|
+
catch { /* ignore */ }
|
|
108
|
+
}
|
|
109
|
+
get stderrSnapshot() { return this.earlyStderr; }
|
|
110
|
+
}
|
|
111
|
+
function _toolNameOf(t) {
|
|
112
|
+
return (t && typeof t === 'object' && typeof t.name === 'string')
|
|
113
|
+
? t.name : '';
|
|
114
|
+
}
|
|
115
|
+
function _pickImapTool(tools) {
|
|
116
|
+
const names = tools.map(_toolNameOf).filter(Boolean);
|
|
117
|
+
// Prefer tools that read mail (proves IMAP login). Order = preference.
|
|
118
|
+
const patterns = [
|
|
119
|
+
/^count_daily_emails$/i,
|
|
120
|
+
/^count_emails$/i,
|
|
121
|
+
/^page_emails?$/i,
|
|
122
|
+
/^list_emails?$/i,
|
|
123
|
+
/^get_unread_count$/i,
|
|
124
|
+
/^list_available_accounts$/i, // last resort — only proves server boot
|
|
125
|
+
];
|
|
126
|
+
for (const p of patterns) {
|
|
127
|
+
const hit = names.find(n => p.test(n));
|
|
128
|
+
if (hit)
|
|
129
|
+
return hit;
|
|
130
|
+
}
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
function _argsForImapTool(name, account) {
|
|
134
|
+
const lc = name.toLowerCase();
|
|
135
|
+
if (lc === 'list_available_accounts')
|
|
136
|
+
return {};
|
|
137
|
+
if (lc.includes('count')) {
|
|
138
|
+
// count_daily_emails(account, start_date, end_date) — narrow window.
|
|
139
|
+
const today = new Date();
|
|
140
|
+
const yyyy = today.getFullYear();
|
|
141
|
+
const mm = String(today.getMonth() + 1).padStart(2, '0');
|
|
142
|
+
const dd = String(today.getDate()).padStart(2, '0');
|
|
143
|
+
const day = `${yyyy}-${mm}-${dd}`;
|
|
144
|
+
return { account_name: account, start_date: day, end_date: day };
|
|
145
|
+
}
|
|
146
|
+
// list / page — keep it tiny.
|
|
147
|
+
return { account_name: account, page: 1, page_size: 1 };
|
|
148
|
+
}
|
|
149
|
+
function _humanResult(name, result) {
|
|
150
|
+
const r = result['result'];
|
|
151
|
+
if (r && typeof r === 'object') {
|
|
152
|
+
const content = r.content;
|
|
153
|
+
if (Array.isArray(content) && content.length > 0) {
|
|
154
|
+
const first = content[0];
|
|
155
|
+
if (typeof first.text === 'string') {
|
|
156
|
+
const txt = first.text.trim();
|
|
157
|
+
return `${name} → ${txt.length > 180 ? txt.slice(0, 180) + '…' : txt}`;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return `${name} → returned ${Object.keys(r).length} field(s)`;
|
|
161
|
+
}
|
|
162
|
+
if (result['error']) {
|
|
163
|
+
const err = result['error'];
|
|
164
|
+
return `${name} → error: ${typeof err.message === 'string' ? err.message : JSON.stringify(result['error'])}`;
|
|
165
|
+
}
|
|
166
|
+
return `${name} → unexpected response shape`;
|
|
167
|
+
}
|
|
168
|
+
async function testEmailViaMcp(env) {
|
|
169
|
+
const steps = [];
|
|
170
|
+
const fullEnv = { ...process.env, ...env };
|
|
171
|
+
const cmd = 'uvx';
|
|
172
|
+
const args = ['mcp-email-server@latest', 'stdio'];
|
|
173
|
+
let proc;
|
|
174
|
+
try {
|
|
175
|
+
proc = (0, child_process_1.spawn)(cmd, args, {
|
|
176
|
+
env: fullEnv,
|
|
177
|
+
shell: process.platform === 'win32', // resolve uvx via cmd on Windows
|
|
178
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
179
|
+
});
|
|
180
|
+
steps.push({ name: 'spawn uvx mcp-email-server', ok: true });
|
|
181
|
+
}
|
|
182
|
+
catch (e) {
|
|
183
|
+
steps.push({ name: 'spawn uvx mcp-email-server', ok: false, detail: e.message });
|
|
184
|
+
return { ok: false, message: 'Could not start mcp-email-server (uvx missing?).', steps };
|
|
185
|
+
}
|
|
186
|
+
const client = new StdioMcpClient(proc);
|
|
187
|
+
const overall = setTimeout(() => client.close(), TOTAL_TIMEOUT_MS);
|
|
188
|
+
try {
|
|
189
|
+
const initRes = await client.call('initialize', {
|
|
190
|
+
protocolVersion: '2024-11-05',
|
|
191
|
+
capabilities: {},
|
|
192
|
+
clientInfo: { name: 'autodev-test', version: '1.0' },
|
|
193
|
+
});
|
|
194
|
+
if (initRes['error']) {
|
|
195
|
+
const err = initRes['error'];
|
|
196
|
+
steps.push({ name: 'initialize', ok: false, detail: typeof err.message === 'string' ? err.message : JSON.stringify(initRes['error']) });
|
|
197
|
+
return { ok: false, message: 'MCP initialize failed.', steps };
|
|
198
|
+
}
|
|
199
|
+
const sv = initRes['result']?.serverInfo;
|
|
200
|
+
steps.push({ name: 'initialize', ok: true, detail: sv ? `${sv.name ?? '?'} ${sv.version ?? ''}`.trim() : '(no serverInfo)' });
|
|
201
|
+
client.notify('notifications/initialized');
|
|
202
|
+
const listRes = await client.call('tools/list', {});
|
|
203
|
+
const toolsField = listRes['result']?.tools ?? [];
|
|
204
|
+
if (!Array.isArray(toolsField) || toolsField.length === 0) {
|
|
205
|
+
steps.push({ name: 'tools/list', ok: false, detail: '0 tools advertised' });
|
|
206
|
+
return { ok: false, message: 'Server returned no tools — config likely invalid.', steps };
|
|
207
|
+
}
|
|
208
|
+
const toolNames = toolsField.map(_toolNameOf).filter(Boolean);
|
|
209
|
+
steps.push({ name: 'tools/list', ok: true, detail: `${toolNames.length} tools: ${toolNames.slice(0, 6).join(', ')}${toolNames.length > 6 ? '…' : ''}` });
|
|
210
|
+
const imapTool = _pickImapTool(toolsField);
|
|
211
|
+
if (!imapTool) {
|
|
212
|
+
steps.push({ name: 'IMAP read via MCP', ok: false, detail: 'no IMAP-reading tool found in tools/list' });
|
|
213
|
+
return { ok: true, message: 'Server boots and lists tools, but no IMAP tool found to verify credentials.', steps };
|
|
214
|
+
}
|
|
215
|
+
const account = env.MCP_EMAIL_SERVER_ACCOUNT_NAME || 'default';
|
|
216
|
+
const callRes = await client.call('tools/call', { name: imapTool, arguments: _argsForImapTool(imapTool, account) });
|
|
217
|
+
if (callRes['error']) {
|
|
218
|
+
const err = callRes['error'];
|
|
219
|
+
steps.push({ name: `IMAP read via ${imapTool}`, ok: false, detail: typeof err.message === 'string' ? err.message : JSON.stringify(callRes['error']) });
|
|
220
|
+
return { ok: false, message: `IMAP tool ${imapTool} returned an error — credentials/host likely wrong.`, steps };
|
|
221
|
+
}
|
|
222
|
+
const inner = callRes['result'];
|
|
223
|
+
if (inner?.isError) {
|
|
224
|
+
const txt = Array.isArray(inner.content) && inner.content[0] && typeof inner.content[0].text === 'string'
|
|
225
|
+
? inner.content[0].text : JSON.stringify(inner);
|
|
226
|
+
steps.push({ name: `IMAP read via ${imapTool}`, ok: false, detail: txt.slice(0, 240) });
|
|
227
|
+
return { ok: false, message: `IMAP tool ${imapTool} reported an error.`, steps };
|
|
228
|
+
}
|
|
229
|
+
steps.push({ name: `IMAP read via ${imapTool}`, ok: true, detail: _humanResult(imapTool, callRes) });
|
|
230
|
+
return {
|
|
231
|
+
ok: true,
|
|
232
|
+
message: `mcp-email-server is working: handshake + ${toolNames.length} tools + IMAP read via ${imapTool}.`,
|
|
233
|
+
steps,
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
catch (e) {
|
|
237
|
+
steps.push({ name: 'rpc', ok: false, detail: e.message + (client.stderrSnapshot ? ` | stderr: ${client.stderrSnapshot.trim().slice(-240)}` : '') });
|
|
238
|
+
return { ok: false, message: 'MCP test aborted: ' + e.message, steps };
|
|
239
|
+
}
|
|
240
|
+
finally {
|
|
241
|
+
clearTimeout(overall);
|
|
242
|
+
client.close();
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=mcpEmailTest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpEmailTest.js","sourceRoot":"","sources":["../src/mcpEmailTest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type McpInstallStatus = 'installed' | 'missing-runner' | 'missing-package' | 'unknown';
|
|
2
|
+
export interface McpInstallInfo {
|
|
3
|
+
status: McpInstallStatus;
|
|
4
|
+
runner: string;
|
|
5
|
+
pkg?: string;
|
|
6
|
+
}
|
|
7
|
+
interface CheckTarget {
|
|
8
|
+
command: string;
|
|
9
|
+
args: string[];
|
|
10
|
+
}
|
|
11
|
+
export declare function invalidateMcpInstallCache(): void;
|
|
12
|
+
/** Read-only cached lookup. Never spawns. Returns 'unknown' if not yet probed. */
|
|
13
|
+
export declare function getMcpInstallSnapshot(target: CheckTarget): McpInstallInfo;
|
|
14
|
+
/** Async probe of a single target. Populates cache and returns the result. */
|
|
15
|
+
export declare function checkMcpInstallAsync(target: CheckTarget): Promise<McpInstallInfo>;
|
|
16
|
+
/**
|
|
17
|
+
* Probe every target sequentially, populating the cache. Resolves once all
|
|
18
|
+
* probes have either returned or timed out. Sequential (not parallel) to
|
|
19
|
+
* avoid spawn-storms that can starve the extension host on activation.
|
|
20
|
+
*/
|
|
21
|
+
export declare function refreshMcpInstall(targets: CheckTarget[]): Promise<void>;
|
|
22
|
+
export declare function installCommandFor(info: McpInstallInfo): string | null;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// mcpInstallCheck — async detection of whether each MCP server's runner +
|
|
4
|
+
// package are installed. Results are cached in-memory.
|
|
5
|
+
//
|
|
6
|
+
// Important: spawnSync would block the extension host on activation (4 builtins
|
|
7
|
+
// × 3 child processes each), which makes the webview fail to register its
|
|
8
|
+
// service worker ("document is in an invalid state"). All probes are async;
|
|
9
|
+
// _push() reads whatever's already cached, and refreshMcpInstall() kicks off
|
|
10
|
+
// the spawns in the background and resolves when the snapshot is fresh.
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.invalidateMcpInstallCache = invalidateMcpInstallCache;
|
|
14
|
+
exports.getMcpInstallSnapshot = getMcpInstallSnapshot;
|
|
15
|
+
exports.checkMcpInstallAsync = checkMcpInstallAsync;
|
|
16
|
+
exports.refreshMcpInstall = refreshMcpInstall;
|
|
17
|
+
exports.installCommandFor = installCommandFor;
|
|
18
|
+
const child_process_1 = require("child_process");
|
|
19
|
+
const _runnerCache = new Map();
|
|
20
|
+
const _pkgCache = new Map(); // key = `${runner}:${pkg}`
|
|
21
|
+
function invalidateMcpInstallCache() {
|
|
22
|
+
_runnerCache.clear();
|
|
23
|
+
_pkgCache.clear();
|
|
24
|
+
}
|
|
25
|
+
function _runProbe(cmd, args, timeoutMs, useShell) {
|
|
26
|
+
return new Promise((resolve) => {
|
|
27
|
+
let stdout = '';
|
|
28
|
+
let settled = false;
|
|
29
|
+
let proc;
|
|
30
|
+
try {
|
|
31
|
+
proc = (0, child_process_1.spawn)(cmd, args, { shell: useShell, stdio: ['ignore', 'pipe', 'ignore'] });
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
resolve({ code: -1, stdout: '' });
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const timer = setTimeout(() => {
|
|
38
|
+
if (settled)
|
|
39
|
+
return;
|
|
40
|
+
settled = true;
|
|
41
|
+
try {
|
|
42
|
+
proc.kill();
|
|
43
|
+
}
|
|
44
|
+
catch { /* ignore */ }
|
|
45
|
+
resolve({ code: -1, stdout });
|
|
46
|
+
}, timeoutMs);
|
|
47
|
+
proc.stdout?.setEncoding('utf8');
|
|
48
|
+
proc.stdout?.on('data', (c) => { stdout += c; });
|
|
49
|
+
proc.on('error', () => { if (!settled) {
|
|
50
|
+
settled = true;
|
|
51
|
+
clearTimeout(timer);
|
|
52
|
+
resolve({ code: -1, stdout: '' });
|
|
53
|
+
} });
|
|
54
|
+
proc.on('close', (code) => { if (!settled) {
|
|
55
|
+
settled = true;
|
|
56
|
+
clearTimeout(timer);
|
|
57
|
+
resolve({ code, stdout });
|
|
58
|
+
} });
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
async function _hasOnPath(cmd) {
|
|
62
|
+
if (_runnerCache.has(cmd))
|
|
63
|
+
return _runnerCache.get(cmd);
|
|
64
|
+
const which = process.platform === 'win32' ? 'where' : 'which';
|
|
65
|
+
const { code, stdout } = await _runProbe(which, [cmd], 4000, false);
|
|
66
|
+
const ok = code === 0 && !!stdout.trim();
|
|
67
|
+
_runnerCache.set(cmd, ok);
|
|
68
|
+
return ok;
|
|
69
|
+
}
|
|
70
|
+
function _bareNpmPkg(spec) {
|
|
71
|
+
if (spec.startsWith('@')) {
|
|
72
|
+
const i = spec.indexOf('/');
|
|
73
|
+
if (i < 0)
|
|
74
|
+
return spec;
|
|
75
|
+
const tail = spec.slice(i + 1);
|
|
76
|
+
const at = tail.indexOf('@');
|
|
77
|
+
return at < 0 ? spec : spec.slice(0, i + 1) + tail.slice(0, at);
|
|
78
|
+
}
|
|
79
|
+
const at = spec.indexOf('@');
|
|
80
|
+
return at < 0 ? spec : spec.slice(0, at);
|
|
81
|
+
}
|
|
82
|
+
function _bareUvPkg(spec) {
|
|
83
|
+
return spec.split(/[=@<>!~]/, 1)[0];
|
|
84
|
+
}
|
|
85
|
+
function _firstPositional(args) {
|
|
86
|
+
for (let i = 0; i < args.length; i++) {
|
|
87
|
+
const a = args[i];
|
|
88
|
+
if (a.startsWith('-')) {
|
|
89
|
+
if (a === '--from' || a === '--with' || a === '--python')
|
|
90
|
+
i++;
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
return a;
|
|
94
|
+
}
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
async function _hasNpmGlobal(pkg) {
|
|
98
|
+
const key = `npm:${pkg}`;
|
|
99
|
+
if (_pkgCache.has(key))
|
|
100
|
+
return _pkgCache.get(key);
|
|
101
|
+
const { code, stdout } = await _runProbe('npm', ['ls', '-g', '--depth=0', '--json', pkg], 8000, true);
|
|
102
|
+
let ok = false;
|
|
103
|
+
if (code === 0 && stdout) {
|
|
104
|
+
try {
|
|
105
|
+
const out = JSON.parse(stdout);
|
|
106
|
+
ok = !!(out.dependencies && out.dependencies[pkg]);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
ok = false;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
_pkgCache.set(key, ok);
|
|
113
|
+
return ok;
|
|
114
|
+
}
|
|
115
|
+
async function _hasUvTool(pkg) {
|
|
116
|
+
const key = `uv:${pkg.toLowerCase()}`;
|
|
117
|
+
if (_pkgCache.has(key))
|
|
118
|
+
return _pkgCache.get(key);
|
|
119
|
+
const { code, stdout } = await _runProbe('uv', ['tool', 'list'], 6000, true);
|
|
120
|
+
let ok = false;
|
|
121
|
+
if (code === 0 && stdout) {
|
|
122
|
+
const lines = stdout.toLowerCase().split(/\r?\n/);
|
|
123
|
+
ok = lines.some(l => l.split(/\s+/)[0] === pkg.toLowerCase());
|
|
124
|
+
}
|
|
125
|
+
_pkgCache.set(key, ok);
|
|
126
|
+
return ok;
|
|
127
|
+
}
|
|
128
|
+
/** Read-only cached lookup. Never spawns. Returns 'unknown' if not yet probed. */
|
|
129
|
+
function getMcpInstallSnapshot(target) {
|
|
130
|
+
const runner = target.command || '';
|
|
131
|
+
if (!runner)
|
|
132
|
+
return { status: 'unknown', runner: '' };
|
|
133
|
+
if (!_runnerCache.has(runner))
|
|
134
|
+
return { status: 'unknown', runner };
|
|
135
|
+
if (!_runnerCache.get(runner))
|
|
136
|
+
return { status: 'missing-runner', runner };
|
|
137
|
+
const arg = _firstPositional(target.args || []);
|
|
138
|
+
if (runner === 'npx') {
|
|
139
|
+
if (!arg)
|
|
140
|
+
return { status: 'installed', runner };
|
|
141
|
+
// If -y flag is present npx auto-fetches — no global install needed.
|
|
142
|
+
if ((target.args || []).includes('-y')) {
|
|
143
|
+
const pkg = _bareNpmPkg(arg);
|
|
144
|
+
return { status: _runnerCache.get(runner) ? 'installed' : 'missing-runner', runner, pkg };
|
|
145
|
+
}
|
|
146
|
+
const pkg = _bareNpmPkg(arg);
|
|
147
|
+
const key = `npm:${pkg}`;
|
|
148
|
+
if (!_pkgCache.has(key))
|
|
149
|
+
return { status: 'unknown', runner, pkg };
|
|
150
|
+
return { status: _pkgCache.get(key) ? 'installed' : 'missing-package', runner, pkg };
|
|
151
|
+
}
|
|
152
|
+
if (runner === 'uvx') {
|
|
153
|
+
// uvx auto-fetches packages on demand (like npx). If uvx is on PATH,
|
|
154
|
+
// treat the package as installed — `uv tool list` only shows packages
|
|
155
|
+
// installed via `uv tool install`, which uvx does not require.
|
|
156
|
+
const pkg = arg ? _bareUvPkg(arg) : undefined;
|
|
157
|
+
return { status: 'installed', runner, pkg };
|
|
158
|
+
}
|
|
159
|
+
return { status: 'installed', runner, pkg: arg };
|
|
160
|
+
}
|
|
161
|
+
/** Async probe of a single target. Populates cache and returns the result. */
|
|
162
|
+
async function checkMcpInstallAsync(target) {
|
|
163
|
+
const runner = target.command || '';
|
|
164
|
+
if (!runner)
|
|
165
|
+
return { status: 'unknown', runner: '' };
|
|
166
|
+
if (!(await _hasOnPath(runner)))
|
|
167
|
+
return { status: 'missing-runner', runner };
|
|
168
|
+
const arg = _firstPositional(target.args || []);
|
|
169
|
+
if (runner === 'npx') {
|
|
170
|
+
if (!arg)
|
|
171
|
+
return { status: 'installed', runner };
|
|
172
|
+
// If -y flag is present npx auto-fetches the package — no global install needed.
|
|
173
|
+
if ((target.args || []).includes('-y')) {
|
|
174
|
+
const pkg = _bareNpmPkg(arg);
|
|
175
|
+
return { status: 'installed', runner, pkg };
|
|
176
|
+
}
|
|
177
|
+
const pkg = _bareNpmPkg(arg);
|
|
178
|
+
return { status: (await _hasNpmGlobal(pkg)) ? 'installed' : 'missing-package', runner, pkg };
|
|
179
|
+
}
|
|
180
|
+
if (runner === 'uvx') {
|
|
181
|
+
// uvx auto-fetches on demand — runner present is enough.
|
|
182
|
+
const pkg = arg ? _bareUvPkg(arg) : undefined;
|
|
183
|
+
return { status: 'installed', runner, pkg };
|
|
184
|
+
}
|
|
185
|
+
return { status: 'installed', runner, pkg: arg };
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Probe every target sequentially, populating the cache. Resolves once all
|
|
189
|
+
* probes have either returned or timed out. Sequential (not parallel) to
|
|
190
|
+
* avoid spawn-storms that can starve the extension host on activation.
|
|
191
|
+
*/
|
|
192
|
+
async function refreshMcpInstall(targets) {
|
|
193
|
+
for (const t of targets) {
|
|
194
|
+
try {
|
|
195
|
+
await checkMcpInstallAsync(t);
|
|
196
|
+
}
|
|
197
|
+
catch { /* ignore */ }
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
function installCommandFor(info) {
|
|
201
|
+
if (info.status === 'installed' || info.status === 'unknown')
|
|
202
|
+
return null;
|
|
203
|
+
if (info.status === 'missing-runner') {
|
|
204
|
+
if (info.runner === 'uvx' || info.runner === 'uv') {
|
|
205
|
+
return process.platform === 'win32'
|
|
206
|
+
? 'powershell -ExecutionPolicy Bypass -c "irm https://astral.sh/uv/install.ps1 | iex"'
|
|
207
|
+
: 'curl -LsSf https://astral.sh/uv/install.sh | sh';
|
|
208
|
+
}
|
|
209
|
+
return null;
|
|
210
|
+
}
|
|
211
|
+
if (!info.pkg)
|
|
212
|
+
return null;
|
|
213
|
+
if (info.runner === 'npx')
|
|
214
|
+
return `npm install -g ${info.pkg}`;
|
|
215
|
+
if (info.runner === 'uvx')
|
|
216
|
+
return `uv tool install ${info.pkg}`;
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=mcpInstallCheck.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpInstallCheck.js","sourceRoot":"","sources":["../src/mcpInstallCheck.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default MCP servers applied to every CLI provider on extension activation.
|
|
3
|
+
* Add entries here to have them automatically synced to Claude, Copilot, and OpenCode.
|
|
4
|
+
*/
|
|
5
|
+
export declare const DEFAULT_MCP_SERVERS: McpServerEntry[];
|
|
6
|
+
/** Canonical representation of a single MCP server. */
|
|
7
|
+
export interface McpServerEntry {
|
|
8
|
+
/** Unique server name (used as the key in every provider config). */
|
|
9
|
+
name: string;
|
|
10
|
+
/** Executable to run (e.g. "npx", "node", "python"). */
|
|
11
|
+
command: string;
|
|
12
|
+
/** Arguments passed to the executable. */
|
|
13
|
+
args: string[];
|
|
14
|
+
/** Optional environment variables to inject. */
|
|
15
|
+
env?: Record<string, string>;
|
|
16
|
+
/**
|
|
17
|
+
* Copilot-specific tool filter — defaults to ["*"] (all tools allowed).
|
|
18
|
+
* Ignored for Claude and OpenCode.
|
|
19
|
+
*/
|
|
20
|
+
tools?: string[];
|
|
21
|
+
}
|
|
22
|
+
export type McpProvider = 'claude-cli' | 'copilot-cli' | 'opencode-cli';
|
|
23
|
+
export declare class McpServerManager {
|
|
24
|
+
static configPathFor(provider: McpProvider): string;
|
|
25
|
+
static readServers(provider: McpProvider): Record<string, McpServerEntry>;
|
|
26
|
+
static writeServers(provider: McpProvider, servers: Record<string, McpServerEntry>): void;
|
|
27
|
+
static listAll(): McpServerEntry[];
|
|
28
|
+
static addServer(entry: McpServerEntry, targets?: McpProvider[]): void;
|
|
29
|
+
static removeServer(name: string, targets?: McpProvider[]): void;
|
|
30
|
+
static syncAll(servers: McpServerEntry[], targets?: McpProvider[]): void;
|
|
31
|
+
static addDefaults(targets?: McpProvider[], log?: (msg: string) => void): void;
|
|
32
|
+
static enableForClaudeProject(workspaceRoot: string, serverNames: string[], log?: (msg: string) => void): void;
|
|
33
|
+
static disableAttribution(workspaceRoot: string, log?: (msg: string) => void): void;
|
|
34
|
+
static addDefaultsAndEnable(workspaceRoot: string, targets?: McpProvider[], log?: (msg: string) => void): void;
|
|
35
|
+
}
|