From afe50439b1434f4dc7bdde97669034b801d7221d Mon Sep 17 00:00:00 2001 From: 777genius Date: Mon, 27 Apr 2026 13:47:04 +0300 Subject: [PATCH] refactor(team): move opencode retry policy helper --- .../services/team/TeamProvisioningService.ts | 15 +-------------- .../delivery/OpenCodePromptDeliveryWatchdog.ts | 18 ++++++++++++++++++ .../OpenCodePromptDeliveryWatchdog.test.ts | 2 +- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/main/services/team/TeamProvisioningService.ts b/src/main/services/team/TeamProvisioningService.ts index 53088641..f4a2b031 100644 --- a/src/main/services/team/TeamProvisioningService.ts +++ b/src/main/services/team/TeamProvisioningService.ts @@ -133,6 +133,7 @@ import { } from './opencode/delivery/OpenCodePromptDeliveryLedger'; import { isOpenCodePromptDeliveryObserveLaterResponseState, + isOpenCodePromptDeliveryRetryAttemptDue, isOpenCodePromptDeliveryRetryableResponseState, isOpenCodeVisibleReplySemanticallySufficient, isOpenCodeVisibleReplyReadCommitAllowed, @@ -1504,20 +1505,6 @@ function nowIso(): string { return new Date().toISOString(); } -export function isOpenCodePromptDeliveryRetryAttemptDue(input: { - attemptDue: boolean; - ledgerRecord: Pick; -}): boolean { - if (!input.attemptDue) { - return false; - } - return ( - input.ledgerRecord.status === 'retry_scheduled' || - input.ledgerRecord.status === 'failed_retryable' || - isOpenCodePromptDeliveryRetryableResponseState(input.ledgerRecord.responseState) - ); -} - function createInitialMemberSpawnStatusEntry(): MemberSpawnStatusEntry { const updatedAt = nowIso(); return { diff --git a/src/main/services/team/opencode/delivery/OpenCodePromptDeliveryWatchdog.ts b/src/main/services/team/opencode/delivery/OpenCodePromptDeliveryWatchdog.ts index 0c6e3c12..1f9f7073 100644 --- a/src/main/services/team/opencode/delivery/OpenCodePromptDeliveryWatchdog.ts +++ b/src/main/services/team/opencode/delivery/OpenCodePromptDeliveryWatchdog.ts @@ -1,5 +1,6 @@ import type { AgentActionMode, InboxMessage, TaskRef } from '@shared/types/team'; import type { OpenCodeDeliveryResponseState } from '../bridge/OpenCodeBridgeCommandContract'; +import type { OpenCodePromptDeliveryStatus } from './OpenCodePromptDeliveryLedger'; export const OPENCODE_PROMPT_DELIVERY_OBSERVE_DELAY_MS = 3_000; export const OPENCODE_PROMPT_DELIVERY_RETRY_DELAY_MS = 15_000; @@ -96,6 +97,23 @@ export function isOpenCodePromptDeliveryRetryableResponseState( ); } +export function isOpenCodePromptDeliveryRetryAttemptDue(input: { + attemptDue: boolean; + ledgerRecord: { + status: OpenCodePromptDeliveryStatus; + responseState: OpenCodeDeliveryResponseState; + }; +}): boolean { + if (!input.attemptDue) { + return false; + } + return ( + input.ledgerRecord.status === 'retry_scheduled' || + input.ledgerRecord.status === 'failed_retryable' || + isOpenCodePromptDeliveryRetryableResponseState(input.ledgerRecord.responseState) + ); +} + export function isOpenCodePromptDeliveryObserveLaterResponseState( state: OpenCodeDeliveryResponseState | undefined ): boolean { diff --git a/test/main/services/team/OpenCodePromptDeliveryWatchdog.test.ts b/test/main/services/team/OpenCodePromptDeliveryWatchdog.test.ts index f0e88782..9461b008 100644 --- a/test/main/services/team/OpenCodePromptDeliveryWatchdog.test.ts +++ b/test/main/services/team/OpenCodePromptDeliveryWatchdog.test.ts @@ -2,9 +2,9 @@ import { describe, expect, it } from 'vitest'; import { isOpenCodePromptDeliveryObserveLaterResponseState, + isOpenCodePromptDeliveryRetryAttemptDue, isOpenCodePromptDeliveryRetryableResponseState, } from '@main/services/team/opencode/delivery/OpenCodePromptDeliveryWatchdog'; -import { isOpenCodePromptDeliveryRetryAttemptDue } from '@main/services/team/TeamProvisioningService'; describe('OpenCodePromptDeliveryWatchdog retry policy', () => { it('treats stale OpenCode sessions as retryable after observation', () => {