补充Agent状态聊天汇总

新增聊天侧agents命令汇总每个Agent当前状态

补充帮助命令和主窗口状态汇总测试

同步AI游戏创作App技术方案和共享决策记录
This commit is contained in:
AIGameCreator App
2026-07-03 03:38:49 +08:00
parent 6fbd1e044a
commit f0ba3c0327
4 changed files with 57 additions and 2 deletions
+45
View File
@@ -1832,6 +1832,7 @@ const chatCommandHelp = [
'/policy-confirm 命令:执行前每次确认',
'/policy-auto 命令:恢复自动执行',
'/tasks:查看任务拆分',
'/agents:查看每个 Agent 的当前状态',
'/trace 或 /loop:查看最近一次 Agent loop trace',
'/agent-status:查看最近 run 生命周期',
'/agent-kill:标记最近 run 为 killed',
@@ -3168,6 +3169,33 @@ function formatAgentDialogLlmStatus(
return parts.join(',');
}
function summarizeAgentStatusCardsForChat(
agents: AgentStatusCard[],
status: GameCreatorLlmConfigStatus | null,
) {
if (agents.length === 0) {
return 'Agent 状态:暂无 Agent';
}
return `Agent 状态:\n${agents
.map((agent) => {
const parts = [
`${taskGroupLabels[agent.group]} / ${agent.role}`,
agent.title,
taskStatusLabels[agent.status],
agent.pass !== null || agent.phase
? `pass ${agent.pass ?? '-'} · ${agent.phase ?? '-'}`
: null,
agent.lifecycleStatus ? `run ${agent.lifecycleStatus}` : null,
agent.taskGraphState
? `编排 ${agentTaskGraphStateLabels[agent.taskGraphState]}`
: null,
formatAgentCardLlmStatus(status, agent),
].filter(Boolean);
return `- ${parts.join(' · ')}\n ${agent.summary}`;
})
.join('\n')}`;
}
function formatTraceTaskId(taskId: string, tasks: GameCreationAppTaskState[]) {
const task = tasks.find((candidate) => candidate.id === taskId);
if (!task) {
@@ -5311,6 +5339,23 @@ export function App() {
return;
}
if (prompt === '/agents') {
if (!requireChatProjectForUserAction()) {
return;
}
setMessages((current) => [
...current,
{
role: 'assistant',
text: summarizeAgentStatusCardsForChat(
agentStatusCards,
llmConfigStatus,
),
},
]);
return;
}
if (prompt === '/trace' || prompt === '/loop') {
void executeAgentTraceChat();
return;
@@ -2052,6 +2052,13 @@ describe('AI 游戏创作 App 界面边界', () => {
expect(screen.queryByText(/planner-secret/)).toBeNull();
expect(screen.queryByText(/art-secret/)).toBeNull();
submitChat('/agents');
expect(
await screen.findByText(
/Agent 状态:[\s\S]*美术组 \/ Asset · 规划美术资产 · 待处理[\s\S]*LLM:已配置 · art-model/,
),
).not.toBeNull();
fireEvent.click(
within(agentStatusPane).getByRole('button', {
name: /规划美术资产/,
@@ -7557,6 +7564,9 @@ describe('AI 游戏创作 App 界面边界', () => {
screen.getByText(/\/policy-confirm 命令:执行前每次确认/),
).not.toBeNull();
expect(screen.getByText(/\/policy-auto 命令:恢复自动执行/)).not.toBeNull();
expect(
screen.getByText(/\/agents:查看每个 Agent 的当前状态/),
).not.toBeNull();
expect(
screen.getByText(/\/agent-status:查看最近 run 生命周期/),
).not.toBeNull();
@@ -3856,7 +3856,7 @@
- 2026-06-26 调整,2026-07-03 更新:AI 游戏创作 App 借鉴 Harbour 的控制平面思想,但不搬 Harbour 后台。最近 run 在 `.agent/run.latest.json` 增加可选 `lifecycleStatus`,并通过 `/agent-status`、`/agent-kill`、`/agent-retry`、`/agent-resume [说明]` 控制本地生命周期,写入 `.agent/activity.jsonl`、`.agent/output.jsonl` 和 `.agent/context.bundle.json`;聊天里的状态 / 控制结果可填入 `/read .agent/output.jsonl` 草稿继续查看 run 输出,但不直接读取文件或绕过 `file.read` 策略。v1 的 kill/retry/resume 只更新本地状态和上下文包,不伪装成能中断已发出的上游 LLM 请求;后续引入独立 runner 后再把 `pending` 接入 claim。
- 2026-07-03 调整:主窗口 Agent 状态栏新增“继续说明”,只把 `/agent-resume ` 填入聊天输入框,让用户补充说明后再走原确认流;策略快捷入口新增 project.index、asset.register、memory.write、preview.open、preview.stop、conversation.read 和 conversation.write 确认草稿,同样只填输入框,不直接写 `.agent/policy.json`。
- 2026-07-03 调整:主窗口 header 常驻项目摘要只从当前已加载的 manifest / trace 派生任务完成数、ready 数、资产来源分布和最近命令结果;未选择工作区时不显示,不为了摘要额外触发 Tauri 读取或写入,也不把任务、文件、run history 或预览开发面板搬进普通用户窗口。
- 2026-07-03 调整:`/llm-status` 读取到的 agent 级 LLM 配置状态可回填到主窗口 Agent 状态列表和单 Agent 对话头部,显示 provider 类型、模型、流式开关和 API Key 是否已读取;密钥本体仍不能进入聊天、状态列表、manifest、trace 或本地项目文件。
- 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` 授权策略;普通用户窗口仍只通过聊天 `/read` 和摘要消息查看需要的日志,不新增日志面板。
- 2026-07-03 调整:单 Agent 对话面板允许用户把当前输入手动追加到该 agent 的 `memory/agents/<group>/<role>.md` 私有记忆;写入复用 `memory.write` 项目策略、项目锁和 Tauri 本地目录能力,不把普通对话流水自动混入私有记忆。
- 2026-07-03 调整:主窗口新增音效登记和画板音频导入快捷入口,只填入 `/asset-register assets/audio/sfx.wav audio audio/wav` 或 `/import-canvas-asset assets/audio/sfx.wav ` 草稿;音乐组仍复用现有资产登记 / 画板回流链路,不新增独立音频生成系统。
File diff suppressed because one or more lines are too long