popeye-cli 1.0.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 (209) hide show
  1. package/.env.example +25 -0
  2. package/.prettierrc +8 -0
  3. package/README.md +320 -0
  4. package/dist/adapters/claude.d.ts +82 -0
  5. package/dist/adapters/claude.d.ts.map +1 -0
  6. package/dist/adapters/claude.js +230 -0
  7. package/dist/adapters/claude.js.map +1 -0
  8. package/dist/adapters/openai.d.ts +48 -0
  9. package/dist/adapters/openai.d.ts.map +1 -0
  10. package/dist/adapters/openai.js +257 -0
  11. package/dist/adapters/openai.js.map +1 -0
  12. package/dist/auth/claude.d.ts +44 -0
  13. package/dist/auth/claude.d.ts.map +1 -0
  14. package/dist/auth/claude.js +139 -0
  15. package/dist/auth/claude.js.map +1 -0
  16. package/dist/auth/index.d.ts +61 -0
  17. package/dist/auth/index.d.ts.map +1 -0
  18. package/dist/auth/index.js +141 -0
  19. package/dist/auth/index.js.map +1 -0
  20. package/dist/auth/keychain.d.ts +66 -0
  21. package/dist/auth/keychain.d.ts.map +1 -0
  22. package/dist/auth/keychain.js +125 -0
  23. package/dist/auth/keychain.js.map +1 -0
  24. package/dist/auth/openai-entry.d.ts +9 -0
  25. package/dist/auth/openai-entry.d.ts.map +1 -0
  26. package/dist/auth/openai-entry.js +410 -0
  27. package/dist/auth/openai-entry.js.map +1 -0
  28. package/dist/auth/openai.d.ts +71 -0
  29. package/dist/auth/openai.d.ts.map +1 -0
  30. package/dist/auth/openai.js +212 -0
  31. package/dist/auth/openai.js.map +1 -0
  32. package/dist/auth/server.d.ts +32 -0
  33. package/dist/auth/server.d.ts.map +1 -0
  34. package/dist/auth/server.js +213 -0
  35. package/dist/auth/server.js.map +1 -0
  36. package/dist/cli/commands/auth.d.ts +10 -0
  37. package/dist/cli/commands/auth.d.ts.map +1 -0
  38. package/dist/cli/commands/auth.js +162 -0
  39. package/dist/cli/commands/auth.js.map +1 -0
  40. package/dist/cli/commands/config.d.ts +10 -0
  41. package/dist/cli/commands/config.d.ts.map +1 -0
  42. package/dist/cli/commands/config.js +215 -0
  43. package/dist/cli/commands/config.js.map +1 -0
  44. package/dist/cli/commands/create.d.ts +10 -0
  45. package/dist/cli/commands/create.d.ts.map +1 -0
  46. package/dist/cli/commands/create.js +240 -0
  47. package/dist/cli/commands/create.js.map +1 -0
  48. package/dist/cli/commands/index.d.ts +10 -0
  49. package/dist/cli/commands/index.d.ts.map +1 -0
  50. package/dist/cli/commands/index.js +10 -0
  51. package/dist/cli/commands/index.js.map +1 -0
  52. package/dist/cli/commands/resume.d.ts +18 -0
  53. package/dist/cli/commands/resume.d.ts.map +1 -0
  54. package/dist/cli/commands/resume.js +241 -0
  55. package/dist/cli/commands/resume.js.map +1 -0
  56. package/dist/cli/commands/status.d.ts +18 -0
  57. package/dist/cli/commands/status.d.ts.map +1 -0
  58. package/dist/cli/commands/status.js +154 -0
  59. package/dist/cli/commands/status.js.map +1 -0
  60. package/dist/cli/index.d.ts +17 -0
  61. package/dist/cli/index.d.ts.map +1 -0
  62. package/dist/cli/index.js +71 -0
  63. package/dist/cli/index.js.map +1 -0
  64. package/dist/cli/interactive.d.ts +9 -0
  65. package/dist/cli/interactive.d.ts.map +1 -0
  66. package/dist/cli/interactive.js +330 -0
  67. package/dist/cli/interactive.js.map +1 -0
  68. package/dist/cli/output.d.ts +182 -0
  69. package/dist/cli/output.d.ts.map +1 -0
  70. package/dist/cli/output.js +355 -0
  71. package/dist/cli/output.js.map +1 -0
  72. package/dist/config/defaults.d.ts +57 -0
  73. package/dist/config/defaults.d.ts.map +1 -0
  74. package/dist/config/defaults.js +103 -0
  75. package/dist/config/defaults.js.map +1 -0
  76. package/dist/config/index.d.ts +138 -0
  77. package/dist/config/index.d.ts.map +1 -0
  78. package/dist/config/index.js +244 -0
  79. package/dist/config/index.js.map +1 -0
  80. package/dist/config/schema.d.ts +220 -0
  81. package/dist/config/schema.d.ts.map +1 -0
  82. package/dist/config/schema.js +141 -0
  83. package/dist/config/schema.js.map +1 -0
  84. package/dist/generators/index.d.ts +101 -0
  85. package/dist/generators/index.d.ts.map +1 -0
  86. package/dist/generators/index.js +200 -0
  87. package/dist/generators/index.js.map +1 -0
  88. package/dist/generators/python.d.ts +48 -0
  89. package/dist/generators/python.d.ts.map +1 -0
  90. package/dist/generators/python.js +262 -0
  91. package/dist/generators/python.js.map +1 -0
  92. package/dist/generators/templates/index.d.ts +6 -0
  93. package/dist/generators/templates/index.d.ts.map +1 -0
  94. package/dist/generators/templates/index.js +6 -0
  95. package/dist/generators/templates/index.js.map +1 -0
  96. package/dist/generators/templates/python.d.ts +53 -0
  97. package/dist/generators/templates/python.d.ts.map +1 -0
  98. package/dist/generators/templates/python.js +454 -0
  99. package/dist/generators/templates/python.js.map +1 -0
  100. package/dist/generators/templates/typescript.d.ts +53 -0
  101. package/dist/generators/templates/typescript.d.ts.map +1 -0
  102. package/dist/generators/templates/typescript.js +394 -0
  103. package/dist/generators/templates/typescript.js.map +1 -0
  104. package/dist/generators/typescript.d.ts +64 -0
  105. package/dist/generators/typescript.d.ts.map +1 -0
  106. package/dist/generators/typescript.js +271 -0
  107. package/dist/generators/typescript.js.map +1 -0
  108. package/dist/index.d.ts +7 -0
  109. package/dist/index.d.ts.map +1 -0
  110. package/dist/index.js +12 -0
  111. package/dist/index.js.map +1 -0
  112. package/dist/state/index.d.ts +168 -0
  113. package/dist/state/index.d.ts.map +1 -0
  114. package/dist/state/index.js +338 -0
  115. package/dist/state/index.js.map +1 -0
  116. package/dist/state/persistence.d.ts +91 -0
  117. package/dist/state/persistence.d.ts.map +1 -0
  118. package/dist/state/persistence.js +201 -0
  119. package/dist/state/persistence.js.map +1 -0
  120. package/dist/types/cli.d.ts +132 -0
  121. package/dist/types/cli.d.ts.map +1 -0
  122. package/dist/types/cli.js +17 -0
  123. package/dist/types/cli.js.map +1 -0
  124. package/dist/types/consensus.d.ts +111 -0
  125. package/dist/types/consensus.d.ts.map +1 -0
  126. package/dist/types/consensus.js +29 -0
  127. package/dist/types/consensus.js.map +1 -0
  128. package/dist/types/index.d.ts +9 -0
  129. package/dist/types/index.d.ts.map +1 -0
  130. package/dist/types/index.js +13 -0
  131. package/dist/types/index.js.map +1 -0
  132. package/dist/types/project.d.ts +73 -0
  133. package/dist/types/project.d.ts.map +1 -0
  134. package/dist/types/project.js +55 -0
  135. package/dist/types/project.js.map +1 -0
  136. package/dist/types/workflow.d.ts +236 -0
  137. package/dist/types/workflow.d.ts.map +1 -0
  138. package/dist/types/workflow.js +74 -0
  139. package/dist/types/workflow.js.map +1 -0
  140. package/dist/workflow/consensus.d.ts +89 -0
  141. package/dist/workflow/consensus.d.ts.map +1 -0
  142. package/dist/workflow/consensus.js +220 -0
  143. package/dist/workflow/consensus.js.map +1 -0
  144. package/dist/workflow/execution-mode.d.ts +82 -0
  145. package/dist/workflow/execution-mode.d.ts.map +1 -0
  146. package/dist/workflow/execution-mode.js +346 -0
  147. package/dist/workflow/execution-mode.js.map +1 -0
  148. package/dist/workflow/index.d.ts +110 -0
  149. package/dist/workflow/index.d.ts.map +1 -0
  150. package/dist/workflow/index.js +283 -0
  151. package/dist/workflow/index.js.map +1 -0
  152. package/dist/workflow/plan-mode.d.ts +83 -0
  153. package/dist/workflow/plan-mode.d.ts.map +1 -0
  154. package/dist/workflow/plan-mode.js +241 -0
  155. package/dist/workflow/plan-mode.js.map +1 -0
  156. package/dist/workflow/test-runner.d.ts +87 -0
  157. package/dist/workflow/test-runner.d.ts.map +1 -0
  158. package/dist/workflow/test-runner.js +273 -0
  159. package/dist/workflow/test-runner.js.map +1 -0
  160. package/eslint.config.js +25 -0
  161. package/package.json +66 -0
  162. package/src/adapters/claude.ts +298 -0
  163. package/src/adapters/openai.ts +300 -0
  164. package/src/auth/claude.ts +166 -0
  165. package/src/auth/index.ts +171 -0
  166. package/src/auth/keychain.ts +138 -0
  167. package/src/auth/openai-entry.ts +410 -0
  168. package/src/auth/openai.ts +260 -0
  169. package/src/auth/server.ts +252 -0
  170. package/src/cli/commands/auth.ts +194 -0
  171. package/src/cli/commands/config.ts +241 -0
  172. package/src/cli/commands/create.ts +308 -0
  173. package/src/cli/commands/index.ts +10 -0
  174. package/src/cli/commands/resume.ts +304 -0
  175. package/src/cli/commands/status.ts +189 -0
  176. package/src/cli/index.ts +90 -0
  177. package/src/cli/interactive.ts +418 -0
  178. package/src/cli/output.ts +410 -0
  179. package/src/config/defaults.ts +114 -0
  180. package/src/config/index.ts +315 -0
  181. package/src/config/schema.ts +164 -0
  182. package/src/generators/index.ts +251 -0
  183. package/src/generators/python.ts +318 -0
  184. package/src/generators/templates/index.ts +6 -0
  185. package/src/generators/templates/python.ts +465 -0
  186. package/src/generators/templates/typescript.ts +417 -0
  187. package/src/generators/typescript.ts +340 -0
  188. package/src/index.ts +13 -0
  189. package/src/state/index.ts +454 -0
  190. package/src/state/persistence.ts +230 -0
  191. package/src/types/cli.ts +146 -0
  192. package/src/types/consensus.ts +116 -0
  193. package/src/types/index.ts +64 -0
  194. package/src/types/project.ts +85 -0
  195. package/src/types/workflow.ts +149 -0
  196. package/src/workflow/consensus.ts +299 -0
  197. package/src/workflow/execution-mode.ts +517 -0
  198. package/src/workflow/index.ts +396 -0
  199. package/src/workflow/plan-mode.ts +356 -0
  200. package/src/workflow/test-runner.ts +345 -0
  201. package/tests/adapters/openai.test.ts +145 -0
  202. package/tests/config/config.test.ts +208 -0
  203. package/tests/generators/generators.test.ts +185 -0
  204. package/tests/types/consensus.test.ts +152 -0
  205. package/tests/types/project.test.ts +134 -0
  206. package/tests/workflow/consensus.test.ts +221 -0
  207. package/tests/workflow/test-runner.test.ts +214 -0
  208. package/tsconfig.json +25 -0
  209. package/vitest.config.ts +22 -0
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Status command
3
+ * Shows project status and progress
4
+ */
5
+ import { Command } from 'commander';
6
+ import path from 'node:path';
7
+ import { getWorkflowStatus, getWorkflowSummary, validateReadyForExecution, } from '../../workflow/index.js';
8
+ import { printHeader, printSection, printSuccess, printError, printWarning, printInfo, printKeyValue, printProgress, printProjectState, startSpinner, succeedSpinner, failSpinner, } from '../output.js';
9
+ /**
10
+ * Create the status command
11
+ */
12
+ export function createStatusCommand() {
13
+ const status = new Command('status')
14
+ .description('Show project status')
15
+ .argument('[directory]', 'Project directory', '.')
16
+ .option('-v, --verbose', 'Show detailed status')
17
+ .option('--json', 'Output as JSON')
18
+ .action(async (directory, options) => {
19
+ const projectDir = path.resolve(directory);
20
+ startSpinner('Loading project status...');
21
+ try {
22
+ const status = await getWorkflowStatus(projectDir);
23
+ if (!status.exists) {
24
+ failSpinner('No project found');
25
+ printInfo(`No Popeye project found at: ${projectDir}`);
26
+ printInfo('Run "popeye-cli create <idea>" to create a new project');
27
+ process.exit(1);
28
+ }
29
+ succeedSpinner('Status loaded');
30
+ // JSON output
31
+ if (options.json) {
32
+ console.log(JSON.stringify({ status, progress: status.progress }, null, 2));
33
+ return;
34
+ }
35
+ // Verbose output
36
+ if (options.verbose && status.state) {
37
+ printProjectState(status.state);
38
+ return;
39
+ }
40
+ // Standard output
41
+ const state = status.state;
42
+ const progress = status.progress;
43
+ printHeader(`Project: ${state.name}`);
44
+ printSection('Status');
45
+ printKeyValue('Phase', state.phase);
46
+ printKeyValue('Status', state.status);
47
+ printKeyValue('Language', state.language);
48
+ printSection('Progress');
49
+ printKeyValue('Milestones', `${progress.completedMilestones}/${progress.totalMilestones}`);
50
+ printKeyValue('Tasks', `${progress.completedTasks}/${progress.totalTasks}`);
51
+ printProgress(progress.completedTasks, progress.totalTasks);
52
+ // Show current work
53
+ if (state.currentMilestone) {
54
+ const milestone = state.milestones.find((m) => m.id === state.currentMilestone);
55
+ if (milestone) {
56
+ printSection('Current Work');
57
+ printKeyValue('Milestone', milestone.name);
58
+ if (state.currentTask) {
59
+ const task = milestone.tasks.find((t) => t.id === state.currentTask);
60
+ if (task) {
61
+ printKeyValue('Task', task.name);
62
+ }
63
+ }
64
+ }
65
+ }
66
+ // Show consensus info
67
+ if (state.consensusHistory && state.consensusHistory.length > 0) {
68
+ const lastConsensus = state.consensusHistory[state.consensusHistory.length - 1];
69
+ printSection('Consensus');
70
+ printKeyValue('Last Score', `${lastConsensus.result.score}%`);
71
+ printKeyValue('Iterations', state.consensusHistory.length.toString());
72
+ }
73
+ // Show errors
74
+ if (state.error) {
75
+ printSection('Error');
76
+ printError(state.error);
77
+ }
78
+ // Show next steps
79
+ console.log();
80
+ if (state.status === 'complete') {
81
+ printSuccess('Project is complete!');
82
+ }
83
+ else if (state.status === 'failed') {
84
+ printWarning('Project failed. Run "popeye-cli resume" to retry.');
85
+ }
86
+ else if (state.phase === 'plan') {
87
+ printInfo('Run "popeye-cli resume" to continue planning.');
88
+ }
89
+ else {
90
+ printInfo('Run "popeye-cli resume" to continue execution.');
91
+ }
92
+ }
93
+ catch (error) {
94
+ failSpinner('Failed to load status');
95
+ printError(error instanceof Error ? error.message : 'Unknown error');
96
+ process.exit(1);
97
+ }
98
+ });
99
+ return status;
100
+ }
101
+ /**
102
+ * Create the validate command
103
+ */
104
+ export function createValidateCommand() {
105
+ const validate = new Command('validate')
106
+ .description('Validate project is ready for execution')
107
+ .argument('[directory]', 'Project directory', '.')
108
+ .action(async (directory) => {
109
+ const projectDir = path.resolve(directory);
110
+ startSpinner('Validating project...');
111
+ try {
112
+ const result = await validateReadyForExecution(projectDir);
113
+ if (result.ready) {
114
+ succeedSpinner('Project is valid and ready for execution');
115
+ printSuccess('All validation checks passed');
116
+ }
117
+ else {
118
+ failSpinner('Project validation failed');
119
+ printSection('Issues Found');
120
+ for (const issue of result.issues) {
121
+ printWarning(issue);
122
+ }
123
+ process.exit(1);
124
+ }
125
+ }
126
+ catch (error) {
127
+ failSpinner('Validation failed');
128
+ printError(error instanceof Error ? error.message : 'Unknown error');
129
+ process.exit(1);
130
+ }
131
+ });
132
+ return validate;
133
+ }
134
+ /**
135
+ * Create the summary command
136
+ */
137
+ export function createSummaryCommand() {
138
+ const summary = new Command('summary')
139
+ .description('Show detailed project summary')
140
+ .argument('[directory]', 'Project directory', '.')
141
+ .action(async (directory) => {
142
+ const projectDir = path.resolve(directory);
143
+ try {
144
+ const summaryText = await getWorkflowSummary(projectDir);
145
+ console.log(summaryText);
146
+ }
147
+ catch (error) {
148
+ printError(error instanceof Error ? error.message : 'Unknown error');
149
+ process.exit(1);
150
+ }
151
+ });
152
+ return summary;
153
+ }
154
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * CLI module index
3
+ * Main entry point for the CLI interface
4
+ */
5
+ import { Command } from 'commander';
6
+ export * from './output.js';
7
+ export * from './interactive.js';
8
+ export * from './commands/index.js';
9
+ /**
10
+ * Create the main CLI program
11
+ */
12
+ export declare function createProgram(): Command;
13
+ /**
14
+ * Run the CLI
15
+ */
16
+ export declare function runCLI(args?: string[]): Promise<void>;
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AAOpC;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CA0CvC;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,IAAI,GAAE,MAAM,EAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CASzE"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * CLI module index
3
+ * Main entry point for the CLI interface
4
+ */
5
+ import { Command } from 'commander';
6
+ import { createAuthCommand, createCreateCommand, createStatusCommand, createValidateCommand, createSummaryCommand, createResumeCommand, createResetCommand, createCancelCommand, createConfigCommand, } from './commands/index.js';
7
+ import { startInteractiveMode } from './interactive.js';
8
+ import { printHeader, printError, theme } from './output.js';
9
+ // Re-export
10
+ export * from './output.js';
11
+ export * from './interactive.js';
12
+ export * from './commands/index.js';
13
+ /**
14
+ * Package version (will be replaced during build)
15
+ */
16
+ const VERSION = '1.0.0';
17
+ /**
18
+ * Create the main CLI program
19
+ */
20
+ export function createProgram() {
21
+ const program = new Command();
22
+ program
23
+ .name('popeye-cli')
24
+ .description('Fully autonomous code generation powered by Claude CLI and OpenAI consensus')
25
+ .version(VERSION)
26
+ .option('-v, --verbose', 'Enable verbose output')
27
+ .option('--no-color', 'Disable colored output');
28
+ // Add commands
29
+ program.addCommand(createAuthCommand());
30
+ program.addCommand(createCreateCommand());
31
+ program.addCommand(createStatusCommand());
32
+ program.addCommand(createValidateCommand());
33
+ program.addCommand(createSummaryCommand());
34
+ program.addCommand(createResumeCommand());
35
+ program.addCommand(createResetCommand());
36
+ program.addCommand(createCancelCommand());
37
+ program.addCommand(createConfigCommand());
38
+ // Interactive mode command
39
+ program
40
+ .command('interactive')
41
+ .alias('i')
42
+ .description('Start interactive mode')
43
+ .action(async () => {
44
+ await startInteractiveMode();
45
+ });
46
+ // Default action (no command specified)
47
+ program.action(async (_options, command) => {
48
+ // If no command specified and no arguments, show help
49
+ if (command.args.length === 0) {
50
+ printHeader('Popeye CLI');
51
+ console.log(theme.secondary('Autonomous code generation powered by AI consensus'));
52
+ console.log();
53
+ program.outputHelp();
54
+ }
55
+ });
56
+ return program;
57
+ }
58
+ /**
59
+ * Run the CLI
60
+ */
61
+ export async function runCLI(args = process.argv) {
62
+ const program = createProgram();
63
+ try {
64
+ await program.parseAsync(args);
65
+ }
66
+ catch (error) {
67
+ printError(error instanceof Error ? error.message : 'Unknown error');
68
+ process.exit(1);
69
+ }
70
+ }
71
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Interactive mode
3
+ * REPL-style interface for Popeye CLI
4
+ */
5
+ /**
6
+ * Start interactive mode
7
+ */
8
+ export declare function startInteractiveMode(): Promise<void>;
9
+ //# sourceMappingURL=interactive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/cli/interactive.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA+FH;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAsE1D"}
@@ -0,0 +1,330 @@
1
+ /**
2
+ * Interactive mode
3
+ * REPL-style interface for Popeye CLI
4
+ */
5
+ import * as readline from 'node:readline';
6
+ import { getAuthStatusForDisplay } from '../auth/index.js';
7
+ import { runWorkflow, resumeWorkflow, getWorkflowStatus, getWorkflowSummary, } from '../workflow/index.js';
8
+ import { generateProject } from '../generators/index.js';
9
+ import { loadConfig } from '../config/index.js';
10
+ import { printHeader, printSection, printSuccess, printError, printWarning, printInfo, printKeyValue, printAuthStatus, startSpinner, succeedSpinner, failSpinner, stopSpinner, clearConsole, theme, } from './output.js';
11
+ /**
12
+ * Available slash commands
13
+ */
14
+ const commands = {
15
+ '/help': {
16
+ description: 'Show available commands',
17
+ handler: handleHelp,
18
+ },
19
+ '/status': {
20
+ description: 'Show current project status',
21
+ handler: handleStatus,
22
+ },
23
+ '/auth': {
24
+ description: 'Check authentication status',
25
+ handler: handleAuth,
26
+ },
27
+ '/config': {
28
+ description: 'Show current configuration',
29
+ handler: handleConfig,
30
+ },
31
+ '/language': {
32
+ description: 'Set output language (python/typescript)',
33
+ handler: handleLanguage,
34
+ },
35
+ '/model': {
36
+ description: 'Set OpenAI model',
37
+ handler: handleModel,
38
+ },
39
+ '/project': {
40
+ description: 'Set project directory',
41
+ handler: handleProject,
42
+ },
43
+ '/resume': {
44
+ description: 'Resume current project workflow',
45
+ handler: handleResume,
46
+ },
47
+ '/clear': {
48
+ description: 'Clear the screen',
49
+ handler: handleClear,
50
+ },
51
+ '/exit': {
52
+ description: 'Exit interactive mode',
53
+ handler: handleExit,
54
+ },
55
+ '/quit': {
56
+ description: 'Exit interactive mode',
57
+ handler: handleExit,
58
+ },
59
+ };
60
+ /**
61
+ * Start interactive mode
62
+ */
63
+ export async function startInteractiveMode() {
64
+ clearConsole();
65
+ printHeader('Popeye CLI - Interactive Mode');
66
+ printInfo('Type your project idea or use /help for commands');
67
+ console.log();
68
+ // Initialize state
69
+ const config = await loadConfig();
70
+ const state = {
71
+ projectDir: process.cwd(),
72
+ language: config.project.default_language,
73
+ model: config.apis.openai.model,
74
+ authenticated: false,
75
+ };
76
+ // Check authentication
77
+ const authStatus = await getAuthStatusForDisplay();
78
+ state.authenticated = authStatus.claude.authenticated && authStatus.openai.authenticated;
79
+ if (!state.authenticated) {
80
+ printWarning('Not fully authenticated. Run /auth to check status.');
81
+ console.log();
82
+ }
83
+ // Create readline interface
84
+ const rl = readline.createInterface({
85
+ input: process.stdin,
86
+ output: process.stdout,
87
+ prompt: theme.primary('popeye> '),
88
+ });
89
+ rl.prompt();
90
+ rl.on('line', async (line) => {
91
+ const input = line.trim();
92
+ if (!input) {
93
+ rl.prompt();
94
+ return;
95
+ }
96
+ try {
97
+ if (input.startsWith('/')) {
98
+ // Handle command
99
+ const [command, ...args] = input.split(/\s+/);
100
+ const cmd = commands[command.toLowerCase()];
101
+ if (cmd) {
102
+ await cmd.handler(args, state);
103
+ }
104
+ else {
105
+ printError(`Unknown command: ${command}. Use /help for available commands.`);
106
+ }
107
+ }
108
+ else {
109
+ // Treat as project idea
110
+ await handleIdea(input, state);
111
+ }
112
+ }
113
+ catch (error) {
114
+ printError(error instanceof Error ? error.message : 'Unknown error');
115
+ }
116
+ console.log();
117
+ rl.prompt();
118
+ });
119
+ rl.on('close', () => {
120
+ console.log();
121
+ printInfo('Goodbye!');
122
+ process.exit(0);
123
+ });
124
+ }
125
+ /**
126
+ * Handle /help command
127
+ */
128
+ async function handleHelp(_args, _state) {
129
+ printSection('Available Commands');
130
+ for (const [cmd, info] of Object.entries(commands)) {
131
+ console.log(` ${theme.primary(cmd.padEnd(15))} ${info.description}`);
132
+ }
133
+ console.log();
134
+ printInfo('Or type a project idea to start creating');
135
+ }
136
+ /**
137
+ * Handle /status command
138
+ */
139
+ async function handleStatus(_args, state) {
140
+ if (!state.projectDir) {
141
+ printInfo('No project directory set. Use /project <dir> to set one.');
142
+ return;
143
+ }
144
+ const status = await getWorkflowStatus(state.projectDir);
145
+ if (!status.exists) {
146
+ printInfo('No project found in current directory');
147
+ printKeyValue('Directory', state.projectDir);
148
+ printKeyValue('Language', state.language);
149
+ printKeyValue('Model', state.model);
150
+ return;
151
+ }
152
+ const summary = await getWorkflowSummary(state.projectDir);
153
+ console.log(summary);
154
+ }
155
+ /**
156
+ * Handle /auth command
157
+ */
158
+ async function handleAuth(_args, state) {
159
+ const status = await getAuthStatusForDisplay();
160
+ printAuthStatus(status);
161
+ state.authenticated = status.claude.authenticated && status.openai.authenticated;
162
+ if (!state.authenticated) {
163
+ console.log();
164
+ printInfo('Run "popeye-cli auth login" to authenticate');
165
+ }
166
+ }
167
+ /**
168
+ * Handle /config command
169
+ */
170
+ async function handleConfig(_args, state) {
171
+ const config = await loadConfig();
172
+ printSection('Current Session');
173
+ printKeyValue('Project Dir', state.projectDir || 'Not set');
174
+ printKeyValue('Language', state.language);
175
+ printKeyValue('Model', state.model);
176
+ printKeyValue('Authenticated', state.authenticated ? 'Yes' : 'No');
177
+ printSection('Configuration');
178
+ printKeyValue('Threshold', `${config.consensus.threshold}%`);
179
+ printKeyValue('Max Iterations', config.consensus.max_disagreements.toString());
180
+ }
181
+ /**
182
+ * Handle /language command
183
+ */
184
+ async function handleLanguage(args, state) {
185
+ if (args.length === 0) {
186
+ printKeyValue('Current language', state.language);
187
+ printInfo('Use /language <python|typescript> to change');
188
+ return;
189
+ }
190
+ const lang = args[0].toLowerCase();
191
+ if (!['python', 'typescript'].includes(lang)) {
192
+ printError('Invalid language. Use: python or typescript');
193
+ return;
194
+ }
195
+ state.language = lang;
196
+ printSuccess(`Language set to: ${lang}`);
197
+ }
198
+ /**
199
+ * Handle /model command
200
+ */
201
+ async function handleModel(args, state) {
202
+ const validModels = ['gpt-4o', 'gpt-4o-mini', 'gpt-4-turbo', 'o1-preview', 'o1-mini'];
203
+ if (args.length === 0) {
204
+ printKeyValue('Current model', state.model);
205
+ printInfo(`Use /model <${validModels.join('|')}> to change`);
206
+ return;
207
+ }
208
+ const model = args[0];
209
+ if (!validModels.includes(model)) {
210
+ printError(`Invalid model. Use one of: ${validModels.join(', ')}`);
211
+ return;
212
+ }
213
+ state.model = model;
214
+ printSuccess(`Model set to: ${model}`);
215
+ }
216
+ /**
217
+ * Handle /project command
218
+ */
219
+ async function handleProject(args, state) {
220
+ const path = await import('node:path');
221
+ if (args.length === 0) {
222
+ printKeyValue('Current directory', state.projectDir || 'Not set');
223
+ printInfo('Use /project <directory> to change');
224
+ return;
225
+ }
226
+ const dir = path.resolve(args[0]);
227
+ state.projectDir = dir;
228
+ printSuccess(`Project directory set to: ${dir}`);
229
+ }
230
+ /**
231
+ * Handle /resume command
232
+ */
233
+ async function handleResume(_args, state) {
234
+ if (!state.projectDir) {
235
+ printError('No project directory set. Use /project <dir> first.');
236
+ return;
237
+ }
238
+ if (!state.authenticated) {
239
+ printError('Not authenticated. Run "popeye-cli auth login" first.');
240
+ return;
241
+ }
242
+ const status = await getWorkflowStatus(state.projectDir);
243
+ if (!status.exists) {
244
+ printError('No project found to resume');
245
+ return;
246
+ }
247
+ printInfo('Resuming workflow...');
248
+ console.log();
249
+ const result = await resumeWorkflow(state.projectDir, {
250
+ onProgress: (phase, message) => {
251
+ console.log(` [${phase}] ${message}`);
252
+ },
253
+ });
254
+ if (result.success) {
255
+ printSuccess('Workflow completed!');
256
+ }
257
+ else {
258
+ printError(result.error || 'Workflow failed');
259
+ }
260
+ }
261
+ /**
262
+ * Handle /clear command
263
+ */
264
+ async function handleClear(_args, _state) {
265
+ clearConsole();
266
+ }
267
+ /**
268
+ * Handle /exit command
269
+ */
270
+ async function handleExit(_args, _state) {
271
+ printInfo('Goodbye!');
272
+ process.exit(0);
273
+ }
274
+ /**
275
+ * Handle project idea input
276
+ */
277
+ async function handleIdea(idea, state) {
278
+ if (!state.authenticated) {
279
+ printError('Not authenticated. Run /auth to check status.');
280
+ return;
281
+ }
282
+ printSection('Creating Project');
283
+ printKeyValue('Idea', idea);
284
+ printKeyValue('Language', state.language);
285
+ printKeyValue('Model', state.model);
286
+ console.log();
287
+ // Generate project name
288
+ const projectName = idea
289
+ .toLowerCase()
290
+ .replace(/[^a-z0-9\s]/g, '')
291
+ .split(/\s+/)
292
+ .slice(0, 3)
293
+ .join('-')
294
+ .substring(0, 30) || 'my-project';
295
+ const path = await import('node:path');
296
+ const projectDir = path.join(state.projectDir || process.cwd(), projectName);
297
+ const spec = {
298
+ idea,
299
+ name: projectName,
300
+ language: state.language,
301
+ openaiModel: state.model,
302
+ outputDir: state.projectDir || process.cwd(),
303
+ };
304
+ // Generate scaffold
305
+ startSpinner('Creating project structure...');
306
+ const scaffoldResult = await generateProject(spec, state.projectDir || process.cwd());
307
+ if (!scaffoldResult.success) {
308
+ failSpinner('Scaffolding failed');
309
+ printError(scaffoldResult.error || 'Failed to create project');
310
+ return;
311
+ }
312
+ succeedSpinner(`Created ${scaffoldResult.filesCreated.length} files`);
313
+ // Run workflow
314
+ const workflowResult = await runWorkflow(spec, {
315
+ projectDir,
316
+ onProgress: (phase, message) => {
317
+ console.log(` [${phase}] ${message}`);
318
+ },
319
+ });
320
+ stopSpinner();
321
+ if (workflowResult.success) {
322
+ printSuccess('Project created successfully!');
323
+ printKeyValue('Location', projectDir);
324
+ state.projectDir = projectDir;
325
+ }
326
+ else {
327
+ printError(workflowResult.error || 'Workflow failed');
328
+ }
329
+ }
330
+ //# sourceMappingURL=interactive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/cli/interactive.ts"],"names":[],"mappings":"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"}