# cloud_claude_code
**Repository Path**: snove/cloud_claude_code
## Basic Information
- **Project Name**: cloud_claude_code
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-04-02
- **Last Updated**: 2026-04-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# ð Claude Code 容åšç®¡çå¹³å°
åºäº Web ç Docker 容åšç®¡çå¹³å°ïŒçšäºè¿è¡å管ç Claude Code åŒåç¯å¢
English | ç®äœäžæ
---
## âš åèœç¹æ§
### æ žå¿åèœ
| åèœ | 诎æ |
|------|------|
| ð **çšæ·è®€è¯** | åºäº JWT ç讀è¯ç³»ç»ïŒæ¯æé
眮管çååæ®åéçéå¶ |
| ð **GitHub éæ** | æµè§å¹¶å
éä»åºå°å®¹åšå
|
| ð€ **Claude Code åå§å** | èªåšäœ¿çš Claude Code CLI åå§å项ç®ïŒå¯éïŒ |
| ð³ **容åšç®¡ç** | å建ãå¯åšã忢ãå é€ Docker å®¹åš |
| ð» **Web ç»ç«¯** | éè¿ WebSocket 宿¶äº€äºïŒæ¯æäŒè¯æä¹
åååå²è®°åœ |
| ð **æä»¶ç®¡ç** | æµè§ãäžäŒ ãäžèœœæä»¶ïŒæ¯æææœæäœ |
| ð **æå¡ä»£ç** | éè¿ Traefik ååä»£çæŽé²å®¹åšå
æå¡ |
| ð» **Code-Server** | éè¿åååè·¯ç±åšæµè§åšäžè®¿é® VS Code |
| âïž **èµæºæ§å¶** | èªå®ä¹å®¹åš CPU åå
åéå¶ |
| ð **å®å
šé犻** | 容åšé犻ãèœåå é€ãseccomp é
眮 |
### ð Headless æš¡åŒïŒæ°åèœïŒïŒ
| åèœ | 诎æ |
|------|------|
| ð¬ **Headless è倩** | ç¬ç«çè倩çé¢ïŒçšäºäž Claude CLI äº€äº |
| ð **æµåŒ JSON èŸåº** | 宿¶æµåŒäŒ èŸ Claude ååºïŒæ¯æç»æåè§£æ |
| ð **对è¯åå²** | æä¹
å对è¯ååšïŒæ¯æé蜮è·èžª |
| ð¯ **æš¡åéæ©** | ä»å¯çšç Claude æš¡åäžéæ©ïŒæäœ¿çšé»è®€æš¡å |
| ð° **Token äžè޹çšè¿œèžª** | 远螪æ¯èœ®å¯¹è¯çèŸå
¥/èŸåº Token å API èŽ¹çš |
| ð **WebSocket 宿¶éä¿¡** | éè¿ WebSocket 宿¶æµåŒäŒ èŸ Claude ååº |
| ð **蜮次å¡ç** | å¯è§åå±ç€ºçšæ·æç€ºå婿ååº |
| ð **äŒè¯æ¢å€** | äœ¿çš `--resume` æ å¿æ¢å€ç°æ Claude äŒè¯ |
### ð Claude é
眮管çïŒæ°åèœïŒïŒ
| åèœ | 诎æ |
|------|------|
| ð **é
眮暡æ¿** | å建å管ç Claude é
眮暡æ¿ïŒCLAUDE.mdãSkillsãMCPãCommandsïŒ |
| ðŠ **倿件æèœ** | äžäŒ å
å«å®æŽæèœæä»¶å€¹ç»æç zip å猩å
|
| ð **èªåšæ³šå
¥** | åå»ºå®¹åšæ¶èªåšæ³šå
¥é
眮 |
| ð§ **æåšæ³šå
¥** | éè¿ç»ç«¯é¡µé¢ UI 䞺è¿è¡äžçå®¹åšæ³šå
¥é
眮 |
| ð **é
眮é¢è§** | 泚å
¥åé¢è§é
眮å
容 |
| ð **åšææå¡åšå°å** | é
眮å忢å€äžªæå¡åšå°å |
### é«çº§åèœ
| åèœ | 诎æ |
|------|------|
| ð€ **PTY çæ§** | 宿¶ç»ç«¯çæ§ïŒæ¯æé黿£æµïŒ5-300ç§å¯é
眮éåŒïŒ |
| â¡ **èªåšåçç¥** | 4 ç§èªåšåæš¡åŒïŒWebhookãåœä»€æ³šå
¥ãä»»å¡éåãAI æºèœ |
| ð **ä»»å¡éåç³»ç»** | 管çä»»å¡éåïŒæ¯æææœæåºåèªåšæ§è¡ |
| ð **èªåšåæ¥å¿** | å
šé¢çæ¥å¿è®°åœïŒæ¯æçéã富åºåç»è®¡ |
| ð **åšæç«¯å£ç®¡ç** | 䞺è¿è¡äžç容åšåšææ·»å /å é€ç«¯å£æ å° |
| ð¯ **AI éæ** | åºäº LLM çèªåšåå³çïŒæ¯æ OpenAI å
Œå®¹ API |
| ð¡ **Docker äºä»¶çå¬** | åºäºå®¹åšçåœåšæäºä»¶çèªåšæž
çåçæ§ |
| ð **äŒè¯ç®¡ç** | ç»ç«¯äŒè¯æä¹
åïŒæ¯æå猩ååšåéè¿ |
| ð **å€ç«å®¹åšç®¡ç** | ååºåç®¡çæ°æ®åºå€ç Docker å®¹åš |
| ð **çµæŽ»è®€è¯** | å€ç§è®€è¯æ¹åŒïŒheaderãcookieãquery åæ° |
| ð§© **VS Code æ©å±** | PTY èªåšåçæ§æ©å±ïŒæ¯æ VS Code éæ |
| âïž **ç¯å¢é
眮æä»¶** | å¯é
眮ç API URL å Token åéå |
---
## ðïž ç³»ç»æ¶æ
```
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â ð æµè§åš â
â âââââââââââââââââââââââ âââââââââââââââââââââââââââââââââââââââ â
â â äž»ä»ªè¡šæ¿ â â Headless è倩 (/chat) â â
â â ç»ç«¯ãæä»¶ â â Claude å¯¹è¯ â â
â ââââââââââââ¬âââââââââââ ââââââââââââââââ¬âââââââââââââââââââââââ â
âââââââââââââââŒâââââââââââââââââââââââââââââââŒâââââââââââââââââââââââââ
â â
⌠âŒ
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â ð¡ Nginx (åå代ç) â
â âââââââââââââââââââââââ âââââââââââââââââââââââââââââââââââââââ â
â â äž»ç«ç¹ (:80) â â *.code.example.com (ååå) â â
â â example.com â â â Traefik â 容åš:8080 â â
â ââââââââââââ¬âââââââââââ ââââââââââââââââ¬âââââââââââââââââââââââ â
âââââââââââââââŒâââââââââââââââââââââââââââââââŒâââââââââââââââââââââââââ
â â
⌠âŒ
âââââââââââââââââââââââââââ âââââââââââââââââââââââââââââââââââââââ
â ð§ å端 (Go:8080) â â ð Traefik (38080) â
â âââââââââââââââââââââ â â æ ¹æ®å®¹åšåèªåšè·¯ç± â
â â REST API â â ââââââââââââââââ¬âââââââââââââââââââââââ
â â WebSocket ç»ç«¯ â â â
â â Headless 管çåš â â âŒ
â â 容åšç®¡ç â â âââââââââââââââââââââââââââââââââââââââ
â âââââââââââââââââââââ â â ð³ Docker å®¹åš â
âââââââââââââââ¬ââââââââââââ â âââââââââââ âââââââââââ ââââââââââââ
â â â dev-1 â â dev-2 â â dev-N ââ
âââââââââââââââââ¶â â :8080 â â :8080 â â :8080 ââ
â âââââââââââ âââââââââââ ââââââââââââ
âââââââââââââââââââââââââââââââââââââââ
```
---
## ð ïž ææ¯æ
|
### ð§ å端
- **Go 1.21+** - æ žå¿è¯èš
- **Gin** - Web æ¡æ¶
- **GORM + SQLite** - æ°æ®åº
- **Docker SDK** - 容åšç®¡ç
- **gorilla/websocket** - ç»ç«¯å Headless WebSocket
|
### ðš å端
- **React 18 + TypeScript**
- **Vite** - æå»ºå·¥å
·
- **shadcn/ui + Tailwind CSS** - UI ç»ä»¶
- **xterm.js** - ç»ç«¯æš¡æåš
|
|
### ð§© VS Code æ©å±
- **TypeScript** - æ©å±åŒåè¯èš
- **WebSocket** - 宿¶éä¿¡
- **VS Code API** - IDE éæ
|
### ð³ åºç¡è®Ÿæœ
- **Docker** - 容åšè¿è¡æ¶
- **Traefik** - åå代ç
- **Nginx** - Web æå¡åš
- **SQLite** - æ°æ®åº
|
---
## ð å¿«éåŒå§
### ð åçœ®èŠæ±
- ð³ DockerïŒçšäºè¿è¡åŒå容åšïŒ
- ðŠ Node.js 20+
- ð§ Go 1.21+
### 1ïžâ£ æå»ºåºç¡éå
```bash
cd docker
./build-base.sh
```
> è¿äŒå建å
å« Node.js 20ãGit å Claude Code CLI ç `cc-base:latest` éåã
### 2ïžâ£ é
眮ç¯å¢åé
```bash
cp .env.example .env
```
çŒèŸ `.env` æä»¶ïŒ
```env
ADMIN_USERNAME=admin
ADMIN_PASSWORD=your-secure-password
```
### 3ïžâ£ å¯åšåŒåæå¡
**ð§ Linux/macOS:**
```bash
./start-dev.sh
```
**ðª Windows:**
```cmd
start-dev.bat
```
### 4ïžâ£ 访é®åºçš
| æå¡ | å°å |
|------|------|
| ðš å端 | http://localhost:5173 |
| ð¬ Headless è倩 | http://localhost:5173/chat |
| ð Claude é
眮 | http://localhost:5173/claude-config |
| ð§ å端 API | http://localhost:8080 |
| ð Traefik ä»ªè¡šæ¿ | http://localhost:8081/dashboard/ |
> ð¡ åŠææªè®Ÿçœ® `ADMIN_PASSWORD`ïŒç³»ç»äŒèªåšçæå¯ç å¹¶æŸç€ºåšå端æ¥å¿äžã
---
## ð Claude é
眮管ç
Claude é
眮管çåèœå
讞æšå建ã管çåæ³šå
¥ Claude é
眮å°å®¹åšäžã
### é
眮类å
| ç±»å | 诎æ | æä»¶äœçœ® |
|------|------|----------|
| ð **CLAUDE.md** | 项ç®çº§ Claude æä»€æä»¶ | `~/.claude/CLAUDE.md` |
| ð¯ **Skills** | Claude æèœå®ä¹ | `~/.claude/skills/` |
| ð **MCP** | Model Context Protocol é
眮 | `~/.claude/mcp.json` |
| âšïž **Commands** | èªå®ä¹åœä»€é
眮 | `~/.claude/commands.json` |
### åèœç¹æ§
- **æš¡æ¿ç®¡ç** - å建ãçŒèŸãå é€é
眮暡æ¿
- **倿件æèœ** - äžäŒ zip å猩å
ïŒå
å«å®æŽæèœæä»¶å€¹ïŒSKILL.md + èæ¬ãèµæºçïŒ
- **èªåšæ³šå
¥** - åå»ºå®¹åšæ¶èªåšæ³šå
¥éå®çé
眮
- **æåšæ³šå
¥** - éè¿ç»ç«¯é¡µé¢äžºè¿è¡äžçå®¹åšæ³šå
¥é
眮
- **é
眮é¢è§** - 泚å
¥åé¢è§é
眮å
容
### äœ¿çšæ¹æ³
1. è¿å
¥ **Claude é
眮** 页é¢
2. å建æ°çé
眮暡æ¿ïŒéæ©ç±»åå¹¶å¡«åå
容
3. å¯¹äºæèœç±»åïŒå¯ä»¥éæ©ïŒ
- **åæä»¶æš¡åŒ** - çŽæ¥çŒèŸ SKILL.md å
容
- **å猩å
æš¡åŒ** - äžäŒ å
å«å®æŽæèœæä»¶å€¹ç zip æä»¶
4. åå»ºå®¹åšæ¶ïŒéæ©èŠæ³šå
¥çé
眮暡æ¿
5. 对äºå·²è¿è¡ç容åšïŒåšç»ç«¯é¡µé¢ç¹å»"泚å
¥é
眮"æé®
### API 端ç¹
| æ¹æ³ | ç«¯ç¹ | 诎æ |
|------|------|------|
| GET | `/api/config-templates` | ååºææé
çœ®æš¡æ¿ |
| POST | `/api/config-templates` | å建é
çœ®æš¡æ¿ |
| GET | `/api/config-templates/:id` | è·åé
çœ®æš¡æ¿ |
| PUT | `/api/config-templates/:id` | æŽæ°é
çœ®æš¡æ¿ |
| DELETE | `/api/config-templates/:id` | å é€é
çœ®æš¡æ¿ |
| POST | `/api/containers/:id/inject-configs` | 泚å
¥é
眮å°å®¹åš |
---
## ð¬ Headless æš¡åŒ
Headless æš¡åŒæäŸç±»äŒŒè倩ççé¢ïŒçšäºäž Claude CLI 亀äºïŒæ éäŒ ç»çç»ç«¯ UIã
### åèœç¹æ§
- **ç¬ç«è倩çé¢** (`/chat`) - äžçšç Claude 对è¯é¡µé¢
- **容åšéæ©** - åšå€äžªè¿è¡äžç容åšä¹éŽåæ¢
- **对è¯ç®¡ç** - åå»ºãæ¥çåå é€å¯¹è¯
- **æš¡åéæ©** - ä»å¯çšç Claude æš¡åäžéæ©ïŒæäœ¿çš"é»è®€"
- **宿¶æµåŒäŒ èŸ** - éè¿ WebSocket 宿¶æµåŒäŒ èŸ Claude ååº
- **蜮次åå²** - æ¥ç宿Žç对è¯åå²ïŒå
å« Token/莹çšè¿œèžª
- **äŒè¯æ¢å€** - èªåšæ¢å€ç°æç Claude äŒè¯
- **Markdown æž²æ** - äž°å¯ç Markdown æŸç€ºïŒæ¯æè¯æ³é«äº®
- **å·¥å
·è°çšæŸç€º** - 坿å çå·¥å
·äœ¿çšåç»æåïŒåžŠé¢è§åèœ
### å·¥äœåç
1. **鿩容åš** - ä»äŸ§èŸ¹æ éæ©äžäžªè¿è¡äžç容åš
2. **å建/鿩坹è¯** - åŒå§æ°å¯¹è¯æç»§ç»ç°æå¯¹è¯
3. **éæ©æš¡å**ïŒå¯éïŒ- éæ©ç¹å®ç Claude æš¡åæäœ¿çš"é»è®€"
4. **åéæç€º** - èŸå
¥æ¶æ¯ïŒClaude å°å®æ¶ååº
5. **æ¥çç»æ** - æ¥çç»æåååºïŒå
æ¬å·¥å
·äœ¿çšãæèè¿çšåææ¬
### API é
眮
èŠå¯çšæš¡åéæ©ïŒè¯·åšç¯å¢é
眮æä»¶äžé
眮 API 讟眮ïŒ
1. è¿å
¥ **讟眮** â **ç¯å¢é
眮æä»¶**
2. çŒèŸæå建é
眮æä»¶
3. 讟眮 **API URL åéå**ïŒäŸåŠ `ANTHROPIC_BASE_URL`ïŒ
4. 讟眮 **API Token åéå**ïŒäŸåŠ `ANTHROPIC_API_KEY`ïŒ
5. ç³»ç»å°ä» `{API_URL}/v1/models` è·åå¯çšæš¡å
### WebSocket åè®®
Headless WebSocket æ¯æä»¥äžæ¶æ¯ç±»åïŒ
**客æ·ç«¯ â æå¡åšïŒ**
- `headless_start` - å建æ°äŒè¯
- `headless_prompt` - åéæç€ºïŒå¯é `model` åæ°ïŒ
- `headless_cancel` - åæ¶åœåæ§è¡
- `load_more` - å 蜜æŽå€åå²
- `ping` - ä¿æŽ»å¿è·³
**æå¡åš â 客æ·ç«¯ïŒ**
- `session_info` - äŒè¯ä¿¡æ¯
- `history` - 对è¯åå²
- `event` - æµåŒäºä»¶ïŒå©æååºãå·¥å
·äœ¿çšçïŒ
- `turn_complete` - èœ®æ¬¡å®æåç»è®¡ä¿¡æ¯
- `error` - éè¯¯æ¶æ¯
- `pong` - ä¿æŽ»ååº
---
## ðŠ éšçœ²
### ð³ Docker éšçœ²ïŒæšèïŒ
æå¿«éçéšçœ²æ¹åŒïŒé
眮æå°ïŒ
```bash
cd deploy-docker
cp .env.example .env
# çŒèŸ .env é
眮
./start.sh
```
**ç¹æ§ïŒ**
- å€é¶æ®µæå»ºïŒéåäœç§¯æå°ïŒçºŠ 80MBïŒ
- åç«¯ç± nginx:alpine æäŸæå¡
- å端䞺 alpine:3.19 äžç Go äºè¿å¶æä»¶
- docker-compose æå¡çŒæ
- å
眮 nginx 代çïŒæ¯æ WebSocket
> ð **[æ¥ç Docker éšçœ²æå â](deploy-docker/README.zh-CN.md)**
### ð§ Shell èæ¬éšçœ²
éèŠæŽå€éšçœ²æ§å¶æ¶äœ¿çšïŒ
```bash
# å¯åšäº€äºåŒéšçœ²å富
./deploy.sh
```
亀äºåŒå富äŒåŒå¯Œæšå®ææŽäžªéšçœ²æµçšïŒ
- â
**ç¯å¢æ£æ¥** - èªåšéªè¯äŸèµé¡¹
- âïž **é
眮å富** - éæ¥è®Ÿçœ® .env æä»¶å¹¶éªè¯
- ð¯ **éšçœ²æš¡åŒ** - ä» 4 ç§éšçœ²çç¥äžéæ©
- ð **è¿åºŠæŸç€º** - 宿¶è¿åºŠè·èžª
- â
**èªåšéªè¯** - éšçœ²åå¥åº·æ£æ¥
- ð **åæ»æ¯æ** - 倱莥æ¶èªåšåæ»
### ð éšçœ²æš¡åŒ
| æš¡åŒ | 诎æ | éçšåºæ¯ |
|------|------|----------|
| ð³ **Docker** | 容åšåéšçœ² | å¿«ééšçœ²ãé犻ç¯å¢ |
| ð **å¿«ééšçœ²** | äžé®å®æŽéšçœ² | éŠæ¬¡éšçœ²ãå¿«éäžçº¿ |
| ð» **åŒåç¯å¢** | ä»
æå»ºãäžå®è£
| æ¬å°åŒåè°è¯ |
| ðŠ **ç产ç¯å¢** | 宿Žéšçœ²å«å€ä»œ | ç产ç¯å¢æŽæ° |
| âïž **èªå®ä¹** | 忥æåšæ§å¶ | é«çº§çšæ· |
**é¢è®¡èæ¶ïŒ** 3-5 åé
> ð **[æ¥ç Shell éšçœ²æå â](deploy-sh/README.zh-CN.md)**
---
## ð æå¡ä»£ç
### ð æ¹åŒäžïŒååå访é®ïŒæšèïŒ
éè¿ `{容åšå}.code.example.com` 访é®å®¹åšæå¡
```
ð€ çšæ· â ð¡ Nginx â ð Traefik â ð³ 容åš:8080
```
**é
眮æ¥éª€ïŒ**
1. ð **DNS**ïŒæ·»å æ³ååè§£æ `*.code.example.com â æå¡åšIP`
2. ð **Nginx**ïŒé
眮åååè·¯ç±ïŒåè [nginx.conf](deploy/nginx.conf)ïŒ
3. âïž **ç¯å¢åé**ïŒè®Ÿçœ® `CODE_SERVER_BASE_DOMAIN=code.example.com`
### ð æ¹åŒäºïŒç«¯å£çŽæ¥è®¿é®
éè¿ `http://æå¡åšIP:30001` çŽæ¥è®¿é®
ð å¯çšç«¯å£èåŽïŒ`30001-30020`
---
## âïž ç¯å¢åé
| åé | 诎æ | é»è®€åŒ |
|------|------|--------|
| `PORT` | å端æå¡ç«¯å£ | `8080` |
| `ADMIN_USERNAME` | 管çåçšæ·å | `admin` |
| `ADMIN_PASSWORD` | 管çåå¯ç | èªåšçæ |
| `JWT_SECRET` | JWT çŸåå¯é¥ | èªåšçæ |
| `DATABASE_PATH` | SQLite æ°æ®åºè·¯åŸ | `./data/cc-platform.db` |
| `AUTO_START_TRAEFIK` | èªåšå¯åš Traefik | `false` |
| `CODE_SERVER_BASE_DOMAIN` | Code-server ååå | (空) |
| `TRAEFIK_HTTP_PORT` | Traefik HTTP ç«¯å£ | èªåš (38000+) |
---
## ð€ èªåšåäžçæ§
æ¬å¹³å°å
眮区倧ç PTYïŒäŒªç»ç«¯ïŒçæ§ç³»ç»ïŒå¯èªå𿣿µç»ç«¯éé»å¹¶è§Šåçžåºåšäœã
### çæ§åèœ
- **é黿£æµ**ïŒå¯é
眮 5 å° 300 ç§çéåŒ
- **äžäžæçŒå²**ïŒæè·æè¿çç»ç«¯èŸåºïŒå¯é
眮倧å°ïŒ
- **Claude Code æ£æµ**ïŒèªå𿣿µç»ç«¯äžç Claude Code CLI
- **å€ç§çç¥**ïŒ4 ç§äžåçèªåšåçç¥å¯é
### èªåšåçç¥
#### 1. Webhook çç¥
åšç»ç«¯é黿¶åé
眮ç webhook URL åé HTTP POST 请æ±ã
**é
眮项ïŒ**
- Webhook URL
- èªå®ä¹ headersïŒJSON æ ŒåŒïŒ
- èªåšéè¯æºå¶ïŒææ°éé¿ïŒ3 次å°è¯ïŒ
**蜜è·ç€ºäŸïŒ**
```json
{
"container_id": 123,
"session_id": "abc123",
"silence_duration": 10,
"last_output": "æè¿çç»ç«¯èŸåº..."
}
```
#### 2. åœä»€æ³šå
¥çç¥
åšæ£æµå°ç»ç«¯é黿¶èªåšæ³šå
¥åœä»€ã
**é
眮项ïŒ**
- åœä»€æš¡æ¿ïŒæ¯æå äœç¬ŠïŒ
- `{container_id}` - å®¹åš ID
- `{session_id}` - ç»ç«¯äŒè¯ ID
- `{timestamp}` - åœåæ¶éŽæ³
- `{silence_duration}` - éé»æç»æ¶éŽ
- `{docker_id}` - Docker å®¹åš ID
**瀺äŸïŒ**
```
echo "æ£æµå°éé» {silence_duration}ç§ïŒæ¶éŽ {timestamp}"
```
#### 3. ä»»å¡éåçç¥
绎æ€ä»»å¡éåïŒåšç»ç«¯é黿¶èªåšæ§è¡éåäžçä»»å¡ã
**åèœç¹æ§ïŒ**
- ææœæåºä»»å¡
- ä»»å¡ç¶æè·èžªïŒåŸ
å€çãè¿è¡äžã已宿ã已跳è¿ã倱莥ïŒ
- æž
é€å·²å®æä»»å¡
- éå空éç¥
#### 4. AI çç¥ïŒLLM 驱åšïŒ
䜿çšå€éš LLMïŒOpenAI å
Œå®¹ APIïŒåæç»ç«¯èŸåºå¹¶å³å®æ§è¡åšäœã
**é
眮项ïŒ**
- AI API 端ç¹
- API å¯é¥
- æš¡ååç§°
- ç³»ç»æç€ºè¯
- æž©åºŠåæ°ïŒ0.0-2.0ïŒ
- è¶
æ¶æ¶éŽ
- AI äžå¯çšæ¶çå€çšåšäœ
**AI å³çç±»åïŒ**
- `inject`ïŒæ³šå
¥åœä»€
- `skip`ïŒè·³è¿æ€æ¬¡éé»äºä»¶
- `notify`ïŒä»
åééç¥
- `complete`ïŒæ è®°ä»»å¡å®æ
### èªåšåæ¥å¿
ææèªåšååšäœéœäŒè¢«è¯Šç»è®°åœïŒ
- çç¥ç±»å
- æ§è¡åšäœ
- æ§è¡çåœä»€
- äžäžæç段
- AI ååºïŒAI çç¥ïŒ
- æ§è¡ç»æ
- é误信æ¯ïŒåŠæïŒ
- æ¶éŽæ³
**æ¥å¿åèœïŒ**
- æå®¹åšãçç¥ãç»æãæ¥æèåŽçé
- åé¡µæ¯æ
- 富åºäžº JSONïŒæå€ 10,000 æ¡è®°åœïŒ
- ç»è®¡ä»ªè¡šæ¿
- å¯é
眮çä¿çæé
---
### åœä»€
| åœä»€ | å¿«æ·é® | 诎æ |
|------|--------|------|
| `PTY: Toggle Monitoring` | `Ctrl+Shift+M` | å¯çš/çŠçšçæ§ |
| `PTY: Open Task Panel` | `Ctrl+Shift+T` | æåŒä»»å¡éå颿¿ |
| `PTY: Open Settings` | - | é
眮èªåšå讟眮 |
| `PTY: Change Strategy` | - | 忢èªåšåçç¥ |
| `PTY: Reconnect` | - | éæ°è¿æ¥æå¡åš |
### é
眮
```json
{
"ptyAutomation.serverUrl": "http://localhost:8080",
"ptyAutomation.autoConnect": true,
"ptyAutomation.showStatusBar": true,
"ptyAutomation.defaultStrategy": "webhook",
"ptyAutomation.silenceThreshold": 30
}
```
### å®è£
```bash
cd vscode-extension
npm install
npm run compile
# ç¶ååš VS Code äžå®è£
.vsix æä»¶
```
---
## ð API åè
ð è®€è¯æ¥å£
| æ¹æ³ | ç«¯ç¹ | 诎æ |
|------|------|------|
| POST | `/api/auth/login` | çšæ·ç»åœ |
| POST | `/api/auth/logout` | çšæ·ç»åº |
| GET | `/api/auth/verify` | éªè¯ Token |
âïž è®Ÿçœ®æ¥å£
| æ¹æ³ | ç«¯ç¹ | 诎æ |
|------|------|------|
| GET | `/api/settings/github` | è·å GitHub é
çœ®ç¶æ |
| POST | `/api/settings/github` | ä¿å GitHub Token |
| GET | `/api/settings/claude` | è·å Claude é
眮 |
| POST | `/api/settings/claude` | ä¿å Claude é
眮 |
ð ä»åºæ¥å£
| æ¹æ³ | ç«¯ç¹ | 诎æ |
|------|------|------|
| GET | `/api/repos/remote` | ååº GitHub ä»åº |
| POST | `/api/repos/clone` | å
éä»åº |
| GET | `/api/repos/local` | ååºæ¬å°ä»åº |
| DELETE | `/api/repos/:id` | å é€ä»åº |
ð³ å®¹åšæ¥å£
| æ¹æ³ | ç«¯ç¹ | 诎æ |
|------|------|------|
| GET | `/api/containers` | ååºå®¹åš |
| POST | `/api/containers` | åå»ºå®¹åš |
| GET | `/api/containers/:id` | è·å容åšè¯Šæ
|
| POST | `/api/containers/:id/start` | å¯åšå®¹åš |
| POST | `/api/containers/:id/stop` | åæ¢å®¹åš |
| DELETE | `/api/containers/:id` | å é€å®¹åš |
| GET | `/api/containers/:id/logs` | è·åå®¹åšæ¥å¿ |
| GET | `/api/containers/:id/api-config` | è·å API é
眮ïŒURL å TokenïŒ |
| GET | `/api/docker/containers` | ååºææ Docker å®¹åš |
| POST | `/api/docker/containers/:dockerId/stop` | 忢 Docker å®¹åš |
| DELETE | `/api/docker/containers/:dockerId` | å é€ Docker å®¹åš |
ð ç«¯å£æ¥å£
| æ¹æ³ | ç«¯ç¹ | 诎æ |
|------|------|------|
| GET | `/api/ports/:id` | ååºå®¹åšç«¯å£ |
| POST | `/api/ports/:id` | æ·»å ç«¯å£æ å° |
| DELETE | `/api/ports/:id/:portId` | å é€ç«¯å£æ å° |
| GET | `/api/ports/all` | ååºææç«¯å£ |
ð» ç»ç«¯åæä»¶æ¥å£
| æ¹æ³ | ç«¯ç¹ | 诎æ |
|------|------|------|
| WS | `/api/ws/terminal/:id` | WebSocket ç»ç«¯ |
| GET | `/api/terminal/:id/sessions` | ååºç»ç«¯äŒè¯ |
| GET | `/api/files/:id/list` | ååºç®åœ |
| GET | `/api/files/:id/download` | äžèœœæä»¶ |
| POST | `/api/files/:id/upload` | äžäŒ æä»¶ |
| DELETE | `/api/files/:id/delete` | å 逿件/ç®åœ |
| POST | `/api/files/:id/mkdir` | å建ç®åœ |
ð¬ Headless æš¡åŒæ¥å£
| æ¹æ³ | ç«¯ç¹ | 诎æ |
|------|------|------|
| WS | `/api/ws/headless/:containerId` | Headless WebSocketïŒå®¹åšæš¡åŒïŒ |
| WS | `/api/ws/headless/conversation/:conversationId` | Headless WebSocketïŒå¯¹è¯æš¡åŒïŒ |
| GET | `/api/containers/:id/headless/conversations` | ååºå¯¹è¯ |
| GET | `/api/containers/:id/headless/conversations/:convId` | è·åå¯¹è¯ |
| DELETE | `/api/containers/:id/headless/conversations/:convId` | å é€å¯¹è¯ |
| GET | `/api/containers/:id/headless/conversations/:convId/turns` | è·å对è¯èœ®æ¬¡ |
| GET | `/api/containers/:id/headless/conversations/:convId/status` | è·å对è¯ç¶æ |
ð€ çæ§äžèªåšåæ¥å£
| æ¹æ³ | ç«¯ç¹ | 诎æ |
|------|------|------|
| GET | `/api/monitoring/:id/status` | è·åçæ§ç¶æ |
| POST | `/api/monitoring/:id/config` | æŽæ°çæ§é
眮 |
| GET | `/api/monitoring/:id/config` | è·åçæ§é
眮 |
| GET | `/api/monitoring/:id/context` | è·åäžäžæçŒå² |
| GET | `/api/monitoring/strategies` | ååºå¯çšçç¥ |
ð ä»»å¡é忥å£
| æ¹æ³ | ç«¯ç¹ | 诎æ |
|------|------|------|
| GET | `/api/tasks/:id` | ååºå®¹åšä»»å¡ |
| POST | `/api/tasks/:id` | æ·»å æ°ä»»å¡ |
| PUT | `/api/tasks/:id/:taskId` | æŽæ°ä»»å¡ |
| DELETE | `/api/tasks/:id/:taskId` | å é€ä»»å¡ |
| POST | `/api/tasks/:id/reorder` | éæä»»å¡ |
| GET | `/api/tasks/:id/count` | è·å任塿°é |
| DELETE | `/api/tasks/:id/clear` | æž
逿æä»»å¡ |
| DELETE | `/api/tasks/:id/clear-completed` | æž
é€å·²å®æä»»å¡ |
ð èªåšåæ¥å¿æ¥å£
| æ¹æ³ | ç«¯ç¹ | 诎æ |
|------|------|------|
| GET | `/api/automation-logs` | ååºèªåšåæ¥å¿ |
| GET | `/api/automation-logs/stats` | è·åæ¥å¿ç»è®¡ |
| POST | `/api/automation-logs/export` | å¯Œåºæ¥å¿äžº JSON |
| DELETE | `/api/automation-logs/cleanup` | æž
çæ§æ¥å¿ |
ð é
çœ®æš¡æ¿æ¥å£
| æ¹æ³ | ç«¯ç¹ | 诎æ |
|------|------|------|
| GET | `/api/config-templates` | ååºææé
çœ®æš¡æ¿ |
| POST | `/api/config-templates` | å建é
çœ®æš¡æ¿ |
| GET | `/api/config-templates/:id` | è·åé
çœ®æš¡æ¿ |
| PUT | `/api/config-templates/:id` | æŽæ°é
çœ®æš¡æ¿ |
| DELETE | `/api/config-templates/:id` | å é€é
çœ®æš¡æ¿ |
| POST | `/api/containers/:id/inject-configs` | 泚å
¥é
眮å°å®¹åš |
âïž é
眮æä»¶æ¥å£
| æ¹æ³ | ç«¯ç¹ | 诎æ |
|------|------|------|
| GET | `/api/config-profiles` | ååºææé
眮æä»¶ |
| POST | `/api/config-profiles` | å建é
眮æä»¶ |
| GET | `/api/config-profiles/:id` | è·åé
眮æä»¶ |
| PUT | `/api/config-profiles/:id` | æŽæ°é
眮æä»¶ |
| DELETE | `/api/config-profiles/:id` | å é€é
眮æä»¶ |
| GET | `/api/config-profiles/:id/env` | è·åç¯å¢é
眮 |
| POST | `/api/config-profiles/:id/env` | å建/æŽæ°ç¯å¢é
眮 |
---
## ð 项ç®ç»æ
```
.
âââ ð§ backend/ # Go å端
â âââ cmd/server/ # å
¥å£ç¹
â âââ internal/ # å
éšå
â â âââ config/ # é
眮
â â âââ handlers/ # HTTP å€çåš
â â â âââ config_template.go # é
çœ®æš¡æ¿ API
â â âââ services/ # äžå¡é»èŸ
â â â âââ config_template_service.go # æš¡æ¿ç®¡ç
â â â âââ config_injection_service.go # é
眮泚å
¥
â â âââ terminal/ # ç»ç«¯ç®¡ç
â â âââ headless/ # Headless æš¡åŒïŒClaude CLIïŒ
â â âââ monitoring/ # PTY çæ§äžèªåšå
â â âââ mode/ # TUI/Headless æš¡åŒç®¡çåš
â â âââ middleware/ # 讀è¯ãCORSãéçéå¶
â â âââ docker/ # Docker 客æ·ç«¯äžå®å
š
â â âââ database/ # æ°æ®åºæš¡å
â â âââ models/ # æ°æ®æš¡å
â â âââ claude_config_template.go # é
çœ®æš¡æ¿æš¡å
â âââ pkg/ # å
Œ
±å
â âââ crypto/ # å å¯å·¥å
·
â âââ pathutil/ # è·¯åŸéªè¯
â âââ httputil/ # HTTP å·¥å
·
â
âââ ðš frontend/ # React å端
â âââ src/
â âââ components/ # UI ç»ä»¶
â â âââ Automation/ # èªåšå UI ç»ä»¶
â â âââ Headless/ # Headless æš¡åŒç»ä»¶
â â â âââ MarkdownRenderer.tsx # Markdown è¯æ³é«äº®
â â â âââ TurnCard.tsx # 对è¯èœ®æ¬¡æŸç€º
â â âââ FileManager/ # æä»¶ç®¡çç»ä»¶
â â âââ layout/ # åžå±ç»ä»¶
â â âââ ui/ # shadcn/ui ç»ä»¶
â â âââ ConfigPreview.tsx # é
眮é¢è§ç»ä»¶
â â âââ ConfigTemplateEditor.tsx # æš¡æ¿çŒèŸåš
â â âââ ConfigInjectionDialog.tsx # 泚å
¥å¯¹è¯æ¡
â â âââ ServerAddressInput.tsx # æå¡åšå°åèŸå
¥
â âââ pages/ # 页é¢
â â âââ Dashboard.tsx
â â âââ HeadlessChat.tsx # ç¬ç«è倩 UI
â â âââ HeadlessTerminal.tsx
â â âââ ContainerTerminal.tsx
â â âââ ClaudeConfig.tsx # é
眮管ç页é¢
â â âââ Settings.tsx
â â âââ ...
â âââ hooks/ # React hooks
â â âââ useAuth.ts
â â âââ useHeadlessSession.ts
â âââ services/ # API æå¡
â â âââ api.ts
â â âââ headlessApi.ts
â â âââ headlessWebsocket.ts
â â âââ claudeConfigApi.ts # é
眮 API æå¡
â â âââ serverAddressManager.ts # æå¡åšå°å管ç
â â âââ ...
â âââ types/ # TypeScript ç±»å
â âââ claudeConfig.ts # é
眮类å
â
âââ ð§© vscode-extension/ # VS Code æ©å±
â âââ src/
â âââ extension.ts # æ©å±å
¥å£
â âââ statusBar.ts # ç¶ææ éæ
â âââ commands/ # VS Code åœä»€
â âââ services/ # WebSocket 客æ·ç«¯
â âââ webview/ # Webview 颿¿
â âââ utils/ # å·¥å
·åœæ°
â
âââ ð³ docker/ # Docker é
眮ïŒåŒå容åšïŒ
â âââ Dockerfile.base # åºç¡éå
â âââ extensions/ # VS Code æ©å±
â âââ traefik/ # Traefik 代çé
眮
â
âââ ð³ deploy-docker/ # Docker éšçœ²
â âââ Dockerfile.backend # å端éå
â âââ Dockerfile.frontend # å端éå
â âââ docker-compose.yml # æå¡çŒæ
â âââ nginx.conf # Nginx é
眮
â âââ start.sh # å¿«éå¯åšèæ¬
â âââ README.md # Docker éšçœ²æå
â
âââ ðŠ deploy-sh/ # Shell èæ¬éšçœ²
â âââ README.md # éšçœ²æå (è±æ)
â âââ README.zh-CN.md # éšçœ²æå (äžæ)
â âââ flows/ # éšçœ²æµçš
â âââ lib/ # éšçœ²åº
â âââ nginx.conf # Nginx é
眮
â
âââ .env.example # ç¯å¢åéæš¡æ¿
âââ start-dev.sh # åŒåå¯åšèæ¬ (Linux/Mac)
âââ start-dev.bat # åŒåå¯åšèæ¬ (Windows)
âââ deploy.sh # éšçœ²èæ¬
```
---
## ð å®å
šç¹æ§
| ç¹æ§ | 诎æ |
|------|------|
| ð€ é root è¿è¡ | 容åšä»¥é root çšæ·è¿è¡ |
| ð èœåå é€ | å 逿æäžå¿
èŠç Linux èœå |
| ð¡ïž Seccomp | åºçšå®å
šé
眮æä»¶ |
| ð èµæºéå¶ | åŒºå¶æ§è¡ CPU åå
åéå¶ |
| ð« Docker Socket | 容åšå
çŠæ¢è®¿é® |
| ð€ïž è·¯åŸä¿æ€ | å¯çšè·¯åŸéå鲿€ |
| ð å å¯ååš | æææ°æ®äœ¿çš AES-256-GCM å å¯ |
| â±ïž éçéå¶ | ç»åœå°è¯éå¶ïŒ5次/åéïŒçªå 10 æ¬¡ïŒ |
| ðª å®å
š Cookie | HTTP-only cookie 管çäŒè¯ |
| ð çµæŽ»è®€è¯ | æ¯æå€ç§è®€è¯æ¹åŒ |
---
## ð 鞣谢
æ¬é¡¹ç®åºäºä»¥äžäŒç§çåŒæºé¡¹ç®æå»ºïŒ
### å端
- [Go](https://github.com/golang/go) - Go çŒçšè¯èš
- [Gin](https://github.com/gin-gonic/gin) - HTTP Web æ¡æ¶
- [GORM](https://github.com/go-gorm/gorm) - Go è¯èš ORM åº
- [gorilla/websocket](https://github.com/gorilla/websocket) - WebSocket å®ç°
- [Docker Engine API](https://github.com/moby/moby) - 容åšç®¡ç
### å端
- [React](https://github.com/facebook/react) - UI åº
- [Vite](https://github.com/vitejs/vite) - äžäžä»£å端æå»ºå·¥å
·
- [Tailwind CSS](https://github.com/tailwindlabs/tailwindcss) - ååå CSS æ¡æ¶
- [shadcn/ui](https://github.com/shadcn-ui/ui) - å¯å€çš UI ç»ä»¶
- [xterm.js](https://github.com/xtermjs/xterm.js) - ç»ç«¯æš¡æåš
### åºç¡è®Ÿæœ
- [Traefik](https://github.com/traefik/traefik) - äºåçåå代ç
- [code-server](https://github.com/coder/code-server) - æµè§åšäžç VS Code
- [SQLite](https://sqlite.org/) - åµå
¥åŒæ°æ®åºåŒæ
---
## ð 讞å¯è¯
MIT License
---
çš â€ïž 䞺 Claude Code åŒåè
æé