fix: expose agent runtime status metadata

This commit is contained in:
Peter Steinberger
2026-04-29 05:01:45 +01:00
parent 0015d34fda
commit e5dc0e6d15
23 changed files with 451 additions and 64 deletions

View File

@@ -426,7 +426,8 @@ async function executeAgents(client: GatewayBrowserClient): Promise<SlashCommand
const isDefault = agent.id === result?.defaultId;
const name = agent.identity?.name || agent.name || agent.id;
const marker = isDefault ? " *(default)*" : "";
lines.push(`- \`${agent.id}\`${name}${marker}`);
const runtime = agent.agentRuntime?.id ? ` · runtime \`${agent.agentRuntime.id}\`` : "";
lines.push(`- \`${agent.id}\`${name}${marker}${runtime}`);
}
return { content: lines.join("\n") };
} catch (err) {

View File

@@ -11,6 +11,7 @@ import {
normalizeModelValue,
parseFallbackList,
resolveAgentConfig,
resolveAgentRuntimeLabel,
resolveModelFallbacks,
resolveModelLabel,
resolveModelPrimary,
@@ -64,6 +65,7 @@ export function renderAgentOverview(params: {
: config.defaults?.model
? resolveModelLabel(config.defaults?.model)
: resolveModelLabel(agentModel);
const runtime = resolveAgentRuntimeLabel(agent.agentRuntime);
const defaultModel = resolveModelLabel(config.defaults?.model ?? agentModel);
const entryPrimary = resolveModelPrimary(config.entry?.model);
const defaultPrimary =
@@ -121,6 +123,10 @@ export function renderAgentOverview(params: {
<div class="label">Primary Model</div>
<div class="mono">${model}</div>
</div>
<div class="agent-kv">
<div class="label">Runtime</div>
<div class="mono">${runtime}</div>
</div>
<div class="agent-kv">
<div class="label">Skills Filter</div>
<div>${skillFilter ? `${skillCount} selected` : "all skills"}</div>

View File

@@ -112,6 +112,10 @@ function renderAgentContextCard(
<div class="label">Primary Model</div>
<div class="mono">${context.model}</div>
</div>
<div class="agent-kv">
<div class="label">Runtime</div>
<div class="mono">${context.runtime}</div>
</div>
<div class="agent-kv">
<div class="label">Identity Name</div>
<div>${context.identityName}</div>

View File

@@ -204,6 +204,7 @@ describe("buildAgentContext", () => {
primary: "openai/gpt-5.5",
fallbacks: ["openai-codex/gpt-5.2-codex"],
},
agentRuntime: { id: "claude-cli", fallback: "none", source: "agent" },
},
null,
null,
@@ -213,6 +214,7 @@ describe("buildAgentContext", () => {
expect(context.workspace).toBe("/tmp/agent-workspace");
expect(context.model).toBe("openai/gpt-5.5 (+1 fallback)");
expect(context.runtime).toBe("claude-cli (fallback none)");
expect(context.isDefault).toBe(true);
});

View File

@@ -167,6 +167,7 @@ type AgentConfigEntry = {
workspace?: string;
agentDir?: string;
model?: unknown;
agentRuntime?: unknown;
skills?: string[];
tools?: {
profile?: string;
@@ -386,6 +387,7 @@ export function resolveAgentConfig(config: Record<string, unknown> | null, agent
export type AgentContext = {
workspace: string;
model: string;
runtime: string;
identityName: string;
identityAvatar: string;
skillsLabel: string;
@@ -413,6 +415,7 @@ export function buildAgentContext(
: config.defaults?.model
? resolveModelLabel(config.defaults?.model)
: resolveModelLabel(agent.model);
const runtime = resolveAgentRuntimeLabel(agent.agentRuntime);
const identityName =
normalizeOptionalString(agent.identity?.name) ||
normalizeOptionalString(agent.name) ||
@@ -427,6 +430,7 @@ export function buildAgentContext(
return {
workspace,
model: modelLabel,
runtime,
identityName,
identityAvatar,
skillsLabel: skillFilter ? `${skillCount} selected` : "all skills",
@@ -434,6 +438,14 @@ export function buildAgentContext(
};
}
export function resolveAgentRuntimeLabel(
agentRuntime?: AgentsListResult["agents"][number]["agentRuntime"],
): string {
const id = normalizeOptionalString(agentRuntime?.id) ?? "pi";
const fallback = normalizeOptionalString(agentRuntime?.fallback);
return fallback ? `${id} (fallback ${fallback})` : id;
}
export function resolveModelLabel(model?: unknown): string {
if (!model) {
return "-";