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.
- package/.env.example +25 -0
- package/.prettierrc +8 -0
- package/README.md +320 -0
- package/dist/adapters/claude.d.ts +82 -0
- package/dist/adapters/claude.d.ts.map +1 -0
- package/dist/adapters/claude.js +230 -0
- package/dist/adapters/claude.js.map +1 -0
- package/dist/adapters/openai.d.ts +48 -0
- package/dist/adapters/openai.d.ts.map +1 -0
- package/dist/adapters/openai.js +257 -0
- package/dist/adapters/openai.js.map +1 -0
- package/dist/auth/claude.d.ts +44 -0
- package/dist/auth/claude.d.ts.map +1 -0
- package/dist/auth/claude.js +139 -0
- package/dist/auth/claude.js.map +1 -0
- package/dist/auth/index.d.ts +61 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +141 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/keychain.d.ts +66 -0
- package/dist/auth/keychain.d.ts.map +1 -0
- package/dist/auth/keychain.js +125 -0
- package/dist/auth/keychain.js.map +1 -0
- package/dist/auth/openai-entry.d.ts +9 -0
- package/dist/auth/openai-entry.d.ts.map +1 -0
- package/dist/auth/openai-entry.js +410 -0
- package/dist/auth/openai-entry.js.map +1 -0
- package/dist/auth/openai.d.ts +71 -0
- package/dist/auth/openai.d.ts.map +1 -0
- package/dist/auth/openai.js +212 -0
- package/dist/auth/openai.js.map +1 -0
- package/dist/auth/server.d.ts +32 -0
- package/dist/auth/server.d.ts.map +1 -0
- package/dist/auth/server.js +213 -0
- package/dist/auth/server.js.map +1 -0
- package/dist/cli/commands/auth.d.ts +10 -0
- package/dist/cli/commands/auth.d.ts.map +1 -0
- package/dist/cli/commands/auth.js +162 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/config.d.ts +10 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +215 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/create.d.ts +10 -0
- package/dist/cli/commands/create.d.ts.map +1 -0
- package/dist/cli/commands/create.js +240 -0
- package/dist/cli/commands/create.js.map +1 -0
- package/dist/cli/commands/index.d.ts +10 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +10 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/resume.d.ts +18 -0
- package/dist/cli/commands/resume.d.ts.map +1 -0
- package/dist/cli/commands/resume.js +241 -0
- package/dist/cli/commands/resume.js.map +1 -0
- package/dist/cli/commands/status.d.ts +18 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +154 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/index.d.ts +17 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +71 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/interactive.d.ts +9 -0
- package/dist/cli/interactive.d.ts.map +1 -0
- package/dist/cli/interactive.js +330 -0
- package/dist/cli/interactive.js.map +1 -0
- package/dist/cli/output.d.ts +182 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +355 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/config/defaults.d.ts +57 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +103 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +138 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +244 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/schema.d.ts +220 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +141 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/generators/index.d.ts +101 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/index.js +200 -0
- package/dist/generators/index.js.map +1 -0
- package/dist/generators/python.d.ts +48 -0
- package/dist/generators/python.d.ts.map +1 -0
- package/dist/generators/python.js +262 -0
- package/dist/generators/python.js.map +1 -0
- package/dist/generators/templates/index.d.ts +6 -0
- package/dist/generators/templates/index.d.ts.map +1 -0
- package/dist/generators/templates/index.js +6 -0
- package/dist/generators/templates/index.js.map +1 -0
- package/dist/generators/templates/python.d.ts +53 -0
- package/dist/generators/templates/python.d.ts.map +1 -0
- package/dist/generators/templates/python.js +454 -0
- package/dist/generators/templates/python.js.map +1 -0
- package/dist/generators/templates/typescript.d.ts +53 -0
- package/dist/generators/templates/typescript.d.ts.map +1 -0
- package/dist/generators/templates/typescript.js +394 -0
- package/dist/generators/templates/typescript.js.map +1 -0
- package/dist/generators/typescript.d.ts +64 -0
- package/dist/generators/typescript.d.ts.map +1 -0
- package/dist/generators/typescript.js +271 -0
- package/dist/generators/typescript.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/state/index.d.ts +168 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +338 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/persistence.d.ts +91 -0
- package/dist/state/persistence.d.ts.map +1 -0
- package/dist/state/persistence.js +201 -0
- package/dist/state/persistence.js.map +1 -0
- package/dist/types/cli.d.ts +132 -0
- package/dist/types/cli.d.ts.map +1 -0
- package/dist/types/cli.js +17 -0
- package/dist/types/cli.js.map +1 -0
- package/dist/types/consensus.d.ts +111 -0
- package/dist/types/consensus.d.ts.map +1 -0
- package/dist/types/consensus.js +29 -0
- package/dist/types/consensus.js.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +13 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/project.d.ts +73 -0
- package/dist/types/project.d.ts.map +1 -0
- package/dist/types/project.js +55 -0
- package/dist/types/project.js.map +1 -0
- package/dist/types/workflow.d.ts +236 -0
- package/dist/types/workflow.d.ts.map +1 -0
- package/dist/types/workflow.js +74 -0
- package/dist/types/workflow.js.map +1 -0
- package/dist/workflow/consensus.d.ts +89 -0
- package/dist/workflow/consensus.d.ts.map +1 -0
- package/dist/workflow/consensus.js +220 -0
- package/dist/workflow/consensus.js.map +1 -0
- package/dist/workflow/execution-mode.d.ts +82 -0
- package/dist/workflow/execution-mode.d.ts.map +1 -0
- package/dist/workflow/execution-mode.js +346 -0
- package/dist/workflow/execution-mode.js.map +1 -0
- package/dist/workflow/index.d.ts +110 -0
- package/dist/workflow/index.d.ts.map +1 -0
- package/dist/workflow/index.js +283 -0
- package/dist/workflow/index.js.map +1 -0
- package/dist/workflow/plan-mode.d.ts +83 -0
- package/dist/workflow/plan-mode.d.ts.map +1 -0
- package/dist/workflow/plan-mode.js +241 -0
- package/dist/workflow/plan-mode.js.map +1 -0
- package/dist/workflow/test-runner.d.ts +87 -0
- package/dist/workflow/test-runner.d.ts.map +1 -0
- package/dist/workflow/test-runner.js +273 -0
- package/dist/workflow/test-runner.js.map +1 -0
- package/eslint.config.js +25 -0
- package/package.json +66 -0
- package/src/adapters/claude.ts +298 -0
- package/src/adapters/openai.ts +300 -0
- package/src/auth/claude.ts +166 -0
- package/src/auth/index.ts +171 -0
- package/src/auth/keychain.ts +138 -0
- package/src/auth/openai-entry.ts +410 -0
- package/src/auth/openai.ts +260 -0
- package/src/auth/server.ts +252 -0
- package/src/cli/commands/auth.ts +194 -0
- package/src/cli/commands/config.ts +241 -0
- package/src/cli/commands/create.ts +308 -0
- package/src/cli/commands/index.ts +10 -0
- package/src/cli/commands/resume.ts +304 -0
- package/src/cli/commands/status.ts +189 -0
- package/src/cli/index.ts +90 -0
- package/src/cli/interactive.ts +418 -0
- package/src/cli/output.ts +410 -0
- package/src/config/defaults.ts +114 -0
- package/src/config/index.ts +315 -0
- package/src/config/schema.ts +164 -0
- package/src/generators/index.ts +251 -0
- package/src/generators/python.ts +318 -0
- package/src/generators/templates/index.ts +6 -0
- package/src/generators/templates/python.ts +465 -0
- package/src/generators/templates/typescript.ts +417 -0
- package/src/generators/typescript.ts +340 -0
- package/src/index.ts +13 -0
- package/src/state/index.ts +454 -0
- package/src/state/persistence.ts +230 -0
- package/src/types/cli.ts +146 -0
- package/src/types/consensus.ts +116 -0
- package/src/types/index.ts +64 -0
- package/src/types/project.ts +85 -0
- package/src/types/workflow.ts +149 -0
- package/src/workflow/consensus.ts +299 -0
- package/src/workflow/execution-mode.ts +517 -0
- package/src/workflow/index.ts +396 -0
- package/src/workflow/plan-mode.ts +356 -0
- package/src/workflow/test-runner.ts +345 -0
- package/tests/adapters/openai.test.ts +145 -0
- package/tests/config/config.test.ts +208 -0
- package/tests/generators/generators.test.ts +185 -0
- package/tests/types/consensus.test.ts +152 -0
- package/tests/types/project.test.ts +134 -0
- package/tests/workflow/consensus.test.ts +221 -0
- package/tests/workflow/test-runner.test.ts +214 -0
- package/tsconfig.json +25 -0
- 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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"}
|