name: 技能-刷新 description: 管理Claude Code资源 - 终止孤儿进程并清理~/.opencode/目录 allowed-tools: Bash, AskUserQuestion
刷新技能(直接执行)
直接执行技能,用于管理Claude Code资源。执行两个操作:
- 进程清理:识别并终止孤儿Claude Code进程
- 目录清理:清理~/.opencode/中累积的文件
此技能内联执行,无需生成子代理。
执行
步骤1:解析参数
从命令输入中提取标志:
--dry-run:预览模式--force:跳过确认,使用8小时默认值
# 从命令输入解析
dry_run=false
force=false
if [[ "$*" == *"--dry-run"* ]]; then
dry_run=true
fi
if [[ "$*" == *"--force"* ]]; then
force=true
fi
步骤2:运行进程清理
执行进程清理脚本:
.opencode/scripts/claude-refresh.sh $( [ "$force" = true ] && echo "--force" )
存储进程清理输出以供显示。
步骤3:清理孤儿后飞行标记
清理specs目录中的任何孤儿后飞行协调文件。这些文件通常在后飞行完成后由技能清理,但如果进程中断,可能会残留。
echo ""
echo "=== 清理孤儿后飞行标记 ==="
echo ""
# 查找孤儿后飞行标记(超过1小时)
orphaned_pending=$(find specs -maxdepth 3 -name ".postflight-pending" -mmin +60 -type f 2>/dev/null)
orphaned_guard=$(find specs -maxdepth 3 -name ".postflight-loop-guard" -mmin +60 -type f 2>/dev/null)
# 同时检查遗留的全局标记
legacy_pending=""
legacy_guard=""
if [ -f "specs/.postflight-pending" ]; then
legacy_pending="specs/.postflight-pending"
fi
if [ -f "specs/.postflight-loop-guard" ]; then
legacy_guard="specs/.postflight-loop-guard"
fi
if [ -n "$orphaned_pending" ] || [ -n "$orphaned_guard" ] || [ -n "$legacy_pending" ] || [ -n "$legacy_guard" ]; then
if [ "$dry_run" = true ]; then
echo "将删除以下孤儿标记:"
[ -n "$orphaned_pending" ] && echo "$orphaned_pending"
[ -n "$orphaned_guard" ] && echo "$orphaned_guard"
[ -n "$legacy_pending" ] && echo "$legacy_pending"
[ -n "$legacy_guard" ] && echo "$legacy_guard"
else
# 删除孤儿任务范围的标记
find specs -maxdepth 3 -name ".postflight-pending" -mmin +60 -delete 2>/dev/null
find specs -maxdepth 3 -name ".postflight-loop-guard" -mmin +60 -delete 2>/dev/null
# 删除遗留的全局标记
rm -f specs/.postflight-pending 2>/dev/null
rm -f specs/.postflight-loop-guard 2>/dev/null
echo "已清理孤儿后飞行标记。"
fi
else
echo "未找到孤儿后飞行标记。"
fi
步骤4:运行目录调查
显示当前目录状态,不进行清理:
.opencode/scripts/claude-cleanup.sh
这会显示:
- 当前~/.opencode/目录大小
- 按目录细分
- 可回收的空间
步骤5:基于模式执行
干运行模式
如果设置 --dry-run:
echo ""
echo "=== 干运行模式 ==="
echo "显示8小时清理预览..."
echo ""
.opencode/scripts/claude-cleanup.sh --dry-run --age 8
显示预览后退出。
强制模式
如果设置 --force:
echo ""
echo "=== 执行清理(8小时默认值)==="
echo ""
.opencode/scripts/claude-cleanup.sh --force --age 8
显示结果并退出。
交互模式(默认)
如果未设置任何标志:
-
检查清理候选是否存在(如果找到候选,claude-cleanup.sh 退出代码为1)
-
如果没有候选,显示消息并退出:
在默认阈值内未找到清理候选。
所有文件要么受保护,要么最近修改过。
- 如果候选存在,提示用户选择年龄阈值:
{
"question": "选择清理年龄阈值:",
"header": "年龄阈值",
"multiSelect": false,
"options": [
{
"label": "8小时(默认)",
"description": "删除超过8小时的文件 - 积极清理"
},
{
"label": "2天",
"description": "删除超过2天的文件 - 保守清理"
},
{
"label": "彻底清理",
"description": "删除除安全边际(1小时)外的所有内容"
}
]
}
-
将用户选择映射到年龄参数:
- “8小时(默认)” →
--age 8 - “2天” →
--age 48 - “彻底清理” →
--age 0
- “8小时(默认)” →
-
使用选定的年龄执行清理:
case "$selection" in
"8小时(默认)")
.opencode/scripts/claude-cleanup.sh --force --age 8
;;
"2天")
.opencode/scripts/claude-cleanup.sh --force --age 48
;;
"彻底清理")
.opencode/scripts/claude-cleanup.sh --force --age 0
;;
esac
- 显示清理结果
示例执行流程
交互流程
# 用户运行:/refresh
# 输出:
Claude Code 刷新
===================
未找到孤儿进程。
所有3个Claude进程都是活动会话。
---
Claude Code 目录清理
=============================
目标:~/.opencode/
当前总大小:7.3 GB
扫描目录中...
目录 总计 可清理 文件数
---------- ------- ---------- -----
projects/ 7.0 GB 6.5 GB 980
debug/ 151.0 MB 140.0 MB 650
...
总计 7.3 GB 6.7 GB 5577
可回收空间:6.7 GB
# 提示出现:
[年龄阈值]
选择清理年龄阈值:
1. 8小时(默认)- 删除超过8小时的文件
2. 2天 - 删除超过2天的文件
3. 彻底清理 - 删除除安全边际外的所有内容
# 用户选择选项1
# 清理执行:
清理完成
================
已删除:5577 文件
失败: 0 文件
回收空间:6.7 GB
新总大小:600.0 MB
干运行流程
# 用户运行:/refresh --dry-run
# 显示调查,然后:
=== 干运行模式 ===
显示8小时清理预览...
将删除:5577 文件
将回收:6.7 GB
干运行总结
===============
未进行任何更改。
强制流程
# 用户运行:/refresh --force
# 显示调查,然后立即:
=== 执行清理(8小时默认值)===
清理完成
================
已删除:5577 文件
回收空间:6.7 GB
安全措施
受保护文件(永不删除)
sessions-index.json(在每个项目目录中)settings.json.credentials.jsonhistory.jsonl
安全边际
过去一小时内修改的文件永不删除,无论年龄阈值如何。
进程安全
- 仅针对孤儿进程(TTY = “?”)
- 从不杀死活动会话
- 排除当前进程树
错误处理
脚本未找到
如果脚本不存在:
错误:在 .opencode/scripts/ 中未找到清理脚本
请确保 claude-refresh.sh 和 claude-cleanup.sh 已安装。
权限被拒绝
如果因权限而导致终止/删除失败:
警告:由于权限不足,某些操作失败。
失败文件:5
成功删除:5572 文件
无 ~/.opencode/ 目录
如果目录不存在:
错误:未找到 ~/.opencode/ 目录。
无需清理。