brainrot-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/README.md +372 -0
  2. package/dist/AchievementNotification.d.ts +28 -0
  3. package/dist/AchievementNotification.d.ts.map +1 -0
  4. package/dist/AchievementNotification.js +74 -0
  5. package/dist/AchievementNotification.js.map +1 -0
  6. package/dist/GameSelector.d.ts +25 -0
  7. package/dist/GameSelector.d.ts.map +1 -0
  8. package/dist/GameSelector.js +105 -0
  9. package/dist/GameSelector.js.map +1 -0
  10. package/dist/HelpOverlay.d.ts +15 -0
  11. package/dist/HelpOverlay.d.ts.map +1 -0
  12. package/dist/HelpOverlay.js +134 -0
  13. package/dist/HelpOverlay.js.map +1 -0
  14. package/dist/Layout.d.ts +49 -0
  15. package/dist/Layout.d.ts.map +1 -0
  16. package/dist/Layout.js +83 -0
  17. package/dist/Layout.js.map +1 -0
  18. package/dist/Leaderboard.d.ts +46 -0
  19. package/dist/Leaderboard.d.ts.map +1 -0
  20. package/dist/Leaderboard.js +68 -0
  21. package/dist/Leaderboard.js.map +1 -0
  22. package/dist/LogViewer.d.ts +33 -0
  23. package/dist/LogViewer.d.ts.map +1 -0
  24. package/dist/LogViewer.js +179 -0
  25. package/dist/LogViewer.js.map +1 -0
  26. package/dist/LoopAlertOverlay.d.ts +15 -0
  27. package/dist/LoopAlertOverlay.d.ts.map +1 -0
  28. package/dist/LoopAlertOverlay.js +17 -0
  29. package/dist/LoopAlertOverlay.js.map +1 -0
  30. package/dist/LoopManagementPanel.d.ts +44 -0
  31. package/dist/LoopManagementPanel.d.ts.map +1 -0
  32. package/dist/LoopManagementPanel.js +220 -0
  33. package/dist/LoopManagementPanel.js.map +1 -0
  34. package/dist/SettingsMenu.d.ts +22 -0
  35. package/dist/SettingsMenu.d.ts.map +1 -0
  36. package/dist/SettingsMenu.js +367 -0
  37. package/dist/SettingsMenu.js.map +1 -0
  38. package/dist/SplitPane.d.ts +63 -0
  39. package/dist/SplitPane.d.ts.map +1 -0
  40. package/dist/SplitPane.js +104 -0
  41. package/dist/SplitPane.js.map +1 -0
  42. package/dist/StatsMenu.d.ts +15 -0
  43. package/dist/StatsMenu.d.ts.map +1 -0
  44. package/dist/StatsMenu.js +230 -0
  45. package/dist/StatsMenu.js.map +1 -0
  46. package/dist/StatusBar.d.ts +58 -0
  47. package/dist/StatusBar.d.ts.map +1 -0
  48. package/dist/StatusBar.js +106 -0
  49. package/dist/StatusBar.js.map +1 -0
  50. package/dist/__tests__/ralph-loop-parser.test.d.ts +2 -0
  51. package/dist/__tests__/ralph-loop-parser.test.d.ts.map +1 -0
  52. package/dist/__tests__/ralph-loop-parser.test.js +143 -0
  53. package/dist/__tests__/ralph-loop-parser.test.js.map +1 -0
  54. package/dist/claude-code-process.d.ts +76 -0
  55. package/dist/claude-code-process.d.ts.map +1 -0
  56. package/dist/claude-code-process.js +221 -0
  57. package/dist/claude-code-process.js.map +1 -0
  58. package/dist/cli.d.ts +42 -0
  59. package/dist/cli.d.ts.map +1 -0
  60. package/dist/cli.js +265 -0
  61. package/dist/cli.js.map +1 -0
  62. package/dist/config.d.ts +206 -0
  63. package/dist/config.d.ts.map +1 -0
  64. package/dist/config.js +270 -0
  65. package/dist/config.js.map +1 -0
  66. package/dist/game-types.d.ts +177 -0
  67. package/dist/game-types.d.ts.map +1 -0
  68. package/dist/game-types.js +55 -0
  69. package/dist/game-types.js.map +1 -0
  70. package/dist/games/MinesweeperGame.d.ts +15 -0
  71. package/dist/games/MinesweeperGame.d.ts.map +1 -0
  72. package/dist/games/MinesweeperGame.js +555 -0
  73. package/dist/games/MinesweeperGame.js.map +1 -0
  74. package/dist/games/PongGame.d.ts +15 -0
  75. package/dist/games/PongGame.d.ts.map +1 -0
  76. package/dist/games/PongGame.js +379 -0
  77. package/dist/games/PongGame.js.map +1 -0
  78. package/dist/games/SnakeGame.d.ts +15 -0
  79. package/dist/games/SnakeGame.d.ts.map +1 -0
  80. package/dist/games/SnakeGame.js +333 -0
  81. package/dist/games/SnakeGame.js.map +1 -0
  82. package/dist/games/TetrisGame.d.ts +15 -0
  83. package/dist/games/TetrisGame.d.ts.map +1 -0
  84. package/dist/games/TetrisGame.js +654 -0
  85. package/dist/games/TetrisGame.js.map +1 -0
  86. package/dist/games/index.d.ts +23 -0
  87. package/dist/games/index.d.ts.map +1 -0
  88. package/dist/games/index.js +47 -0
  89. package/dist/games/index.js.map +1 -0
  90. package/dist/high-scores.d.ts +57 -0
  91. package/dist/high-scores.d.ts.map +1 -0
  92. package/dist/high-scores.js +230 -0
  93. package/dist/high-scores.js.map +1 -0
  94. package/dist/index.d.ts +3 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +264 -0
  97. package/dist/index.js.map +1 -0
  98. package/dist/ralph-loop-parser.d.ts +58 -0
  99. package/dist/ralph-loop-parser.d.ts.map +1 -0
  100. package/dist/ralph-loop-parser.js +315 -0
  101. package/dist/ralph-loop-parser.js.map +1 -0
  102. package/dist/stats.d.ts +142 -0
  103. package/dist/stats.d.ts.map +1 -0
  104. package/dist/stats.js +521 -0
  105. package/dist/stats.js.map +1 -0
  106. package/dist/styled-components.d.ts +231 -0
  107. package/dist/styled-components.d.ts.map +1 -0
  108. package/dist/styled-components.js +192 -0
  109. package/dist/styled-components.js.map +1 -0
  110. package/dist/theme.d.ts +301 -0
  111. package/dist/theme.d.ts.map +1 -0
  112. package/dist/theme.js +372 -0
  113. package/dist/theme.js.map +1 -0
  114. package/dist/themes.d.ts +117 -0
  115. package/dist/themes.d.ts.map +1 -0
  116. package/dist/themes.js +296 -0
  117. package/dist/themes.js.map +1 -0
  118. package/dist/ui/index.d.ts +13 -0
  119. package/dist/ui/index.d.ts.map +1 -0
  120. package/dist/ui/index.js +29 -0
  121. package/dist/ui/index.js.map +1 -0
  122. package/dist/use-claude-code.d.ts +30 -0
  123. package/dist/use-claude-code.d.ts.map +1 -0
  124. package/dist/use-claude-code.js +84 -0
  125. package/dist/use-claude-code.js.map +1 -0
  126. package/dist/use-config.d.ts +58 -0
  127. package/dist/use-config.d.ts.map +1 -0
  128. package/dist/use-config.js +113 -0
  129. package/dist/use-config.js.map +1 -0
  130. package/dist/use-game-loop.d.ts +47 -0
  131. package/dist/use-game-loop.d.ts.map +1 -0
  132. package/dist/use-game-loop.js +136 -0
  133. package/dist/use-game-loop.js.map +1 -0
  134. package/dist/use-high-scores.d.ts +41 -0
  135. package/dist/use-high-scores.d.ts.map +1 -0
  136. package/dist/use-high-scores.js +94 -0
  137. package/dist/use-high-scores.js.map +1 -0
  138. package/dist/use-layout-state.d.ts +77 -0
  139. package/dist/use-layout-state.d.ts.map +1 -0
  140. package/dist/use-layout-state.js +160 -0
  141. package/dist/use-layout-state.js.map +1 -0
  142. package/dist/use-ralph-loop.d.ts +41 -0
  143. package/dist/use-ralph-loop.d.ts.map +1 -0
  144. package/dist/use-ralph-loop.js +106 -0
  145. package/dist/use-ralph-loop.js.map +1 -0
  146. package/dist/use-spinner.d.ts +46 -0
  147. package/dist/use-spinner.d.ts.map +1 -0
  148. package/dist/use-spinner.js +71 -0
  149. package/dist/use-spinner.js.map +1 -0
  150. package/dist/use-stats.d.ts +59 -0
  151. package/dist/use-stats.d.ts.map +1 -0
  152. package/dist/use-stats.js +150 -0
  153. package/dist/use-stats.js.map +1 -0
  154. package/dist/use-terminal-size.d.ts +29 -0
  155. package/dist/use-terminal-size.d.ts.map +1 -0
  156. package/dist/use-terminal-size.js +48 -0
  157. package/dist/use-terminal-size.js.map +1 -0
  158. package/dist/useTheme.d.ts +76 -0
  159. package/dist/useTheme.d.ts.map +1 -0
  160. package/dist/useTheme.js +136 -0
  161. package/dist/useTheme.js.map +1 -0
  162. package/package.json +58 -0
@@ -0,0 +1,76 @@
1
+ import { EventEmitter } from "node:events";
2
+ export interface ClaudeCodeSpawnOptions {
3
+ /** Path to Claude Code executable (defaults to 'claude') */
4
+ executablePath?: string;
5
+ /** Additional arguments to pass to Claude Code */
6
+ args?: string[];
7
+ /** Working directory for Claude Code */
8
+ cwd?: string;
9
+ /** Environment variables to merge with process.env */
10
+ env?: Record<string, string>;
11
+ /** Timeout for graceful shutdown in milliseconds */
12
+ shutdownTimeout?: number;
13
+ }
14
+ export type ProcessStatus = "idle" | "starting" | "running" | "stopping" | "stopped" | "crashed";
15
+ export interface ProcessError {
16
+ code: number | null;
17
+ signal: NodeJS.Signals | null;
18
+ message: string;
19
+ }
20
+ export declare const CLAUDE_EVENTS: {
21
+ readonly STDOUT: "stdout";
22
+ readonly STDERR: "stderr";
23
+ readonly STATUS: "status";
24
+ readonly ERROR: "error";
25
+ readonly EXIT: "exit";
26
+ };
27
+ export declare class ClaudeCodeProcess extends EventEmitter {
28
+ private childProcess;
29
+ private _status;
30
+ private isShuttingDown;
31
+ private _shutdownTimeout;
32
+ get status(): ProcessStatus;
33
+ private setStatus;
34
+ /**
35
+ * Spawn Claude Code as a child process
36
+ * @param options Spawn options including executable path, args, cwd, and env
37
+ */
38
+ spawn(options?: ClaudeCodeSpawnOptions): void;
39
+ private setupProcessHandlers;
40
+ /**
41
+ * Send input to Claude Code's stdin
42
+ * @param input The input string to send
43
+ */
44
+ write(input: string): void;
45
+ /**
46
+ * Send input followed by a newline to Claude Code's stdin
47
+ * @param input The input string to send
48
+ */
49
+ writeLine(input: string): void;
50
+ /**
51
+ * Gracefully stop the Claude Code process
52
+ * Sends SIGTERM first, then SIGKILL if process doesn't exit within timeout
53
+ * @param timeout Milliseconds to wait before force killing (uses configured timeout if not specified)
54
+ */
55
+ stop(timeout?: number): Promise<void>;
56
+ /**
57
+ * Force kill the Claude Code process immediately
58
+ */
59
+ kill(): void;
60
+ /**
61
+ * Check if the process is currently running
62
+ */
63
+ isRunning(): boolean;
64
+ onStdout(listener: (data: string) => void): this;
65
+ onStderr(listener: (data: string) => void): this;
66
+ onStatus(listener: (status: ProcessStatus) => void): this;
67
+ onError(listener: (error: ProcessError) => void): this;
68
+ onExit(listener: (code: number | null, signal: NodeJS.Signals | null) => void): this;
69
+ }
70
+ export declare function getClaudeCodeProcess(): ClaudeCodeProcess;
71
+ /**
72
+ * Setup cleanup handlers for graceful shutdown
73
+ * This ensures no orphaned processes when the parent exits
74
+ */
75
+ export declare function setupProcessCleanup(claudeProcess: ClaudeCodeProcess): void;
76
+ //# sourceMappingURL=claude-code-process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code-process.d.ts","sourceRoot":"","sources":["../src/claude-code-process.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,sBAAsB;IACrC,4DAA4D;IAC5D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,wCAAwC;IACxC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,oDAAoD;IACpD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,UAAU,GACV,SAAS,GACT,UAAU,GACV,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAGD,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAC;AAEX,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,gBAAgB,CAAQ;IAEhC,IAAI,MAAM,IAAI,aAAa,CAE1B;IAED,OAAO,CAAC,SAAS;IAKjB;;;OAGG;IACH,KAAK,CAAC,OAAO,GAAE,sBAA2B,GAAG,IAAI;IAiCjD,OAAO,CAAC,oBAAoB;IAkD5B;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAU1B;;;OAGG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI9B;;;;OAIG;IACG,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC3C;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;OAEG;IACH,SAAS,IAAI,OAAO;IAKpB,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIhD,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIhD,QAAQ,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,GAAG,IAAI;IAIzD,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,IAAI;IAItD,MAAM,CACJ,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,KAAK,IAAI,GACrE,IAAI;CAGR;AAKD,wBAAgB,oBAAoB,IAAI,iBAAiB,CAKxD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,iBAAiB,GAAG,IAAI,CAuC1E"}
@@ -0,0 +1,221 @@
1
+ import { spawn as nodeSpawn } from "node:child_process";
2
+ import { EventEmitter } from "node:events";
3
+ // Event names as constants for type safety
4
+ export const CLAUDE_EVENTS = {
5
+ STDOUT: "stdout",
6
+ STDERR: "stderr",
7
+ STATUS: "status",
8
+ ERROR: "error",
9
+ EXIT: "exit",
10
+ };
11
+ export class ClaudeCodeProcess extends EventEmitter {
12
+ childProcess = null;
13
+ _status = "idle";
14
+ isShuttingDown = false;
15
+ _shutdownTimeout = 5000;
16
+ get status() {
17
+ return this._status;
18
+ }
19
+ setStatus(status) {
20
+ this._status = status;
21
+ this.emit(CLAUDE_EVENTS.STATUS, status);
22
+ }
23
+ /**
24
+ * Spawn Claude Code as a child process
25
+ * @param options Spawn options including executable path, args, cwd, and env
26
+ */
27
+ spawn(options = {}) {
28
+ if (this.childProcess) {
29
+ throw new Error("Claude Code process is already running");
30
+ }
31
+ const { executablePath = "claude", args = [], cwd, env, shutdownTimeout = 5000, } = options;
32
+ this._shutdownTimeout = shutdownTimeout;
33
+ this.isShuttingDown = false;
34
+ this.setStatus("starting");
35
+ // Merge environment variables
36
+ const processEnv = env ? { ...process.env, ...env } : process.env;
37
+ // Spawn claude with the provided options
38
+ this.childProcess = nodeSpawn(executablePath, args, {
39
+ cwd,
40
+ env: processEnv,
41
+ stdio: ["pipe", "pipe", "pipe"],
42
+ // Ensure the process is killed when parent exits
43
+ detached: false,
44
+ });
45
+ this.setupProcessHandlers();
46
+ this.setStatus("running");
47
+ }
48
+ setupProcessHandlers() {
49
+ if (!this.childProcess)
50
+ return;
51
+ // Capture stdout
52
+ this.childProcess.stdout?.on("data", (data) => {
53
+ this.emit(CLAUDE_EVENTS.STDOUT, data.toString());
54
+ });
55
+ // Capture stderr
56
+ this.childProcess.stderr?.on("data", (data) => {
57
+ this.emit(CLAUDE_EVENTS.STDERR, data.toString());
58
+ });
59
+ // Handle process errors (e.g., failed to spawn)
60
+ this.childProcess.on("error", (err) => {
61
+ const processError = {
62
+ code: null,
63
+ signal: null,
64
+ message: err.message,
65
+ };
66
+ this.emit(CLAUDE_EVENTS.ERROR, processError);
67
+ if (!this.isShuttingDown) {
68
+ this.setStatus("crashed");
69
+ }
70
+ this.childProcess = null;
71
+ });
72
+ // Handle process exit
73
+ this.childProcess.on("exit", (code, signal) => {
74
+ this.emit(CLAUDE_EVENTS.EXIT, code, signal);
75
+ if (this.isShuttingDown) {
76
+ this.setStatus("stopped");
77
+ }
78
+ else if (code !== 0) {
79
+ const processError = {
80
+ code,
81
+ signal,
82
+ message: `Claude Code exited with code ${code}${signal ? ` (signal: ${signal})` : ""}`,
83
+ };
84
+ this.emit(CLAUDE_EVENTS.ERROR, processError);
85
+ this.setStatus("crashed");
86
+ }
87
+ else {
88
+ this.setStatus("stopped");
89
+ }
90
+ this.childProcess = null;
91
+ });
92
+ }
93
+ /**
94
+ * Send input to Claude Code's stdin
95
+ * @param input The input string to send
96
+ */
97
+ write(input) {
98
+ if (!this.childProcess?.stdin) {
99
+ throw new Error("Claude Code process is not running or stdin is not available");
100
+ }
101
+ this.childProcess.stdin.write(input);
102
+ }
103
+ /**
104
+ * Send input followed by a newline to Claude Code's stdin
105
+ * @param input The input string to send
106
+ */
107
+ writeLine(input) {
108
+ this.write(input + "\n");
109
+ }
110
+ /**
111
+ * Gracefully stop the Claude Code process
112
+ * Sends SIGTERM first, then SIGKILL if process doesn't exit within timeout
113
+ * @param timeout Milliseconds to wait before force killing (uses configured timeout if not specified)
114
+ */
115
+ async stop(timeout) {
116
+ if (!this.childProcess) {
117
+ return;
118
+ }
119
+ this.isShuttingDown = true;
120
+ this.setStatus("stopping");
121
+ const effectiveTimeout = timeout ?? this._shutdownTimeout;
122
+ return new Promise((resolve) => {
123
+ const forceKillTimer = setTimeout(() => {
124
+ if (this.childProcess) {
125
+ this.childProcess.kill("SIGKILL");
126
+ }
127
+ }, effectiveTimeout);
128
+ const cleanup = () => {
129
+ clearTimeout(forceKillTimer);
130
+ resolve();
131
+ };
132
+ if (this.childProcess) {
133
+ this.childProcess.once("exit", cleanup);
134
+ // Send SIGTERM for graceful shutdown
135
+ this.childProcess.kill("SIGTERM");
136
+ }
137
+ else {
138
+ cleanup();
139
+ }
140
+ });
141
+ }
142
+ /**
143
+ * Force kill the Claude Code process immediately
144
+ */
145
+ kill() {
146
+ if (this.childProcess) {
147
+ this.isShuttingDown = true;
148
+ this.setStatus("stopping");
149
+ this.childProcess.kill("SIGKILL");
150
+ }
151
+ }
152
+ /**
153
+ * Check if the process is currently running
154
+ */
155
+ isRunning() {
156
+ return this._status === "running";
157
+ }
158
+ // Type-safe event listener methods
159
+ onStdout(listener) {
160
+ return this.on(CLAUDE_EVENTS.STDOUT, listener);
161
+ }
162
+ onStderr(listener) {
163
+ return this.on(CLAUDE_EVENTS.STDERR, listener);
164
+ }
165
+ onStatus(listener) {
166
+ return this.on(CLAUDE_EVENTS.STATUS, listener);
167
+ }
168
+ onError(listener) {
169
+ return this.on(CLAUDE_EVENTS.ERROR, listener);
170
+ }
171
+ onExit(listener) {
172
+ return this.on(CLAUDE_EVENTS.EXIT, listener);
173
+ }
174
+ }
175
+ // Singleton instance for easy access
176
+ let instance = null;
177
+ export function getClaudeCodeProcess() {
178
+ if (!instance) {
179
+ instance = new ClaudeCodeProcess();
180
+ }
181
+ return instance;
182
+ }
183
+ /**
184
+ * Setup cleanup handlers for graceful shutdown
185
+ * This ensures no orphaned processes when the parent exits
186
+ */
187
+ export function setupProcessCleanup(claudeProcess) {
188
+ const cleanup = async () => {
189
+ if (claudeProcess.isRunning()) {
190
+ await claudeProcess.stop();
191
+ }
192
+ };
193
+ // Handle various exit signals
194
+ process.on("SIGINT", () => {
195
+ void cleanup().then(() => process.exit(0));
196
+ });
197
+ process.on("SIGTERM", () => {
198
+ void cleanup().then(() => process.exit(0));
199
+ });
200
+ process.on("SIGHUP", () => {
201
+ void cleanup().then(() => process.exit(0));
202
+ });
203
+ // Handle uncaught exceptions - ensure cleanup before exit
204
+ process.on("uncaughtException", (err) => {
205
+ console.error("Uncaught exception:", err);
206
+ void cleanup().then(() => process.exit(1));
207
+ });
208
+ // Handle unhandled promise rejections
209
+ process.on("unhandledRejection", (reason) => {
210
+ console.error("Unhandled rejection:", reason);
211
+ void cleanup().then(() => process.exit(1));
212
+ });
213
+ // Handle normal exit
214
+ process.on("exit", () => {
215
+ // Synchronous cleanup - just kill if still running
216
+ if (claudeProcess.isRunning()) {
217
+ claudeProcess.kill();
218
+ }
219
+ });
220
+ }
221
+ //# sourceMappingURL=claude-code-process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code-process.js","sourceRoot":"","sources":["../src/claude-code-process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,SAAS,EAAqB,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA6B3C,2CAA2C;AAC3C,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,IAAI,EAAE,MAAM;CACJ,CAAC;AAEX,MAAM,OAAO,iBAAkB,SAAQ,YAAY;IACzC,YAAY,GAAwB,IAAI,CAAC;IACzC,OAAO,GAAkB,MAAM,CAAC;IAChC,cAAc,GAAG,KAAK,CAAC;IACvB,gBAAgB,GAAG,IAAI,CAAC;IAEhC,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAEO,SAAS,CAAC,MAAqB;QACrC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAkC,EAAE;QACxC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,EACJ,cAAc,GAAG,QAAQ,EACzB,IAAI,GAAG,EAAE,EACT,GAAG,EACH,GAAG,EACH,eAAe,GAAG,IAAI,GACvB,GAAG,OAAO,CAAC;QAEZ,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QACxC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAE3B,8BAA8B;QAC9B,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;QAElE,yCAAyC;QACzC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,cAAc,EAAE,IAAI,EAAE;YAClD,GAAG;YACH,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;YAC/B,iDAAiD;YACjD,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QAEH,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;IAEO,oBAAoB;QAC1B,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QAE/B,iBAAiB;QACjB,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACpD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,iBAAiB;QACjB,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACpD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,gDAAgD;QAChD,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;YAC3C,MAAM,YAAY,GAAiB;gBACjC,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,GAAG,CAAC,OAAO;aACrB,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YAE7C,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACzB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAC5B,CAAC;YACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,sBAAsB;QACtB,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAC5C,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAE5C,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAC5B,CAAC;iBAAM,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACtB,MAAM,YAAY,GAAiB;oBACjC,IAAI;oBACJ,MAAM;oBACN,OAAO,EAAE,gCAAgC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,aAAa,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;iBACvF,CAAC;gBACF,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;gBAC7C,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAa;QACjB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACb,8DAA8D,CAC/D,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,SAAS,CAAC,KAAa;QACrB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,IAAI,CAAC,OAAgB;QACzB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAE3B,MAAM,gBAAgB,GAAG,OAAO,IAAI,IAAI,CAAC,gBAAgB,CAAC;QAE1D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;gBACrC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAErB,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,YAAY,CAAC,cAAc,CAAC,CAAC;gBAC7B,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YAEF,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACxC,qCAAqC;gBACrC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;YAC3B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC;IACpC,CAAC;IAED,mCAAmC;IACnC,QAAQ,CAAC,QAAgC;QACvC,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,QAAQ,CAAC,QAAgC;QACvC,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,QAAQ,CAAC,QAAyC;QAChD,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,CAAC,QAAuC;QAC7C,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,CACJ,QAAsE;QAEtE,OAAO,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;CACF;AAED,qCAAqC;AACrC,IAAI,QAAQ,GAA6B,IAAI,CAAC;AAE9C,MAAM,UAAU,oBAAoB;IAClC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,QAAQ,GAAG,IAAI,iBAAiB,EAAE,CAAC;IACrC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,aAAgC;IAClE,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;QACzB,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC;YAC9B,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC,CAAC;IAEF,8BAA8B;IAC9B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,KAAK,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,KAAK,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,KAAK,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,0DAA0D;IAC1D,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE;QACtC,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;QAC1C,KAAK,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,sCAAsC;IACtC,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;QAC1C,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;QAC9C,KAAK,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,qBAAqB;IACrB,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;QACtB,mDAAmD;QACnD,IAAI,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC;YAC9B,aAAa,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,42 @@
1
+ /**
2
+ * CLI Flag Parser
3
+ *
4
+ * Parses command-line arguments and provides flag overrides for configuration.
5
+ * Uses Node's built-in util.parseArgs() (Node 18+).
6
+ */
7
+ import type { BrainrotConfig } from "./config.js";
8
+ export interface CLIArgs {
9
+ /** Show help message and exit */
10
+ help: boolean;
11
+ /** Show version and exit */
12
+ version: boolean;
13
+ /** Custom config file path */
14
+ configFile?: string;
15
+ /** Config overrides from CLI flags */
16
+ overrides: Partial<BrainrotConfig>;
17
+ /** Any positional arguments (unused currently) */
18
+ positionals: string[];
19
+ }
20
+ export interface ParseResult {
21
+ /** Parsed CLI arguments */
22
+ args: CLIArgs;
23
+ /** Error message if parsing failed */
24
+ error?: string;
25
+ }
26
+ /**
27
+ * Parse command-line arguments
28
+ */
29
+ export declare function parseCLI(argv?: string[]): ParseResult;
30
+ /**
31
+ * Print help message to stdout
32
+ */
33
+ export declare function printHelp(): void;
34
+ /**
35
+ * Print version to stdout
36
+ */
37
+ export declare function printVersion(): void;
38
+ /**
39
+ * Print error message to stderr
40
+ */
41
+ export declare function printError(message: string): void;
42
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAiC,MAAM,aAAa,CAAC;AA4DjF,MAAM,WAAW,OAAO;IACtB,iCAAiC;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,4BAA4B;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,8BAA8B;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,SAAS,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACnC,kDAAkD;IAClD,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,2BAA2B;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAqDD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,WAAW,CA+JnE;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,IAAI,CAEhC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAGnC;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD"}
package/dist/cli.js ADDED
@@ -0,0 +1,265 @@
1
+ /**
2
+ * CLI Flag Parser
3
+ *
4
+ * Parses command-line arguments and provides flag overrides for configuration.
5
+ * Uses Node's built-in util.parseArgs() (Node 18+).
6
+ */
7
+ import { parseArgs } from "node:util";
8
+ import { readFileSync } from "node:fs";
9
+ import { join, dirname } from "node:path";
10
+ import { fileURLToPath } from "node:url";
11
+ // ============================================================================
12
+ // VERSION DETECTION
13
+ // ============================================================================
14
+ /**
15
+ * Get version from package.json
16
+ */
17
+ function getVersion() {
18
+ try {
19
+ // Handle ESM module path resolution
20
+ const currentDir = dirname(fileURLToPath(import.meta.url));
21
+ // Go up from dist/ or src/ to find package.json
22
+ const packagePath = join(currentDir, "..", "package.json");
23
+ const packageJson = JSON.parse(readFileSync(packagePath, "utf-8"));
24
+ return packageJson.version ?? "0.0.0";
25
+ }
26
+ catch {
27
+ return "0.0.0";
28
+ }
29
+ }
30
+ // ============================================================================
31
+ // CLI FLAG DEFINITIONS
32
+ // ============================================================================
33
+ /**
34
+ * CLI flag configuration for parseArgs
35
+ */
36
+ const CLI_OPTIONS = {
37
+ // Meta flags
38
+ help: { type: "boolean", short: "h" },
39
+ version: { type: "boolean", short: "v" },
40
+ // Config file override
41
+ config: { type: "string", short: "c" },
42
+ // Layout options
43
+ "layout-direction": { type: "string" },
44
+ "split-ratio": { type: "string" },
45
+ // Theme options
46
+ "color-scheme": { type: "string" },
47
+ "border-style": { type: "string" },
48
+ // Claude Code options
49
+ "claude-executable": { type: "string" },
50
+ "claude-args": { type: "string" },
51
+ "working-dir": { type: "string", short: "w" },
52
+ // App options
53
+ debug: { type: "boolean", short: "d" },
54
+ "log-level": { type: "string" },
55
+ "default-game": { type: "string", short: "g" },
56
+ };
57
+ // ============================================================================
58
+ // HELP TEXT
59
+ // ============================================================================
60
+ const HELP_TEXT = `
61
+ brainrot - Play games while Claude Code works
62
+
63
+ USAGE:
64
+ brainrot [OPTIONS]
65
+
66
+ OPTIONS:
67
+ -h, --help Show this help message and exit
68
+ -v, --version Show version and exit
69
+ -c, --config <path> Use custom config file path
70
+
71
+ LAYOUT OPTIONS:
72
+ --layout-direction <dir> Split direction: horizontal, vertical
73
+ --split-ratio <ratio> Split ratio (0.0-1.0, e.g., 0.5)
74
+
75
+ THEME OPTIONS:
76
+ --color-scheme <scheme> Color scheme: default, dark, light, high-contrast
77
+ --border-style <style> Border style: single, round, double, heavy
78
+
79
+ CLAUDE CODE OPTIONS:
80
+ --claude-executable <path> Path to Claude Code executable
81
+ --claude-args <args> Arguments to pass to Claude Code (comma-separated)
82
+ -w, --working-dir <path> Working directory for Claude Code
83
+
84
+ APP OPTIONS:
85
+ -d, --debug Enable debug mode
86
+ --log-level <level> Log level: error, warn, info, debug
87
+ -g, --default-game <id> Default game to select: snake, tetris, pong, minesweeper
88
+
89
+ EXAMPLES:
90
+ brainrot Start with default settings
91
+ brainrot --layout-direction vertical Use vertical split layout
92
+ brainrot --split-ratio 0.7 Game pane takes 70% of space
93
+ brainrot --debug --log-level debug Enable debug mode with verbose logging
94
+ brainrot -c ~/.my-brainrot.json Use custom config file
95
+
96
+ CONFIG FILE:
97
+ Default location: ~/.config/brainrot-cli/config.json
98
+ CLI flags override config file values.
99
+
100
+ For more information, visit: https://github.com/brainrot-cli/brainrot
101
+ `;
102
+ // ============================================================================
103
+ // PARSING FUNCTIONS
104
+ // ============================================================================
105
+ /**
106
+ * Parse command-line arguments
107
+ */
108
+ export function parseCLI(argv = process.argv) {
109
+ try {
110
+ const { values, positionals } = parseArgs({
111
+ args: argv.slice(2), // Skip node and script path
112
+ options: CLI_OPTIONS,
113
+ allowPositionals: true,
114
+ strict: true,
115
+ });
116
+ const args = {
117
+ help: values.help ?? false,
118
+ version: values.version ?? false,
119
+ configFile: values.config,
120
+ positionals,
121
+ overrides: {},
122
+ };
123
+ // Build config overrides from CLI flags
124
+ const overrides = {};
125
+ // Layout overrides
126
+ if (values["layout-direction"] || values["split-ratio"]) {
127
+ overrides.layout = {};
128
+ if (values["layout-direction"]) {
129
+ const dir = values["layout-direction"];
130
+ if (dir !== "horizontal" && dir !== "vertical") {
131
+ return {
132
+ args,
133
+ error: `Invalid layout direction: "${dir}". Must be "horizontal" or "vertical".`,
134
+ };
135
+ }
136
+ overrides.layout.direction = dir;
137
+ }
138
+ if (values["split-ratio"]) {
139
+ const ratio = parseFloat(values["split-ratio"]);
140
+ if (isNaN(ratio) || ratio < 0 || ratio > 1) {
141
+ return {
142
+ args,
143
+ error: `Invalid split ratio: "${values["split-ratio"]}". Must be a number between 0.0 and 1.0.`,
144
+ };
145
+ }
146
+ overrides.layout.splitRatio = ratio;
147
+ }
148
+ }
149
+ // Theme overrides
150
+ if (values["color-scheme"] || values["border-style"]) {
151
+ overrides.theme = {};
152
+ if (values["color-scheme"]) {
153
+ const scheme = values["color-scheme"];
154
+ const validSchemes = ["default", "dark", "light", "high-contrast"];
155
+ if (!validSchemes.includes(scheme)) {
156
+ return {
157
+ args,
158
+ error: `Invalid color scheme: "${scheme}". Must be one of: ${validSchemes.join(", ")}.`,
159
+ };
160
+ }
161
+ overrides.theme.colorScheme = scheme;
162
+ }
163
+ if (values["border-style"]) {
164
+ const style = values["border-style"];
165
+ const validStyles = ["single", "round", "double", "heavy"];
166
+ if (!validStyles.includes(style)) {
167
+ return {
168
+ args,
169
+ error: `Invalid border style: "${style}". Must be one of: ${validStyles.join(", ")}.`,
170
+ };
171
+ }
172
+ overrides.theme.borderStyle = style;
173
+ }
174
+ }
175
+ // Claude Code overrides
176
+ if (values["claude-executable"] ||
177
+ values["claude-args"] ||
178
+ values["working-dir"]) {
179
+ overrides.claudeCode = {};
180
+ if (values["claude-executable"]) {
181
+ overrides.claudeCode.executablePath = values["claude-executable"];
182
+ }
183
+ if (values["claude-args"]) {
184
+ // Split comma-separated args
185
+ overrides.claudeCode.defaultArgs = values["claude-args"]
186
+ .split(",")
187
+ .map((arg) => arg.trim())
188
+ .filter((arg) => arg.length > 0);
189
+ }
190
+ if (values["working-dir"]) {
191
+ overrides.claudeCode.workingDirectory = values["working-dir"];
192
+ }
193
+ }
194
+ // App overrides
195
+ if (values.debug || values["log-level"] || values["default-game"]) {
196
+ overrides.app = {};
197
+ if (values.debug) {
198
+ overrides.app.debugMode = true;
199
+ }
200
+ if (values["log-level"]) {
201
+ const level = values["log-level"];
202
+ const validLevels = ["error", "warn", "info", "debug"];
203
+ if (!validLevels.includes(level)) {
204
+ return {
205
+ args,
206
+ error: `Invalid log level: "${level}". Must be one of: ${validLevels.join(", ")}.`,
207
+ };
208
+ }
209
+ overrides.app.logLevel = level;
210
+ }
211
+ if (values["default-game"]) {
212
+ overrides.app.defaultGame = values["default-game"];
213
+ }
214
+ }
215
+ args.overrides = overrides;
216
+ return { args };
217
+ }
218
+ catch (error) {
219
+ // Handle unknown flags or other parsing errors
220
+ const message = error instanceof Error ? error.message : "Unknown error parsing arguments";
221
+ // Provide helpful error message for unknown flags
222
+ if (message.includes("Unknown option")) {
223
+ const match = message.match(/Unknown option '([^']+)'/);
224
+ const flag = match?.[1] ?? "unknown";
225
+ return {
226
+ args: {
227
+ help: false,
228
+ version: false,
229
+ positionals: [],
230
+ overrides: {},
231
+ },
232
+ error: `Unknown option: ${flag}\n\nRun 'brainrot --help' to see available options.`,
233
+ };
234
+ }
235
+ return {
236
+ args: {
237
+ help: false,
238
+ version: false,
239
+ positionals: [],
240
+ overrides: {},
241
+ },
242
+ error: `Error parsing arguments: ${message}\n\nRun 'brainrot --help' to see available options.`,
243
+ };
244
+ }
245
+ }
246
+ /**
247
+ * Print help message to stdout
248
+ */
249
+ export function printHelp() {
250
+ console.log(HELP_TEXT);
251
+ }
252
+ /**
253
+ * Print version to stdout
254
+ */
255
+ export function printVersion() {
256
+ const version = getVersion();
257
+ console.log(`brainrot v${version}`);
258
+ }
259
+ /**
260
+ * Print error message to stderr
261
+ */
262
+ export function printError(message) {
263
+ console.error(`Error: ${message}`);
264
+ }
265
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}