vibego 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.
Files changed (50) hide show
  1. vibego-0.1.0/MANIFEST.in +4 -0
  2. vibego-0.1.0/PKG-INFO +193 -0
  3. vibego-0.1.0/README.md +175 -0
  4. vibego-0.1.0/bot.py +6720 -0
  5. vibego-0.1.0/config/projects.json.example +10 -0
  6. vibego-0.1.0/logging_setup.py +135 -0
  7. vibego-0.1.0/master.py +2451 -0
  8. vibego-0.1.0/project_repository.py +413 -0
  9. vibego-0.1.0/pyproject.toml +41 -0
  10. vibego-0.1.0/requirements.txt +3 -0
  11. vibego-0.1.0/scripts/__init__.py +2 -0
  12. vibego-0.1.0/scripts/log_writer.py +126 -0
  13. vibego-0.1.0/scripts/master_healthcheck.py +199 -0
  14. vibego-0.1.0/scripts/models/claudecode.sh +15 -0
  15. vibego-0.1.0/scripts/models/codex.sh +12 -0
  16. vibego-0.1.0/scripts/models/common.sh +90 -0
  17. vibego-0.1.0/scripts/models/gemini.sh +12 -0
  18. vibego-0.1.0/scripts/run_bot.sh +158 -0
  19. vibego-0.1.0/scripts/start.sh +137 -0
  20. vibego-0.1.0/scripts/start_tmux_codex.sh +143 -0
  21. vibego-0.1.0/scripts/stop_all.sh +171 -0
  22. vibego-0.1.0/scripts/stop_bot.sh +140 -0
  23. vibego-0.1.0/setup.cfg +4 -0
  24. vibego-0.1.0/tasks/__init__.py +11 -0
  25. vibego-0.1.0/tasks/commands.py +58 -0
  26. vibego-0.1.0/tasks/constants.py +26 -0
  27. vibego-0.1.0/tasks/fsm.py +55 -0
  28. vibego-0.1.0/tasks/models.py +84 -0
  29. vibego-0.1.0/tasks/service.py +1060 -0
  30. vibego-0.1.0/tests/test_auto_compact.py +210 -0
  31. vibego-0.1.0/tests/test_chat_menu_buttons.py +269 -0
  32. vibego-0.1.0/tests/test_master_project_management.py +514 -0
  33. vibego-0.1.0/tests/test_numbered_reply_inputs.py +176 -0
  34. vibego-0.1.0/tests/test_plan_progress.py +532 -0
  35. vibego-0.1.0/tests/test_task_create_flow.py +386 -0
  36. vibego-0.1.0/tests/test_task_description.py +2308 -0
  37. vibego-0.1.0/tests/test_task_detail_back.py +405 -0
  38. vibego-0.1.0/tests/test_task_list_entry.py +510 -0
  39. vibego-0.1.0/vibego.egg-info/PKG-INFO +193 -0
  40. vibego-0.1.0/vibego.egg-info/SOURCES.txt +48 -0
  41. vibego-0.1.0/vibego.egg-info/dependency_links.txt +1 -0
  42. vibego-0.1.0/vibego.egg-info/entry_points.txt +2 -0
  43. vibego-0.1.0/vibego.egg-info/requires.txt +3 -0
  44. vibego-0.1.0/vibego.egg-info/top_level.txt +7 -0
  45. vibego-0.1.0/vibego_cli/__init__.py +12 -0
  46. vibego-0.1.0/vibego_cli/__main__.py +9 -0
  47. vibego-0.1.0/vibego_cli/config.py +91 -0
  48. vibego-0.1.0/vibego_cli/data/worker_requirements.txt +3 -0
  49. vibego-0.1.0/vibego_cli/deps.py +49 -0
  50. vibego-0.1.0/vibego_cli/main.py +357 -0
@@ -0,0 +1,4 @@
1
+ include README.md
2
+ include requirements.txt
3
+ recursive-include scripts *.sh *.py
4
+ recursive-include config *.example
vibego-0.1.0/PKG-INFO ADDED
@@ -0,0 +1,193 @@
1
+ Metadata-Version: 2.4
2
+ Name: vibego
3
+ Version: 0.1.0
4
+ Summary: vibego CLI:用于初始化与管理 Telegram Master Bot 的工具
5
+ Author: Hypha
6
+ License-Expression: LicenseRef-Proprietary
7
+ Classifier: Programming Language :: Python :: 3
8
+ Classifier: Programming Language :: Python :: 3.11
9
+ Classifier: Operating System :: MacOS
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Topic :: Software Development :: Build Tools
12
+ Classifier: Environment :: Console
13
+ Requires-Python: >=3.11
14
+ Description-Content-Type: text/markdown
15
+ Requires-Dist: aiogram<4.0.0,>=3.0.0
16
+ Requires-Dist: aiohttp-socks>=0.10.0
17
+ Requires-Dist: aiosqlite>=0.19.0
18
+
19
+ # vibe-bot(Telegram → Mac CLI → Telegram 回推)
20
+
21
+ ## 环境依赖
22
+
23
+ - 建议使用 Homebrew 安装核心命令行工具,保证脚本依赖一致:
24
+ ```bash
25
+ brew install python3 tmux codex
26
+ ```
27
+ Homebrew 官方文档说明可以通过 `brew install` 安装 Python 及 tmux,Codex CLI 官方文档同样推荐使用 Homebrew。安装完成后可执行
28
+ `python3 --version`、`tmux -V` 和 `codex --version` 验证环境。
29
+ - 首次使用 Codex CLI 需通过 ChatGPT 登录:
30
+ ```bash
31
+ codex login
32
+ ```
33
+ 登录成功后会在本地写入凭据(默认为 `~/.codex/auth.json`)。若需使用 API Key,可执行 `codex login --api-key <key>`。
34
+ - 项目脚本默认调用 Homebrew 提供的 `python3`。若需要隔离依赖,建议提前创建虚拟环境:
35
+ ```bash
36
+ python3 -m venv .venv
37
+ source .venv/bin/activate
38
+ ```
39
+
40
+ ## 目录结构
41
+
42
+ - `bot.py`:aiogram 3 worker,支持多模型会话解析(Codex / ClaudeCode / 预留 Gemini)。
43
+ - `scripts/run_bot.sh`:一键启动脚本(自动建 venv、启动 tmux + 模型 CLI + bot)。
44
+ - `scripts/stop_bot.sh`:终止当前项目 worker(tmux + bot 进程)。
45
+ - `scripts/start_tmux_codex.sh`:底层 tmux/CLI 启动器,被 `run_bot.sh` 调用,默认以 `tmux -u` 强制启用 UTF-8。
46
+ - `scripts/models/`:模型配置模块(`common.sh`/`codex.sh`/`claudecode.sh`/`gemini.sh`)。
47
+ - `logs/<model>/<project>/`:运行日志(`run_bot.log`、`model.log`、`bot.pid`、`current_session.txt`)。
48
+ - `model.log` 由 `scripts/log_writer.py` 控制,单文件上限 20MB,仅保留最近 24 小时的归档(可通过 `MODEL_LOG_MAX_BYTES`、
49
+ `MODEL_LOG_RETENTION_SECONDS` 覆盖)。
50
+ - `.env.example`:环境配置模板(复制为 `.env` 后按需修改)。
51
+
52
+ ## 快速开始
53
+
54
+ 建议通过 PyPI 安装的 `vibego` 命令完成初始化与启动,示例:
55
+
56
+ ```bash
57
+ pipx install vibego # 或者 pip install --user vibego
58
+ vibego init # 初始化配置目录并写入 Master Bot Token
59
+ vibego start # 启动 master 服务
60
+ ```
61
+
62
+ 若在本仓库内调试,可执行:
63
+
64
+ 1. 安装依赖:`brew install python tmux`(若需要代理,请提前配置)。
65
+ 2. 初始化配置:`python -m vibego_cli init` 或 `./scripts/vibego init`,按提示输入 Telegram Master Bot Token。
66
+ - 初始化会在 `~/.config/vibego/` 下创建 `.env`、`config/projects.json`、`config/master.db` 等文件。
67
+ 3. 启动 master:`python -m vibego_cli start`。启动后请在 Telegram 中向 Bot 发送 `/start` 完成授权。
68
+ 4. 查看状态或停止服务:运行 `python -m vibego_cli status`、`python -m vibego_cli stop`。
69
+
70
+ > CLI 会自动安装 Python 依赖并在 `~/.config/vibego/` 下准备 `logs/`、`state/` 等运行期目录,避免污染仓库工作区。
71
+
72
+ ## 日志 & 目录
73
+
74
+ ```
75
+ logs/
76
+ └─ codex/
77
+ └─ mall-backend/
78
+ ├─ run_bot.log # run_bot.sh 输出
79
+ ├─ model.log # tmux pipe-pane 捕获的模型 CLI 输出
80
+ ├─ bot.pid # 当前 bot 进程 PID(stop_bot.sh 使用)
81
+ └─ current_session.txt # 最近一次 JSONL 会话指针
82
+ ```
83
+
84
+ ## 模型切换
85
+
86
+ - 支持参数:`codex`、`claudecode`、`gemini`(占位)。
87
+ - 切换流程:`stop_bot.sh --model <旧>` → `run_bot.sh --model <新>`。
88
+ - 每个模型在 `scripts/models/<model>.sh` 中维护独立配置,互不依赖;公共逻辑位于 `scripts/models/common.sh`。
89
+ - `ACTIVE_MODEL` 会在 `/start` 回复及日志中显示,并写入环境变量供 `bot.py` 使用。
90
+
91
+ ### Codex
92
+
93
+ | 变量 | 说明 |
94
+ |----------------------|-----------------------------------------------|
95
+ | `CODEX_WORKDIR` | Codex CLI 工作目录(默认 `.env` 中自定义或 fallback ROOT) |
96
+ | `CODEX_CMD` | 启动命令,默认 `codex --dangerously-bypass-...` |
97
+ | `CODEX_SESSION_ROOT` | JSONL 根目录(默认 `~/.codex/sessions`) |
98
+ | `CODEX_SESSION_GLOB` | JSONL 文件匹配(默认 `rollout-*.jsonl`) |
99
+
100
+ ### ClaudeCode
101
+
102
+ | 变量 | 说明 |
103
+ |-----------------------|---------------------------------------|
104
+ | `CLAUDE_WORKDIR` | 工程目录(默认与 Codex 相同) |
105
+ | `CLAUDE_CMD` | CLI 启动命令,示例 `claude --project <path>` |
106
+ | `CLAUDE_PROJECT_ROOT` | JSONL 根目录(默认 `~/.claude/projects`) |
107
+ | `CLAUDE_SESSION_GLOB` | JSONL 文件匹配(默认 `*.jsonl`) |
108
+ | `CLAUDE_PROJECT_KEY` | 可选:显式指定 `~/.claude/projects/<key>` 路径 |
109
+
110
+ ### Gemini(预留)
111
+
112
+ - `scripts/models/gemini.sh` 暂使用占位命令,可在后续接入官方 CLI 时扩展。
113
+
114
+ ## aiogram Worker 行为
115
+
116
+ - `/start`:返回 `chat_id`、`MODE`、`ACTIVE_MODEL`;日志打印 `chat_id` 与 `user_id`。
117
+ - 文本消息:
118
+ 1. 依据 `ACTIVE_MODEL` 选择 `SessionAdapter`,读取 `current_session.txt` 中记录的 JSONL 文件,必要时搜索
119
+ `MODEL_SESSION_ROOT` 以回填。
120
+ 2. 将 prompt 注入 tmux(发送 `Esc` 清空模式、`C-j` 换行、`Enter` 提交)。
121
+ 3. 首次读取 `SESSION_OFFSETS` 初始化偏移;随后通过 `_deliver_pending_messages()` 补发当前尾部内容并持续轮询 JSONL。
122
+ 4. watcher 阶段提示 `ACTIVE_MODEL` 正在处理中,完成后自动推送结果(保留 Markdown)。
123
+ - MODE=A 下仍支持 `AGENT_CMD` 直接执行 CLI。
124
+
125
+ ## 新增脚本
126
+
127
+ - `run_bot.sh`
128
+ - `--model <name>`:codex / claudecode / gemini。
129
+ - `--project <slug>`:日志/会话目录名称;未提供时依据工作目录推导。
130
+ - `--foreground`:前台运行(默认后台 + `nohup`)。
131
+ - `--no-stop`:启动前跳过 stop(默认先执行 `stop_bot.sh` 保证幂等)。
132
+ - `stop_bot.sh`
133
+ - 幂等终止:`tmux kill-session`、关闭 `bot.pid` 指向的进程、移除缓存。
134
+ - 示例:`./scripts/stop_bot.sh --model codex --project mall-backend`。
135
+
136
+ ## 配置要点
137
+
138
+ ### `.env`(Master 全局配置)
139
+
140
+ - 文件位置:`~/.config/vibego/.env`(可通过环境变量 `VIBEGO_CONFIG_DIR` 自定义)。
141
+ - `MASTER_BOT_TOKEN`:master bot 的 Token,由 `vibego init` 引导输入,启动时必须存在。
142
+ - `MASTER_CHAT_ID` / `MASTER_USER_ID`:首次在 Telegram 与 master 交互时自动写入,表示已授权的管理员账号。
143
+ - `MASTER_WHITELIST`:逗号分隔的 chat_id 列表,留空表示不限制;若与自动写入冲突以最新值为准。
144
+ - 其他可选变量(代理、日志级别、默认模型等)可按需新增,未设置时脚本使用默认值。
145
+
146
+ - 项目配置持久化在 `~/.config/vibego/config/master.db`(SQLite),对应的 JSON 镜像为 `~/.config/vibego/config/projects.json`。如需离线编辑,可参考仓库内的 `config/projects.json.example` 模板。
147
+ - Master「⚙️ 项目管理」可新增/编辑/删除项目;仍可离线编辑 JSON,启动时会自动导入并同步至数据库。
148
+ - 必填字段:`bot_name`、`bot_token`、`project_slug`、`default_model`。
149
+ - 可选字段:`workdir`(项目路径)、`allowed_chat_id`(用于预设授权)。留空时,worker 首次收到消息会自动记录 chat_id 并写回
150
+ `~/.config/vibego/state/master_state.json`。
151
+ - 其他自定义字段暂不读取。
152
+
153
+ ### 自动授权 & 状态
154
+
155
+ - worker 启动时若 `allowed_chat_id` 为空,首次合法消息会写入 `state/state.json` 并立即生效。
156
+ - master 重启:先调用 `stop_bot.sh` 清理,再依据 state 还原正在运行的项目。
157
+
158
+ ## 后续规划
159
+
160
+ - Master bot(8031153139:AAF83jNsfzLTk428HAOVo0pJgHadisxkhCo)将统一轮询多个项目 bot,并调用 run/stop 脚本管理
161
+ worker;当前版本先提供 worker 端结构与日志规范。
162
+ - Gemini CLI 接入待官方方案确定后补充。
163
+
164
+ ## 注意
165
+
166
+ - `~/.config/vibego/.env` 内包含敏感 Token 与管理员信息,请勿提交至版本库。
167
+ - 若需减少日志体积,可按需清理 `logs/<model>/<project>/` 或调整脚本输出阈值。
168
+
169
+ ## Master 控制
170
+
171
+ - 管理员 Bot 使用 `MASTER_BOT_TOKEN` 启动(运行 `python master.py`)。
172
+ - 项目列表由 Master 仓库(`~/.config/vibego/config/master.db`)维护,可通过项目管理按钮或 `~/.config/vibego/config/projects.json` 同步文件更新。示例字段:
173
+ - `bot_name`:对应 Telegram 机器人的用户名(可带或不带 `@`,展示与交互时自动加 `@`)
174
+ - `bot_token`:对应 worker 的 Telegram Token
175
+ - `default_model`:默认模型(codex / claudecode / gemini)
176
+ - `project_slug`:日志/目录名称
177
+ - `workdir`:项目工作目录(可选)
178
+ - `allowed_chat_id`:项目 worker 的授权 chat(用于 run_bot 时注入环境)
179
+ - 状态持久化:`~/.config/vibego/state/master_state.json` 自动记录各项目当前模型与运行状态,master 重启时会先 `stop_bot.sh` 清理现场,再根据状态恢复。
180
+
181
+ ### 管理命令
182
+
183
+ | 命令 | 说明 |
184
+ |-----------------------------|--------------------------------|
185
+ | `/projects` | 列出所有项目当前状态与模型 |
186
+ | `/run <project> [model]` | 启动指定项目 worker,模型可选(默认使用当前/配置值) |
187
+ | `/stop <project>` | 停止项目 worker |
188
+ | `/switch <project> <model>` | 停止后以新模型重新启动 |
189
+ | `/start` | 显示帮助与项目数量 |
190
+
191
+ - `<project>` 参数可填写 `project_slug` 或对应 `@bot_name`,命令回复将自动展示可点击的 `@` 链接。
192
+
193
+ > master 仅与管理员 bot 交互;项目 bot 仍由 worker(run_bot.sh 启动的 `bot.py`)负责处理业务消息。
vibego-0.1.0/README.md ADDED
@@ -0,0 +1,175 @@
1
+ # vibe-bot(Telegram → Mac CLI → Telegram 回推)
2
+
3
+ ## 环境依赖
4
+
5
+ - 建议使用 Homebrew 安装核心命令行工具,保证脚本依赖一致:
6
+ ```bash
7
+ brew install python3 tmux codex
8
+ ```
9
+ Homebrew 官方文档说明可以通过 `brew install` 安装 Python 及 tmux,Codex CLI 官方文档同样推荐使用 Homebrew。安装完成后可执行
10
+ `python3 --version`、`tmux -V` 和 `codex --version` 验证环境。
11
+ - 首次使用 Codex CLI 需通过 ChatGPT 登录:
12
+ ```bash
13
+ codex login
14
+ ```
15
+ 登录成功后会在本地写入凭据(默认为 `~/.codex/auth.json`)。若需使用 API Key,可执行 `codex login --api-key <key>`。
16
+ - 项目脚本默认调用 Homebrew 提供的 `python3`。若需要隔离依赖,建议提前创建虚拟环境:
17
+ ```bash
18
+ python3 -m venv .venv
19
+ source .venv/bin/activate
20
+ ```
21
+
22
+ ## 目录结构
23
+
24
+ - `bot.py`:aiogram 3 worker,支持多模型会话解析(Codex / ClaudeCode / 预留 Gemini)。
25
+ - `scripts/run_bot.sh`:一键启动脚本(自动建 venv、启动 tmux + 模型 CLI + bot)。
26
+ - `scripts/stop_bot.sh`:终止当前项目 worker(tmux + bot 进程)。
27
+ - `scripts/start_tmux_codex.sh`:底层 tmux/CLI 启动器,被 `run_bot.sh` 调用,默认以 `tmux -u` 强制启用 UTF-8。
28
+ - `scripts/models/`:模型配置模块(`common.sh`/`codex.sh`/`claudecode.sh`/`gemini.sh`)。
29
+ - `logs/<model>/<project>/`:运行日志(`run_bot.log`、`model.log`、`bot.pid`、`current_session.txt`)。
30
+ - `model.log` 由 `scripts/log_writer.py` 控制,单文件上限 20MB,仅保留最近 24 小时的归档(可通过 `MODEL_LOG_MAX_BYTES`、
31
+ `MODEL_LOG_RETENTION_SECONDS` 覆盖)。
32
+ - `.env.example`:环境配置模板(复制为 `.env` 后按需修改)。
33
+
34
+ ## 快速开始
35
+
36
+ 建议通过 PyPI 安装的 `vibego` 命令完成初始化与启动,示例:
37
+
38
+ ```bash
39
+ pipx install vibego # 或者 pip install --user vibego
40
+ vibego init # 初始化配置目录并写入 Master Bot Token
41
+ vibego start # 启动 master 服务
42
+ ```
43
+
44
+ 若在本仓库内调试,可执行:
45
+
46
+ 1. 安装依赖:`brew install python tmux`(若需要代理,请提前配置)。
47
+ 2. 初始化配置:`python -m vibego_cli init` 或 `./scripts/vibego init`,按提示输入 Telegram Master Bot Token。
48
+ - 初始化会在 `~/.config/vibego/` 下创建 `.env`、`config/projects.json`、`config/master.db` 等文件。
49
+ 3. 启动 master:`python -m vibego_cli start`。启动后请在 Telegram 中向 Bot 发送 `/start` 完成授权。
50
+ 4. 查看状态或停止服务:运行 `python -m vibego_cli status`、`python -m vibego_cli stop`。
51
+
52
+ > CLI 会自动安装 Python 依赖并在 `~/.config/vibego/` 下准备 `logs/`、`state/` 等运行期目录,避免污染仓库工作区。
53
+
54
+ ## 日志 & 目录
55
+
56
+ ```
57
+ logs/
58
+ └─ codex/
59
+ └─ mall-backend/
60
+ ├─ run_bot.log # run_bot.sh 输出
61
+ ├─ model.log # tmux pipe-pane 捕获的模型 CLI 输出
62
+ ├─ bot.pid # 当前 bot 进程 PID(stop_bot.sh 使用)
63
+ └─ current_session.txt # 最近一次 JSONL 会话指针
64
+ ```
65
+
66
+ ## 模型切换
67
+
68
+ - 支持参数:`codex`、`claudecode`、`gemini`(占位)。
69
+ - 切换流程:`stop_bot.sh --model <旧>` → `run_bot.sh --model <新>`。
70
+ - 每个模型在 `scripts/models/<model>.sh` 中维护独立配置,互不依赖;公共逻辑位于 `scripts/models/common.sh`。
71
+ - `ACTIVE_MODEL` 会在 `/start` 回复及日志中显示,并写入环境变量供 `bot.py` 使用。
72
+
73
+ ### Codex
74
+
75
+ | 变量 | 说明 |
76
+ |----------------------|-----------------------------------------------|
77
+ | `CODEX_WORKDIR` | Codex CLI 工作目录(默认 `.env` 中自定义或 fallback ROOT) |
78
+ | `CODEX_CMD` | 启动命令,默认 `codex --dangerously-bypass-...` |
79
+ | `CODEX_SESSION_ROOT` | JSONL 根目录(默认 `~/.codex/sessions`) |
80
+ | `CODEX_SESSION_GLOB` | JSONL 文件匹配(默认 `rollout-*.jsonl`) |
81
+
82
+ ### ClaudeCode
83
+
84
+ | 变量 | 说明 |
85
+ |-----------------------|---------------------------------------|
86
+ | `CLAUDE_WORKDIR` | 工程目录(默认与 Codex 相同) |
87
+ | `CLAUDE_CMD` | CLI 启动命令,示例 `claude --project <path>` |
88
+ | `CLAUDE_PROJECT_ROOT` | JSONL 根目录(默认 `~/.claude/projects`) |
89
+ | `CLAUDE_SESSION_GLOB` | JSONL 文件匹配(默认 `*.jsonl`) |
90
+ | `CLAUDE_PROJECT_KEY` | 可选:显式指定 `~/.claude/projects/<key>` 路径 |
91
+
92
+ ### Gemini(预留)
93
+
94
+ - `scripts/models/gemini.sh` 暂使用占位命令,可在后续接入官方 CLI 时扩展。
95
+
96
+ ## aiogram Worker 行为
97
+
98
+ - `/start`:返回 `chat_id`、`MODE`、`ACTIVE_MODEL`;日志打印 `chat_id` 与 `user_id`。
99
+ - 文本消息:
100
+ 1. 依据 `ACTIVE_MODEL` 选择 `SessionAdapter`,读取 `current_session.txt` 中记录的 JSONL 文件,必要时搜索
101
+ `MODEL_SESSION_ROOT` 以回填。
102
+ 2. 将 prompt 注入 tmux(发送 `Esc` 清空模式、`C-j` 换行、`Enter` 提交)。
103
+ 3. 首次读取 `SESSION_OFFSETS` 初始化偏移;随后通过 `_deliver_pending_messages()` 补发当前尾部内容并持续轮询 JSONL。
104
+ 4. watcher 阶段提示 `ACTIVE_MODEL` 正在处理中,完成后自动推送结果(保留 Markdown)。
105
+ - MODE=A 下仍支持 `AGENT_CMD` 直接执行 CLI。
106
+
107
+ ## 新增脚本
108
+
109
+ - `run_bot.sh`
110
+ - `--model <name>`:codex / claudecode / gemini。
111
+ - `--project <slug>`:日志/会话目录名称;未提供时依据工作目录推导。
112
+ - `--foreground`:前台运行(默认后台 + `nohup`)。
113
+ - `--no-stop`:启动前跳过 stop(默认先执行 `stop_bot.sh` 保证幂等)。
114
+ - `stop_bot.sh`
115
+ - 幂等终止:`tmux kill-session`、关闭 `bot.pid` 指向的进程、移除缓存。
116
+ - 示例:`./scripts/stop_bot.sh --model codex --project mall-backend`。
117
+
118
+ ## 配置要点
119
+
120
+ ### `.env`(Master 全局配置)
121
+
122
+ - 文件位置:`~/.config/vibego/.env`(可通过环境变量 `VIBEGO_CONFIG_DIR` 自定义)。
123
+ - `MASTER_BOT_TOKEN`:master bot 的 Token,由 `vibego init` 引导输入,启动时必须存在。
124
+ - `MASTER_CHAT_ID` / `MASTER_USER_ID`:首次在 Telegram 与 master 交互时自动写入,表示已授权的管理员账号。
125
+ - `MASTER_WHITELIST`:逗号分隔的 chat_id 列表,留空表示不限制;若与自动写入冲突以最新值为准。
126
+ - 其他可选变量(代理、日志级别、默认模型等)可按需新增,未设置时脚本使用默认值。
127
+
128
+ - 项目配置持久化在 `~/.config/vibego/config/master.db`(SQLite),对应的 JSON 镜像为 `~/.config/vibego/config/projects.json`。如需离线编辑,可参考仓库内的 `config/projects.json.example` 模板。
129
+ - Master「⚙️ 项目管理」可新增/编辑/删除项目;仍可离线编辑 JSON,启动时会自动导入并同步至数据库。
130
+ - 必填字段:`bot_name`、`bot_token`、`project_slug`、`default_model`。
131
+ - 可选字段:`workdir`(项目路径)、`allowed_chat_id`(用于预设授权)。留空时,worker 首次收到消息会自动记录 chat_id 并写回
132
+ `~/.config/vibego/state/master_state.json`。
133
+ - 其他自定义字段暂不读取。
134
+
135
+ ### 自动授权 & 状态
136
+
137
+ - worker 启动时若 `allowed_chat_id` 为空,首次合法消息会写入 `state/state.json` 并立即生效。
138
+ - master 重启:先调用 `stop_bot.sh` 清理,再依据 state 还原正在运行的项目。
139
+
140
+ ## 后续规划
141
+
142
+ - Master bot(8031153139:AAF83jNsfzLTk428HAOVo0pJgHadisxkhCo)将统一轮询多个项目 bot,并调用 run/stop 脚本管理
143
+ worker;当前版本先提供 worker 端结构与日志规范。
144
+ - Gemini CLI 接入待官方方案确定后补充。
145
+
146
+ ## 注意
147
+
148
+ - `~/.config/vibego/.env` 内包含敏感 Token 与管理员信息,请勿提交至版本库。
149
+ - 若需减少日志体积,可按需清理 `logs/<model>/<project>/` 或调整脚本输出阈值。
150
+
151
+ ## Master 控制
152
+
153
+ - 管理员 Bot 使用 `MASTER_BOT_TOKEN` 启动(运行 `python master.py`)。
154
+ - 项目列表由 Master 仓库(`~/.config/vibego/config/master.db`)维护,可通过项目管理按钮或 `~/.config/vibego/config/projects.json` 同步文件更新。示例字段:
155
+ - `bot_name`:对应 Telegram 机器人的用户名(可带或不带 `@`,展示与交互时自动加 `@`)
156
+ - `bot_token`:对应 worker 的 Telegram Token
157
+ - `default_model`:默认模型(codex / claudecode / gemini)
158
+ - `project_slug`:日志/目录名称
159
+ - `workdir`:项目工作目录(可选)
160
+ - `allowed_chat_id`:项目 worker 的授权 chat(用于 run_bot 时注入环境)
161
+ - 状态持久化:`~/.config/vibego/state/master_state.json` 自动记录各项目当前模型与运行状态,master 重启时会先 `stop_bot.sh` 清理现场,再根据状态恢复。
162
+
163
+ ### 管理命令
164
+
165
+ | 命令 | 说明 |
166
+ |-----------------------------|--------------------------------|
167
+ | `/projects` | 列出所有项目当前状态与模型 |
168
+ | `/run <project> [model]` | 启动指定项目 worker,模型可选(默认使用当前/配置值) |
169
+ | `/stop <project>` | 停止项目 worker |
170
+ | `/switch <project> <model>` | 停止后以新模型重新启动 |
171
+ | `/start` | 显示帮助与项目数量 |
172
+
173
+ - `<project>` 参数可填写 `project_slug` 或对应 `@bot_name`,命令回复将自动展示可点击的 `@` 链接。
174
+
175
+ > master 仅与管理员 bot 交互;项目 bot 仍由 worker(run_bot.sh 启动的 `bot.py`)负责处理业务消息。