fix(renderer): suppress recoverable OpenCode refresh advisories
This commit is contained in:
parent
9924e447c8
commit
d50d81632a
4 changed files with 70 additions and 5 deletions
|
|
@ -414,7 +414,8 @@ function isRecoverableOpenCodeSessionRefreshMessage(message: string | undefined)
|
|||
refreshMarkerText === 'opencode session changed; refreshing the session before retry' ||
|
||||
refreshMarkerText === 'opencode session refresh scheduled after resolved behavior changed' ||
|
||||
refreshMarkerText === 'opencode_prompt_delivery_session_refresh_scheduled' ||
|
||||
refreshMarkerText === 'opencode_session_refresh_scheduled_after_resolved_behavior_changed'
|
||||
refreshMarkerText === 'opencode_session_refresh_scheduled_after_resolved_behavior_changed' ||
|
||||
refreshMarkerText === 'opencode_session_stale_observe_scheduled_after_accepted_prompt'
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -214,7 +214,8 @@ function isRecoverableOpenCodeSessionRefreshText(value: string | undefined): boo
|
|||
refreshMarkerText === 'opencode session changed; refreshing the session before retry' ||
|
||||
refreshMarkerText === 'opencode session refresh scheduled after resolved behavior changed' ||
|
||||
refreshMarkerText === 'opencode_prompt_delivery_session_refresh_scheduled' ||
|
||||
refreshMarkerText === 'opencode_session_refresh_scheduled_after_resolved_behavior_changed'
|
||||
refreshMarkerText === 'opencode_session_refresh_scheduled_after_resolved_behavior_changed' ||
|
||||
refreshMarkerText === 'opencode_session_stale_observe_scheduled_after_accepted_prompt'
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
import {
|
||||
buildMemberLaunchPresentation,
|
||||
getLaunchAwarePresenceLabel,
|
||||
getSpawnAwareDotClass,
|
||||
getSpawnAwarePresenceLabel,
|
||||
getSpawnCardClass,
|
||||
getMemberRuntimeAdvisoryLabel,
|
||||
getMemberRuntimeAdvisoryTitle,
|
||||
getMemberRuntimeAdvisoryTone,
|
||||
getSpawnAwareDotClass,
|
||||
getSpawnAwarePresenceLabel,
|
||||
getSpawnCardClass,
|
||||
isOpenCodeRelaunchActionable,
|
||||
shouldDisplayMemberCurrentTask,
|
||||
} from '@renderer/utils/memberHelpers';
|
||||
|
|
@ -1333,6 +1333,7 @@ describe('memberHelpers spawn-aware presence', () => {
|
|||
'OpenCode API error. opencode_prompt_delivery_session_refresh_scheduled.',
|
||||
'OpenCode session refresh scheduled after resolved behavior changed',
|
||||
'opencode_session_refresh_scheduled_after_resolved_behavior_changed',
|
||||
'OpenCode API error. opencode_session_stale_observe_scheduled_after_accepted_prompt',
|
||||
])('renders recoverable OpenCode session refresh advisory %s as a warning', (message) => {
|
||||
const advisory = {
|
||||
kind: 'api_error' as const,
|
||||
|
|
|
|||
|
|
@ -851,6 +851,68 @@ describe('member launch diagnostics', () => {
|
|||
expect(hasMemberLaunchDiagnosticsError(payload)).toBe(false);
|
||||
});
|
||||
|
||||
it('suppresses stale observe scheduled OpenCode API advisories while the runtime is alive', () => {
|
||||
const payload = buildMemberLaunchDiagnosticsPayload({
|
||||
teamName: 'atlas-hq-15',
|
||||
runId: 'd78fd1d5-f60b-4704-9df3-867c79e840b3',
|
||||
memberName: 'bob',
|
||||
member: {
|
||||
name: 'bob',
|
||||
providerId: 'opencode',
|
||||
model: 'opencode/deepseek-v4-flash-free',
|
||||
agentType: 'general-purpose',
|
||||
laneId: 'secondary:opencode:bob',
|
||||
laneKind: 'secondary',
|
||||
laneOwnerProviderId: 'opencode',
|
||||
},
|
||||
spawnEntry: {
|
||||
status: 'online',
|
||||
launchState: 'confirmed_alive',
|
||||
runtimeAlive: true,
|
||||
bootstrapConfirmed: true,
|
||||
agentToolAccepted: true,
|
||||
hardFailure: false,
|
||||
runtimeDiagnostic: 'OpenCode runtime process detected after bootstrap confirmation',
|
||||
runtimeDiagnosticSeverity: 'info',
|
||||
livenessKind: 'runtime_process',
|
||||
livenessSource: 'heartbeat',
|
||||
updatedAt: '2026-05-30T17:17:33.910Z',
|
||||
},
|
||||
runtimeEntry: {
|
||||
memberName: 'bob',
|
||||
providerId: 'opencode',
|
||||
runtimeModel: 'opencode/deepseek-v4-flash-free',
|
||||
backendType: 'process',
|
||||
alive: true,
|
||||
restartable: false,
|
||||
livenessKind: 'runtime_process',
|
||||
runtimeDiagnostic: 'OpenCode runtime process detected after bootstrap confirmation',
|
||||
runtimeDiagnosticSeverity: 'info',
|
||||
diagnostics: [
|
||||
'OpenCode API error',
|
||||
'opencode_session_stale_observe_scheduled_after_accepted_prompt',
|
||||
'matched OpenCode runtime pid and process identity',
|
||||
'bootstrap confirmed',
|
||||
],
|
||||
updatedAt: '2026-05-30T17:28:39.655Z',
|
||||
},
|
||||
runtimeAdvisoryLabel: 'OpenCode API error',
|
||||
runtimeAdvisoryTitle: 'OpenCode API error',
|
||||
runtimeAdvisory: {
|
||||
kind: 'api_error',
|
||||
observedAt: '2026-05-30T17:26:24.466Z',
|
||||
reasonCode: 'backend_error',
|
||||
message: 'OpenCode API error. opencode_session_stale_observe_scheduled_after_accepted_prompt',
|
||||
},
|
||||
});
|
||||
|
||||
expect(payload.memberCardError).toBeUndefined();
|
||||
expect(hasMemberLaunchDiagnosticsError(payload)).toBe(false);
|
||||
expect(payload.diagnostics).toContain(
|
||||
'opencode_session_stale_observe_scheduled_after_accepted_prompt'
|
||||
);
|
||||
});
|
||||
|
||||
it('treats member card errors from runtime advisory as diagnostics errors', () => {
|
||||
const payload = buildMemberLaunchDiagnosticsPayload({
|
||||
memberName: 'tom',
|
||||
|
|
|
|||
Loading…
Reference in a new issue