diff --git a/apps/server/src/orchestration-v2/Adapters/ClaudeTaskOutputTail.ts b/apps/server/src/orchestration-v2/Adapters/ClaudeTaskOutputTail.ts index 6ab23fddbe16c..ff096cdad2913 100644 --- a/apps/server/src/orchestration-v2/Adapters/ClaudeTaskOutputTail.ts +++ b/apps/server/src/orchestration-v2/Adapters/ClaudeTaskOutputTail.ts @@ -56,9 +56,12 @@ export const tailClaudeTaskOutput = Effect.fn("ClaudeTaskOutputTail.tail")(funct readonly onChunk: (chunk: string) => Effect.Effect; }) { const fileSystem = yield* FileSystem.FileSystem; - const pause = Effect.raceFirst( - Effect.sleep(CLAUDE_TASK_OUTPUT_POLL_MS).pipe(Effect.as(false)), - Deferred.await(input.stop).pipe(Effect.as(true)), + const pause = Deferred.await(input.stop).pipe( + Effect.as(true), + Effect.timeoutOrElse({ + duration: CLAUDE_TASK_OUTPUT_POLL_MS, + orElse: () => Effect.succeed(false), + }), ); let file = Option.none(); for (let attempt = 0; Option.isNone(file); attempt += 1) { diff --git a/tsconfig.base.json b/tsconfig.base.json index 00ff7550156c6..63a69752345a9 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -24,6 +24,7 @@ "namespaceImportPackages": ["@effect/platform-node", "effect"], "effectFn": ["span", "inferred-span", "suggested-span"], "diagnosticSeverity": { + "raceFirstWithSleepToTimeout": "error", "redundantMapError": "error", "optionMatchToFromOption": "error", "catchToIgnore": "error",