claude-flow
Version:
Ruflo - Enterprise AI agent orchestration for Claude Code. Deploy 60+ specialized agents in coordinated swarms with self-learning, fault-tolerant consensus, vector memory, and MCP integration
89 lines • 3.75 kB
TypeScript
/**
* V3 CLI Command Parser
* Advanced argument parsing with validation and type coercion
*/
import type { Command, CommandOption, ParsedFlags } from './types.js';
export interface ParseResult {
command: string[];
flags: ParsedFlags;
positional: string[];
raw: string[];
}
export interface ParserOptions {
stopAtFirstNonFlag?: boolean;
allowUnknownFlags?: boolean;
booleanFlags?: string[];
stringFlags?: string[];
arrayFlags?: string[];
aliases?: Record<string, string>;
defaults?: Record<string, unknown>;
}
export declare class CommandParser {
private options;
private commands;
private lazyCommandNames;
private globalOptions;
constructor(options?: ParserOptions);
private initializeGlobalOptions;
registerCommand(command: Command): void;
/**
* Register a lazy-loaded command's name so Pass 1/Pass 2 can recognize it as
* a command position even though its full definition hasn't been loaded yet.
* Fix for #1596: without this, lazy commands like `daemon start` were
* mis-routed because Pass 1 walked past `daemon` and greedy-matched `start`.
*/
registerLazyCommandName(name: string): void;
/**
* #1791.2 — true when `name` is a lazy command that hasn't been promoted
* to a fully registered Command yet. The CLI uses this to eagerly load
* the module before parsing so its subcommand flags (e.g. `-d` for
* `hive-mind task --description`) are scoped into the alias map. Without
* this, lazy commands' short flags silently fall through to global
* resolution and the action handler sees an empty `flags.description`.
*/
isLazyOnly(name: string): boolean;
private isKnownCommandName;
getCommand(name: string): Command | undefined;
getAllCommands(): Command[];
parse(args: string[]): ParseResult;
private parseFlag;
/**
* Decide whether `arg` should be consumed as the VALUE of the preceding flag,
* rather than treated as the next flag.
*
* Bug fix (audit #1, follow-up to #2222): a negative numeric value such as
* `-1.0` starts with '-', so the old `!arg.startsWith('-')` test rejected it
* as a value and parsed it as a (bogus) short flag. For `route feedback
* -r -1.0` this silently dropped the value and coerced reward to `true` → 1.0,
* so NEGATIVE feedback REINFORCED the agent. Only `--reward=-1.0` worked.
*
* Anything not starting with '-' is a value (unchanged). Anything that starts
* with '-' is a value ONLY if it is a pure negative number (e.g. `-1`, `-1.0`,
* `-3.14`, `-1e3`). Real flags like `-r`, `--reward`, `-abc` are never numeric
* after the leading dash, so they are still correctly treated as flags.
*/
private isFlagValue;
/** True for the literal tokens `true`/`false` (case-insensitive). Used so a
* boolean flag can take an explicit value in the space form, e.g.
* `--explore false` / `-e true`. */
private isBooleanLiteral;
private parseValue;
private normalizeKey;
private buildAliases;
/**
* Build aliases scoped to a specific command/subcommand.
* The resolved command's short flags take priority over global ones,
* fixing collisions where multiple subcommands use the same short flag (e.g. -t).
*/
private buildScopedAliases;
/**
* Get boolean flags scoped to a specific command/subcommand.
*/
private getScopedBooleanFlags;
private getBooleanFlags;
private applyDefaults;
validateFlags(flags: ParsedFlags, command?: Command): string[];
getGlobalOptions(): CommandOption[];
}
export declare const commandParser: CommandParser;
//# sourceMappingURL=parser.d.ts.map