MCPcopy Create free account
hub / github.com/coder/mux / finalizeWorkspaceTurnFromStreamEnd

Method finalizeWorkspaceTurnFromStreamEnd

src/node/services/taskService.ts:7876–7916  ·  view source on GitHub ↗
(event: StreamEndEvent)

Source from the content-addressed store, hash-verified

7874 }
7875
7876 private async finalizeWorkspaceTurnFromStreamEnd(event: StreamEndEvent): Promise<boolean> {
7877 const metadata = this.getWorkspaceTurnMetadata(event);
7878 if (metadata == null) {
7879 if (event.metadata.muxMetadata != null) {
7880 return false;
7881 }
7882 return await this.interruptWorkspaceTurnFromUncorrelatedStreamEnd(event);
7883 }
7884 const record = await this.taskHandleStore.getWorkspaceTurn(
7885 metadata.ownerWorkspaceId,
7886 metadata.taskHandleId
7887 );
7888 if (record == null) {
7889 log.warn("Ignoring missing workspace turn stream-end handle", {
7890 workspaceId: event.workspaceId,
7891 taskHandleId: metadata.taskHandleId,
7892 });
7893 return true;
7894 }
7895 if (record.workspaceId !== event.workspaceId || record.turnId !== metadata.turnId) {
7896 log.warn("Ignoring out-of-scope workspace turn stream-end", {
7897 workspaceId: event.workspaceId,
7898 taskHandleId: metadata.taskHandleId,
7899 });
7900 return true;
7901 }
7902 if (this.isDeferredWorkspaceTurnMessage(record, event.messageId)) {
7903 return true;
7904 }
7905
7906 const next = this.buildTerminalWorkspaceTurnRecordFromEvent(record, event);
7907 await this.settleWorkspaceTurn({
7908 record,
7909 next,
7910 waiterSettlement:
7911 next.status === "completed"
7912 ? { status: "completed", result: this.buildWorkspaceTurnWaitResult(next) }
7913 : { status: "error", error: new Error(next.error ?? "Workspace turn failed") },
7914 });
7915 return true;
7916 }
7917
7918 private async handleStreamEnd(event: StreamEndEvent): Promise<void> {
7919 const workspaceId = event.workspaceId;

Callers 2

handleStreamEndMethod · 0.95

Tested by

no test coverage detected