38
src/ralph-loop/command-arguments.ts
Normal file
38
src/ralph-loop/command-arguments.ts
Normal file
@@ -0,0 +1,38 @@
|
||||
export type RalphLoopStrategy = "reset" | "continue"
|
||||
|
||||
export type ParsedRalphLoopArguments = {
|
||||
prompt: string
|
||||
maxIterations?: number
|
||||
completionPromise?: string
|
||||
strategy?: RalphLoopStrategy
|
||||
}
|
||||
|
||||
const DEFAULT_PROMPT = "Complete the task as instructed"
|
||||
|
||||
export function parseRalphLoopArguments(rawArguments: string): ParsedRalphLoopArguments {
|
||||
const taskMatch = rawArguments.match(/^("|')(.+?)\1/)
|
||||
const promptCandidate =
|
||||
taskMatch?.[2] ??
|
||||
(rawArguments.startsWith("--")
|
||||
? ""
|
||||
: rawArguments.split(/\s+--/)[0]?.trim() ?? "")
|
||||
const prompt = promptCandidate || DEFAULT_PROMPT
|
||||
|
||||
const maxIterationMatch = rawArguments.match(/--max-iterations=(\d+)/i)
|
||||
const maxIterationsRaw = maxIterationMatch?.[1]
|
||||
const completionPromiseQuoted = rawArguments.match(/--completion-promise=("|')(.+?)\1/i)
|
||||
const completionPromiseUnquoted = rawArguments.match(/--completion-promise=([^\s\"']+)/i)
|
||||
const completionPromise = completionPromiseQuoted?.[2] ?? completionPromiseUnquoted?.[1]
|
||||
const strategyMatch = rawArguments.match(/--strategy=(reset|continue)/i)
|
||||
const strategyValue = strategyMatch?.[1]?.toLowerCase()
|
||||
|
||||
return {
|
||||
prompt,
|
||||
maxIterations: maxIterationsRaw ? Number.parseInt(maxIterationsRaw, 10) : undefined,
|
||||
completionPromise,
|
||||
strategy:
|
||||
strategyValue === "reset" || strategyValue === "continue"
|
||||
? (strategyValue as RalphLoopStrategy)
|
||||
: undefined,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user