- cursor-config/ 项目级+用户级 MCP 与 rules 模板 - deploy-cursor-config.sh 一键部署 - retire_cochat.sh 支持 patchNativeOk 并自动卸载扩展 - mcp-config/cursor.mcp.json 同步 ensure-hub 唯一套 Co-authored-by: Cursor <cursoragent@cursor.com>
115 lines
3.4 KiB
Bash
Executable File
115 lines
3.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# FR-RETIRE: 卸载 co-chat 扩展,Cursor 仅保留 pchat(patchNativeOk 可过门禁)
|
||
set -euo pipefail
|
||
|
||
BACKUP_ROOT="$HOME/.persistent-chat-local/backups/cochat-retire-$(date +%Y%m%d-%H%M%S)"
|
||
ENHANCE="$HOME/.persistent-chat-local/composer-enhance.json"
|
||
WS="${PCHAT_WORKSPACE:-/Users/karuo/Documents/个人}"
|
||
|
||
echo "=== pchat retire co-chat ==="
|
||
|
||
gate_ok=false
|
||
if [[ -f "$ENHANCE" ]]; then
|
||
read -r permOk patchOk patchNativeOk cursorPrefOk <<< "$(python3 -c "
|
||
import json
|
||
s=json.load(open('$ENHANCE'))
|
||
print(s.get('permOk',False), s.get('patchOk',False), s.get('patchNativeOk',False), s.get('cursorPrefOk',False))
|
||
" 2>/dev/null || echo "False False False False")"
|
||
w8=false
|
||
[[ "$patchOk" == "True" || "$patchNativeOk" == "True" ]] && w8=true
|
||
if [[ "$permOk" == "True" && "$cursorPrefOk" == "True" && "$w8" == true ]]; then
|
||
gate_ok=true
|
||
else
|
||
echo "阻断:门禁未过 permOk=$permOk patchOk=$patchOk patchNativeOk=$patchNativeOk cursorPrefOk=$cursorPrefOk"
|
||
exit 1
|
||
fi
|
||
else
|
||
echo "警告:无 composer-enhance.json"
|
||
exit 1
|
||
fi
|
||
|
||
mkdir -p "$BACKUP_ROOT"
|
||
|
||
for ext in "$HOME/.cursor/extensions"/co-chat.co-chat-panel-*; do
|
||
[[ -d "$ext" ]] || continue
|
||
echo "备份 $ext"
|
||
cp -R "$ext" "$BACKUP_ROOT/"
|
||
done
|
||
|
||
GS="$HOME/Library/Application Support/Cursor/User/globalStorage/co-chat.co-chat-panel"
|
||
if [[ -d "$GS" ]]; then
|
||
cp -R "$GS" "$BACKUP_ROOT/globalStorage-co-chat"
|
||
echo "保留 globalStorage(pchat 原生增强仍读写 storage.json)"
|
||
fi
|
||
|
||
for mcp in "$HOME/.cursor/mcp.json" "$WS/.cursor/mcp.json"; do
|
||
[[ -f "$mcp" ]] && cp "$mcp" "$BACKUP_ROOT/$(basename "$(dirname "$mcp")")-mcp.json.bak"
|
||
done
|
||
|
||
# 删除 co-chat 扩展
|
||
for ext in "$HOME/.cursor/extensions"/co-chat.co-chat-panel-*; do
|
||
[[ -d "$ext" ]] || continue
|
||
echo "删除 $ext"
|
||
rm -rf "$ext"
|
||
done
|
||
|
||
# 退役 workspace co-chat.mdc
|
||
if [[ -f "$WS/开发文档/脚本/pchat_retire_co_rule.sh" ]]; then
|
||
bash "$WS/开发文档/脚本/pchat_retire_co_rule.sh" "$WS"
|
||
fi
|
||
|
||
# 用户级 mcp:空(避免与项目级重复)
|
||
cat > "$HOME/.cursor/mcp.json" << 'EOF'
|
||
{
|
||
"mcpServers": {}
|
||
}
|
||
EOF
|
||
|
||
# 项目级 mcp:pchat + codegraph 唯一套
|
||
cat > "$WS/.cursor/mcp.json" << 'EOF'
|
||
{
|
||
"mcpServers": {
|
||
"persistent-chat": {
|
||
"type": "stdio",
|
||
"command": "/Users/karuo/.persistent-chat-local/ensure-hub.sh",
|
||
"args": ["--workspace=/Users/karuo/Documents/个人"],
|
||
"env": {
|
||
"PCHAT_HTTP_PORT": "13458",
|
||
"PCHAT_NODE": "/usr/local/opt/node@22/bin/node",
|
||
"PCHAT_WORKSPACE": "/Users/karuo/Documents/个人",
|
||
"PCHAT_VSIX_4TOOLS": "1",
|
||
"PCHAT_TOOL_SET": "4"
|
||
},
|
||
"disabled": false,
|
||
"autoApprove": [
|
||
"wait_for_user_input",
|
||
"init_conversation",
|
||
"merge_conversation",
|
||
"select_conversation"
|
||
]
|
||
},
|
||
"codegraph": {
|
||
"type": "stdio",
|
||
"command": "/Users/karuo/Documents/个人/卡若AI/04_卡火(火)/火种_知识模型/CodeGraph_MCP语义代码图谱/脚本/codegraph_mcp_serve.sh",
|
||
"args": ["${workspaceFolder}"],
|
||
"disabled": false,
|
||
"autoApprove": [
|
||
"codegraph_search",
|
||
"codegraph_callers",
|
||
"codegraph_callees",
|
||
"codegraph_impact",
|
||
"codegraph_node",
|
||
"codegraph_context",
|
||
"codegraph_explore",
|
||
"codegraph_files",
|
||
"codegraph_status"
|
||
]
|
||
}
|
||
}
|
||
}
|
||
EOF
|
||
|
||
echo "备份: $BACKUP_ROOT"
|
||
echo "完成:co-chat 扩展已删 · co-chat.mdc 已退役 · MCP 已统一为 pchat"
|
||
echo "请 Cmd+Q 重启 Cursor"
|