cohvu 2.21.1 → 3.0.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/README.md +37 -0
- package/cli.js +15501 -0
- package/package.json +15 -26
- package/dist/__tests__/instruction-file.unit.test.d.ts +0 -1
- package/dist/__tests__/instruction-file.unit.test.js +0 -296
- package/dist/__tests__/instruction-file.unit.test.js.map +0 -1
- package/dist/__tests__/teardown.unit.test.d.ts +0 -1
- package/dist/__tests__/teardown.unit.test.js +0 -196
- package/dist/__tests__/teardown.unit.test.js.map +0 -1
- package/dist/api.d.ts +0 -292
- package/dist/api.js +0 -337
- package/dist/api.js.map +0 -1
- package/dist/auth.d.ts +0 -4
- package/dist/auth.js +0 -96
- package/dist/auth.js.map +0 -1
- package/dist/constants.d.ts +0 -2
- package/dist/constants.js +0 -10
- package/dist/constants.js.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.js +0 -259
- package/dist/index.js.map +0 -1
- package/dist/instructions.d.ts +0 -33
- package/dist/instructions.js +0 -238
- package/dist/instructions.js.map +0 -1
- package/dist/log.d.ts +0 -6
- package/dist/log.js +0 -51
- package/dist/log.js.map +0 -1
- package/dist/pause.d.ts +0 -3
- package/dist/pause.js +0 -24
- package/dist/pause.js.map +0 -1
- package/dist/platforms.d.ts +0 -22
- package/dist/platforms.js +0 -79
- package/dist/platforms.js.map +0 -1
- package/dist/postinstall.d.ts +0 -2
- package/dist/postinstall.js +0 -11
- package/dist/postinstall.js.map +0 -1
- package/dist/proxy.d.ts +0 -1
- package/dist/proxy.js +0 -371
- package/dist/proxy.js.map +0 -1
- package/dist/setup.d.ts +0 -15
- package/dist/setup.js +0 -295
- package/dist/setup.js.map +0 -1
- package/dist/teardown.d.ts +0 -15
- package/dist/teardown.js +0 -235
- package/dist/teardown.js.map +0 -1
- package/dist/tui/App.d.ts +0 -1
- package/dist/tui/App.js +0 -2245
- package/dist/tui/App.js.map +0 -1
- package/dist/tui/components/Banner.d.ts +0 -4
- package/dist/tui/components/Banner.js +0 -71
- package/dist/tui/components/Banner.js.map +0 -1
- package/dist/tui/components/Divider.d.ts +0 -1
- package/dist/tui/components/Divider.js +0 -8
- package/dist/tui/components/Divider.js.map +0 -1
- package/dist/tui/components/Footer.d.ts +0 -4
- package/dist/tui/components/Footer.js +0 -214
- package/dist/tui/components/Footer.js.map +0 -1
- package/dist/tui/components/Header.d.ts +0 -4
- package/dist/tui/components/Header.js +0 -126
- package/dist/tui/components/Header.js.map +0 -1
- package/dist/tui/components/LockCard.d.ts +0 -17
- package/dist/tui/components/LockCard.js +0 -37
- package/dist/tui/components/LockCard.js.map +0 -1
- package/dist/tui/components/Modal.d.ts +0 -5
- package/dist/tui/components/Modal.js +0 -195
- package/dist/tui/components/Modal.js.map +0 -1
- package/dist/tui/components/TabBar.d.ts +0 -4
- package/dist/tui/components/TabBar.js +0 -17
- package/dist/tui/components/TabBar.js.map +0 -1
- package/dist/tui/components/Toast.d.ts +0 -4
- package/dist/tui/components/Toast.js +0 -9
- package/dist/tui/components/Toast.js.map +0 -1
- package/dist/tui/index.d.ts +0 -1
- package/dist/tui/index.js +0 -20
- package/dist/tui/index.js.map +0 -1
- package/dist/tui/platform-detect.d.ts +0 -2
- package/dist/tui/platform-detect.js +0 -79
- package/dist/tui/platform-detect.js.map +0 -1
- package/dist/tui/state.d.ts +0 -414
- package/dist/tui/state.js +0 -397
- package/dist/tui/state.js.map +0 -1
- package/dist/tui/tabs/BillingTab.d.ts +0 -5
- package/dist/tui/tabs/BillingTab.js +0 -72
- package/dist/tui/tabs/BillingTab.js.map +0 -1
- package/dist/tui/tabs/KeysTab.d.ts +0 -5
- package/dist/tui/tabs/KeysTab.js +0 -87
- package/dist/tui/tabs/KeysTab.js.map +0 -1
- package/dist/tui/tabs/KnowledgeTab.d.ts +0 -5
- package/dist/tui/tabs/KnowledgeTab.js +0 -143
- package/dist/tui/tabs/KnowledgeTab.js.map +0 -1
- package/dist/tui/tabs/ProjectTab.d.ts +0 -5
- package/dist/tui/tabs/ProjectTab.js +0 -34
- package/dist/tui/tabs/ProjectTab.js.map +0 -1
- package/dist/tui/tabs/TeamTab.d.ts +0 -5
- package/dist/tui/tabs/TeamTab.js +0 -57
- package/dist/tui/tabs/TeamTab.js.map +0 -1
- package/dist/tui/tabs/YouTab.d.ts +0 -5
- package/dist/tui/tabs/YouTab.js +0 -25
- package/dist/tui/tabs/YouTab.js.map +0 -1
- package/dist/tui/utils.d.ts +0 -6
- package/dist/tui/utils.js +0 -58
- package/dist/tui/utils.js.map +0 -1
package/dist/setup.js
DELETED
|
@@ -1,295 +0,0 @@
|
|
|
1
|
-
// Setup orchestrator — writes MCP configs and instruction files for all detected platforms.
|
|
2
|
-
// No plugins. Everything is auto-configured.
|
|
3
|
-
import { existsSync, readFileSync, writeFileSync, mkdirSync, copyFileSync, } from "fs";
|
|
4
|
-
import { homedir } from "os";
|
|
5
|
-
import { join, dirname } from "path";
|
|
6
|
-
import { detectPlatforms } from "./platforms.js";
|
|
7
|
-
import { writeMarkdownInstructions, CURSOR_RULE } from "./instructions.js";
|
|
8
|
-
// ---------------------------------------------------------------------------
|
|
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".
|
|
18
|
-
// ---------------------------------------------------------------------------
|
|
19
|
-
/** Resolve the canonical MCP invocation for this cohvu install.
|
|
20
|
-
*
|
|
21
|
-
* GUI-launched editors (Cursor, Windsurf, VS Code, Claude Desktop on macOS
|
|
22
|
-
* and Linux) spawn MCP subprocesses with a MINIMAL PATH that excludes
|
|
23
|
-
* Homebrew, nvm, pnpm, and volta locations. A bare `"cohvu"` command
|
|
24
|
-
* can't be found. Worse, even an absolute path to the `cohvu` shim
|
|
25
|
-
* fails — the shim is a JS file with a `#!/usr/bin/env node` shebang,
|
|
26
|
-
* and `env` can't find `node` under the minimal PATH either.
|
|
27
|
-
*
|
|
28
|
-
* The bulletproof fix: invoke node DIRECTLY with the cohvu JS file as
|
|
29
|
-
* its script arg. No shebang, no PATH resolution, no shim.
|
|
30
|
-
*
|
|
31
|
-
* - `command` = process.execPath — absolute path to the node binary
|
|
32
|
-
* currently executing this setup code. Works regardless of how node
|
|
33
|
-
* was installed (system, homebrew, nvm, volta, asdf, etc.).
|
|
34
|
-
* - `args[0]` = process.argv[1] — absolute path to the cohvu JS entry
|
|
35
|
-
* file this setup code is running from. Guaranteed to be on the same
|
|
36
|
-
* node version that the user's shell just launched successfully.
|
|
37
|
-
*
|
|
38
|
-
* If the user later upgrades node and the old binary path disappears,
|
|
39
|
-
* the MCP entry will fail with a clear "command not found" in editor
|
|
40
|
-
* logs, and a single `cohvu` run from the user's terminal rewrites the
|
|
41
|
-
* entry with the new node path. */
|
|
42
|
-
function resolveMcpInvocation() {
|
|
43
|
-
const nodePath = process.execPath;
|
|
44
|
-
const scriptPath = process.argv[1];
|
|
45
|
-
if (nodePath && scriptPath && scriptPath.startsWith("/")) {
|
|
46
|
-
return { command: nodePath, args: [scriptPath] };
|
|
47
|
-
}
|
|
48
|
-
// Fallback — should never hit this in practice (setup runs via
|
|
49
|
-
// `cohvu` which always gives us an absolute script path).
|
|
50
|
-
return { command: "cohvu", args: [] };
|
|
51
|
-
}
|
|
52
|
-
function mcpEntry(agentSlug) {
|
|
53
|
-
const base = resolveMcpInvocation();
|
|
54
|
-
return { command: base.command, args: [...base.args, "--agent", agentSlug] };
|
|
55
|
-
}
|
|
56
|
-
function jsonEntryIsUpToDate(existing, agentSlug) {
|
|
57
|
-
const canonical = mcpEntry(agentSlug);
|
|
58
|
-
if (existing.command !== canonical.command)
|
|
59
|
-
return false;
|
|
60
|
-
const args = Array.isArray(existing.args) ? existing.args : null;
|
|
61
|
-
if (!args || args.length !== canonical.args.length)
|
|
62
|
-
return false;
|
|
63
|
-
for (let i = 0; i < canonical.args.length; i++) {
|
|
64
|
-
if (args[i] !== canonical.args[i])
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
return true;
|
|
68
|
-
}
|
|
69
|
-
function writeJsonMcpConfig(filePath, rootKey, agentSlug) {
|
|
70
|
-
try {
|
|
71
|
-
let config = {};
|
|
72
|
-
if (existsSync(filePath)) {
|
|
73
|
-
const raw = readFileSync(filePath, "utf-8").trim();
|
|
74
|
-
if (raw) {
|
|
75
|
-
try {
|
|
76
|
-
config = JSON.parse(raw);
|
|
77
|
-
}
|
|
78
|
-
catch {
|
|
79
|
-
// Malformed JSON — back up and start fresh with just cohvu
|
|
80
|
-
copyFileSync(filePath, `${filePath}.cohvu-backup`);
|
|
81
|
-
config = { [rootKey]: { cohvu: mcpEntry(agentSlug) } };
|
|
82
|
-
ensureDir(dirname(filePath));
|
|
83
|
-
writeFileSync(filePath, JSON.stringify(config, null, 2) + "\n");
|
|
84
|
-
return "ok";
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
const servers = (config[rootKey] ?? {});
|
|
89
|
-
const existing = servers.cohvu;
|
|
90
|
-
// Claude Code also stores project-scoped MCP configs under
|
|
91
|
-
// `projects.<path>.mcpServers.cohvu`. Stale entries there (from
|
|
92
|
-
// older CLI versions, pre-fix absolute paths, or pre-PATH-fix bare
|
|
93
|
-
// names) override the top-level config for specific projects. Sweep
|
|
94
|
-
// them into the current canonical shape too so the user's experience
|
|
95
|
-
// is consistent whether they're global or in a specific project.
|
|
96
|
-
let projectsChanged = false;
|
|
97
|
-
const projects = config.projects;
|
|
98
|
-
if (projects && typeof projects === "object") {
|
|
99
|
-
for (const projKey of Object.keys(projects)) {
|
|
100
|
-
const proj = projects[projKey];
|
|
101
|
-
if (!proj || typeof proj !== "object")
|
|
102
|
-
continue;
|
|
103
|
-
const projServers = proj.mcpServers;
|
|
104
|
-
if (!projServers)
|
|
105
|
-
continue;
|
|
106
|
-
const projCohvu = projServers.cohvu;
|
|
107
|
-
if (!projCohvu)
|
|
108
|
-
continue;
|
|
109
|
-
if (!jsonEntryIsUpToDate(projCohvu, agentSlug)) {
|
|
110
|
-
projServers.cohvu = mcpEntry(agentSlug);
|
|
111
|
-
proj.mcpServers = projServers;
|
|
112
|
-
projectsChanged = true;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
if (existing && jsonEntryIsUpToDate(existing, agentSlug) && !projectsChanged) {
|
|
117
|
-
return "skipped";
|
|
118
|
-
}
|
|
119
|
-
// Any mismatch (legacy npx, direct binary without args, wrong slug,
|
|
120
|
-
// old command) gets overwritten with the current canonical shape.
|
|
121
|
-
servers.cohvu = mcpEntry(agentSlug);
|
|
122
|
-
config[rootKey] = servers;
|
|
123
|
-
ensureDir(dirname(filePath));
|
|
124
|
-
writeFileSync(filePath, JSON.stringify(config, null, 2) + "\n");
|
|
125
|
-
return "ok";
|
|
126
|
-
}
|
|
127
|
-
catch (err) {
|
|
128
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
129
|
-
if (msg.includes("EACCES") || msg.includes("permission"))
|
|
130
|
-
return { failed: "permission denied" };
|
|
131
|
-
return { failed: msg.slice(0, 60) };
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
function writeTomlMcpConfig(filePath, agentSlug) {
|
|
135
|
-
try {
|
|
136
|
-
let content = "";
|
|
137
|
-
if (existsSync(filePath)) {
|
|
138
|
-
content = readFileSync(filePath, "utf-8");
|
|
139
|
-
}
|
|
140
|
-
const canonical = mcpEntry(agentSlug);
|
|
141
|
-
const argsToml = canonical.args.map((a) => `"${a.replace(/"/g, '\\"')}"`).join(", ");
|
|
142
|
-
const canonicalSection = `[mcp_servers.cohvu]\ncommand = "${canonical.command}"\nargs = [${argsToml}]\n`;
|
|
143
|
-
if (content.includes("[mcp_servers.cohvu]")) {
|
|
144
|
-
// Check if the existing section matches the canonical form.
|
|
145
|
-
const sectionRegex = /\[mcp_servers\.cohvu\]\n(?:[^\n\[]*\n?)*/;
|
|
146
|
-
const match = content.match(sectionRegex);
|
|
147
|
-
if (match && match[0].trim() === canonicalSection.trim()) {
|
|
148
|
-
return "skipped";
|
|
149
|
-
}
|
|
150
|
-
// Replace the entire [mcp_servers.cohvu] block. We match from the
|
|
151
|
-
// header up to the next section header or EOF.
|
|
152
|
-
content = content.replace(/\[mcp_servers\.cohvu\][\s\S]*?(?=\n\[|\n*$)/, canonicalSection.trim());
|
|
153
|
-
writeFileSync(filePath, content);
|
|
154
|
-
return "ok";
|
|
155
|
-
}
|
|
156
|
-
ensureDir(dirname(filePath));
|
|
157
|
-
writeFileSync(filePath, content + "\n" + canonicalSection);
|
|
158
|
-
return "ok";
|
|
159
|
-
}
|
|
160
|
-
catch (err) {
|
|
161
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
162
|
-
if (msg.includes("EACCES") || msg.includes("permission"))
|
|
163
|
-
return { failed: "permission denied" };
|
|
164
|
-
return { failed: msg.slice(0, 60) };
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
// ---------------------------------------------------------------------------
|
|
168
|
-
// Instruction file writers
|
|
169
|
-
// ---------------------------------------------------------------------------
|
|
170
|
-
function writeMdcRule(filePath) {
|
|
171
|
-
try {
|
|
172
|
-
if (existsSync(filePath)) {
|
|
173
|
-
const existing = readFileSync(filePath, "utf-8");
|
|
174
|
-
if (existing === CURSOR_RULE)
|
|
175
|
-
return "skipped";
|
|
176
|
-
}
|
|
177
|
-
ensureDir(dirname(filePath));
|
|
178
|
-
writeFileSync(filePath, CURSOR_RULE);
|
|
179
|
-
return "ok";
|
|
180
|
-
}
|
|
181
|
-
catch (err) {
|
|
182
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
183
|
-
if (msg.includes("EACCES") || msg.includes("permission"))
|
|
184
|
-
return { failed: "permission denied" };
|
|
185
|
-
return { failed: msg.slice(0, 60) };
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
function writeInstructionFile(filePath, format) {
|
|
189
|
-
if (format === "mdc")
|
|
190
|
-
return writeMdcRule(filePath);
|
|
191
|
-
return writeMarkdownInstructions(filePath);
|
|
192
|
-
}
|
|
193
|
-
// ---------------------------------------------------------------------------
|
|
194
|
-
// Permissions writer
|
|
195
|
-
// ---------------------------------------------------------------------------
|
|
196
|
-
function writePermissions(filePath, allowRules) {
|
|
197
|
-
try {
|
|
198
|
-
let config = {};
|
|
199
|
-
if (existsSync(filePath)) {
|
|
200
|
-
const raw = readFileSync(filePath, "utf-8").trim();
|
|
201
|
-
if (raw) {
|
|
202
|
-
try {
|
|
203
|
-
config = JSON.parse(raw);
|
|
204
|
-
}
|
|
205
|
-
catch {
|
|
206
|
-
copyFileSync(filePath, `${filePath}.cohvu-backup`);
|
|
207
|
-
config = {};
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
const permissions = (config.permissions ?? {});
|
|
212
|
-
const allow = Array.isArray(permissions.allow) ? [...permissions.allow] : [];
|
|
213
|
-
const newRules = allowRules.filter((rule) => !allow.includes(rule));
|
|
214
|
-
if (newRules.length === 0)
|
|
215
|
-
return "skipped";
|
|
216
|
-
allow.push(...newRules);
|
|
217
|
-
permissions.allow = allow;
|
|
218
|
-
config.permissions = permissions;
|
|
219
|
-
ensureDir(dirname(filePath));
|
|
220
|
-
writeFileSync(filePath, JSON.stringify(config, null, 2) + "\n");
|
|
221
|
-
return "ok";
|
|
222
|
-
}
|
|
223
|
-
catch (err) {
|
|
224
|
-
const msg = err instanceof Error ? err.message : String(err);
|
|
225
|
-
if (msg.includes("EACCES") || msg.includes("permission"))
|
|
226
|
-
return { failed: "permission denied" };
|
|
227
|
-
return { failed: msg.slice(0, 60) };
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
// ---------------------------------------------------------------------------
|
|
231
|
-
// Helpers
|
|
232
|
-
// ---------------------------------------------------------------------------
|
|
233
|
-
function ensureDir(dir) {
|
|
234
|
-
if (!existsSync(dir)) {
|
|
235
|
-
mkdirSync(dir, { recursive: true });
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
function resolve(relativePath) {
|
|
239
|
-
return join(homedir(), relativePath);
|
|
240
|
-
}
|
|
241
|
-
// ---------------------------------------------------------------------------
|
|
242
|
-
// Orchestrator — all platforms auto-configured, no plugins
|
|
243
|
-
// ---------------------------------------------------------------------------
|
|
244
|
-
export async function runSetup() {
|
|
245
|
-
const detected = detectPlatforms();
|
|
246
|
-
const results = [];
|
|
247
|
-
for (const { def } of detected) {
|
|
248
|
-
const result = {
|
|
249
|
-
name: def.name,
|
|
250
|
-
mcp: null,
|
|
251
|
-
instructions: null,
|
|
252
|
-
permissions: null,
|
|
253
|
-
};
|
|
254
|
-
// Write MCP config
|
|
255
|
-
if (def.mcp) {
|
|
256
|
-
const filePath = resolve(def.mcp.path);
|
|
257
|
-
if (def.mcp.format === "toml") {
|
|
258
|
-
result.mcp = writeTomlMcpConfig(filePath, def.agentSlug);
|
|
259
|
-
}
|
|
260
|
-
else {
|
|
261
|
-
result.mcp = writeJsonMcpConfig(filePath, def.mcp.rootKey, def.agentSlug);
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
// Write instruction file
|
|
265
|
-
if (def.instructions) {
|
|
266
|
-
const filePath = resolve(def.instructions.path);
|
|
267
|
-
result.instructions = writeInstructionFile(filePath, def.instructions.format);
|
|
268
|
-
}
|
|
269
|
-
// Write permissions
|
|
270
|
-
if (def.permissions) {
|
|
271
|
-
const filePath = resolve(def.permissions.path);
|
|
272
|
-
result.permissions = writePermissions(filePath, def.permissions.allowRules);
|
|
273
|
-
}
|
|
274
|
-
results.push(result);
|
|
275
|
-
}
|
|
276
|
-
return { platforms: results };
|
|
277
|
-
}
|
|
278
|
-
// ---------------------------------------------------------------------------
|
|
279
|
-
// Silent instruction refresh — called on proxy startup
|
|
280
|
-
// ---------------------------------------------------------------------------
|
|
281
|
-
export function refreshInstructions() {
|
|
282
|
-
const detected = detectPlatforms();
|
|
283
|
-
for (const { def } of detected) {
|
|
284
|
-
if (!def.instructions)
|
|
285
|
-
continue;
|
|
286
|
-
const filePath = resolve(def.instructions.path);
|
|
287
|
-
try {
|
|
288
|
-
writeInstructionFile(filePath, def.instructions.format);
|
|
289
|
-
}
|
|
290
|
-
catch {
|
|
291
|
-
// Silent — proxy startup shouldn't fail over this
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
//# sourceMappingURL=setup.js.map
|
package/dist/setup.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
|
package/dist/teardown.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
type StepResult = "ok" | "skipped" | {
|
|
2
|
-
failed: string;
|
|
3
|
-
};
|
|
4
|
-
interface PlatformResult {
|
|
5
|
-
name: string;
|
|
6
|
-
mcp: StepResult | null;
|
|
7
|
-
instructions: StepResult | null;
|
|
8
|
-
permissions: StepResult | null;
|
|
9
|
-
}
|
|
10
|
-
export interface TeardownResult {
|
|
11
|
-
platforms: PlatformResult[];
|
|
12
|
-
credentials: StepResult;
|
|
13
|
-
}
|
|
14
|
-
export declare function runTeardown(): Promise<TeardownResult>;
|
|
15
|
-
export {};
|
package/dist/teardown.js
DELETED
|
@@ -1,235 +0,0 @@
|
|
|
1
|
-
// Teardown — reverses what setup.ts does.
|
|
2
|
-
// Removes Cohvu from all detected agent configs, instruction files,
|
|
3
|
-
// permissions, and local credentials. Preserves other MCP servers.
|
|
4
|
-
import { existsSync, readFileSync, writeFileSync, unlinkSync, } from "fs";
|
|
5
|
-
import { homedir } from "os";
|
|
6
|
-
import { join } from "path";
|
|
7
|
-
import { detectPlatforms } from "./platforms.js";
|
|
8
|
-
import { removeMarkdownInstructions } from "./instructions.js";
|
|
9
|
-
import { ApiClient } from "./api.js";
|
|
10
|
-
import { getApiKey } from "./auth.js";
|
|
11
|
-
// ---------------------------------------------------------------------------
|
|
12
|
-
// MCP config removers
|
|
13
|
-
// ---------------------------------------------------------------------------
|
|
14
|
-
function removeJsonMcpEntry(filePath, rootKey) {
|
|
15
|
-
try {
|
|
16
|
-
if (!existsSync(filePath))
|
|
17
|
-
return "skipped";
|
|
18
|
-
const raw = readFileSync(filePath, "utf-8").trim();
|
|
19
|
-
if (!raw)
|
|
20
|
-
return "skipped";
|
|
21
|
-
let config;
|
|
22
|
-
try {
|
|
23
|
-
config = JSON.parse(raw);
|
|
24
|
-
}
|
|
25
|
-
catch {
|
|
26
|
-
return { failed: "could not parse JSON" };
|
|
27
|
-
}
|
|
28
|
-
// Remove the top-level cohvu entry.
|
|
29
|
-
let removedAny = false;
|
|
30
|
-
const servers = config[rootKey];
|
|
31
|
-
if (servers && servers.cohvu) {
|
|
32
|
-
delete servers.cohvu;
|
|
33
|
-
config[rootKey] = servers;
|
|
34
|
-
removedAny = true;
|
|
35
|
-
}
|
|
36
|
-
// Claude Code also stores project-scoped MCP configs under
|
|
37
|
-
// `projects.<path>.mcpServers.cohvu`. These survive a top-level
|
|
38
|
-
// removal and pollute future installs (stale commands after CLI
|
|
39
|
-
// upgrades, stale absolute paths after node upgrades, etc.). Walk
|
|
40
|
-
// every `projects.*` entry and strip cohvu from its mcpServers too.
|
|
41
|
-
const projects = config.projects;
|
|
42
|
-
if (projects && typeof projects === "object") {
|
|
43
|
-
for (const projKey of Object.keys(projects)) {
|
|
44
|
-
const proj = projects[projKey];
|
|
45
|
-
if (!proj || typeof proj !== "object")
|
|
46
|
-
continue;
|
|
47
|
-
const projServers = proj.mcpServers;
|
|
48
|
-
if (projServers && projServers.cohvu) {
|
|
49
|
-
delete projServers.cohvu;
|
|
50
|
-
proj.mcpServers = projServers;
|
|
51
|
-
removedAny = true;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
if (!removedAny)
|
|
56
|
-
return "skipped";
|
|
57
|
-
writeFileSync(filePath, JSON.stringify(config, null, 2) + "\n");
|
|
58
|
-
return "ok";
|
|
59
|
-
}
|
|
60
|
-
catch (err) {
|
|
61
|
-
return { failed: (err instanceof Error ? err.message : String(err)).slice(0, 60) };
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
function removeTomlMcpEntry(filePath) {
|
|
65
|
-
try {
|
|
66
|
-
if (!existsSync(filePath))
|
|
67
|
-
return "skipped";
|
|
68
|
-
const content = readFileSync(filePath, "utf-8");
|
|
69
|
-
// Match the base `[mcp_servers.cohvu]` section OR any nested section
|
|
70
|
-
// like `[mcp_servers.cohvu.tools.understand]`. A previous setup may
|
|
71
|
-
// have left per-tool approval sub-sections behind; those need to go
|
|
72
|
-
// too so a fresh install doesn't inherit stale tool-level config.
|
|
73
|
-
const hasCohvu = /\[mcp_servers\.cohvu(\.[^\]]*)?\]/.test(content);
|
|
74
|
-
if (!hasCohvu)
|
|
75
|
-
return "skipped";
|
|
76
|
-
const lines = content.split("\n");
|
|
77
|
-
const result = [];
|
|
78
|
-
let skipping = false;
|
|
79
|
-
for (const line of lines) {
|
|
80
|
-
// Start skipping when we see any [mcp_servers.cohvu...] header.
|
|
81
|
-
if (/^\[mcp_servers\.cohvu(\.[^\]]*)?\]\s*$/.test(line.trim())) {
|
|
82
|
-
skipping = true;
|
|
83
|
-
continue;
|
|
84
|
-
}
|
|
85
|
-
// Stop skipping when the next non-cohvu section starts.
|
|
86
|
-
if (skipping && line.trim().startsWith("[") && !/^\[mcp_servers\.cohvu(\.[^\]]*)?\]/.test(line.trim())) {
|
|
87
|
-
skipping = false;
|
|
88
|
-
}
|
|
89
|
-
if (!skipping) {
|
|
90
|
-
result.push(line);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
const cleaned = result.join("\n").replace(/\n{3,}/g, "\n\n").trim() + "\n";
|
|
94
|
-
writeFileSync(filePath, cleaned);
|
|
95
|
-
return "ok";
|
|
96
|
-
}
|
|
97
|
-
catch (err) {
|
|
98
|
-
return { failed: (err instanceof Error ? err.message : String(err)).slice(0, 60) };
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
// ---------------------------------------------------------------------------
|
|
102
|
-
// Instruction removers
|
|
103
|
-
// ---------------------------------------------------------------------------
|
|
104
|
-
function removeMdcRule(filePath) {
|
|
105
|
-
try {
|
|
106
|
-
if (!existsSync(filePath))
|
|
107
|
-
return "skipped";
|
|
108
|
-
unlinkSync(filePath);
|
|
109
|
-
return "ok";
|
|
110
|
-
}
|
|
111
|
-
catch (err) {
|
|
112
|
-
return { failed: (err instanceof Error ? err.message : String(err)).slice(0, 60) };
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
function removeInstructions(filePath, format) {
|
|
116
|
-
if (format === "mdc")
|
|
117
|
-
return removeMdcRule(filePath);
|
|
118
|
-
return removeMarkdownInstructions(filePath);
|
|
119
|
-
}
|
|
120
|
-
// ---------------------------------------------------------------------------
|
|
121
|
-
// Permissions remover
|
|
122
|
-
// ---------------------------------------------------------------------------
|
|
123
|
-
function removePermissions(filePath) {
|
|
124
|
-
try {
|
|
125
|
-
if (!existsSync(filePath))
|
|
126
|
-
return "skipped";
|
|
127
|
-
const raw = readFileSync(filePath, "utf-8").trim();
|
|
128
|
-
if (!raw)
|
|
129
|
-
return "skipped";
|
|
130
|
-
let config;
|
|
131
|
-
try {
|
|
132
|
-
config = JSON.parse(raw);
|
|
133
|
-
}
|
|
134
|
-
catch {
|
|
135
|
-
return { failed: "could not parse JSON" };
|
|
136
|
-
}
|
|
137
|
-
const permissions = config.permissions;
|
|
138
|
-
if (!permissions)
|
|
139
|
-
return "skipped";
|
|
140
|
-
const allow = Array.isArray(permissions.allow) ? [...permissions.allow] : [];
|
|
141
|
-
const filtered = allow.filter((rule) => !rule.startsWith("mcp__cohvu__"));
|
|
142
|
-
if (filtered.length === allow.length)
|
|
143
|
-
return "skipped";
|
|
144
|
-
permissions.allow = filtered;
|
|
145
|
-
config.permissions = permissions;
|
|
146
|
-
writeFileSync(filePath, JSON.stringify(config, null, 2) + "\n");
|
|
147
|
-
return "ok";
|
|
148
|
-
}
|
|
149
|
-
catch (err) {
|
|
150
|
-
return { failed: (err instanceof Error ? err.message : String(err)).slice(0, 60) };
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
// ---------------------------------------------------------------------------
|
|
154
|
-
// Local state
|
|
155
|
-
// ---------------------------------------------------------------------------
|
|
156
|
-
function deleteFile(path) {
|
|
157
|
-
try {
|
|
158
|
-
if (!existsSync(path))
|
|
159
|
-
return false;
|
|
160
|
-
unlinkSync(path);
|
|
161
|
-
return true;
|
|
162
|
-
}
|
|
163
|
-
catch {
|
|
164
|
-
return false;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
// ---------------------------------------------------------------------------
|
|
168
|
-
// Orchestrator
|
|
169
|
-
// ---------------------------------------------------------------------------
|
|
170
|
-
function resolve(relativePath) {
|
|
171
|
-
return join(homedir(), relativePath);
|
|
172
|
-
}
|
|
173
|
-
export async function runTeardown() {
|
|
174
|
-
const detected = detectPlatforms();
|
|
175
|
-
const results = [];
|
|
176
|
-
for (const { def } of detected) {
|
|
177
|
-
const result = {
|
|
178
|
-
name: def.name,
|
|
179
|
-
mcp: null,
|
|
180
|
-
instructions: null,
|
|
181
|
-
permissions: null,
|
|
182
|
-
};
|
|
183
|
-
if (def.mcp) {
|
|
184
|
-
const filePath = resolve(def.mcp.path);
|
|
185
|
-
if (def.mcp.format === "toml") {
|
|
186
|
-
result.mcp = removeTomlMcpEntry(filePath);
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
result.mcp = removeJsonMcpEntry(filePath, def.mcp.rootKey);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
if (def.instructions) {
|
|
193
|
-
const filePath = resolve(def.instructions.path);
|
|
194
|
-
result.instructions = removeInstructions(filePath, def.instructions.format);
|
|
195
|
-
}
|
|
196
|
-
if (def.permissions) {
|
|
197
|
-
const filePath = resolve(def.permissions.path);
|
|
198
|
-
result.permissions = removePermissions(filePath);
|
|
199
|
-
}
|
|
200
|
-
results.push(result);
|
|
201
|
-
}
|
|
202
|
-
// Revoke the current session key server-side before deleting the local
|
|
203
|
-
// credentials file. "Disconnected" should mean the server considers this
|
|
204
|
-
// installation gone — not just the local bits cleaned up. Best effort:
|
|
205
|
-
// if the server is unreachable, proceed with local cleanup. The key can
|
|
206
|
-
// always be revoked later from another session.
|
|
207
|
-
await revokeCurrentSessionKey();
|
|
208
|
-
// Delete local state
|
|
209
|
-
const home = homedir();
|
|
210
|
-
deleteFile(join(home, ".cohvu", "credentials"));
|
|
211
|
-
deleteFile(join(home, ".cohvu", "paused"));
|
|
212
|
-
return {
|
|
213
|
-
platforms: results,
|
|
214
|
-
credentials: "ok",
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
async function revokeCurrentSessionKey() {
|
|
218
|
-
const rawKey = getApiKey();
|
|
219
|
-
if (!rawKey || !rawKey.startsWith("chv_"))
|
|
220
|
-
return;
|
|
221
|
-
const prefix = rawKey.slice(4, 12);
|
|
222
|
-
try {
|
|
223
|
-
const client = new ApiClient();
|
|
224
|
-
const keys = await client.listSessionKeys();
|
|
225
|
-
const mine = keys.find((k) => k.key_prefix === prefix);
|
|
226
|
-
if (mine) {
|
|
227
|
-
await client.deleteApiKey(mine.id);
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
catch {
|
|
231
|
-
// Non-critical: server unreachable or auth failed. Local cleanup
|
|
232
|
-
// continues; a returning user can revoke the key from the dashboard.
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
//# sourceMappingURL=teardown.js.map
|
package/dist/teardown.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"teardown.js","sourceRoot":"","sources":["../src/teardown.ts"],"names":[],"mappings":"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"}
|
package/dist/tui/App.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export default function App(): import("react/jsx-runtime").JSX.Element;
|