popeye-cli 1.1.0 → 1.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 (137) hide show
  1. package/.env.example +24 -1
  2. package/CONTRIBUTING.md +275 -0
  3. package/OPEN_SOURCE_MANIFESTO.md +172 -0
  4. package/README.md +340 -27
  5. package/dist/adapters/claude.d.ts +5 -2
  6. package/dist/adapters/claude.d.ts.map +1 -1
  7. package/dist/adapters/claude.js +239 -19
  8. package/dist/adapters/claude.js.map +1 -1
  9. package/dist/adapters/grok.d.ts +73 -0
  10. package/dist/adapters/grok.d.ts.map +1 -0
  11. package/dist/adapters/grok.js +430 -0
  12. package/dist/adapters/grok.js.map +1 -0
  13. package/dist/adapters/openai.d.ts +1 -1
  14. package/dist/adapters/openai.d.ts.map +1 -1
  15. package/dist/adapters/openai.js +6 -1
  16. package/dist/adapters/openai.js.map +1 -1
  17. package/dist/auth/grok.d.ts +73 -0
  18. package/dist/auth/grok.d.ts.map +1 -0
  19. package/dist/auth/grok.js +211 -0
  20. package/dist/auth/grok.js.map +1 -0
  21. package/dist/auth/index.d.ts +9 -6
  22. package/dist/auth/index.d.ts.map +1 -1
  23. package/dist/auth/index.js +23 -6
  24. package/dist/auth/index.js.map +1 -1
  25. package/dist/cli/commands/auth.d.ts +1 -1
  26. package/dist/cli/commands/auth.d.ts.map +1 -1
  27. package/dist/cli/commands/auth.js +79 -8
  28. package/dist/cli/commands/auth.js.map +1 -1
  29. package/dist/cli/commands/create.d.ts.map +1 -1
  30. package/dist/cli/commands/create.js +15 -4
  31. package/dist/cli/commands/create.js.map +1 -1
  32. package/dist/cli/interactive.d.ts.map +1 -1
  33. package/dist/cli/interactive.js +374 -35
  34. package/dist/cli/interactive.js.map +1 -1
  35. package/dist/config/defaults.d.ts +3 -0
  36. package/dist/config/defaults.d.ts.map +1 -1
  37. package/dist/config/defaults.js +9 -0
  38. package/dist/config/defaults.js.map +1 -1
  39. package/dist/config/index.d.ts +9 -0
  40. package/dist/config/index.d.ts.map +1 -1
  41. package/dist/config/index.js +16 -3
  42. package/dist/config/index.js.map +1 -1
  43. package/dist/config/schema.d.ts +27 -0
  44. package/dist/config/schema.d.ts.map +1 -1
  45. package/dist/config/schema.js +24 -3
  46. package/dist/config/schema.js.map +1 -1
  47. package/dist/generators/fullstack.d.ts +32 -0
  48. package/dist/generators/fullstack.d.ts.map +1 -0
  49. package/dist/generators/fullstack.js +497 -0
  50. package/dist/generators/fullstack.js.map +1 -0
  51. package/dist/generators/index.d.ts +4 -3
  52. package/dist/generators/index.d.ts.map +1 -1
  53. package/dist/generators/index.js +15 -1
  54. package/dist/generators/index.js.map +1 -1
  55. package/dist/generators/python.d.ts +17 -1
  56. package/dist/generators/python.d.ts.map +1 -1
  57. package/dist/generators/python.js +34 -21
  58. package/dist/generators/python.js.map +1 -1
  59. package/dist/generators/templates/fullstack.d.ts +113 -0
  60. package/dist/generators/templates/fullstack.d.ts.map +1 -0
  61. package/dist/generators/templates/fullstack.js +1004 -0
  62. package/dist/generators/templates/fullstack.js.map +1 -0
  63. package/dist/generators/typescript.d.ts +19 -1
  64. package/dist/generators/typescript.d.ts.map +1 -1
  65. package/dist/generators/typescript.js +37 -21
  66. package/dist/generators/typescript.js.map +1 -1
  67. package/dist/types/cli.d.ts +4 -0
  68. package/dist/types/cli.d.ts.map +1 -1
  69. package/dist/types/cli.js.map +1 -1
  70. package/dist/types/consensus.d.ts +119 -2
  71. package/dist/types/consensus.d.ts.map +1 -1
  72. package/dist/types/consensus.js +12 -1
  73. package/dist/types/consensus.js.map +1 -1
  74. package/dist/types/project.d.ts +76 -0
  75. package/dist/types/project.d.ts.map +1 -1
  76. package/dist/types/project.js +1 -1
  77. package/dist/types/project.js.map +1 -1
  78. package/dist/types/workflow.d.ts +162 -16
  79. package/dist/types/workflow.d.ts.map +1 -1
  80. package/dist/types/workflow.js +24 -1
  81. package/dist/types/workflow.js.map +1 -1
  82. package/dist/workflow/consensus.d.ts +29 -3
  83. package/dist/workflow/consensus.d.ts.map +1 -1
  84. package/dist/workflow/consensus.js +334 -27
  85. package/dist/workflow/consensus.js.map +1 -1
  86. package/dist/workflow/milestone-workflow.js +2 -2
  87. package/dist/workflow/milestone-workflow.js.map +1 -1
  88. package/dist/workflow/plan-mode.d.ts +66 -2
  89. package/dist/workflow/plan-mode.d.ts.map +1 -1
  90. package/dist/workflow/plan-mode.js +187 -11
  91. package/dist/workflow/plan-mode.js.map +1 -1
  92. package/dist/workflow/plan-storage.d.ts +252 -8
  93. package/dist/workflow/plan-storage.d.ts.map +1 -1
  94. package/dist/workflow/plan-storage.js +580 -33
  95. package/dist/workflow/plan-storage.js.map +1 -1
  96. package/dist/workflow/project-verification.js +1 -1
  97. package/dist/workflow/project-verification.js.map +1 -1
  98. package/dist/workflow/task-workflow.d.ts.map +1 -1
  99. package/dist/workflow/task-workflow.js +4 -1
  100. package/dist/workflow/task-workflow.js.map +1 -1
  101. package/dist/workflow/test-runner.d.ts +8 -0
  102. package/dist/workflow/test-runner.d.ts.map +1 -1
  103. package/dist/workflow/test-runner.js +92 -0
  104. package/dist/workflow/test-runner.js.map +1 -1
  105. package/dist/workflow/workspace-manager.d.ts +342 -0
  106. package/dist/workflow/workspace-manager.d.ts.map +1 -0
  107. package/dist/workflow/workspace-manager.js +733 -0
  108. package/dist/workflow/workspace-manager.js.map +1 -0
  109. package/package.json +1 -1
  110. package/src/adapters/claude.ts +263 -24
  111. package/src/adapters/grok.ts +492 -0
  112. package/src/adapters/openai.ts +8 -2
  113. package/src/auth/grok.ts +255 -0
  114. package/src/auth/index.ts +27 -9
  115. package/src/cli/commands/auth.ts +89 -10
  116. package/src/cli/commands/create.ts +13 -4
  117. package/src/cli/interactive.ts +424 -34
  118. package/src/config/defaults.ts +9 -0
  119. package/src/config/index.ts +17 -3
  120. package/src/config/schema.ts +25 -3
  121. package/src/generators/fullstack.ts +551 -0
  122. package/src/generators/index.ts +25 -1
  123. package/src/generators/python.ts +65 -21
  124. package/src/generators/templates/fullstack.ts +1047 -0
  125. package/src/generators/typescript.ts +69 -21
  126. package/src/types/cli.ts +4 -0
  127. package/src/types/consensus.ts +135 -3
  128. package/src/types/project.ts +82 -1
  129. package/src/types/workflow.ts +56 -2
  130. package/src/workflow/consensus.ts +461 -31
  131. package/src/workflow/milestone-workflow.ts +2 -2
  132. package/src/workflow/plan-mode.ts +238 -10
  133. package/src/workflow/plan-storage.ts +835 -35
  134. package/src/workflow/project-verification.ts +1 -1
  135. package/src/workflow/task-workflow.ts +4 -1
  136. package/src/workflow/test-runner.ts +110 -0
  137. package/src/workflow/workspace-manager.ts +912 -0
package/.env.example CHANGED
@@ -5,14 +5,37 @@
5
5
  # Get your key from: https://platform.openai.com/api-keys
6
6
  POPEYE_OPENAI_KEY=
7
7
 
8
+ # Gemini API Key (optional - can also use keychain)
9
+ # Get your key from: https://aistudio.google.com/app/apikey
10
+ POPEYE_GEMINI_KEY=
11
+
12
+ # Grok API Key (optional - can also use keychain)
13
+ # Get your key from: https://console.x.ai/
14
+ POPEYE_GROK_KEY=
15
+
8
16
  # Default output language for generated projects
9
- # Options: python, typescript
17
+ # Options: python, typescript, fullstack
10
18
  POPEYE_DEFAULT_LANGUAGE=python
11
19
 
12
20
  # Default OpenAI model for consensus reviews
13
21
  # Options: gpt-4o, gpt-4o-mini, gpt-4-turbo, o1-preview, o1-mini
14
22
  POPEYE_OPENAI_MODEL=gpt-4o
15
23
 
24
+ # Default Gemini model (optional)
25
+ POPEYE_GEMINI_MODEL=gemini-2.0-flash
26
+
27
+ # Default Grok model (optional)
28
+ # Common models: grok-3, grok-2
29
+ POPEYE_GROK_MODEL=grok-3
30
+
31
+ # Consensus reviewer provider
32
+ # Options: openai, gemini, grok
33
+ POPEYE_CONSENSUS_REVIEWER=openai
34
+
35
+ # Consensus arbitrator provider (for tie-breaking)
36
+ # Options: openai, gemini, grok, off
37
+ POPEYE_CONSENSUS_ARBITRATOR=off
38
+
16
39
  # Consensus threshold (percentage required for approval)
17
40
  # Default: 95
18
41
  POPEYE_CONSENSUS_THRESHOLD=95
@@ -0,0 +1,275 @@
1
+ # Contributing to Popeye CLI
2
+
3
+ First off, thank you for considering contributing to Popeye CLI! It's people like you that make Popeye such a great tool.
4
+
5
+ ## Table of Contents
6
+
7
+ - [Code of Conduct](#code-of-conduct)
8
+ - [Getting Started](#getting-started)
9
+ - [Development Setup](#development-setup)
10
+ - [How Can I Contribute?](#how-can-i-contribute)
11
+ - [Pull Request Process](#pull-request-process)
12
+ - [Style Guidelines](#style-guidelines)
13
+ - [Testing](#testing)
14
+ - [Questions?](#questions)
15
+
16
+ ## Code of Conduct
17
+
18
+ This project and everyone participating in it is governed by our commitment to providing a welcoming and inclusive environment. By participating, you are expected to:
19
+
20
+ - Be respectful and considerate in your communication
21
+ - Accept constructive criticism gracefully
22
+ - Focus on what is best for the community
23
+ - Show empathy towards other community members
24
+
25
+ ## Getting Started
26
+
27
+ Popeye CLI is built with TypeScript and uses several AI providers (Claude, OpenAI, Gemini) for its consensus-based code generation workflow.
28
+
29
+ ### Prerequisites
30
+
31
+ - Node.js 18+
32
+ - npm 9+
33
+ - API keys for at least one AI provider (Claude recommended)
34
+
35
+ ### Development Setup
36
+
37
+ 1. **Fork and clone the repository**
38
+ ```bash
39
+ git clone https://github.com/YOUR_USERNAME/popeye.git
40
+ cd popeye
41
+ ```
42
+
43
+ 2. **Install dependencies**
44
+ ```bash
45
+ npm install
46
+ ```
47
+
48
+ 3. **Set up environment variables**
49
+ ```bash
50
+ cp .env.example .env
51
+ # Edit .env with your API keys
52
+ ```
53
+
54
+ 4. **Build the project**
55
+ ```bash
56
+ npm run build
57
+ ```
58
+
59
+ 5. **Run tests**
60
+ ```bash
61
+ npm test
62
+ ```
63
+
64
+ 6. **Link for local development**
65
+ ```bash
66
+ npm link
67
+ # Now you can run 'popeye' command locally
68
+ ```
69
+
70
+ ## How Can I Contribute?
71
+
72
+ ### Reporting Bugs
73
+
74
+ Before creating bug reports, please check existing issues to avoid duplicates. When you create a bug report, include as many details as possible:
75
+
76
+ - **Use a clear and descriptive title**
77
+ - **Describe the exact steps to reproduce the problem**
78
+ - **Provide specific examples** (project idea, configuration, etc.)
79
+ - **Describe the behavior you observed and what you expected**
80
+ - **Include logs** from `~/.popeye/logs/` if available
81
+ - **Include your environment** (OS, Node version, npm version)
82
+
83
+ ### Suggesting Features
84
+
85
+ Feature suggestions are welcome! Please provide:
86
+
87
+ - **A clear and descriptive title**
88
+ - **Detailed description of the proposed feature**
89
+ - **Explain why this feature would be useful** to most users
90
+ - **List any alternatives you've considered**
91
+
92
+ ### Your First Code Contribution
93
+
94
+ Unsure where to begin? Look for issues labeled:
95
+
96
+ - `good first issue` - Good for newcomers
97
+ - `help wanted` - Extra attention needed
98
+ - `documentation` - Improvements to docs
99
+
100
+ ### Areas We'd Love Help With
101
+
102
+ - **New AI Provider Adapters** - Add support for more AI providers
103
+ - **Language Support** - Extend beyond TypeScript/Python
104
+ - **UI Components** - Add more shadcn/ui components to the setup
105
+ - **Testing** - Improve test coverage
106
+ - **Documentation** - Tutorials, examples, translations
107
+ - **Bug Fixes** - Check the issues page
108
+
109
+ ## Pull Request Process
110
+
111
+ 1. **Create a feature branch**
112
+ ```bash
113
+ git checkout -b feature/your-feature-name
114
+ ```
115
+
116
+ 2. **Make your changes**
117
+ - Write clear, readable code
118
+ - Add tests for new functionality
119
+ - Update documentation as needed
120
+
121
+ 3. **Test your changes**
122
+ ```bash
123
+ npm run build
124
+ npm test
125
+ npm run lint
126
+ ```
127
+
128
+ 4. **Commit with a clear message**
129
+ ```bash
130
+ git commit -m "feat: add support for X"
131
+ ```
132
+
133
+ We follow [Conventional Commits](https://www.conventionalcommits.org/):
134
+ - `feat:` - New feature
135
+ - `fix:` - Bug fix
136
+ - `docs:` - Documentation only
137
+ - `style:` - Formatting, no code change
138
+ - `refactor:` - Code change that neither fixes a bug nor adds a feature
139
+ - `test:` - Adding or updating tests
140
+ - `chore:` - Maintenance tasks
141
+
142
+ 5. **Push and create a Pull Request**
143
+ ```bash
144
+ git push origin feature/your-feature-name
145
+ ```
146
+
147
+ 6. **In your PR description**
148
+ - Describe what changes you made and why
149
+ - Reference any related issues (`Fixes #123`)
150
+ - Include screenshots for UI changes
151
+ - Note any breaking changes
152
+
153
+ ## Style Guidelines
154
+
155
+ ### TypeScript
156
+
157
+ - Use TypeScript strict mode
158
+ - Prefer `const` over `let`, avoid `var`
159
+ - Use meaningful variable and function names
160
+ - Add JSDoc comments for public functions
161
+ - Keep functions focused and small
162
+
163
+ ```typescript
164
+ /**
165
+ * Generate a development plan from a specification
166
+ *
167
+ * @param spec - The project specification
168
+ * @param context - Additional context for planning
169
+ * @returns The generated plan
170
+ */
171
+ export async function createPlan(
172
+ spec: string,
173
+ context: string
174
+ ): Promise<string> {
175
+ // Implementation
176
+ }
177
+ ```
178
+
179
+ ### File Organization
180
+
181
+ ```
182
+ src/
183
+ ├── adapters/ # AI provider integrations
184
+ ├── auth/ # Authentication handling
185
+ ├── cli/ # CLI commands and interface
186
+ ├── config/ # Configuration management
187
+ ├── generators/ # Project scaffolding
188
+ ├── state/ # State management
189
+ ├── types/ # TypeScript type definitions
190
+ └── workflow/ # Core workflow logic
191
+ ```
192
+
193
+ ### Formatting
194
+
195
+ We use Prettier for code formatting:
196
+
197
+ ```bash
198
+ npm run format
199
+ ```
200
+
201
+ ## Testing
202
+
203
+ ### Running Tests
204
+
205
+ ```bash
206
+ # Run all tests
207
+ npm test
208
+
209
+ # Run tests in watch mode
210
+ npm run test:watch
211
+
212
+ # Run tests with coverage
213
+ npm run test:coverage
214
+ ```
215
+
216
+ ### Writing Tests
217
+
218
+ - Place tests in `tests/` directory mirroring `src/` structure
219
+ - Use descriptive test names
220
+ - Test both success and failure cases
221
+
222
+ ```typescript
223
+ import { describe, it, expect } from 'vitest';
224
+ import { myFunction } from '../src/myModule';
225
+
226
+ describe('myFunction', () => {
227
+ it('should return expected result for valid input', () => {
228
+ const result = myFunction('valid input');
229
+ expect(result).toBe('expected output');
230
+ });
231
+
232
+ it('should throw error for invalid input', () => {
233
+ expect(() => myFunction('')).toThrow('Invalid input');
234
+ });
235
+ });
236
+ ```
237
+
238
+ ## Project Architecture
239
+
240
+ Understanding the codebase:
241
+
242
+ ```
243
+ ┌─────────────────────────────────────────────────────────────┐
244
+ │ CLI Layer │
245
+ │ (cli/commands/*.ts - User interaction) │
246
+ └─────────────────────────────────────────────────────────────┘
247
+
248
+
249
+ ┌─────────────────────────────────────────────────────────────┐
250
+ │ Workflow Layer │
251
+ │ (workflow/*.ts - Plan mode, Execution mode, Consensus) │
252
+ └─────────────────────────────────────────────────────────────┘
253
+
254
+
255
+ ┌─────────────────────────────────────────────────────────────┐
256
+ │ Adapter Layer │
257
+ │ (adapters/*.ts - Claude, OpenAI, Gemini) │
258
+ └─────────────────────────────────────────────────────────────┘
259
+
260
+
261
+ ┌─────────────────────────────────────────────────────────────┐
262
+ │ State Layer │
263
+ │ (state/*.ts - Project state, persistence) │
264
+ └─────────────────────────────────────────────────────────────┘
265
+ ```
266
+
267
+ ## Questions?
268
+
269
+ Feel free to:
270
+
271
+ - Open an issue for questions
272
+ - Start a discussion on GitHub
273
+ - Reach out to maintainers
274
+
275
+ Thank you for contributing to Popeye CLI!
@@ -0,0 +1,172 @@
1
+ # Popeye CLI – Open Source Manifesto
2
+
3
+ ## Why Popeye Exists
4
+
5
+ Popeye was built out of frustration.
6
+
7
+ Not with coding itself — but with everything that blocks coding:
8
+
9
+ - endless project setup
10
+ - boilerplate before logic
11
+ - tooling debates before value
12
+ - unfinished ideas piling up in repos
13
+
14
+ We believe ideas should turn into working software faster.
15
+ And modern AI makes that possible — if used responsibly, transparently, and collaboratively.
16
+
17
+ **Popeye exists to remove friction between intention and execution.**
18
+
19
+ ---
20
+
21
+ ## What Popeye Is (and Is Not)
22
+
23
+ **Popeye is:**
24
+
25
+ - an AI-powered CLI that turns plain-English ideas into real projects
26
+ - a system that plans, reviews, builds, tests, and fixes code automatically
27
+ - a developer tool focused on production-ready outcomes
28
+ - an open, inspectable, hackable codebase
29
+
30
+ **Popeye is not:**
31
+
32
+ - a black-box "magic" code generator
33
+ - a replacement for developers
34
+ - a closed SaaS disguised as open source
35
+ - a shortcut that hides complexity instead of managing it
36
+
37
+ We believe developers stay in control.
38
+ AI is a collaborator — not an oracle.
39
+
40
+ ---
41
+
42
+ ## Core Principles
43
+
44
+ ### 1. Open by Default
45
+
46
+ Popeye is:
47
+
48
+ - open source
49
+ - publicly auditable
50
+ - forkable
51
+ - extensible
52
+
53
+ If it runs on your machine, you should be able to:
54
+
55
+ - read it
56
+ - modify it
57
+ - improve it
58
+ - disagree with it
59
+
60
+ No hidden logic. No locked workflows.
61
+
62
+ ### 2. Humans Own the Vision, AI Does the Heavy Lifting
63
+
64
+ Popeye assumes:
65
+
66
+ - humans define what should be built
67
+ - AI helps decide how to build it
68
+ - humans always have the final say
69
+
70
+ You describe intent.
71
+ Popeye handles the grind.
72
+
73
+ ### 3. Opinions Are Explicit, Not Hidden
74
+
75
+ Every tool has opinions.
76
+
77
+ Popeye:
78
+
79
+ - encodes its assumptions openly
80
+ - documents why decisions are made
81
+ - welcomes debate and alternative approaches
82
+
83
+ If you disagree with a default:
84
+
85
+ - change it
86
+ - propose an improvement
87
+ - fork it
88
+
89
+ Open source thrives on disagreement done well.
90
+
91
+ ### 4. Quality Over Demos
92
+
93
+ Popeye prioritizes:
94
+
95
+ - clean project structure
96
+ - testable code
97
+ - predictable builds
98
+ - real developer workflows
99
+
100
+ This is not about generating screenshots.
101
+ It's about generating maintainable software.
102
+
103
+ ### 5. Community > Perfection
104
+
105
+ Popeye will evolve in public.
106
+
107
+ That means:
108
+
109
+ - some rough edges
110
+ - ongoing refactors
111
+ - design discussions in the open
112
+
113
+ We value:
114
+
115
+ - contributors over polish
116
+ - feedback over silence
117
+ - progress over purity
118
+
119
+ ---
120
+
121
+ ## How You Can Contribute
122
+
123
+ You don't need to be an AI expert to help.
124
+
125
+ You can:
126
+
127
+ - improve prompts or planning logic
128
+ - add frontend or backend templates
129
+ - extend language or framework support
130
+ - improve test strategies
131
+ - tighten docs and examples
132
+ - report bugs or weird behavior
133
+ - challenge architectural decisions
134
+
135
+ If you've ever thought:
136
+
137
+ > "I wish dev tools worked this way instead…"
138
+
139
+ Popeye wants your opinion.
140
+
141
+ ---
142
+
143
+ ## The Long-Term Vision
144
+
145
+ We believe the future of software looks like this:
146
+
147
+ - ideas → specs → code → tests → running apps
148
+ - fewer abandoned repos
149
+ - fewer "weekend projects" that never start
150
+ - more people shipping things they actually care about
151
+
152
+ Popeye is one step in that direction.
153
+
154
+ Not the final answer — but an open experiment.
155
+
156
+ ---
157
+
158
+ ## An Invitation
159
+
160
+ If this resonates with you:
161
+
162
+ - Star the repo
163
+ - Try it
164
+ - Break it
165
+ - Fix it
166
+ - Open discussions
167
+ - Build with us
168
+
169
+ Open source doesn't grow because code is perfect.
170
+ It grows because people feel welcome to shape it.
171
+
172
+ **Welcome aboard.**