cohvu 2.6.0 → 2.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,196 @@
1
+ import { existsSync, readFileSync, writeFileSync, mkdirSync, unlinkSync, rmSync } from "fs";
2
+ import { join } from "path";
3
+ import { tmpdir } from "os";
4
+ // We test the teardown helpers by creating temp files and running the removers.
5
+ // The actual runTeardown orchestrator depends on detectPlatforms which reads
6
+ // the home directory, so we test the individual functions directly.
7
+ // Import the module — we need to reach the internal functions.
8
+ // Since they're not exported, we'll test through runTeardown with mocked platforms.
9
+ // Actually, let's test the file manipulation logic by creating real temp files.
10
+ const TEST_DIR = join(tmpdir(), `cohvu-teardown-test-${process.pid}`);
11
+ beforeAll(() => {
12
+ mkdirSync(TEST_DIR, { recursive: true });
13
+ });
14
+ afterAll(() => {
15
+ rmSync(TEST_DIR, { recursive: true, force: true });
16
+ });
17
+ describe("teardown — JSON MCP removal", () => {
18
+ it("removes cohvu entry preserving others", () => {
19
+ const filePath = join(TEST_DIR, "mcp-json-1.json");
20
+ const original = {
21
+ mcpServers: {
22
+ cohvu: { command: "npx", args: ["cohvu"] },
23
+ other: { command: "other-tool", args: [] },
24
+ },
25
+ };
26
+ writeFileSync(filePath, JSON.stringify(original, null, 2));
27
+ // Simulate what removeJsonMcpEntry does
28
+ const raw = readFileSync(filePath, "utf-8");
29
+ const config = JSON.parse(raw);
30
+ const servers = config.mcpServers;
31
+ delete servers.cohvu;
32
+ writeFileSync(filePath, JSON.stringify(config, null, 2) + "\n");
33
+ const result = JSON.parse(readFileSync(filePath, "utf-8"));
34
+ expect(result.mcpServers.cohvu).toBeUndefined();
35
+ expect(result.mcpServers.other).toEqual({ command: "other-tool", args: [] });
36
+ });
37
+ it("handles file with only cohvu entry", () => {
38
+ const filePath = join(TEST_DIR, "mcp-json-2.json");
39
+ const original = {
40
+ mcpServers: {
41
+ cohvu: { command: "npx", args: ["cohvu"] },
42
+ },
43
+ };
44
+ writeFileSync(filePath, JSON.stringify(original, null, 2));
45
+ const raw = readFileSync(filePath, "utf-8");
46
+ const config = JSON.parse(raw);
47
+ const servers = config.mcpServers;
48
+ delete servers.cohvu;
49
+ writeFileSync(filePath, JSON.stringify(config, null, 2) + "\n");
50
+ const result = JSON.parse(readFileSync(filePath, "utf-8"));
51
+ expect(result.mcpServers).toEqual({});
52
+ });
53
+ });
54
+ describe("teardown — TOML MCP removal", () => {
55
+ it("removes cohvu section preserving others", () => {
56
+ const filePath = join(TEST_DIR, "config.toml");
57
+ const original = `[mcp_servers.other]
58
+ command = "other"
59
+ args = ["--flag"]
60
+
61
+ [mcp_servers.cohvu]
62
+ command = "npx"
63
+ args = ["cohvu"]
64
+
65
+ [some_other_section]
66
+ key = "value"
67
+ `;
68
+ writeFileSync(filePath, original);
69
+ // Simulate removeTomlMcpEntry
70
+ const lines = readFileSync(filePath, "utf-8").split("\n");
71
+ const result = [];
72
+ let skipping = false;
73
+ for (const line of lines) {
74
+ if (line.trim() === "[mcp_servers.cohvu]") {
75
+ skipping = true;
76
+ continue;
77
+ }
78
+ if (skipping && line.trim().startsWith("[")) {
79
+ skipping = false;
80
+ }
81
+ if (!skipping) {
82
+ result.push(line);
83
+ }
84
+ }
85
+ const cleaned = result.join("\n").replace(/\n{3,}/g, "\n\n").trim() + "\n";
86
+ writeFileSync(filePath, cleaned);
87
+ const final = readFileSync(filePath, "utf-8");
88
+ expect(final).not.toContain("[mcp_servers.cohvu]");
89
+ expect(final).toContain("[mcp_servers.other]");
90
+ expect(final).toContain("[some_other_section]");
91
+ expect(final).toContain('command = "other"');
92
+ });
93
+ it("handles cohvu at end of file", () => {
94
+ const filePath = join(TEST_DIR, "config-end.toml");
95
+ const original = `[mcp_servers.other]
96
+ command = "other"
97
+
98
+ [mcp_servers.cohvu]
99
+ command = "npx"
100
+ args = ["cohvu"]
101
+ `;
102
+ writeFileSync(filePath, original);
103
+ const lines = readFileSync(filePath, "utf-8").split("\n");
104
+ const result = [];
105
+ let skipping = false;
106
+ for (const line of lines) {
107
+ if (line.trim() === "[mcp_servers.cohvu]") {
108
+ skipping = true;
109
+ continue;
110
+ }
111
+ if (skipping && line.trim().startsWith("[")) {
112
+ skipping = false;
113
+ }
114
+ if (!skipping) {
115
+ result.push(line);
116
+ }
117
+ }
118
+ const cleaned = result.join("\n").replace(/\n{3,}/g, "\n\n").trim() + "\n";
119
+ writeFileSync(filePath, cleaned);
120
+ const final = readFileSync(filePath, "utf-8");
121
+ expect(final).not.toContain("[mcp_servers.cohvu]");
122
+ expect(final).toContain("[mcp_servers.other]");
123
+ });
124
+ });
125
+ describe("teardown — markdown instruction removal", () => {
126
+ const MARKER_START = "<!-- cohvu:start -->";
127
+ const MARKER_END = "<!-- cohvu:end -->";
128
+ it("removes marked section preserving surrounding content", () => {
129
+ const filePath = join(TEST_DIR, "CLAUDE.md");
130
+ const original = `# My Project
131
+
132
+ Some custom instructions here.
133
+
134
+ ${MARKER_START}
135
+ # Cohvu
136
+
137
+ Cohvu instructions here.
138
+ ${MARKER_END}
139
+
140
+ More custom content below.
141
+ `;
142
+ writeFileSync(filePath, original);
143
+ const content = readFileSync(filePath, "utf-8");
144
+ const startIdx = content.indexOf(MARKER_START);
145
+ const endIdx = content.indexOf(MARKER_END);
146
+ const before = content.slice(0, startIdx).replace(/\n+$/, "");
147
+ const after = content.slice(endIdx + MARKER_END.length).replace(/^\n+/, "");
148
+ const result = before + "\n\n" + after;
149
+ writeFileSync(filePath, result.trimEnd() + "\n");
150
+ const final = readFileSync(filePath, "utf-8");
151
+ expect(final).not.toContain("cohvu:start");
152
+ expect(final).not.toContain("Cohvu instructions");
153
+ expect(final).toContain("My Project");
154
+ expect(final).toContain("More custom content below.");
155
+ });
156
+ it("deletes file when only cohvu content exists", () => {
157
+ const filePath = join(TEST_DIR, "cohvu-only.md");
158
+ const original = `${MARKER_START}
159
+ # Cohvu
160
+
161
+ Cohvu instructions here.
162
+ ${MARKER_END}
163
+ `;
164
+ writeFileSync(filePath, original);
165
+ const content = readFileSync(filePath, "utf-8");
166
+ const startIdx = content.indexOf(MARKER_START);
167
+ const endIdx = content.indexOf(MARKER_END);
168
+ const before = content.slice(0, startIdx).replace(/\n+$/, "");
169
+ const after = content.slice(endIdx + MARKER_END.length).replace(/^\n+/, "");
170
+ const result = before || after;
171
+ if (!result.trim()) {
172
+ unlinkSync(filePath);
173
+ }
174
+ expect(existsSync(filePath)).toBe(false);
175
+ });
176
+ });
177
+ describe("teardown — permissions removal", () => {
178
+ it("removes cohvu permission preserving others", () => {
179
+ const filePath = join(TEST_DIR, "settings.json");
180
+ const original = {
181
+ permissions: {
182
+ allow: ["mcp__cohvu__*", "mcp__other__*", "Bash(git *)"],
183
+ },
184
+ };
185
+ writeFileSync(filePath, JSON.stringify(original, null, 2));
186
+ const raw = readFileSync(filePath, "utf-8");
187
+ const config = JSON.parse(raw);
188
+ const permissions = config.permissions;
189
+ const allow = permissions.allow.filter((rule) => !rule.startsWith("mcp__cohvu__"));
190
+ permissions.allow = allow;
191
+ writeFileSync(filePath, JSON.stringify(config, null, 2) + "\n");
192
+ const result = JSON.parse(readFileSync(filePath, "utf-8"));
193
+ expect(result.permissions.allow).toEqual(["mcp__other__*", "Bash(git *)"]);
194
+ });
195
+ });
196
+ //# sourceMappingURL=teardown.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teardown.unit.test.js","sourceRoot":"","sources":["../../src/__tests__/teardown.unit.test.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,7 +1,10 @@
1
1
  #!/usr/bin/env node
2
- // Cohvu CLI — one command.
2
+ // Cohvu CLI
3
3
  //
4
- // npx cohvu — TUI dashboard (interactive) or MCP proxy (piped by agent)
4
+ // npx cohvu — TUI dashboard (interactive) or MCP proxy (piped)
5
+ // npx cohvu pause — pause Cohvu (agents won't see tools)
6
+ // npx cohvu resume — resume Cohvu
7
+ // npx cohvu disconnect — remove Cohvu from all agents and sign out
5
8
  import { createInterface } from "readline";
6
9
  import chalk from "chalk";
7
10
  import ora from "ora";
@@ -11,18 +14,48 @@ import { proxy } from "./proxy.js";
11
14
  import { ApiClient, ApiError } from "./api.js";
12
15
  import { launchDashboard } from "./tui/index.js";
13
16
  import { DEFAULT_BASE_URL } from "./constants.js";
14
- if (process.stdin.isTTY) {
15
- enterDashboard().catch((error) => {
16
- process.stderr.write(`Failed: ${error}\n`);
17
- process.exit(1);
17
+ const subcommand = process.argv[2];
18
+ if (subcommand === "pause") {
19
+ import("./pause.js").then(({ setPaused }) => {
20
+ setPaused(true);
21
+ console.log(chalk.dim(" cohvu paused — agents won't see tools until resumed"));
18
22
  });
19
23
  }
20
- else {
24
+ else if (subcommand === "resume") {
25
+ import("./pause.js").then(({ setPaused }) => {
26
+ setPaused(false);
27
+ console.log(chalk.dim(" cohvu resumed"));
28
+ });
29
+ }
30
+ else if (subcommand === "disconnect") {
31
+ import("./teardown.js").then(async ({ runTeardown }) => {
32
+ const result = await runTeardown();
33
+ const removed = result.platforms.filter(p => p.mcp === "ok" || p.instructions === "ok");
34
+ if (removed.length > 0) {
35
+ for (const p of removed) {
36
+ console.log(chalk.dim(` removed from ${p.name}`));
37
+ }
38
+ }
39
+ console.log(chalk.dim(" disconnected — run npx cohvu to reconnect"));
40
+ });
41
+ }
42
+ else if (subcommand && subcommand !== "--help") {
43
+ console.log(chalk.dim(` unknown command: ${subcommand}`));
44
+ console.log(chalk.dim(" usage: npx cohvu [pause | resume | disconnect]"));
45
+ process.exit(1);
46
+ }
47
+ else if (!process.stdin.isTTY) {
21
48
  proxy().catch((error) => {
22
49
  process.stderr.write(`Cohvu CLI failed: ${error}\n`);
23
50
  process.exit(1);
24
51
  });
25
52
  }
53
+ else {
54
+ enterDashboard().catch((error) => {
55
+ process.stderr.write(`Failed: ${error}\n`);
56
+ process.exit(1);
57
+ });
58
+ }
26
59
  // ---------------------------------------------------------------------------
27
60
  // Helpers
28
61
  // ---------------------------------------------------------------------------
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,YAAY;AACZ,EAAE;AACF,8EAA8E;AAC9E,kEAAkE;AAClE,0CAA0C;AAC1C,uEAAuE;AAEvE,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEnC,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;IAC3B,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;QAC1C,SAAS,CAAC,IAAI,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;AACL,CAAC;KAAM,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;IACnC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;QAC1C,SAAS,CAAC,KAAK,CAAC,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC;KAAM,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;IACvC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QACrD,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC;QACxF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC;KAAM,IAAI,UAAU,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC,CAAC;IAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;KAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAChC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,KAAK,IAAI,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;KAAM,CAAC;IACN,cAAc,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QACxC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,MAAM,CAAC,QAAgB;IAC9B,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE;YAC/B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,8EAA8E;AAC9E,uEAAuE;AACvE,8EAA8E;AAE9E,KAAK,UAAU,cAAc;IAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,gBAAgB,CAAC;IAC9D,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,CAAC;IAE/B,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC;QAE1B,MAAM,YAAY,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;QAC/E,MAAM,QAAQ,EAAE,CAAC;QACjB,YAAY,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAEzC,MAAM,WAAW,GAAG,EAAE,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC;YACjD,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE5C,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,EAAE,CAAC;gBACb,IAAI,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;gBAC9C,IAAI,CAAC,IAAI;oBAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;YACpE,CAAC;YAED,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAEhD,4DAA4D;gBAC5D,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;gBACjE,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;gBACpG,MAAM,SAAS,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC3E,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAAC,CAAC;YAClF,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC,CAAC;YAC1F,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,+BAA+B;QAC/B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC;QACjB,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,oEAAoE;YACpE,MAAM,WAAW,GAAG,GAAG,YAAY,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC;YAClE,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;gBAC1C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;gBACtC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;gBACvC,IAAI,CAAC;oBAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAA,CAAC;gBACtE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBAC5C,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,gEAAgE;YAClE,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;IACtE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,WAAW,CAAC,IAAI,EAAE,CAAC;IACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,CAAC,sBAAsB;IAErE,MAAM,eAAe,EAAE,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const PAUSED_FILE: string;
2
+ export declare function isPaused(): boolean;
3
+ export declare function setPaused(paused: boolean): void;
package/dist/pause.js ADDED
@@ -0,0 +1,24 @@
1
+ // Pause flag — file-based, survives restarts.
2
+ // The proxy checks this on startup to decide whether to expose tools.
3
+ import { existsSync, writeFileSync, unlinkSync } from "fs";
4
+ import { homedir } from "os";
5
+ import { join } from "path";
6
+ const CONFIG_DIR = join(homedir(), ".cohvu");
7
+ export const PAUSED_FILE = join(CONFIG_DIR, "paused");
8
+ export function isPaused() {
9
+ return existsSync(PAUSED_FILE);
10
+ }
11
+ export function setPaused(paused) {
12
+ if (paused) {
13
+ writeFileSync(PAUSED_FILE, "1", { mode: 0o600 });
14
+ }
15
+ else {
16
+ try {
17
+ unlinkSync(PAUSED_FILE);
18
+ }
19
+ catch {
20
+ // Already gone — that's fine
21
+ }
22
+ }
23
+ }
24
+ //# sourceMappingURL=pause.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pause.js","sourceRoot":"","sources":["../src/pause.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAC9C,sEAAsE;AAEtE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC7C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AAEtD,MAAM,UAAU,QAAQ;IACtB,OAAO,UAAU,CAAC,WAAW,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAe;IACvC,IAAI,MAAM,EAAE,CAAC;QACX,aAAa,CAAC,WAAW,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,IAAI,CAAC;YACH,UAAU,CAAC,WAAW,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;QAC/B,CAAC;IACH,CAAC;AACH,CAAC"}
package/dist/proxy.js CHANGED
@@ -5,6 +5,7 @@
5
5
  // an independent HTTP request.
6
6
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
7
7
  import { getApiKey } from "./auth.js";
8
+ import { isPaused } from "./pause.js";
8
9
  import { refreshInstructions } from "./setup.js";
9
10
  import { DEFAULT_BASE_URL } from "./constants.js";
10
11
  export async function proxy() {
@@ -29,6 +30,37 @@ export async function proxy() {
29
30
  await transport.start();
30
31
  return;
31
32
  }
33
+ // Paused — return a working MCP server with no tools
34
+ if (isPaused()) {
35
+ const transport = new StdioServerTransport();
36
+ const pausedInit = {
37
+ protocolVersion: "2025-03-26",
38
+ capabilities: { tools: {} },
39
+ serverInfo: { name: "cohvu", version: "0.1.0" },
40
+ instructions: "Cohvu is paused. The developer has temporarily disabled Cohvu. Do not attempt to use read or contribute.",
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();
62
+ return;
63
+ }
32
64
  const authHeader = `Bearer ${apiKey}`;
33
65
  // Silently update instruction files
34
66
  refreshInstructions();
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":"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"}
@@ -0,0 +1,15 @@
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 {};
@@ -0,0 +1,206 @@
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 { MARKER_START, MARKER_END } from "./instructions.js";
9
+ // ---------------------------------------------------------------------------
10
+ // MCP config removers
11
+ // ---------------------------------------------------------------------------
12
+ function removeJsonMcpEntry(filePath, rootKey) {
13
+ try {
14
+ if (!existsSync(filePath))
15
+ return "skipped";
16
+ const raw = readFileSync(filePath, "utf-8").trim();
17
+ if (!raw)
18
+ return "skipped";
19
+ let config;
20
+ try {
21
+ config = JSON.parse(raw);
22
+ }
23
+ catch {
24
+ return { failed: "could not parse JSON" };
25
+ }
26
+ const servers = config[rootKey];
27
+ if (!servers || !servers.cohvu)
28
+ return "skipped";
29
+ delete servers.cohvu;
30
+ config[rootKey] = servers;
31
+ writeFileSync(filePath, JSON.stringify(config, null, 2) + "\n");
32
+ return "ok";
33
+ }
34
+ catch (err) {
35
+ return { failed: (err instanceof Error ? err.message : String(err)).slice(0, 60) };
36
+ }
37
+ }
38
+ function removeTomlMcpEntry(filePath) {
39
+ try {
40
+ if (!existsSync(filePath))
41
+ return "skipped";
42
+ const content = readFileSync(filePath, "utf-8");
43
+ if (!content.includes("[mcp_servers.cohvu]"))
44
+ return "skipped";
45
+ const lines = content.split("\n");
46
+ const result = [];
47
+ let skipping = false;
48
+ for (const line of lines) {
49
+ if (line.trim() === "[mcp_servers.cohvu]") {
50
+ skipping = true;
51
+ continue;
52
+ }
53
+ if (skipping && line.trim().startsWith("[")) {
54
+ skipping = false;
55
+ }
56
+ if (!skipping) {
57
+ result.push(line);
58
+ }
59
+ }
60
+ const cleaned = result.join("\n").replace(/\n{3,}/g, "\n\n").trim() + "\n";
61
+ writeFileSync(filePath, cleaned);
62
+ return "ok";
63
+ }
64
+ catch (err) {
65
+ return { failed: (err instanceof Error ? err.message : String(err)).slice(0, 60) };
66
+ }
67
+ }
68
+ // ---------------------------------------------------------------------------
69
+ // Instruction removers
70
+ // ---------------------------------------------------------------------------
71
+ function removeMarkdownInstructions(filePath) {
72
+ try {
73
+ if (!existsSync(filePath))
74
+ return "skipped";
75
+ const content = readFileSync(filePath, "utf-8");
76
+ if (!content.includes(MARKER_START))
77
+ return "skipped";
78
+ const startIdx = content.indexOf(MARKER_START);
79
+ const endIdx = content.indexOf(MARKER_END);
80
+ if (startIdx === -1 || endIdx === -1)
81
+ return "skipped";
82
+ const before = content.slice(0, startIdx).replace(/\n+$/, "");
83
+ const after = content.slice(endIdx + MARKER_END.length).replace(/^\n+/, "");
84
+ const result = before && after
85
+ ? before + "\n\n" + after
86
+ : before || after;
87
+ if (!result.trim()) {
88
+ unlinkSync(filePath);
89
+ }
90
+ else {
91
+ writeFileSync(filePath, result.trimEnd() + "\n");
92
+ }
93
+ return "ok";
94
+ }
95
+ catch (err) {
96
+ return { failed: (err instanceof Error ? err.message : String(err)).slice(0, 60) };
97
+ }
98
+ }
99
+ function removeMdcRule(filePath) {
100
+ try {
101
+ if (!existsSync(filePath))
102
+ return "skipped";
103
+ unlinkSync(filePath);
104
+ return "ok";
105
+ }
106
+ catch (err) {
107
+ return { failed: (err instanceof Error ? err.message : String(err)).slice(0, 60) };
108
+ }
109
+ }
110
+ function removeInstructions(filePath, format) {
111
+ if (format === "mdc")
112
+ return removeMdcRule(filePath);
113
+ return removeMarkdownInstructions(filePath);
114
+ }
115
+ // ---------------------------------------------------------------------------
116
+ // Permissions remover
117
+ // ---------------------------------------------------------------------------
118
+ function removePermissions(filePath) {
119
+ try {
120
+ if (!existsSync(filePath))
121
+ return "skipped";
122
+ const raw = readFileSync(filePath, "utf-8").trim();
123
+ if (!raw)
124
+ return "skipped";
125
+ let config;
126
+ try {
127
+ config = JSON.parse(raw);
128
+ }
129
+ catch {
130
+ return { failed: "could not parse JSON" };
131
+ }
132
+ const permissions = config.permissions;
133
+ if (!permissions)
134
+ return "skipped";
135
+ const allow = Array.isArray(permissions.allow) ? [...permissions.allow] : [];
136
+ const filtered = allow.filter((rule) => !rule.startsWith("mcp__cohvu__"));
137
+ if (filtered.length === allow.length)
138
+ return "skipped";
139
+ permissions.allow = filtered;
140
+ config.permissions = permissions;
141
+ writeFileSync(filePath, JSON.stringify(config, null, 2) + "\n");
142
+ return "ok";
143
+ }
144
+ catch (err) {
145
+ return { failed: (err instanceof Error ? err.message : String(err)).slice(0, 60) };
146
+ }
147
+ }
148
+ // ---------------------------------------------------------------------------
149
+ // Local state
150
+ // ---------------------------------------------------------------------------
151
+ function deleteFile(path) {
152
+ try {
153
+ if (!existsSync(path))
154
+ return false;
155
+ unlinkSync(path);
156
+ return true;
157
+ }
158
+ catch {
159
+ return false;
160
+ }
161
+ }
162
+ // ---------------------------------------------------------------------------
163
+ // Orchestrator
164
+ // ---------------------------------------------------------------------------
165
+ function resolve(relativePath) {
166
+ return join(homedir(), relativePath);
167
+ }
168
+ export async function runTeardown() {
169
+ const detected = detectPlatforms();
170
+ const results = [];
171
+ for (const { def } of detected) {
172
+ const result = {
173
+ name: def.name,
174
+ mcp: null,
175
+ instructions: null,
176
+ permissions: null,
177
+ };
178
+ if (def.mcp) {
179
+ const filePath = resolve(def.mcp.path);
180
+ if (def.mcp.format === "toml") {
181
+ result.mcp = removeTomlMcpEntry(filePath);
182
+ }
183
+ else {
184
+ result.mcp = removeJsonMcpEntry(filePath, def.mcp.rootKey);
185
+ }
186
+ }
187
+ if (def.instructions) {
188
+ const filePath = resolve(def.instructions.path);
189
+ result.instructions = removeInstructions(filePath, def.instructions.format);
190
+ }
191
+ if (def.permissions) {
192
+ const filePath = resolve(def.permissions.path);
193
+ result.permissions = removePermissions(filePath);
194
+ }
195
+ results.push(result);
196
+ }
197
+ // Delete local state
198
+ const home = homedir();
199
+ deleteFile(join(home, ".cohvu", "credentials"));
200
+ deleteFile(join(home, ".cohvu", "paused"));
201
+ return {
202
+ platforms: results,
203
+ credentials: "ok",
204
+ };
205
+ }
206
+ //# sourceMappingURL=teardown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teardown.js","sourceRoot":"","sources":["../src/teardown.ts"],"names":[],"mappings":"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"}