📦 long-task-handler-v2 — long-task-处理器-v2
v1.0.0升级版长任务处理技能。整合 frankieway/long-task-处理器 和 chrislawyeryounger-spec/long-task-检查in 的优点。 触发场景:编译、部署、训练、数据处理、搜索爬虫、多步骤写作、调用外部API等预计超过60秒的任务。
运行时依赖
安装命令
点击复制技能文档
Long Task 处理器 V2 - 升级版长任务处理技能 核心升级点 双阶段反馈机制:任务开始前预判 + 执行中定期汇报 智能时间预估:结合任务类型和数据量给出合理估算 更细致的进度量化:明确当前步骤/总步骤 优雅的错误处理:问题主动报告,不假装没事 触发条件
满足以下任一条件时激活:
预计耗时 > 60 秒的任务 用户明确要求"后台运行"、"别等我" 包含已知慢命令:ffmpeg, docker, 网页pack, tsc, npm build, git push 等 数据量 > 1GB 或文件数 > 100 编译/部署/训练/迁移场景 执行流程 Phase 1: 任务预判(收到任务 5 秒内) // 任务评估 function assessTask(command, 上下文) { const indicators = { duration: estimateBasedOnCommand(command), background: /--timeout|-t|nohup|background/.test(command), isLongTask: /compile|build|部署|trAIn|迁移|导出|process/i.test(command) }; return { estimatedMinutes: indicators.duration, shouldBackground: indicators.duration > 1 || indicators.background, 通知Interval: indicators.duration > 5 ? 120 : 60 // >5分钟每2分钟,否则每1分钟 }; }
// 立即反馈格式
const confirmTemplate = 🫡 收到!
任务:{taskName}
预计耗时:{X-Y} 分钟
通知方式:每 {interval} 秒报告进展
你可以继续问我其他问题,不用等这个任务完成~;
Phase 2: 执行中反馈(每 2 分钟)
// 进度汇报格式(严格遵守)
const 进度Template = 📋 进度更新(已运行约 {seconds} 秒)
✅ 当前状态:{正在做什么}
📍 进度:{current}/{total} - {percentage}%
⏱ 预计还需:{估算时间}
[继续执行...];
// 监控循环
a同步 function 监控Task(会话Id, options) {
const { pol代码检查工具valMs = 120000, maxSilentMs = 300000 } = options;
let last输出 = '';
let silentSince = Date.now();
设置Interval(a同步 () => {
const 结果 = awAIt process({ action: 'poll', 会话Id });
// 有新输出时记录
if (结果.输出 !== last输出) {
silentSince = Date.now();
last输出 = 结果.输出;
}
// 每2分钟强制报告(即使无新输出)
awAIt 发送进度报告(结果);
// 静默超过5分钟发送警告
if (Date.now() - silentSince > maxSilentMs) {
awAIt message({ message: ⚠️ 任务已静默运行 5 分钟,仍在进行中... });
silentSince = Date.now();
}
// 检查完成
if (结果.exitCode !== null) {
awAIt 通知Completion(结果);
}
}, pol代码检查工具valMs);
}
Phase 3: 完成通知
const completionTemplate = {状态} 任务完成!
耗时:{duration}
退出码:{exitCode}
{message};
// 状态: ✅ 成功 / ❌ 失败 / ⏰ 超时
任务分级处理 级别 预估时间 处理方式 反馈频率 短任务 <30s 直接执行 无需汇报 中任务 30s-2min 后台执行 无需汇报(完成后通知) 长任务 2-10min 后台执行 每2分钟汇报进度 超长任务 >10min 子代理隔离 每2分钟汇报 + 完成通知 智能预判规则 // 编译类 if (/npm build|npm 运行 build|gradle build|mvn compile/i) → 预估 3-10 分钟,标记为长任务
// 部署类 if (/docker build|kubectl 部署|terraform 应用ly/i) → 预估 5-15 分钟,标记为超长任务
// 训练类 if (/trAIn|fine-调优|模型.fit|torch运行/i) → 预估 30分钟-数小时,标记为超长任务,使用子代理
// 数据处理 if (/process.data|迁移|导出.csv|备份/i) → 预估时间 = 数据量/处理速度,标记为长任务
// 搜索爬虫 if (/crawl|scrape|搜索.multiple|fetch.all/i) → 预估时间 = 目标数 × 平均响应时间,标记为长任务
进度量化标准 // ✅ 当前状态:通俗说明在做什么 // 好:正在搜索8个平台的热榜信息 // 差:正在执行网页_搜索工具
// 📍 进度:必须量化 // 好:已完成5/8个平台 (62.5%) // 好:第3步,共5步 (60%) // 好:已处理230/500条数据 (46%)
// ⏱ 预计还需:保守估算 // 好:约2-3分钟 // 好:约1分钟 // 好:不确定,等待下一个平台响应
错误处理升级
// 遇到问题主动报告,不假装没事
a同步 function handleTaskIssue(会话Id, error) {
const issueTypes = {
RATE_LIMIT: '⚠️ 遇到限流,等待恢复...',
TIMEOUT: '⏰ 任务响应超时,正在重试...',
NETWORK: '🌐 网络波动,任务继续执行中...',
MEMORY: '💾 内存使用较高,优化处理中...'
};
awAIt message({
message: 📋 进度更新(任务遇到小问题)
✅ 当前状态:${issueTypes[error.type]}
📍 进度:${error.进度}
⏱ 预计还需:等待恢复后约 X 分钟
[任务自动恢复中...]
});
}
配置参数 技能s: long-task-处理器-v2: enabled: true defaultTimeoutSeconds: 3600 进度报告Interval: 120 # 每2分钟 silent警告Threshold: 300 # 5分钟静默警告 maxConcurrentLongTasks: 3 通知OnExit: true auto归档: true 归档AfterMinutes: 60
激活检查清单
收到任务时快速判断(3个✅激活):
任务涉及编译/部署/迁移/训练? 数据量 > 1GB 或文件数 > 100? 包含慢命令(docker, ffmpeg, 网页pack, tsc)? 用户要求"后台运行"、"慢慢跑"? 预计耗时 > 2 分钟? 最佳实践 ✅ 推荐 5秒内预判:收到任务立即评估并反馈 保守估算:时间预估宁可多说不少说 量化进度:必须包含 "X/Y" 格式的进度 通俗语言:说"搜索8个平台"而不是"执行网页_搜索" 问题透明:遇到限流/错误主动报告 ❌ 避免 沉默运行 - 超过2分钟无反馈 预估乐观 - 说"1分钟"结果跑了10分钟 技术术语 - 用户不需要知道你在调用什么工具 假装没事 - 出了问题要主动说 技能元数据 名称: Long Task 处理器 V2 版本: 2.0.0 作者: 乌索普(整合 frankieway + chrislawyeryounger-spec) 创建日期: 2026-05-05 依赖: exec, process, message, 会话s_spawn