Show unsupported goal notices

This commit is contained in:
murashit 2026-05-22 13:20:08 +09:00
parent 9c04b5723c
commit 31037bbe18
3 changed files with 32 additions and 4 deletions

View file

@ -49,6 +49,7 @@ Codex Panel supports the app-server-backed Codex workflows that fit a persistent
- Send steering messages during a running turn, or interrupt when the composer is empty.
- Respond to command, file, and permission approval requests.
- Stream assistant messages, reasoning, commands, tool calls, hooks, file changes, and agent activity.
- Codex goal management is not supported. Incoming goal notifications are shown only as brief system notices.
- Inspect file changes and roll back the latest turn without reverting local files.
- Inspect context usage, usage limits, connection diagnostics, MCP server inventory, and effective config (`/status`, `/doctor`, `/mcp`).
- Inspect and manage discovered Codex hooks from Codex Panel settings.

View file

@ -259,8 +259,10 @@ export class PanelController {
this.actions.refreshThreads();
} else if (method === "thread/settings/updated") {
this.applyThreadSettings(params.threadSettings);
} else if (method === "thread/goal/updated" || method === "thread/goal/cleared") {
return;
} else if (method === "thread/goal/updated") {
this.addSystemMessage(`Thread goal updated: status ${params.goal.status}. Codex Panel does not support goals.`);
} else if (method === "thread/goal/cleared") {
this.addSystemMessage("Thread goal cleared. Codex Panel does not support goals.");
}
}

View file

@ -1064,7 +1064,7 @@ describe("PanelController", () => {
expect(state.activeServiceTierOverride).toBe(true);
});
it("keeps goal notifications out of the message stream", () => {
it("shows unsupported goal update notifications as system messages", () => {
const state = createPanelState();
state.activeThreadId = "thread-active";
const controller = controllerForState(state);
@ -1087,7 +1087,32 @@ describe("PanelController", () => {
},
} satisfies Extract<ServerNotification, { method: "thread/goal/updated" }>);
expect(state.displayItems).toEqual([]);
expect(state.displayItems).toMatchObject([
{
kind: "system",
text: "Thread goal updated: status active. Codex Panel does not support goals.",
},
]);
});
it("shows unsupported goal clear notifications as system messages", () => {
const state = createPanelState();
state.activeThreadId = "thread-active";
const controller = controllerForState(state);
controller.handleNotification({
method: "thread/goal/cleared",
params: {
threadId: "thread-active",
},
} satisfies Extract<ServerNotification, { method: "thread/goal/cleared" }>);
expect(state.displayItems).toMatchObject([
{
kind: "system",
text: "Thread goal cleared. Codex Panel does not support goals.",
},
]);
});
});