车东 Che, Dong

Tue 01 September, 2026

23:14 feat: cache-bust CSS/JS with version query + improve MCP search descr… » Recent Commits to phpman:master
feat: cache-bust CSS/JS with version query + improve MCP search description

- src/web_header.php: phpman.css?v=PHPMAN_VERSION
- src/web_footer.php: phpman.js?v=PHPMAN_VERSION
- src/mcp_server.php: cli_search description — mention FTS5 full-text,
  cross-source search (man/perldoc/info/pydoc/ri), Perl module support
- src/mcp_server.php: instructions — search examples with :: modules

Server-side .htaccess (manual):
  <FilesMatch '\.(css|js)$'>
    Header set Cache-Control 'public, max-age=31536000, immutable'
  </FilesMatch>

Co-Authored-By: Claude Code deepseek-v4-pro <noreply@taotoken.net>
10:15 OpenClaw 升级后 Telegram 无响应:修复 invalid persisted session row 与 Legacy exec approvals 迁移 » 笔记 by 车东

OpenClaw 2026.8.1 升级后 Gateway 反复重启,openclaw doctorinvalid persisted session row requires repair,Telegram bot 一直没反应。排查到最后发现:Telegram 无响应的真正原因和 doctor --fix 卡住的其实是同一个东西——未迁移的 legacy exec-approvals.json 触发了 ExecApprovalsMigrationRequiredError 门卫,所有 exec-approvals 消费者(含 telegram 通道)拒绝启动。本文记录完整排查与修复过程。

TLDR

  1. session 损坏session_nodes 表里残留了 2 条窗口缺失的 :run: 别名行(entry_json='{}'),openclaw doctor --fix 会先触发自己的校验守卫报 invalid persisted session row,没法自助修复。手动删掉这 2 条即可。
  2. legacy session store:老的 ~/.openclaw/agents/main/sessions/sessions.json 需要迁移,跑 openclaw doctor --session-sqlite import 导入。
  3. Telegram 无响应(真凶)~/.openclaw/exec-approvals.json 没迁移到 SQLite。assertNoPendingLegacyExecApprovals 门卫在启动时检查这个文件,存在就抛 ExecApprovalsMigrationRequiredError,Telegram 通道起不来,日志里只看到 auto-restart attempt N/10 无限循环——底层错误被 LaunchAgent 的 StandardErrorPath=/dev/null 吞掉了。把 legacy 文件导入 state DB 的 exec_approvals_config 表并改名为 .migrated 后,Gateway 健康监控自动拉起 Telegram,恢复响应。

现象

升级到 OpenClaw 2026.8.1 后,openclaw doctor 报错:

00:21 docs: CLAUDE.md 分支约定 — 明确 master 为主干,勿 push 其他分支名 » Recent Commits to phpman:master
docs: CLAUDE.md 分支约定 — 明确 master 为主干,勿 push 其他分支名
00:16 docs: CLAUDE.md 分支约定 — default 计划统一为 main(过渡期仍 push master) » Recent Commits to phpman:master
docs: CLAUDE.md 分支约定 — default 计划统一为 main(过渡期仍 push master)

Mon 31 August, 2026

00:22 fix: showForm 传入 markdown/json URL 修复 not-found 兜底链接失效 » Recent Commits to phpman:master
fix: showForm 传入 markdown/json URL 修复 not-found 兜底链接失效
00:13 Codex 配置 GitHub MCP:解决 "Environment variable is not set" 报错 » 笔记 by 车东

TLDR

Codex 里给 GitHub MCP server 配好 bearer_token_env_var 后,仍报 Environment variable CODEX_GITHUB_PERSONAL_ACCESS_TOKEN ... is not set。根因:bearer_token_env_var 读的是 codex 自身进程 的环境变量,而把 token 塞进 ~/.codex/config.toml[shell_environment_policy.set] 只注入它派生的 shell,到不了自身进程。正确做法是把环境变量 export~/.zshrc,在启动 codex 前就位。

问题

按 GitHub MCP server 官方指南配好 [mcp_servers.github],codex 启动时仍报:

⚠ MCP client for `github` failed to start: MCP startup failed: Environment variable CODEX_GITHUB_PERSONAL_ACCESS_TOKEN for MCP server 'github' is not set

根因

两个事实叠加:

事实 说明
Codex 不支持 inline bearer_token MCP server 配置只认 bearer_token_env_var,官方 schema 已把 inline bearer_token 字段隐藏(openai/codex #19294
bearer_token_env_var 读的是自身进程环境 它存的是「去哪个环境变量取 token」的名字,codex 连接时从自身进程读,不是从它派生的 bash 读

打个比方(仅为帮助理解):bearer_token_env_var 是一块「钥匙放在 X 口袋里」的告示牌,codex 只会翻自己的口袋(自身进程环境)。而 [shell_environment_policy.set] 是把钥匙塞进它派生的子进程口袋——塞错了地方。

Sun 30 August, 2026

21:11 Codex 0.151 弃用 `api_key`:taotoken provider 改用 `requires_openai_auth` » 笔记 by 车东

接上一篇《Claude Code + Codex 多机配置对齐排错》:当时用 api_key 修好了 401,升级到 Codex 0.151 后这个方案失效了。

TLDR

Codex CLI 升级到 0.151.0 后,~/.codex/config.toml[model_providers.taotoken] 里写的 api_key = "sk-***" 被静默忽略,请求不带 Authorization 头,taotoken 网关返回 invalid_request_error: You didn't provide an API key

修复:删掉 provider 里的 api_key,改为 requires_openai_auth = true,让 Codex 从 ~/.codex/auth.jsonOPENAI_API_KEY 读密钥(taotoken CLI 本来就把 key 写在那里)。

问题

升级 codex 后(本机 Homebrew cask 更新到 0.151.0),codex 一调用就报:

{"error":{"message":"You didn't provide an API key. You need to provide your API key in an Authorization header using Bearer auth...","type":"invalid_request_error"}}

请求到达了网关,但没带密钥头 → 配置里的 key 没生效。

Thu 13 August, 2026

08:24 tools: 迁移 Tailscale mesh 工具至 chedong.com 仓库 » Recent Commits to phpman:master
tools: 迁移 Tailscale mesh 工具至 chedong.com 仓库

tailscale-mesh-bench.sh 移至 https://github.com/chedong/chedong.com
(cli/tools/tailscale/),phpman 不再维护该脚本。
git 历史保留本文件全部提交记录。

Co-Authored-By: Claude Code / deepseek-v4-flash / auto

Wed 12 August, 2026

23:22 tools: 发现阶段自动跳过跨 tailnet 共享节点 » Recent Commits to phpman:master
tools: 发现阶段自动跳过跨 tailnet 共享节点

- 用 tailscale status --json 的 DNSName 后缀识别跨网节点(如 mbprolia.tail2bbe8a.ts.net 与同网 tail8433bf 不同)
- 跨网共享节点无法用本网 IP 主动建链(mesh 测试必 UNREACH), 发现时自动排除
- ID_STATUS 获取上移到发现循环前, 一次 python 解析同时产出跨网集合与 StableID 映射
- 消除 mbprolia 5 条 UNREACH 链路拖慢测速的问题

Co-Authored-By: Claude Code / deepseek-v4-flash / auto
12:57 tools: mesh 带宽统一使用 Mb/s 单位(含 code-review 缺陷修复) » Recent Commits to phpman:master
tools: mesh 带宽统一使用 Mb/s 单位(含 code-review 缺陷修复)

- iperf3 解析支持 G/M/K bits/sec,统一归一为 Mb/s 紧凑 token(如 96.5Mb/s、0.262Mb/s、1120Mb/s)
- 修复报表与 JSON 之前丢失单位的问题(matrix token 无空格,awk $3 仍可解析)
- 修复 Gbits/sec 链路被误判为 ERR 的问题
- --skip/--only 改为词边界匹配,避免短 token(如 "mb")误命中多个节点
- ID_STATUS 增加 SSH 回退,与 STATUS 发现逻辑一致
- ExitNodeID 解析只捕获引号值(NULL/缺失视为无 exit node)
- 移除死代码 LABELS 数组;EXITUSAGE 改逗号分隔保持空元素语义

Co-Authored-By: Claude Code / deepseek-v4-flash / auto
12:33 tools: mesh 报告列出各节点对 exit node 的使用情况 » Recent Commits to phpman:master

Tue 11 August, 2026

09:42 tools: 将当前执行节点纳入 mesh 测速 » Recent Commits to phpman:master
01:26 tools: 使 mesh 测速脚本支持本地 status、config 收编节点、无参数显示 help » Recent Commits to phpman:master

Sat 08 August, 2026

03:07 v4.10: remove LLM enhancement — batch-enhance, callLLM, enhanceManPage » Recent Commits to phpman:master

Fri 07 August, 2026

01:56 feat: add --help / -h to tailscale-mesh-bench.sh » Recent Commits to phpman:master

Thu 06 August, 2026

23:05 feat: Tailscale mesh iperf3 bandwidth benchmark script » Recent Commits to phpman:master

Fri 31 July, 2026

04:15 fix: emoji cache entries never expire (7d TTL caused mass data loss) » Recent Commits to phpman:master

Fri 24 July, 2026

03:22 fix: PageCache::set() guards against overwriting valid content with e… » Recent Commits to phpman:master
02:12 feat: generate compressed sitemap during reindex » Recent Commits to phpman:master

Tue 21 July, 2026

23:21 Docs: CSP nonce + strict-dynamic strategy (#158) + v4.9 PLANDOC entry » Recent Commits to phpman:master