diff --git a/docs/【功能说明】AGC聊天AI润色与发送前提醒-2026-09-10.md b/docs/【功能说明】AGC聊天AI润色与发送前提醒-2026-09-10.md new file mode 100644 index 000000000..bae42e325 --- /dev/null +++ b/docs/【功能说明】AGC聊天AI润色与发送前提醒-2026-09-10.md @@ -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。 diff --git a/docs/【功能说明】AGC聊天素材引用-2026-09-08.md b/docs/【功能说明】AGC聊天素材引用-2026-09-08.md index 65b401428..83dd817b9 100644 --- a/docs/【功能说明】AGC聊天素材引用-2026-09-08.md +++ b/docs/【功能说明】AGC聊天素材引用-2026-09-08.md @@ -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 二次校验并生成安全投影; -- 普通无引用消息保持原有行为。 - -当前未完成: - -- 跨会话恢复引用芯片的精确光标位置; -- 资源改名后的引用显示名自动刷新。 +- 普通无引用消息保持原有行为; +- 素材选择面板的「当前版本素材 / 全部画布素材」两个页签与独立筛选、搜索状态; +- 资源改名后引用芯片与候选列表的显示名自动刷新; +- 切换 / 重开会话恢复草稿后光标落在文本末尾,引用按顺序追加到文本之后。