fix(team): preserve pure opencode permission state

This commit is contained in:
777genius 2026-04-23 01:31:09 +03:00
parent a123b2e247
commit 65fa117626
2 changed files with 38 additions and 0 deletions

View file

@ -9333,6 +9333,9 @@ export class TeamProvisioningService {
bootstrapConfirmed: evidence?.bootstrapConfirmed === true,
hardFailure: evidence?.hardFailure === true || launchState === 'failed_to_start',
hardFailureReason: evidence?.hardFailureReason,
pendingPermissionRequestIds: evidence?.pendingPermissionRequestIds?.length
? [...new Set(evidence.pendingPermissionRequestIds)]
: undefined,
firstSpawnAcceptedAt: evidence?.agentToolAccepted ? now : undefined,
lastHeartbeatAt: evidence?.bootstrapConfirmed ? now : undefined,
lastRuntimeAliveAt: evidence?.runtimeAlive ? now : undefined,

View file

@ -3014,6 +3014,41 @@ describe('TeamProvisioningService', () => {
).rejects.toThrow();
});
it('preserves pending permission request ids for pure OpenCode launch-state members', () => {
const svc = new TeamProvisioningService();
const member = (svc as any).toOpenCodePersistedLaunchMember(
{
name: 'alice',
providerId: 'opencode',
model: 'minimax-m2.5-free',
effort: 'medium',
},
{
launchState: 'runtime_pending_permission',
agentToolAccepted: true,
runtimeAlive: true,
bootstrapConfirmed: false,
hardFailure: false,
hardFailureReason: undefined,
pendingPermissionRequestIds: [
'opencode:run-1:perm-1',
'opencode:run-1:perm-1',
'opencode:run-1:perm-2',
],
diagnostics: ['waiting for permission approval'],
}
);
expect(member).toMatchObject({
name: 'alice',
providerId: 'opencode',
launchState: 'runtime_pending_permission',
pendingPermissionRequestIds: ['opencode:run-1:perm-1', 'opencode:run-1:perm-2'],
diagnostics: ['waiting for permission approval'],
});
});
it('fails early when the previous tmux pane does not exit before restart', async () => {
vi.useFakeTimers();