mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-21 10:16:44 +00:00
fix(ui): select AGENTS.md when files open (#111967)
This commit is contained in:
@@ -20,6 +20,7 @@ type TestAgentsPage = HTMLElement & {
|
||||
routeData?: AgentsRouteData;
|
||||
agentFilesLoading: boolean;
|
||||
agentFilesList: AgentsFilesListResult | null;
|
||||
agentFileActive: string | null;
|
||||
agentFileContents: Record<string, string>;
|
||||
agentIdentityLoading: boolean;
|
||||
agentsPanel: string;
|
||||
@@ -244,6 +245,52 @@ describe("AgentsPage gateway lifecycle", () => {
|
||||
expect(page.agentFilesLoading).toBe(false);
|
||||
});
|
||||
|
||||
it("selects and loads AGENTS.md when the file list opens", async () => {
|
||||
const fileList: AgentsFilesListResult = {
|
||||
agentId: "main",
|
||||
workspace: "/tmp/workspace",
|
||||
files: [
|
||||
{
|
||||
name: "AGENTS.md",
|
||||
path: "/tmp/workspace/AGENTS.md",
|
||||
missing: false,
|
||||
},
|
||||
{
|
||||
name: "SOUL.md",
|
||||
path: "/tmp/workspace/SOUL.md",
|
||||
missing: false,
|
||||
},
|
||||
],
|
||||
};
|
||||
const request = vi.fn(async () => ({
|
||||
file: {
|
||||
...fileList.files[0],
|
||||
content: "# Instructions",
|
||||
},
|
||||
}));
|
||||
const client = { request } as unknown as GatewayBrowserClient;
|
||||
const page = document.createElement("openclaw-agents-page") as TestAgentsPage;
|
||||
page.client = client;
|
||||
page.connected = true;
|
||||
page.agentsSelectedId = "main";
|
||||
page.context = {
|
||||
agents: {
|
||||
files: () => ({ list: null, loading: false, error: null }),
|
||||
ensureFiles: vi.fn(async () => fileList),
|
||||
refreshFiles: vi.fn(async () => fileList),
|
||||
},
|
||||
} as unknown as ApplicationContext;
|
||||
|
||||
await page.loadAgentFiles("main");
|
||||
|
||||
expect(page.agentFileActive).toBe("AGENTS.md");
|
||||
expect(page.agentFileContents["AGENTS.md"]).toBe("# Instructions");
|
||||
expect(request).toHaveBeenCalledWith("agents.files.get", {
|
||||
agentId: "main",
|
||||
name: "AGENTS.md",
|
||||
});
|
||||
});
|
||||
|
||||
it("retries an in-flight panel load after a same-client disconnect", async () => {
|
||||
let resolveFirst!: (value: AgentsFilesListResult) => void;
|
||||
let resolveSecond!: (value: AgentsFilesListResult) => void;
|
||||
|
||||
@@ -316,11 +316,17 @@ class AgentsPage extends OpenClawLightDomElement implements AgentsState {
|
||||
}
|
||||
this.agentFilesList = status.list;
|
||||
this.agentFilesError = status.error;
|
||||
if (
|
||||
this.agentFileActive &&
|
||||
!status.list.files.some((file) => file.name === this.agentFileActive)
|
||||
) {
|
||||
this.agentFileActive = null;
|
||||
void this.selectDefaultAgentFile(agentId);
|
||||
}
|
||||
|
||||
private async selectDefaultAgentFile(agentId: string) {
|
||||
const files = this.agentFilesList?.files ?? [];
|
||||
if (this.agentFileActive && files.some((file) => file.name === this.agentFileActive)) {
|
||||
return;
|
||||
}
|
||||
this.agentFileActive = files.find((file) => file.name === "AGENTS.md")?.name ?? null;
|
||||
if (this.agentFileActive) {
|
||||
await loadAgentFileContent(this, agentId, this.agentFileActive);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -551,17 +557,14 @@ class AgentsPage extends OpenClawLightDomElement implements AgentsState {
|
||||
}
|
||||
this.agentFilesList = list ?? agents.files(agentId).list;
|
||||
this.agentFilesError = agents.files(agentId).error;
|
||||
if (
|
||||
this.agentFileActive &&
|
||||
!this.agentFilesList?.files.some((file) => file.name === this.agentFileActive)
|
||||
) {
|
||||
this.agentFileActive = null;
|
||||
}
|
||||
} finally {
|
||||
if (this.isCurrentRequest(client, generation, agentId, { agents })) {
|
||||
this.agentFilesLoading = false;
|
||||
}
|
||||
}
|
||||
if (this.isCurrentRequest(client, generation, agentId, { agents })) {
|
||||
await this.selectDefaultAgentFile(agentId);
|
||||
}
|
||||
}
|
||||
|
||||
private async refreshCron() {
|
||||
|
||||
Reference in New Issue
Block a user