(
args: string[],
allowedPermissionModes: readonly TPermissionMode[]
)
| 10 | } |
| 11 | |
| 12 | export function parseRemoteAgentCommandOptions<TPermissionMode extends PermissionMode>( |
| 13 | args: string[], |
| 14 | allowedPermissionModes: readonly TPermissionMode[] |
| 15 | ): RemoteAgentCommandOptions<TPermissionMode> { |
| 16 | const options: RemoteAgentCommandOptions<TPermissionMode> = {} |
| 17 | let hasExplicitPermissionMode = false |
| 18 | |
| 19 | for (let i = 0; i < args.length; i++) { |
| 20 | const arg = args[i] |
| 21 | if (arg === '--started-by') { |
| 22 | options.startedBy = args[++i] as 'runner' | 'terminal' |
| 23 | } else if (arg === '--hapi-starting-mode') { |
| 24 | const value = args[++i] |
| 25 | if (value === 'local' || value === 'remote') { |
| 26 | options.startingMode = value |
| 27 | } else { |
| 28 | throw new Error('Invalid --hapi-starting-mode (expected local or remote)') |
| 29 | } |
| 30 | } else if (arg === '--permission-mode') { |
| 31 | const mode = args[++i] |
| 32 | if (!mode || !(allowedPermissionModes as readonly string[]).includes(mode)) { |
| 33 | throw new Error(`Invalid --permission-mode value: ${mode ?? '(missing)'}`) |
| 34 | } |
| 35 | options.permissionMode = mode as TPermissionMode |
| 36 | hasExplicitPermissionMode = true |
| 37 | } else if (arg === '--yolo' && !hasExplicitPermissionMode) { |
| 38 | options.permissionMode = 'yolo' as TPermissionMode |
| 39 | } else if (arg === '--resume') { |
| 40 | const sessionId = args[++i] |
| 41 | if (!sessionId) { |
| 42 | throw new Error('Missing --resume value') |
| 43 | } |
| 44 | options.resumeSessionId = sessionId |
| 45 | } else if (arg === '--model') { |
| 46 | const model = args[++i] |
| 47 | if (!model) { |
| 48 | throw new Error('Missing --model value') |
| 49 | } |
| 50 | options.model = model |
| 51 | } else if (arg === '--model-reasoning-effort') { |
| 52 | const modelReasoningEffort = args[++i] |
| 53 | if (!modelReasoningEffort) { |
| 54 | throw new Error('Missing --model-reasoning-effort value') |
| 55 | } |
| 56 | options.modelReasoningEffort = modelReasoningEffort |
| 57 | } |
| 58 | } |
| 59 | |
| 60 | return options |
| 61 | } |
no outgoing calls
no test coverage detected