opencode-cursor-agent/README.md

81 lines
2.9 KiB
Markdown
Raw Permalink Normal View History

2026-04-18 14:08:01 +00:00
# cursor-adapter
**OpenAI相容 Chat Completions API** 對外提供服務,後端透過 **Cursor CLI**(預設 `agent`)或選用的 **ACP** 傳輸與 Cursor 互動的本地代理程式。另提供 **Anthropic Messages** 相容端點。
## 需求
- Go **1.26.1**(見 `go.mod`
- 已安裝並可在 `PATH` 中執行的 **Cursor CLI**(名稱或路徑見設定檔 `cursor_cli_path`
## 建置與執行
```bash
go build -o cursor-adapter .
./cursor-adapter
```
未指定 `-c``--config` 時,會讀取 `~/.cursor-adapter/config.yaml`;若檔案不存在則使用內建預設值。
首次可複製範例後再編輯:
```bash
mkdir -p ~/.cursor-adapter
cp config.example.yaml ~/.cursor-adapter/config.yaml
```
## 命令列參數
| 參數 | 說明 |
|------|------|
| `-c`, `--config` | 設定檔路徑 |
| `-p`, `--port` | 監聽埠(覆寫設定檔) |
| `--debug` | 除錯層級日誌 |
| `--use-acp` | 改用 Cursor ACP 傳輸(預設為 CLI stream-json |
| `--chat-only-workspace` | 預設 `true`:在暫存工作區並覆寫 `HOME``CURSOR_CONFIG_DIR` 等,避免子行程讀取啟動目錄或 `~/.cursor` 規則;設為 `false` 時代理的工作目錄會對 Cursor agent 可見 |
啟動前會檢查 Cursor CLI 是否可用;失敗時程式會退出並顯示錯誤。
## 設定檔YAML
欄位與 `config.example.yaml` 對齊,例如:
- `port`HTTP 服務埠(預設 `8976`
- `cursor_cli_path`CLI 可執行檔名或路徑
- `default_model`、`available_models`、`timeout`(秒)、`max_concurrent`
- `use_acp`、`chat_only_workspace`、`log_level`
## HTTP 端點
服務綁定 **127.0.0.1**(僅本機)。路由啟用 CORS`Access-Control-Allow-Origin: *`),並允許標頭如 `Authorization`、`X-Cursor-Session-ID`、`X-Cursor-Workspace`。
| 方法 | 路徑 | 說明 |
|------|------|------|
| GET | `/health` | 健康檢查 |
| GET | `/v1/models` | 模型列表 |
| POST | `/v1/chat/completions` | OpenAI 相容聊天完成(含串流 SSE |
| POST | `/v1/messages` | Anthropic Messages 相容 |
## 開發與測試
```bash
go test ./...
```
輔助腳本:`scripts/test_cursor_cli.sh`(驗證本機 Cursor CLI 是否可呼叫)。
## 專案結構(概要)
- `main.go`CLI 入口、設定與橋接組裝、服務啟動
- `internal/config`:設定載入與驗證
- `internal/server`HTTP 路由、CORS、OpenAIAnthropic 處理、SSE、工作階段
- `internal/bridge`:與 Cursor CLIACP 的橋接與併發控制
- `internal/converter`:請求/回應與模型對應
- `internal/types`:共用型別與 API 結構
- `internal/workspace`:暫存工作區與隔離行為
- `internal/sanitize`:輸入清理
- `docs/`計畫、架構、PRD 與 Cursor CLI 格式等文件
## 安全與隱私
建議維持 `chat_only_workspace: true`,除非你有意讓 Cursor agent 存取代理行程的工作目錄與本機 Cursor 設定。詳見 `config.example.yaml` 註解與 `internal/config` 實作。