feat: smart direct-execute legacy pipeline actions
Some checks failed
StoryForge CI / Baseline checks (push) Has been cancelled
StoryForge CI / Backend tests (push) Has been cancelled
StoryForge CI / Web tests (push) Has been cancelled

This commit is contained in:
kris
2026-04-05 08:51:25 +08:00
parent 70e528614f
commit 791c1ac80d
3 changed files with 25 additions and 0 deletions

View File

@@ -483,4 +483,5 @@
- 全局 `生成文案` 旧入口也已经做成相同分流:优先围绕最近完成任务直接生成,只有没有可承接任务时才回退到旧文案表单。
# 2026-04-05
- pipeline: 全局旧入口 `AI 视频 / 实拍剪辑` 现在也会优先围绕最近完成任务 direct-execute只有没有可承接任务时才回退到旧表单。
- review: `任务详情 -> 写复盘` 旧入口改成 direct-execute`source_job_id` 直接生成复盘草稿,不再优先打开旧复盘表单。

View File

@@ -12378,6 +12378,15 @@ document.addEventListener("click", async (event) => {
return;
}
if (name === "open-ai-video") {
const fallbackJob = getLatestCompletedProjectJob();
if (fallbackJob?.id) {
await runDirectWorkbenchAction("create-ai-video", {
busyLabel: "正在创建 AI 视频任务...",
errorTitle: "创建 AI 视频任务失败",
payload: { source_job_id: fallbackJob.id }
});
return;
}
openCreateAiVideoAction();
return;
}
@@ -12393,6 +12402,15 @@ document.addEventListener("click", async (event) => {
return;
}
if (name === "open-real-cut") {
const fallbackJob = getLatestCompletedProjectJob();
if (fallbackJob?.id) {
await runDirectWorkbenchAction("create-real-cut", {
busyLabel: "正在创建实拍剪辑任务...",
errorTitle: "创建实拍剪辑任务失败",
payload: { source_job_id: fallbackJob.id }
});
return;
}
openCreateRealCutAction();
return;
}

View File

@@ -1039,6 +1039,12 @@ test("playbook and review high-frequency actions now reuse direct execute handle
assert.match(clickActions, /name === "open-generate-copy"[\s\S]*openGenerateCopyAction\(\)/);
assert.match(clickActions, /name === "open-review-from-job"[\s\S]*runDirectWorkbenchAction\("review-draft"/);
assert.match(clickActions, /name === "open-review-from-job"[\s\S]*payload: \{ source_job_id: jobId \}/);
assert.match(clickActions, /name === "open-ai-video"[\s\S]*const fallbackJob = getLatestCompletedProjectJob\(\)/);
assert.match(clickActions, /name === "open-ai-video"[\s\S]*runDirectWorkbenchAction\("create-ai-video"/);
assert.match(clickActions, /name === "open-ai-video"[\s\S]*openCreateAiVideoAction\(\)/);
assert.match(clickActions, /name === "open-real-cut"[\s\S]*const fallbackJob = getLatestCompletedProjectJob\(\)/);
assert.match(clickActions, /name === "open-real-cut"[\s\S]*runDirectWorkbenchAction\("create-real-cut"/);
assert.match(clickActions, /name === "open-real-cut"[\s\S]*openCreateRealCutAction\(\)/);
});
test("main agent landing notices expose a compact mobile follow-up strip", () => {