Files
mcn-short-video/project/短视频脚本创作/V1.0/mcn-workshop/submit-review-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

66 lines
3.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* submit-review-tasks.cjs — 对俊希最新的 AI 脚本逐条提交复盘任务(与诊断页「复盘」按钮一致 + 落库 script_review 指令)
用法: node submit-review-tasks.cjs [rewriteId1,rewriteId2,...] (不传则自动取 account_id=3 的最新 done 记录) */
const { DatabaseSync } = require('node:sqlite');
const path = require('path');
const { loadConfig } = require('./load-config');
const CFG = loadConfig();
const DB = path.join(__dirname, CFG.dbName);
const API = `http://localhost:${CFG.port}/api/run`;
const ACCOUNT_ID = 3;
const db = new DatabaseSync(DB, { readOnly: true });
let ids = process.argv.slice(2).map(Number).filter(Boolean);
if (!ids.length) {
ids = db.prepare("SELECT id FROM rewrite_log WHERE account_id=? AND status='done' AND script_text IS NOT NULL AND script_text <> '' ORDER BY id DESC LIMIT 20").all(ACCOUNT_ID).map((r) => r.id);
}
const rows = [];
for (const id of ids) {
const r = db.prepare('SELECT rl.id, rl.video_id, rl.title, v.video_title FROM rewrite_log rl LEFT JOIN account_videos v ON v.id=rl.video_id WHERE rl.id=?').get(id);
if (r) rows.push(r);
}
db.close();
if (!rows.length) { console.log('NO REWRITES TO REVIEW'); process.exit(1); }
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
(async () => {
for (const r of rows) {
const prompt = `请对这条 AI 脚本做复盘评分(AI脚本 / 原视频脚本 / 对比分析三种模式),按 mcn-script-review(脚本复盘)技能执行。
脚本标题:《${r.title || r.video_title || ''}》(rewrite_log.id=${r.id},video_id=${r.video_id})
【任务完成后必须执行】
将复盘结果保存到工作台数据库 ${CFG.dbName} 的 script_review 表(数据库路径:${DB},即本会话 cwd 下的 ${CFG.dbName}),字段:
- type='ai'
- rewrite_id=${r.id}
- video_id=${r.video_id}
- dims_json=各维度评分 JSON(设定承接/框架节奏/钩子设置/叙事逻辑/极致事件/共鸣和共情/格式规范性/台词口语化/内容合规/教程完整链/其他)
- total=总分(数字)
- verdict=结论
- issues_json=问题清单 JSON 数组,**每条字段固定如下(字段名与取值不可自创)**:
[{"severity":"高","dim":"叙事逻辑","loc":"场8 妈妈台词(510-520s)","issue":"问题描述","suggestion":"修改建议","step":"S7"},
{"severity":"中","dim":"台词口语化","loc":"场3","issue":"…","suggestion":"…","step":"S9"}]
· severity:**只能取「高」「中」「低」三个中文值**(禁止 high/medium/low、禁止 sev/level 等其它字段名)
· dim=所属维度名;loc=定位(场次/时间码);issue=问题描述;suggestion=修改建议;step=所属环节(S5-S11)
· ⚠️ 若 severity 缺失或写成英文,工作台无法按严重度着色,会全部显示成绿色
- content=复盘完整内容
- summary=摘要
- status='done'
(用 node:sqlite 或 sqlite3 写入;若该表不存在则创建后再写)
完成后回复:评分 + 是否已保存。`;
try {
const resp = await fetch(API, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ prompt, name: '复盘指令', skills: ['脚本复盘'] }),
});
const d = await resp.json();
console.log(`SUBMIT review rw${r.id} →`, d.ok ? ('id=' + d.id) : ('ERR ' + d.error));
} catch (e) {
console.log(`SUBMIT review rw${r.id} → EXCEPTION ${e.message}`);
}
await sleep(3000);
}
console.log('ALL REVIEW TASKS SUBMITTED');
})();