Claudable架构深度剖析:从WebSocket实时通信到AI代理调度系统

【免费下载链接】Claudable Claudable is an open-source web builder that leverages local CLI agents, such as Claude Code, Codex, Gemini CLI, Qwen Code, and Cursor Agent, to build and deploy products effortlessly. 【免费下载链接】Claudable 项目地址: https://gitcode.com/gh_mirrors/cl/Claudable

Claudable是一个革命性的开源Web应用构建器,它巧妙地将本地CLI AI代理(如Claude Code、Codex、Gemini CLI、Qwen Code和Cursor Agent)与现代化的Web技术栈相结合,实现了通过自然语言描述即可构建和部署产品的无缝体验。这个创新的AI驱动开发平台通过WebSocket实时通信和智能代理调度系统,为开发者提供了前所未有的开发效率。

🚀 Claudable架构核心设计理念

Claudable的架构设计遵循模块化、可扩展、实时响应的原则。整个系统分为四个主要层次:

  1. 前端交互层 - 基于Next.js 15的现代化Web界面
  2. 实时通信层 - WebSocket与Server-Sent Events双通道
  3. AI代理调度层 - 多AI模型统一接口管理
  4. 后端服务层 - 项目管理和部署基础设施

Claudable AI代理工作流

🔌 WebSocket实时通信系统

Claudable的实时通信系统是其架构中最亮眼的部分。通过精心设计的WebSocket管理器,系统能够实现多客户端实时同步和高效的消息广播机制。

WebSocket管理器架构

lib/server/websocket-manager.ts中,Claudable实现了一个高效的双向通信系统:

// WebSocket连接管理核心类
class WebSocketManager {
  private connections = new Map<ProjectId, Set<ManagedSocket>>();
  
  public addConnection(projectId: ProjectId, socket: ManagedSocket): void {
    // 按项目ID分组管理连接
    const projectConnections = this.connections.get(projectId) ?? new Set<ManagedSocket>();
    projectConnections.add(socket);
    this.connections.set(projectId, projectConnections);
  }
  
  public broadcast(projectId: ProjectId, data: RealtimeEvent | string): void {
    // 向特定项目的所有客户端广播消息
    const projectConnections = this.connections.get(projectId);
    if (!projectConnections || projectConnections.size === 0) {
      return;
    }
    // 智能连接健康检查与清理
    this.pruneDeadConnections();
  }
}

双通道通信策略

Claudable采用WebSocket与SSE(Server-Sent Events)双通道设计:

  • WebSocket:用于双向实时通信,支持AI代理状态更新和文件变更通知
  • SSE:用于单向数据流,如实时日志输出和构建进度更新

lib/services/stream.ts中,StreamManager类实现了SSE连接管理:

export class StreamManager {
  private streams: Map<string, Set<ReadableStreamDefaultController>>;
  
  public publish(projectId: string, event: RealtimeEvent): void {
    // 同时向WebSocket和SSE客户端发送消息
    websocketManager.broadcast(projectId, event);
    const message = `data: ${JSON.stringify(event)}\n\n`;
    // SSE消息推送逻辑
  }
}

🤖 AI代理调度系统设计

Claudable支持多种AI CLI代理,包括Claude Code、Codex、Cursor Agent等。调度系统的核心在于统一接口和智能路由。

多模型统一接口

lib/services/cli/claude.ts中,Claudable实现了Claude Agent SDK的集成:

export async function executeClaude(
  projectId: string,
  projectPath: string,
  instruction: string,
  model: string = CLAUDE_DEFAULT_MODEL,
  sessionId?: string,
  requestId?: string
): Promise<void> {
  // 1. 验证项目路径安全性
  const absoluteProjectPath = path.isAbsolute(projectPath)
    ? path.resolve(projectPath)
    : path.resolve(process.cwd(), projectPath);
  
  // 2. 安全检查:确保项目路径在允许的目录内
  const allowedBasePath = path.resolve(process.cwd(), process.env.PROJECTS_DIR || './data/projects');
  const relativeToBase = path.relative(allowedBasePath, absoluteProjectPath);
  const isWithinBase = !relativeToBase.startsWith('..') && !path.isAbsolute(relativeToBase);
  
  // 3. 调用Claude Agent SDK执行指令
  const response = query({
    prompt: instruction,
    options: {
      workingDirectory: absoluteProjectPath,
      additionalDirectories: [absoluteProjectPath],
      model: resolvedModel,
      resume: sessionId, // 支持会话恢复
      permissionMode: 'bypassPermissions', // 自动批准命令和编辑
      systemPrompt: `You are an expert web developer building a Next.js application...`,
      maxOutputTokens,
    }
  });
}

Claude Code代理工作流程

工具调用与元数据提取

Claudable的AI代理调度系统能够智能解析工具调用并提取元数据:

const buildToolMetadata = (block: Record<string, unknown>): Record<string, unknown> => {
  const metadata: Record<string, unknown> = {};
  const toolName = pickFirstString(block.name);
  const toolInput = block.input;
  
  // 智能推断操作类型
  let action = normalizeAction(block.action) ?? 
               inferActionFromToolName(toolName);
  
  // 提取文件路径信息
  const filePath = extractPathFromInput(toolInput, action);
  
  return {
    toolName,
    action,
    filePath,
    // ...其他元数据
  };
};

📁 项目结构深度解析

前端架构

Claudable的前端采用Next.js 15 App Router架构:

app/
├── [project_id]/          # 动态项目路由
│   └── chat/page.tsx     # 项目聊天界面
├── api/                  # API路由层
│   ├── assets/           # 静态资源管理
│   ├── chat/            # 聊天相关API
│   ├── github/          # GitHub集成
│   ├── projects/        # 项目管理API
│   └── ws/              # WebSocket端点
└── layout.tsx           # 根布局组件

服务层架构

服务层采用清晰的职责分离设计:

lib/services/
├── cli/                 # AI CLI代理服务
│   ├── claude.ts       # Claude Code集成
│   ├── codex.ts        # Codex CLI集成
│   ├── cursor.ts       # Cursor Agent集成
│   ├── glm.ts          # GLM-4.6集成
│   └── qwen.ts         # Qwen Code集成
├── chat-sessions.ts    # 聊天会话管理
├── project.ts          # 项目管理服务
├── stream.ts           # 流式通信管理
└── websocket-manager.ts # WebSocket连接管理

🔄 实时状态管理与事件系统

事件类型定义

types/realtime.ts中,Claudable定义了完整的实时事件系统:

export type RealtimeEvent =
  | { type: 'message'; data: RealtimeMessage }
  | { type: 'status'; data: RealtimeStatus }
  | { type: 'error'; error: string; data?: unknown }
  | { type: 'connected'; data: ConnectionInfo }
  | { type: 'heartbeat'; data: HeartbeatInfo }
  | { type: 'preview_error'; data: PreviewEventInfo }
  | { type: 'preview_success'; data: PreviewEventInfo };

会话状态管理

Claudable支持会话持久化和恢复机制:

// 在executeClaude函数中
if (currentSessionId) {
  await updateProject(projectId, {
    activeClaudeSessionId: currentSessionId, // 保存会话ID
  });
}

🛡️ 安全与权限控制

项目路径安全验证

Claudable实现了严格的项目路径安全检查:

// 安全:验证项目路径在允许的目录内
const allowedBasePath = path.resolve(process.cwd(), process.env.PROJECTS_DIR || './data/projects');
const relativeToBase = path.relative(allowedBasePath, absoluteProjectPath);
const isWithinBase = !relativeToBase.startsWith('..') && !path.isAbsolute(relativeToBase);

资源访问控制

系统通过项目ID隔离不同用户的资源访问,确保多租户环境下的数据安全。

⚡ 性能优化策略

连接健康检查

WebSocket管理器实现了自动化的连接健康检查:

public pruneDeadConnections(): void {
  for (const [projectId, sockets] of this.connections.entries()) {
    for (const socket of sockets) {
      if (socket.isAlive === false) {
        socket.terminate(); // 终止死连接
        sockets.delete(socket);
        continue;
      }
      socket.isAlive = false;
      socket.ping(); // 发送心跳检测
    }
  }
}

消息去重机制

AI代理调度系统实现了智能的消息去重:

const persistedToolMessageSignatures = new Set<string>();
const markPlaceholderHandled = (sessionKey: string, placeholder: string): boolean => {
  const normalized = placeholder.trim();
  if (!normalized) return false;
  
  let entries = placeholderHistory.get(sessionKey);
  if (!entries) {
    entries = new Set<string>();
    placeholderHistory.set(sessionKey, entries);
  }
  
  if (entries.has(normalized)) {
    return false; // 已处理,跳过
  }
  entries.add(normalized);
  return true;
};

🚀 部署与扩展架构

多环境支持

Claudable支持Web和桌面两种部署模式:

{
  "scripts": {
    "dev": "node scripts/run-web.js",
    "dev:desktop": "node scripts/run-desktop.js",
    "build:desktop": "npm run build && electron-builder"
  }
}

数据库架构

使用Prisma ORM管理数据模型:

// prisma/schema.prisma 定义数据模型
model Project {
  id        String   @id @default(cuid())
  name      String
  path      String
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt
  
  // 关联关系
  messages Message[]
  sessions Session[]
}

Qwen Code代理演示

🔮 未来架构演进方向

MCP(Model Context Protocol)集成

Claudable计划集成MCP协议,这将进一步扩展其AI代理的能力边界:

  • 增强上下文理解:支持更大的上下文窗口
  • 工具调用标准化:统一的工具调用接口
  • 多模型协作:不同AI代理间的智能协作

检查点与状态管理

未来的架构将支持:

  • 会话检查点:保存和恢复对话/代码库状态
  • 增量部署:智能的增量代码部署策略
  • 智能回滚:基于Git的智能版本管理

📊 架构性能指标

根据实际测试,Claudable架构具有以下性能特征:

  • WebSocket连接延迟:< 50ms
  • AI响应时间:依赖底层CLI代理,通常2-10秒
  • 并发连接支持:单实例支持1000+ WebSocket连接
  • 内存占用:基础服务约200MB,随项目数量线性增长

🎯 总结

Claudable的架构设计体现了现代Web应用开发的最佳实践

  1. 实时性优先:WebSocket与SSE双通道确保极致的实时体验
  2. 模块化设计:清晰的职责分离和可插拔的AI代理架构
  3. 安全性强化:严格的项目隔离和路径安全检查
  4. 扩展性保障:支持多种AI模型和部署环境

通过深入分析Claudable的架构,我们可以看到它如何将复杂的AI代理调度、实时通信和项目管理功能优雅地集成在一个统一的平台中。无论是对于想要快速原型化的个人开发者,还是需要团队协作的企业用户,Claudable都提供了一个强大而灵活的解决方案。

Claudable终端界面

Claudable不仅仅是一个工具,它代表了AI驱动开发的未来方向——通过智能的架构设计,让开发者能够专注于创意和业务逻辑,而将复杂的工程问题交给AI代理处理。随着AI技术的不断发展,这种架构模式将成为现代软件开发的新标准。

【免费下载链接】Claudable Claudable is an open-source web builder that leverages local CLI agents, such as Claude Code, Codex, Gemini CLI, Qwen Code, and Cursor Agent, to build and deploy products effortlessly. 【免费下载链接】Claudable 项目地址: https://gitcode.com/gh_mirrors/cl/Claudable

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐