diff --git a/apps/ai-game-creator-shell/src/App.tsx b/apps/ai-game-creator-shell/src/App.tsx
index 4eff7552c..f771466d9 100644
--- a/apps/ai-game-creator-shell/src/App.tsx
+++ b/apps/ai-game-creator-shell/src/App.tsx
@@ -3095,6 +3095,58 @@ function formatLlmAgentStatusLine(agent: GameCreatorAgentLlmConfigStatus) {
return parts.join(',');
}
+function llmStatusForAgentCard(
+ status: GameCreatorLlmConfigStatus | null,
+ agent: AgentStatusCard,
+) {
+ return (
+ status?.agents?.find(
+ (candidate) =>
+ candidate.agentId === agent.taskId || candidate.agentId === agent.id,
+ ) ?? null
+ );
+}
+
+function formatAgentCardLlmStatus(
+ status: GameCreatorLlmConfigStatus | null,
+ agent: AgentStatusCard,
+) {
+ const agentStatus = llmStatusForAgentCard(status, agent);
+ if (!agentStatus) {
+ return null;
+ }
+ return [
+ `LLM:${agentStatus.configured ? '已配置' : '未就绪'}`,
+ agentStatus.model ?? '未命名模型',
+ agentStatus.apiKind,
+ `流式${agentStatus.stream ? '开' : '关'}`,
+ `Key${agentStatus.apiKeyPresent ? '已读' : '未读'}`,
+ ].join(' · ');
+}
+
+function formatAgentDialogLlmStatus(
+ status: GameCreatorLlmConfigStatus | null,
+ agent: AgentStatusCard,
+) {
+ const agentStatus = llmStatusForAgentCard(status, agent);
+ if (!agentStatus) {
+ return null;
+ }
+ const parts = [
+ `LLM:${agentStatus.configured ? '已配置' : '未就绪'}`,
+ `${agentStatus.model ?? '未命名模型'} @ ${
+ agentStatus.baseUrl ?? '未设置 base_url'
+ }`,
+ agentStatus.apiKind,
+ `流式 ${agentStatus.stream ? '开启' : '关闭'}`,
+ `API Key ${agentStatus.apiKeyPresent ? '已读取' : '未读取'}`,
+ ];
+ if (!agentStatus.configured && agentStatus.error) {
+ parts.push(`错误:${agentStatus.error}`);
+ }
+ return parts.join(',');
+}
+
function formatTraceTaskId(taskId: string, tasks: GameCreationAppTaskState[]) {
const task = tasks.find((candidate) => candidate.id === taskId);
if (!task) {
@@ -3546,6 +3598,8 @@ export function App() {
useState(false);
const [agentRunStatus, setAgentRunStatus] = useState('未运行');
const [runtimeConfigOpen, setRuntimeConfigOpen] = useState(false);
+ const [llmConfigStatus, setLlmConfigStatus] =
+ useState(null);
const [workspaceStatus, setWorkspaceStatus] = useState('请选择工作区');
const [selectedAgent, setSelectedAgent] = useState(
null,
@@ -5547,6 +5601,7 @@ export function App() {
async function executeLlmConfigStatus() {
const invoke = resolveTauriInvoke();
if (!invoke) {
+ setLlmConfigStatus(null);
setMessages((current) => [
...current,
{ role: 'assistant', text: '需要在 Tauri App 内运行。' },
@@ -5558,6 +5613,7 @@ export function App() {
const status = await invoke(
'check_game_creator_llm_config',
);
+ setLlmConfigStatus(status);
setCommandLog((current) => [...current, 'llm.config_check']);
const agentLines = (status.agents ?? []).map(formatLlmAgentStatusLine);
const summary = status.configured
@@ -5579,6 +5635,7 @@ export function App() {
},
]);
} catch (error) {
+ setLlmConfigStatus(null);
setMessages((current) => [
...current,
{
@@ -9333,6 +9390,9 @@ export function App() {
0,
agentConversationMessages.length - visibleAgentConversationMessages.length,
);
+ const selectedAgentLlmStatus = selectedAgent
+ ? formatAgentDialogLlmStatus(llmConfigStatus, selectedAgent)
+ : null;
function showEarlierConversationMessages() {
setConversationVisibleCount((current) =>
@@ -10017,32 +10077,39 @@ export function App() {
- {agentStatusCards.map((agent) => (
-
- ))}
+ {agentStatusCards.map((agent) => {
+ const agentLlmStatus = formatAgentCardLlmStatus(
+ llmConfigStatus,
+ agent,
+ );
+ return (
+
+ );
+ })}
@@ -10098,9 +10165,18 @@ export function App() {
}`}
) : null}
+ {selectedAgentLlmStatus ? (
+ {selectedAgentLlmStatus}
+ ) : null}
{selectedAgent.summary}
+