Skip to content

Commit 3b19a14

Browse files
committed
🤖 fix: emit metadata update after setting task state
Address Codex review comment: when a task workspace is created, workspaceService.create() emits metadata before taskState fields are set. Now we call workspaceService.emitMetadataUpdate() after setWorkspaceTaskState() so the renderer learns about parentWorkspaceId and agentType immediately, enabling nested sidebar styling without restart. Added emitMetadataUpdate() method to workspaceService. Change-Id: I7679051bf422554f0d0a3fa543d14587c163f233 Signed-off-by: Thomas Kosiewski <tk@coder.com>
1 parent a367c13 commit 3b19a14

File tree

3 files changed

+27
-0
lines changed

3 files changed

+27
-0
lines changed

src/node/services/taskService.test.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,11 @@ class FakeWorkspaceService {
276276
this.appendedMessages.push({ workspaceId, message: muxMessage });
277277
return Promise.resolve(Ok(undefined));
278278
}
279+
280+
emitMetadataUpdate(_workspaceId: string): Promise<void> {
281+
// No-op in tests - we don't need to verify metadata emission
282+
return Promise.resolve();
283+
}
279284
}
280285

281286
function createWorkspaceMetadata(

src/node/services/taskService.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,11 @@ export class TaskService extends EventEmitter {
227227

228228
await this.config.setWorkspaceTaskState(taskId, taskState);
229229

230+
// Emit metadata update so the renderer knows about parentWorkspaceId/agentType.
231+
// The initial create() call emits metadata before these fields are set,
232+
// so we need to re-emit after persisting the task state.
233+
await this.workspaceService.emitMetadataUpdate(taskId);
234+
230235
log.debug(`Created task workspace ${taskId} for parent ${parentWorkspaceId}`, {
231236
agentType,
232237
status: taskState.taskStatus,

src/node/services/workspaceService.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -747,6 +747,23 @@ export class WorkspaceService extends EventEmitter {
747747
return allMetadata.find((m) => m.id === workspaceId) ?? null;
748748
}
749749

750+
/**
751+
* Emit a metadata update event for a workspace.
752+
* Used when workspace metadata changes outside of normal workspaceService flows
753+
* (e.g., when taskService sets parentWorkspaceId/agentType after workspace creation).
754+
*/
755+
async emitMetadataUpdate(workspaceId: string): Promise<void> {
756+
const allMetadata = await this.config.getAllWorkspaceMetadata();
757+
const metadata = allMetadata.find((m) => m.id === workspaceId) ?? null;
758+
759+
const session = this.sessions.get(workspaceId);
760+
if (session) {
761+
session.emitMetadata(metadata);
762+
} else {
763+
this.emit("metadata", { workspaceId, metadata });
764+
}
765+
}
766+
750767
async rename(workspaceId: string, newName: string): Promise<Result<{ newWorkspaceId: string }>> {
751768
try {
752769
if (this.aiService.isStreaming(workspaceId)) {

0 commit comments

Comments
 (0)