brainrot-cli 0.1.1 → 0.2.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 (49) hide show
  1. package/dist/AppNew.d.ts +11 -0
  2. package/dist/AppNew.d.ts.map +1 -0
  3. package/dist/AppNew.js +437 -0
  4. package/dist/AppNew.js.map +1 -0
  5. package/dist/AttentionOverlay.d.ts +28 -0
  6. package/dist/AttentionOverlay.d.ts.map +1 -0
  7. package/dist/AttentionOverlay.js +92 -0
  8. package/dist/AttentionOverlay.js.map +1 -0
  9. package/dist/ClaudeChat.d.ts +38 -0
  10. package/dist/ClaudeChat.d.ts.map +1 -0
  11. package/dist/ClaudeChat.js +81 -0
  12. package/dist/ClaudeChat.js.map +1 -0
  13. package/dist/FeatureInput.d.ts +20 -0
  14. package/dist/FeatureInput.d.ts.map +1 -0
  15. package/dist/FeatureInput.js +66 -0
  16. package/dist/FeatureInput.js.map +1 -0
  17. package/dist/GameSelectScreen.d.ts +24 -0
  18. package/dist/GameSelectScreen.d.ts.map +1 -0
  19. package/dist/GameSelectScreen.js +78 -0
  20. package/dist/GameSelectScreen.js.map +1 -0
  21. package/dist/GameSelectorOverlay.d.ts +21 -0
  22. package/dist/GameSelectorOverlay.d.ts.map +1 -0
  23. package/dist/GameSelectorOverlay.js +98 -0
  24. package/dist/GameSelectorOverlay.js.map +1 -0
  25. package/dist/LoopComplete.d.ts +42 -0
  26. package/dist/LoopComplete.d.ts.map +1 -0
  27. package/dist/LoopComplete.js +69 -0
  28. package/dist/LoopComplete.js.map +1 -0
  29. package/dist/ResumePrompt.d.ts +32 -0
  30. package/dist/ResumePrompt.d.ts.map +1 -0
  31. package/dist/ResumePrompt.js +65 -0
  32. package/dist/ResumePrompt.js.map +1 -0
  33. package/dist/SidePanel.d.ts +26 -0
  34. package/dist/SidePanel.d.ts.map +1 -0
  35. package/dist/SidePanel.js +90 -0
  36. package/dist/SidePanel.js.map +1 -0
  37. package/dist/StatusBarMinimal.d.ts +26 -0
  38. package/dist/StatusBarMinimal.d.ts.map +1 -0
  39. package/dist/StatusBarMinimal.js +111 -0
  40. package/dist/StatusBarMinimal.js.map +1 -0
  41. package/dist/config.d.ts +11 -0
  42. package/dist/config.d.ts.map +1 -1
  43. package/dist/config.js +12 -0
  44. package/dist/config.js.map +1 -1
  45. package/dist/index.d.ts +6 -0
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +10 -449
  48. package/dist/index.js.map +1 -1
  49. package/package.json +3 -2
@@ -0,0 +1,11 @@
1
+ /**
2
+ * New App Entry Point
3
+ *
4
+ * Implements the simplified UI flow:
5
+ * FEATURE_INPUT → CLAUDE_PLANNING → GAME_SELECT → LOOP_RUNNING → LOOP_COMPLETE
6
+ */
7
+ import { type BrainrotConfig } from "./config.js";
8
+ export declare function useCLIOverrides(): Partial<BrainrotConfig>;
9
+ export declare function AppNew(): import("react/jsx-runtime").JSX.Element;
10
+ export default AppNew;
11
+ //# sourceMappingURL=AppNew.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppNew.d.ts","sourceRoot":"","sources":["../src/AppNew.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,aAAa,CAAC;AAsDrB,wBAAgB,eAAe,IAAI,OAAO,CAAC,cAAc,CAAC,CAEzD;AAqlBD,wBAAgB,MAAM,4CAYrB;AAED,eAAe,MAAM,CAAC"}
package/dist/AppNew.js ADDED
@@ -0,0 +1,437 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * New App Entry Point
4
+ *
5
+ * Implements the simplified UI flow:
6
+ * FEATURE_INPUT → CLAUDE_PLANNING → GAME_SELECT → LOOP_RUNNING → LOOP_COMPLETE
7
+ */
8
+ import { Box, Text, useInput, useApp } from "ink";
9
+ import { useState, useCallback, useMemo, useEffect, createContext, useContext, } from "react";
10
+ import { useClaudeCode } from "./use-claude-code.js";
11
+ import { useRalphLoopWithClaudeOutput } from "./use-ralph-loop.js";
12
+ import { useTerminalSize } from "./Layout.js";
13
+ import { LogViewer } from "./LogViewer.js";
14
+ import { useConfig } from "./use-config.js";
15
+ import { getClaudeCodeOptions, getSidePanelSettings, deepMerge, } from "./config.js";
16
+ import { useLoopState, useLoopStateExists } from "./use-loop-state.js";
17
+ import { getGameById } from "./games/index.js";
18
+ import { ThemeProvider, useThemeColors } from "./useTheme.js";
19
+ import { GameStatusProvider, useGameStatus, LoopInfoProvider, useLoopInfo, } from "./StatusBar.js";
20
+ import { HelpOverlay } from "./HelpOverlay.js";
21
+ // New components
22
+ import { FeatureInput } from "./FeatureInput.js";
23
+ import { ClaudeChat } from "./ClaudeChat.js";
24
+ import { GameSelectScreen } from "./GameSelectScreen.js";
25
+ import { StatusBarMinimal } from "./StatusBarMinimal.js";
26
+ import { SidePanel } from "./SidePanel.js";
27
+ import { GameSelectorOverlay } from "./GameSelectorOverlay.js";
28
+ import { AttentionOverlay } from "./AttentionOverlay.js";
29
+ import { LoopComplete } from "./LoopComplete.js";
30
+ import { ResumePrompt } from "./ResumePrompt.js";
31
+ // ============================================================================
32
+ // CLI OVERRIDE CONTEXT
33
+ // ============================================================================
34
+ const CLIOverridesContext = createContext({});
35
+ export function useCLIOverrides() {
36
+ return useContext(CLIOverridesContext);
37
+ }
38
+ // ============================================================================
39
+ // MAIN APP COMPONENT
40
+ // ============================================================================
41
+ function AppNewContent() {
42
+ const { exit } = useApp();
43
+ const { config: fileConfig } = useConfig();
44
+ const cliOverrides = useCLIOverrides();
45
+ const colors = useThemeColors();
46
+ const terminalSize = useTerminalSize();
47
+ // Config
48
+ const config = useMemo(() => deepMerge(fileConfig, cliOverrides), [fileConfig, cliOverrides]);
49
+ const claudeCodeOptions = useMemo(() => getClaudeCodeOptions(config), [config]);
50
+ const sidePanelSettings = useMemo(() => getSidePanelSettings(config), [config]);
51
+ // Claude Code process
52
+ const { status: processStatus, output, spawn, stop } = useClaudeCode(claudeCodeOptions);
53
+ const ralphLoop = useRalphLoopWithClaudeOutput(output);
54
+ // Loop state persistence
55
+ const { exists: loopStateExists, isChecking: isCheckingLoopState } = useLoopStateExists();
56
+ const loopState = useLoopState();
57
+ // App state
58
+ const [appState, setAppState] = useState("feature_input");
59
+ const [selectedGameId, setSelectedGameId] = useState(null);
60
+ const [showLogs, setShowLogs] = useState(false);
61
+ const [showHelp, setShowHelp] = useState(false);
62
+ const [showGameSelector, setShowGameSelector] = useState(false);
63
+ const [loopAlertDismissed, setLoopAlertDismissed] = useState(false);
64
+ const [loopStartTime, setLoopStartTime] = useState(null);
65
+ const [gameStats] = useState([]); // TODO: Track game stats during session
66
+ // Planning state
67
+ const [planningState, setPlanningState] = useState({
68
+ featureDescription: "",
69
+ messages: [],
70
+ isThinking: false,
71
+ progress: 0,
72
+ taskCount: 0,
73
+ });
74
+ // Game status context
75
+ const { setGameState, clearGameState } = useGameStatus();
76
+ const { setLoopInfo } = useLoopInfo();
77
+ // Check for existing loop on startup
78
+ useEffect(() => {
79
+ if (!isCheckingLoopState && loopStateExists === true && loopState.hasLoop) {
80
+ setAppState("resume_prompt");
81
+ }
82
+ }, [isCheckingLoopState, loopStateExists, loopState.hasLoop]);
83
+ // Sync loop state to loop info context
84
+ useEffect(() => {
85
+ const { tasks, progress, startedAt } = loopState.state;
86
+ const currentTask = tasks.find((t) => t.status === "in_progress") ?? null;
87
+ setLoopInfo({
88
+ currentTask,
89
+ progress: progress.totalTasks > 0 ? progress : null,
90
+ startedAt: tasks.length > 0 ? startedAt : null,
91
+ });
92
+ }, [loopState.state, setLoopInfo]);
93
+ // Handle feature submission
94
+ const handleFeatureSubmit = useCallback((feature) => {
95
+ setPlanningState((prev) => ({
96
+ ...prev,
97
+ featureDescription: feature,
98
+ isThinking: true,
99
+ progress: 10,
100
+ }));
101
+ setAppState("claude_planning");
102
+ // TODO: Actually start Claude Code in plan mode
103
+ // For now, simulate some planning steps
104
+ setTimeout(() => {
105
+ setPlanningState((prev) => ({
106
+ ...prev,
107
+ messages: [
108
+ {
109
+ role: "assistant",
110
+ content: "I'll help you build this feature. Let me understand the codebase first...",
111
+ isWaitingForInput: false,
112
+ },
113
+ ],
114
+ progress: 30,
115
+ }));
116
+ }, 1000);
117
+ setTimeout(() => {
118
+ setPlanningState((prev) => ({
119
+ ...prev,
120
+ messages: [
121
+ ...prev.messages,
122
+ {
123
+ role: "assistant",
124
+ content: "Do you have any specific requirements or constraints I should know about?",
125
+ isWaitingForInput: true,
126
+ },
127
+ ],
128
+ isThinking: false,
129
+ progress: 50,
130
+ }));
131
+ }, 2500);
132
+ }, []);
133
+ // Handle planning answer
134
+ const handlePlanningAnswer = useCallback((answer) => {
135
+ setPlanningState((prev) => ({
136
+ ...prev,
137
+ messages: [
138
+ ...prev.messages,
139
+ { role: "user", content: answer },
140
+ ],
141
+ isThinking: true,
142
+ progress: prev.progress + 20,
143
+ }));
144
+ // Simulate completion of planning
145
+ setTimeout(() => {
146
+ setPlanningState((prev) => ({
147
+ ...prev,
148
+ messages: [
149
+ ...prev.messages,
150
+ {
151
+ role: "assistant",
152
+ content: "Great! I've analyzed your codebase and created a plan with 5 tasks. Ready to start!",
153
+ isWaitingForInput: false,
154
+ },
155
+ ],
156
+ isThinking: false,
157
+ progress: 100,
158
+ taskCount: 5,
159
+ }));
160
+ // Transition to game select after a brief delay
161
+ setTimeout(() => {
162
+ setAppState("game_select");
163
+ }, 1500);
164
+ }, 2000);
165
+ }, []);
166
+ // Handle planning cancel
167
+ const handlePlanningCancel = useCallback(() => {
168
+ setAppState("feature_input");
169
+ setPlanningState({
170
+ featureDescription: "",
171
+ messages: [],
172
+ isThinking: false,
173
+ progress: 0,
174
+ taskCount: 0,
175
+ });
176
+ }, []);
177
+ // Handle game selection and start loop
178
+ const handleGameSelect = useCallback((gameId) => {
179
+ setSelectedGameId(gameId);
180
+ setLoopStartTime(new Date());
181
+ // Store planning result in loop state
182
+ loopState.setPrdAndTasks({
183
+ name: planningState.featureDescription,
184
+ description: "Feature implementation",
185
+ content: "",
186
+ raw: null,
187
+ }, Array.from({ length: planningState.taskCount }, (_, i) => ({
188
+ id: `task-${i + 1}`,
189
+ title: `Task ${i + 1}`,
190
+ status: i === 0 ? "in_progress" : "pending",
191
+ complexity: "medium",
192
+ })));
193
+ // Start the game and loop
194
+ const gameInfo = getGameById(gameId);
195
+ if (gameInfo) {
196
+ setGameState({ gameId, gameName: gameInfo.info.name });
197
+ }
198
+ spawn();
199
+ setAppState("loop_running");
200
+ }, [planningState, loopState, setGameState, spawn]);
201
+ // Handle game switch during loop (from overlay)
202
+ const handleGameSwitch = useCallback((gameId) => {
203
+ setSelectedGameId(gameId);
204
+ setShowGameSelector(false);
205
+ const gameInfo = getGameById(gameId);
206
+ if (gameInfo) {
207
+ setGameState({ gameId, gameName: gameInfo.info.name });
208
+ }
209
+ }, [setGameState]);
210
+ // Handle attention overlay response
211
+ const handleAttentionResponse = useCallback((response) => {
212
+ // TODO: Send response to Claude Code process
213
+ console.log("User response:", response);
214
+ setLoopAlertDismissed(true);
215
+ }, []);
216
+ // Handle attention skip (let Claude decide)
217
+ const handleAttentionSkip = useCallback(() => {
218
+ setLoopAlertDismissed(true);
219
+ }, []);
220
+ // Handle loop complete actions
221
+ const handleKeepPlaying = useCallback(() => {
222
+ setAppState("game_select");
223
+ }, []);
224
+ // Handle quit
225
+ const handleQuit = useCallback(() => {
226
+ void stop().then(() => exit());
227
+ }, [stop, exit]);
228
+ // Handle resume from existing loop
229
+ const handleResume = useCallback(() => {
230
+ setAppState("game_select");
231
+ }, []);
232
+ // Handle new loop from resume prompt
233
+ const handleNewLoop = useCallback(() => {
234
+ loopState.clear();
235
+ setAppState("feature_input");
236
+ }, [loopState]);
237
+ // Handle game exit
238
+ const handleGameExit = useCallback(() => {
239
+ setSelectedGameId(null);
240
+ clearGameState();
241
+ }, [clearGameState]);
242
+ // Handle game state change
243
+ const handleGameStateChange = useCallback((update) => {
244
+ setGameState(update);
245
+ }, [setGameState]);
246
+ // Handle loop alert dismiss
247
+ const handleLoopAlertDismiss = useCallback(() => {
248
+ setLoopAlertDismissed(true);
249
+ }, []);
250
+ // Reset dismiss state when new attention request comes in
251
+ useEffect(() => {
252
+ if (ralphLoop.needsAttention) {
253
+ setLoopAlertDismissed(false);
254
+ }
255
+ }, [ralphLoop.needsAttention, ralphLoop.state.userAttention.reason]);
256
+ // Side panel visibility
257
+ const showSidePanel = useMemo(() => {
258
+ return terminalSize.width >= sidePanelSettings.threshold;
259
+ }, [terminalSize.width, sidePanelSettings.threshold]);
260
+ // Side panel tasks (converted from loop state)
261
+ const sidePanelTasks = useMemo(() => {
262
+ return loopState.state.tasks.map((task) => ({
263
+ id: task.id,
264
+ title: task.title,
265
+ status: task.status,
266
+ }));
267
+ }, [loopState.state.tasks]);
268
+ // Current activity for side panel
269
+ const currentActivity = useMemo(() => {
270
+ const currentTask = loopState.state.tasks.find((t) => t.status === "in_progress");
271
+ if (!currentTask)
272
+ return undefined;
273
+ // Use the last output line as activity description if available
274
+ if (output.length > 0) {
275
+ const lastOutput = output[output.length - 1];
276
+ if (lastOutput?.content && lastOutput.content.trim().length > 0) {
277
+ return lastOutput.content.slice(0, 60);
278
+ }
279
+ }
280
+ return `Working on: ${currentTask.title}`;
281
+ }, [loopState.state.tasks, output]);
282
+ // Activity start time (convert from ISO string to Date)
283
+ const activityStartedAt = useMemo(() => {
284
+ const startedAtStr = loopState.state.startedAt;
285
+ if (!startedAtStr)
286
+ return null;
287
+ try {
288
+ return new Date(startedAtStr);
289
+ }
290
+ catch {
291
+ return null;
292
+ }
293
+ }, [loopState.state.startedAt]);
294
+ // Game dimensions (account for side panel if shown)
295
+ const gameDimensions = useMemo(() => {
296
+ // Full screen minus status bar (2 lines)
297
+ const panelWidth = showSidePanel ? sidePanelSettings.width : 0;
298
+ return {
299
+ width: terminalSize.width - panelWidth,
300
+ height: terminalSize.height - 2,
301
+ };
302
+ }, [terminalSize, showSidePanel, sidePanelSettings.width]);
303
+ // Loop attention for games
304
+ const loopAttention = useMemo(() => ({
305
+ needsAttention: ralphLoop.needsAttention && !loopAlertDismissed,
306
+ reason: ralphLoop.state.userAttention.reason,
307
+ type: ralphLoop.state.userAttention.type,
308
+ prompt: ralphLoop.state.userAttention.prompt,
309
+ }), [ralphLoop.needsAttention, ralphLoop.state.userAttention, loopAlertDismissed]);
310
+ // Current task info for status bar
311
+ const currentTaskInfo = useMemo(() => {
312
+ const tasks = loopState.state.tasks;
313
+ const currentTask = tasks.find((t) => t.status === "in_progress");
314
+ const completedCount = tasks.filter((t) => t.status === "completed").length;
315
+ const totalCount = tasks.length;
316
+ const progress = totalCount > 0 ? (completedCount / totalCount) * 100 : 0;
317
+ return {
318
+ currentTask: currentTask?.title ?? null,
319
+ taskNumber: currentTask ? tasks.indexOf(currentTask) + 1 : null,
320
+ totalTasks: totalCount,
321
+ progress,
322
+ };
323
+ }, [loopState.state.tasks]);
324
+ // Map process status to loop status
325
+ const effectiveLoopStatus = useMemo(() => {
326
+ if (processStatus === "running") {
327
+ if (ralphLoop.state.status === "waiting_for_input")
328
+ return "waiting";
329
+ if (ralphLoop.state.status === "completed")
330
+ return "completed";
331
+ if (ralphLoop.state.status === "errored")
332
+ return "errored";
333
+ return "running";
334
+ }
335
+ if (processStatus === "stopped" || processStatus === "crashed") {
336
+ return "idle";
337
+ }
338
+ return "idle";
339
+ }, [processStatus, ralphLoop.state.status]);
340
+ // Global keyboard handling
341
+ useInput((input, key) => {
342
+ // Ctrl+C always exits
343
+ if (key.ctrl && input === "c") {
344
+ void stop().then(() => exit());
345
+ return;
346
+ }
347
+ // ? toggles help
348
+ if (input === "?") {
349
+ setShowHelp((prev) => !prev);
350
+ return;
351
+ }
352
+ // Help overlay captures all other input
353
+ if (showHelp) {
354
+ if (key.escape)
355
+ setShowHelp(false);
356
+ return;
357
+ }
358
+ // Game selector overlay captures input
359
+ if (showGameSelector) {
360
+ if (key.escape)
361
+ setShowGameSelector(false);
362
+ return;
363
+ }
364
+ // G toggles game selector (only in loop_running state)
365
+ if ((input === "g" || input === "G") && appState === "loop_running" && !showLogs) {
366
+ setShowGameSelector((prev) => !prev);
367
+ return;
368
+ }
369
+ // L toggles logs (only in loop_running state)
370
+ if ((input === "l" || input === "L") && appState === "loop_running" && !showGameSelector) {
371
+ setShowLogs((prev) => !prev);
372
+ return;
373
+ }
374
+ // Escape closes logs
375
+ if (key.escape && showLogs) {
376
+ setShowLogs(false);
377
+ return;
378
+ }
379
+ });
380
+ // Render based on app state
381
+ const renderContent = () => {
382
+ // Help overlay takes precedence
383
+ if (showHelp) {
384
+ return (_jsx(Box, { position: "absolute", marginTop: 1, marginLeft: 2, children: _jsx(HelpOverlay, { hasFocus: true, onClose: () => setShowHelp(false) }) }));
385
+ }
386
+ // Logs overlay during loop
387
+ if (showLogs && appState === "loop_running") {
388
+ return (_jsxs(Box, { flexDirection: "column", width: "100%", height: "100%", children: [_jsxs(Box, { borderStyle: "single", borderColor: colors.primary, paddingX: 2, children: [_jsx(Text, { bold: true, color: colors.primary, children: "LOGS" }), _jsx(Text, { dimColor: true, children: " | Press L to close | Ctrl+C to stop loop" })] }), _jsx(LogViewer, { logs: output, hasFocus: true, initialViewMode: "condensed" }), _jsx(StatusBarMinimal, { status: effectiveLoopStatus, currentTask: currentTaskInfo.currentTask ?? undefined, taskNumber: currentTaskInfo.taskNumber ?? undefined, totalTasks: currentTaskInfo.totalTasks, progress: currentTaskInfo.progress, needsAttention: loopAttention.needsAttention, width: terminalSize.width })] }));
389
+ }
390
+ switch (appState) {
391
+ case "feature_input":
392
+ return (_jsx(FeatureInput, { onSubmit: handleFeatureSubmit, hasFocus: true, dimensions: terminalSize }));
393
+ case "claude_planning":
394
+ return (_jsx(ClaudeChat, { featureDescription: planningState.featureDescription, messages: planningState.messages, isThinking: planningState.isThinking, progress: planningState.progress, onSubmitAnswer: handlePlanningAnswer, onCancel: handlePlanningCancel, hasFocus: true, dimensions: terminalSize }));
395
+ case "game_select":
396
+ return (_jsx(GameSelectScreen, { featureDescription: planningState.featureDescription || loopState.state.prd?.name || "Feature", taskCount: planningState.taskCount || loopState.state.tasks.length, onSelectGame: handleGameSelect, hasFocus: true, dimensions: terminalSize }));
397
+ case "loop_running":
398
+ if (selectedGameId) {
399
+ const gameEntry = getGameById(selectedGameId);
400
+ if (gameEntry) {
401
+ const GameComponent = gameEntry.component;
402
+ // Game selector overlay
403
+ if (showGameSelector) {
404
+ return (_jsx(GameSelectorOverlay, { currentGameId: selectedGameId, onSelectGame: handleGameSwitch, onViewStats: () => setShowGameSelector(false), onClose: () => setShowGameSelector(false), hasFocus: true }));
405
+ }
406
+ // Attention overlay (game pauses)
407
+ if (loopAttention.needsAttention && !loopAlertDismissed) {
408
+ return (_jsx(AttentionOverlay, { isVisible: true, prompt: loopAttention.prompt ?? "Claude needs your input", type: loopAttention.type, onSubmit: handleAttentionResponse, onSkip: handleAttentionSkip, hasFocus: true, dimensions: terminalSize }));
409
+ }
410
+ return (_jsxs(Box, { flexDirection: "column", width: "100%", height: "100%", children: [_jsxs(Box, { flexGrow: 1, flexDirection: "row", children: [_jsx(Box, { width: gameDimensions.width, height: gameDimensions.height, children: _jsx(GameComponent, { hasFocus: true, dimensions: gameDimensions, onExit: handleGameExit, loopAttention: loopAttention, onLoopAlertDismiss: handleLoopAlertDismiss, onGameStateChange: handleGameStateChange }) }), showSidePanel && (_jsx(SidePanel, { tasks: sidePanelTasks, currentActivity: currentActivity, activityStartedAt: activityStartedAt, width: sidePanelSettings.width, height: gameDimensions.height }))] }), _jsx(StatusBarMinimal, { status: effectiveLoopStatus, currentTask: currentTaskInfo.currentTask ?? undefined, taskNumber: currentTaskInfo.taskNumber ?? undefined, totalTasks: currentTaskInfo.totalTasks, progress: currentTaskInfo.progress, needsAttention: loopAttention.needsAttention, width: terminalSize.width })] }));
411
+ }
412
+ }
413
+ // No game selected - show game selector
414
+ return (_jsx(GameSelectScreen, { featureDescription: planningState.featureDescription || loopState.state.prd?.name || "Feature", taskCount: planningState.taskCount || loopState.state.tasks.length, onSelectGame: handleGameSelect, hasFocus: true, dimensions: terminalSize }));
415
+ case "resume_prompt":
416
+ return (_jsx(ResumePrompt, { featureName: loopState.state.prd?.name ?? "Unknown feature", completedTasks: loopState.state.progress.completedTasks, totalTasks: loopState.state.progress.totalTasks, lastActiveAt: activityStartedAt, onResume: handleResume, onNewLoop: handleNewLoop, onQuit: handleQuit, hasFocus: true, dimensions: terminalSize }));
417
+ case "loop_complete": {
418
+ const loopDuration = loopStartTime
419
+ ? Date.now() - loopStartTime.getTime()
420
+ : 0;
421
+ return (_jsx(LoopComplete, { featureName: loopState.state.prd?.name ?? "Feature", tasksCompleted: loopState.state.progress.completedTasks, totalTasks: loopState.state.progress.totalTasks, durationMs: loopDuration, gameStats: gameStats, onNewLoop: handleNewLoop, onKeepPlaying: handleKeepPlaying, onQuit: handleQuit, hasFocus: true, dimensions: terminalSize }));
422
+ }
423
+ default:
424
+ return null;
425
+ }
426
+ };
427
+ return renderContent();
428
+ }
429
+ // ============================================================================
430
+ // EXPORTED APP WRAPPER
431
+ // ============================================================================
432
+ export function AppNew() {
433
+ const { config: fileConfig } = useConfig();
434
+ return (_jsx(ThemeProvider, { config: fileConfig, children: _jsx(GameStatusProvider, { children: _jsx(LoopInfoProvider, { children: _jsx(AppNewContent, {}) }) }) }));
435
+ }
436
+ export default AppNew;
437
+ //# sourceMappingURL=AppNew.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AppNew.js","sourceRoot":"","sources":["../src/AppNew.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Attention Overlay
3
+ *
4
+ * Modal overlay that appears when Claude needs user input.
5
+ * Pauses the game and displays Claude's question with an input field.
6
+ */
7
+ export interface AttentionOverlayProps {
8
+ /** Whether the overlay is visible */
9
+ isVisible: boolean;
10
+ /** The question or prompt from Claude */
11
+ prompt: string;
12
+ /** Type of attention needed */
13
+ type: "question" | "confirmation" | "error" | "permission" | null;
14
+ /** Callback when user submits a response */
15
+ onSubmit: (response: string) => void;
16
+ /** Callback when user skips (lets Claude decide) */
17
+ onSkip: () => void;
18
+ /** Whether the component has focus */
19
+ hasFocus: boolean;
20
+ /** Terminal dimensions */
21
+ dimensions: {
22
+ width: number;
23
+ height: number;
24
+ };
25
+ }
26
+ export declare function AttentionOverlay({ isVisible, prompt, type, onSubmit, onSkip, hasFocus, dimensions, }: AttentionOverlayProps): import("react/jsx-runtime").JSX.Element | null;
27
+ export default AttentionOverlay;
28
+ //# sourceMappingURL=AttentionOverlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AttentionOverlay.d.ts","sourceRoot":"","sources":["../src/AttentionOverlay.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,MAAM,WAAW,qBAAqB;IACpC,qCAAqC;IACrC,SAAS,EAAE,OAAO,CAAC;IACnB,yCAAyC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,IAAI,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,GAAG,YAAY,GAAG,IAAI,CAAC;IAClE,4CAA4C;IAC5C,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,oDAAoD;IACpD,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,sCAAsC;IACtC,QAAQ,EAAE,OAAO,CAAC;IAClB,0BAA0B;IAC1B,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAwCD,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,QAAQ,EACR,UAAU,GACX,EAAE,qBAAqB,kDAqHvB;AAED,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,92 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * Attention Overlay
4
+ *
5
+ * Modal overlay that appears when Claude needs user input.
6
+ * Pauses the game and displays Claude's question with an input field.
7
+ */
8
+ import { Box, Text, useInput } from "ink";
9
+ import { useState, useCallback, useMemo } from "react";
10
+ import { useThemeColors } from "./useTheme.js";
11
+ import { alertIcons } from "./theme.js";
12
+ // ============================================================================
13
+ // HELPER FUNCTIONS
14
+ // ============================================================================
15
+ function getIcon(type) {
16
+ switch (type) {
17
+ case "question":
18
+ return alertIcons.question || "?";
19
+ case "confirmation":
20
+ return alertIcons.confirmation || "!";
21
+ case "error":
22
+ return alertIcons.error || "\u2717";
23
+ case "permission":
24
+ return alertIcons.permission || "\u26BF";
25
+ default:
26
+ return alertIcons.warning || "\u26A0";
27
+ }
28
+ }
29
+ function getTitle(type) {
30
+ switch (type) {
31
+ case "question":
32
+ return "CLAUDE HAS A QUESTION";
33
+ case "confirmation":
34
+ return "CONFIRMATION NEEDED";
35
+ case "error":
36
+ return "ERROR OCCURRED";
37
+ case "permission":
38
+ return "PERMISSION REQUIRED";
39
+ default:
40
+ return "CLAUDE NEEDS YOUR INPUT";
41
+ }
42
+ }
43
+ // ============================================================================
44
+ // MAIN COMPONENT
45
+ // ============================================================================
46
+ export function AttentionOverlay({ isVisible, prompt, type, onSubmit, onSkip, hasFocus, dimensions, }) {
47
+ const [inputValue, setInputValue] = useState("");
48
+ const colors = useThemeColors();
49
+ const handleSubmit = useCallback(() => {
50
+ if (inputValue.trim()) {
51
+ onSubmit(inputValue.trim());
52
+ setInputValue("");
53
+ }
54
+ }, [inputValue, onSubmit]);
55
+ // Handle keyboard input
56
+ useInput((input, key) => {
57
+ if (!hasFocus || !isVisible)
58
+ return;
59
+ // Enter to submit
60
+ if (key.return) {
61
+ handleSubmit();
62
+ return;
63
+ }
64
+ // Escape to skip
65
+ if (key.escape) {
66
+ onSkip();
67
+ return;
68
+ }
69
+ // Backspace/Delete to remove characters
70
+ if (key.backspace || key.delete) {
71
+ setInputValue((prev) => prev.slice(0, -1));
72
+ return;
73
+ }
74
+ // Printable characters (ignore control keys)
75
+ if (input && !key.ctrl && !key.meta) {
76
+ setInputValue((prev) => prev + input);
77
+ }
78
+ }, { isActive: hasFocus && isVisible });
79
+ // Calculate overlay dimensions
80
+ const overlayWidth = useMemo(() => {
81
+ return Math.min(60, dimensions.width - 8);
82
+ }, [dimensions.width]);
83
+ if (!isVisible) {
84
+ return null;
85
+ }
86
+ const icon = getIcon(type);
87
+ const title = getTitle(type);
88
+ const cursorChar = "\u258c";
89
+ return (_jsxs(Box, { flexDirection: "column", alignItems: "center", justifyContent: "center", width: "100%", height: "100%", children: [_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: colors.warning, paddingX: 2, paddingY: 1, width: overlayWidth, children: [_jsx(Box, { justifyContent: "center", marginBottom: 1, children: _jsxs(Text, { bold: true, color: colors.warning, children: [icon, " ", title] }) }), _jsx(Box, { marginBottom: 1, children: _jsx(Text, { dimColor: true, children: "─".repeat(overlayWidth - 6) }) }), _jsx(Box, { flexDirection: "column", marginBottom: 2, children: _jsx(Text, { color: colors.text, children: prompt }) }), _jsx(Box, { borderStyle: "single", borderColor: colors.borderFocus, paddingX: 1, marginBottom: 1, children: _jsxs(Text, { children: [_jsx(Text, { color: colors.primary, children: "> " }), _jsx(Text, { color: colors.text, children: inputValue }), _jsx(Text, { color: colors.primary, children: cursorChar })] }) }), _jsx(Box, { justifyContent: "center", children: _jsxs(Text, { dimColor: true, children: [_jsx(Text, { color: colors.primary, children: "Enter" }), ": Submit |", " ", _jsx(Text, { color: colors.primary, children: "Esc" }), ": Skip (let Claude decide)"] }) })] }), _jsx(Box, { marginTop: 2, children: _jsx(Text, { dimColor: true, italic: true, children: "Game paused" }) })] }));
90
+ }
91
+ export default AttentionOverlay;
92
+ //# sourceMappingURL=AttentionOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AttentionOverlay.js","sourceRoot":"","sources":["../src/AttentionOverlay.tsx"],"names":[],"mappings":"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"}