mirror of
https://github.com/wu736139669/hapi.git
synced 2026-08-05 06:24:37 +00:00
fix(hub): persist permissionMode across hub restart (#710)
Store the last known permission mode in session metadata so YOLO and other modes survive hub restarts, resume after archive, and reconnect without waiting for CLI keepalive. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -644,7 +644,9 @@ export class SyncEngine {
|
||||
return { type: 'error', message: 'No machine online', code: 'no_machine_online' }
|
||||
}
|
||||
|
||||
const effectivePermissionMode = opts?.permissionMode ?? session.permissionMode ?? undefined
|
||||
const preferredPermissionMode = opts?.permissionMode
|
||||
?? session.permissionMode
|
||||
?? session.metadata?.preferredPermissionMode
|
||||
const spawnResult = await this.rpcGateway.spawnSession(
|
||||
targetMachine.id,
|
||||
target.directory,
|
||||
@@ -656,7 +658,7 @@ export class SyncEngine {
|
||||
undefined,
|
||||
resumeToken,
|
||||
session.effort ?? undefined,
|
||||
effectivePermissionMode
|
||||
preferredPermissionMode
|
||||
)
|
||||
|
||||
if (spawnResult.type !== 'success') {
|
||||
@@ -668,6 +670,15 @@ export class SyncEngine {
|
||||
return { type: 'error', message: 'Session failed to become active', code: 'resume_failed' }
|
||||
}
|
||||
|
||||
if (preferredPermissionMode !== undefined) {
|
||||
try {
|
||||
await this.applySessionConfig(spawnResult.sessionId, { permissionMode: preferredPermissionMode })
|
||||
} catch (error) {
|
||||
const message = error instanceof Error ? error.message : 'Failed to restore permission mode'
|
||||
return { type: 'error', message, code: 'resume_failed' }
|
||||
}
|
||||
}
|
||||
|
||||
if (spawnResult.sessionId !== access.sessionId) {
|
||||
// The old session may have already been merged by the automatic dedup path
|
||||
// (triggered when the spawned CLI sets its agent session ID in metadata).
|
||||
|
||||
Reference in New Issue
Block a user