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,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python project generator
|
|
3
|
+
* Creates complete Python project scaffolding
|
|
4
|
+
*/
|
|
5
|
+
import type { ProjectSpec } from '../types/project.js';
|
|
6
|
+
/**
|
|
7
|
+
* Project generation result
|
|
8
|
+
*/
|
|
9
|
+
export interface GenerationResult {
|
|
10
|
+
success: boolean;
|
|
11
|
+
projectDir: string;
|
|
12
|
+
filesCreated: string[];
|
|
13
|
+
error?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Generate a complete Python project
|
|
17
|
+
*
|
|
18
|
+
* @param spec - Project specification
|
|
19
|
+
* @param outputDir - Output directory
|
|
20
|
+
* @returns Generation result
|
|
21
|
+
*/
|
|
22
|
+
export declare function generatePythonProject(spec: ProjectSpec, outputDir: string): Promise<GenerationResult>;
|
|
23
|
+
/**
|
|
24
|
+
* Get the list of files that would be generated
|
|
25
|
+
*
|
|
26
|
+
* @param projectName - Project name
|
|
27
|
+
* @returns List of relative file paths
|
|
28
|
+
*/
|
|
29
|
+
export declare function getPythonProjectFiles(projectName: string): string[];
|
|
30
|
+
/**
|
|
31
|
+
* Validate a Python project structure
|
|
32
|
+
*
|
|
33
|
+
* @param projectDir - Project directory
|
|
34
|
+
* @returns Validation result
|
|
35
|
+
*/
|
|
36
|
+
export declare function validatePythonProject(projectDir: string): Promise<{
|
|
37
|
+
valid: boolean;
|
|
38
|
+
missingFiles: string[];
|
|
39
|
+
}>;
|
|
40
|
+
/**
|
|
41
|
+
* Add a new Python module to an existing project
|
|
42
|
+
*
|
|
43
|
+
* @param projectDir - Project directory
|
|
44
|
+
* @param moduleName - Module name
|
|
45
|
+
* @returns Files created
|
|
46
|
+
*/
|
|
47
|
+
export declare function addPythonModule(projectDir: string, moduleName: string): Promise<string[]>;
|
|
48
|
+
//# sourceMappingURL=python.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../src/generators/python.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAgBvD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAuBD;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,gBAAgB,CAAC,CAuG3B;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAoBnE;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IACvE,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC,CAwBD;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CA2EnB"}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python project generator
|
|
3
|
+
* Creates complete Python project scaffolding
|
|
4
|
+
*/
|
|
5
|
+
import { promises as fs } from 'node:fs';
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
import { generatePyprojectToml, generateRequirementsTxt, generateMainInit, generateMainPy, generateConftest, generateTestMain, generateDockerfile, generateDockerCompose, generateGitignore, generateEnvExample, generateReadme, generateMakefile, } from './templates/python.js';
|
|
8
|
+
/**
|
|
9
|
+
* Create a directory if it doesn't exist
|
|
10
|
+
*/
|
|
11
|
+
async function ensureDir(dirPath) {
|
|
12
|
+
await fs.mkdir(dirPath, { recursive: true });
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Write a file with content
|
|
16
|
+
*/
|
|
17
|
+
async function writeFile(filePath, content) {
|
|
18
|
+
await fs.writeFile(filePath, content, 'utf-8');
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Convert project name to Python package name
|
|
22
|
+
*/
|
|
23
|
+
function toPythonPackageName(name) {
|
|
24
|
+
return name.toLowerCase().replace(/-/g, '_').replace(/[^a-z0-9_]/g, '');
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Generate a complete Python project
|
|
28
|
+
*
|
|
29
|
+
* @param spec - Project specification
|
|
30
|
+
* @param outputDir - Output directory
|
|
31
|
+
* @returns Generation result
|
|
32
|
+
*/
|
|
33
|
+
export async function generatePythonProject(spec, outputDir) {
|
|
34
|
+
const projectName = spec.name || 'my-project';
|
|
35
|
+
const packageName = toPythonPackageName(projectName);
|
|
36
|
+
const projectDir = path.join(outputDir, projectName);
|
|
37
|
+
const filesCreated = [];
|
|
38
|
+
try {
|
|
39
|
+
// Create project directory structure
|
|
40
|
+
await ensureDir(projectDir);
|
|
41
|
+
await ensureDir(path.join(projectDir, 'src', packageName));
|
|
42
|
+
await ensureDir(path.join(projectDir, 'tests'));
|
|
43
|
+
await ensureDir(path.join(projectDir, 'data'));
|
|
44
|
+
// Generate and write files
|
|
45
|
+
const files = [
|
|
46
|
+
// Root files
|
|
47
|
+
{
|
|
48
|
+
path: path.join(projectDir, 'pyproject.toml'),
|
|
49
|
+
content: generatePyprojectToml(projectName),
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
path: path.join(projectDir, 'requirements.txt'),
|
|
53
|
+
content: generateRequirementsTxt(),
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
path: path.join(projectDir, '.gitignore'),
|
|
57
|
+
content: generateGitignore(),
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
path: path.join(projectDir, '.env.example'),
|
|
61
|
+
content: generateEnvExample(),
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
path: path.join(projectDir, 'README.md'),
|
|
65
|
+
content: generateReadme(projectName, spec.idea),
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
path: path.join(projectDir, 'Makefile'),
|
|
69
|
+
content: generateMakefile(projectName),
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
path: path.join(projectDir, 'Dockerfile'),
|
|
73
|
+
content: generateDockerfile(projectName),
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
path: path.join(projectDir, 'docker-compose.yml'),
|
|
77
|
+
content: generateDockerCompose(projectName),
|
|
78
|
+
},
|
|
79
|
+
// Source files
|
|
80
|
+
{
|
|
81
|
+
path: path.join(projectDir, 'src', packageName, '__init__.py'),
|
|
82
|
+
content: generateMainInit(projectName),
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
path: path.join(projectDir, 'src', packageName, 'main.py'),
|
|
86
|
+
content: generateMainPy(projectName),
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
path: path.join(projectDir, 'src', '__init__.py'),
|
|
90
|
+
content: '# Source root\n',
|
|
91
|
+
},
|
|
92
|
+
// Test files
|
|
93
|
+
{
|
|
94
|
+
path: path.join(projectDir, 'tests', '__init__.py'),
|
|
95
|
+
content: '# Tests package\n',
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
path: path.join(projectDir, 'tests', 'conftest.py'),
|
|
99
|
+
content: generateConftest(),
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
path: path.join(projectDir, 'tests', 'test_main.py'),
|
|
103
|
+
content: generateTestMain(projectName),
|
|
104
|
+
},
|
|
105
|
+
// Data placeholder
|
|
106
|
+
{
|
|
107
|
+
path: path.join(projectDir, 'data', '.gitkeep'),
|
|
108
|
+
content: '',
|
|
109
|
+
},
|
|
110
|
+
];
|
|
111
|
+
// Write all files
|
|
112
|
+
for (const file of files) {
|
|
113
|
+
await writeFile(file.path, file.content);
|
|
114
|
+
filesCreated.push(file.path);
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
success: true,
|
|
118
|
+
projectDir,
|
|
119
|
+
filesCreated,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
return {
|
|
124
|
+
success: false,
|
|
125
|
+
projectDir,
|
|
126
|
+
filesCreated,
|
|
127
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Get the list of files that would be generated
|
|
133
|
+
*
|
|
134
|
+
* @param projectName - Project name
|
|
135
|
+
* @returns List of relative file paths
|
|
136
|
+
*/
|
|
137
|
+
export function getPythonProjectFiles(projectName) {
|
|
138
|
+
const packageName = toPythonPackageName(projectName);
|
|
139
|
+
return [
|
|
140
|
+
'pyproject.toml',
|
|
141
|
+
'requirements.txt',
|
|
142
|
+
'.gitignore',
|
|
143
|
+
'.env.example',
|
|
144
|
+
'README.md',
|
|
145
|
+
'Makefile',
|
|
146
|
+
'Dockerfile',
|
|
147
|
+
'docker-compose.yml',
|
|
148
|
+
`src/${packageName}/__init__.py`,
|
|
149
|
+
`src/${packageName}/main.py`,
|
|
150
|
+
'src/__init__.py',
|
|
151
|
+
'tests/__init__.py',
|
|
152
|
+
'tests/conftest.py',
|
|
153
|
+
'tests/test_main.py',
|
|
154
|
+
'data/.gitkeep',
|
|
155
|
+
];
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Validate a Python project structure
|
|
159
|
+
*
|
|
160
|
+
* @param projectDir - Project directory
|
|
161
|
+
* @returns Validation result
|
|
162
|
+
*/
|
|
163
|
+
export async function validatePythonProject(projectDir) {
|
|
164
|
+
const missingFiles = [];
|
|
165
|
+
const requiredFiles = [
|
|
166
|
+
'pyproject.toml',
|
|
167
|
+
'requirements.txt',
|
|
168
|
+
'README.md',
|
|
169
|
+
'src',
|
|
170
|
+
'tests',
|
|
171
|
+
];
|
|
172
|
+
for (const file of requiredFiles) {
|
|
173
|
+
const filePath = path.join(projectDir, file);
|
|
174
|
+
try {
|
|
175
|
+
await fs.access(filePath);
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
missingFiles.push(file);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return {
|
|
182
|
+
valid: missingFiles.length === 0,
|
|
183
|
+
missingFiles,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Add a new Python module to an existing project
|
|
188
|
+
*
|
|
189
|
+
* @param projectDir - Project directory
|
|
190
|
+
* @param moduleName - Module name
|
|
191
|
+
* @returns Files created
|
|
192
|
+
*/
|
|
193
|
+
export async function addPythonModule(projectDir, moduleName) {
|
|
194
|
+
const packageName = toPythonPackageName(moduleName);
|
|
195
|
+
const filesCreated = [];
|
|
196
|
+
// Find the src directory
|
|
197
|
+
const srcDir = path.join(projectDir, 'src');
|
|
198
|
+
const dirs = await fs.readdir(srcDir);
|
|
199
|
+
const packageDir = dirs.find((d) => !d.startsWith('.') && d !== '__init__.py');
|
|
200
|
+
if (!packageDir) {
|
|
201
|
+
throw new Error('Could not find package directory in src/');
|
|
202
|
+
}
|
|
203
|
+
const moduleDir = path.join(srcDir, packageDir, packageName);
|
|
204
|
+
await ensureDir(moduleDir);
|
|
205
|
+
// Create module files
|
|
206
|
+
const initContent = `"""
|
|
207
|
+
${moduleName} module.
|
|
208
|
+
"""
|
|
209
|
+
`;
|
|
210
|
+
await writeFile(path.join(moduleDir, '__init__.py'), initContent);
|
|
211
|
+
filesCreated.push(path.join(moduleDir, '__init__.py'));
|
|
212
|
+
const moduleContent = `"""
|
|
213
|
+
${moduleName} implementation.
|
|
214
|
+
"""
|
|
215
|
+
|
|
216
|
+
import logging
|
|
217
|
+
|
|
218
|
+
logger = logging.getLogger(__name__)
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
class ${moduleName.charAt(0).toUpperCase() + moduleName.slice(1).replace(/-/g, '')}:
|
|
222
|
+
"""
|
|
223
|
+
${moduleName} class.
|
|
224
|
+
"""
|
|
225
|
+
|
|
226
|
+
def __init__(self) -> None:
|
|
227
|
+
"""Initialize ${moduleName}."""
|
|
228
|
+
logger.info(f"Initializing {self.__class__.__name__}")
|
|
229
|
+
|
|
230
|
+
def run(self) -> None:
|
|
231
|
+
"""
|
|
232
|
+
Run the ${moduleName} logic.
|
|
233
|
+
|
|
234
|
+
This method should be implemented with the actual functionality.
|
|
235
|
+
"""
|
|
236
|
+
raise NotImplementedError("Implement this method")
|
|
237
|
+
`;
|
|
238
|
+
await writeFile(path.join(moduleDir, 'module.py'), moduleContent);
|
|
239
|
+
filesCreated.push(path.join(moduleDir, 'module.py'));
|
|
240
|
+
// Create test file
|
|
241
|
+
const testDir = path.join(projectDir, 'tests');
|
|
242
|
+
const testContent = `"""
|
|
243
|
+
Tests for ${moduleName} module.
|
|
244
|
+
"""
|
|
245
|
+
|
|
246
|
+
import pytest
|
|
247
|
+
|
|
248
|
+
# from src.${packageDir}.${packageName}.module import ${moduleName.charAt(0).toUpperCase() + moduleName.slice(1).replace(/-/g, '')}
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
class Test${moduleName.charAt(0).toUpperCase() + moduleName.slice(1).replace(/-/g, '')}:
|
|
252
|
+
"""Test cases for ${moduleName}."""
|
|
253
|
+
|
|
254
|
+
def test_placeholder(self) -> None:
|
|
255
|
+
"""Placeholder test."""
|
|
256
|
+
assert True
|
|
257
|
+
`;
|
|
258
|
+
await writeFile(path.join(testDir, `test_${packageName}.py`), testContent);
|
|
259
|
+
filesCreated.push(path.join(testDir, `test_${packageName}.py`));
|
|
260
|
+
return filesCreated;
|
|
261
|
+
}
|
|
262
|
+
//# sourceMappingURL=python.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python.js","sourceRoot":"","sources":["../../src/generators/python.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAY/B;;GAEG;AACH,KAAK,UAAU,SAAS,CAAC,OAAe;IACtC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,OAAe;IACxD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,IAAY;IACvC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAAiB,EACjB,SAAiB;IAEjB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC;IAC9C,MAAM,WAAW,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACrD,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,IAAI,CAAC;QACH,qCAAqC;QACrC,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC;QAC5B,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;QAC3D,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QAChD,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QAE/C,2BAA2B;QAC3B,MAAM,KAAK,GAA6C;YACtD,aAAa;YACb;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC;gBAC7C,OAAO,EAAE,qBAAqB,CAAC,WAAW,CAAC;aAC5C;YACD;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC;gBAC/C,OAAO,EAAE,uBAAuB,EAAE;aACnC;YACD;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC;gBACzC,OAAO,EAAE,iBAAiB,EAAE;aAC7B;YACD;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC;gBAC3C,OAAO,EAAE,kBAAkB,EAAE;aAC9B;YACD;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC;gBACxC,OAAO,EAAE,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC;aAChD;YACD;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC;gBACvC,OAAO,EAAE,gBAAgB,CAAC,WAAW,CAAC;aACvC;YACD;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC;gBACzC,OAAO,EAAE,kBAAkB,CAAC,WAAW,CAAC;aACzC;YACD;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC;gBACjD,OAAO,EAAE,qBAAqB,CAAC,WAAW,CAAC;aAC5C;YAED,eAAe;YACf;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,CAAC;gBAC9D,OAAO,EAAE,gBAAgB,CAAC,WAAW,CAAC;aACvC;YACD;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,CAAC;gBAC1D,OAAO,EAAE,cAAc,CAAC,WAAW,CAAC;aACrC;YACD;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,aAAa,CAAC;gBACjD,OAAO,EAAE,iBAAiB;aAC3B;YAED,aAAa;YACb;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,aAAa,CAAC;gBACnD,OAAO,EAAE,mBAAmB;aAC7B;YACD;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,aAAa,CAAC;gBACnD,OAAO,EAAE,gBAAgB,EAAE;aAC5B;YACD;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,cAAc,CAAC;gBACpD,OAAO,EAAE,gBAAgB,CAAC,WAAW,CAAC;aACvC;YAED,mBAAmB;YACnB;gBACE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC;gBAC/C,OAAO,EAAE,EAAE;aACZ;SACF,CAAC;QAEF,kBAAkB;QAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACzC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,UAAU;YACV,YAAY;SACb,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,UAAU;YACV,YAAY;YACZ,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,WAAmB;IACvD,MAAM,WAAW,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAErD,OAAO;QACL,gBAAgB;QAChB,kBAAkB;QAClB,YAAY;QACZ,cAAc;QACd,WAAW;QACX,UAAU;QACV,YAAY;QACZ,oBAAoB;QACpB,OAAO,WAAW,cAAc;QAChC,OAAO,WAAW,UAAU;QAC5B,iBAAiB;QACjB,mBAAmB;QACnB,mBAAmB;QACnB,oBAAoB;QACpB,eAAe;KAChB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,UAAkB;IAI5D,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,MAAM,aAAa,GAAG;QACpB,gBAAgB;QAChB,kBAAkB;QAClB,WAAW;QACX,KAAK;QACL,OAAO;KACR,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,YAAY,CAAC,MAAM,KAAK,CAAC;QAChC,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,UAAkB,EAClB,UAAkB;IAElB,MAAM,WAAW,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACpD,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,yBAAyB;IACzB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,aAAa,CAAC,CAAC;IAE/E,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAC7D,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;IAE3B,sBAAsB;IACtB,MAAM,WAAW,GAAG;EACpB,UAAU;;CAEX,CAAC;IACA,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,WAAW,CAAC,CAAC;IAClE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAEvD,MAAM,aAAa,GAAG;EACtB,UAAU;;;;;;;;QAQJ,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;;MAE5E,UAAU;;;;wBAIQ,UAAU;;;;;kBAKhB,UAAU;;;;;CAK3B,CAAC;IACA,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,aAAa,CAAC,CAAC;IAClE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IAErD,mBAAmB;IACnB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG;YACV,UAAU;;;;;aAKT,UAAU,IAAI,WAAW,kBAAkB,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;;;YAGtH,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;wBAC9D,UAAU;;;;;CAKjC,CAAC;IACA,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,WAAW,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;IAC3E,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,WAAW,KAAK,CAAC,CAAC,CAAC;IAEhE,OAAO,YAAY,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generators/templates/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,eAAe,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,mBAAmB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/generators/templates/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,eAAe,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,mBAAmB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Python project templates
|
|
3
|
+
* Provides template files for Python project generation
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Generate pyproject.toml content
|
|
7
|
+
*/
|
|
8
|
+
export declare function generatePyprojectToml(projectName: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Generate requirements.txt content
|
|
11
|
+
*/
|
|
12
|
+
export declare function generateRequirementsTxt(): string;
|
|
13
|
+
/**
|
|
14
|
+
* Generate main __init__.py content
|
|
15
|
+
*/
|
|
16
|
+
export declare function generateMainInit(projectName: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Generate main.py content
|
|
19
|
+
*/
|
|
20
|
+
export declare function generateMainPy(projectName: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* Generate conftest.py content
|
|
23
|
+
*/
|
|
24
|
+
export declare function generateConftest(): string;
|
|
25
|
+
/**
|
|
26
|
+
* Generate test_main.py content
|
|
27
|
+
*/
|
|
28
|
+
export declare function generateTestMain(projectName: string): string;
|
|
29
|
+
/**
|
|
30
|
+
* Generate Dockerfile content
|
|
31
|
+
*/
|
|
32
|
+
export declare function generateDockerfile(projectName: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Generate docker-compose.yml content
|
|
35
|
+
*/
|
|
36
|
+
export declare function generateDockerCompose(projectName: string): string;
|
|
37
|
+
/**
|
|
38
|
+
* Generate .gitignore content
|
|
39
|
+
*/
|
|
40
|
+
export declare function generateGitignore(): string;
|
|
41
|
+
/**
|
|
42
|
+
* Generate .env.example content
|
|
43
|
+
*/
|
|
44
|
+
export declare function generateEnvExample(): string;
|
|
45
|
+
/**
|
|
46
|
+
* Generate README.md content
|
|
47
|
+
*/
|
|
48
|
+
export declare function generateReadme(projectName: string, description: string): string;
|
|
49
|
+
/**
|
|
50
|
+
* Generate Makefile content
|
|
51
|
+
*/
|
|
52
|
+
export declare function generateMakefile(_projectName: string): string;
|
|
53
|
+
//# sourceMappingURL=python.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../../src/generators/templates/python.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAuDjE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,CAYhD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAS5D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CA+B1D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAoBzC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAgC5D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAwC9D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAyBjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CA6E1C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAW3C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAyD/E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAgC7D"}
|