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,220 @@
1
+ /**
2
+ * Configuration schema definitions using Zod
3
+ * Matches popeye-cli-spec.md section 9.1 exactly
4
+ */
5
+ import { z } from 'zod';
6
+ /**
7
+ * Consensus settings schema
8
+ */
9
+ export declare const ConsensusSettingsSchema: z.ZodObject<{
10
+ threshold: z.ZodDefault<z.ZodNumber>;
11
+ max_disagreements: z.ZodDefault<z.ZodNumber>;
12
+ escalation_action: z.ZodDefault<z.ZodEnum<{
13
+ abort: "abort";
14
+ pause: "pause";
15
+ continue: "continue";
16
+ }>>;
17
+ }, z.core.$strip>;
18
+ /**
19
+ * OpenAI API settings schema
20
+ */
21
+ export declare const OpenAISettingsSchema: z.ZodObject<{
22
+ model: z.ZodDefault<z.ZodEnum<{
23
+ "gpt-4o": "gpt-4o";
24
+ "gpt-4o-mini": "gpt-4o-mini";
25
+ "gpt-4-turbo": "gpt-4-turbo";
26
+ "o1-preview": "o1-preview";
27
+ "o1-mini": "o1-mini";
28
+ }>>;
29
+ temperature: z.ZodDefault<z.ZodNumber>;
30
+ max_tokens: z.ZodDefault<z.ZodNumber>;
31
+ available_models: z.ZodDefault<z.ZodArray<z.ZodString>>;
32
+ }, z.core.$strip>;
33
+ /**
34
+ * Claude API settings schema
35
+ */
36
+ export declare const ClaudeSettingsSchema: z.ZodObject<{
37
+ model: z.ZodDefault<z.ZodString>;
38
+ }, z.core.$strip>;
39
+ /**
40
+ * API configuration schema
41
+ */
42
+ export declare const APISettingsSchema: z.ZodObject<{
43
+ openai: z.ZodDefault<z.ZodObject<{
44
+ model: z.ZodDefault<z.ZodEnum<{
45
+ "gpt-4o": "gpt-4o";
46
+ "gpt-4o-mini": "gpt-4o-mini";
47
+ "gpt-4-turbo": "gpt-4-turbo";
48
+ "o1-preview": "o1-preview";
49
+ "o1-mini": "o1-mini";
50
+ }>>;
51
+ temperature: z.ZodDefault<z.ZodNumber>;
52
+ max_tokens: z.ZodDefault<z.ZodNumber>;
53
+ available_models: z.ZodDefault<z.ZodArray<z.ZodString>>;
54
+ }, z.core.$strip>>;
55
+ claude: z.ZodDefault<z.ZodObject<{
56
+ model: z.ZodDefault<z.ZodString>;
57
+ }, z.core.$strip>>;
58
+ }, z.core.$strip>;
59
+ /**
60
+ * Python project settings schema
61
+ */
62
+ export declare const PythonSettingsSchema: z.ZodObject<{
63
+ package_manager: z.ZodDefault<z.ZodEnum<{
64
+ pip: "pip";
65
+ poetry: "poetry";
66
+ pipenv: "pipenv";
67
+ }>>;
68
+ test_framework: z.ZodDefault<z.ZodString>;
69
+ min_version: z.ZodDefault<z.ZodString>;
70
+ }, z.core.$strip>;
71
+ /**
72
+ * TypeScript project settings schema
73
+ */
74
+ export declare const TypeScriptSettingsSchema: z.ZodObject<{
75
+ package_manager: z.ZodDefault<z.ZodEnum<{
76
+ npm: "npm";
77
+ pnpm: "pnpm";
78
+ yarn: "yarn";
79
+ }>>;
80
+ test_framework: z.ZodDefault<z.ZodEnum<{
81
+ jest: "jest";
82
+ vitest: "vitest";
83
+ }>>;
84
+ min_version: z.ZodDefault<z.ZodString>;
85
+ }, z.core.$strip>;
86
+ /**
87
+ * Project defaults schema
88
+ */
89
+ export declare const ProjectSettingsSchema: z.ZodObject<{
90
+ default_language: z.ZodDefault<z.ZodEnum<{
91
+ python: "python";
92
+ typescript: "typescript";
93
+ }>>;
94
+ python: z.ZodDefault<z.ZodObject<{
95
+ package_manager: z.ZodDefault<z.ZodEnum<{
96
+ pip: "pip";
97
+ poetry: "poetry";
98
+ pipenv: "pipenv";
99
+ }>>;
100
+ test_framework: z.ZodDefault<z.ZodString>;
101
+ min_version: z.ZodDefault<z.ZodString>;
102
+ }, z.core.$strip>>;
103
+ typescript: z.ZodDefault<z.ZodObject<{
104
+ package_manager: z.ZodDefault<z.ZodEnum<{
105
+ npm: "npm";
106
+ pnpm: "pnpm";
107
+ yarn: "yarn";
108
+ }>>;
109
+ test_framework: z.ZodDefault<z.ZodEnum<{
110
+ jest: "jest";
111
+ vitest: "vitest";
112
+ }>>;
113
+ min_version: z.ZodDefault<z.ZodString>;
114
+ }, z.core.$strip>>;
115
+ }, z.core.$strip>;
116
+ /**
117
+ * Directory structure settings schema
118
+ */
119
+ export declare const DirectorySettingsSchema: z.ZodObject<{
120
+ docs: z.ZodDefault<z.ZodString>;
121
+ tests: z.ZodDefault<z.ZodString>;
122
+ plans: z.ZodDefault<z.ZodString>;
123
+ }, z.core.$strip>;
124
+ /**
125
+ * Output settings schema
126
+ */
127
+ export declare const OutputSettingsSchema: z.ZodObject<{
128
+ format: z.ZodDefault<z.ZodEnum<{
129
+ markdown: "markdown";
130
+ json: "json";
131
+ }>>;
132
+ verbose: z.ZodDefault<z.ZodBoolean>;
133
+ timestamps: z.ZodDefault<z.ZodBoolean>;
134
+ show_consensus_dialog: z.ZodDefault<z.ZodBoolean>;
135
+ }, z.core.$strip>;
136
+ /**
137
+ * Complete configuration schema
138
+ */
139
+ export declare const ConfigSchema: z.ZodObject<{
140
+ consensus: z.ZodDefault<z.ZodObject<{
141
+ threshold: z.ZodDefault<z.ZodNumber>;
142
+ max_disagreements: z.ZodDefault<z.ZodNumber>;
143
+ escalation_action: z.ZodDefault<z.ZodEnum<{
144
+ abort: "abort";
145
+ pause: "pause";
146
+ continue: "continue";
147
+ }>>;
148
+ }, z.core.$strip>>;
149
+ apis: z.ZodDefault<z.ZodObject<{
150
+ openai: z.ZodDefault<z.ZodObject<{
151
+ model: z.ZodDefault<z.ZodEnum<{
152
+ "gpt-4o": "gpt-4o";
153
+ "gpt-4o-mini": "gpt-4o-mini";
154
+ "gpt-4-turbo": "gpt-4-turbo";
155
+ "o1-preview": "o1-preview";
156
+ "o1-mini": "o1-mini";
157
+ }>>;
158
+ temperature: z.ZodDefault<z.ZodNumber>;
159
+ max_tokens: z.ZodDefault<z.ZodNumber>;
160
+ available_models: z.ZodDefault<z.ZodArray<z.ZodString>>;
161
+ }, z.core.$strip>>;
162
+ claude: z.ZodDefault<z.ZodObject<{
163
+ model: z.ZodDefault<z.ZodString>;
164
+ }, z.core.$strip>>;
165
+ }, z.core.$strip>>;
166
+ project: z.ZodDefault<z.ZodObject<{
167
+ default_language: z.ZodDefault<z.ZodEnum<{
168
+ python: "python";
169
+ typescript: "typescript";
170
+ }>>;
171
+ python: z.ZodDefault<z.ZodObject<{
172
+ package_manager: z.ZodDefault<z.ZodEnum<{
173
+ pip: "pip";
174
+ poetry: "poetry";
175
+ pipenv: "pipenv";
176
+ }>>;
177
+ test_framework: z.ZodDefault<z.ZodString>;
178
+ min_version: z.ZodDefault<z.ZodString>;
179
+ }, z.core.$strip>>;
180
+ typescript: z.ZodDefault<z.ZodObject<{
181
+ package_manager: z.ZodDefault<z.ZodEnum<{
182
+ npm: "npm";
183
+ pnpm: "pnpm";
184
+ yarn: "yarn";
185
+ }>>;
186
+ test_framework: z.ZodDefault<z.ZodEnum<{
187
+ jest: "jest";
188
+ vitest: "vitest";
189
+ }>>;
190
+ min_version: z.ZodDefault<z.ZodString>;
191
+ }, z.core.$strip>>;
192
+ }, z.core.$strip>>;
193
+ directories: z.ZodDefault<z.ZodObject<{
194
+ docs: z.ZodDefault<z.ZodString>;
195
+ tests: z.ZodDefault<z.ZodString>;
196
+ plans: z.ZodDefault<z.ZodString>;
197
+ }, z.core.$strip>>;
198
+ output: z.ZodDefault<z.ZodObject<{
199
+ format: z.ZodDefault<z.ZodEnum<{
200
+ markdown: "markdown";
201
+ json: "json";
202
+ }>>;
203
+ verbose: z.ZodDefault<z.ZodBoolean>;
204
+ timestamps: z.ZodDefault<z.ZodBoolean>;
205
+ show_consensus_dialog: z.ZodDefault<z.ZodBoolean>;
206
+ }, z.core.$strip>>;
207
+ }, z.core.$strip>;
208
+ /**
209
+ * Configuration type inferred from schema
210
+ */
211
+ export type Config = z.infer<typeof ConfigSchema>;
212
+ export type ConsensusSettings = z.infer<typeof ConsensusSettingsSchema>;
213
+ export type OpenAISettings = z.infer<typeof OpenAISettingsSchema>;
214
+ export type ClaudeSettings = z.infer<typeof ClaudeSettingsSchema>;
215
+ export type PythonSettings = z.infer<typeof PythonSettingsSchema>;
216
+ export type TypeScriptSettings = z.infer<typeof TypeScriptSettingsSchema>;
217
+ export type ProjectSettings = z.infer<typeof ProjectSettingsSchema>;
218
+ export type DirectorySettings = z.infer<typeof DirectorySettingsSchema>;
219
+ export type OutputSettings = z.infer<typeof OutputSettingsSchema>;
220
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;iBAIlC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;iBAS/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;iBAE/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;iBAU5B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;iBAI/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;iBAInC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;iBAYhC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;iBAIlC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;iBAK/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAyCvB,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAClD,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AACxE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Configuration schema definitions using Zod
3
+ * Matches popeye-cli-spec.md section 9.1 exactly
4
+ */
5
+ import { z } from 'zod';
6
+ /**
7
+ * Consensus settings schema
8
+ */
9
+ export const ConsensusSettingsSchema = z.object({
10
+ threshold: z.number().min(0).max(100).default(95),
11
+ max_disagreements: z.number().min(1).max(10).default(5),
12
+ escalation_action: z.enum(['pause', 'continue', 'abort']).default('pause'),
13
+ });
14
+ /**
15
+ * OpenAI API settings schema
16
+ */
17
+ export const OpenAISettingsSchema = z.object({
18
+ model: z
19
+ .enum(['gpt-4o', 'gpt-4o-mini', 'gpt-4-turbo', 'o1-preview', 'o1-mini'])
20
+ .default('gpt-4o'),
21
+ temperature: z.number().min(0).max(2).default(0.3),
22
+ max_tokens: z.number().min(100).max(32000).default(4096),
23
+ available_models: z
24
+ .array(z.string())
25
+ .default(['gpt-4o', 'gpt-4o-mini', 'gpt-4-turbo', 'o1-preview', 'o1-mini']),
26
+ });
27
+ /**
28
+ * Claude API settings schema
29
+ */
30
+ export const ClaudeSettingsSchema = z.object({
31
+ model: z.string().default('claude-sonnet-4-20250514'),
32
+ });
33
+ /**
34
+ * API configuration schema
35
+ */
36
+ export const APISettingsSchema = z.object({
37
+ openai: OpenAISettingsSchema.default({
38
+ model: 'gpt-4o',
39
+ temperature: 0.3,
40
+ max_tokens: 4096,
41
+ available_models: ['gpt-4o', 'gpt-4o-mini', 'gpt-4-turbo', 'o1-preview', 'o1-mini'],
42
+ }),
43
+ claude: ClaudeSettingsSchema.default({
44
+ model: 'claude-sonnet-4-20250514',
45
+ }),
46
+ });
47
+ /**
48
+ * Python project settings schema
49
+ */
50
+ export const PythonSettingsSchema = z.object({
51
+ package_manager: z.enum(['pip', 'poetry', 'pipenv']).default('pip'),
52
+ test_framework: z.string().default('pytest'),
53
+ min_version: z.string().default('3.10'),
54
+ });
55
+ /**
56
+ * TypeScript project settings schema
57
+ */
58
+ export const TypeScriptSettingsSchema = z.object({
59
+ package_manager: z.enum(['npm', 'pnpm', 'yarn']).default('npm'),
60
+ test_framework: z.enum(['jest', 'vitest']).default('jest'),
61
+ min_version: z.string().default('18'),
62
+ });
63
+ /**
64
+ * Project defaults schema
65
+ */
66
+ export const ProjectSettingsSchema = z.object({
67
+ default_language: z.enum(['python', 'typescript']).default('python'),
68
+ python: PythonSettingsSchema.default({
69
+ package_manager: 'pip',
70
+ test_framework: 'pytest',
71
+ min_version: '3.10',
72
+ }),
73
+ typescript: TypeScriptSettingsSchema.default({
74
+ package_manager: 'npm',
75
+ test_framework: 'jest',
76
+ min_version: '18',
77
+ }),
78
+ });
79
+ /**
80
+ * Directory structure settings schema
81
+ */
82
+ export const DirectorySettingsSchema = z.object({
83
+ docs: z.string().default('docs'),
84
+ tests: z.string().default('docs/tests'),
85
+ plans: z.string().default('docs/plans'),
86
+ });
87
+ /**
88
+ * Output settings schema
89
+ */
90
+ export const OutputSettingsSchema = z.object({
91
+ format: z.enum(['markdown', 'json']).default('markdown'),
92
+ verbose: z.boolean().default(false),
93
+ timestamps: z.boolean().default(true),
94
+ show_consensus_dialog: z.boolean().default(true),
95
+ });
96
+ /**
97
+ * Complete configuration schema
98
+ */
99
+ export const ConfigSchema = z.object({
100
+ consensus: ConsensusSettingsSchema.default({
101
+ threshold: 95,
102
+ max_disagreements: 5,
103
+ escalation_action: 'pause',
104
+ }),
105
+ apis: APISettingsSchema.default({
106
+ openai: {
107
+ model: 'gpt-4o',
108
+ temperature: 0.3,
109
+ max_tokens: 4096,
110
+ available_models: ['gpt-4o', 'gpt-4o-mini', 'gpt-4-turbo', 'o1-preview', 'o1-mini'],
111
+ },
112
+ claude: {
113
+ model: 'claude-sonnet-4-20250514',
114
+ },
115
+ }),
116
+ project: ProjectSettingsSchema.default({
117
+ default_language: 'python',
118
+ python: {
119
+ package_manager: 'pip',
120
+ test_framework: 'pytest',
121
+ min_version: '3.10',
122
+ },
123
+ typescript: {
124
+ package_manager: 'npm',
125
+ test_framework: 'jest',
126
+ min_version: '18',
127
+ },
128
+ }),
129
+ directories: DirectorySettingsSchema.default({
130
+ docs: 'docs',
131
+ tests: 'docs/tests',
132
+ plans: 'docs/plans',
133
+ }),
134
+ output: OutputSettingsSchema.default({
135
+ format: 'markdown',
136
+ verbose: false,
137
+ timestamps: true,
138
+ show_consensus_dialog: true,
139
+ }),
140
+ });
141
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Project generators module
3
+ * Provides unified API for generating Python and TypeScript projects
4
+ */
5
+ import type { ProjectSpec, OutputLanguage } from '../types/project.js';
6
+ import { type GenerationResult } from './python.js';
7
+ export { generatePythonProject, validatePythonProject, addPythonModule, getPythonProjectFiles, type GenerationResult, } from './python.js';
8
+ export { generateTypeScriptProject, validateTypeScriptProject, addTypeScriptModule, getTypeScriptProjectFiles, addDependency, updateScripts, } from './typescript.js';
9
+ export * from './templates/index.js';
10
+ /**
11
+ * Generate a project based on the specification
12
+ *
13
+ * @param spec - Project specification
14
+ * @param outputDir - Output directory
15
+ * @returns Generation result
16
+ */
17
+ export declare function generateProject(spec: ProjectSpec, outputDir: string): Promise<GenerationResult>;
18
+ /**
19
+ * Validate a project structure
20
+ *
21
+ * @param projectDir - Project directory
22
+ * @param language - Project language
23
+ * @returns Validation result
24
+ */
25
+ export declare function validateProject(projectDir: string, language: OutputLanguage): Promise<{
26
+ valid: boolean;
27
+ missingFiles: string[];
28
+ }>;
29
+ /**
30
+ * Add a module to an existing project
31
+ *
32
+ * @param projectDir - Project directory
33
+ * @param moduleName - Module name
34
+ * @param language - Project language
35
+ * @returns Files created
36
+ */
37
+ export declare function addModule(projectDir: string, moduleName: string, language: OutputLanguage): Promise<string[]>;
38
+ /**
39
+ * Get the list of files that would be generated for a project
40
+ *
41
+ * @param projectName - Project name
42
+ * @param language - Project language
43
+ * @returns List of relative file paths
44
+ */
45
+ export declare function getProjectFiles(projectName: string, language: OutputLanguage): string[];
46
+ /**
47
+ * Get the default test command for a language
48
+ *
49
+ * @param language - Project language
50
+ * @returns Test command
51
+ */
52
+ export declare function getTestCommand(language: OutputLanguage): string;
53
+ /**
54
+ * Get the default build command for a language
55
+ *
56
+ * @param language - Project language
57
+ * @returns Build command
58
+ */
59
+ export declare function getBuildCommand(language: OutputLanguage): string;
60
+ /**
61
+ * Get the default lint command for a language
62
+ *
63
+ * @param language - Project language
64
+ * @returns Lint command
65
+ */
66
+ export declare function getLintCommand(language: OutputLanguage): string;
67
+ /**
68
+ * Get the file extension for a language
69
+ *
70
+ * @param language - Project language
71
+ * @returns File extension (without dot)
72
+ */
73
+ export declare function getFileExtension(language: OutputLanguage): string;
74
+ /**
75
+ * Get the source directory name for a language
76
+ *
77
+ * @param language - Project language
78
+ * @returns Source directory name
79
+ */
80
+ export declare function getSourceDir(_language: OutputLanguage): string;
81
+ /**
82
+ * Get the test directory name for a language
83
+ *
84
+ * @param language - Project language
85
+ * @returns Test directory name
86
+ */
87
+ export declare function getTestDir(_language: OutputLanguage): string;
88
+ /**
89
+ * Check if a project directory already exists and has content
90
+ *
91
+ * @param projectDir - Project directory
92
+ * @returns True if directory exists and has content
93
+ */
94
+ export declare function projectDirExists(projectDir: string): Promise<boolean>;
95
+ /**
96
+ * Clean up a failed project generation
97
+ *
98
+ * @param projectDir - Project directory
99
+ */
100
+ export declare function cleanupProject(projectDir: string): Promise<void>;
101
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAKL,KAAK,gBAAgB,EACtB,MAAM,aAAa,CAAC;AASrB,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,KAAK,gBAAgB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,yBAAyB,EACzB,yBAAyB,EACzB,mBAAmB,EACnB,yBAAyB,EACzB,aAAa,EACb,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,cAAc,sBAAsB,CAAC;AAErC;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,gBAAgB,CAAC,CAc3B;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC;IACT,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC,CAYD;AAED;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAC7B,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,MAAM,EAAE,CAAC,CASnB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,MAAM,EAAE,CASvF;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAS/D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAShE;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAS/D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CASjE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,cAAc,GAAG,MAAM,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,cAAc,GAAG,MAAM,CAE5D;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAS3E;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQtE"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Project generators module
3
+ * Provides unified API for generating Python and TypeScript projects
4
+ */
5
+ import { generatePythonProject, validatePythonProject, addPythonModule, getPythonProjectFiles, } from './python.js';
6
+ import { generateTypeScriptProject, validateTypeScriptProject, addTypeScriptModule, getTypeScriptProjectFiles, } from './typescript.js';
7
+ // Re-export (explicitly to avoid name conflicts)
8
+ export { generatePythonProject, validatePythonProject, addPythonModule, getPythonProjectFiles, } from './python.js';
9
+ export { generateTypeScriptProject, validateTypeScriptProject, addTypeScriptModule, getTypeScriptProjectFiles, addDependency, updateScripts, } from './typescript.js';
10
+ export * from './templates/index.js';
11
+ /**
12
+ * Generate a project based on the specification
13
+ *
14
+ * @param spec - Project specification
15
+ * @param outputDir - Output directory
16
+ * @returns Generation result
17
+ */
18
+ export async function generateProject(spec, outputDir) {
19
+ switch (spec.language) {
20
+ case 'python':
21
+ return generatePythonProject(spec, outputDir);
22
+ case 'typescript':
23
+ return generateTypeScriptProject(spec, outputDir);
24
+ default:
25
+ return {
26
+ success: false,
27
+ projectDir: outputDir,
28
+ filesCreated: [],
29
+ error: `Unsupported language: ${spec.language}`,
30
+ };
31
+ }
32
+ }
33
+ /**
34
+ * Validate a project structure
35
+ *
36
+ * @param projectDir - Project directory
37
+ * @param language - Project language
38
+ * @returns Validation result
39
+ */
40
+ export async function validateProject(projectDir, language) {
41
+ switch (language) {
42
+ case 'python':
43
+ return validatePythonProject(projectDir);
44
+ case 'typescript':
45
+ return validateTypeScriptProject(projectDir);
46
+ default:
47
+ return {
48
+ valid: false,
49
+ missingFiles: ['Unknown language'],
50
+ };
51
+ }
52
+ }
53
+ /**
54
+ * Add a module to an existing project
55
+ *
56
+ * @param projectDir - Project directory
57
+ * @param moduleName - Module name
58
+ * @param language - Project language
59
+ * @returns Files created
60
+ */
61
+ export async function addModule(projectDir, moduleName, language) {
62
+ switch (language) {
63
+ case 'python':
64
+ return addPythonModule(projectDir, moduleName);
65
+ case 'typescript':
66
+ return addTypeScriptModule(projectDir, moduleName);
67
+ default:
68
+ throw new Error(`Unsupported language: ${language}`);
69
+ }
70
+ }
71
+ /**
72
+ * Get the list of files that would be generated for a project
73
+ *
74
+ * @param projectName - Project name
75
+ * @param language - Project language
76
+ * @returns List of relative file paths
77
+ */
78
+ export function getProjectFiles(projectName, language) {
79
+ switch (language) {
80
+ case 'python':
81
+ return getPythonProjectFiles(projectName);
82
+ case 'typescript':
83
+ return getTypeScriptProjectFiles(projectName);
84
+ default:
85
+ return [];
86
+ }
87
+ }
88
+ /**
89
+ * Get the default test command for a language
90
+ *
91
+ * @param language - Project language
92
+ * @returns Test command
93
+ */
94
+ export function getTestCommand(language) {
95
+ switch (language) {
96
+ case 'python':
97
+ return 'python -m pytest tests/ -v';
98
+ case 'typescript':
99
+ return 'npm test';
100
+ default:
101
+ return 'echo "No test command configured"';
102
+ }
103
+ }
104
+ /**
105
+ * Get the default build command for a language
106
+ *
107
+ * @param language - Project language
108
+ * @returns Build command
109
+ */
110
+ export function getBuildCommand(language) {
111
+ switch (language) {
112
+ case 'python':
113
+ return 'python -m pip install -e .';
114
+ case 'typescript':
115
+ return 'npm run build';
116
+ default:
117
+ return 'echo "No build command configured"';
118
+ }
119
+ }
120
+ /**
121
+ * Get the default lint command for a language
122
+ *
123
+ * @param language - Project language
124
+ * @returns Lint command
125
+ */
126
+ export function getLintCommand(language) {
127
+ switch (language) {
128
+ case 'python':
129
+ return 'ruff check src/ tests/';
130
+ case 'typescript':
131
+ return 'npm run lint';
132
+ default:
133
+ return 'echo "No lint command configured"';
134
+ }
135
+ }
136
+ /**
137
+ * Get the file extension for a language
138
+ *
139
+ * @param language - Project language
140
+ * @returns File extension (without dot)
141
+ */
142
+ export function getFileExtension(language) {
143
+ switch (language) {
144
+ case 'python':
145
+ return 'py';
146
+ case 'typescript':
147
+ return 'ts';
148
+ default:
149
+ return 'txt';
150
+ }
151
+ }
152
+ /**
153
+ * Get the source directory name for a language
154
+ *
155
+ * @param language - Project language
156
+ * @returns Source directory name
157
+ */
158
+ export function getSourceDir(_language) {
159
+ return 'src';
160
+ }
161
+ /**
162
+ * Get the test directory name for a language
163
+ *
164
+ * @param language - Project language
165
+ * @returns Test directory name
166
+ */
167
+ export function getTestDir(_language) {
168
+ return 'tests';
169
+ }
170
+ /**
171
+ * Check if a project directory already exists and has content
172
+ *
173
+ * @param projectDir - Project directory
174
+ * @returns True if directory exists and has content
175
+ */
176
+ export async function projectDirExists(projectDir) {
177
+ const { promises: fs } = await import('node:fs');
178
+ try {
179
+ const files = await fs.readdir(projectDir);
180
+ return files.length > 0;
181
+ }
182
+ catch {
183
+ return false;
184
+ }
185
+ }
186
+ /**
187
+ * Clean up a failed project generation
188
+ *
189
+ * @param projectDir - Project directory
190
+ */
191
+ export async function cleanupProject(projectDir) {
192
+ const { promises: fs } = await import('node:fs');
193
+ try {
194
+ await fs.rm(projectDir, { recursive: true, force: true });
195
+ }
196
+ catch {
197
+ // Ignore errors
198
+ }
199
+ }
200
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generators/index.ts"],"names":[],"mappings":"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"}