diff --git a/design-docs/prototypes/产品-02B-管理员控制台原型.html b/design-docs/prototypes/产品-02B-管理员控制台原型.html index 1307cb18..df501601 100644 --- a/design-docs/prototypes/产品-02B-管理员控制台原型.html +++ b/design-docs/prototypes/产品-02B-管理员控制台原型.html @@ -512,6 +512,37 @@ padding: 10px; } + .scenario-grid { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 8px; + } + + .status-card { + min-width: 0; + min-height: 82px; + display: grid; + align-content: start; + gap: 6px; + padding: 9px; + border: 1px solid var(--line); + border-radius: 7px; + background: #fbfcfc; + } + + .card-label { + color: var(--muted); + font-size: 11px; + font-weight: 800; + } + + .status-card strong { + color: var(--ink); + font-size: 12px; + line-height: 1.35; + word-break: break-word; + } + .form-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); @@ -771,6 +802,7 @@ } .metrics, + .scenario-grid, .feedback-strip { grid-template-columns: repeat(2, minmax(0, 1fr)); } @@ -814,6 +846,7 @@ .filter-grid, .form-grid, .metrics, + .scenario-grid, .feedback-strip { grid-template-columns: 1fr; } @@ -868,6 +901,44 @@ const objectNames = ["长篇玄幻模板", "角色关系图谱", "章节节拍策略", "世界规则资料集", "市场智能体包", "导入解析任务"]; const modules = ["平台配置", "元结构定义", "系统智能体", "全局知识库", "质量门控", "市场治理", "用户权限", "日志审计"]; const models = ["模型组 A", "模型组 B", "creative-main", "analysis-safe", "detect-guard"]; + const scenarioMap = { + "admin-permission-group": { + title: "权限组发布场景", + steps: ["编辑菜单页面权限树", "预览影响范围", "提交复核", "非申请人审批后生效"], + blocked: "自己所在权限组、自审批、扩大管理域无复核时禁用发布。", + recovery: "保存草稿,交由其他权限管理员复核。" + }, + "admin-market-asset-governance": { + title: "市场下架 / 召回场景", + steps: ["查看安装和绑定影响", "选择下架或召回范围", "确认通知范围", "写入治理状态和安全审计"], + blocked: "无原因、无影响预览、无合规权限时禁用召回。", + recovery: "保留申诉入口,不修改用户私有副本和已确认作品事实。" + }, + "admin-newapi-usage": { + title: "New-API 调用日志归属场景", + steps: ["查询网关用户", "读取调用日志摘要", "匹配 Muse 用户/作品/任务", "记录归属依据"], + blocked: "不能伪造余额或复制外部网关日志为本地权威数据。", + recovery: "无法匹配时进入人工处理项。" + }, + "admin-task-ops": { + title: "任务重验 / 重试场景", + steps: ["查看失败原因", "重验来源和授权快照", "判断可重试性", "重试或标记需用户重新发起"], + blocked: "写作候选不能由管理员重新生成;旧上下文失效时禁用重试。", + recovery: "取消、关闭人工处理项或引导用户侧重新发起。" + }, + "admin-metaschema-editor": { + title: "MetaSchema 发布预览场景", + steps: ["保存草稿", "校验字段结构", "预览 Canonical/Shadow/检索/生成影响", "复核后发布"], + blocked: "迁移预览失败、影响范围未知或无复核时禁用发布。", + recovery: "保留草稿,回滚到上一已发布版本。" + }, + "admin-audit-log": { + title: "审计导出场景", + steps: ["缩小筛选范围", "填写导出理由", "二次认证或复核", "生成脱敏摘要"], + blocked: "全文上下文、私密正文和系统凭据不可导出。", + recovery: "导出失败或过期仍写安全审计。" + } + }; function escapeHtml(value) { return String(value ?? "") @@ -1378,6 +1449,39 @@ `; } + function renderScenarioPanel(page) { + const scenario = scenarioMap[page.id]; + if (!scenario) return ""; + return ` +
+
+

${renderInline(scenario.title)}

+
${badge("端到端验收", "warn")}
+
+
+
+ ${scenario.steps.map((step, index) => ` +
+ 步骤 ${index + 1} + ${renderInline(step)} +
+ `).join("")} +
+ +
+
+ `; + } + function renderPageHeader(page) { const mainActions = actionsFrom(page.spec["主操作"] || page.list["主要操作"]).slice(0, 4); const secondaryActions = actionsFrom(page.spec["次操作"]).slice(0, 3); @@ -1409,6 +1513,7 @@
${renderMetrics(page)} + ${renderScenarioPanel(page)} ${showForm ? renderForm(page) : ""} ${renderTable(page)} ${renderFeedback(page)} diff --git a/design-docs/prototypes/产品-02C-用户工作区与作品工作台原型.html b/design-docs/prototypes/产品-02C-用户工作区与作品工作台原型.html index a39ada5c..2c1d9854 100644 --- a/design-docs/prototypes/产品-02C-用户工作区与作品工作台原型.html +++ b/design-docs/prototypes/产品-02C-用户工作区与作品工作台原型.html @@ -597,12 +597,22 @@ padding-bottom: 2px; } - .workspace-tabs .button.active { + .workspace-tabs .button.active, + .workspace-secondary .button.active { border-color: var(--accent); background: var(--accent); color: #fff; } + .workspace-secondary { + display: flex; + align-items: center; + gap: 6px; + overflow: auto; + margin: -6px 0 12px; + padding-bottom: 2px; + } + .writing-grid { display: grid; grid-template-columns: 242px minmax(420px, 1fr) 360px; @@ -1015,11 +1025,14 @@ const workspaceTabs = [ ["work-writing-desk", "写作"], ["work-planning-desk", "规划"], - ["work-knowledge-consistency", "知识"], - ["work-agent-association", "智能体"], + ["work-knowledge-consistency", "知识与一致性"] + ]; + + const workspaceSecondaryLinks = [ + ["work-agent-association", "智能体设置"], ["work-knowledge-source", "知识来源"], - ["work-import-parse", "导入"], - ["work-export-delivery", "导出"], + ["work-import-parse", "导入任务"], + ["work-export-delivery", "导出任务"], ["work-records-usage", "记录"], ["work-settings", "设置"] ]; @@ -1071,6 +1084,9 @@ const tabHtml = workspaceTabs.map(([id, name]) => ` `).join(""); + const secondaryHtml = workspaceSecondaryLinks.map(([id, name]) => ` + + `).join(""); const context = `
@@ -1084,6 +1100,7 @@
+ `; if (!right) return context + content; return context + `
${content}
${right}
`; @@ -1308,16 +1325,16 @@
${panel("候选文本", `
-
${badge("候选可处理", "ok")}${badge("知识草稿提取中", "warn")}${badge("来源版本变化 1", "warn")}
+
${badge("来源需重验", "warn")}${badge("知识草稿提取中", "warn")}${badge("直接接受已禁用", "danger")}

“别回头。”楼梯间传来的声音压得很低,像是怕惊醒钟楼深处某个沉睡的东西。林澈的手指停在账本边缘,纸页上的日期被雨声一点点浸湿。他知道,只要把账本合上,父亲留下的谜题就还能维持原样;可如果他继续读下去,雾港就再也不是记忆里的雾港。

- + - - + +
`)}
@@ -1330,7 +1347,7 @@

改进建议

候选后半段可以增加外部动作,避免停留在内心判断。

-

关键风险

账本来源版本变化,接受前建议查看来源。

+

关键风险

账本来源版本变化,不能原样接受;需要重新生成或手动处理。

`)}
@@ -1446,7 +1463,7 @@
${panel("草稿摘要", ` -
${badge("可确认", "ok")}${badge("来源:第 3 章 旧钟楼", "blue")}${badge("影响后续生成", "warn")}
+
${badge("存在冲突", "warn")}${badge("来源:第 3 章 旧钟楼", "blue")}${badge("直接确认已禁用", "danger")}
当前正式知识
旧钟楼是雾港早期建筑,曾用于潮汐观测。位置:东港旧街。
@@ -1454,8 +1471,8 @@
- - + +
@@ -1468,7 +1485,7 @@

来源状态

当前章节版本匹配,可定位正文。

-

风险说明

位置字段与已有知识冲突,确认后会影响后续生成上下文。

+

风险说明

位置字段与已有知识冲突,不能直接确认;需要修改后确认或忽略。

相关章节

第 1 章 雾港来客;第 3 章 旧钟楼。

`, ``)} @@ -1597,21 +1614,24 @@ ["第 2 章 码头上的黑伞", "已解析", "人物 2 · 事件 1", "中", "可确认"], ["第 3 章 旧钟楼", "待确认", "地点 1 · 事件 2", "高", "需处理"], ["第 18 章 潮汐表", "失败", "无", "未知", "可重试"] - ].map((row) => ` + ].map((row) => { + const canConfirm = row[4] === "可确认"; + return ` ${row[0]} ${badge(row[1], row[1] === "失败" ? "danger" : row[1] === "待确认" ? "warn" : "ok")} ${row[2]} ${badge(row[3], row[3] === "高" ? "danger" : row[3] === "中" ? "warn" : "")} ${row[4]} -
+
- `).join(""); + `; + }).join(""); const content = ` - ${panel("章节审阅表", `
${rows}
章节解析状态识别结果风险可确认性操作
`, ``)} + ${panel("章节审阅表", `
${rows}
章节解析状态识别结果风险可确认性操作
`, ``)}
- ${panel("章节详情", `

第 3 章识别到“旧钟楼位置”与已有知识冲突。确认章节结果会产生待确认知识草稿,不会直接写入作品知识。

`)} + ${panel("章节详情", `

第 3 章识别到“旧钟楼位置”与已有知识冲突,确认按钮已禁用。确认其他可确认章节只会产生待确认知识草稿,不会直接写入作品知识。

`)} ${panel("风险分布", `
12低风险
4中风险
1高风险
`)} ${panel("处理结果", `

已确认章节

确认后进入正文和章节结果历史。

知识草稿

仍需在知识与一致性中确认。

`)}
@@ -1625,7 +1645,7 @@
${panel("导出配置", `
-
+
@@ -1633,7 +1653,7 @@
-
+
`)}
@@ -1649,7 +1669,7 @@ ${panel("导出任务", `
- +
任务范围格式状态下载有效期操作
正文导出 16:12全部章节docx${badge("完成", "ok")}23 小时
知识备份 14:30人物、地点、事件zip${badge("失败", "danger")}-
作品知识导出 14:30人物、地点、事件zip${badge("失败", "danger")}-
设定导出 13:05规划项md${badge("准备中", "warn")}-
`)} @@ -1714,7 +1734,7 @@

默认写作方向

悬疑递进、克制描写、少解释。

当前来源状态

2 个来源需要处理;不会自动写入作品事实。

-

最近备份

今天 12:00 已生成备份。

+

最近导出

今天 12:00 生成正文导出任务,可在导出交付页查看。

`)}
diff --git a/design-docs/prototypes/产品-02D-智能体工作台原型.html b/design-docs/prototypes/产品-02D-智能体工作台原型.html index fd17705b..8370c366 100644 --- a/design-docs/prototypes/产品-02D-智能体工作台原型.html +++ b/design-docs/prototypes/产品-02D-智能体工作台原型.html @@ -844,7 +844,7 @@
- +
@@ -857,7 +857,7 @@
@@ -882,7 +882,7 @@
- +
@@ -1178,7 +1178,7 @@
3
-

授权知识检索

只读取当前作品绑定且允许用于检索的知识来源。

Tool Grant 待确认失败降级
+

授权知识检索

只读取当前作品绑定且允许用于检索的知识来源。

工具授权待确认失败降级
@@ -1193,7 +1193,7 @@

工具与外发边界

查询工作流工具目录

可用工具

作品知识检索、图查询、结构化摘要、质量建议。

-

Tool Grant

必须限定动作、输入来源、输出去向、作品槽位作用域和外发范围。

+

工具授权范围

必须限定动作、输入来源、输出去向、作品槽位作用域和外发范围。

阻断项

未托管 Webhook 凭据不可用;不能跨作品读取内容。

失败策略

工具撤权或输出不合约时进入失败反馈,不能扩大权限或补写事实。

@@ -1228,8 +1228,8 @@ 章节目标: 揭示主角对雾城规则的第一次主动怀疑。
-

任务状态

testRunId: tr_20260522_1840 · succeeded;结果通过查询返回,可取消 queued/running 任务。

-
TestRunOutput 试用输出: +

任务状态

试用任务已完成;运行中任务可取消,失败或超时时显示可行动原因。

+
试用输出: 她没有立刻回头。桥下的水声像被压低的耳语,断断续续地念着她昨天才写进日记的名字。雾从栏杆缝隙里伸进来,轻轻擦过指节,带走了一点温度,也带走了她刚刚想起的那句话。
@@ -1329,8 +1329,8 @@