cohvu 2.18.0 → 2.20.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/dist/api.d.ts +3 -1
- package/dist/api.js.map +1 -1
- package/dist/constants.d.ts +1 -0
- package/dist/constants.js +8 -0
- package/dist/constants.js.map +1 -1
- package/dist/log.d.ts +6 -0
- package/dist/log.js +51 -0
- package/dist/log.js.map +1 -0
- package/dist/platforms.d.ts +1 -0
- package/dist/platforms.js +5 -0
- package/dist/platforms.js.map +1 -1
- package/dist/proxy.js +263 -98
- package/dist/proxy.js.map +1 -1
- package/dist/setup.js +42 -28
- package/dist/setup.js.map +1 -1
- package/dist/tui/App.js +5 -0
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/tabs/KeysTab.js +5 -2
- package/dist/tui/tabs/KeysTab.js.map +1 -1
- package/package.json +1 -1
package/dist/proxy.js
CHANGED
|
@@ -1,137 +1,233 @@
|
|
|
1
1
|
// MCP proxy — thin stateless translator.
|
|
2
2
|
//
|
|
3
|
-
// Agent speaks MCP on stdin. Proxy speaks REST to the backend.
|
|
4
|
-
//
|
|
5
|
-
//
|
|
3
|
+
// Agent speaks MCP on stdin. Proxy speaks REST to the backend. No sessions,
|
|
4
|
+
// no state beyond a cached manifest (TTL'd), each tool call is an independent
|
|
5
|
+
// HTTP request.
|
|
6
|
+
//
|
|
7
|
+
// Behaviors worth knowing:
|
|
8
|
+
// - Pause is re-checked on every tool call and list, not just at startup,
|
|
9
|
+
// so `cohvu pause` takes effect mid-session.
|
|
10
|
+
// - The manifest is cached for ~60s and also re-fetched on the first 401/402
|
|
11
|
+
// (permissions may have changed since the editor started).
|
|
12
|
+
// - Error payloads from the backend are parsed to extract `error.message`
|
|
13
|
+
// before being returned to the agent; network errors are translated to a
|
|
14
|
+
// human-readable "server unreachable" message.
|
|
15
|
+
// - Per-editor identity rides on an optional `--agent <name>` CLI arg that
|
|
16
|
+
// platform setup writes into each editor's MCP config. The proxy forwards
|
|
17
|
+
// it as `X-Cohvu-Agent` on every tool call so contribution attribution
|
|
18
|
+
// carries "which of this user's agents acted."
|
|
6
19
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
7
20
|
import { getApiKey } from "./auth.js";
|
|
8
21
|
import { isPaused } from "./pause.js";
|
|
9
22
|
import { refreshInstructions } from "./setup.js";
|
|
10
|
-
import { DEFAULT_BASE_URL } from "./constants.js";
|
|
23
|
+
import { DEFAULT_BASE_URL, CLI_VERSION } from "./constants.js";
|
|
24
|
+
import { log } from "./log.js";
|
|
25
|
+
const MANIFEST_TTL_MS = 60_000; // re-fetch at most every minute when cached
|
|
26
|
+
const MANIFEST_FETCH_TIMEOUT_MS = 8_000;
|
|
27
|
+
const TOOL_CALL_TIMEOUT_MS = 60_000;
|
|
28
|
+
/** Extract the `--agent <name>` arg out of process.argv if the platform
|
|
29
|
+
* setup injected it. Falls back to null. Used by every tool call to tell
|
|
30
|
+
* the server which editor initiated the request. */
|
|
31
|
+
function readAgentArg(argv) {
|
|
32
|
+
const idx = argv.indexOf("--agent");
|
|
33
|
+
if (idx === -1 || idx === argv.length - 1)
|
|
34
|
+
return null;
|
|
35
|
+
const value = argv[idx + 1]?.trim();
|
|
36
|
+
return value && value.length > 0 ? value : null;
|
|
37
|
+
}
|
|
38
|
+
/** Best-effort extraction of a user-friendly message from a backend error
|
|
39
|
+
* body. The canonical shape is `{error: {code, message}}`. We surface
|
|
40
|
+
* `message`; on parse failure we fall back to the raw body. */
|
|
41
|
+
function extractBackendErrorMessage(body) {
|
|
42
|
+
try {
|
|
43
|
+
const parsed = JSON.parse(body);
|
|
44
|
+
if (parsed.error?.message)
|
|
45
|
+
return parsed.error.message;
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// not JSON; fall through
|
|
49
|
+
}
|
|
50
|
+
return body || "Unknown error";
|
|
51
|
+
}
|
|
52
|
+
/** Map a fetch-level failure (network error, DNS failure, connection
|
|
53
|
+
* refused) to something the agent can read. */
|
|
54
|
+
function translateNetworkError(err) {
|
|
55
|
+
if (err instanceof Error) {
|
|
56
|
+
const msg = err.message || "";
|
|
57
|
+
if (msg.includes("abort") || msg.includes("timeout") || err.name === "TimeoutError") {
|
|
58
|
+
return "Cohvu server didn't respond in time. Try again in a moment.";
|
|
59
|
+
}
|
|
60
|
+
if (msg.includes("fetch") || msg.includes("ECONNREFUSED") || msg.includes("ENOTFOUND")) {
|
|
61
|
+
return "Cohvu server unreachable. Check your connection and try again.";
|
|
62
|
+
}
|
|
63
|
+
return msg;
|
|
64
|
+
}
|
|
65
|
+
return "Cohvu server unreachable. Check your connection and try again.";
|
|
66
|
+
}
|
|
11
67
|
export async function proxy() {
|
|
12
68
|
const baseUrl = process.env.COHVU_API_URL ?? DEFAULT_BASE_URL;
|
|
13
|
-
|
|
69
|
+
const agentName = readAgentArg(process.argv);
|
|
70
|
+
// Catch-all handlers so async faults leave a trail before the process
|
|
71
|
+
// exits. Without these, an unhandled rejection looks to the editor like
|
|
72
|
+
// "MCP server disconnected" with no explanation in our logs.
|
|
73
|
+
process.on("uncaughtException", (err) => {
|
|
74
|
+
log.error("proxy_uncaught_exception", { error: err.message, stack: err.stack });
|
|
75
|
+
});
|
|
76
|
+
process.on("unhandledRejection", (reason) => {
|
|
77
|
+
log.error("proxy_unhandled_rejection", { error: String(reason) });
|
|
78
|
+
});
|
|
79
|
+
// Always refresh editor instruction files — works whether or not we're
|
|
80
|
+
// signed in, so users who upgrade the CLI while paused or signed-out
|
|
81
|
+
// still get up-to-date rules/markdown on their editor's next read.
|
|
82
|
+
refreshInstructions();
|
|
83
|
+
log.info("proxy_start", { version: CLI_VERSION, agent: agentName ?? null });
|
|
14
84
|
const apiKey = getApiKey();
|
|
15
85
|
if (!apiKey) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
code: -32600,
|
|
26
|
-
message: "Cohvu is not connected. Run `cohvu` in your terminal to sign in.",
|
|
27
|
-
},
|
|
28
|
-
}).catch(() => { });
|
|
29
|
-
};
|
|
30
|
-
await transport.start();
|
|
86
|
+
log.info("proxy_unauthenticated");
|
|
87
|
+
await runSimpleResponder({
|
|
88
|
+
initResult: buildInitResult(null, "Cohvu is not connected. Run `cohvu` in your terminal to sign in."),
|
|
89
|
+
toolsListResult: { tools: [] },
|
|
90
|
+
callToolError: {
|
|
91
|
+
code: -32600,
|
|
92
|
+
message: "Cohvu is not connected. Run `cohvu` in your terminal to sign in.",
|
|
93
|
+
},
|
|
94
|
+
});
|
|
31
95
|
return;
|
|
32
96
|
}
|
|
33
|
-
|
|
97
|
+
const authHeader = `Bearer ${apiKey}`;
|
|
34
98
|
if (isPaused()) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
};
|
|
42
|
-
transport.onmessage = async (message) => {
|
|
43
|
-
const msg = message;
|
|
44
|
-
if (msg.id === undefined)
|
|
45
|
-
return;
|
|
46
|
-
switch (msg.method) {
|
|
47
|
-
case "initialize":
|
|
48
|
-
await transport.send({ jsonrpc: "2.0", id: msg.id, result: pausedInit });
|
|
49
|
-
break;
|
|
50
|
-
case "tools/list":
|
|
51
|
-
await transport.send({ jsonrpc: "2.0", id: msg.id, result: { tools: [] } });
|
|
52
|
-
break;
|
|
53
|
-
case "ping":
|
|
54
|
-
await transport.send({ jsonrpc: "2.0", id: msg.id, result: {} });
|
|
55
|
-
break;
|
|
56
|
-
default:
|
|
57
|
-
await transport.send({ jsonrpc: "2.0", id: msg.id, error: { code: -32600, message: "Cohvu is paused." } });
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
transport.onclose = () => process.exit(0);
|
|
61
|
-
await transport.start();
|
|
99
|
+
log.info("proxy_paused_at_start");
|
|
100
|
+
await runSimpleResponder({
|
|
101
|
+
initResult: buildInitResult(null, "Cohvu is paused. The developer has temporarily disabled Cohvu. Do not attempt to use understand or contribute."),
|
|
102
|
+
toolsListResult: { tools: [] },
|
|
103
|
+
callToolError: { code: -32600, message: "Cohvu is paused." },
|
|
104
|
+
});
|
|
62
105
|
return;
|
|
63
106
|
}
|
|
64
|
-
|
|
65
|
-
//
|
|
66
|
-
|
|
67
|
-
//
|
|
107
|
+
// Fetch manifest. Total wait across retries is capped around 15s so we
|
|
108
|
+
// respond inside the typical MCP client `initialize` timeout (~30s). If
|
|
109
|
+
// we blow past the cap, we still serve a fallback init response rather
|
|
110
|
+
// than keeping the editor hanging.
|
|
68
111
|
let manifest = null;
|
|
112
|
+
let manifestFetchedAt = 0;
|
|
69
113
|
async function fetchManifest() {
|
|
70
114
|
try {
|
|
71
115
|
const res = await fetch(`${baseUrl}/v1/tools/manifest`, {
|
|
72
116
|
headers: { Authorization: authHeader },
|
|
73
|
-
signal: AbortSignal.timeout(
|
|
117
|
+
signal: AbortSignal.timeout(MANIFEST_FETCH_TIMEOUT_MS),
|
|
74
118
|
});
|
|
75
|
-
if (res.ok)
|
|
76
|
-
|
|
119
|
+
if (res.ok) {
|
|
120
|
+
const parsed = (await res.json());
|
|
121
|
+
manifestFetchedAt = Date.now();
|
|
122
|
+
return parsed;
|
|
123
|
+
}
|
|
124
|
+
log.warn("manifest_fetch_status", { status: res.status });
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
log.warn("manifest_fetch_error", { error: String(err) });
|
|
77
128
|
}
|
|
78
|
-
catch { }
|
|
79
129
|
return null;
|
|
80
130
|
}
|
|
81
|
-
|
|
131
|
+
/** Re-fetch if cache is stale OR we have no manifest OR caller wants
|
|
132
|
+
* a forced refresh (e.g., after a 401/402 suggesting permissions
|
|
133
|
+
* changed server-side). */
|
|
134
|
+
async function ensureManifest(reason, force = false) {
|
|
135
|
+
if (!force && manifest && Date.now() - manifestFetchedAt < MANIFEST_TTL_MS) {
|
|
136
|
+
return manifest;
|
|
137
|
+
}
|
|
138
|
+
const fresh = await fetchManifest();
|
|
139
|
+
if (fresh) {
|
|
140
|
+
manifest = fresh;
|
|
141
|
+
log.debug("manifest_refreshed", { tool_count: fresh.tools.length, reason });
|
|
142
|
+
}
|
|
143
|
+
return manifest;
|
|
144
|
+
}
|
|
145
|
+
// Startup retry loop with a hard cap on total wait. Backoff: 500ms, 1s,
|
|
146
|
+
// 2s, 4s, 7s → ~14.5s total across 5 attempts.
|
|
147
|
+
const startupDelays = [500, 1000, 2000, 4000, 7000];
|
|
148
|
+
for (let i = 0; i < startupDelays.length; i++) {
|
|
82
149
|
manifest = await fetchManifest();
|
|
83
150
|
if (manifest)
|
|
84
151
|
break;
|
|
85
|
-
await new Promise((r) => setTimeout(r,
|
|
152
|
+
await new Promise((r) => setTimeout(r, startupDelays[i]));
|
|
153
|
+
}
|
|
154
|
+
if (!manifest) {
|
|
155
|
+
log.error("manifest_unavailable_at_start");
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
log.info("manifest_ready", { tool_count: manifest.tools.length });
|
|
86
159
|
}
|
|
87
|
-
|
|
88
|
-
const initializeResult = manifest
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
160
|
+
const fallbackInstructions = "Cohvu could not connect to the server. Restart your editor to retry.";
|
|
161
|
+
const initializeResult = buildInitResult(manifest, manifest ? manifest.instructions : fallbackInstructions);
|
|
162
|
+
// Call the backend tool endpoint. Inspects pause state first (so
|
|
163
|
+
// `cohvu pause` mid-session takes effect), parses backend error bodies,
|
|
164
|
+
// translates network failures, and re-fetches the manifest on 401/402
|
|
165
|
+
// so the agent's next tools/list reflects current permissions.
|
|
166
|
+
async function callTool(name, args) {
|
|
167
|
+
// Mid-session pause check — editors don't reconnect on pause, so the
|
|
168
|
+
// in-flight proxy has to honor it at call time.
|
|
169
|
+
if (isPaused()) {
|
|
170
|
+
log.info("tool_call_refused_paused", { tool: name });
|
|
171
|
+
return {
|
|
172
|
+
content: [{ type: "text", text: "Cohvu is paused." }],
|
|
173
|
+
isError: true,
|
|
174
|
+
};
|
|
94
175
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
})
|
|
176
|
+
const start = Date.now();
|
|
177
|
+
let res;
|
|
178
|
+
try {
|
|
179
|
+
res = await fetch(`${baseUrl}/v1/tools/call`, {
|
|
180
|
+
method: "POST",
|
|
181
|
+
headers: {
|
|
182
|
+
"Content-Type": "application/json",
|
|
183
|
+
Authorization: authHeader,
|
|
184
|
+
...(agentName ? { "X-Cohvu-Agent": agentName } : {}),
|
|
185
|
+
},
|
|
186
|
+
body: JSON.stringify({ tool: name, arguments: args }),
|
|
187
|
+
signal: AbortSignal.timeout(TOOL_CALL_TIMEOUT_MS),
|
|
188
|
+
});
|
|
108
189
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
body: JSON.stringify({ tool: name, arguments: args }),
|
|
119
|
-
signal: AbortSignal.timeout(60_000),
|
|
120
|
-
});
|
|
190
|
+
catch (err) {
|
|
191
|
+
const message = translateNetworkError(err);
|
|
192
|
+
log.error("tool_call_network_error", { tool: name, error: String(err) });
|
|
193
|
+
return {
|
|
194
|
+
content: [{ type: "text", text: message }],
|
|
195
|
+
isError: true,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
const durationMs = Date.now() - start;
|
|
121
199
|
if (!res.ok) {
|
|
122
|
-
const body = await res.text().catch(() => "
|
|
200
|
+
const body = await res.text().catch(() => "");
|
|
201
|
+
let message = extractBackendErrorMessage(body);
|
|
202
|
+
// Specific status-based UX messages. The agent relays these to the
|
|
203
|
+
// user, so they need to be human-actionable.
|
|
204
|
+
if (res.status === 401) {
|
|
205
|
+
message = "Cohvu session expired. Run `cohvu` in your terminal to sign in again.";
|
|
206
|
+
}
|
|
207
|
+
// Permissions may have changed — invalidate the cached manifest so
|
|
208
|
+
// the agent's next tools/list is accurate.
|
|
209
|
+
if (res.status === 401 || res.status === 402 || res.status === 403) {
|
|
210
|
+
void ensureManifest(`status_${res.status}`, true).catch((err) => {
|
|
211
|
+
log.debug("manifest_refresh_rejected", { error: String(err) });
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
log.warn("tool_call_backend_error", {
|
|
215
|
+
tool: name,
|
|
216
|
+
status: res.status,
|
|
217
|
+
duration_ms: durationMs,
|
|
218
|
+
message,
|
|
219
|
+
});
|
|
123
220
|
return {
|
|
124
|
-
content: [{ type: "text", text:
|
|
221
|
+
content: [{ type: "text", text: message }],
|
|
125
222
|
isError: true,
|
|
126
223
|
};
|
|
127
224
|
}
|
|
225
|
+
log.debug("tool_call_ok", { tool: name, duration_ms: durationMs });
|
|
128
226
|
return await res.json();
|
|
129
227
|
}
|
|
130
|
-
// Start stdio transport and handle MCP messages
|
|
131
228
|
const transport = new StdioServerTransport();
|
|
132
229
|
transport.onmessage = async (message) => {
|
|
133
230
|
const msg = message;
|
|
134
|
-
// Notifications (no id) — acknowledge silently
|
|
135
231
|
if (msg.id === undefined)
|
|
136
232
|
return;
|
|
137
233
|
try {
|
|
@@ -139,15 +235,36 @@ export async function proxy() {
|
|
|
139
235
|
case "initialize":
|
|
140
236
|
await transport.send({ jsonrpc: "2.0", id: msg.id, result: initializeResult });
|
|
141
237
|
break;
|
|
142
|
-
case "tools/list":
|
|
143
|
-
|
|
238
|
+
case "tools/list": {
|
|
239
|
+
// Pause is live — an editor asking for the tool list while the
|
|
240
|
+
// user is paused should see an empty list so the agent doesn't
|
|
241
|
+
// try to call anything and get rejections.
|
|
242
|
+
if (isPaused()) {
|
|
243
|
+
await transport.send({ jsonrpc: "2.0", id: msg.id, result: { tools: [] } });
|
|
244
|
+
break;
|
|
245
|
+
}
|
|
246
|
+
const m = await ensureManifest("tools_list");
|
|
247
|
+
await transport.send({
|
|
248
|
+
jsonrpc: "2.0",
|
|
249
|
+
id: msg.id,
|
|
250
|
+
result: {
|
|
251
|
+
tools: (m ?? manifest)?.tools.map((t) => ({
|
|
252
|
+
name: t.name,
|
|
253
|
+
description: t.description,
|
|
254
|
+
inputSchema: t.inputSchema,
|
|
255
|
+
})) ?? [],
|
|
256
|
+
},
|
|
257
|
+
});
|
|
144
258
|
break;
|
|
259
|
+
}
|
|
145
260
|
case "ping":
|
|
146
261
|
await transport.send({ jsonrpc: "2.0", id: msg.id, result: {} });
|
|
147
262
|
break;
|
|
148
263
|
case "tools/call": {
|
|
264
|
+
// If we never got a manifest, try once more — the backend may
|
|
265
|
+
// have come back online since startup.
|
|
149
266
|
if (!manifest) {
|
|
150
|
-
|
|
267
|
+
await ensureManifest("tools_call_no_manifest", true);
|
|
151
268
|
}
|
|
152
269
|
if (!manifest) {
|
|
153
270
|
await transport.send({
|
|
@@ -166,6 +283,7 @@ export async function proxy() {
|
|
|
166
283
|
break;
|
|
167
284
|
}
|
|
168
285
|
default:
|
|
286
|
+
log.warn("mcp_unknown_method", { method: msg.method });
|
|
169
287
|
await transport.send({
|
|
170
288
|
jsonrpc: "2.0",
|
|
171
289
|
id: msg.id,
|
|
@@ -174,6 +292,7 @@ export async function proxy() {
|
|
|
174
292
|
}
|
|
175
293
|
}
|
|
176
294
|
catch (err) {
|
|
295
|
+
log.error("message_handler_error", { method: msg.method, error: String(err) });
|
|
177
296
|
await transport.send({
|
|
178
297
|
jsonrpc: "2.0",
|
|
179
298
|
id: msg.id,
|
|
@@ -181,12 +300,58 @@ export async function proxy() {
|
|
|
181
300
|
code: -32603,
|
|
182
301
|
message: err instanceof Error ? err.message : "Internal error",
|
|
183
302
|
},
|
|
184
|
-
}).catch(() => {
|
|
303
|
+
}).catch((sendErr) => {
|
|
304
|
+
log.debug("error_response_send_failed", { method: msg.method, error: String(sendErr) });
|
|
305
|
+
});
|
|
185
306
|
}
|
|
186
307
|
};
|
|
187
308
|
transport.onclose = () => {
|
|
309
|
+
log.info("proxy_close");
|
|
188
310
|
process.exit(0);
|
|
189
311
|
};
|
|
190
312
|
await transport.start();
|
|
191
313
|
}
|
|
314
|
+
/** Used by the paused and unauthenticated branches — the proxy still needs
|
|
315
|
+
* to speak valid MCP so the editor doesn't choke; we just return a
|
|
316
|
+
* working server with no tools plus a clear `initialize` message. */
|
|
317
|
+
async function runSimpleResponder(opts) {
|
|
318
|
+
const transport = new StdioServerTransport();
|
|
319
|
+
transport.onmessage = async (message) => {
|
|
320
|
+
const msg = message;
|
|
321
|
+
if (msg.id === undefined)
|
|
322
|
+
return;
|
|
323
|
+
switch (msg.method) {
|
|
324
|
+
case "initialize":
|
|
325
|
+
await transport.send({ jsonrpc: "2.0", id: msg.id, result: opts.initResult });
|
|
326
|
+
break;
|
|
327
|
+
case "tools/list":
|
|
328
|
+
await transport.send({ jsonrpc: "2.0", id: msg.id, result: opts.toolsListResult });
|
|
329
|
+
break;
|
|
330
|
+
case "ping":
|
|
331
|
+
await transport.send({ jsonrpc: "2.0", id: msg.id, result: {} });
|
|
332
|
+
break;
|
|
333
|
+
default:
|
|
334
|
+
// Only log as "unknown method" if it's NOT a tools/call — tools/call
|
|
335
|
+
// in the simple responder is the expected path for paused/unauth
|
|
336
|
+
// states and the rejection is deliberate, not an unknown method.
|
|
337
|
+
if (msg.method !== "tools/call") {
|
|
338
|
+
log.warn("mcp_unknown_method", { method: msg.method, state: "simple_responder" });
|
|
339
|
+
}
|
|
340
|
+
await transport.send({ jsonrpc: "2.0", id: msg.id, error: opts.callToolError });
|
|
341
|
+
}
|
|
342
|
+
};
|
|
343
|
+
transport.onclose = () => {
|
|
344
|
+
log.info("proxy_close");
|
|
345
|
+
process.exit(0);
|
|
346
|
+
};
|
|
347
|
+
await transport.start();
|
|
348
|
+
}
|
|
349
|
+
function buildInitResult(manifest, instructions) {
|
|
350
|
+
return {
|
|
351
|
+
protocolVersion: "2025-03-26",
|
|
352
|
+
capabilities: { tools: {} },
|
|
353
|
+
serverInfo: manifest?.serverInfo ?? { name: "cohvu", version: CLI_VERSION },
|
|
354
|
+
instructions,
|
|
355
|
+
};
|
|
356
|
+
}
|
|
192
357
|
//# sourceMappingURL=proxy.js.map
|
package/dist/proxy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,gBAAgB;AAChB,EAAE;AACF,2BAA2B;AAC3B,4EAA4E;AAC5E,iDAAiD;AACjD,+EAA+E;AAC/E,+DAA+D;AAC/D,4EAA4E;AAC5E,6EAA6E;AAC7E,mDAAmD;AACnD,6EAA6E;AAC7E,8EAA8E;AAC9E,2EAA2E;AAC3E,mDAAmD;AAEnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAY/B,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,4CAA4C;AAC5E,MAAM,yBAAyB,GAAG,KAAK,CAAC;AACxC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAEpC;;qDAEqD;AACrD,SAAS,YAAY,CAAC,IAAc;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IACpC,OAAO,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC;AAED;;gEAEgE;AAChE,SAAS,0BAA0B,CAAC,IAAY;IAC9C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAqC,CAAC;QACpE,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO;YAAE,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,yBAAyB;IAC3B,CAAC;IACD,OAAO,IAAI,IAAI,eAAe,CAAC;AACjC,CAAC;AAED;gDACgD;AAChD,SAAS,qBAAqB,CAAC,GAAY;IACzC,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;QAC9B,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YACpF,OAAO,6DAA6D,CAAC;QACvE,CAAC;QACD,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACvF,OAAO,gEAAgE,CAAC;QAC1E,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,gEAAgE,CAAC;AAC1E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK;IACzB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,gBAAgB,CAAC;IAC9D,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7C,sEAAsE;IACtE,wEAAwE;IACxE,6DAA6D;IAC7D,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;QACtC,GAAG,CAAC,KAAK,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;QAC1C,GAAG,CAAC,KAAK,CAAC,2BAA2B,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,uEAAuE;IACvE,qEAAqE;IACrE,mEAAmE;IACnE,mBAAmB,EAAE,CAAC;IAEtB,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,IAAI,IAAI,EAAE,CAAC,CAAC;IAE5E,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAClC,MAAM,kBAAkB,CAAC;YACvB,UAAU,EAAE,eAAe,CACzB,IAAI,EACJ,kEAAkE,CACnE;YACD,eAAe,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC9B,aAAa,EAAE;gBACb,IAAI,EAAE,CAAC,KAAK;gBACZ,OAAO,EAAE,kEAAkE;aAC5E;SACF,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,UAAU,MAAM,EAAE,CAAC;IAEtC,IAAI,QAAQ,EAAE,EAAE,CAAC;QACf,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QAClC,MAAM,kBAAkB,CAAC;YACvB,UAAU,EAAE,eAAe,CACzB,IAAI,EACJ,gHAAgH,CACjH;YACD,eAAe,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YAC9B,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE;SAC7D,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,uEAAuE;IACvE,wEAAwE;IACxE,uEAAuE;IACvE,mCAAmC;IACnC,IAAI,QAAQ,GAAoB,IAAI,CAAC;IACrC,IAAI,iBAAiB,GAAG,CAAC,CAAC;IAE1B,KAAK,UAAU,aAAa;QAC1B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,oBAAoB,EAAE;gBACtD,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE;gBACtC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,yBAAyB,CAAC;aACvD,CAAC,CAAC;YACH,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;gBACX,MAAM,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAa,CAAC;gBAC9C,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC/B,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;gCAE4B;IAC5B,KAAK,UAAU,cAAc,CAAC,MAAc,EAAE,KAAK,GAAG,KAAK;QACzD,IAAI,CAAC,KAAK,IAAI,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,iBAAiB,GAAG,eAAe,EAAE,CAAC;YAC3E,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,aAAa,EAAE,CAAC;QACpC,IAAI,KAAK,EAAE,CAAC;YACV,QAAQ,GAAG,KAAK,CAAC;YACjB,GAAG,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,wEAAwE;IACxE,+CAA+C;IAC/C,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,QAAQ,GAAG,MAAM,aAAa,EAAE,CAAC;QACjC,IAAI,QAAQ;YAAE,MAAM;QACpB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,GAAG,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,MAAM,oBAAoB,GAAG,sEAAsE,CAAC;IACpG,MAAM,gBAAgB,GAAG,eAAe,CACtC,QAAQ,EACR,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,oBAAoB,CACxD,CAAC;IAEF,iEAAiE;IACjE,wEAAwE;IACxE,sEAAsE;IACtE,+DAA+D;IAC/D,KAAK,UAAU,QAAQ,CACrB,IAAY,EACZ,IAA6B;QAE7B,qEAAqE;QACrE,gDAAgD;QAChD,IAAI,QAAQ,EAAE,EAAE,CAAC;YACf,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;gBACrD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,GAAa,CAAC;QAClB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,gBAAgB,EAAE;gBAC5C,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU;oBACzB,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACrD;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;gBACrD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,oBAAoB,CAAC;aAClD,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;YAC3C,GAAG,CAAC,KAAK,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACzE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBAC1C,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAEtC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9C,IAAI,OAAO,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;YAE/C,mEAAmE;YACnE,6CAA6C;YAC7C,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvB,OAAO,GAAG,uEAAuE,CAAC;YACpF,CAAC;YAED,mEAAmE;YACnE,2CAA2C;YAC3C,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACnE,KAAK,cAAc,CAAC,UAAU,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBAC9D,GAAG,CAAC,KAAK,CAAC,2BAA2B,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACjE,CAAC,CAAC,CAAC;YACL,CAAC;YAED,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE;gBAClC,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,WAAW,EAAE,UAAU;gBACvB,OAAO;aACR,CAAC,CAAC;YAEH,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;gBAC1C,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;QACnE,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE7C,SAAS,CAAC,SAAS,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE;QACtC,MAAM,GAAG,GAAG,OAIX,CAAC;QAEF,IAAI,GAAG,CAAC,EAAE,KAAK,SAAS;YAAE,OAAO;QAEjC,IAAI,CAAC;YACH,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;gBACnB,KAAK,YAAY;oBACf,MAAM,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAc,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;oBACxF,MAAM;gBAER,KAAK,YAAY,CAAC,CAAC,CAAC;oBAClB,+DAA+D;oBAC/D,+DAA+D;oBAC/D,2CAA2C;oBAC3C,IAAI,QAAQ,EAAE,EAAE,CAAC;wBACf,MAAM,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAc,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;wBACrF,MAAM;oBACR,CAAC;oBACD,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,CAAC;oBAC7C,MAAM,SAAS,CAAC,IAAI,CAAC;wBACnB,OAAO,EAAE,KAAc;wBACvB,EAAE,EAAE,GAAG,CAAC,EAAE;wBACV,MAAM,EAAE;4BACN,KAAK,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gCACxC,IAAI,EAAE,CAAC,CAAC,IAAI;gCACZ,WAAW,EAAE,CAAC,CAAC,WAAW;gCAC1B,WAAW,EAAE,CAAC,CAAC,WAAW;6BAC3B,CAAC,CAAC,IAAI,EAAE;yBACV;qBACF,CAAC,CAAC;oBACH,MAAM;gBACR,CAAC;gBAED,KAAK,MAAM;oBACT,MAAM,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAc,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC1E,MAAM;gBAER,KAAK,YAAY,CAAC,CAAC,CAAC;oBAClB,8DAA8D;oBAC9D,uCAAuC;oBACvC,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACd,MAAM,cAAc,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;oBACvD,CAAC;oBACD,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACd,MAAM,SAAS,CAAC,IAAI,CAAC;4BACnB,OAAO,EAAE,KAAc;4BACvB,EAAE,EAAE,GAAG,CAAC,EAAE;4BACV,KAAK,EAAE;gCACL,IAAI,EAAE,CAAC,KAAK;gCACZ,OAAO,EAAE,sEAAsE;6BAChF;yBACF,CAAC,CAAC;wBACH,MAAM;oBACR,CAAC;oBACD,MAAM,MAAM,GAAG,GAAG,CAAC,MAA+D,CAAC;oBACnF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;oBACnE,MAAM,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAc,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,MAAiC,EAAE,CAAC,CAAC;oBACzG,MAAM;gBACR,CAAC;gBAED;oBACE,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;oBACvD,MAAM,SAAS,CAAC,IAAI,CAAC;wBACnB,OAAO,EAAE,KAAc;wBACvB,EAAE,EAAE,GAAG,CAAC,EAAE;wBACV,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,qBAAqB,GAAG,CAAC,MAAM,EAAE,EAAE;qBACpE,CAAC,CAAC;YACP,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/E,MAAM,SAAS,CAAC,IAAI,CAAC;gBACnB,OAAO,EAAE,KAAc;gBACvB,EAAE,EAAE,GAAG,CAAC,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,CAAC,KAAK;oBACZ,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB;iBAC/D;aACF,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,EAAE;gBACnB,GAAG,CAAC,KAAK,CAAC,4BAA4B,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC1F,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;IAEF,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE;QACvB,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED;;sEAEsE;AACtE,KAAK,UAAU,kBAAkB,CAAC,IAIjC;IACC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,SAAS,CAAC,SAAS,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE;QACtC,MAAM,GAAG,GAAG,OAAoD,CAAC;QACjE,IAAI,GAAG,CAAC,EAAE,KAAK,SAAS;YAAE,OAAO;QACjC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC;YACnB,KAAK,YAAY;gBACf,MAAM,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAc,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;gBACvF,MAAM;YACR,KAAK,YAAY;gBACf,MAAM,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAc,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;gBAC5F,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAc,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC1E,MAAM;YACR;gBACE,qEAAqE;gBACrE,iEAAiE;gBACjE,iEAAiE;gBACjE,IAAI,GAAG,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;oBAChC,GAAG,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBACpF,CAAC;gBACD,MAAM,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAc,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC,CAAC;IACF,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE;QACvB,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,eAAe,CAAC,QAAyB,EAAE,YAAoB;IACtE,OAAO;QACL,eAAe,EAAE,YAAY;QAC7B,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAC3B,UAAU,EAAE,QAAQ,EAAE,UAAU,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE;QAC3E,YAAY;KACb,CAAC;AACJ,CAAC"}
|
package/dist/setup.js
CHANGED
|
@@ -5,11 +5,29 @@ import { homedir } from "os";
|
|
|
5
5
|
import { join, dirname } from "path";
|
|
6
6
|
import { detectPlatforms } from "./platforms.js";
|
|
7
7
|
import { markedSection, MARKER_START, MARKER_END, CURSOR_RULE } from "./instructions.js";
|
|
8
|
-
const MCP_ENTRY = { command: "cohvu" };
|
|
9
8
|
// ---------------------------------------------------------------------------
|
|
10
9
|
// MCP config writers
|
|
10
|
+
//
|
|
11
|
+
// Each platform's entry is `{ command: "cohvu", args: ["--agent", <slug>] }`.
|
|
12
|
+
// The proxy reads the `--agent` value and forwards it as `X-Cohvu-Agent`
|
|
13
|
+
// on every tool call so the backend can record which editor initiated the
|
|
14
|
+
// contribution. We maintain two legacy migrations:
|
|
15
|
+
// 1. npx-based entries → direct binary (old install pattern)
|
|
16
|
+
// 2. direct-binary entries missing `args` → add the agent arg
|
|
17
|
+
// Both are idempotent — running setup on an up-to-date config returns "skipped".
|
|
11
18
|
// ---------------------------------------------------------------------------
|
|
12
|
-
function
|
|
19
|
+
function mcpEntry(agentSlug) {
|
|
20
|
+
return { command: "cohvu", args: ["--agent", agentSlug] };
|
|
21
|
+
}
|
|
22
|
+
function jsonEntryIsUpToDate(existing, agentSlug) {
|
|
23
|
+
if (existing.command !== "cohvu")
|
|
24
|
+
return false;
|
|
25
|
+
const args = Array.isArray(existing.args) ? existing.args : null;
|
|
26
|
+
if (!args)
|
|
27
|
+
return false;
|
|
28
|
+
return args.length === 2 && args[0] === "--agent" && args[1] === agentSlug;
|
|
29
|
+
}
|
|
30
|
+
function writeJsonMcpConfig(filePath, rootKey, agentSlug) {
|
|
13
31
|
try {
|
|
14
32
|
let config = {};
|
|
15
33
|
if (existsSync(filePath)) {
|
|
@@ -21,27 +39,21 @@ function writeJsonMcpConfig(filePath, rootKey) {
|
|
|
21
39
|
catch {
|
|
22
40
|
// Malformed JSON — back up and start fresh with just cohvu
|
|
23
41
|
copyFileSync(filePath, `${filePath}.cohvu-backup`);
|
|
24
|
-
config = { [rootKey]: { cohvu:
|
|
42
|
+
config = { [rootKey]: { cohvu: mcpEntry(agentSlug) } };
|
|
25
43
|
ensureDir(dirname(filePath));
|
|
26
44
|
writeFileSync(filePath, JSON.stringify(config, null, 2) + "\n");
|
|
27
|
-
return "ok";
|
|
45
|
+
return "ok";
|
|
28
46
|
}
|
|
29
47
|
}
|
|
30
48
|
}
|
|
31
49
|
const servers = (config[rootKey] ?? {});
|
|
32
|
-
|
|
33
|
-
if (
|
|
34
|
-
const existing = servers.cohvu;
|
|
35
|
-
if (existing.command === "npx") {
|
|
36
|
-
servers.cohvu = MCP_ENTRY;
|
|
37
|
-
config[rootKey] = servers;
|
|
38
|
-
ensureDir(dirname(filePath));
|
|
39
|
-
writeFileSync(filePath, JSON.stringify(config, null, 2) + "\n");
|
|
40
|
-
return "ok";
|
|
41
|
-
}
|
|
50
|
+
const existing = servers.cohvu;
|
|
51
|
+
if (existing && jsonEntryIsUpToDate(existing, agentSlug)) {
|
|
42
52
|
return "skipped";
|
|
43
53
|
}
|
|
44
|
-
|
|
54
|
+
// Any mismatch (legacy npx, direct binary without args, wrong slug,
|
|
55
|
+
// old command) gets overwritten with the current canonical shape.
|
|
56
|
+
servers.cohvu = mcpEntry(agentSlug);
|
|
45
57
|
config[rootKey] = servers;
|
|
46
58
|
ensureDir(dirname(filePath));
|
|
47
59
|
writeFileSync(filePath, JSON.stringify(config, null, 2) + "\n");
|
|
@@ -54,26 +66,28 @@ function writeJsonMcpConfig(filePath, rootKey) {
|
|
|
54
66
|
return { failed: msg.slice(0, 60) };
|
|
55
67
|
}
|
|
56
68
|
}
|
|
57
|
-
function writeTomlMcpConfig(filePath) {
|
|
69
|
+
function writeTomlMcpConfig(filePath, agentSlug) {
|
|
58
70
|
try {
|
|
59
71
|
let content = "";
|
|
60
72
|
if (existsSync(filePath)) {
|
|
61
73
|
content = readFileSync(filePath, "utf-8");
|
|
62
74
|
}
|
|
75
|
+
const canonicalSection = `[mcp_servers.cohvu]\ncommand = "cohvu"\nargs = ["--agent", "${agentSlug}"]\n`;
|
|
63
76
|
if (content.includes("[mcp_servers.cohvu]")) {
|
|
64
|
-
//
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
writeFileSync(filePath, content);
|
|
70
|
-
return "ok";
|
|
77
|
+
// Check if the existing section matches the canonical form.
|
|
78
|
+
const sectionRegex = /\[mcp_servers\.cohvu\]\n(?:[^\n\[]*\n?)*/;
|
|
79
|
+
const match = content.match(sectionRegex);
|
|
80
|
+
if (match && match[0].trim() === canonicalSection.trim()) {
|
|
81
|
+
return "skipped";
|
|
71
82
|
}
|
|
72
|
-
|
|
83
|
+
// Replace the entire [mcp_servers.cohvu] block. We match from the
|
|
84
|
+
// header up to the next section header or EOF.
|
|
85
|
+
content = content.replace(/\[mcp_servers\.cohvu\][\s\S]*?(?=\n\[|\n*$)/, canonicalSection.trim());
|
|
86
|
+
writeFileSync(filePath, content);
|
|
87
|
+
return "ok";
|
|
73
88
|
}
|
|
74
|
-
const section = `\n[mcp_servers.cohvu]\ncommand = "cohvu"\n`;
|
|
75
89
|
ensureDir(dirname(filePath));
|
|
76
|
-
writeFileSync(filePath, content +
|
|
90
|
+
writeFileSync(filePath, content + "\n" + canonicalSection);
|
|
77
91
|
return "ok";
|
|
78
92
|
}
|
|
79
93
|
catch (err) {
|
|
@@ -203,10 +217,10 @@ export async function runSetup() {
|
|
|
203
217
|
if (def.mcp) {
|
|
204
218
|
const filePath = resolve(def.mcp.path);
|
|
205
219
|
if (def.mcp.format === "toml") {
|
|
206
|
-
result.mcp = writeTomlMcpConfig(filePath);
|
|
220
|
+
result.mcp = writeTomlMcpConfig(filePath, def.agentSlug);
|
|
207
221
|
}
|
|
208
222
|
else {
|
|
209
|
-
result.mcp = writeJsonMcpConfig(filePath, def.mcp.rootKey);
|
|
223
|
+
result.mcp = writeJsonMcpConfig(filePath, def.mcp.rootKey, def.agentSlug);
|
|
210
224
|
}
|
|
211
225
|
}
|
|
212
226
|
// Write instruction file
|