Skip to content

Direct-Connect 服务器

src/server/ 包含 3 个文件,实现本地 Direct-Connect 服务器模式。

架构

┌─────────────────────┐
│   SDK 客户端         │
│   (编程接口调用)     │
└────────┬────────────┘
         │ HTTP POST /sessions

┌─────────────────────┐
│ Direct-Connect Server│
│   (本地 HTTP)        │
│ ┌─────────────────┐ │
│ │ Session Manager  │ │
│ │ (WebSocket)      │ │
│ └─────────────────┘ │
└─────────────────────┘

types.ts — 类型定义

typescript
// 连接响应
const connectResponseSchema = z.object({
  session_id: z.string(),
  ws_url: z.string(),
  work_dir: z.string().optional(),
})

// 服务器配置
interface ServerConfig {
  port: number
  host: string
  authToken: string
  unix?: string              // Unix socket 路径
  idleTimeoutMs?: number     // 空闲超时
  maxSessions?: number       // 最大会话数
  workspace?: string         // 默认工作目录
}

// 会话状态
type SessionState =
  | 'starting'
  | 'running'
  | 'detached'
  | 'stopping'
  | 'stopped'

// 会话信息
interface SessionInfo {
  id: string
  status: SessionState
  createdAt: number
  workDir: string
  process: ChildProcess
  sessionKey?: string
}

// 会话索引条目
interface SessionIndexEntry {
  sessionId: string
  transcriptSessionId: string
  cwd: string
  permissionMode?: string
  createdAt: number
  lastActiveAt: number
}

// 会话索引
type SessionIndex = Record<string, SessionIndexEntry>

createDirectConnectSession.ts — 会话创建

createDirectConnectSessionsrc/server/createDirectConnectSession.ts)创建 Direct-Connect 会话。

主要流程:

  1. HTTP POST 到 /sessions 端点
  2. 验证响应(失败时抛出 DirectConnectError
  3. 解析 connectResponseSchema 响应,返回 { config, workDir }

参数包括 serverUrlauthToken(可选)、cwddangerouslySkipPermissions

directConnectManager.ts — 会话管理器

DirectConnectSessionManagersrc/server/directConnectManager.ts)管理与 Direct-Connect 服务器的 WebSocket 连接。

内部使用 jsonParse 解析、isStdoutMessage 检查和逐行 NDJSON 解析。

主要功能:

  • 连接:建立 WebSocket 连接并路由消息
  • 发送消息:发送用户消息
  • 权限响应:回复权限请求
  • 中断:发送中断信号

回调接口包括 onMessageonPermissionRequestonConnectedonDisconnectedonError

使用场景

场景说明
SDK 集成其他应用通过 HTTP/WS 调用 Claude Code
远程开发SSH 环境中运行 Claude Code 服务器
多会话同时管理多个独立会话
无头模式不需要终端 UI 的自动化场景