From ff28a08f3e90d037727534720af627034d63f829 Mon Sep 17 00:00:00 2001 From: FBLGit Date: Mon, 22 Sep 2025 15:14:32 +0800 Subject: [PATCH 1/3] { "tool": "Edit", "files": [ "apps/server/src/handlers/task/task.decompose.handler.ts" ], "tasks": [], "todos": [], "sessionId": "ef468340-f3f2-4ada-a2bb-2ea4433d9517", "instanceId": "worker-1", "timestamp": 1758525272925 } --- .../src/handlers/task/task.decompose.handler.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/apps/server/src/handlers/task/task.decompose.handler.ts b/apps/server/src/handlers/task/task.decompose.handler.ts index 65111bf..ce75bf6 100644 --- a/apps/server/src/handlers/task/task.decompose.handler.ts +++ b/apps/server/src/handlers/task/task.decompose.handler.ts @@ -117,17 +117,23 @@ export class TaskDecomposeHandler { // Get worker's working directory from instance metadata let workingDirectory: string | undefined; - if (ctx.instanceId) { - const instanceKey = `cb:instance:${ctx.instanceId}`; + // First check if a specific worker was requested in the input metadata + const requestedWorkerId = input.metadata?.workerId; + const workerId = requestedWorkerId || ctx.instanceId; + + if (workerId) { + const instanceKey = `cb:instance:${workerId}`; const instanceMetadata = await redis.pub.hget(instanceKey, 'metadata'); if (instanceMetadata) { try { const metadata = JSON.parse(instanceMetadata); workingDirectory = metadata.workingDirectory; - console.log(`[TaskDecompose] Using working directory from instance ${ctx.instanceId}: ${workingDirectory}`); + console.log(`[TaskDecompose] Using working directory from instance ${workerId}: ${workingDirectory}`); } catch (e) { - console.warn(`[TaskDecompose] Failed to parse instance metadata:`, e); + console.warn(`[TaskDecompose] Failed to parse instance metadata for ${workerId}:`, e); } + } else if (requestedWorkerId) { + console.warn(`[TaskDecompose] Requested worker ${requestedWorkerId} not found or has no metadata`); } } From c96743c47e1bb560956de46889c90c55dc8570b1 Mon Sep 17 00:00:00 2001 From: FBLGit Date: Tue, 23 Sep 2025 12:07:29 +0800 Subject: [PATCH 2/3] { "tool": "Edit", "files": [ "apps/web/src/services/event-client.ts" ], "tasks": [], "todos": [], "sessionId": "ef468340-f3f2-4ada-a2bb-2ea4433d9517", "instanceId": "worker-1", "timestamp": 1758600449674 } --- apps/web/src/services/event-client.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/apps/web/src/services/event-client.ts b/apps/web/src/services/event-client.ts index 61b0a33..aa18fdd 100644 --- a/apps/web/src/services/event-client.ts +++ b/apps/web/src/services/event-client.ts @@ -83,7 +83,16 @@ export class EventClient { const id = ++this.requestId; // Use longer timeout for context generation and other long-running operations - const longRunningMethods = ['task.context', 'swarm.context', 'swarm.decompose', 'swarm.synthesize', 'swarm.resolve']; + const longRunningMethods = [ + 'task.context', + 'task.decompose', + 'task.create_project', + 'swarm.context', + 'swarm.decompose', + 'swarm.synthesize', + 'swarm.resolve', + 'swarm.create_project' + ]; const isLongRunning = longRunningMethods.includes(method); const originalTimeout = this.config.timeout; From 9929324a555bcad24f2868752cc1ba9074d6b8f7 Mon Sep 17 00:00:00 2001 From: FBLGit Date: Tue, 23 Sep 2025 12:07:54 +0800 Subject: [PATCH 3/3] { "tool": "Edit", "files": [ "apps/web/src/services/event-client.ts" ], "tasks": [], "todos": [], "sessionId": "ef468340-f3f2-4ada-a2bb-2ea4433d9517", "instanceId": "worker-1", "timestamp": 1758600474570 } --- apps/web/src/services/event-client.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/web/src/services/event-client.ts b/apps/web/src/services/event-client.ts index aa18fdd..4c623c7 100644 --- a/apps/web/src/services/event-client.ts +++ b/apps/web/src/services/event-client.ts @@ -115,8 +115,11 @@ export class EventClient { let lastError: Error | undefined; + // For long-running operations, don't retry automatically as they may not be idempotent + const maxAttempts = isLongRunning ? 1 : this.config.retries + 1; + try { - for (let attempt = 0; attempt <= this.config.retries; attempt++) { + for (let attempt = 0; attempt < maxAttempts; attempt++) { try { const response = await this.sendRequest(request);