跳至主要内容

Workspace Runtime

概覽

Workspace Runtime 是運行在每個開發工作區容器內的服務,提供 Agent 執行整合、OpenSpec CLI 能力、檔案監控、系統監控和 WebSocket 通訊等功能。目前以 Claude Code 的整合最完整。

核心功能

Agent 執行整合

  • 設定管理:Agent 設定的讀取與更新,目前以 Claude Code 最完整
  • Hooks 管理:自訂 hooks 設定與管理
  • MCP 整合:MCP 伺服器設定管理
  • 子代理管理:Claude Code 子代理設定
  • 斜線命令:自訂斜線命令管理
  • OpenSpec CLI:提供 workspace 內建的 OpenSpec workflow 基礎能力

檔案系統管理

  • 即時監控:使用 Watchdog 監控檔案變更
  • 同步通知:透過 WebSocket 推送檔案變更事件
  • 版本控制:Git 整合和操作
  • 智慧忽略:自動忽略 node_modules.git__pycache__

系統監控

  • 資源監控:CPU、記憶體、磁碟使用率(psutil)
  • 程序管理:開發程序生命週期管理
  • 效能指標:系統效能指標收集

WebSocket 通訊

  • 即時雙向通訊:與前端的即時通訊
  • 事件廣播:Agent Session 事件推送
  • 心跳機制:連線狀態維護

技術架構

元件技術
Web 框架FastAPI
即時通訊WebSockets
檔案監控Watchdog
系統監控psutil
AI 客戶端Anthropic SDK / 多 Agent CLI 整合
版本控制GitPython

Image Variants

Workspace Runtime 支援兩種 base image flavor:

Flavor適用場景說明
lite預設的 agent workspace保留 agent CLI、Python、Node.js、Git、Docker CLI、常用 shell 工具與 OpenSpec CLI,適合平台預設工作區
codex需要完整多語言工具鏈的 workspace使用 codex-universal base,包含更完整的語言 runtime 與開發工具,映像較大

base-lite 會包含平台執行所需的基本工具:

  • Shell 與建置工具:bashbuild-essentialmakepkg-config
  • 版本控制與檔案工具:gitgit-lfsripgrepfdrsync
  • 語言與套件基礎:Python 3、Node.js、pnpmuv
  • 系統工具:curlwgetjqsudoopenssh-client

base-lite 不包含 Java runtime / JDK,也不包含 Go compiler 或 /usr/local/go。Java 或完整多語言開發需求應使用 codex flavor。

terminal-service 是 Go binary,但 Go toolchain 不會進入 runtime image。workspace-runtime/Dockerfile 會在獨立的 golang:1.23 builder stage 編譯 binary,再把 /opt/terminal-service/bin/terminal-service 複製到 developmentproduction image。

本機建置預設使用 lite

make build-runtime-base
make build-workspace-runtime

需要切換到 codex-universal base 時,明確指定 RUNTIME_BASE=universal

RUNTIME_BASE=universal make build-runtime-base
RUNTIME_BASE=universal make build-workspace-runtime

目錄結構

workspace-runtime/
├── app/
│ ├── config/ # 配置模組
│ ├── core/ # 核心功能
│ ├── database/ # 資料庫連線
│ ├── middleware/ # 中間件
│ ├── models/ # 資料模型
│ ├── modules/ # 功能模組(主要路由)
│ ├── routers/ # 共用路由
│ ├── services/ # 業務邏輯
│ ├── translations/ # 多語系資源
│ └── utils/ # 工具函數
├── scripts/ # 啟動腳本
├── tests/
├── pyproject.toml
└── Dockerfile

環境變數

變數名預設值說明
WORKSPACE_IDdefault工作區識別碼
WORKSPACE_PATH/workspace工作區路徑
MANAGER_URLWorkspace Manager URL
MONITOR_INTERVAL5系統監控間隔(秒)
Agent Credentials

目前最常見的是透過前端「環境變數」設定頁面動態注入 Claude API Key。隨著更多 agent 整合補齊,其他執行器所需憑證也應採用相同方式注入,不應寫死在容器環境變數中。

WebSocket 事件

連接 WebSocket:

const ws = new WebSocket('ws://localhost:3002/api/v1/ws');

ws.onmessage = (event) => {
const data = JSON.parse(event.data);
switch (data.type) {
case 'file_changed':
console.log('檔案變更:', data.path);
break;
case 'system_stats':
console.log('系統狀態:', data.stats);
break;
case 'agent_output':
console.log('Agent 輸出:', data.content);
break;
}
};

本地開發

docker compose up -d workspace-runtime

workspace-runtime 的本地開發也應以 Docker Compose 為主,並與整體平台服務一起運作。Compose 會將 ./workspace-runtime 掛載到容器內的 /workspace-runtime,因此程式碼調整通常能透過既有 reload 機制直接反映。

若需要驗證完整 agent workflow、WebSocket、檔案監控與其他跨服務行為,建議直接啟動完整 stack:

docker compose up -d

測試

# 執行所有測試
pytest

# 執行特定測試
pytest tests/test_file_watcher.py -v
pytest tests/test_websocket.py -v
pytest tests/test_system_monitor.py -v

監控指標

系統指標

  • CPU 使用率(即時百分比)
  • 記憶體使用量與可用量
  • 磁碟空間使用情況
  • 網路 I/O 統計

應用指標

  • 檔案變更次數
  • WebSocket 活躍連線數
  • 錯誤率

API 端點

端點說明
GET /health健康檢查
GET /api/v1/files/*檔案管理
GET /api/v1/settingsClaude Code 設定
PUT /api/v1/settings更新 Claude Code 設定
GET /api/v1/scriptsClaude Code 腳本
POST /api/v1/agent-sessions建立 Agent Session
GET /api/v1/agent-sessions/{id}查詢 Session 狀態
WS /api/v1/ws/agent-sessions/{id}Agent Session WebSocket
GET /api/v1/workspaces/{workspace_id}/openspec取得 OpenSpec workspace 狀態與 actions
WS /api/v1/ws通用 WebSocket