UNPKG

@gongfu/claude-integration

Version:

Claude Code integration toolkit for Gongfu workflow system

359 lines (274 loc) 8.24 kB
# @gongfu/claude-integration Claude Code 集成工具包,为 Gongfu 工作流系统提供与 Claude Code 的深度集成。 ## 特性 - 🚀 **进程管理**: 使用 node-pty 实现完整的终端控制 - 📊 **活动监控**: 实时监控 Claude Code 的活动和输出 - 🎯 **任务分配**: 向 Claude Code 分配任务并跟踪执行 - 🔄 **双向通信**: 支持向 Claude Code 发送命令和接收输出 - 📡 **SSE 流式传输**: 提供 Server-Sent Events 实时推送 - 🪝 **Hook 系统**: 增强的 Hook 配置支持全面的事件捕获 - 📝 **日志解析**: 智能解析 Claude Code 输出和日志 ## 安装 ```bash npm install @gongfu/claude-integration # 或 pnpm add @gongfu/claude-integration # 或 yarn add @gongfu/claude-integration ``` ## 使用示例 ### 基础使用 ```typescript import { ClaudeController, ClaudeMonitor, ClaudeProcessManager } from '@gongfu/claude-integration'; // 创建控制器 const controller = new ClaudeController({ projectRoot: process.cwd(), logOutput: true }); // 分配任务 const taskId = await controller.assignTask('实现用户登录功能', { priority: 'high' }); // 获取状态 const status = await controller.getStatus(); console.log('Claude 状态:', status); ``` ### 进程管理 ```typescript const processManager = new ClaudeProcessManager({ projectRoot: process.cwd(), usePty: true, captureOutput: true }); // 启动 Claude Code await processManager.start(['--verbose']); // 发送命令 await processManager.sendCommand('help'); // 监听输出 processManager.on('parsed-output', (parsed) => { console.log('解析的输出:', parsed); }); // 停止进程 await processManager.stop(); ``` ### 活动监控 ```typescript const monitor = new ClaudeMonitor({ projectRoot: process.cwd() }); // 启动监控 await monitor.start(); // 监听活动 monitor.on('activity', (activity) => { console.log('Claude 活动:', activity); }); // 启动 SSE 服务器 const server = await monitor.startSSEServer(3001); ``` ### MCP 服务器集成 ```typescript import { ClaudeActivityHandler } from '@gongfu/claude-integration'; import express from 'express'; const app = express(); const handler = new ClaudeActivityHandler(process.cwd()); // 启动处理器 await handler.start(); // 设置 SSE 端点 handler.setupSSEEndpoints(app); // 访问端点: // GET /mcp/claude/stream - SSE 活动流 // GET /mcp/claude/summary - 活动摘要 // GET /mcp/claude/current-task - 当前任务 // POST /mcp/claude/log - 记录活动 ``` ### Hook 配置 ```typescript // 设置增强的 Hook await controller.setupHooks(true); // 这将配置以下 Hook: // - PreToolUse: 工具使用前记录 // - PostToolUse: 工具使用后记录 // - Start: 会话开始记录 // - Stop: 会话结束记录 // - 文件变更自动同步 ``` ## API 文档 ### ClaudeController 管理 Claude Code 实例和任务分配。 ```typescript class ClaudeController extends EventEmitter { constructor(options?: ClaudeControllerOptions); assignTask(taskDescription: string, options?: TaskOptions): Promise<string>; startInBackground(): Promise<void>; getStatus(): Promise<ClaudeStatus>; setupHooks(enhanced?: boolean): Promise<void>; stop(): Promise<void>; } ``` ### ClaudeProcessManager 使用 node-pty 管理 Claude Code 进程。 ```typescript class ClaudeProcessManager extends EventEmitter { constructor(options?: ClaudeProcessOptions); start(args?: string[]): Promise<void>; sendInput(input: string): Promise<void>; sendCommand(command: string): Promise<void>; stop(): Promise<void>; getRecentOutput(lines?: number): ClaudeOutput[]; searchOutput(pattern: string | RegExp): ClaudeOutput[]; getInfo(): ProcessInfo; } ``` ### ClaudeMonitor 监控 Claude Code 活动和日志。 ```typescript class ClaudeMonitor extends EventEmitter { constructor(options?: ClaudeMonitorOptions); start(): Promise<void>; stop(): Promise<void>; startSSEServer(port?: number): Promise<Server>; getActivities(limit?: number): ClaudeActivity[]; getActivitySummary(): ActivitySummary; } ``` ### ClaudeActivityHandler MCP 服务器的 Claude 活动处理器。 ```typescript class ClaudeActivityHandler extends EventEmitter { constructor(projectRoot: string); start(): Promise<void>; stop(): Promise<void>; setupSSEEndpoints(app: express.Application): void; logActivity(type: string, data: any): void; getActivitySummary(): any; getCurrentTask(): Promise<any>; } ``` ## 类型定义 ```typescript interface ClaudeActivity { id: string; timestamp: string; type: 'tool-use' | 'file-change' | 'command' | 'session' | 'thinking' | 'task-update'; data: any; source: 'hook' | 'file' | 'monitor'; } interface ClaudeStatus { isActive: boolean; processId?: number; currentTask?: { id: string; content: string; startedAt: string; }; recentActivity: Activity[]; } interface ClaudeOutput { timestamp: string; type: 'stdout' | 'stderr' | 'system'; content: string; parsed?: any; } ``` ## 事件 ### ClaudeController 事件 - `task-assigned`: 任务被分配时触发 - `tool-use`: 检测到工具使用时触发 - `file-change`: 检测到文件变更时触发 - `thinking`: 检测到思考过程时触发 - `process-exit`: Claude Code 进程退出时触发 ### ClaudeProcessManager 事件 - `started`: 进程启动时触发 - `output`: 收到输出时触发 - `parsed-output`: 输出被解析时触发 - `input`: 发送输入时触发 - `exit`: 进程退出时触发 - `error`: 发生错误时触发 ### ClaudeMonitor 事件 - `activity`: 检测到新活动时触发 - `connected`: SSE 客户端连接时触发 - `disconnected`: SSE 客户端断开时触发 ## 高级用法 ### 自定义输出解析器 ```typescript import { ClaudeOutputParser } from '@gongfu/claude-integration'; class CustomParser extends ClaudeOutputParser { parse(output: string): any { // 自定义解析逻辑 const result = super.parse(output); // 添加自定义模式匹配 if (output.includes('Custom Pattern')) { return { type: 'custom', data: extractCustomData(output) }; } return result; } } ``` ### 集成到 VSCode 扩展 ```typescript import * as vscode from 'vscode'; import { ClaudeController } from '@gongfu/claude-integration'; export function activate(context: vscode.ExtensionContext) { const controller = new ClaudeController({ projectRoot: vscode.workspace.rootPath || process.cwd() }); // 注册命令 const assignTaskCommand = vscode.commands.registerCommand( 'gongfu.assignTaskToClaude', async () => { const task = await vscode.window.showInputBox({ prompt: '输入要分配给 Claude 的任务' }); if (task) { const taskId = await controller.assignTask(task); vscode.window.showInformationMessage(`任务已分配: ${taskId}`); } } ); context.subscriptions.push(assignTaskCommand); } ``` ## 最佳实践 1. **错误处理**: 始终包装异步调用在 try-catch 块中 2. **资源清理**: 确保在应用退出时调用 stop() 方法 3. **日志管理**: 定期清理日志文件以避免磁盘空间问题 4. **性能优化**: 对于大型项目,考虑限制监控的文件范围 5. **安全性**: 谨慎处理 Claude Code 的输出,避免执行不受信任的命令 ## 故障排查 ### Claude Code 无法启动 ```bash # 检查 Claude Code 是否已安装 claude --version # 检查环境变量 echo $PATH # 验证权限 ls -la ~/.claude/ ``` ### 输出捕获失败 如果使用标准 spawn 无法捕获输出,尝试使用 PTY 模式: ```typescript const processManager = new ClaudeProcessManager({ usePty: true, captureOutput: true }); ``` ### SSE 连接问题 确保防火墙允许指定端口的连接,并检查 CORS 设置。 ## 开发计划 - [ ] 支持更多 Claude Code 命令和参数 - [ ] 添加输出的机器学习分析 - [ ] 实现任务队列和并发控制 - [ ] 支持远程 Claude Code 实例 - [ ] 添加 WebSocket 传输支持 - [ ] 实现插件系统 ## 贡献 欢迎贡献!请查看 [贡献指南](../../CONTRIBUTING.md)。 ## 许可证 MIT © Foundation