|
|
… |
273 unchanged lines |
| 274 |
274 |
|
return; |
| 275 |
275 |
|
} |
| 276 |
276 |
|
const cwd = folder()?.uri.fsPath; |
|
277 |
+ |
// One entry per client for every folder (spectra mcp --auto): the shim |
|
278 |
+ |
// speaks for the agent of whichever folder a session starts in. |
|
279 |
+ |
const auto = ["mcp", "--auto", "--kind", kind]; |
| 277 |
280 |
|
try { |
| 278 |
|
- |
if (kind === "claude-code" || kind === "kimi-code") { |
| 279 |
|
- |
const name = kind === "claude-code" ? "claude" : "kimi"; |
| 280 |
|
- |
const tool = cli.program(name); |
| 281 |
|
- |
if (!tool) throw new Error(`${name} was not found on PATH or in ~/.local/bin`); |
|
281 |
+ |
if (kind === "claude-code") { |
|
282 |
+ |
const tool = cli.program("claude"); |
|
283 |
+ |
if (!tool) throw new Error("claude was not found on PATH or in ~/.local/bin"); |
|
284 |
+ |
const list = await new Promise<string>((resolve) => cp.execFile(tool, ["mcp", "get", "spectra"], { cwd }, (_e, out) => resolve(String(out)))); |
|
285 |
+ |
if (!list.includes("--auto")) { |
|
286 |
+ |
await new Promise<void>((resolve) => cp.execFile(tool, ["mcp", "remove", "--scope", "user", "spectra"], () => resolve())); |
|
287 |
+ |
await new Promise<void>((resolve, reject) => |
|
288 |
+ |
cp.execFile(tool, ["mcp", "add", "--scope", "user", "spectra", "--", bin, ...auto], (err, _o, stderr) => (err ? reject(new Error(stderr.trim() || err.message)) : resolve())), |
|
289 |
+ |
); |
|
290 |
+ |
} |
|
291 |
+ |
// A per-folder entry would override the shared one: remove it. |
|
292 |
+ |
await new Promise<void>((resolve) => cp.execFile(tool, ["mcp", "remove", "--scope", "local", "spectra"], { cwd }, () => resolve())); |
|
293 |
+ |
void vscode.window.showInformationMessage(`Claude Code connects to Spectra as ${agent} in this folder. Start a new Claude Code session here to pick it up: one already open does not get it.`); |
|
294 |
+ |
} else if (kind === "kimi-code") { |
|
295 |
+ |
const tool = cli.program("kimi"); |
|
296 |
+ |
if (!tool) throw new Error("kimi was not found on PATH or in ~/.local/bin"); |
| 282 |
297 |
|
await new Promise<void>((resolve) => cp.execFile(tool, ["mcp", "remove", "spectra"], { cwd }, () => resolve())); |
| 283 |
298 |
|
await new Promise<void>((resolve, reject) => |
| 284 |
|
- |
cp.execFile(tool, ["mcp", "add", "spectra", "--", bin, ...args], { cwd }, (err, _o, stderr) => (err ? reject(new Error(stderr.trim() || err.message)) : resolve())), |
|
299 |
+ |
cp.execFile(tool, ["mcp", "add", "spectra", "--", bin, ...auto], { cwd }, (err, _o, stderr) => (err ? reject(new Error(stderr.trim() || err.message)) : resolve())), |
| 285 |
300 |
|
); |
| 286 |
|
- |
void vscode.window.showInformationMessage(`${which} in this folder now connects to Spectra as ${agent}. Start a new ${which} session here to pick it up: one already open does not get it.`); |
|
301 |
+ |
void vscode.window.showInformationMessage(`Kimi Code connects to Spectra as ${agent} in this folder: start a new session here to pick it up.`); |
| 287 |
302 |
|
} else if (kind === "antigravity") { |
| 288 |
303 |
|
const file = path.join(os.homedir(), ".gemini", "config", "mcp_config.json"); |
| 289 |
304 |
|
const before = fs.existsSync(file) ? fs.readFileSync(file, "utf8") : ""; |
| 290 |
305 |
|
if (before) fs.copyFileSync(file, file + ".bak"); |
| 291 |
306 |
|
fs.mkdirSync(path.dirname(file), { recursive: true }); |
| 292 |
|
- |
fs.writeFileSync(file, mergeMcpConfig(before, bin, args)); |
| 293 |
|
- |
void vscode.window.showInformationMessage(`Antigravity now connects to Spectra as ${agent} (${file}${before ? ", previous copy kept as .bak" : ""}): restart it to pick it up.`); |
|
307 |
+ |
fs.writeFileSync(file, mergeMcpConfig(before, bin, auto)); |
|
308 |
+ |
void vscode.window.showInformationMessage(`Antigravity connects to Spectra as ${agent} in this folder (${file}${before ? ", previous copy kept as .bak" : ""}): restart it to pick it up.`); |
| 294 |
309 |
|
} else { |
| 295 |
310 |
|
await vscode.env.clipboard.writeText(line); |
| 296 |
311 |
|
void vscode.window.showInformationMessage(`Copied the command for ${which}'s MCP settings: ${line}`); |
|
|
… |
19 unchanged lines |