vibego 0.2.9__py3-none-any.whl → 0.2.11__py3-none-any.whl
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.
Potentially problematic release.
This version of vibego might be problematic. Click here for more details.
- bot.py +12 -14
- master.py +1 -6
- scripts/start.sh +100 -8
- scripts/test_deps_check.sh +66 -0
- {vibego-0.2.9.dist-info → vibego-0.2.11.dist-info}/METADATA +1 -1
- {vibego-0.2.9.dist-info → vibego-0.2.11.dist-info}/RECORD +9 -8
- {vibego-0.2.9.dist-info → vibego-0.2.11.dist-info}/WHEEL +0 -0
- {vibego-0.2.9.dist-info → vibego-0.2.11.dist-info}/entry_points.txt +0 -0
- {vibego-0.2.9.dist-info → vibego-0.2.11.dist-info}/top_level.txt +0 -0
bot.py
CHANGED
|
@@ -4450,7 +4450,14 @@ def _extract_codex_payload(data: dict, *, event_timestamp: Optional[str]) -> Opt
|
|
|
4450
4450
|
return None
|
|
4451
4451
|
|
|
4452
4452
|
|
|
4453
|
-
def _extract_claudecode_payload(
|
|
4453
|
+
def _extract_claudecode_payload(
|
|
4454
|
+
data: dict, *, event_timestamp: Optional[str]
|
|
4455
|
+
) -> Optional[Tuple[str, str, Optional[Dict[str, Any]]]]:
|
|
4456
|
+
# Claude Code 在启动时会输出 isSidechain=true 的欢迎语,此类事件直接忽略
|
|
4457
|
+
sidechain_flag = data.get("isSidechain")
|
|
4458
|
+
if isinstance(sidechain_flag, bool) and sidechain_flag:
|
|
4459
|
+
return None
|
|
4460
|
+
|
|
4454
4461
|
event_type = data.get("type")
|
|
4455
4462
|
|
|
4456
4463
|
if event_type == "assistant":
|
|
@@ -4463,20 +4470,11 @@ def _extract_claudecode_payload(data: dict, *, event_timestamp: Optional[str]) -
|
|
|
4463
4470
|
if not isinstance(item, dict):
|
|
4464
4471
|
continue
|
|
4465
4472
|
item_type = item.get("type")
|
|
4466
|
-
if item_type
|
|
4467
|
-
continue
|
|
4468
|
-
if item_type == "tool_result":
|
|
4469
|
-
tool_output = item.get("output")
|
|
4470
|
-
if isinstance(tool_output, str) and tool_output.strip():
|
|
4471
|
-
fragments.append(tool_output.strip())
|
|
4472
|
-
content_value = item.get("content")
|
|
4473
|
-
if isinstance(content_value, str) and content_value.strip():
|
|
4474
|
-
fragments.append(content_value.strip())
|
|
4473
|
+
if item_type != "text":
|
|
4475
4474
|
continue
|
|
4476
|
-
|
|
4477
|
-
|
|
4478
|
-
|
|
4479
|
-
fragments.append(text_value)
|
|
4475
|
+
text_value = item.get("text")
|
|
4476
|
+
if isinstance(text_value, str) and text_value.strip():
|
|
4477
|
+
fragments.append(text_value)
|
|
4480
4478
|
if fragments:
|
|
4481
4479
|
combined = "\n\n".join(fragments)
|
|
4482
4480
|
metadata: Optional[Dict[str, Any]] = None
|
master.py
CHANGED
|
@@ -1716,13 +1716,8 @@ async def _notify_restart_success(bot: Bot) -> None:
|
|
|
1716
1716
|
except Exception as exc:
|
|
1717
1717
|
log.error("发送重启成功通知失败: %s", exc, extra={"chat": chat_id})
|
|
1718
1718
|
else:
|
|
1719
|
+
# 重启成功后不再附带项目列表,避免高频重启时产生额外噪音
|
|
1719
1720
|
log.info("重启成功通知已发送", extra={"chat": chat_id})
|
|
1720
|
-
try:
|
|
1721
|
-
manager = await _ensure_manager()
|
|
1722
|
-
except Exception as ensure_exc:
|
|
1723
|
-
log.error("发送项目概览前获取 manager 失败: %s", ensure_exc)
|
|
1724
|
-
else:
|
|
1725
|
-
await _send_projects_overview_to_chat(bot, chat_id, manager)
|
|
1726
1721
|
finally:
|
|
1727
1722
|
_safe_remove(RESTART_SIGNAL_PATH)
|
|
1728
1723
|
|
scripts/start.sh
CHANGED
|
@@ -102,6 +102,84 @@ ensure_codex_installed() {
|
|
|
102
102
|
|
|
103
103
|
ensure_codex_installed
|
|
104
104
|
|
|
105
|
+
select_python_binary() {
|
|
106
|
+
# 选择满足 CPython <=3.13 的解释器,避免 PyO3 依赖构建失败
|
|
107
|
+
local candidates=()
|
|
108
|
+
local chosen=""
|
|
109
|
+
local name
|
|
110
|
+
if [[ -n "${VIBEGO_PYTHON:-}" ]]; then
|
|
111
|
+
candidates+=("$VIBEGO_PYTHON")
|
|
112
|
+
fi
|
|
113
|
+
for name in python3.13 python3.12 python3.11 python3.10 python3.9 python3; do
|
|
114
|
+
if [[ "${VIBEGO_PYTHON:-}" == "$name" ]]; then
|
|
115
|
+
continue
|
|
116
|
+
fi
|
|
117
|
+
candidates+=("$name")
|
|
118
|
+
done
|
|
119
|
+
|
|
120
|
+
for name in "${candidates[@]}"; do
|
|
121
|
+
if [[ -z "$name" ]]; then
|
|
122
|
+
continue
|
|
123
|
+
fi
|
|
124
|
+
if ! command -v "$name" >/dev/null 2>&1; then
|
|
125
|
+
continue
|
|
126
|
+
fi
|
|
127
|
+
local version_raw
|
|
128
|
+
version_raw=$("$name" -c 'import sys; print(f"{sys.version_info[0]}.{sys.version_info[1]}")' 2>/dev/null) || continue
|
|
129
|
+
local major="${version_raw%%.*}"
|
|
130
|
+
local minor="${version_raw#*.}"
|
|
131
|
+
if [[ "$major" != "3" ]]; then
|
|
132
|
+
log_info "跳过 ${name} (版本 ${version_raw}):非 CPython 3.x"
|
|
133
|
+
continue
|
|
134
|
+
fi
|
|
135
|
+
if [[ "$minor" =~ ^[0-9]+$ ]] && (( minor > 13 )); then
|
|
136
|
+
log_info "跳过 ${name} (版本 ${version_raw}):高于 3.13"
|
|
137
|
+
continue
|
|
138
|
+
fi
|
|
139
|
+
if [[ "$minor" =~ ^[0-9]+$ ]] && (( minor < 9 )); then
|
|
140
|
+
log_info "跳过 ${name} (版本 ${version_raw}):低于 3.9,可能缺少官方轮子"
|
|
141
|
+
continue
|
|
142
|
+
fi
|
|
143
|
+
chosen="$name"
|
|
144
|
+
log_info "使用 Python 解释器:${chosen} (版本 ${version_raw})"
|
|
145
|
+
break
|
|
146
|
+
done
|
|
147
|
+
|
|
148
|
+
if [[ -z "$chosen" ]]; then
|
|
149
|
+
log_error "未找到满足 <=3.13 的 Python 解释器,可通过设置 VIBEGO_PYTHON 指定路径"
|
|
150
|
+
exit 1
|
|
151
|
+
fi
|
|
152
|
+
|
|
153
|
+
printf '%s' "$chosen"
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
# 检查Python依赖是否已安装完整
|
|
157
|
+
check_deps_installed() {
|
|
158
|
+
# 检查虚拟环境是否存在
|
|
159
|
+
if [[ ! -d "$ROOT_DIR/.venv" ]]; then
|
|
160
|
+
log_info "虚拟环境不存在,需要初始化"
|
|
161
|
+
return 1
|
|
162
|
+
fi
|
|
163
|
+
|
|
164
|
+
# 检查虚拟环境的Python解释器
|
|
165
|
+
if [[ ! -x "$ROOT_DIR/.venv/bin/python" ]]; then
|
|
166
|
+
log_info "虚拟环境Python解释器缺失"
|
|
167
|
+
return 1
|
|
168
|
+
fi
|
|
169
|
+
|
|
170
|
+
# 激活虚拟环境并检查关键依赖包
|
|
171
|
+
# aiogram: Telegram Bot框架
|
|
172
|
+
# aiohttp: 异步HTTP客户端
|
|
173
|
+
# aiosqlite: 异步SQLite数据库
|
|
174
|
+
if ! "$ROOT_DIR/.venv/bin/python" -c "import aiogram, aiohttp, aiosqlite" 2>/dev/null; then
|
|
175
|
+
log_info "关键依赖包缺失或损坏"
|
|
176
|
+
return 1
|
|
177
|
+
fi
|
|
178
|
+
|
|
179
|
+
log_info "依赖检查通过,虚拟环境完整"
|
|
180
|
+
return 0
|
|
181
|
+
}
|
|
182
|
+
|
|
105
183
|
if pgrep -f "python.*master.py" >/dev/null 2>&1; then
|
|
106
184
|
log_info "检测到历史 master 实例,正在终止..."
|
|
107
185
|
pkill -f "python.*master.py" || true
|
|
@@ -118,24 +196,38 @@ if pgrep -f "python.*master.py" >/dev/null 2>&1; then
|
|
|
118
196
|
log_info "历史 master 实例已清理"
|
|
119
197
|
fi
|
|
120
198
|
|
|
121
|
-
#
|
|
122
|
-
python3 -m venv .venv
|
|
123
|
-
source .venv/bin/activate
|
|
124
|
-
|
|
125
|
-
# 安装依赖
|
|
199
|
+
# 智能依赖管理:仅在必要时安装
|
|
126
200
|
REQUIREMENTS_FILE="${VIBEGO_REQUIREMENTS_PATH:-$ROOT_DIR/scripts/requirements.txt}"
|
|
127
201
|
if [[ ! -f "$REQUIREMENTS_FILE" ]]; then
|
|
128
202
|
log_error "依赖文件缺失: $REQUIREMENTS_FILE"
|
|
129
203
|
exit 1
|
|
130
204
|
fi
|
|
131
|
-
|
|
205
|
+
|
|
206
|
+
PYTHON_BIN="$(select_python_binary)"
|
|
207
|
+
|
|
208
|
+
# 检查是否需要安装依赖
|
|
209
|
+
if check_deps_installed; then
|
|
210
|
+
log_info "依赖已安装且完整,跳过pip install(加速重启)"
|
|
211
|
+
source .venv/bin/activate
|
|
212
|
+
else
|
|
213
|
+
log_info "首次启动或依赖缺失,正在安装依赖..."
|
|
214
|
+
|
|
215
|
+
# 创建或重建虚拟环境
|
|
216
|
+
"$PYTHON_BIN" -m venv .venv
|
|
217
|
+
source .venv/bin/activate
|
|
218
|
+
|
|
219
|
+
# 安装依赖
|
|
220
|
+
log_info "开始执行 pip install -r $REQUIREMENTS_FILE"
|
|
221
|
+
pip install -r "$REQUIREMENTS_FILE"
|
|
222
|
+
log_info "依赖安装完成"
|
|
223
|
+
fi
|
|
132
224
|
|
|
133
225
|
# 后台启动 master,日志落在 vibe.log
|
|
134
|
-
nohup
|
|
226
|
+
nohup python master.py >> /dev/null 2>&1 &
|
|
135
227
|
log_info "master 已后台启动,日志写入 vibe.log"
|
|
136
228
|
|
|
137
229
|
# 健康检查:等待 master 上线并验证关键 worker
|
|
138
|
-
if !
|
|
230
|
+
if ! python scripts/master_healthcheck.py --project hyphavibebotbackend; then
|
|
139
231
|
log_error "master 健康检查失败,请查看 logs/start.log / vibe.log"
|
|
140
232
|
exit 1
|
|
141
233
|
fi
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# 测试依赖检查函数的逻辑
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
6
|
+
|
|
7
|
+
echo "=== 测试依赖检查函数 ==="
|
|
8
|
+
echo "ROOT_DIR: $ROOT_DIR"
|
|
9
|
+
echo ""
|
|
10
|
+
|
|
11
|
+
# 从start.sh提取check_deps_installed函数进行测试
|
|
12
|
+
check_deps_installed() {
|
|
13
|
+
if [[ ! -d "$ROOT_DIR/.venv" ]]; then
|
|
14
|
+
echo "❌ 虚拟环境不存在"
|
|
15
|
+
return 1
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
if [[ ! -x "$ROOT_DIR/.venv/bin/python" ]]; then
|
|
19
|
+
echo "❌ 虚拟环境Python解释器缺失"
|
|
20
|
+
return 1
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
if ! "$ROOT_DIR/.venv/bin/python" -c "import aiogram, aiohttp, aiosqlite" 2>/dev/null; then
|
|
24
|
+
echo "❌ 关键依赖包缺失或损坏"
|
|
25
|
+
return 1
|
|
26
|
+
fi
|
|
27
|
+
|
|
28
|
+
echo "✅ 依赖检查通过"
|
|
29
|
+
return 0
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
# 测试1:检查当前环境
|
|
33
|
+
echo "【测试1】检查当前虚拟环境状态:"
|
|
34
|
+
if check_deps_installed; then
|
|
35
|
+
echo "结果:依赖完整,重启时将跳过pip install"
|
|
36
|
+
else
|
|
37
|
+
echo "结果:依赖缺失,重启时将执行pip install"
|
|
38
|
+
fi
|
|
39
|
+
echo ""
|
|
40
|
+
|
|
41
|
+
# 测试2:检查虚拟环境目录
|
|
42
|
+
echo "【测试2】虚拟环境目录检查:"
|
|
43
|
+
if [[ -d "$ROOT_DIR/.venv" ]]; then
|
|
44
|
+
echo "✅ .venv 目录存在"
|
|
45
|
+
ls -lh "$ROOT_DIR/.venv/bin/python" 2>/dev/null || echo "❌ Python解释器不存在"
|
|
46
|
+
else
|
|
47
|
+
echo "❌ .venv 目录不存在"
|
|
48
|
+
fi
|
|
49
|
+
echo ""
|
|
50
|
+
|
|
51
|
+
# 测试3:检查关键依赖
|
|
52
|
+
echo "【测试3】关键依赖包检查:"
|
|
53
|
+
if [[ -x "$ROOT_DIR/.venv/bin/python" ]]; then
|
|
54
|
+
for pkg in aiogram aiohttp aiosqlite; do
|
|
55
|
+
if "$ROOT_DIR/.venv/bin/python" -c "import $pkg" 2>/dev/null; then
|
|
56
|
+
echo "✅ $pkg 已安装"
|
|
57
|
+
else
|
|
58
|
+
echo "❌ $pkg 未安装"
|
|
59
|
+
fi
|
|
60
|
+
done
|
|
61
|
+
else
|
|
62
|
+
echo "⚠️ 无法检查(Python解释器不可用)"
|
|
63
|
+
fi
|
|
64
|
+
echo ""
|
|
65
|
+
|
|
66
|
+
echo "=== 测试完成 ==="
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
bot.py,sha256=
|
|
1
|
+
bot.py,sha256=q_aRgSBen4XThKdExfa-6NeX9R_Mgs0UjXYx32rsGzo,249827
|
|
2
2
|
logging_setup.py,sha256=gvxHi8mUwK3IhXJrsGNTDo-DR6ngkyav1X-tvlBF_IE,4613
|
|
3
|
-
master.py,sha256=
|
|
3
|
+
master.py,sha256=Qz2NTapUexVvpQz8Y_pVhKd-uXkqp3M6oclzfAzIuGs,106497
|
|
4
4
|
project_repository.py,sha256=UcthtSGOJK0cTE5bQCneo3xkomRG-kyc1N1QVqxeHIs,17577
|
|
5
5
|
scripts/__init__.py,sha256=LVrXUkvWKoc6Sb47X5G0gbIxu5aJ2ARW-qJ14vwi5vM,65
|
|
6
6
|
scripts/log_writer.py,sha256=8euoMlRo7cbtHApbcEoJnwzLABxti-ovJWFLRN1oDQw,3843
|
|
7
7
|
scripts/master_healthcheck.py,sha256=-X0VVsZ0AXaOb7izxTO_oyu23g_1jsirNdGIcP8nrSI,8321
|
|
8
8
|
scripts/requirements.txt,sha256=QSt30DSSSHtfucTFPpc7twk9kLS5rVLNTcvDiagxrZg,62
|
|
9
9
|
scripts/run_bot.sh,sha256=rM2Op_l4mP9asT3VoTwGQuHocwaxiGyQp2l1PLegsY4,4481
|
|
10
|
-
scripts/start.sh,sha256=
|
|
10
|
+
scripts/start.sh,sha256=IsNjFWXX3qmFxx_7iiVEidTj9VHBUTkNNbsCPoNSL0E,6782
|
|
11
11
|
scripts/start_tmux_codex.sh,sha256=4ko72SK7EDJmzXVuLBOz1_S1lLEmgIpLAVuD7mZhpdk,4018
|
|
12
12
|
scripts/stop_all.sh,sha256=FOz07gi2CI9sMHxBb8XkqHtxRYs3jt1RYgGrEi-htVg,4086
|
|
13
13
|
scripts/stop_bot.sh,sha256=b9vvrke5jeyO18SEBFZxQD09Gf65BgGzeKtpM8sa60Y,3677
|
|
14
|
+
scripts/test_deps_check.sh,sha256=AeSTucbNuNdOPSGvqVp0m31TVFDb0DmU8gSKg-Y5z2I,1696
|
|
14
15
|
scripts/.venv/lib/python3.14/site-packages/pip/__init__.py,sha256=_lgs5Mfp0t7AGtI7sTVwxKWquz_vahWWH9kKO1cJusA,353
|
|
15
16
|
scripts/.venv/lib/python3.14/site-packages/pip/__main__.py,sha256=WzbhHXTbSE6gBY19mNN9m4s5o_365LOvTYSgqgbdBhE,854
|
|
16
17
|
scripts/.venv/lib/python3.14/site-packages/pip/__pip-runner__.py,sha256=JOoEZTwrtv7jRaXBkgSQKAE04yNyfFmGHxqpHiGHvL0,1450
|
|
@@ -429,8 +430,8 @@ vibego_cli/config.py,sha256=33WSORCfUIxrDtgASPEbVqVLBVNHh-RSFLpNy7tfc0s,2992
|
|
|
429
430
|
vibego_cli/deps.py,sha256=1nRXI7Dd-S1hYE8DligzK5fIluQWETRUj4_OKL0DikQ,1419
|
|
430
431
|
vibego_cli/main.py,sha256=e2W5Pb9U9rfmF-jNX9uIA3222lhM0GgcvSdFTDBZd2s,12086
|
|
431
432
|
vibego_cli/data/worker_requirements.txt,sha256=QSt30DSSSHtfucTFPpc7twk9kLS5rVLNTcvDiagxrZg,62
|
|
432
|
-
vibego-0.2.
|
|
433
|
-
vibego-0.2.
|
|
434
|
-
vibego-0.2.
|
|
435
|
-
vibego-0.2.
|
|
436
|
-
vibego-0.2.
|
|
433
|
+
vibego-0.2.11.dist-info/METADATA,sha256=qdYmMPXO440tHnQCLv6SojrTvBsPqj2Pbi1sUrKp9KI,10475
|
|
434
|
+
vibego-0.2.11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
435
|
+
vibego-0.2.11.dist-info/entry_points.txt,sha256=Lsy_zm-dlyxt8-9DL9blBReIwU2k22c8-kifr46ND1M,48
|
|
436
|
+
vibego-0.2.11.dist-info/top_level.txt,sha256=R56CT3nW5H5v3ce0l3QDN4-C4qxTrNWzRTwrxnkDX4U,69
|
|
437
|
+
vibego-0.2.11.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|