同步 C4 引用补全与 C8 润色提醒的功能文档
- 更新【功能说明】AGC聊天素材引用:补充素材面板双页签、activeVersionId 版本回退与空态口径 - 更新【功能说明】AGC聊天素材引用:把「改名刷新显示名」「跨会话恢复光标位置」从未完成移到已完成 - 新增【功能说明】AGC聊天AI润色与发送前提醒:写明润色回填、原文快照、失败保留原文与提醒面板行为 - 新增文档同时记录提醒判据、不再提醒偏好存本机 localStorage、以及计费仍走平台 LLM 路由的边界
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
# AGC 聊天 AI 润色与发送前提醒
|
||||
|
||||
更新时间:2026-09-10
|
||||
|
||||
AGC 项目聊天输入区(`ResourceReferenceInput`,三个聊天入口共用)提供 AI 润色与发送前提醒。
|
||||
|
||||
## AI 润色
|
||||
|
||||
- 输入区右侧的「AI 润色」按钮对当前草稿做一次改写,结果直接回填到输入区;
|
||||
- 第一次润色成功时记下当时的输入区文本作为「原文快照」;
|
||||
- 对同一段草稿可以反复润色,每次都覆盖上一次结果,原文快照保持不变;
|
||||
- 「恢复原文」始终回到最初那份原文,并清空快照与润色结果;
|
||||
- 润色进行中按钮禁用并显示「润色中…」,期间不能重复触发;
|
||||
- 失败、超时或未配置模型时保留原文,只在输入区显示「AI 润色失败,可重试」,用户可直接重试;
|
||||
- 草稿发送或被清空后,润色结果与原文快照一起重置。
|
||||
|
||||
## 发送前提醒
|
||||
|
||||
点发送时若命中提醒判据,先弹出独立的「发送前提醒」面板(不追加在输入区下方),面板提供:
|
||||
|
||||
- 「AI 润色」:先润色再发送;
|
||||
- 「使用原文提交」:直接发送原文;
|
||||
- 「关闭」:取消本次发送,回到输入区;
|
||||
- 「不再提醒」:勾选后写入本机偏好,后续不再弹该提醒。
|
||||
|
||||
提醒判据(全部满足才拦截发送):
|
||||
|
||||
1. 提醒没有被用户在偏好里关闭;
|
||||
2. 当前草稿指纹与「本轮已确认草稿」指纹不同,即本轮还没有润色过、也没有选过「使用原文提交」;
|
||||
3. 纯文本 `trim` 后长度不短于 40 个字符;
|
||||
4. 草稿不是以 `/` 开头的命令(命令走直通路径)。
|
||||
|
||||
面板里的「AI 润色」失败时保留原文并留在面板内,用户可以重试或改用「使用原文提交」。
|
||||
|
||||
「不再提醒」偏好写在客户端本机 `localStorage`(键 `agc.chat.prompt-polish-reminder.disabled`),不进项目 manifest、不进后端。
|
||||
|
||||
## 实现位置
|
||||
|
||||
- 前端服务与判据:`apps/ai-game-creator-shell/src/features/project-workspace/chatPromptPolish.ts`
|
||||
- 提醒面板:`apps/ai-game-creator-shell/src/features/project-workspace/ChatPromptPolishReminder.tsx`
|
||||
- Tauri 命令:`polish_local_project_prompt`(`apps/ai-game-creator-shell/src-tauri/src/commands.rs`,系统提示词 `src-tauri/prompts/local-project-prompt-polish.md`)
|
||||
|
||||
润色复用已有的短文本生成通道:`codex_app_server` 模式走 Codex direct 单轮对话,其余模式走客户端 LLM 客户端单轮请求。计费(1 泥点)由平台 LLM 路由 `/api/llm/chat/completions`、`/api/llm/responses` 在 `server-rs/crates/api-server/src/llm/mod.rs` 内完成,客户端不自建计费,也不改 server-rs。
|
||||
@@ -4,7 +4,14 @@
|
||||
|
||||
AGC 聊天输入框支持以结构化引用标记当前项目已登记素材。输入 `@` 会按素材名称、资源 ID 和类型过滤候选项;也可以点击输入框右侧的 `@` 按钮打开素材选择面板。
|
||||
|
||||
素材选择面板支持缩略图、名称或资源 ID 搜索、类型筛选和多选。确认后素材以 `@素材名` 芯片插入编辑器,用户可以在芯片前后继续编辑自然语言,也可以单独删除芯片。芯片内部保存稳定 `resourceId`,展示名称只用于界面,不参与引用解析。
|
||||
素材选择面板支持缩略图、名称或资源 ID 搜索、类型筛选和多选;面板顶部有两个页签:
|
||||
|
||||
- 「当前版本素材」:列出版本 `resourceBindings` 里绑定的、且仍登记在 manifest 的素材;
|
||||
- 「全部画布素材」:列出全部已登记素材。
|
||||
|
||||
两个页签各自持有独立的搜索与类型筛选状态,互不影响,也不与资源画布筛选联动。当前版本取 `ResourceReferenceInput` 的 `activeVersionId`;未传或传 `null` 时回退到 manifest `versions[]` 中最新的那个版本。版本不存在或该版本没有绑定素材时页签显示空态,不合成资源卡;绑定指向已删除资源(悬空绑定)时按资源 `id` 过滤掉。
|
||||
|
||||
确认后素材以 `@素材名` 芯片插入编辑器,用户可以在芯片前后继续编辑自然语言,也可以单独删除芯片。芯片内部保存稳定 `resourceId`,展示名称只用于界面,不参与引用解析;资源改名后,编辑区已有芯片与候选列表都会按 `resourceId` 刷新成 manifest 的最新显示名,并同步回父级草稿。
|
||||
|
||||
提交时前端同时发送用户文本和 `references` 数组。Rust 在发起 Agent 回合前读取当前项目 manifest,逐项复核资源是否存在、路径是否安全,并以 manifest 中的 `id / kind / mediaType / localPath` 作为权威投影;客户端传入的路径、名称和类型不会被直接信任。已删除或不存在的资源会阻止发送并提示用户移除后重新选择。
|
||||
|
||||
@@ -19,9 +26,7 @@ AGC 聊天输入框支持以结构化引用标记当前项目已登记素材。
|
||||
- 运行画面提供“点选素材”,可选中 HTML 区域并生成 `runtime-region` 引用;
|
||||
- 提交请求携带结构化 `references`;
|
||||
- Rust 按 manifest 二次校验并生成安全投影;
|
||||
- 普通无引用消息保持原有行为。
|
||||
|
||||
当前未完成:
|
||||
|
||||
- 跨会话恢复引用芯片的精确光标位置;
|
||||
- 资源改名后的引用显示名自动刷新。
|
||||
- 普通无引用消息保持原有行为;
|
||||
- 素材选择面板的「当前版本素材 / 全部画布素材」两个页签与独立筛选、搜索状态;
|
||||
- 资源改名后引用芯片与候选列表的显示名自动刷新;
|
||||
- 切换 / 重开会话恢复草稿后光标落在文本末尾,引用按顺序追加到文本之后。
|
||||
|
||||
Reference in New Issue
Block a user