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,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test runner module
|
|
3
|
+
* Handles running tests for Python and TypeScript projects
|
|
4
|
+
*/
|
|
5
|
+
import type { OutputLanguage } from '../types/project.js';
|
|
6
|
+
/**
|
|
7
|
+
* Test result from running tests
|
|
8
|
+
*/
|
|
9
|
+
export interface TestResult {
|
|
10
|
+
success: boolean;
|
|
11
|
+
passed: number;
|
|
12
|
+
failed: number;
|
|
13
|
+
total: number;
|
|
14
|
+
output: string;
|
|
15
|
+
failedTests?: string[];
|
|
16
|
+
error?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Test configuration
|
|
20
|
+
*/
|
|
21
|
+
export interface TestConfig {
|
|
22
|
+
language: OutputLanguage;
|
|
23
|
+
testDir?: string;
|
|
24
|
+
coverage?: boolean;
|
|
25
|
+
verbose?: boolean;
|
|
26
|
+
timeout?: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Default test commands by language
|
|
30
|
+
*/
|
|
31
|
+
export declare const DEFAULT_TEST_COMMANDS: Record<OutputLanguage, string>;
|
|
32
|
+
/**
|
|
33
|
+
* Build the test command for a language
|
|
34
|
+
*
|
|
35
|
+
* @param config - Test configuration
|
|
36
|
+
* @returns The test command to run
|
|
37
|
+
*/
|
|
38
|
+
export declare function buildTestCommand(config: TestConfig): string;
|
|
39
|
+
/**
|
|
40
|
+
* Parse test output to extract results
|
|
41
|
+
*
|
|
42
|
+
* @param output - The test command output
|
|
43
|
+
* @param language - The project language
|
|
44
|
+
* @returns Parsed test result
|
|
45
|
+
*/
|
|
46
|
+
export declare function parseTestOutput(output: string, language: OutputLanguage): TestResult;
|
|
47
|
+
/**
|
|
48
|
+
* Run Python tests
|
|
49
|
+
*
|
|
50
|
+
* @param cwd - Working directory
|
|
51
|
+
* @param config - Test configuration
|
|
52
|
+
* @returns Test result
|
|
53
|
+
*/
|
|
54
|
+
export declare function runPythonTests(cwd: string, config?: Partial<TestConfig>): Promise<TestResult>;
|
|
55
|
+
/**
|
|
56
|
+
* Run TypeScript tests
|
|
57
|
+
*
|
|
58
|
+
* @param cwd - Working directory
|
|
59
|
+
* @param config - Test configuration
|
|
60
|
+
* @returns Test result
|
|
61
|
+
*/
|
|
62
|
+
export declare function runTypeScriptTests(cwd: string, config?: Partial<TestConfig>): Promise<TestResult>;
|
|
63
|
+
/**
|
|
64
|
+
* Run tests for a project
|
|
65
|
+
*
|
|
66
|
+
* @param cwd - Working directory
|
|
67
|
+
* @param language - Project language
|
|
68
|
+
* @param config - Test configuration
|
|
69
|
+
* @returns Test result
|
|
70
|
+
*/
|
|
71
|
+
export declare function runTests(cwd: string, language: OutputLanguage, config?: Partial<TestConfig>): Promise<TestResult>;
|
|
72
|
+
/**
|
|
73
|
+
* Check if tests exist in a project
|
|
74
|
+
*
|
|
75
|
+
* @param cwd - Working directory
|
|
76
|
+
* @param language - Project language
|
|
77
|
+
* @returns True if tests exist
|
|
78
|
+
*/
|
|
79
|
+
export declare function testsExist(cwd: string, language: OutputLanguage): Promise<boolean>;
|
|
80
|
+
/**
|
|
81
|
+
* Get test summary string
|
|
82
|
+
*
|
|
83
|
+
* @param result - Test result
|
|
84
|
+
* @returns Human-readable summary
|
|
85
|
+
*/
|
|
86
|
+
export declare function getTestSummary(result: TestResult): string;
|
|
87
|
+
//# sourceMappingURL=test-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-runner.d.ts","sourceRoot":"","sources":["../../src/workflow/test-runner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAGhE,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAkC3D;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,UAAU,CA6DpF;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,OAAO,CAAC,UAAU,CAAM,GAC/B,OAAO,CAAC,UAAU,CAAC,CA+BrB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,MAAM,GAAE,OAAO,CAAC,UAAU,CAAM,GAC/B,OAAO,CAAC,UAAU,CAAC,CA+BrB;AAED;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,cAAc,EACxB,MAAM,GAAE,OAAO,CAAC,UAAU,CAAM,GAC/B,OAAO,CAAC,UAAU,CAAC,CAOrB;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,OAAO,CAAC,CAkDlB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAiBzD"}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test runner module
|
|
3
|
+
* Handles running tests for Python and TypeScript projects
|
|
4
|
+
*/
|
|
5
|
+
import { runTests as claudeRunTests } from '../adapters/claude.js';
|
|
6
|
+
/**
|
|
7
|
+
* Default test commands by language
|
|
8
|
+
*/
|
|
9
|
+
export const DEFAULT_TEST_COMMANDS = {
|
|
10
|
+
python: 'python -m pytest tests/ -v',
|
|
11
|
+
typescript: 'npm test',
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Build the test command for a language
|
|
15
|
+
*
|
|
16
|
+
* @param config - Test configuration
|
|
17
|
+
* @returns The test command to run
|
|
18
|
+
*/
|
|
19
|
+
export function buildTestCommand(config) {
|
|
20
|
+
const { language, testDir, coverage, verbose } = config;
|
|
21
|
+
switch (language) {
|
|
22
|
+
case 'python': {
|
|
23
|
+
const parts = ['python', '-m', 'pytest'];
|
|
24
|
+
if (testDir) {
|
|
25
|
+
parts.push(testDir);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
parts.push('tests/');
|
|
29
|
+
}
|
|
30
|
+
if (verbose) {
|
|
31
|
+
parts.push('-v');
|
|
32
|
+
}
|
|
33
|
+
if (coverage) {
|
|
34
|
+
parts.push('--cov=src', '--cov-report=term-missing');
|
|
35
|
+
}
|
|
36
|
+
return parts.join(' ');
|
|
37
|
+
}
|
|
38
|
+
case 'typescript': {
|
|
39
|
+
const parts = ['npm', 'test'];
|
|
40
|
+
if (coverage) {
|
|
41
|
+
parts.push('--', '--coverage');
|
|
42
|
+
}
|
|
43
|
+
return parts.join(' ');
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Parse test output to extract results
|
|
49
|
+
*
|
|
50
|
+
* @param output - The test command output
|
|
51
|
+
* @param language - The project language
|
|
52
|
+
* @returns Parsed test result
|
|
53
|
+
*/
|
|
54
|
+
export function parseTestOutput(output, language) {
|
|
55
|
+
let passed = 0;
|
|
56
|
+
let failed = 0;
|
|
57
|
+
let total = 0;
|
|
58
|
+
const failedTests = [];
|
|
59
|
+
switch (language) {
|
|
60
|
+
case 'python': {
|
|
61
|
+
// Parse pytest output
|
|
62
|
+
// Example: "5 passed, 2 failed, 1 skipped in 2.34s"
|
|
63
|
+
const summaryMatch = output.match(/(\d+)\s+passed/);
|
|
64
|
+
const failedMatch = output.match(/(\d+)\s+failed/);
|
|
65
|
+
if (summaryMatch) {
|
|
66
|
+
passed = parseInt(summaryMatch[1], 10);
|
|
67
|
+
}
|
|
68
|
+
if (failedMatch) {
|
|
69
|
+
failed = parseInt(failedMatch[1], 10);
|
|
70
|
+
}
|
|
71
|
+
total = passed + failed;
|
|
72
|
+
// Extract failed test names
|
|
73
|
+
const failedTestMatches = output.matchAll(/FAILED\s+([^\s]+)/g);
|
|
74
|
+
for (const match of failedTestMatches) {
|
|
75
|
+
failedTests.push(match[1]);
|
|
76
|
+
}
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
case 'typescript': {
|
|
80
|
+
// Parse Jest/Vitest output
|
|
81
|
+
// Example: "Tests: 2 failed, 5 passed, 7 total"
|
|
82
|
+
const summaryMatch = output.match(/Tests:\s*(?:(\d+)\s+failed,\s*)?(\d+)\s+passed,\s*(\d+)\s+total/);
|
|
83
|
+
if (summaryMatch) {
|
|
84
|
+
failed = summaryMatch[1] ? parseInt(summaryMatch[1], 10) : 0;
|
|
85
|
+
passed = parseInt(summaryMatch[2], 10);
|
|
86
|
+
total = parseInt(summaryMatch[3], 10);
|
|
87
|
+
}
|
|
88
|
+
// Extract failed test names
|
|
89
|
+
const failedTestMatches = output.matchAll(/✕\s+(.+)/g);
|
|
90
|
+
for (const match of failedTestMatches) {
|
|
91
|
+
failedTests.push(match[1].trim());
|
|
92
|
+
}
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const success = failed === 0 && total > 0;
|
|
97
|
+
return {
|
|
98
|
+
success,
|
|
99
|
+
passed,
|
|
100
|
+
failed,
|
|
101
|
+
total,
|
|
102
|
+
output,
|
|
103
|
+
failedTests: failedTests.length > 0 ? failedTests : undefined,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Run Python tests
|
|
108
|
+
*
|
|
109
|
+
* @param cwd - Working directory
|
|
110
|
+
* @param config - Test configuration
|
|
111
|
+
* @returns Test result
|
|
112
|
+
*/
|
|
113
|
+
export async function runPythonTests(cwd, config = {}) {
|
|
114
|
+
const testCommand = buildTestCommand({
|
|
115
|
+
language: 'python',
|
|
116
|
+
...config,
|
|
117
|
+
});
|
|
118
|
+
try {
|
|
119
|
+
const result = await claudeRunTests(testCommand, cwd);
|
|
120
|
+
if (!result.success && result.error) {
|
|
121
|
+
return {
|
|
122
|
+
success: false,
|
|
123
|
+
passed: 0,
|
|
124
|
+
failed: 0,
|
|
125
|
+
total: 0,
|
|
126
|
+
output: result.response,
|
|
127
|
+
error: result.error,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
return parseTestOutput(result.response, 'python');
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
return {
|
|
134
|
+
success: false,
|
|
135
|
+
passed: 0,
|
|
136
|
+
failed: 0,
|
|
137
|
+
total: 0,
|
|
138
|
+
output: '',
|
|
139
|
+
error: error instanceof Error ? error.message : 'Unknown error running tests',
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Run TypeScript tests
|
|
145
|
+
*
|
|
146
|
+
* @param cwd - Working directory
|
|
147
|
+
* @param config - Test configuration
|
|
148
|
+
* @returns Test result
|
|
149
|
+
*/
|
|
150
|
+
export async function runTypeScriptTests(cwd, config = {}) {
|
|
151
|
+
const testCommand = buildTestCommand({
|
|
152
|
+
language: 'typescript',
|
|
153
|
+
...config,
|
|
154
|
+
});
|
|
155
|
+
try {
|
|
156
|
+
const result = await claudeRunTests(testCommand, cwd);
|
|
157
|
+
if (!result.success && result.error) {
|
|
158
|
+
return {
|
|
159
|
+
success: false,
|
|
160
|
+
passed: 0,
|
|
161
|
+
failed: 0,
|
|
162
|
+
total: 0,
|
|
163
|
+
output: result.response,
|
|
164
|
+
error: result.error,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
return parseTestOutput(result.response, 'typescript');
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
return {
|
|
171
|
+
success: false,
|
|
172
|
+
passed: 0,
|
|
173
|
+
failed: 0,
|
|
174
|
+
total: 0,
|
|
175
|
+
output: '',
|
|
176
|
+
error: error instanceof Error ? error.message : 'Unknown error running tests',
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Run tests for a project
|
|
182
|
+
*
|
|
183
|
+
* @param cwd - Working directory
|
|
184
|
+
* @param language - Project language
|
|
185
|
+
* @param config - Test configuration
|
|
186
|
+
* @returns Test result
|
|
187
|
+
*/
|
|
188
|
+
export async function runTests(cwd, language, config = {}) {
|
|
189
|
+
switch (language) {
|
|
190
|
+
case 'python':
|
|
191
|
+
return runPythonTests(cwd, config);
|
|
192
|
+
case 'typescript':
|
|
193
|
+
return runTypeScriptTests(cwd, config);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Check if tests exist in a project
|
|
198
|
+
*
|
|
199
|
+
* @param cwd - Working directory
|
|
200
|
+
* @param language - Project language
|
|
201
|
+
* @returns True if tests exist
|
|
202
|
+
*/
|
|
203
|
+
export async function testsExist(cwd, language) {
|
|
204
|
+
const { promises: fs } = await import('node:fs');
|
|
205
|
+
const path = await import('node:path');
|
|
206
|
+
try {
|
|
207
|
+
switch (language) {
|
|
208
|
+
case 'python': {
|
|
209
|
+
// Check for tests/ directory or test_*.py files
|
|
210
|
+
const testsDir = path.join(cwd, 'tests');
|
|
211
|
+
try {
|
|
212
|
+
await fs.access(testsDir);
|
|
213
|
+
return true;
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
// Check for test files in root
|
|
217
|
+
const files = await fs.readdir(cwd);
|
|
218
|
+
return files.some((f) => f.startsWith('test_') && f.endsWith('.py'));
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
case 'typescript': {
|
|
222
|
+
// Check for tests/, __tests__, or *.test.ts files
|
|
223
|
+
const testsDir = path.join(cwd, 'tests');
|
|
224
|
+
const testsDirAlt = path.join(cwd, '__tests__');
|
|
225
|
+
try {
|
|
226
|
+
await fs.access(testsDir);
|
|
227
|
+
return true;
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
try {
|
|
231
|
+
await fs.access(testsDirAlt);
|
|
232
|
+
return true;
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
// Check for test files in src
|
|
236
|
+
const srcDir = path.join(cwd, 'src');
|
|
237
|
+
try {
|
|
238
|
+
const files = await fs.readdir(srcDir, { recursive: true });
|
|
239
|
+
return files.some((f) => (f.toString().endsWith('.test.ts') || f.toString().endsWith('.spec.ts')));
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
return false;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Get test summary string
|
|
255
|
+
*
|
|
256
|
+
* @param result - Test result
|
|
257
|
+
* @returns Human-readable summary
|
|
258
|
+
*/
|
|
259
|
+
export function getTestSummary(result) {
|
|
260
|
+
if (result.error) {
|
|
261
|
+
return `Tests failed to run: ${result.error}`;
|
|
262
|
+
}
|
|
263
|
+
if (result.total === 0) {
|
|
264
|
+
return 'No tests found';
|
|
265
|
+
}
|
|
266
|
+
const status = result.success ? '✓' : '✗';
|
|
267
|
+
let summary = `${status} ${result.passed}/${result.total} tests passed`;
|
|
268
|
+
if (result.failed > 0) {
|
|
269
|
+
summary += ` (${result.failed} failed)`;
|
|
270
|
+
}
|
|
271
|
+
return summary;
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=test-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-runner.js","sourceRoot":"","sources":["../../src/workflow/test-runner.ts"],"names":[],"mappings":"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"}
|
package/eslint.config.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import eslint from '@eslint/js';
|
|
2
|
+
import tseslint from 'typescript-eslint';
|
|
3
|
+
|
|
4
|
+
export default tseslint.config(
|
|
5
|
+
eslint.configs.recommended,
|
|
6
|
+
...tseslint.configs.recommended,
|
|
7
|
+
{
|
|
8
|
+
files: ['src/**/*.ts'],
|
|
9
|
+
languageOptions: {
|
|
10
|
+
parserOptions: {
|
|
11
|
+
project: './tsconfig.json',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
rules: {
|
|
15
|
+
'@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
|
|
16
|
+
'@typescript-eslint/explicit-function-return-type': 'off',
|
|
17
|
+
'@typescript-eslint/no-explicit-any': 'warn',
|
|
18
|
+
'@typescript-eslint/prefer-nullish-coalescing': 'off',
|
|
19
|
+
'no-console': 'off',
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
ignores: ['dist/**', 'node_modules/**', '*.config.js', '*.config.ts'],
|
|
24
|
+
}
|
|
25
|
+
);
|
package/package.json
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "popeye-cli",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Fully autonomous code generation tool powered by Claude CLI and OpenAI consensus",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"popeye": "./dist/index.js",
|
|
8
|
+
"popeye-cli": "./dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"type": "module",
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"dev": "tsc --watch",
|
|
14
|
+
"start": "node dist/index.js",
|
|
15
|
+
"test": "vitest run",
|
|
16
|
+
"test:watch": "vitest",
|
|
17
|
+
"test:coverage": "vitest run --coverage",
|
|
18
|
+
"lint": "eslint src --ext .ts",
|
|
19
|
+
"lint:fix": "eslint src --ext .ts --fix",
|
|
20
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
21
|
+
"typecheck": "tsc --noEmit",
|
|
22
|
+
"clean": "rm -rf dist",
|
|
23
|
+
"prepublishOnly": "npm run build"
|
|
24
|
+
},
|
|
25
|
+
"keywords": [
|
|
26
|
+
"cli",
|
|
27
|
+
"code-generation",
|
|
28
|
+
"claude",
|
|
29
|
+
"openai",
|
|
30
|
+
"ai",
|
|
31
|
+
"autonomous",
|
|
32
|
+
"typescript"
|
|
33
|
+
],
|
|
34
|
+
"author": "",
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=18.0.0"
|
|
38
|
+
},
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@anthropic-ai/claude-agent-sdk": "^0.2.12",
|
|
41
|
+
"chalk": "^5.3.0",
|
|
42
|
+
"commander": "^12.1.0",
|
|
43
|
+
"cosmiconfig": "^9.0.0",
|
|
44
|
+
"express": "^4.21.0",
|
|
45
|
+
"keytar": "^7.9.0",
|
|
46
|
+
"open": "^10.1.0",
|
|
47
|
+
"openai": "^4.73.0",
|
|
48
|
+
"ora": "^8.1.0",
|
|
49
|
+
"uuid": "^10.0.0",
|
|
50
|
+
"yaml": "^2.6.0",
|
|
51
|
+
"zod": "^4.0.0"
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"@types/express": "^4.17.21",
|
|
55
|
+
"@types/node": "^20.17.6",
|
|
56
|
+
"@types/uuid": "^10.0.0",
|
|
57
|
+
"@typescript-eslint/eslint-plugin": "^8.14.0",
|
|
58
|
+
"@typescript-eslint/parser": "^8.14.0",
|
|
59
|
+
"@vitest/coverage-v8": "^2.1.4",
|
|
60
|
+
"eslint": "^9.14.0",
|
|
61
|
+
"prettier": "^3.3.3",
|
|
62
|
+
"typescript": "^5.6.3",
|
|
63
|
+
"typescript-eslint": "^8.53.1",
|
|
64
|
+
"vitest": "^2.1.4"
|
|
65
|
+
}
|
|
66
|
+
}
|