feat(FN-2640): align planning labels across agent log and tests
- Rename Planning/Triage label to Planning in Agent Log model metadata and related assertions - Map triage agent badge display name to Plan while preserving existing labels for other agent roles - Update TaskDetailModal and AgentLogViewer tests to match the revised planning terminology - Stabilize dashboard TUI QR payload test by waiting for label and payload text separately with explicit timeouts
This commit is contained in:
@@ -469,7 +469,8 @@ describe("Settings view", () => {
|
||||
await waitForFrameContains(lastFrame, "Short-lived expires:");
|
||||
|
||||
stdin.write("K");
|
||||
await waitForFrameContains(lastFrame, "QR text payload: ASCII-QR-PAYLOAD");
|
||||
await waitForFrameContains(lastFrame, "QR text payload:", 6000);
|
||||
await waitForFrameContains(lastFrame, "ASCII-QR-PAYLOAD", 6000);
|
||||
unmount();
|
||||
});
|
||||
|
||||
|
||||
@@ -51,6 +51,10 @@ const markdownComponents: Components = {
|
||||
|
||||
const BOTTOM_FOLLOW_THRESHOLD_PX = 50;
|
||||
|
||||
const AGENT_DISPLAY_NAMES: Record<string, string> = {
|
||||
triage: "Plan",
|
||||
};
|
||||
|
||||
function isNearBottom(container: HTMLDivElement): boolean {
|
||||
return container.scrollHeight - (container.scrollTop + container.clientHeight) <= BOTTOM_FOLLOW_THRESHOLD_PX;
|
||||
}
|
||||
@@ -341,7 +345,7 @@ export function AgentLogViewer({
|
||||
)}
|
||||
</div>
|
||||
<div className="agent-log-model-group">
|
||||
<span className="agent-log-model-label">Planning/Triage:</span>
|
||||
<span className="agent-log-model-label">Planning:</span>
|
||||
{hasPlanningOverride ? (
|
||||
<span className="agent-log-model-value">
|
||||
<ProviderIcon provider={planningModel.provider!} size="sm" />
|
||||
@@ -403,7 +407,7 @@ export function AgentLogViewer({
|
||||
|
||||
const agentBadge = showBadge ? (
|
||||
<span className="agent-log-badge-row">
|
||||
<span className="agent-log-agent-badge">[{entry.agent}]</span>
|
||||
<span className="agent-log-agent-badge">[{AGENT_DISPLAY_NAMES[entry.agent!] ?? entry.agent}]</span>
|
||||
{timestampSpan}
|
||||
</span>
|
||||
) : null;
|
||||
|
||||
@@ -221,7 +221,7 @@ describe("AgentLogViewer", () => {
|
||||
const { container } = render(<AgentLogViewer entries={entries} loading={false} />);
|
||||
const badges = container.querySelectorAll(".agent-log-agent-badge");
|
||||
expect(badges).toHaveLength(2);
|
||||
expect(badges[0].textContent).toBe("[triage]");
|
||||
expect(badges[0].textContent).toBe("[Plan]");
|
||||
expect(badges[1].textContent).toBe("[executor]");
|
||||
});
|
||||
|
||||
@@ -248,7 +248,7 @@ describe("AgentLogViewer", () => {
|
||||
const badges = container.querySelectorAll(".agent-log-agent-badge");
|
||||
expect(badges).toHaveLength(1);
|
||||
// In chronological order, the oldest (hmm) gets the badge
|
||||
expect(badges[0].textContent).toBe("[triage]");
|
||||
expect(badges[0].textContent).toBe("[Plan]");
|
||||
});
|
||||
|
||||
it("always shows badge on tool entries regardless of surrounding entries", () => {
|
||||
@@ -422,10 +422,10 @@ describe("AgentLogViewer", () => {
|
||||
const header = container.querySelector("[data-testid='agent-log-model-header']");
|
||||
expect(header).toBeTruthy();
|
||||
expect(container.querySelector('[data-provider="anthropic"]')).toBeTruthy();
|
||||
expect(header!.textContent).not.toContain("Planning/Triage:");
|
||||
expect(header!.textContent).not.toContain("Planning:");
|
||||
|
||||
fireEvent.click(screen.getByTestId("agent-log-model-expand"));
|
||||
expect(header!.textContent).toContain("Planning/Triage:");
|
||||
expect(header!.textContent).toContain("Planning:");
|
||||
expect(header!.textContent).toContain("anthropic/claude-opus-4");
|
||||
});
|
||||
|
||||
@@ -721,7 +721,7 @@ describe("AgentLogViewer", () => {
|
||||
|
||||
expect(badges).toHaveLength(3);
|
||||
expect(timestamps).toHaveLength(3);
|
||||
expect(badges.map((badge) => badge.textContent)).toEqual(["[triage]", "[executor]", "[reviewer]"]);
|
||||
expect(badges.map((badge) => badge.textContent)).toEqual(["[Plan]", "[executor]", "[reviewer]"]);
|
||||
});
|
||||
|
||||
it("badge container includes both badge text and timestamp text", () => {
|
||||
|
||||
@@ -1982,7 +1982,7 @@ describe("TaskDetailModal", () => {
|
||||
const header = await openAgentLogAndExpandModelDetails(container);
|
||||
|
||||
// Planning should show the runtime triage marker, not settings default
|
||||
expect(header.textContent).toContain("Planning/Triage:");
|
||||
expect(header.textContent).toContain("Planning:");
|
||||
expect(header.textContent).toContain("google/gemini-pro");
|
||||
// Executor/Validator should still show settings default
|
||||
expect(header.textContent).toContain("anthropic/claude-sonnet-4-5");
|
||||
@@ -2023,7 +2023,7 @@ describe("TaskDetailModal", () => {
|
||||
const header = await openAgentLogAndExpandModelDetails(container);
|
||||
|
||||
// Planning should use planningProvider/planningModelId from settings
|
||||
expect(header.textContent).toContain("Planning/Triage:");
|
||||
expect(header.textContent).toContain("Planning:");
|
||||
expect(header.textContent).toContain("openai/gpt-4o");
|
||||
// Executor/Validator should show default
|
||||
expect(header.textContent).toContain("anthropic/claude-sonnet-4-5");
|
||||
@@ -2039,7 +2039,7 @@ describe("TaskDetailModal", () => {
|
||||
|
||||
const header = await openAgentLogAndExpandModelDetails(container);
|
||||
|
||||
expect(header.textContent).toContain("Planning/Triage:");
|
||||
expect(header.textContent).toContain("Planning:");
|
||||
expect(header.textContent).toContain("anthropic/claude-sonnet-4-5");
|
||||
|
||||
// Planning falls back to default - same as executor/validator
|
||||
@@ -2053,7 +2053,7 @@ describe("TaskDetailModal", () => {
|
||||
});
|
||||
|
||||
const header = await openAgentLogAndExpandModelDetails(container);
|
||||
expect(header.textContent).toContain("Planning/Triage:");
|
||||
expect(header.textContent).toContain("Planning:");
|
||||
const defaultBadges = header.querySelectorAll(".model-badge-default");
|
||||
// 3 default badges: executor, validator, planning
|
||||
expect(defaultBadges).toHaveLength(3);
|
||||
@@ -2097,7 +2097,7 @@ describe("TaskDetailModal", () => {
|
||||
|
||||
const header = await openAgentLogAndExpandModelDetails(container);
|
||||
// Per-task override should take precedence over settings
|
||||
expect(header.textContent).toContain("Planning/Triage:");
|
||||
expect(header.textContent).toContain("Planning:");
|
||||
expect(header.textContent).toContain("google/gemini-2.5-pro");
|
||||
// Should NOT show the settings planning model
|
||||
expect(header.textContent).not.toContain("openai/gpt-4o");
|
||||
|
||||
Reference in New Issue
Block a user