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,417 @@
1
+ /**
2
+ * TypeScript project templates
3
+ * Provides template files for TypeScript project generation
4
+ */
5
+
6
+ /**
7
+ * Generate package.json content
8
+ */
9
+ export function generatePackageJson(projectName: string, description?: string): string {
10
+ return JSON.stringify(
11
+ {
12
+ name: projectName,
13
+ version: '1.0.0',
14
+ description: description || 'Generated by Popeye CLI',
15
+ main: './dist/index.js',
16
+ type: 'module',
17
+ scripts: {
18
+ build: 'tsc',
19
+ dev: 'tsc --watch',
20
+ start: 'node dist/index.js',
21
+ test: 'vitest run',
22
+ 'test:watch': 'vitest',
23
+ 'test:coverage': 'vitest run --coverage',
24
+ lint: 'eslint src --ext .ts',
25
+ 'lint:fix': 'eslint src --ext .ts --fix',
26
+ format: 'prettier --write "src/**/*.ts"',
27
+ typecheck: 'tsc --noEmit',
28
+ clean: 'rm -rf dist',
29
+ },
30
+ keywords: [],
31
+ author: '',
32
+ license: 'MIT',
33
+ engines: {
34
+ node: '>=18.0.0',
35
+ },
36
+ dependencies: {},
37
+ devDependencies: {
38
+ '@types/node': '^20.17.6',
39
+ '@typescript-eslint/eslint-plugin': '^8.14.0',
40
+ '@typescript-eslint/parser': '^8.14.0',
41
+ '@vitest/coverage-v8': '^2.1.4',
42
+ eslint: '^9.14.0',
43
+ prettier: '^3.3.3',
44
+ typescript: '^5.6.3',
45
+ vitest: '^2.1.4',
46
+ },
47
+ },
48
+ null,
49
+ 2
50
+ );
51
+ }
52
+
53
+ /**
54
+ * Generate tsconfig.json content
55
+ */
56
+ export function generateTsconfig(): string {
57
+ return JSON.stringify(
58
+ {
59
+ compilerOptions: {
60
+ target: 'ES2022',
61
+ module: 'NodeNext',
62
+ moduleResolution: 'NodeNext',
63
+ lib: ['ES2022'],
64
+ outDir: './dist',
65
+ rootDir: './src',
66
+ strict: true,
67
+ esModuleInterop: true,
68
+ skipLibCheck: true,
69
+ forceConsistentCasingInFileNames: true,
70
+ declaration: true,
71
+ declarationMap: true,
72
+ sourceMap: true,
73
+ resolveJsonModule: true,
74
+ noImplicitAny: true,
75
+ noUnusedLocals: true,
76
+ noUnusedParameters: true,
77
+ noImplicitReturns: true,
78
+ noFallthroughCasesInSwitch: true,
79
+ },
80
+ include: ['src/**/*'],
81
+ exclude: ['node_modules', 'dist', 'tests'],
82
+ },
83
+ null,
84
+ 2
85
+ );
86
+ }
87
+
88
+ /**
89
+ * Generate vitest.config.ts content
90
+ */
91
+ export function generateVitestConfig(): string {
92
+ return `import { defineConfig } from 'vitest/config';
93
+
94
+ export default defineConfig({
95
+ test: {
96
+ globals: true,
97
+ environment: 'node',
98
+ coverage: {
99
+ provider: 'v8',
100
+ reporter: ['text', 'json', 'html'],
101
+ exclude: ['node_modules/', 'dist/', 'tests/'],
102
+ },
103
+ },
104
+ });
105
+ `;
106
+ }
107
+
108
+ /**
109
+ * Generate eslint.config.js content
110
+ */
111
+ export function generateEslintConfig(): string {
112
+ return `import eslint from '@eslint/js';
113
+ import tseslint from '@typescript-eslint/eslint-plugin';
114
+ import tsparser from '@typescript-eslint/parser';
115
+
116
+ export default [
117
+ eslint.configs.recommended,
118
+ {
119
+ files: ['src/**/*.ts'],
120
+ languageOptions: {
121
+ parser: tsparser,
122
+ parserOptions: {
123
+ ecmaVersion: 2022,
124
+ sourceType: 'module',
125
+ },
126
+ globals: {
127
+ console: 'readonly',
128
+ process: 'readonly',
129
+ Buffer: 'readonly',
130
+ __dirname: 'readonly',
131
+ __filename: 'readonly',
132
+ setTimeout: 'readonly',
133
+ clearTimeout: 'readonly',
134
+ setInterval: 'readonly',
135
+ clearInterval: 'readonly',
136
+ },
137
+ },
138
+ plugins: {
139
+ '@typescript-eslint': tseslint,
140
+ },
141
+ rules: {
142
+ ...tseslint.configs.recommended.rules,
143
+ '@typescript-eslint/explicit-function-return-type': 'warn',
144
+ '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
145
+ '@typescript-eslint/no-explicit-any': 'warn',
146
+ },
147
+ },
148
+ ];
149
+ `;
150
+ }
151
+
152
+ /**
153
+ * Generate .prettierrc content
154
+ */
155
+ export function generatePrettierrc(): string {
156
+ return JSON.stringify(
157
+ {
158
+ semi: true,
159
+ singleQuote: true,
160
+ tabWidth: 2,
161
+ trailingComma: 'es5',
162
+ printWidth: 100,
163
+ },
164
+ null,
165
+ 2
166
+ );
167
+ }
168
+
169
+ /**
170
+ * Generate main index.ts content
171
+ */
172
+ export function generateIndexTs(projectName: string): string {
173
+ return `/**
174
+ * ${projectName}
175
+ *
176
+ * Generated by Popeye CLI
177
+ */
178
+
179
+ /**
180
+ * Main function
181
+ */
182
+ export function main(): void {
183
+ console.log('Hello from ${projectName}!');
184
+ }
185
+
186
+ // Run if executed directly
187
+ main();
188
+ `;
189
+ }
190
+
191
+ /**
192
+ * Generate test file content
193
+ */
194
+ export function generateTestFile(projectName: string): string {
195
+ return `import { describe, it, expect } from 'vitest';
196
+ import { main } from '../src/index.js';
197
+
198
+ describe('${projectName}', () => {
199
+ describe('main', () => {
200
+ it('should run without errors', () => {
201
+ expect(() => main()).not.toThrow();
202
+ });
203
+ });
204
+
205
+ describe('placeholder tests', () => {
206
+ it('should pass basic assertion', () => {
207
+ expect(true).toBe(true);
208
+ });
209
+
210
+ it('should handle sample data', () => {
211
+ const data = { key: 'value', number: 42 };
212
+ expect(data.key).toBe('value');
213
+ expect(data.number).toBe(42);
214
+ });
215
+ });
216
+ });
217
+ `;
218
+ }
219
+
220
+ /**
221
+ * Generate Dockerfile content
222
+ */
223
+ export function generateDockerfile(_projectName: string): string {
224
+ return `# Node.js base image
225
+ FROM node:20-slim as base
226
+
227
+ WORKDIR /app
228
+
229
+ # Copy package files
230
+ COPY package*.json ./
231
+
232
+ # Install dependencies
233
+ RUN npm ci --only=production
234
+
235
+ # Copy built files
236
+ COPY dist/ ./dist/
237
+
238
+ # Production stage
239
+ FROM base as production
240
+
241
+ # Create non-root user
242
+ RUN adduser --disabled-password --gecos '' appuser
243
+ USER appuser
244
+
245
+ CMD ["node", "dist/index.js"]
246
+
247
+ # Development stage
248
+ FROM node:20-slim as development
249
+
250
+ WORKDIR /app
251
+
252
+ COPY package*.json ./
253
+ RUN npm ci
254
+
255
+ COPY . .
256
+
257
+ CMD ["npm", "run", "dev"]
258
+ `;
259
+ }
260
+
261
+ /**
262
+ * Generate docker-compose.yml content
263
+ */
264
+ export function generateDockerCompose(projectName: string): string {
265
+ return `version: "3.8"
266
+
267
+ services:
268
+ app:
269
+ build:
270
+ context: .
271
+ target: production
272
+ container_name: ${projectName}
273
+ restart: unless-stopped
274
+ env_file:
275
+ - .env
276
+ volumes:
277
+ - ./data:/app/data
278
+
279
+ dev:
280
+ build:
281
+ context: .
282
+ target: development
283
+ container_name: ${projectName}-dev
284
+ volumes:
285
+ - ./src:/app/src
286
+ - ./tests:/app/tests
287
+ command: ["npm", "run", "dev"]
288
+ `;
289
+ }
290
+
291
+ /**
292
+ * Generate .gitignore content
293
+ */
294
+ export function generateGitignore(): string {
295
+ return `# Dependencies
296
+ node_modules/
297
+
298
+ # Build output
299
+ dist/
300
+ build/
301
+
302
+ # IDE
303
+ .idea/
304
+ .vscode/
305
+ *.swp
306
+ *.swo
307
+
308
+ # Environment
309
+ .env
310
+ .env.local
311
+ .env.*.local
312
+
313
+ # Logs
314
+ *.log
315
+ npm-debug.log*
316
+ yarn-debug.log*
317
+ yarn-error.log*
318
+
319
+ # Testing
320
+ coverage/
321
+ .nyc_output/
322
+
323
+ # OS files
324
+ .DS_Store
325
+ Thumbs.db
326
+
327
+ # Project specific
328
+ .popeye/
329
+ data/
330
+ `;
331
+ }
332
+
333
+ /**
334
+ * Generate .env.example content
335
+ */
336
+ export function generateEnvExample(): string {
337
+ return `# Environment variables
338
+ # Copy this file to .env and fill in the values
339
+
340
+ # Application settings
341
+ NODE_ENV=development
342
+ DEBUG=true
343
+ LOG_LEVEL=info
344
+
345
+ # Add your environment variables below
346
+ `;
347
+ }
348
+
349
+ /**
350
+ * Generate README.md content
351
+ */
352
+ export function generateReadme(projectName: string, description?: string): string {
353
+ return `# ${projectName}
354
+
355
+ ${description || 'Generated by Popeye CLI'}
356
+
357
+ ## Installation
358
+
359
+ \`\`\`bash
360
+ npm install
361
+ \`\`\`
362
+
363
+ ## Usage
364
+
365
+ \`\`\`bash
366
+ # Build
367
+ npm run build
368
+
369
+ # Run
370
+ npm start
371
+
372
+ # Development mode
373
+ npm run dev
374
+ \`\`\`
375
+
376
+ ## Development
377
+
378
+ ### Running Tests
379
+
380
+ \`\`\`bash
381
+ npm test
382
+
383
+ # With coverage
384
+ npm run test:coverage
385
+
386
+ # Watch mode
387
+ npm run test:watch
388
+ \`\`\`
389
+
390
+ ### Code Quality
391
+
392
+ \`\`\`bash
393
+ # Lint
394
+ npm run lint
395
+
396
+ # Format
397
+ npm run format
398
+
399
+ # Type check
400
+ npm run typecheck
401
+ \`\`\`
402
+
403
+ ## Docker
404
+
405
+ \`\`\`bash
406
+ # Build and run with Docker Compose
407
+ docker-compose up --build
408
+
409
+ # Run in development mode
410
+ docker-compose run dev
411
+ \`\`\`
412
+
413
+ ## License
414
+
415
+ MIT
416
+ `;
417
+ }