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
JavaScript
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 };