Skip to content

Commit ddccfd3

Browse files
committed
fix(ui): refresh agent files after external edits
1 parent f60eae8 commit ddccfd3

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

ui/src/ui/app-render.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,17 @@ export function renderApp(state: AppViewState) {
421421
void state.loadCron();
422422
}
423423
},
424-
onLoadFiles: (agentId) => loadAgentFiles(state, agentId),
424+
onLoadFiles: (agentId) => {
425+
void (async () => {
426+
await loadAgentFiles(state, agentId);
427+
if (state.agentFileActive) {
428+
await loadAgentFileContent(state, agentId, state.agentFileActive, {
429+
force: true,
430+
preserveDraft: true,
431+
});
432+
}
433+
})();
434+
},
425435
onSelectFile: (name) => {
426436
state.agentFileActive = name;
427437
if (!resolvedAgentId) {

ui/src/ui/controllers/agent-files.ts

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,16 @@ export async function loadAgentFiles(state: AgentFilesState, agentId: string) {
5555
}
5656
}
5757

58-
export async function loadAgentFileContent(state: AgentFilesState, agentId: string, name: string) {
58+
export async function loadAgentFileContent(
59+
state: AgentFilesState,
60+
agentId: string,
61+
name: string,
62+
opts?: { force?: boolean; preserveDraft?: boolean },
63+
) {
5964
if (!state.client || !state.connected || state.agentFilesLoading) {
6065
return;
6166
}
62-
if (Object.hasOwn(state.agentFileContents, name)) {
67+
if (!opts?.force && Object.hasOwn(state.agentFileContents, name)) {
6368
return;
6469
}
6570
state.agentFilesLoading = true;
@@ -71,9 +76,16 @@ export async function loadAgentFileContent(state: AgentFilesState, agentId: stri
7176
});
7277
if (res?.file) {
7378
const content = res.file.content ?? "";
79+
const previousBase = state.agentFileContents[name] ?? "";
80+
const currentDraft = state.agentFileDrafts[name];
81+
const preserveDraft = opts?.preserveDraft ?? true;
7482
state.agentFilesList = mergeFileEntry(state.agentFilesList, res.file);
7583
state.agentFileContents = { ...state.agentFileContents, [name]: content };
76-
if (!Object.hasOwn(state.agentFileDrafts, name)) {
84+
if (
85+
!preserveDraft ||
86+
!Object.hasOwn(state.agentFileDrafts, name) ||
87+
currentDraft === previousBase
88+
) {
7789
state.agentFileDrafts = { ...state.agentFileDrafts, [name]: content };
7890
}
7991
}

0 commit comments

Comments
 (0)