7418andClaude Opus 4.6 6ad821d3af feat: 多 IM 远程桥接系统 + Bridge 一级导航 + bug 修复
**Bridge 系统核心(src/lib/bridge/)**
- bridge-manager: 生命周期编排、adapter 事件循环、会话级并发控制
- channel-adapter: 抽象基类 + 注册式 adapter 工厂
- channel-router: IM 地址 → CodePilot session 自动映射
- conversation-engine: 服务端消费 streamClaude() SSE 流
- permission-broker: 权限请求转发到 IM 内联按钮
- delivery-layer: 出站分片、限流、重试退避、HTML 降级
- telegram-adapter: Telegram 长轮询 + offset 安全水位 + 幂等去重
- security/: 路径校验、危险输入检测、滑动窗口限流

**Telegram 通知 Bot(src/lib/telegram-bot.ts)**
- 独立通知模式,与 bridge 模式互斥
- bridgeModeActive 使用 globalThis 存储,避免 HMR 重置导致轮询冲突

**API 路由**
- /api/bridge: GET 状态查询 + POST start/stop/auto-start
- /api/bridge/channels: 活跃通道列表
- /api/bridge/settings: bridge 设置读写
- /api/settings/telegram: 凭据管理(含 allowed_users 白名单)
- /api/settings/telegram/verify: 连接验证 + chat ID 自动检测

**UI 重构:Bridge 提升为一级导航**
- NavRail 新增 Bridge 图标导航项
- /bridge 页面:BridgeLayout hash 路由,Bridge + Telegram 两个子 tab
- BridgeSection: 总开关、状态、启停、通道开关、适配器状态、默认设置
- TelegramBridgeSection: 凭据配置 + 白名单 + Setup Guide(6 步)
- Settings 移除 Telegram 和 Bridge tab,只保留 4 个核心 tab

**Bug 修复**
- bridge-manager: runAdapterLoop 在 state.running=true 之前被调用,
  while 条件同步求值为 false 导致消费者循环不启动。修复为先设 running
  再启动 loop
- telegram-bot: bridgeModeActive 改用 globalThis 防止 HMR 丢失状态
- settings/telegram route: TELEGRAM_KEYS 补充 telegram_bridge_allowed_users

**Electron**
- 窗口关闭时 bridge 活跃则最小化到系统托盘而非退出
- 启动时通过 auto-start API 恢复桥接
- preload 暴露 bridge 相关 IPC

**文档**
- docs/bridge-system.md: 完整架构文档
- docs/chat-sdk-integration-feasibility.md: Chat SDK 集成调研
- CLAUDE.md 添加 bridge 文档链接

chore: bump v0.21.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 00:18:19 +08:00

CodePilot CodePilot

A desktop GUI client for Claude Code -- chat, code, and manage projects through a polished visual interface instead of the terminal.

GitHub release Platform License

中文文档 | 日本語

Join the Community / 加入用户群

WeChat Group QR Code

Scan the QR code to join the WeChat user group for discussions, feedback, and updates.


Features

  • Conversational coding -- Stream responses from Claude in real time with full Markdown rendering, syntax-highlighted code blocks, and tool-call visualization.
  • Session management -- Create, rename, archive, and resume chat sessions. Conversations are persisted locally in SQLite so nothing is lost between restarts.
  • Project-aware context -- Pick a working directory per session. The right panel shows a live file tree and file previews so you always know what Claude is looking at.
  • Resizable panels -- Drag the edges of the chat list and right panel to adjust their width. Your preferred sizes are saved across sessions.
  • File & image attachments -- Attach files and images directly in the chat input. Images are sent as multimodal vision content for Claude to analyze.
  • Permission controls -- Approve, deny, or auto-allow tool use on a per-action basis. Choose between permission modes to match your comfort level.
  • Multiple interaction modes -- Switch between Code, Plan, and Ask modes to control how Claude behaves in each session.
  • Model selector -- Switch between Claude models (Opus, Sonnet, Haiku) mid-conversation.
  • MCP server management -- Add, configure, and remove Model Context Protocol servers directly from the Extensions page. Supports stdio, sse, and http transport types.
  • Custom skills -- Define reusable prompt-based skills (global or per-project) that can be invoked as slash commands during chat.
  • Settings editor -- Visual and JSON editors for your ~/.claude/settings.json, including permissions and environment variables.
  • Token usage tracking -- See input/output token counts and estimated cost after every assistant response.
  • Auto update check -- The app periodically checks for new releases and notifies you when an update is available.
  • Dark / Light theme -- One-click theme toggle in the navigation rail.
  • Slash commands -- Built-in commands like /help, /clear, /cost, /compact, /doctor, /review, and more.
  • Electron packaging -- Ships as a desktop app with a hidden title bar, bundled Next.js server, graceful shutdown, and automatic port allocation.

Screenshots

CodePilot


Prerequisites

Important

: CodePilot calls the Claude Code Agent SDK under the hood. Make sure claude is available on your PATH and that you have authenticated (claude login) before launching the app.

Requirement Minimum version
Node.js 18+
Claude Code CLI Installed and authenticated (claude --version should work)
npm 9+ (ships with Node 18)

Download

Pre-built releases are available on the Releases page. Releases are built automatically via GitHub Actions for all platforms.

Supported Platforms

  • macOS -- arm64 (Apple Silicon) and x64 (Intel) distributed as .dmg
  • Windows -- NSIS installer (.exe) bundling x64 + arm64
  • Linux -- x64 and arm64 distributed as .AppImage, .deb, and .rpm

Quick Start

# Clone the repository
git clone https://github.com/op7418/CodePilot.git
cd CodePilot

# Install dependencies
npm install

# Start in development mode (browser)
npm run dev

# -- or start the full Electron app in dev mode --
node scripts/build-electron.mjs   # compile Electron main process (first time only)
npm run electron:dev

Then open http://localhost:3000 (browser mode) or wait for the Electron window to appear.


Installation Troubleshooting

CodePilot is not code-signed yet, so your operating system will display a security warning the first time you open it.

macOS

You will see a dialog that says "Apple cannot check it for malicious software".

Option 1 -- Right-click to open

  1. Right-click (or Control-click) CodePilot.app in Finder.
  2. Select Open from the context menu.
  3. Click Open in the confirmation dialog.

Option 2 -- System Settings

  1. Open System Settings > Privacy & Security.
  2. Scroll down to the Security section.
  3. You will see a message about CodePilot being blocked. Click Open Anyway.
  4. Authenticate if prompted, then launch the app.

Option 3 -- Terminal command

xattr -cr /Applications/CodePilot.app

This strips the quarantine attribute so macOS will no longer block the app.

Windows

Windows SmartScreen will block the installer or executable.

Option 1 -- Run anyway

  1. On the SmartScreen dialog, click More info.
  2. Click Run anyway.

Option 2 -- Disable App Install Control

  1. Open Settings > Apps > Advanced app settings.
  2. Toggle App Install Control (or "Choose where to get apps") to allow apps from anywhere.

Tech Stack

Layer Technology
Framework Next.js 16 (App Router)
Desktop shell Electron 40
UI components Radix UI + shadcn/ui
Styling Tailwind CSS 4
Animation Motion (Framer Motion)
AI integration Claude Agent SDK
Database better-sqlite3 (embedded, per-user)
Markdown react-markdown + remark-gfm + rehype-raw + Shiki
Streaming Vercel AI SDK helpers + Server-Sent Events
Icons Hugeicons + Lucide
Testing Playwright
CI/CD GitHub Actions (auto-build + release on tag)
Build / Pack electron-builder + esbuild

Project Structure

codepilot/
├── .github/workflows/      # CI/CD: multi-platform build & auto-release
├── electron/                # Electron main process & preload
│   ├── main.ts              # Window creation, embedded server lifecycle
│   └── preload.ts           # Context bridge
├── src/
│   ├── app/                 # Next.js App Router pages & API routes
│   │   ├── chat/            # New-chat page & [id] session page
│   │   ├── extensions/      # Skills + MCP server management
│   │   ├── settings/        # Settings editor
│   │   └── api/             # REST + SSE endpoints
│   │       ├── chat/        # Sessions, messages, streaming, permissions
│   │       ├── files/       # File tree & preview
│   │       ├── plugins/     # Plugin & MCP CRUD
│   │       ├── settings/    # Settings read/write
│   │       ├── skills/      # Skill CRUD
│   │       └── tasks/       # Task tracking
│   ├── components/
│   │   ├── ai-elements/     # Message bubbles, code blocks, tool calls, etc.
│   │   ├── chat/            # ChatView, MessageList, MessageInput, streaming
│   │   ├── layout/          # AppShell, NavRail, ResizeHandle, RightPanel
│   │   ├── plugins/         # MCP server list & editor
│   │   ├── project/         # FileTree, FilePreview, TaskList
│   │   ├── skills/          # SkillsManager, SkillEditor
│   │   └── ui/              # Radix-based primitives (button, dialog, tabs, ...)
│   ├── hooks/               # Custom React hooks (usePanel, ...)
│   ├── lib/                 # Core logic
│   │   ├── claude-client.ts # Agent SDK streaming wrapper
│   │   ├── db.ts            # SQLite schema, migrations, CRUD
│   │   ├── files.ts         # File system helpers
│   │   ├── permission-registry.ts  # Permission request/response bridge
│   │   └── utils.ts         # Shared utilities
│   └── types/               # TypeScript interfaces & API contracts
├── electron-builder.yml     # Packaging configuration
├── package.json
└── tsconfig.json

Development

# Run Next.js dev server only (opens in browser)
npm run dev

# Compile the Electron main process (required before first run)
node scripts/build-electron.mjs

# Run the full Electron app in dev mode
# (starts Next.js + waits for it, then opens Electron)
npm run electron:dev

# Production build (Next.js static export)
npm run build

# Build Electron distributable + Next.js
npm run electron:build

# Package for specific platforms
npm run electron:pack:mac     # macOS DMG (arm64 + x64)
npm run electron:pack:win     # Windows NSIS installer
npm run electron:pack:linux   # Linux AppImage, deb, rpm

CI/CD

The project uses GitHub Actions for automated builds. Pushing a v* tag triggers a full multi-platform build and automatically creates a GitHub Release with all artifacts:

git tag v0.8.1
git push origin v0.8.1
# CI builds Windows + macOS + Linux, then publishes the release

You can also manually trigger builds for individual platforms from the Actions tab.

Notes

  • The Electron main process (electron/main.ts) forks the Next.js standalone server and connects to it over 127.0.0.1 with a random free port.
  • Chat data is stored in ~/.codepilot/codepilot.db (or ./data/codepilot.db in dev mode).
  • The app uses WAL mode for SQLite, so concurrent reads are fast.

Contributing

Contributions are welcome. To get started:

  1. Fork the repository and create a feature branch.
  2. Install dependencies with npm install.
  3. Run npm run electron:dev to test your changes locally.
  4. Make sure npm run lint passes before opening a pull request.
  5. Open a PR against main with a clear description of what changed and why.

Please keep PRs focused -- one feature or fix per pull request.


License

MIT

S
Description
A desktop GUI for Claude Code — chat, code, and manage projects visually. Built with Electron + Next.js.
https://www.codepilot.sh/
Readme
7.7 MiB
0 Stars 1 Watchers 0 Forks
Languages
TypeScript 79.5%
JavaScript 16.3%
MDX 3.7%
CSS 0.5%