MCPcopy Create free account
hub / github.com/modem-dev/hunk / parseArgs

Function parseArgs

scripts/daemon-memory-check.ts:70–139  ·  view source on GitHub ↗

Parse a small flag set without adding a runtime dependency to the memory harness.

(argv: string[])

Source from the content-addressed store, hash-verified

68
69/** Parse a small flag set without adding a runtime dependency to the memory harness. */
70function parseArgs(argv: string[]): CliOptions {
71 const options = { ...defaultOptions };
72
73 for (let index = 0; index < argv.length; index += 1) {
74 const arg = argv[index]!;
75 if (arg === "--help" || arg === "-h") {
76 console.log(
77 `Usage: bun run scripts/daemon-memory-check.ts [options]\n\nOptions:\n --cycles <n> Register/use/unregister cycles (default ${defaultOptions.cycles})\n --warmup-cycles <n> Cycles ignored for trend analysis (default ${defaultOptions.warmupCycles})\n --sessions-per-cycle <n> Fake websocket sessions per cycle (default ${defaultOptions.sessionsPerCycle})\n --files-per-session <n> Review files stored per fake session (default ${defaultOptions.filesPerSession})\n --hunks-per-file <n> Hunks per review file (default ${defaultOptions.hunksPerFile})\n --lines-per-hunk <n> Diff lines per hunk side (default ${defaultOptions.linesPerHunk})\n --api-requests-per-cycle <n> list/context/review requests while sessions are live (default ${defaultOptions.apiRequestsPerCycle})\n --snapshot-updates-per-cycle <n> Snapshot update messages per session per cycle (default ${defaultOptions.snapshotUpdatesPerCycle})\n --settle-ms <n> Delay before post-cleanup sampling (default ${defaultOptions.settleMs})\n --max-rss-growth-mb <n> Fail if post-warmup RSS grows beyond this (default ${defaultOptions.maxRssGrowthMb})\n --max-rss-slope-kb <n> Fail if post-warmup RSS slope exceeds this per cycle (default ${defaultOptions.maxRssSlopeKb})\n --json-out <path> Write full sample summary JSON\n`,
78 );
79 process.exit(0);
80 }
81
82 const next = () => argv[++index];
83 switch (arg) {
84 case "--cycles":
85 options.cycles = parseNumberOption(arg, next());
86 break;
87 case "--warmup-cycles":
88 options.warmupCycles = parseNumberOption(arg, next());
89 break;
90 case "--sessions-per-cycle":
91 options.sessionsPerCycle = parseNumberOption(arg, next());
92 break;
93 case "--files-per-session":
94 options.filesPerSession = parseNumberOption(arg, next());
95 break;
96 case "--hunks-per-file":
97 options.hunksPerFile = parseNumberOption(arg, next());
98 break;
99 case "--lines-per-hunk":
100 options.linesPerHunk = parseNumberOption(arg, next());
101 break;
102 case "--api-requests-per-cycle":
103 options.apiRequestsPerCycle = parseNumberOption(arg, next());
104 break;
105 case "--snapshot-updates-per-cycle":
106 options.snapshotUpdatesPerCycle = parseNumberOption(arg, next());
107 break;
108 case "--settle-ms":
109 options.settleMs = parseNumberOption(arg, next());
110 break;
111 case "--max-rss-growth-mb":
112 options.maxRssGrowthMb = parseNumberOption(arg, next());
113 break;
114 case "--max-rss-slope-kb":
115 options.maxRssSlopeKb = parseNumberOption(arg, next());
116 break;
117 case "--json-out":
118 options.jsonOut = next();
119 if (!options.jsonOut) {
120 throw new Error("Missing value for --json-out.");
121 }
122 break;
123 default:
124 throw new Error(`Unknown option: ${arg}`);
125 }
126 }
127

Callers 1

mainFunction · 0.70

Calls 2

parseNumberOptionFunction · 0.70
nextFunction · 0.70

Tested by

no test coverage detected