mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-17 08:11:43 +00:00
fix(ui): preserve agent file edits during save (#105359)
* fix(ui): preserve agent file edits during save * chore: defer agent file note to release
This commit is contained in:
committed by
GitHub
parent
165651fb79
commit
35b527c5bb
@@ -89,4 +89,43 @@ describe("agent file requests", () => {
|
||||
expect(state.agentFileContents).toEqual({});
|
||||
expect(state.agentFileSaving).toBe(false);
|
||||
});
|
||||
|
||||
it("commits the submitted draft when it stays current", async () => {
|
||||
const client = {
|
||||
request: vi.fn().mockResolvedValue({ ok: true, ...fileResult("submitted") }),
|
||||
} as unknown as GatewayBrowserClient;
|
||||
const state = createState(client);
|
||||
state.agentFileContents = { "AGENTS.md": "original" };
|
||||
state.agentFileDrafts = { "AGENTS.md": "submitted" };
|
||||
|
||||
await saveAgentFile(state, "main", "AGENTS.md", "submitted");
|
||||
|
||||
expect(state.agentFileContents).toEqual({ "AGENTS.md": "submitted" });
|
||||
expect(state.agentFileDrafts).toEqual({ "AGENTS.md": "submitted" });
|
||||
expect(state.agentFileSaving).toBe(false);
|
||||
});
|
||||
|
||||
it("preserves edits made while a save is pending", async () => {
|
||||
let resolveSave!: (value: AgentsFilesSetResult) => void;
|
||||
const client = {
|
||||
request: vi.fn(
|
||||
() =>
|
||||
new Promise<AgentsFilesSetResult>((resolve) => {
|
||||
resolveSave = resolve;
|
||||
}),
|
||||
),
|
||||
} as unknown as GatewayBrowserClient;
|
||||
const state = createState(client);
|
||||
state.agentFileContents = { "AGENTS.md": "original" };
|
||||
state.agentFileDrafts = { "AGENTS.md": "submitted" };
|
||||
|
||||
const save = saveAgentFile(state, "main", "AGENTS.md", "submitted");
|
||||
state.agentFileDrafts = { "AGENTS.md": "typed while saving" };
|
||||
resolveSave({ ok: true, ...fileResult("submitted") });
|
||||
await save;
|
||||
|
||||
expect(state.agentFileContents).toEqual({ "AGENTS.md": "submitted" });
|
||||
expect(state.agentFileDrafts).toEqual({ "AGENTS.md": "typed while saving" });
|
||||
expect(state.agentFileSaving).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -110,7 +110,11 @@ export async function saveAgentFile(
|
||||
if (res?.file && isCurrent()) {
|
||||
state.agentFilesList = mergeFileEntry(state.agentFilesList, res.file);
|
||||
state.agentFileContents = { ...state.agentFileContents, [name]: content };
|
||||
state.agentFileDrafts = { ...state.agentFileDrafts, [name]: content };
|
||||
// The response establishes the saved base, but must not discard text
|
||||
// entered after this save started.
|
||||
if (!Object.hasOwn(state.agentFileDrafts, name) || state.agentFileDrafts[name] === content) {
|
||||
state.agentFileDrafts = { ...state.agentFileDrafts, [name]: content };
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
if (isCurrent()) {
|
||||
|
||||
Reference in New Issue
Block a user