补充运行辅助文件入口

新增聊天侧run-files命令列出Agent运行辅助文件读取草稿

补充主窗口命令帮助和下一步建议测试

同步AI游戏创作App技术方案和共享决策记录
This commit is contained in:
AIGameCreator App
2026-07-03 04:45:37 +08:00
parent e47f346561
commit 1c7532ea99
4 changed files with 73 additions and 5 deletions
+30
View File
@@ -233,6 +233,12 @@ const commonProjectLogReadDrafts = [
{ label: '读 Agent 日志', path: '.agent/logs/agent.log' },
] as const;
const commonAgentRunSupportReadDrafts = [
{ label: '读输出流', path: '.agent/output.jsonl' },
{ label: '读活动流', path: '.agent/activity.jsonl' },
{ label: '读上下文包', path: '.agent/context.bundle.json' },
] as const;
interface ListLocalProjectFilesResult {
projectPath: string;
files: LocalProjectFileEntry[];
@@ -1856,6 +1862,7 @@ const chatCommandHelp = [
'/artifacts:列出常用生成产物读取命令',
'/run-artifacts:列出最近 Run 产物读取命令',
'/runs:列出已加载 Run 历史读取命令',
'/run-files:列出 Agent 运行辅助文件读取命令',
'/logs:列出常用日志读取命令',
'/asset-register 路径 [kind] [mediaType]:登记项目内已有资产',
'/read 路径:读取本地项目内文本文件',
@@ -2261,6 +2268,7 @@ function summarizeNextProjectActions(
if (trace) {
addSuggestion('查看最近 trace 摘要', '/trace');
addSuggestion('列出最近 Run 产物', '/run-artifacts');
addSuggestion('列出 Agent 运行辅助文件', '/run-files');
}
addSuggestion('打开产物命令列表', '/artifacts');
addSuggestion('打开日志命令列表', '/logs');
@@ -2602,6 +2610,12 @@ function summarizeCommonProjectLogReadDrafts() {
.join('\n')}`;
}
function summarizeAgentRunSupportFileReadDrafts() {
return `Agent 运行辅助文件读取命令:\n${commonAgentRunSupportReadDrafts
.map((file) => `- ${file.label} · ${file.path} · /read ${file.path}`)
.join('\n')}`;
}
function summarizeProjectAssets(nextManifest: GameCreationAppManifest) {
if (nextManifest.assets.length === 0) {
return '本地项目还没有登记资产。';
@@ -5843,6 +5857,22 @@ export function App() {
return;
}
if (prompt === '/run-files') {
if (!requireChatProjectForUserAction()) {
return;
}
setMessages((current) => [
...current,
{
role: 'assistant',
text: summarizeAgentRunSupportFileReadDrafts(),
draftCommand: `/read ${commonAgentRunSupportReadDrafts[0].path}`,
draftCommandLabel: commonAgentRunSupportReadDrafts[0].label,
},
]);
return;
}
if (prompt === '/logs') {
if (!requireChatProjectForUserAction()) {
return;
@@ -2219,6 +2219,36 @@ describe('AI 游戏创作 App 界面边界', () => {
),
).toHaveLength(fileReadCountBeforeRuns);
const fileReadCountBeforeRunFiles = invoke.mock.calls.filter(
([command]) => command === 'read_local_project_file',
).length;
submitChat('/run-files');
expect(
await screen.findByText(/Agent 运行辅助文件读取命令:/),
).not.toBeNull();
expect(
screen.getByText(/读输出流 · \.agent\/output\.jsonl/),
).not.toBeNull();
expect(
screen.getByText(/读上下文包 · \.agent\/context\.bundle\.json/),
).not.toBeNull();
const runFilesMessageList = document.querySelector('.message-list');
expect(runFilesMessageList).not.toBeNull();
fireEvent.click(
within(runFilesMessageList as HTMLElement).getByRole('button', {
name: '读输出流',
}),
);
expect(screen.getByLabelText('创作想法')).toHaveProperty(
'value',
'/read .agent/output.jsonl',
);
expect(
invoke.mock.calls.filter(
([command]) => command === 'read_local_project_file',
),
).toHaveLength(fileReadCountBeforeRunFiles);
const runLocalCountBeforeNext = invoke.mock.calls.filter(
([command]) => command === 'run_limited_local_command',
).length;
@@ -2226,6 +2256,9 @@ describe('AI 游戏创作 App 界面边界', () => {
expect(await screen.findByText(/下一步建议:/)).not.toBeNull();
expect(screen.getByText(/运行自检并启动本地预览:\/run/)).not.toBeNull();
expect(screen.getByText(/查看 .* 个 ready 任务:\/tasks/)).not.toBeNull();
expect(
screen.getByText(/列出 Agent 运行辅助文件:\/run-files/),
).not.toBeNull();
const nextMessageList = document.querySelector('.message-list');
expect(nextMessageList).not.toBeNull();
fireEvent.click(
@@ -7832,6 +7865,9 @@ describe('AI 游戏创作 App 界面边界', () => {
expect(screen.getByText(/\/risks:查看当前项目风险/)).not.toBeNull();
expect(screen.getByText(/\/handoff:生成当前项目交接摘要/)).not.toBeNull();
expect(screen.getByText(/\/next:查看下一步建议/)).not.toBeNull();
expect(
screen.getByText(/\/run-files:列出 Agent 运行辅助文件读取命令/),
).not.toBeNull();
expect(
screen.getByText(
/\/asset-register 路径 \[kind\] \[mediaType\]:登记项目内已有资产/,
@@ -3860,12 +3860,13 @@
- 2026-07-03 调整:普通用户通过聊天输入 `/risks` 查看当前项目风险,只基于主窗口当前已加载的 manifest、最近 run trace、预览状态、任务状态、资产来源和最近命令派生风险摘要,并提供首个风险处理草稿;该入口不得触发 Tauri 读写、不得读取文件、不得启动或打开预览,也不得新增普通用户面板。
- 2026-07-03 调整:普通用户通过聊天输入 `/handoff` 生成当前项目交接摘要,只基于主窗口当前已加载的 manifest、授权项目路径、最近 run trace、Agent 状态和已加载 run 历史生成交接信息,并提供 `/next` 后续草稿;该入口不得触发 Tauri 读写、不得读取文件、不得启动或打开预览,也不得新增普通用户面板。
- 2026-07-03 调整:普通用户通过聊天输入 `/runs` 查看已加载 Run 历史读取命令,只基于主窗口当前已加载的 latest trace 和最多 100 个历史 run 中已经载入的批次生成 `/trace` 或 `/read .agent/runs/...` 草稿;该入口不得额外触发 Tauri 读取、不得滚动加载更多历史、不得启动或打开预览,也不得新增普通用户面板。
- 2026-07-03 调整:普通用户通过聊天输入 `/run-files` 查看 Agent 运行辅助文件读取命令,只列出 `.agent/output.jsonl`、`.agent/activity.jsonl` 和 `.agent/context.bundle.json` 对应 `/read` 草稿并提供首个草稿;该入口不得直接读取辅助文件、不得触发 Tauri 读写,也不得新增普通用户面板。
- 2026-07-03 调整:`/llm-status` 读取到的 agent 级 LLM 配置状态可回填到主窗口 Agent 状态列表、聊天侧 `/agents` 汇总和单 Agent 对话头部,显示 provider 类型、模型、流式开关和 API Key 是否已读取;密钥本体仍不能进入聊天、状态列表、manifest、trace 或本地项目文件。
- 2026-07-03 调整:开发窗口日志面板提供 `.agent/logs/command.log`、`.agent/logs/preview.log` 和 `.agent/logs/agent.log` 的只读查看入口,复用 `file.read` 授权策略;普通用户聊天输入 `/logs` 只列出这三个日志文件对应的 `/read ...` 草稿 / 命令并提供首个草稿,不直接读取日志,不新增普通用户日志面板,实际读取仍走聊天侧 `file.read`。
- 2026-07-03 调整:单 Agent 对话面板允许用户把当前输入手动追加到该 agent 的 `memory/agents/<group>/<role>.md` 私有记忆;写入复用 `memory.write` 项目策略、项目锁和 Tauri 本地目录能力,不把普通对话流水自动混入私有记忆;聊天侧 `/agent-conversations` 和 `/agent-memories` 只列出同一批 Agent 对话与私有记忆读取命令并提供首个 `/read` 草稿,不直接读取文件。
- 2026-07-03 调整:主窗口新增音效登记和画板音频导入快捷入口,只填入 `/asset-register assets/audio/sfx.wav audio audio/wav` 或 `/import-canvas-asset assets/audio/sfx.wav ` 草稿;音乐组仍复用现有资产登记 / 画板回流链路,不新增独立音频生成系统。
- 2026-07-03 调整:主窗口新增常用生成产物读取入口,只把入口 HTML、设计、数值、美术清单、音频清单和发布说明对应的 `/read` 草稿填入聊天输入框;聊天命令 `/artifacts` 只列出同一组固定读取命令并提供首个读取草稿,`/run-artifacts` 只列出最近 trace 里的产物读取命令并提供首个 `/read` 草稿,`/logs` 只列出固定日志读取命令;实际读取仍走聊天侧 `file.read` 权限流,不直接读本地文件。
- 2026-07-03 调整:普通用户通过聊天输入 `/next` 触发下一步建议入口,只基于主窗口当前已加载的 manifest、最近 run trace 和最近命令摘要生成聊天建议,列出 `/tasks`、`/trace`、`/run`、`/open-preview`、`/assets`、`/artifacts`、`/run-artifacts`、`/logs`、`/agent-resume ` 等安全命令草稿方向,并提供一个首选草稿;该命令不得直接执行 Tauri 读写、启动或打开预览、读取本地文件,也不得绕过原有命令确认和 `file.read` 权限流。
- 2026-07-03 调整:普通用户通过聊天输入 `/next` 触发下一步建议入口,只基于主窗口当前已加载的 manifest、最近 run trace 和最近命令摘要生成聊天建议,列出 `/tasks`、`/trace`、`/run`、`/open-preview`、`/assets`、`/artifacts`、`/run-artifacts`、`/run-files`、`/logs`、`/agent-resume ` 等安全命令草稿方向,并提供一个首选草稿;该命令不得直接执行 Tauri 读写、启动或打开预览、读取本地文件,也不得绕过原有命令确认和 `file.read` 权限流。
- 2026-06-25 调整:本地 HTTP 预览静态 `HEAD` 必须返回与 `GET` 相同的真实 `Content-Length`,但不返回 body;浏览器、图片、音频和视频探测不能拿到 `Content-Length: 0` 的假响应。
- 2026-06-25 调整:普通用户通过聊天输入 `/run` 触发待确认 `game.run_local`,确认后只能复用白名单 `game.static_smoke` 自检当前 `game/index.html`,通过后启动 `127.0.0.1` 本地 HTTP 预览。独立执行 `game.static_smoke` 时如果已有 `.agent/run.latest.json`,必须追加 `Playtest / game.static_smoke` trace step,避免“运行了代码但编排 trace 不可见”。
- 2026-06-25 调整:普通用户通过聊天输入 `/trace` 触发只读 `agent.trace_read`,读取 `.agent/run.latest.json` 并在聊天里摘要 loop 轮次、stopReason、nextStep、active / carry-over 任务、repairRoutes、agent 建议命令和最近 step。trace 面板仍只在开发窗口展示,普通用户窗口不新增面板。
File diff suppressed because one or more lines are too long