diff --git a/tests/test_static_vendor.py b/tests/test_static_vendor.py
index 57e006a..181dc45 100644
--- a/tests/test_static_vendor.py
+++ b/tests/test_static_vendor.py
@@ -46,6 +46,9 @@ class StaticVendorTests(unittest.TestCase):
self.assertIn("深入分析", source)
self.assertIn("查看结果", source)
self.assertIn("Job ID", source)
+ self.assertIn("工程关系:${escapeHtml(workspaceRelation)}", source)
+ self.assertIn("续接自 Job ${sourceJobId.slice(0, 8)}", source)
+ self.assertIn("
来源 Job", source)
self.assertIn("refreshCurrentTaskAfterSoftwareJob(job.task_id)", source)
self.assertIn("job.execution_runtime", source)
self.assertIn("执行版本未记录", source)
diff --git a/web/static/js/software_jobs.js b/web/static/js/software_jobs.js
index d115bdb..4e4b2bf 100644
--- a/web/static/js/software_jobs.js
+++ b/web/static/js/software_jobs.js
@@ -261,6 +261,10 @@ function jobCard(job) {
const formats = (summary.formats || []).filter(Boolean).join("、");
const elapsed = elapsedText(job);
const shortId = String(job.job_id || "").slice(0, 8);
+ const sourceJobId = String(job.source_job_id || "");
+ const workspaceRelation = sourceJobId
+ ? `续接自 Job ${sourceJobId.slice(0, 8)}`
+ : (job.workspace_id ? "新建工程" : "独立任务");
return `
${escapeHtml(summary.display_name || job.capability)}
${statusIcon(job.status)}${escapeHtml(statusLabel[job.status] || job.status)}
@@ -269,12 +273,14 @@ function jobCard(job) {
${active ? `
` : ""}
${inputNames ? `输入:${escapeHtml(inputNames)}` : ""}
+ 工程关系:${escapeHtml(workspaceRelation)}
${job.status === "succeeded" ? `${job.workspace_id ? `预览:${previews.length} 个 · 工程保存在节点` : `输出:${artifacts.length} 个文件${formats ? ` · ${escapeHtml(formats)}` : ""}`}` : ""}
完成方式:${escapeHtml(followupLabel(job))}
${active ? `创建于 ${escapeHtml(fmtDate(job.created_at))}` : `${elapsed ? `耗时 ${escapeHtml(elapsed)} · ` : ""}${job.terminal_at ? `完成于 ${escapeHtml(fmtDate(job.terminal_at))}` : `创建于 ${escapeHtml(fmtDate(job.created_at))}`}`}
任务详情
- Job ID
${escapeHtml(job.job_id)}
+ - 来源 Job
- ${sourceJobId ? `
${escapeHtml(sourceJobId)}` : "—(新建工程)"}
- Capability
${escapeHtml(job.capability)}
- ${job.workspace_id ? "Workspace ID" : "输出目录"}
${escapeHtml(job.workspace_id || job.output_dir || "—")}
- 执行版本
- ${escapeHtml(jobRuntimeText(job))}