brainrot-cli 0.1.0 → 0.1.1

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 (136) hide show
  1. package/dist/AchievementNotification.d.ts.map +1 -1
  2. package/dist/AchievementNotification.js.map +1 -1
  3. package/dist/DynamicInterviewFlow.d.ts +66 -0
  4. package/dist/DynamicInterviewFlow.d.ts.map +1 -0
  5. package/dist/DynamicInterviewFlow.js +352 -0
  6. package/dist/DynamicInterviewFlow.js.map +1 -0
  7. package/dist/FeaturePromptScreen.d.ts +24 -0
  8. package/dist/FeaturePromptScreen.d.ts.map +1 -0
  9. package/dist/FeaturePromptScreen.js +117 -0
  10. package/dist/FeaturePromptScreen.js.map +1 -0
  11. package/dist/GameSelector.d.ts +9 -1
  12. package/dist/GameSelector.d.ts.map +1 -1
  13. package/dist/GameSelector.js +116 -19
  14. package/dist/GameSelector.js.map +1 -1
  15. package/dist/HelpOverlay.d.ts.map +1 -1
  16. package/dist/HelpOverlay.js +5 -2
  17. package/dist/HelpOverlay.js.map +1 -1
  18. package/dist/InterviewQuestion.d.ts +36 -0
  19. package/dist/InterviewQuestion.d.ts.map +1 -0
  20. package/dist/InterviewQuestion.js +148 -0
  21. package/dist/InterviewQuestion.js.map +1 -0
  22. package/dist/Layout.d.ts +1 -1
  23. package/dist/Layout.d.ts.map +1 -1
  24. package/dist/Layout.js +4 -4
  25. package/dist/Layout.js.map +1 -1
  26. package/dist/LogViewer.d.ts.map +1 -1
  27. package/dist/LogViewer.js +2 -2
  28. package/dist/LogViewer.js.map +1 -1
  29. package/dist/LoopAlertOverlay.d.ts +1 -1
  30. package/dist/LoopAlertOverlay.d.ts.map +1 -1
  31. package/dist/LoopAlertOverlay.js +1 -1
  32. package/dist/LoopAlertOverlay.js.map +1 -1
  33. package/dist/LoopManagementPanel.d.ts.map +1 -1
  34. package/dist/LoopManagementPanel.js.map +1 -1
  35. package/dist/OnboardingTutorial.d.ts +23 -0
  36. package/dist/OnboardingTutorial.d.ts.map +1 -0
  37. package/dist/OnboardingTutorial.js +165 -0
  38. package/dist/OnboardingTutorial.js.map +1 -0
  39. package/dist/PrdGenerationScreen.d.ts +43 -0
  40. package/dist/PrdGenerationScreen.d.ts.map +1 -0
  41. package/dist/PrdGenerationScreen.js +411 -0
  42. package/dist/PrdGenerationScreen.js.map +1 -0
  43. package/dist/PrdOverlay.d.ts +29 -0
  44. package/dist/PrdOverlay.d.ts.map +1 -0
  45. package/dist/PrdOverlay.js +174 -0
  46. package/dist/PrdOverlay.js.map +1 -0
  47. package/dist/PreStartReviewScreen.d.ts +29 -0
  48. package/dist/PreStartReviewScreen.d.ts.map +1 -0
  49. package/dist/PreStartReviewScreen.js +161 -0
  50. package/dist/PreStartReviewScreen.js.map +1 -0
  51. package/dist/ResumeOverlay.d.ts +26 -0
  52. package/dist/ResumeOverlay.d.ts.map +1 -0
  53. package/dist/ResumeOverlay.js +163 -0
  54. package/dist/ResumeOverlay.js.map +1 -0
  55. package/dist/SettingsMenu.d.ts.map +1 -1
  56. package/dist/SettingsMenu.js +14 -7
  57. package/dist/SettingsMenu.js.map +1 -1
  58. package/dist/SetupWizard.d.ts +41 -0
  59. package/dist/SetupWizard.d.ts.map +1 -0
  60. package/dist/SetupWizard.js +167 -0
  61. package/dist/SetupWizard.js.map +1 -0
  62. package/dist/SplitPane.d.ts.map +1 -1
  63. package/dist/SplitPane.js +6 -2
  64. package/dist/SplitPane.js.map +1 -1
  65. package/dist/StatsMenu.d.ts.map +1 -1
  66. package/dist/StatsMenu.js +24 -6
  67. package/dist/StatsMenu.js.map +1 -1
  68. package/dist/StatusBar.d.ts +45 -2
  69. package/dist/StatusBar.d.ts.map +1 -1
  70. package/dist/StatusBar.js +193 -23
  71. package/dist/StatusBar.js.map +1 -1
  72. package/dist/TaskBreakdownScreen.d.ts +27 -0
  73. package/dist/TaskBreakdownScreen.d.ts.map +1 -0
  74. package/dist/TaskBreakdownScreen.js +96 -0
  75. package/dist/TaskBreakdownScreen.js.map +1 -0
  76. package/dist/cli.d.ts.map +1 -1
  77. package/dist/cli.js +3 -1
  78. package/dist/cli.js.map +1 -1
  79. package/dist/config.d.ts.map +1 -1
  80. package/dist/config.js.map +1 -1
  81. package/dist/games/MinesweeperGame.d.ts +1 -1
  82. package/dist/games/MinesweeperGame.d.ts.map +1 -1
  83. package/dist/games/MinesweeperGame.js +30 -10
  84. package/dist/games/MinesweeperGame.js.map +1 -1
  85. package/dist/games/PongGame.d.ts +1 -1
  86. package/dist/games/PongGame.d.ts.map +1 -1
  87. package/dist/games/PongGame.js +7 -2
  88. package/dist/games/PongGame.js.map +1 -1
  89. package/dist/games/SnakeGame.d.ts +1 -1
  90. package/dist/games/SnakeGame.d.ts.map +1 -1
  91. package/dist/games/SnakeGame.js +12 -4
  92. package/dist/games/SnakeGame.js.map +1 -1
  93. package/dist/games/TetrisGame.d.ts +1 -1
  94. package/dist/games/TetrisGame.d.ts.map +1 -1
  95. package/dist/games/TetrisGame.js +22 -5
  96. package/dist/games/TetrisGame.js.map +1 -1
  97. package/dist/high-scores.d.ts.map +1 -1
  98. package/dist/high-scores.js.map +1 -1
  99. package/dist/index.js +228 -15
  100. package/dist/index.js.map +1 -1
  101. package/dist/loop-state.d.ts +137 -0
  102. package/dist/loop-state.d.ts.map +1 -0
  103. package/dist/loop-state.js +228 -0
  104. package/dist/loop-state.js.map +1 -0
  105. package/dist/ralph-loop-parser.d.ts.map +1 -1
  106. package/dist/ralph-loop-parser.js +4 -2
  107. package/dist/ralph-loop-parser.js.map +1 -1
  108. package/dist/stats.d.ts.map +1 -1
  109. package/dist/stats.js.map +1 -1
  110. package/dist/styled-components.d.ts +1 -1
  111. package/dist/styled-components.d.ts.map +1 -1
  112. package/dist/styled-components.js +5 -3
  113. package/dist/styled-components.js.map +1 -1
  114. package/dist/theme.d.ts.map +1 -1
  115. package/dist/theme.js +15 -2
  116. package/dist/theme.js.map +1 -1
  117. package/dist/themes.d.ts.map +1 -1
  118. package/dist/themes.js.map +1 -1
  119. package/dist/use-claude-code.d.ts.map +1 -1
  120. package/dist/use-claude-code.js +7 -1
  121. package/dist/use-claude-code.js.map +1 -1
  122. package/dist/use-config.d.ts.map +1 -1
  123. package/dist/use-config.js.map +1 -1
  124. package/dist/use-loop-state.d.ts +55 -0
  125. package/dist/use-loop-state.d.ts.map +1 -0
  126. package/dist/use-loop-state.js +208 -0
  127. package/dist/use-loop-state.js.map +1 -0
  128. package/dist/use-stats.d.ts.map +1 -1
  129. package/dist/use-stats.js.map +1 -1
  130. package/dist/useTheme.d.ts.map +1 -1
  131. package/dist/useTheme.js.map +1 -1
  132. package/package.json +1 -1
  133. package/dist/__tests__/ralph-loop-parser.test.d.ts +0 -2
  134. package/dist/__tests__/ralph-loop-parser.test.d.ts.map +0 -1
  135. package/dist/__tests__/ralph-loop-parser.test.js +0 -143
  136. package/dist/__tests__/ralph-loop-parser.test.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AchievementNotification.d.ts","sourceRoot":"","sources":["../src/AchievementNotification.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,4BAA4B;IAC3C,iCAAiC;IACjC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAkCD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,cAAc,EACd,UAAU,EACV,QAAe,GAChB,EAAE,4BAA4B,kDA+B9B;AAED;;GAEG;AACH,wBAAgB,2BAA2B;2BAIC,MAAM,EAAE;;;EAuBnD;AAED,eAAe,uBAAuB,CAAC"}
1
+ {"version":3,"file":"AchievementNotification.d.ts","sourceRoot":"","sources":["../src/AchievementNotification.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,4BAA4B;IAC3C,iCAAiC;IACjC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAkCD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,cAAc,EACd,UAAU,EACV,QAAe,GAChB,EAAE,4BAA4B,kDAgC9B;AAED;;GAEG;AACH,wBAAgB,2BAA2B;2BAIC,MAAM,EAAE;;;EAwBnD;AAED,eAAe,uBAAuB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"AchievementNotification.js","sourceRoot":"","sources":["../src/AchievementNotification.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AchievementNotification.js","sourceRoot":"","sources":["../src/AchievementNotification.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Dynamic Interview Flow Component
3
+ *
4
+ * Manages a multi-question interview flow with dynamic question generation.
5
+ * Questions cover: scope, users, technical constraints, integration, success criteria, edge cases, priorities.
6
+ * Progress indicator shows 'Question X of ~Y' (approximate since questions may be added/removed).
7
+ */
8
+ import { type InterviewOption } from "./InterviewQuestion.js";
9
+ /** Question category for organizing interview flow */
10
+ export type QuestionCategory = "scope" | "users" | "technical" | "integration" | "success" | "edge_cases" | "priorities";
11
+ /** A single interview question definition */
12
+ export interface InterviewQuestionDef {
13
+ /** Unique question identifier */
14
+ id: string;
15
+ /** Question category */
16
+ category: QuestionCategory;
17
+ /** The question text */
18
+ question: string;
19
+ /** Header displayed above the question */
20
+ header: string;
21
+ /** Pre-defined answer options (A-D) */
22
+ options: InterviewOption[];
23
+ /** Whether this question can trigger follow-up questions */
24
+ canTriggerFollowUp?: boolean;
25
+ /** Condition for showing this question (based on previous answers) */
26
+ showIf?: (answers: InterviewAnswers) => boolean;
27
+ }
28
+ /** User's answer to a question */
29
+ export interface InterviewAnswer {
30
+ questionId: string;
31
+ answer: string;
32
+ timestamp: string;
33
+ }
34
+ /** Map of all collected answers */
35
+ export type InterviewAnswers = Record<string, string>;
36
+ /** Complete interview result */
37
+ export interface InterviewResult {
38
+ /** All answers collected */
39
+ answers: InterviewAnswers;
40
+ /** Original feature description */
41
+ featureDescription: string;
42
+ /** Estimated complexity */
43
+ complexity: "small" | "medium" | "large";
44
+ /** Summary generated from answers */
45
+ summary: string;
46
+ }
47
+ export interface DynamicInterviewFlowProps {
48
+ /** Whether the component is visible */
49
+ isVisible: boolean;
50
+ /** The feature description entered by user */
51
+ featureDescription: string;
52
+ /** Callback when interview is complete */
53
+ onComplete: (result: InterviewResult) => void;
54
+ /** Callback when user wants to go back */
55
+ onBack?: () => void;
56
+ /** Whether the component has focus */
57
+ hasFocus: boolean;
58
+ /** Terminal dimensions for centering */
59
+ dimensions?: {
60
+ width: number;
61
+ height: number;
62
+ };
63
+ }
64
+ export declare function DynamicInterviewFlow({ isVisible, featureDescription, onComplete, onBack, hasFocus, dimensions, }: DynamicInterviewFlowProps): import("react/jsx-runtime").JSX.Element | null;
65
+ export default DynamicInterviewFlow;
66
+ //# sourceMappingURL=DynamicInterviewFlow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DynamicInterviewFlow.d.ts","sourceRoot":"","sources":["../src/DynamicInterviewFlow.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,wBAAwB,CAAC;AAMhC,sDAAsD;AACtD,MAAM,MAAM,gBAAgB,GACxB,OAAO,GACP,OAAO,GACP,WAAW,GACX,aAAa,GACb,SAAS,GACT,YAAY,GACZ,YAAY,CAAC;AAEjB,6CAA6C;AAC7C,MAAM,WAAW,oBAAoB;IACnC,iCAAiC;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,wBAAwB;IACxB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,4DAA4D;IAC5D,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,sEAAsE;IACtE,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,OAAO,CAAC;CACjD;AAED,kCAAkC;AAClC,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,mCAAmC;AACnC,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEtD,gCAAgC;AAChC,MAAM,WAAW,eAAe;IAC9B,4BAA4B;IAC5B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,mCAAmC;IACnC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,2BAA2B;IAC3B,UAAU,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACzC,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,yBAAyB;IACxC,uCAAuC;IACvC,SAAS,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0CAA0C;IAC1C,UAAU,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAC9C,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,sCAAsC;IACtC,QAAQ,EAAE,OAAO,CAAC;IAClB,wCAAwC;IACxC,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAChD;AAiUD,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,kBAAkB,EAClB,UAAU,EACV,MAAM,EACN,QAAQ,EACR,UAAU,GACX,EAAE,yBAAyB,kDA2I3B;AAED,eAAe,oBAAoB,CAAC"}
@@ -0,0 +1,352 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Dynamic Interview Flow Component
4
+ *
5
+ * Manages a multi-question interview flow with dynamic question generation.
6
+ * Questions cover: scope, users, technical constraints, integration, success criteria, edge cases, priorities.
7
+ * Progress indicator shows 'Question X of ~Y' (approximate since questions may be added/removed).
8
+ */
9
+ import { Box, Text } from "ink";
10
+ import { useState, useCallback, useMemo, useEffect } from "react";
11
+ import { useThemeColors } from "./useTheme.js";
12
+ import { navIcons } from "./theme.js";
13
+ import { InterviewQuestion, } from "./InterviewQuestion.js";
14
+ // ============================================================================
15
+ // QUESTION TEMPLATES
16
+ // ============================================================================
17
+ /**
18
+ * Core interview questions covering all required topics.
19
+ * Questions are ordered by priority and may be conditionally shown.
20
+ */
21
+ const CORE_QUESTIONS = [
22
+ // Scope questions
23
+ {
24
+ id: "scope_type",
25
+ category: "scope",
26
+ question: "What type of project is this?",
27
+ header: "Project Scope",
28
+ options: [
29
+ { label: "Web application (frontend/fullstack)", value: "web" },
30
+ { label: "Backend API or service", value: "backend" },
31
+ { label: "CLI tool or script", value: "cli" },
32
+ { label: "Mobile app", value: "mobile" },
33
+ ],
34
+ },
35
+ {
36
+ id: "scope_size",
37
+ category: "scope",
38
+ question: "How would you describe the scope of this feature?",
39
+ header: "Feature Size",
40
+ options: [
41
+ { label: "Small - single file or function", value: "small" },
42
+ { label: "Medium - multiple files/components", value: "medium" },
43
+ { label: "Large - new system or major changes", value: "large" },
44
+ { label: "Unclear - need to explore first", value: "unclear" },
45
+ ],
46
+ canTriggerFollowUp: true,
47
+ },
48
+ // User questions
49
+ {
50
+ id: "users_primary",
51
+ category: "users",
52
+ question: "Who is the primary user of this feature?",
53
+ header: "Target Users",
54
+ options: [
55
+ { label: "End users (customers)", value: "end_users" },
56
+ { label: "Developers (internal/external)", value: "developers" },
57
+ { label: "Admins or operators", value: "admins" },
58
+ { label: "Automated systems/services", value: "automated" },
59
+ ],
60
+ },
61
+ // Technical constraints
62
+ {
63
+ id: "tech_constraints",
64
+ category: "technical",
65
+ question: "Are there specific technical constraints to consider?",
66
+ header: "Technical Constraints",
67
+ options: [
68
+ {
69
+ label: "Must use existing codebase patterns",
70
+ value: "existing_patterns",
71
+ },
72
+ { label: "Performance is critical", value: "performance" },
73
+ { label: "Security/authentication required", value: "security" },
74
+ { label: "No specific constraints", value: "none" },
75
+ ],
76
+ },
77
+ {
78
+ id: "tech_testing",
79
+ category: "technical",
80
+ question: "What testing approach should be used?",
81
+ header: "Testing Strategy",
82
+ options: [
83
+ { label: "Unit tests for core logic", value: "unit" },
84
+ { label: "Integration/E2E tests", value: "integration" },
85
+ { label: "Both unit and integration", value: "both" },
86
+ { label: "Manual testing only", value: "manual" },
87
+ ],
88
+ showIf: (answers) => answers.scope_size !== "small",
89
+ },
90
+ // Integration
91
+ {
92
+ id: "integration_external",
93
+ category: "integration",
94
+ question: "Does this feature need to integrate with external services?",
95
+ header: "External Integration",
96
+ options: [
97
+ { label: "Yes - APIs/third-party services", value: "external_api" },
98
+ { label: "Yes - database/storage", value: "database" },
99
+ { label: "Yes - authentication provider", value: "auth" },
100
+ { label: "No external integrations needed", value: "none" },
101
+ ],
102
+ showIf: (answers) => answers.scope_type !== "cli",
103
+ },
104
+ // Success criteria
105
+ {
106
+ id: "success_criteria",
107
+ category: "success",
108
+ question: "How will you know when this feature is complete?",
109
+ header: "Success Criteria",
110
+ options: [
111
+ { label: "All tests pass", value: "tests" },
112
+ { label: "Feature works as specified", value: "functional" },
113
+ { label: "Code reviewed and merged", value: "merged" },
114
+ { label: "Deployed to production", value: "deployed" },
115
+ ],
116
+ },
117
+ // Edge cases
118
+ {
119
+ id: "edge_cases",
120
+ category: "edge_cases",
121
+ question: "What edge cases should be handled?",
122
+ header: "Edge Cases",
123
+ options: [
124
+ { label: "Error handling and recovery", value: "errors" },
125
+ { label: "Empty/null input handling", value: "empty_input" },
126
+ { label: "Performance under load", value: "load" },
127
+ { label: "All of the above", value: "all" },
128
+ ],
129
+ showIf: (answers) => answers.scope_size !== "small",
130
+ },
131
+ // Priorities
132
+ {
133
+ id: "priority_focus",
134
+ category: "priorities",
135
+ question: "What should Claude prioritize?",
136
+ header: "Priority Focus",
137
+ options: [
138
+ { label: "Code quality and maintainability", value: "quality" },
139
+ { label: "Speed of implementation", value: "speed" },
140
+ { label: "Comprehensive documentation", value: "docs" },
141
+ { label: "Balance all aspects equally", value: "balanced" },
142
+ ],
143
+ },
144
+ ];
145
+ /**
146
+ * Follow-up questions that may be added based on answers
147
+ */
148
+ const FOLLOWUP_QUESTIONS = [
149
+ {
150
+ id: "scope_clarify",
151
+ category: "scope",
152
+ question: "Can you be more specific about the scope?",
153
+ header: "Scope Clarification",
154
+ options: [
155
+ { label: "It's a new feature from scratch", value: "new" },
156
+ { label: "Extending existing functionality", value: "extend" },
157
+ { label: "Refactoring/improving existing code", value: "refactor" },
158
+ { label: "Fixing a bug or issue", value: "bugfix" },
159
+ ],
160
+ showIf: (answers) => answers.scope_size === "unclear",
161
+ },
162
+ {
163
+ id: "security_details",
164
+ category: "technical",
165
+ question: "What security considerations are important?",
166
+ header: "Security Details",
167
+ options: [
168
+ { label: "User authentication/authorization", value: "auth" },
169
+ { label: "Data encryption/privacy", value: "encryption" },
170
+ { label: "Input validation/sanitization", value: "validation" },
171
+ { label: "All security best practices", value: "all" },
172
+ ],
173
+ showIf: (answers) => answers.tech_constraints === "security",
174
+ },
175
+ {
176
+ id: "performance_targets",
177
+ category: "technical",
178
+ question: "What performance targets should be met?",
179
+ header: "Performance Goals",
180
+ options: [
181
+ { label: "Sub-second response times", value: "fast" },
182
+ { label: "Handle high concurrent load", value: "scalable" },
183
+ { label: "Minimize memory usage", value: "memory" },
184
+ { label: "General optimization", value: "general" },
185
+ ],
186
+ showIf: (answers) => answers.tech_constraints === "performance",
187
+ },
188
+ ];
189
+ // ============================================================================
190
+ // HELPER FUNCTIONS
191
+ // ============================================================================
192
+ /**
193
+ * Calculate interview complexity based on feature description
194
+ */
195
+ function estimateComplexity(featureDescription) {
196
+ const words = featureDescription.split(/\s+/).length;
197
+ const hasComplexKeywords = /system|integration|auth|api|database|migration/i.test(featureDescription);
198
+ if (words > 50 || hasComplexKeywords) {
199
+ return "large";
200
+ }
201
+ else if (words > 20) {
202
+ return "medium";
203
+ }
204
+ return "small";
205
+ }
206
+ /**
207
+ * Determine which questions to show based on answers and complexity
208
+ */
209
+ function getActiveQuestions(answers, complexity) {
210
+ // Start with core questions
211
+ let questions = [...CORE_QUESTIONS];
212
+ // Add follow-up questions based on answers
213
+ for (const followUp of FOLLOWUP_QUESTIONS) {
214
+ if (followUp.showIf && followUp.showIf(answers)) {
215
+ // Insert follow-up after related question
216
+ const relatedIdx = questions.findIndex((q) => q.category === followUp.category);
217
+ if (relatedIdx >= 0) {
218
+ questions.splice(relatedIdx + 1, 0, followUp);
219
+ }
220
+ else {
221
+ questions.push(followUp);
222
+ }
223
+ }
224
+ }
225
+ // Filter out questions that shouldn't be shown
226
+ questions = questions.filter((q) => {
227
+ if (q.showIf) {
228
+ return q.showIf(answers);
229
+ }
230
+ return true;
231
+ });
232
+ // For small complexity, reduce questions
233
+ if (complexity === "small") {
234
+ // Keep only essential questions for small features
235
+ const essentialIds = [
236
+ "scope_type",
237
+ "scope_size",
238
+ "users_primary",
239
+ "success_criteria",
240
+ "priority_focus",
241
+ ];
242
+ questions = questions.filter((q) => essentialIds.includes(q.id) || q.showIf?.(answers));
243
+ }
244
+ return questions;
245
+ }
246
+ /**
247
+ * Generate a summary from interview answers
248
+ */
249
+ function generateSummary(answers) {
250
+ const parts = [];
251
+ if (answers.scope_type) {
252
+ parts.push(`Project type: ${answers.scope_type}`);
253
+ }
254
+ if (answers.scope_size) {
255
+ parts.push(`Scope: ${answers.scope_size}`);
256
+ }
257
+ if (answers.users_primary) {
258
+ parts.push(`Target users: ${answers.users_primary}`);
259
+ }
260
+ if (answers.priority_focus) {
261
+ parts.push(`Priority: ${answers.priority_focus}`);
262
+ }
263
+ return parts.join(" | ");
264
+ }
265
+ function ProgressIndicator({ current, estimated, colors, }) {
266
+ // Show approximate with ~ since questions may change
267
+ const progressText = `Question ${current} of ~${estimated}`;
268
+ const percentage = Math.round((current / estimated) * 100);
269
+ // Visual progress bar
270
+ const barWidth = 20;
271
+ const filled = Math.round((current / estimated) * barWidth);
272
+ const empty = barWidth - filled;
273
+ const bar = `${"█".repeat(filled)}${"░".repeat(empty)}`;
274
+ return (_jsxs(Box, { flexDirection: "column", alignItems: "center", marginBottom: 1, children: [_jsx(Text, { color: colors.secondary, children: progressText }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: colors.primary, children: bar }), _jsxs(Text, { color: colors.textMuted, children: [" ", percentage, "%"] })] })] }));
275
+ }
276
+ // ============================================================================
277
+ // MAIN COMPONENT
278
+ // ============================================================================
279
+ export function DynamicInterviewFlow({ isVisible, featureDescription, onComplete, onBack, hasFocus, dimensions, }) {
280
+ const colors = useThemeColors();
281
+ // Track current question index and answers
282
+ const [currentIndex, setCurrentIndex] = useState(0);
283
+ const [answers, setAnswers] = useState({});
284
+ // Calculate complexity from feature description
285
+ const complexity = useMemo(() => estimateComplexity(featureDescription), [featureDescription]);
286
+ // Get active questions based on current answers and complexity
287
+ const activeQuestions = useMemo(() => getActiveQuestions(answers, complexity), [answers, complexity]);
288
+ // Current question
289
+ const currentQuestion = activeQuestions[currentIndex];
290
+ // Estimated total (may change as answers are given)
291
+ const estimatedTotal = activeQuestions.length;
292
+ // Handle answer submission
293
+ const handleAnswer = useCallback((answer) => {
294
+ if (!currentQuestion)
295
+ return;
296
+ // Store answer
297
+ const newAnswers = {
298
+ ...answers,
299
+ [currentQuestion.id]: answer,
300
+ };
301
+ setAnswers(newAnswers);
302
+ // Check if this is the last question
303
+ const updatedQuestions = getActiveQuestions(newAnswers, complexity);
304
+ const nextIndex = currentIndex + 1;
305
+ if (nextIndex >= updatedQuestions.length) {
306
+ // Interview complete
307
+ const result = {
308
+ answers: newAnswers,
309
+ featureDescription,
310
+ complexity: newAnswers.scope_size ||
311
+ complexity,
312
+ summary: generateSummary(newAnswers),
313
+ };
314
+ onComplete(result);
315
+ }
316
+ else {
317
+ // Move to next question
318
+ setCurrentIndex(nextIndex);
319
+ }
320
+ }, [
321
+ currentQuestion,
322
+ answers,
323
+ currentIndex,
324
+ complexity,
325
+ featureDescription,
326
+ onComplete,
327
+ ]);
328
+ // Handle going back to previous question
329
+ const handleBack = useCallback(() => {
330
+ if (currentIndex > 0) {
331
+ setCurrentIndex(currentIndex - 1);
332
+ }
333
+ else if (onBack) {
334
+ onBack();
335
+ }
336
+ }, [currentIndex, onBack]);
337
+ // Reset when interview starts
338
+ useEffect(() => {
339
+ if (isVisible) {
340
+ setCurrentIndex(0);
341
+ setAnswers({});
342
+ }
343
+ }, [isVisible, featureDescription]);
344
+ if (!isVisible || !currentQuestion) {
345
+ return null;
346
+ }
347
+ return (_jsxs(Box, { flexDirection: "column", alignItems: "center", justifyContent: "center", width: "100%", height: "100%", children: [_jsx(ProgressIndicator, { current: currentIndex + 1, estimated: estimatedTotal, colors: colors }), _jsx(Box, { marginBottom: 1, children: _jsxs(Text, { dimColor: true, children: [navIcons.bullet, " ", currentQuestion.category.toUpperCase().replace("_", " "), " ", navIcons.bullet] }) }), _jsx(InterviewQuestion, { isVisible: true, question: currentQuestion.question, header: currentQuestion.header, options: currentQuestion.options, onAnswer: handleAnswer, onBack: handleBack, hasFocus: hasFocus, dimensions: dimensions }), _jsx(Box, { marginTop: 2, paddingX: 2, width: Math.min(70, (dimensions?.width ?? 80) - 4), children: _jsxs(Text, { dimColor: true, italic: true, children: ["Building:", " ", featureDescription.length > 50
348
+ ? featureDescription.slice(0, 50) + "..."
349
+ : featureDescription] }) })] }));
350
+ }
351
+ export default DynamicInterviewFlow;
352
+ //# sourceMappingURL=DynamicInterviewFlow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DynamicInterviewFlow.js","sourceRoot":"","sources":["../src/DynamicInterviewFlow.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Feature Prompt Screen Component
3
+ *
4
+ * Full-screen modal that asks the user for a feature description.
5
+ * Part of the setup wizard flow after onboarding tutorial.
6
+ */
7
+ export interface FeaturePromptScreenProps {
8
+ /** Whether the screen is visible */
9
+ isVisible: boolean;
10
+ /** Callback when feature prompt is submitted */
11
+ onComplete: (prompt: string) => void;
12
+ /** Callback when user wants to go back */
13
+ onBack?: () => void;
14
+ /** Whether the component has focus */
15
+ hasFocus: boolean;
16
+ /** Terminal dimensions for centering */
17
+ dimensions?: {
18
+ width: number;
19
+ height: number;
20
+ };
21
+ }
22
+ export declare function FeaturePromptScreen({ isVisible, onComplete, onBack, hasFocus, dimensions, }: FeaturePromptScreenProps): import("react/jsx-runtime").JSX.Element | null;
23
+ export default FeaturePromptScreen;
24
+ //# sourceMappingURL=FeaturePromptScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeaturePromptScreen.d.ts","sourceRoot":"","sources":["../src/FeaturePromptScreen.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,MAAM,WAAW,wBAAwB;IACvC,oCAAoC;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,gDAAgD;IAChD,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,sCAAsC;IACtC,QAAQ,EAAE,OAAO,CAAC;IAClB,wCAAwC;IACxC,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAChD;AA2JD,wBAAgB,mBAAmB,CAAC,EAClC,SAAS,EACT,UAAU,EACV,MAAM,EACN,QAAQ,EACR,UAAU,GACX,EAAE,wBAAwB,kDA+H1B;AAED,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,117 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * Feature Prompt Screen Component
4
+ *
5
+ * Full-screen modal that asks the user for a feature description.
6
+ * Part of the setup wizard flow after onboarding tutorial.
7
+ */
8
+ import { Box, Text, useInput } from "ink";
9
+ import { useState, useCallback, useMemo } from "react";
10
+ import { useThemeColors } from "./useTheme.js";
11
+ import { navIcons, decorChars } from "./theme.js";
12
+ // ============================================================================
13
+ // CONSTANTS
14
+ // ============================================================================
15
+ const MIN_CHARS = 10;
16
+ const PLACEHOLDER_EXAMPLES = [
17
+ "Build a user authentication system with JWT",
18
+ "Create a REST API for task management",
19
+ "Implement a real-time chat feature",
20
+ "Add dark mode support to the UI",
21
+ ];
22
+ function InputDisplay({ value, colors, width }) {
23
+ const displayWidth = Math.max(width - 4, 30);
24
+ const cursorChar = "▌";
25
+ // Show placeholder when empty
26
+ if (!value) {
27
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { borderStyle: "single", borderColor: colors.borderFocus, paddingX: 1, width: displayWidth, children: [_jsx(Text, { dimColor: true, italic: true, children: PLACEHOLDER_EXAMPLES[0] }), _jsx(Text, { color: colors.primary, children: cursorChar })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, italic: true, children: "Examples:" }) }), PLACEHOLDER_EXAMPLES.slice(1).map((example, i) => (_jsx(Box, { paddingLeft: 2, children: _jsxs(Text, { dimColor: true, children: [navIcons.bullet, " ", example] }) }, i)))] }));
28
+ }
29
+ // Show input with cursor
30
+ // Wrap text if it exceeds display width
31
+ const maxTextWidth = displayWidth - 4; // Account for padding and cursor
32
+ const lines = [];
33
+ let remaining = value;
34
+ while (remaining.length > 0) {
35
+ if (remaining.length <= maxTextWidth) {
36
+ lines.push(remaining);
37
+ remaining = "";
38
+ }
39
+ else {
40
+ // Find a good break point (space) or just cut
41
+ const breakPoint = remaining.lastIndexOf(" ", maxTextWidth);
42
+ const cutPoint = breakPoint > maxTextWidth / 2 ? breakPoint : maxTextWidth;
43
+ lines.push(remaining.slice(0, cutPoint));
44
+ remaining = remaining.slice(cutPoint).trimStart();
45
+ }
46
+ }
47
+ return (_jsx(Box, { borderStyle: "single", borderColor: colors.borderFocus, paddingX: 1, width: displayWidth, flexDirection: "column", children: lines.map((line, i) => (_jsxs(Box, { children: [_jsx(Text, { color: colors.text, children: line }), i === lines.length - 1 && (_jsx(Text, { color: colors.primary, children: cursorChar }))] }, i))) }));
48
+ }
49
+ function ValidationMessage({ charCount, colors, showError, }) {
50
+ const remaining = MIN_CHARS - charCount;
51
+ const isValid = charCount >= MIN_CHARS;
52
+ return (_jsxs(Box, { marginTop: 1, justifyContent: "space-between", width: "100%", children: [_jsx(Box, { children: showError && !isValid && (_jsxs(Text, { color: colors.error, children: [navIcons.arrowRight, " Minimum ", MIN_CHARS, " characters required"] })) }), _jsx(Box, { children: _jsxs(Text, { color: isValid ? colors.success : colors.textMuted, children: [charCount, " / ", MIN_CHARS, isValid && " ✓", !isValid && ` (${remaining} more)`] }) })] }));
53
+ }
54
+ function NavigationHints({ colors, canSubmit, hasBack }) {
55
+ return (_jsxs(Box, { justifyContent: "center", marginTop: 2, children: [hasBack && _jsx(Text, { color: colors.textMuted, children: "Esc: Go Back | " }), _jsxs(Text, { color: canSubmit ? colors.primary : colors.textMuted, children: ["Enter: ", canSubmit ? "Submit" : "Need more text", " ", navIcons.arrowRight] })] }));
56
+ }
57
+ // ============================================================================
58
+ // MAIN COMPONENT
59
+ // ============================================================================
60
+ export function FeaturePromptScreen({ isVisible, onComplete, onBack, hasFocus, dimensions, }) {
61
+ const [inputValue, setInputValue] = useState("");
62
+ const [showError, setShowError] = useState(false);
63
+ const colors = useThemeColors();
64
+ const isValid = inputValue.length >= MIN_CHARS;
65
+ const handleSubmit = useCallback(() => {
66
+ if (isValid) {
67
+ onComplete(inputValue.trim());
68
+ }
69
+ else {
70
+ setShowError(true);
71
+ }
72
+ }, [inputValue, isValid, onComplete]);
73
+ const handleBack = useCallback(() => {
74
+ if (onBack) {
75
+ onBack();
76
+ }
77
+ }, [onBack]);
78
+ // Handle keyboard input
79
+ useInput((input, key) => {
80
+ if (!hasFocus || !isVisible)
81
+ return;
82
+ // Enter to submit
83
+ if (key.return) {
84
+ handleSubmit();
85
+ return;
86
+ }
87
+ // Escape to go back
88
+ if (key.escape) {
89
+ handleBack();
90
+ return;
91
+ }
92
+ // Backspace/Delete to remove characters
93
+ if (key.backspace || key.delete) {
94
+ setInputValue((prev) => prev.slice(0, -1));
95
+ setShowError(false);
96
+ return;
97
+ }
98
+ // Printable characters (ignore control keys)
99
+ if (input && !key.ctrl && !key.meta) {
100
+ setInputValue((prev) => prev + input);
101
+ setShowError(false);
102
+ }
103
+ }, { isActive: hasFocus && isVisible });
104
+ // Calculate box dimensions
105
+ const boxWidth = useMemo(() => {
106
+ if (dimensions?.width) {
107
+ return Math.min(70, dimensions.width - 4);
108
+ }
109
+ return 70;
110
+ }, [dimensions?.width]);
111
+ if (!isVisible) {
112
+ return null;
113
+ }
114
+ return (_jsxs(Box, { flexDirection: "column", alignItems: "center", justifyContent: "center", width: "100%", height: "100%", children: [_jsxs(Box, { flexDirection: "column", borderStyle: "double", borderColor: colors.primary, paddingX: 2, paddingY: 1, width: boxWidth, children: [_jsx(Box, { justifyContent: "center", marginBottom: 1, children: _jsxs(Text, { color: colors.secondary, bold: true, children: [decorChars.sparkle, " NEW FEATURE ", decorChars.sparkle] }) }), _jsx(Box, { justifyContent: "center", marginBottom: 2, children: _jsx(Text, { color: colors.primary, bold: true, children: "What feature do you want to build?" }) }), _jsx(Box, { flexDirection: "column", alignItems: "center", children: _jsx(InputDisplay, { value: inputValue, colors: colors, width: boxWidth }) }), _jsx(Box, { paddingX: 2, children: _jsx(ValidationMessage, { charCount: inputValue.length, colors: colors, showError: showError }) }), _jsx(NavigationHints, { colors: colors, canSubmit: isValid, hasBack: !!onBack })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, italic: true, children: "Be specific about what you want to achieve" }) })] }));
115
+ }
116
+ export default FeaturePromptScreen;
117
+ //# sourceMappingURL=FeaturePromptScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeaturePromptScreen.js","sourceRoot":"","sources":["../src/FeaturePromptScreen.tsx"],"names":[],"mappings":"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"}
@@ -16,10 +16,18 @@ export interface GameSelectorProps {
16
16
  onSelectGame: (gameId: string) => void;
17
17
  /** Callback when stats menu is requested */
18
18
  onOpenStats?: () => void;
19
+ /** Whether games are enabled (unlocked after loop start) */
20
+ gamesEnabled?: boolean;
21
+ /** Whether a loop is currently active */
22
+ hasActiveLoop?: boolean;
23
+ /** Callback when Start New Loop is selected */
24
+ onStartNewLoop?: () => void;
25
+ /** Callback when View Current Loop is selected */
26
+ onViewCurrentLoop?: () => void;
19
27
  }
20
28
  /**
21
29
  * Game selector menu component
22
30
  */
23
- export declare function GameSelector({ games, hasFocus, dimensions, onSelectGame, onOpenStats, }: GameSelectorProps): import("react/jsx-runtime").JSX.Element;
31
+ export declare function GameSelector({ games, hasFocus, dimensions, onSelectGame, onOpenStats, gamesEnabled, hasActiveLoop, onStartNewLoop, onViewCurrentLoop, }: GameSelectorProps): import("react/jsx-runtime").JSX.Element;
24
32
  export default GameSelector;
25
33
  //# sourceMappingURL=GameSelector.d.ts.map