Переглянути джерело

fix(tool-cbm-quiet): 修复 wrapper 破坏 0.11 daemon 并清理上游 pi 冲突产物

- 去掉 wrapper 的 `exec -a "codebase-memory-mcp"`:覆盖 argv[0] 会导致
  codebase-memory-mcp >= 0.11 的 daemon rendezvous 失败
  (daemon endpoint held by pid ... answered no rendezvous),普通 exec 即可
  在保留 stderr 重定向的同时保持 daemon 健康。
- 新增步骤 4.5:清理上游 install.sh 为 pi 生成的无 cbm_ 前缀产物
  (extensions/cbmem.ts、全局 AGENTS.md、同名 skill),避免与本项目统一
  使用的 npm:pi-codebase-memory-mcp(cbm_* 前缀)重复注册/命名冲突;
  可用 CBM_KEEP_UPSTREAM_PI=1 跳过。
- CBM_MCP_BIN 写入扩展为 ~/.bashrc + ~/.zshrc(macOS 默认 zsh)。
b 1 місяць тому
батько
коміт
3c0107036d
1 змінених файлів з 42 додано та 8 видалено
  1. 42 8
      tool-cbm-quiet.sh

+ 42 - 8
tool-cbm-quiet.sh

@@ -46,8 +46,12 @@ cat >"$WRAPPER" <<'WRAPPER_EOF'
 #!/bin/bash
 # codebase-memory-mcp wrapper — redirect stderr to log file
 # This file is at a dedicated path and won't be overwritten by reinstall
+# NOTE: do NOT use `exec -a "codebase-memory-mcp"` here. Overriding argv[0]
+# breaks the codebase-memory-mcp >= 0.11 daemon rendezvous (the daemon is
+# started with the wrapper's argv[0], then cannot be reached). Plain exec
+# keeps the daemon healthy while still redirecting stderr.
 BIN_DIR="$(cd "$(dirname "$0")" && pwd)"
-exec -a "codebase-memory-mcp" "${BIN_DIR}/codebase-memory-mcp.real" 2>/tmp/cbm-error.log
+exec "${BIN_DIR}/codebase-memory-mcp.real" 2>/tmp/cbm-error.log
 WRAPPER_EOF
 chmod +x "$WRAPPER"
 
@@ -59,6 +63,33 @@ if [ -f "$REAL_BIN" ]; then
 	cp "$REAL_BIN" "$DEFAULT_BIN"
 fi
 
+# ------------------------------------------
+# 4.5 清理上游 install.sh 生成的 pi 冲突产物
+# ------------------------------------------
+# 上游 install.sh 会为 pi 生成无 cbm_ 前缀的扩展(extensions/cbmem.ts)、
+# 全局 AGENTS.md 与同名 skill。本项目统一走 npm:pi-codebase-memory-mcp
+# (cbm_* 前缀,与本仓 agent 白名单/文档一致),故移除这些冲突产物。
+# 重复运行本脚本会重新生成,此处每次清理即可;如确需保留上游 pi 集成,
+# 可设置 CBM_KEEP_UPSTREAM_PI=1 跳过。
+PI_DIR="${HOME}/.pi/agent"
+if [ "${CBM_KEEP_UPSTREAM_PI:-0}" = "1" ]; then
+	warn "CBM_KEEP_UPSTREAM_PI=1,跳过 pi 冲突产物清理"
+else
+	if [ -f "${PI_DIR}/extensions/cbmem.ts" ] && grep -q "codebase-memory-mcp:start" "${PI_DIR}/extensions/cbmem.ts"; then
+		info "移除上游 pi 扩展: ${PI_DIR}/extensions/cbmem.ts"
+		rm -f "${PI_DIR}/extensions/cbmem.ts"
+		rmdir "${PI_DIR}/extensions" 2>/dev/null || true
+	fi
+	if [ -f "${PI_DIR}/AGENTS.md" ] && grep -q "codebase-memory-mcp:start" "${PI_DIR}/AGENTS.md"; then
+		info "移除上游全局 AGENTS.md: ${PI_DIR}/AGENTS.md"
+		rm -f "${PI_DIR}/AGENTS.md"
+	fi
+	if [ -f "${PI_DIR}/skills/codebase-memory/SKILL.md" ] && ! grep -q "cbm_" "${PI_DIR}/skills/codebase-memory/SKILL.md"; then
+		info "移除上游 pi skill: ${PI_DIR}/skills/codebase-memory"
+		rm -rf "${PI_DIR}/skills/codebase-memory"
+	fi
+fi
+
 # ------------------------------------------
 # 5. 设置 CBM_MCP_BIN 环境变量
 # ------------------------------------------
@@ -76,13 +107,16 @@ else
 	warn "非 root 用户,跳过 /etc/environment"
 fi
 
-# 写入 ~/.bashrc(用户级,兜底)
-if ! grep -q "CBM_MCP_BIN" "${HOME}/.bashrc" 2>/dev/null; then
-	info "写入 ~/.bashrc"
-	echo "export ${ENV_VAR}" >>"${HOME}/.bashrc"
-else
-	warn "~/.bashrc 已存在 CBM_MCP_BIN,跳过"
-fi
+# 写入 ~/.bashrc / ~/.zshrc(用户级,兜底;macOS 默认 zsh)
+for RC in "${HOME}/.bashrc" "${HOME}/.zshrc"; do
+	[ -e "$RC" ] || continue
+	if ! grep -q "CBM_MCP_BIN" "$RC" 2>/dev/null; then
+		info "写入 ${RC}"
+		echo "export ${ENV_VAR}" >>"$RC"
+	else
+		warn "${RC} 已存在 CBM_MCP_BIN,跳过"
+	fi
+done
 
 # ------------------------------------------
 # 6. 输出结果