UNPKG

kestrel.markets

Version:

A typed, token-efficient language + runtime for agentic trading: agents author bounded plans, the runtime fires them at the tick. CLI + typed library + MCP server.

106 lines (103 loc) 2.6 kB
import { CliError, EXIT } from "./bin-t9ggwnv5.js"; // src/cli/args.ts function usageErr(message) { return new CliError({ code: "USAGE", exit: EXIT.USAGE, message }); } function parseArgs(argv, booleanFlags = new Set, valueFlags = new Set) { const positionals = []; const flags = new Map; const bools = new Set; let i = 0; while (i < argv.length && !argv[i].startsWith("--")) { positionals.push(argv[i]); i += 1; } for (;i < argv.length; i += 1) { const key = argv[i]; if (!key.startsWith("--")) { throw usageErr(`bad argument ${JSON.stringify(key)} — expected a --flag here`); } const name = key.slice(2); if (booleanFlags.has(name)) { bools.add(name); continue; } if (!valueFlags.has(name)) throw usageErr(`unknown flag --${name}`); const val = argv[i + 1]; if (val === undefined) throw usageErr(`missing value for --${name}`); flags.set(name, val); i += 1; } return { positionals, flags, bools }; } function required(flags, name) { const v = flags.get(name); if (v === undefined) throw usageErr(`missing required flag --${name}`); return v; } function extractGlobals(argv) { const rest = []; const globals = {}; let wantHelp = false; let wantVersion = false; for (let i = 0;i < argv.length; i += 1) { const a = argv[i]; switch (a) { case "--json": globals.json = true; break; case "--agent": globals.agent = true; break; case "--no-color": globals.noColor = true; break; case "-h": case "--help": wantHelp = true; break; case "-V": case "--version": wantVersion = true; break; case "--format": { const v = argv[i + 1]; if (v === undefined) throw usageErr("missing value for --format"); globals.format = v; i += 1; break; } case "--color": { const v = argv[i + 1]; if (v === undefined) throw usageErr("missing value for --color"); globals.color = v; i += 1; break; } case "--api": { const v = argv[i + 1]; if (v === undefined) throw usageErr("missing value for --api"); globals.api = v; i += 1; break; } default: rest.push(a); } } if (rest[0] === "help") wantHelp = true; if (rest[0] === "version") wantVersion = true; return { globals, rest, wantHelp, wantVersion }; } export { parseArgs, required, extractGlobals };