Skip to content
 
 

Repository files navigation

Claude Traced logo

Claude Traced 🔍

Electron + ACP + OpenTelemetry — 全链路可观测的 Claude Agent 桌面应用

TypeScript Bun React Electron OpenTelemetry


概述

Claude Traced 是一个 Electron 桌面应用,通过 ACP(Agent Client Protocol) 选择并驱动 Claude Code,搭配 Bun Sidecar 实现全链路 OpenTelemetry 可观测性。

核心特性

  • Electron 桌面壳 — 主进程管理窗口生命周期、拉起/回收 Sidecar;Renderer 使用 React
  • ACP 驱动 Claude Code — Renderer 选择 Claude Code(默认),经 Main 进程通过 JSON-RPC 2.0 与之通信
  • 全链路 Trace — Renderer fetch 携带 traceparent,Sidecar 采集 Span,React Flow 可视化工具链
  • 纯 Web 模式 — 保留 dev:web + dev:api 模式,不依赖 Electron 也可调试

效果截图

项目结构

claude-traced/
├── apps/
│   ├── desktop/          # Electron 桌面壳(主进程 + 预加载脚本 + Renderer)
│   ├── web/              # React 渲染层(Electron Renderer / 纯 Web 双模式)
│   └── api/              # Bun 后端 API(Sidecar,由 desktop 主进程拉起)
│
├── packages/
│   ├── shared/           # 跨端类型、常量、工具
│   ├── tracing-claude/   # Claude / GenAI Span 封装(不含 OTEL Provider)
│   ├── tracing-react/    # 前端 Trace Hook / fetch 包装
│   ├── electron-ipc/     # Main ↔ Renderer IPC 通道定义
│   ├── acp-client/       # ACP Client 协议层(JSON-RPC、Session、权限)
│   ├── domain-agent/     # Agent 业务域
│   ├── domain-conversation/  # 会话 / 消息业务域
│   ├── domain-tool/      # Tool 注册与执行业务域
│   └── domain-user/      # 用户 / 鉴权业务域
│
├── docs/                 # 技术文档(00–10)
├── scripts/              # 开发 / 部署 / 打包脚本
├── infra/                # 可观测性基础设施(OTEL Collector、Jaeger/Tempo)
├── electron-builder.yml  # 桌面端打包配置
├── .env.example
├── bunfig.toml
├── package.json
├── tsconfig.base.json
└── README.md

快速开始

# 1. 安装依赖
bun install

# 2. 配置环境变量
cp .env.example .env
# 编辑 .env,设置 ANTHROPIC_API_KEY

# 3. 启动可观测性基础设施(需要 Docker)
docker compose -f infra/docker/docker-compose.observability.yml up -d

# 4. 启动 API Sidecar(单独调试用)
bun run dev:api

# 5. 启动纯 Web 模式(浏览器调试)
bun run dev:web

# 6. 启动 Electron 桌面模式(推荐)
bun run dev:desktop

业务模块与 Trace Span 映射

业务模块 主要 Span 说明
features/chat 触发请求;traceparent 由 tracedFetch 携带
ChatService http.server Bun 入站请求根 Span
ChatService + Claude invoke_agent 单次 Agent 调用
ToolOrchestrator execute_tool 每个 Tool 一次子 Span
claude/client llm_request(可选) 直连 Messages API
claude/subprocess 继承父 Trace 通过 TRACEPARENT 关联 CLI Span
features/tools/graph Span / ToolRun → React Flow 流程图
features/trace/TraceDebugPage Debug 页流程图 Tab
apps/desktop/main 窗口 + Sidecar 生命周期
apps/desktop/preload IPC 桥,Renderer 不直接访问 Node
features/agent/AcpAgentSelector Renderer 选择 Claude Code(ACP)
packages/acp-client ACP JSON-RPC Client
apps/desktop/main/acp ACP Agent stdio 桥 + TRACEPARENT

技术栈

  • 运行时: Bun 1.3
  • 桌面壳: Electron 33
  • 前端: React 19 + Vite 6 + TypeScript 5.7
  • 可视化: @xyflow/react(React Flow)+ dagre 自动布局
  • 协议: ACP(Agent Client Protocol)— JSON-RPC 2.0
  • Agent: @agentclientprotocol/claude-agent-acp → Claude Code
  • 可观测性: OpenTelemetry SDK 1.29(sdk-trace-base)
  • Trace 传播: W3C Trace Context(traceparent)
  • Exporter: OTLP HTTP → OpenTelemetry Collector
  • 可视化: Jaeger / Grafana Tempo

开发

# 类型检查
bun run lint

# 构建所有包
bun run build

# 构建桌面安装包
bun run build:desktop

# 检查环境变量
bun run check:env

# 种子数据
bun run seed

文档

详见 docs/ 目录:

License

MIT

About

Electron + ACP + OpenTelemetry — 全链路可观测的 Claude Agent 桌面应用

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages