Files
mcn-short-video/project/短视频脚本创作/V1.0/mcn-workshop/poll-create-tasks.cjs
T
maogeigei f77735b206 工作台:目录改名 mcn-workshop + 任务进度可见 + 会话归属配置化
1. 目录 mcn-work-shop -> mcn-workshop(空间分组名取会话 cwd 的目录名,只改字符串无效,必须真改名)
2. 全仓替换 mcn-work-shop -> mcn-workshop:37 文件 121 处;历史日志按沿革句规矩保留当时目录名
3. 任务进度可见:/api/run/status 产出 已运行时长/工具调用/最近动作/停滞判定(读会话日志尾部),前端新增右下角常驻面板,四处任务入口接入
4. 会话归属目录配置化:新增 config.sessionCwd(留空=工作台自身目录),现指向 D://AI技能//mcn-workshop,使任务显示为命名分组而非「未分组任务」
5. 修前端轮询静默缺陷:连续 3 次查询失败即提示服务断开(原逻辑静默空转到 15 分钟超时,用户零感知)
2026-10-08 13:09:06 +08:00

54 lines
1.9 KiB
JavaScript

/* poll-create-tasks.cjs — 轮询 6 个创作任务状态,全部完成/失败后退出 */
const TASKS = [
{ videoId: 309, id: 'automation-1788258518460' },
{ videoId: 313, id: 'automation-1788258521485' },
{ videoId: 315, id: 'automation-1788258524508' },
{ videoId: 316, id: 'automation-1788258527521' },
{ videoId: 318, id: 'automation-1788258530542' },
{ videoId: 320, id: 'automation-1788258533562' },
];
const { loadConfig } = require('./load-config');
const CFG = loadConfig();
const API = `http://localhost:${CFG.port}/api/run/status?id=`;
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
const stateOf = new Map(TASKS.map((t) => [t.videoId, 'queued']));
let lastPrint = '';
async function check() {
const snap = [];
for (const t of TASKS) {
try {
const r = await fetch(API + encodeURIComponent(t.id));
const d = await r.json();
stateOf.set(t.videoId, d.state || 'unknown');
snap.push(`v${t.videoId}:${d.state || '?'}`);
} catch (e) {
snap.push(`v${t.videoId}:ERR`);
}
}
const line = snap.join(' ');
if (line !== lastPrint) {
console.log(new Date().toLocaleTimeString('zh-CN', { hour12: false }) + ' | ' + line);
lastPrint = line;
}
const vals = [...stateOf.values()];
const done = vals.filter((s) => ['done', 'error', 'notfound'].includes(s)).length;
return done;
}
(async () => {
console.log('START polling 6 create tasks: ' + new Date().toLocaleTimeString('zh-CN', { hour12: false }));
const t0 = Date.now();
while (Date.now() - t0 < 3 * 60 * 60 * 1000) { // 最长 3 小时
const done = await check();
if (done >= TASKS.length) {
console.log('\nALL DONE: ' + [...stateOf.entries()].map(([v, s]) => `v${v}=${s}`).join(' '));
process.exit(0);
}
await sleep(30000);
}
console.log('\nTIMEOUT 3h, current: ' + [...stateOf.entries()].map(([v, s]) => `v${v}=${s}`).join(' '));
process.exit(1);
})();