onebot-agent 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,28 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: ["**"]
6
+ pull_request:
7
+
8
+ jobs:
9
+ lint-and-test:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - name: Checkout
13
+ uses: actions/checkout@v4
14
+
15
+ - name: Setup uv
16
+ uses: astral-sh/setup-uv@v5
17
+ with:
18
+ python-version: "3.11"
19
+
20
+ - name: Sync dependencies
21
+ run: uv sync --dev
22
+
23
+ - name: Lint
24
+ run: uv run ruff check .
25
+
26
+ - name: Test
27
+ run: uv run pytest -q
28
+
@@ -0,0 +1,42 @@
1
+ name: Publish (PyPI)
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+
7
+ jobs:
8
+ verify:
9
+ runs-on: ubuntu-latest
10
+ steps:
11
+ - uses: actions/checkout@v4
12
+
13
+ - uses: astral-sh/setup-uv@v5
14
+ with:
15
+ python-version: "3.11"
16
+
17
+ - run: uv sync --dev
18
+ - run: uv run ruff check .
19
+ - run: uv run pytest -q
20
+
21
+ publish:
22
+ needs: verify
23
+ runs-on: ubuntu-latest
24
+ environment: pypi
25
+ permissions:
26
+ id-token: write
27
+ contents: read
28
+ steps:
29
+ - uses: actions/checkout@v4
30
+
31
+ - uses: astral-sh/setup-uv@v5
32
+ with:
33
+ python-version: "3.11"
34
+
35
+ - name: Build
36
+ run: uv build
37
+
38
+ - name: Publish
39
+ uses: pypa/gh-action-pypi-publish@release/v1
40
+ with:
41
+ packages-dir: dist
42
+
@@ -0,0 +1,21 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.pyo
5
+ *.pyd
6
+ *.so
7
+ .pytest_cache/
8
+ .mypy_cache/
9
+ .ruff_cache/
10
+ .coverage
11
+ htmlcov/
12
+
13
+ # Virtualenv / uv
14
+ .venv/
15
+ !.python-version
16
+ !uv.lock
17
+
18
+ # OS / editor
19
+ .DS_Store
20
+ .idea/
21
+ .vscode/
@@ -0,0 +1 @@
1
+ 3.11
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 onebot contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,217 @@
1
+ Metadata-Version: 2.4
2
+ Name: onebot-agent
3
+ Version: 0.1.0
4
+ Summary: Minimal single-agent gateway with ACP backends, skills, and messaging adapters
5
+ Author: onebot contributors
6
+ License: MIT
7
+ License-File: LICENSE
8
+ Requires-Python: >=3.11
9
+ Requires-Dist: claude-code-acp>=0.4.4
10
+ Requires-Dist: fastapi>=0.128.8
11
+ Requires-Dist: httpx>=0.28.1
12
+ Requires-Dist: pydantic-settings>=2.12.0
13
+ Requires-Dist: python-telegram-bot>=21
14
+ Requires-Dist: rich>=14.3.2
15
+ Requires-Dist: typer>=0.23.0
16
+ Requires-Dist: uvicorn>=0.40.0
17
+ Description-Content-Type: text/markdown
18
+
19
+ # onebot
20
+
21
+ `onebot` 是一個以 Python + uv 打造的精簡 single-agent 框架,支援:
22
+
23
+ - CLI 與 Web(FastAPI + Uvicorn)
24
+ - Telegram / LINE 作為訊息 I/O
25
+ - Skills(相容 OpenClaw / SKILLS 的 `SKILL.md` 規範)
26
+ - ClawHub skill 搜尋 / 安裝(透過官方 `clawhub` CLI)
27
+ - ACP backend 切換:`gemini --acp`、`copilot --acp`、`claude-code-acp`
28
+ - MCP servers(透過 ACP backend 傳入)
29
+
30
+ > PyPI distribution 名稱:`onebot-agent`(CLI 指令:`onebot`)
31
+
32
+ ---
33
+
34
+ ## 1) 需求
35
+
36
+ - Python 3.11+
37
+ - [uv](https://github.com/astral-sh/uv)
38
+
39
+ 依你選的 backend,還需要:
40
+
41
+ - Claude:`claude-code-acp`(由 Python 套件安裝),以及 Claude CLI 已完成登入
42
+ - Gemini:`gemini` CLI(ACP 模式)
43
+ - Copilot:`copilot` CLI(ACP 模式)
44
+
45
+ 若要使用 ClawHub skills:
46
+
47
+ - `clawhub` CLI(例如:`npm i -g clawhub`)
48
+
49
+ ---
50
+
51
+ ## 2) 安裝與開發
52
+
53
+ ```bash
54
+ # 進入專案
55
+ cd onebot
56
+
57
+ # 安裝(含 dev)
58
+ uv sync --dev
59
+
60
+ # 看指令
61
+ uv run onebot --help
62
+ ```
63
+
64
+ ---
65
+
66
+ ## 3) 快速開始
67
+
68
+ ### 3.1 本地單次對話(ACP backend)
69
+
70
+ ```bash
71
+ export ONEBOT_ACP_BACKEND=claude
72
+ uv run onebot chat "請幫我建立一個 hello.py"
73
+ ```
74
+
75
+ 切換 backend:
76
+
77
+ ```bash
78
+ # Gemini
79
+ export ONEBOT_ACP_BACKEND=gemini
80
+ export ONEBOT_ACP_COMMAND=gemini
81
+ export ONEBOT_ACP_ARGS="--experimental-acp"
82
+
83
+ # Copilot
84
+ export ONEBOT_ACP_BACKEND=copilot
85
+ export ONEBOT_ACP_COMMAND=copilot
86
+ export ONEBOT_ACP_ARGS="--acp"
87
+ ```
88
+
89
+ ### 3.2 啟動 Web API
90
+
91
+ ```bash
92
+ uv run onebot web --host 127.0.0.1 --port 18790
93
+ ```
94
+
95
+ 可用端點:
96
+
97
+ - `GET /health`
98
+ - `GET /skills`
99
+ - `GET /adapters`
100
+ - `GET /config`
101
+ - `POST /line/webhook`
102
+
103
+ ### 3.3 啟動 Telegram polling
104
+
105
+ ```bash
106
+ export ONEBOT_TELEGRAM_TOKEN=<your-bot-token>
107
+ uv run onebot telegram
108
+ ```
109
+
110
+ ### 3.4 LINE webhook
111
+
112
+ 1. 設定:
113
+
114
+ ```bash
115
+ export ONEBOT_LINE_CHANNEL_SECRET=<secret>
116
+ export ONEBOT_LINE_CHANNEL_ACCESS_TOKEN=<token>
117
+ ```
118
+
119
+ 2. 啟動 Web:
120
+
121
+ ```bash
122
+ uv run onebot web --host 0.0.0.0 --port 18790
123
+ ```
124
+
125
+ 3. 在 LINE Developers 把 webhook URL 設為:
126
+
127
+ ```text
128
+ https://<your-domain>/line/webhook
129
+ ```
130
+
131
+ ---
132
+
133
+ ## 4) Skills / ClawHub
134
+
135
+ 列本地 skills:
136
+
137
+ ```bash
138
+ uv run onebot skill list
139
+ uv run onebot skill list --all
140
+ ```
141
+
142
+ 搜尋 / 安裝 / 更新(透過 clawhub CLI):
143
+
144
+ ```bash
145
+ uv run onebot skill search "postgres backups"
146
+ uv run onebot skill install my-skill
147
+ uv run onebot skill update my-skill
148
+ uv run onebot skill update --all
149
+ ```
150
+
151
+ 進階 passthrough:
152
+
153
+ ```bash
154
+ uv run onebot skill clawhub list
155
+ ```
156
+
157
+ ---
158
+
159
+ ## 5) MCP 設定
160
+
161
+ 透過 `ONEBOT_MCP_SERVERS` 以 JSON 陣列提供(會傳入 ACP backend):
162
+
163
+ ```bash
164
+ export ONEBOT_MCP_SERVERS='[
165
+ {
166
+ "name": "my-mcp",
167
+ "command": "uvx",
168
+ "args": ["my-mcp-server"]
169
+ }
170
+ ]'
171
+ ```
172
+
173
+ > 注意:不同 backend 對 MCP 的支援程度不同(例如 Gemini 通常需要先在 CLI 內預先配置)。
174
+
175
+ ---
176
+
177
+ ## 6) 主要環境變數
178
+
179
+ - `ONEBOT_WORKSPACE`(預設 `~/.onebot`)
180
+ - `ONEBOT_ACP_BACKEND`:`claude|gemini|copilot`
181
+ - `ONEBOT_ACP_COMMAND`:覆寫 backend command
182
+ - `ONEBOT_ACP_ARGS`:覆寫 backend args(shell 字串)
183
+ - `ONEBOT_MCP_SERVERS`:MCP servers JSON 陣列
184
+ - `ONEBOT_TELEGRAM_TOKEN`
185
+ - `ONEBOT_LINE_CHANNEL_SECRET`
186
+ - `ONEBOT_LINE_CHANNEL_ACCESS_TOKEN`
187
+
188
+ ---
189
+
190
+ ## 7) 測試與品質
191
+
192
+ ```bash
193
+ uv run ruff check .
194
+ uv run pytest -q
195
+ ```
196
+
197
+ ---
198
+
199
+ ## 8) 發佈流程(GitHub Release -> PyPI)
200
+
201
+ 本專案已提供:
202
+
203
+ - `.github/workflows/ci.yml`:push / PR 執行 lint + test
204
+ - `.github/workflows/publish.yml`:Release published 時 build + publish
205
+
206
+ 建議使用 PyPI Trusted Publisher(OIDC):
207
+
208
+ 1. 在 PyPI 專案設定 Trusted Publisher 指向本 GitHub repo/workflow
209
+ 2. GitHub 建立 Release(Published)
210
+ 3. workflow 自動 `uv build` 並上傳 `dist/*` 到 PyPI
211
+
212
+ ---
213
+
214
+ ## 9) 安全說明(目前)
215
+
216
+ - ACP 的檔案讀寫與終端執行有 workspace 限制與危險指令 deny patterns。
217
+ - 目前屬 MVP 安全層;高隔離場景建議後續加 Docker sandbox。
@@ -0,0 +1,199 @@
1
+ # onebot
2
+
3
+ `onebot` 是一個以 Python + uv 打造的精簡 single-agent 框架,支援:
4
+
5
+ - CLI 與 Web(FastAPI + Uvicorn)
6
+ - Telegram / LINE 作為訊息 I/O
7
+ - Skills(相容 OpenClaw / SKILLS 的 `SKILL.md` 規範)
8
+ - ClawHub skill 搜尋 / 安裝(透過官方 `clawhub` CLI)
9
+ - ACP backend 切換:`gemini --acp`、`copilot --acp`、`claude-code-acp`
10
+ - MCP servers(透過 ACP backend 傳入)
11
+
12
+ > PyPI distribution 名稱:`onebot-agent`(CLI 指令:`onebot`)
13
+
14
+ ---
15
+
16
+ ## 1) 需求
17
+
18
+ - Python 3.11+
19
+ - [uv](https://github.com/astral-sh/uv)
20
+
21
+ 依你選的 backend,還需要:
22
+
23
+ - Claude:`claude-code-acp`(由 Python 套件安裝),以及 Claude CLI 已完成登入
24
+ - Gemini:`gemini` CLI(ACP 模式)
25
+ - Copilot:`copilot` CLI(ACP 模式)
26
+
27
+ 若要使用 ClawHub skills:
28
+
29
+ - `clawhub` CLI(例如:`npm i -g clawhub`)
30
+
31
+ ---
32
+
33
+ ## 2) 安裝與開發
34
+
35
+ ```bash
36
+ # 進入專案
37
+ cd onebot
38
+
39
+ # 安裝(含 dev)
40
+ uv sync --dev
41
+
42
+ # 看指令
43
+ uv run onebot --help
44
+ ```
45
+
46
+ ---
47
+
48
+ ## 3) 快速開始
49
+
50
+ ### 3.1 本地單次對話(ACP backend)
51
+
52
+ ```bash
53
+ export ONEBOT_ACP_BACKEND=claude
54
+ uv run onebot chat "請幫我建立一個 hello.py"
55
+ ```
56
+
57
+ 切換 backend:
58
+
59
+ ```bash
60
+ # Gemini
61
+ export ONEBOT_ACP_BACKEND=gemini
62
+ export ONEBOT_ACP_COMMAND=gemini
63
+ export ONEBOT_ACP_ARGS="--experimental-acp"
64
+
65
+ # Copilot
66
+ export ONEBOT_ACP_BACKEND=copilot
67
+ export ONEBOT_ACP_COMMAND=copilot
68
+ export ONEBOT_ACP_ARGS="--acp"
69
+ ```
70
+
71
+ ### 3.2 啟動 Web API
72
+
73
+ ```bash
74
+ uv run onebot web --host 127.0.0.1 --port 18790
75
+ ```
76
+
77
+ 可用端點:
78
+
79
+ - `GET /health`
80
+ - `GET /skills`
81
+ - `GET /adapters`
82
+ - `GET /config`
83
+ - `POST /line/webhook`
84
+
85
+ ### 3.3 啟動 Telegram polling
86
+
87
+ ```bash
88
+ export ONEBOT_TELEGRAM_TOKEN=<your-bot-token>
89
+ uv run onebot telegram
90
+ ```
91
+
92
+ ### 3.4 LINE webhook
93
+
94
+ 1. 設定:
95
+
96
+ ```bash
97
+ export ONEBOT_LINE_CHANNEL_SECRET=<secret>
98
+ export ONEBOT_LINE_CHANNEL_ACCESS_TOKEN=<token>
99
+ ```
100
+
101
+ 2. 啟動 Web:
102
+
103
+ ```bash
104
+ uv run onebot web --host 0.0.0.0 --port 18790
105
+ ```
106
+
107
+ 3. 在 LINE Developers 把 webhook URL 設為:
108
+
109
+ ```text
110
+ https://<your-domain>/line/webhook
111
+ ```
112
+
113
+ ---
114
+
115
+ ## 4) Skills / ClawHub
116
+
117
+ 列本地 skills:
118
+
119
+ ```bash
120
+ uv run onebot skill list
121
+ uv run onebot skill list --all
122
+ ```
123
+
124
+ 搜尋 / 安裝 / 更新(透過 clawhub CLI):
125
+
126
+ ```bash
127
+ uv run onebot skill search "postgres backups"
128
+ uv run onebot skill install my-skill
129
+ uv run onebot skill update my-skill
130
+ uv run onebot skill update --all
131
+ ```
132
+
133
+ 進階 passthrough:
134
+
135
+ ```bash
136
+ uv run onebot skill clawhub list
137
+ ```
138
+
139
+ ---
140
+
141
+ ## 5) MCP 設定
142
+
143
+ 透過 `ONEBOT_MCP_SERVERS` 以 JSON 陣列提供(會傳入 ACP backend):
144
+
145
+ ```bash
146
+ export ONEBOT_MCP_SERVERS='[
147
+ {
148
+ "name": "my-mcp",
149
+ "command": "uvx",
150
+ "args": ["my-mcp-server"]
151
+ }
152
+ ]'
153
+ ```
154
+
155
+ > 注意:不同 backend 對 MCP 的支援程度不同(例如 Gemini 通常需要先在 CLI 內預先配置)。
156
+
157
+ ---
158
+
159
+ ## 6) 主要環境變數
160
+
161
+ - `ONEBOT_WORKSPACE`(預設 `~/.onebot`)
162
+ - `ONEBOT_ACP_BACKEND`:`claude|gemini|copilot`
163
+ - `ONEBOT_ACP_COMMAND`:覆寫 backend command
164
+ - `ONEBOT_ACP_ARGS`:覆寫 backend args(shell 字串)
165
+ - `ONEBOT_MCP_SERVERS`:MCP servers JSON 陣列
166
+ - `ONEBOT_TELEGRAM_TOKEN`
167
+ - `ONEBOT_LINE_CHANNEL_SECRET`
168
+ - `ONEBOT_LINE_CHANNEL_ACCESS_TOKEN`
169
+
170
+ ---
171
+
172
+ ## 7) 測試與品質
173
+
174
+ ```bash
175
+ uv run ruff check .
176
+ uv run pytest -q
177
+ ```
178
+
179
+ ---
180
+
181
+ ## 8) 發佈流程(GitHub Release -> PyPI)
182
+
183
+ 本專案已提供:
184
+
185
+ - `.github/workflows/ci.yml`:push / PR 執行 lint + test
186
+ - `.github/workflows/publish.yml`:Release published 時 build + publish
187
+
188
+ 建議使用 PyPI Trusted Publisher(OIDC):
189
+
190
+ 1. 在 PyPI 專案設定 Trusted Publisher 指向本 GitHub repo/workflow
191
+ 2. GitHub 建立 Release(Published)
192
+ 3. workflow 自動 `uv build` 並上傳 `dist/*` 到 PyPI
193
+
194
+ ---
195
+
196
+ ## 9) 安全說明(目前)
197
+
198
+ - ACP 的檔案讀寫與終端執行有 workspace 限制與危險指令 deny patterns。
199
+ - 目前屬 MVP 安全層;高隔離場景建議後續加 Docker sandbox。
@@ -0,0 +1,170 @@
1
+ onebot 計劃(可正式發佈版)
2
+
3
+ 本文件是「可一路做到正式發佈、可用、可維護」的完整工作計劃;接下來會依此逐步實作並以 commit 方式交付。
4
+
5
+ ---
6
+
7
+ ## 0. 目標 / 範圍
8
+
9
+ ### 目標
10
+
11
+ - 建立可發佈至 PyPI 的 Python 套件(distribution 名稱暫定:`onebot-agent`;import module:`onebot`)。
12
+ - 提供單一 agent(single-agent)架構:
13
+ - **CLI**(Typer):啟動、狀態、技能管理、ACP backend 設定。
14
+ - **Web**(FastAPI + Uvicorn):健康檢查、技能/adapter 列表、基本管理 API。
15
+ - 支援通訊通道作為 I/O:
16
+ - Telegram(MVP:polling;後續可加 webhook)
17
+ - LINE(M1:webhook)
18
+ - 支援兩種執行能力:
19
+ - **Skills**:相容 OpenClaw / SKILLS 規範(`skills/<name>/SKILL.md` YAML frontmatter)。
20
+ - **MCP**:可配置 MCP servers 並交由 ACP agent 使用(支援程度依 backend 而定)。
21
+ - 支援 **ACP 相容 agent backend**(可切換):
22
+ - `gemini --acp`(實際多為 `--experimental-acp`;以設定檔可覆寫)
23
+ - `copilot --acp`
24
+ - Python ClaudeAcpAgent:採用 `claude-code-acp`(https://github.com/yazelin/claude-code-acp-py)
25
+ - 依 GitHub Release 自動發佈至 PyPI(GitHub Actions)。
26
+
27
+ ### 非目標(先不做)
28
+
29
+ - 多 agent / 多租戶(multi-tenant)路由。
30
+ - 內建大型前端 SPA(MVP 只提供 API,必要時加最小靜態頁)。
31
+
32
+ ---
33
+
34
+ ## 1. 技術選型
35
+
36
+ - Python:3.12(最低支援 3.11;依依賴調整)
37
+ - Web:FastAPI + Uvicorn
38
+ - CLI:Typer + Rich
39
+ - 設定:pydantic-settings(env + config 檔)
40
+ - 套件/環境管理:**uv(Astral uv)**
41
+ - 開發:`uv sync` / `uv run ...`
42
+ - 建置:`uv build`
43
+ - ACP:使用 `claude-code-acp` 的 `AcpClient`(避免自行實作 ACP 協議)
44
+ - Telegram:python-telegram-bot(async)
45
+ - LINE:line-bot-sdk(webhook)
46
+
47
+ ---
48
+
49
+ ## 2. 架構(最小可用、可擴充)
50
+
51
+ ### 核心元件
52
+
53
+ - `Workspace`
54
+ - 管理 workspace 路徑、skills 安裝位置、暫存、設定檔。
55
+ - `SkillRegistry`
56
+ - 掃描/解析 skills(`SKILL.md` frontmatter)。
57
+ - 建立 skills summary(供 prompt 注入)。
58
+ - gating:requires.bins/env/os(缺少則標示 unavailable)。
59
+ - `AcpBackend`
60
+ - 包裝 `claude_code_acp.AcpClient`。
61
+ - 支援 backend profile:`claude|gemini|copilot`(command/args 可覆寫)。
62
+ - 提供:start session / prompt / stream text。
63
+ - 實作 hooks:permission / file read-write / terminal exec(安全限制)。
64
+ - `TransportAdapter`
65
+ - Telegram / LINE / CLI。
66
+ - 統一 `start()`、`stop()`、`send()`、`on_message(cb)`。
67
+ - `Gateway`
68
+ - inbound message -> (build prompt) -> acp backend -> outbound reply。
69
+
70
+ ### Skills 與 ClawHub
71
+
72
+ - Skills 格式:遵循 OpenClaw 慣例:`skills/<name>/SKILL.md`(YAML frontmatter:name/description/metadata)。
73
+ - ClawHub 搜尋/安裝:
74
+ - **MVP:包裝 ClawHub 官方 CLI**(`clawhub search/install/update/list`)。
75
+ - 預設安裝路徑:`<workspace>/skills`(與 OpenClaw 的 workspace skills 相容)。
76
+ - 若未安裝 `clawhub`:回傳明確指引(npm/pnpm/bun 安裝)。
77
+
78
+ ### Skills 執行隔離
79
+
80
+ - 預設:subprocess + per-skill virtualenv
81
+ - venv:**Python 標準 `venv` 模組**(每個 skill 一個 `.venv`)
82
+ - 安裝依賴:可用 `uv pip` 或 `pip`(依環境)
83
+ - 執行:`asyncio.create_subprocess_shell` / `create_subprocess_exec`
84
+ - 安全 guard:deny patterns(參考 nanobot ExecTool)+ 限制 cwd 於 workspace
85
+ - 選配(M2):Docker sandbox(高隔離)
86
+
87
+ ### MCP 支援
88
+
89
+ - 以「backend 能力」為主:
90
+ - `claude-code-acp`:可動態帶入 MCP servers
91
+ - `gemini`:通常需先用 gemini CLI 設定 MCP,再以 allowlist 啟用(依 CLI 行為)
92
+ - onebot 先提供:
93
+ - config 中的 mcp server 定義
94
+ - 啟動 backend session 時傳入(若 backend 支援)
95
+
96
+ ---
97
+
98
+ ## 3. 設定(Config)
99
+
100
+ MVP 先做:env + 可選 `onebot.toml`。
101
+
102
+ 必要設定(MVP):
103
+
104
+ - Workspace
105
+ - `ONEBOT_WORKSPACE`(預設:`~/.onebot`)
106
+
107
+ - ACP backend
108
+ - `ONEBOT_ACP_BACKEND`:`claude|gemini|copilot`
109
+ - `ONEBOT_ACP_COMMAND`:覆寫 command(例:`gemini`)
110
+ - `ONEBOT_ACP_ARGS`:覆寫 args(例:`--experimental-acp`)
111
+
112
+ - Telegram
113
+ - `ONEBOT_TELEGRAM_TOKEN`
114
+
115
+ - LINE(M1)
116
+ - `ONEBOT_LINE_CHANNEL_SECRET`
117
+ - `ONEBOT_LINE_CHANNEL_ACCESS_TOKEN`
118
+
119
+ ---
120
+
121
+ ## 4. 測試與品質
122
+
123
+ - Ruff(lint)
124
+ - Pytest + pytest-asyncio
125
+ - FastAPI:httpx ASGI 測試
126
+ - 覆蓋範圍(最低):
127
+ - skill parser / registry
128
+ - guard(deny patterns / workspace restriction)
129
+ - clawhub wrapper(以 mock subprocess)
130
+ - acp backend wrapper(以 mock / 或 integration 標記)
131
+
132
+ ---
133
+
134
+ ## 5. CI/CD(GitHub Release -> PyPI)
135
+
136
+ - PR/Push:lint + test
137
+ - Release(published):
138
+ - `uv build`
139
+ - 發佈到 PyPI
140
+
141
+ 建議:PyPI Trusted Publisher(OIDC)。備援:`PYPI_API_TOKEN`。
142
+
143
+ ---
144
+
145
+ ## 6. 工作拆解(以 commit 逐步交付)
146
+
147
+ > 每一項至少 1 個 commit;完成後會回來更新本清單。
148
+
149
+ - [x] C01:初始化 git + uv 專案骨架(pyproject、src layout、README、LICENSE)
150
+ - [x] C02:核心 Workspace/Config(pydantic-settings)
151
+ - [x] C03:Skills:SKILL.md 解析 + SkillRegistry + list/summary
152
+ - [x] C04:ClawHub wrapper:`onebot skill search/install/update/list`(subprocess 呼叫 clawhub)
153
+ - [x] C05:ACP backend:整合 `claude-code-acp` 的 `AcpClient`(claude/gemini/copilot profiles)
154
+ - [x] C06:Terminal/FS 安全層:workspace 限制 + deny patterns(參考 nanobot)
155
+ - [x] C07:Gateway:inbound message -> acp prompt -> outbound reply
156
+ - [x] C08:Telegram adapter(polling):可收訊息並回覆
157
+ - [x] C09:FastAPI:`/health` `/skills` `/adapters`(最小可用)
158
+ - [x] C10:測試(pytest)+ GitHub Actions(lint/test/release)
159
+ - [x] C11:文件補齊:快速上手、設定、skill/MCP/ACP、發佈流程
160
+
161
+ ---
162
+
163
+ ## 7. 驗收標準(正式可用)
164
+
165
+ - `uv sync` 後可用 `uv run onebot --help`
166
+ - `uv run onebot web` 可啟動 FastAPI(`/health` 回 200)
167
+ - `uv run onebot telegram` 可 polling 並回覆訊息(需 token)
168
+ - `uv run onebot skill list` 可列出 skills(內建 + workspace)
169
+ - `uv run onebot skill search <q>` 可透過 clawhub CLI 查詢(已安裝 clawhub 時)
170
+ - GitHub Release 觸發 build/publish workflow(可先 dry-run 驗證)