@openeryc/pi-coding-agent 0.75.33 → 0.75.35

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.
Files changed (32) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/core/agent-session.d.ts +2 -0
  3. package/dist/core/agent-session.d.ts.map +1 -1
  4. package/dist/core/agent-session.js +30 -0
  5. package/dist/core/agent-session.js.map +1 -1
  6. package/dist/core/mcp/manager.d.ts.map +1 -1
  7. package/dist/core/mcp/manager.js +5 -1
  8. package/dist/core/mcp/manager.js.map +1 -1
  9. package/dist/core/mcp/types.d.ts +1 -0
  10. package/dist/core/mcp/types.d.ts.map +1 -1
  11. package/dist/core/mcp/types.js.map +1 -1
  12. package/dist/core/settings-manager.d.ts +3 -0
  13. package/dist/core/settings-manager.d.ts.map +1 -1
  14. package/dist/core/settings-manager.js +10 -0
  15. package/dist/core/settings-manager.js.map +1 -1
  16. package/dist/core/system-prompt.d.ts +8 -0
  17. package/dist/core/system-prompt.d.ts.map +1 -1
  18. package/dist/core/system-prompt.js +36 -1
  19. package/dist/core/system-prompt.js.map +1 -1
  20. package/dist/modes/interactive/interactive-mode.d.ts +1 -0
  21. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  22. package/dist/modes/interactive/interactive-mode.js +42 -9
  23. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  24. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  25. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  26. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  27. package/examples/extensions/sandbox/package-lock.json +2 -2
  28. package/examples/extensions/sandbox/package.json +1 -1
  29. package/examples/extensions/with-deps/package-lock.json +2 -2
  30. package/examples/extensions/with-deps/package.json +1 -1
  31. package/npm-shrinkwrap.json +12 -12
  32. package/package.json +4 -4
@@ -2021,6 +2021,12 @@ export class InteractiveMode {
2021
2021
  this.editor.setText("");
2022
2022
  return;
2023
2023
  }
2024
+ if (text.startsWith("/mcp ")) {
2025
+ const name = text.slice(5).trim();
2026
+ this.handleMcpToggle(name);
2027
+ this.editor.setText("");
2028
+ return;
2029
+ }
2024
2030
  if (text === "/usage") {
2025
2031
  this.editor.setText("");
2026
2032
  await this.handleUsageCommand();
@@ -4404,7 +4410,6 @@ export class InteractiveMode {
4404
4410
  const mcpTools = allTools.filter((t) => t.name.startsWith("mcp_"));
4405
4411
  const toolsByServer = new Map();
4406
4412
  for (const tool of mcpTools) {
4407
- // mcp_<server>_<tool> - server name is everything between the first two underscores
4408
4413
  const prefix = "mcp_";
4409
4414
  const rest = tool.name.slice(prefix.length);
4410
4415
  const secondUnderscore = rest.indexOf("_");
@@ -4423,26 +4428,39 @@ export class InteractiveMode {
4423
4428
  this.ui.requestRender();
4424
4429
  return;
4425
4430
  }
4426
- let info = `${theme.bold("MCP Servers")}\n\n`;
4431
+ let info = `${theme.bold("MCP Servers")}\n`;
4432
+ info += `${theme.fg("dim", "Use /mcp <name> to toggle a server on/off")}\n\n`;
4433
+ let idx = 0;
4427
4434
  for (const [serverName, config] of Object.entries(configuredServers)) {
4428
4435
  const tools = toolsByServer.get(serverName) ?? [];
4436
+ const disabled = config.enabled === false;
4429
4437
  const connected = tools.length > 0;
4430
- const status = connected ? theme.fg("success", "connected") : theme.fg("warning", "disconnected");
4438
+ let status;
4439
+ if (disabled) {
4440
+ status = theme.fg("muted", "disabled");
4441
+ }
4442
+ else if (connected) {
4443
+ status = theme.fg("success", "connected");
4444
+ }
4445
+ else {
4446
+ status = theme.fg("warning", "disconnected");
4447
+ }
4448
+ const toggleHint = disabled ? "[/mcp " + serverName + " to enable]" : "[/mcp " + serverName + " to disable]";
4431
4449
  const transport = config.url ? (config.transport ?? "sse") : config.command ? "stdio" : "unknown";
4432
- info += `${theme.bold(serverName)} ${status}\n`;
4433
- info += `${theme.fg("dim", ` Transport: ${transport}`)}\n`;
4450
+ info += `${theme.bold(++idx + ". " + serverName)} ${status} ${theme.fg("dim", toggleHint)}\n`;
4451
+ info += `${theme.fg("dim", ` Transport: ${transport}`)}\n`;
4434
4452
  if (config.command) {
4435
4453
  const cmd = config.args ? `${config.command} ${config.args.join(" ")}` : config.command;
4436
- info += `${theme.fg("dim", ` Command: ${cmd}`)}\n`;
4454
+ info += `${theme.fg("dim", ` Command: ${cmd}`)}\n`;
4437
4455
  }
4438
4456
  if (config.url) {
4439
- info += `${theme.fg("dim", ` URL: ${config.url}`)}\n`;
4457
+ info += `${theme.fg("dim", ` URL: ${config.url}`)}\n`;
4440
4458
  }
4441
4459
  if (connected) {
4442
- info += `${theme.fg("dim", ` Tools: ${tools.length}`)}\n`;
4460
+ info += `${theme.fg("dim", ` Tools: ${tools.length}`)}\n`;
4443
4461
  for (const tool of tools) {
4444
4462
  const desc = tool.description ? ` - ${tool.description.split("\n")[0].slice(0, 80)}` : "";
4445
- info += `${theme.fg("dim", ` ${tool.name}${desc}`)}\n`;
4463
+ info += `${theme.fg("dim", ` ${tool.name}${desc}`)}\n`;
4446
4464
  }
4447
4465
  }
4448
4466
  info += "\n";
@@ -4450,6 +4468,21 @@ export class InteractiveMode {
4450
4468
  this.chatContainer.addChild(new Text(info, 1, 0));
4451
4469
  this.ui.requestRender();
4452
4470
  }
4471
+ async handleMcpToggle(serverName) {
4472
+ const mcpServers = this.settingsManager.getMcpServers();
4473
+ if (!mcpServers || !mcpServers[serverName]) {
4474
+ this.chatContainer.addChild(new Spacer(1));
4475
+ this.chatContainer.addChild(new Text(theme.fg("warning", `MCP server "${serverName}" not found.`), 1, 0));
4476
+ this.ui.requestRender();
4477
+ return;
4478
+ }
4479
+ const currentEnabled = mcpServers[serverName].enabled !== false;
4480
+ this.settingsManager.setMcpServerEnabled(serverName, !currentEnabled);
4481
+ await this.session.reloadMcp();
4482
+ this.chatContainer.addChild(new Spacer(1));
4483
+ this.chatContainer.addChild(new Text(`${theme.bold(serverName)} ${theme.fg(currentEnabled ? "muted" : "success", currentEnabled ? "disabled" : "enabled")}`, 1, 0));
4484
+ this.handleMcpCommand();
4485
+ }
4453
4486
  async handleUsageCommand() {
4454
4487
  this.showStatus("Loading usage stats...");
4455
4488
  this.ui.requestRender();