admin
03c8363960
feat(cost): 省积分机制 —— 会话预算告警 + Bash 大输出门禁
本会话实测:553 轮 × 平均 42 万 token = 2.33 亿 input,output 仅占 0.35%(286:1)。
根因 = **对话历史是 append-only**:工具输出(`function_call_result`)一旦生成就**永久留在 messages 里、
每轮全量重发**,模型无权删自己的历史 ⇒ **唯一能"去掉"的时机 = 输出被生成之前**
(平台 `contextWindow=100 万` / 压缩阈值 90% 只是放大器,不是根因)。
- `scripts/stop-dialog-guard.py`:
① 修 `-S -E` ⇒ stdin 回退 cp936 ⇒ 含中文 payload 解析失败导致的**静默空转**(改走 buffer 显式 UTF-8,
读写都加固;入口即留痕;根治"日志缺失时无法区分『没被调用』与『被静默 return』")
② 新增 `session_budget()`:读转录 `usage.input_tokens` ⇒ 当前体量 + 累计工具调用 + **上一轮增量**
③ 阈值 `BUDGET_TOKENS=120000` / `BUDGET_TOOLS=80` ⇒ 超预算经 `UserPromptSubmit` 注入告警
- `scripts/bash-output-guard.py`(新):`PreToolUse(Bash)` 拦"几乎必然巨大"的 6 条读命令
(`cat *.log/jsonl` 无管道 / `grep -r` 无管道 / `ls -laR` / `find /` / `journalctl` 无 `-n` / `dmesg` 无 `head`),
deny 文案**必给等价限流写法**。
**设计(用户质疑"全拦也有问题")**:⛔ **不全拦** —— 误拦挡住正事比漏拦更贵 ⇒
默认只拦高置信度、**拿不准一律放行**、`rg`/`git log`/`du·tree` 仅 `hard` 模式拦、
可 `off` 急停(`<工作区>/.workbuddy/bash-guard-mode`)、任何异常 **fail-open**。
实测 8/8:soft 拦 cat/ls-lR、放行 rg/git-log/grep+head;hard 全拦;off 全放;deny JSON 正确输出。
- (`settings.json` 的 `PreToolUse` 已加 `"matcher": "Bash"` 条目 —— **该文件不在仓库内**,
且 hooks 是**启动时快照** ⇒ **Bash 门禁需完全重启才生效**;脚本内容本身每次现读、改完即生效。)
⚠️ 记录两个已踩的坑:Python `%` 格式串里的**裸 `%` 必须写 `%%`**(否则 `TypeError` ⇒ 在 `except: pass` 里
**静默失效**,表现为"日志有 DENY 但 stdout 空"= 看起来拦了其实没生效)⇒ **hook 必须"写日志 + emit"双动作**。
2026-09-15 21:17:08 +08:00
..
2026-09-15 18:47:13 +08:00
2026-09-15 18:47:13 +08:00
2026-09-15 21:17:08 +08:00
2026-09-15 18:47:13 +08:00
2026-09-15 18:47:13 +08:00
2026-09-15 18:47:13 +08:00
2026-09-15 18:47:13 +08:00
2026-09-15 18:47:13 +08:00
2026-09-15 18:47:13 +08:00
2026-09-15 18:47:13 +08:00
2026-09-15 18:47:13 +08:00
2026-09-15 18:47:13 +08:00
2026-09-15 18:47:13 +08:00
2026-09-15 18:47:13 +08:00
2026-09-15 18:47:13 +08:00
2026-09-15 18:47:13 +08:00
2026-09-15 18:47:13 +08:00
2026-09-15 18:47:13 +08:00
2026-09-15 18:47:13 +08:00
2026-09-15 18:47:13 +08:00
2026-09-15 18:47:13 +08:00
2026-09-15 18:47:13 +08:00
2026-09-15 18:47:13 +08:00
2026-09-15 18:47:13 +08:00
2026-09-15 21:17:08 +08:00