Skip to main content
Glama
masx200

Persistent Terminal MCP Server

by masx200
quick-start-spinner.md5.09 kB
# Spinner 压缩功能快速入门 ## 问题场景 当你运行 `npm create vite@latest` 或 `npm install` 时,终端会输出大量的 spinner 动画: ``` ⠋ Installing dependencies ⠙ Installing dependencies ⠹ Installing dependencies ⠸ Installing dependencies ⠼ Installing dependencies ⠴ Installing dependencies ⠦ Installing dependencies ⠧ Installing dependencies ⠇ Installing dependencies ⠏ Installing dependencies ``` 这些动画帧会占据大量的输出缓冲区,导致: - 真实的日志信息被淹没 - 缓冲区快速填满 - AI 模型消耗大量无用的 token - 难以找到关键信息 ## 解决方案 Persistent Terminal 自动检测并压缩这些 spinner 动画,只保留最后的状态或压缩表示。 ## 快速开始 ### 1. 默认配置(推荐) 默认情况下,spinner 压缩已启用,无需任何配置: ```typescript import { TerminalManager } from "persistent-terminal-mcp"; const manager = new TerminalManager(); const terminalId = await manager.createTerminal(); // 运行会产生 spinner 的命令 await manager.writeToTerminal({ terminalId, input: "npm install", }); // 等待完成 await sleep(5000); // 读取输出 - spinner 已被压缩 const result = await manager.readFromTerminal({ terminalId }); console.log(result.output); ``` ### 2. 自定义配置 如果需要调整压缩行为: ```typescript const manager = new TerminalManager({ compactAnimations: true, // 启用压缩(默认) animationThrottleMs: 100, // 节流时间 100ms(默认) }); ``` ### 3. 环境变量配置 在 `mcp-config.toml` 中配置: ```toml [mcp_servers.persistent-terminal.env] COMPACT_ANIMATIONS = "true" ANIMATION_THROTTLE_MS = "100" ``` ### 4. 禁用压缩 如果你需要看到完整的动画输出: ```typescript // 方式 1: 创建时禁用 const manager = new TerminalManager({ compactAnimations: false, }); // 方式 2: 运行时禁用 const outputBuffer = manager.getOutputBuffer(terminalId); outputBuffer.setCompactAnimations(false); // 方式 3: 环境变量 // COMPACT_ANIMATIONS=false ``` ## 效果对比 ### 未压缩(原始输出) ``` ⠋ Installing dependencies ⠙ Installing dependencies ⠹ Installing dependencies ⠸ Installing dependencies ⠼ Installing dependencies ⠴ Installing dependencies ⠦ Installing dependencies ⠧ Installing dependencies ⠇ Installing dependencies ⠏ Installing dependencies ✓ Dependencies installed ``` **行数**: 11 行 **Token 估算**: ~50 tokens ### 已压缩(优化输出) ``` ⠏ Installing dependencies ✓ Dependencies installed ``` 或者: ``` [spinner ×10] ✓ Dependencies installed ``` **行数**: 2 行 **Token 估算**: ~10 tokens **节省**: 80% 的行数和 token ## 常见场景 ### npm/yarn/pnpm 安装 ```bash npm install yarn install pnpm install ``` ✅ 自动压缩 spinner ✅ 保留安装日志 ✅ 保留错误信息 ### 构建工具 ```bash npm run build vite build webpack ``` ✅ 压缩构建进度 ✅ 保留构建输出 ✅ 保留警告和错误 ### 长时间运行的任务 ```bash npm create vite@latest npx create-react-app my-app ``` ✅ 压缩初始化动画 ✅ 保留用户交互提示 ✅ 保留最终结果 ## 验证效果 运行测试脚本查看效果: ```bash # 运行演示 npm run example:spinner # 运行测试 npm run test:spinner ``` ## 调优建议 ### 场景 1: 快速命令 对于执行时间 < 1 秒的命令,可以禁用压缩: ```typescript outputBuffer.setCompactAnimations(false); await runQuickCommand(); outputBuffer.setCompactAnimations(true); ``` ### 场景 2: 长时间任务 对于执行时间 > 1 分钟的任务,可以增加节流时间: ```typescript const manager = new TerminalManager({ compactAnimations: true, animationThrottleMs: 200, // 增加到 200ms }); ``` ### 场景 3: 调试模式 调试时可能需要看到完整输出: ```typescript if (process.env.DEBUG) { manager = new TerminalManager({ compactAnimations: false, }); } ``` ## 故障排除 ### 问题: 重要信息被压缩了 **原因**: 某些日志包含 spinner 字符但不是动画 **解决**: ```typescript // 临时禁用压缩 outputBuffer.setCompactAnimations(false); ``` ### 问题: 压缩效果不明显 **原因**: 节流时间太短 **解决**: ```typescript const manager = new TerminalManager({ animationThrottleMs: 200, // 增加节流时间 }); ``` ### 问题: 动画看起来卡顿 **原因**: 节流时间太长 **解决**: ```typescript const manager = new TerminalManager({ animationThrottleMs: 50, // 减少节流时间 }); ``` ## 下一步 - 阅读[完整文档](spinner-compaction.md)了解更多细节 - 查看[测试用例](../../src/__tests__/spinner-detection.test.ts)了解实现 - 运行[演示脚本](../../src/examples/test-spinner-compaction.ts)查看效果 ## 相关链接 - [Spinner Compaction 完整指南](spinner-compaction.md) - [OutputBuffer API 文档](../reference/output-buffer.md) - [TerminalManager API 文档](../reference/terminal-manager.md)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/masx200/persistent-terminal-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server