red64-cli 0.1.0 → 0.2.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/dist/cli/parseArgs.d.ts.map +1 -1
- package/dist/cli/parseArgs.js +5 -0
- package/dist/cli/parseArgs.js.map +1 -1
- package/dist/components/init/CompleteStep.d.ts.map +1 -1
- package/dist/components/init/CompleteStep.js +2 -2
- package/dist/components/init/CompleteStep.js.map +1 -1
- package/dist/components/init/TestCheckStep.d.ts +16 -0
- package/dist/components/init/TestCheckStep.d.ts.map +1 -0
- package/dist/components/init/TestCheckStep.js +120 -0
- package/dist/components/init/TestCheckStep.js.map +1 -0
- package/dist/components/init/index.d.ts +1 -0
- package/dist/components/init/index.d.ts.map +1 -1
- package/dist/components/init/index.js +1 -0
- package/dist/components/init/index.js.map +1 -1
- package/dist/components/init/types.d.ts +9 -0
- package/dist/components/init/types.d.ts.map +1 -1
- package/dist/components/screens/InitScreen.d.ts.map +1 -1
- package/dist/components/screens/InitScreen.js +69 -6
- package/dist/components/screens/InitScreen.js.map +1 -1
- package/dist/components/screens/StartScreen.d.ts.map +1 -1
- package/dist/components/screens/StartScreen.js +89 -3
- package/dist/components/screens/StartScreen.js.map +1 -1
- package/dist/services/ConfigService.d.ts +1 -0
- package/dist/services/ConfigService.d.ts.map +1 -1
- package/dist/services/ConfigService.js.map +1 -1
- package/dist/services/ProjectDetector.d.ts +28 -0
- package/dist/services/ProjectDetector.d.ts.map +1 -0
- package/dist/services/ProjectDetector.js +236 -0
- package/dist/services/ProjectDetector.js.map +1 -0
- package/dist/services/TestRunner.d.ts +46 -0
- package/dist/services/TestRunner.d.ts.map +1 -0
- package/dist/services/TestRunner.js +85 -0
- package/dist/services/TestRunner.js.map +1 -0
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +2 -0
- package/dist/services/index.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/framework/agents/claude/.claude/agents/red64/spec-impl.md +131 -2
- package/framework/agents/claude/.claude/commands/red64/spec-impl.md +24 -0
- package/framework/agents/codex/.codex/agents/red64/spec-impl.md +131 -2
- package/framework/agents/codex/.codex/commands/red64/spec-impl.md +24 -0
- package/framework/stacks/generic/feedback.md +80 -0
- package/framework/stacks/nextjs/accessibility.md +437 -0
- package/framework/stacks/nextjs/api.md +431 -0
- package/framework/stacks/nextjs/coding-style.md +282 -0
- package/framework/stacks/nextjs/commenting.md +226 -0
- package/framework/stacks/nextjs/components.md +411 -0
- package/framework/stacks/nextjs/conventions.md +333 -0
- package/framework/stacks/nextjs/css.md +310 -0
- package/framework/stacks/nextjs/error-handling.md +442 -0
- package/framework/stacks/nextjs/feedback.md +124 -0
- package/framework/stacks/nextjs/migrations.md +332 -0
- package/framework/stacks/nextjs/models.md +362 -0
- package/framework/stacks/nextjs/queries.md +410 -0
- package/framework/stacks/nextjs/responsive.md +338 -0
- package/framework/stacks/nextjs/tech-stack.md +177 -0
- package/framework/stacks/nextjs/test-writing.md +475 -0
- package/framework/stacks/nextjs/validation.md +467 -0
- package/framework/stacks/python/api.md +468 -0
- package/framework/stacks/python/authentication.md +342 -0
- package/framework/stacks/python/code-quality.md +283 -0
- package/framework/stacks/python/code-refactoring.md +315 -0
- package/framework/stacks/python/coding-style.md +462 -0
- package/framework/stacks/python/conventions.md +399 -0
- package/framework/stacks/python/error-handling.md +512 -0
- package/framework/stacks/python/feedback.md +92 -0
- package/framework/stacks/python/implement-ai-llm.md +468 -0
- package/framework/stacks/python/migrations.md +388 -0
- package/framework/stacks/python/models.md +399 -0
- package/framework/stacks/python/python.md +232 -0
- package/framework/stacks/python/queries.md +451 -0
- package/framework/stacks/python/structure.md +245 -58
- package/framework/stacks/python/tech.md +92 -35
- package/framework/stacks/python/testing.md +380 -0
- package/framework/stacks/python/validation.md +471 -0
- package/framework/stacks/rails/authentication.md +176 -0
- package/framework/stacks/rails/code-quality.md +287 -0
- package/framework/stacks/rails/code-refactoring.md +299 -0
- package/framework/stacks/rails/feedback.md +130 -0
- package/framework/stacks/rails/implement-ai-llm-with-rubyllm.md +342 -0
- package/framework/stacks/rails/rails.md +301 -0
- package/framework/stacks/rails/rails8-best-practices.md +498 -0
- package/framework/stacks/rails/rails8-css.md +573 -0
- package/framework/stacks/rails/structure.md +140 -0
- package/framework/stacks/rails/tech.md +108 -0
- package/framework/stacks/react/code-quality.md +521 -0
- package/framework/stacks/react/components.md +625 -0
- package/framework/stacks/react/data-fetching.md +586 -0
- package/framework/stacks/react/feedback.md +110 -0
- package/framework/stacks/react/forms.md +694 -0
- package/framework/stacks/react/performance.md +640 -0
- package/framework/stacks/react/product.md +22 -9
- package/framework/stacks/react/state-management.md +472 -0
- package/framework/stacks/react/structure.md +351 -44
- package/framework/stacks/react/tech.md +219 -30
- package/framework/stacks/react/testing.md +690 -0
- package/package.json +1 -1
- package/framework/stacks/node/product.md +0 -27
- package/framework/stacks/node/structure.md +0 -82
- package/framework/stacks/node/tech.md +0 -63
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectDetector.js","sourceRoot":"","sources":["../../src/services/ProjectDetector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Runner Service
|
|
3
|
+
* Executes project tests and reports results
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Test execution result
|
|
7
|
+
*/
|
|
8
|
+
export interface TestResult {
|
|
9
|
+
readonly success: boolean;
|
|
10
|
+
readonly exitCode: number;
|
|
11
|
+
readonly stdout: string;
|
|
12
|
+
readonly stderr: string;
|
|
13
|
+
readonly durationMs: number;
|
|
14
|
+
readonly timedOut: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Test runner options
|
|
18
|
+
*/
|
|
19
|
+
export interface TestRunnerOptions {
|
|
20
|
+
readonly testCommand: string;
|
|
21
|
+
readonly workingDir: string;
|
|
22
|
+
readonly timeoutMs?: number;
|
|
23
|
+
readonly onOutput?: (chunk: string) => void;
|
|
24
|
+
readonly onError?: (chunk: string) => void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Test runner service interface
|
|
28
|
+
*/
|
|
29
|
+
export interface TestRunnerService {
|
|
30
|
+
/**
|
|
31
|
+
* Run the test command
|
|
32
|
+
*/
|
|
33
|
+
run(options: TestRunnerOptions): Promise<TestResult>;
|
|
34
|
+
/**
|
|
35
|
+
* Parse test command into command and args
|
|
36
|
+
*/
|
|
37
|
+
parseCommand(testCommand: string): {
|
|
38
|
+
cmd: string;
|
|
39
|
+
args: readonly string[];
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Create test runner service
|
|
44
|
+
*/
|
|
45
|
+
export declare function createTestRunner(): TestRunnerService;
|
|
46
|
+
//# sourceMappingURL=TestRunner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestRunner.d.ts","sourceRoot":"","sources":["../../src/services/TestRunner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,GAAG,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAErD;;OAEG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;KAAE,CAAC;CAC7E;AAOD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,iBAAiB,CAiFpD"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Runner Service
|
|
3
|
+
* Executes project tests and reports results
|
|
4
|
+
*/
|
|
5
|
+
import { spawn } from 'node:child_process';
|
|
6
|
+
/**
|
|
7
|
+
* Default timeout: 5 minutes
|
|
8
|
+
*/
|
|
9
|
+
const DEFAULT_TIMEOUT_MS = 300000;
|
|
10
|
+
/**
|
|
11
|
+
* Create test runner service
|
|
12
|
+
*/
|
|
13
|
+
export function createTestRunner() {
|
|
14
|
+
return {
|
|
15
|
+
parseCommand(testCommand) {
|
|
16
|
+
const parts = testCommand.trim().split(/\s+/);
|
|
17
|
+
const cmd = parts[0];
|
|
18
|
+
const args = parts.slice(1);
|
|
19
|
+
return { cmd, args };
|
|
20
|
+
},
|
|
21
|
+
async run(options) {
|
|
22
|
+
const startTime = Date.now();
|
|
23
|
+
const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
24
|
+
return new Promise((resolve) => {
|
|
25
|
+
let stdout = '';
|
|
26
|
+
let stderr = '';
|
|
27
|
+
let timedOut = false;
|
|
28
|
+
// Use shell to handle complex commands (pipes, &&, etc.)
|
|
29
|
+
const proc = spawn(options.testCommand, [], {
|
|
30
|
+
cwd: options.workingDir,
|
|
31
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
32
|
+
shell: true
|
|
33
|
+
});
|
|
34
|
+
// Set timeout
|
|
35
|
+
const timeoutId = setTimeout(() => {
|
|
36
|
+
timedOut = true;
|
|
37
|
+
proc.kill('SIGTERM');
|
|
38
|
+
// Force kill after 5 seconds if SIGTERM doesn't work
|
|
39
|
+
setTimeout(() => {
|
|
40
|
+
proc.kill('SIGKILL');
|
|
41
|
+
}, 5000);
|
|
42
|
+
}, timeoutMs);
|
|
43
|
+
// Capture stdout
|
|
44
|
+
proc.stdout?.on('data', (data) => {
|
|
45
|
+
const chunk = data.toString();
|
|
46
|
+
stdout += chunk;
|
|
47
|
+
options.onOutput?.(chunk);
|
|
48
|
+
});
|
|
49
|
+
// Capture stderr
|
|
50
|
+
proc.stderr?.on('data', (data) => {
|
|
51
|
+
const chunk = data.toString();
|
|
52
|
+
stderr += chunk;
|
|
53
|
+
options.onError?.(chunk);
|
|
54
|
+
});
|
|
55
|
+
// Handle completion
|
|
56
|
+
proc.on('close', (code) => {
|
|
57
|
+
clearTimeout(timeoutId);
|
|
58
|
+
const durationMs = Date.now() - startTime;
|
|
59
|
+
resolve({
|
|
60
|
+
success: code === 0,
|
|
61
|
+
exitCode: code ?? -1,
|
|
62
|
+
stdout,
|
|
63
|
+
stderr,
|
|
64
|
+
durationMs,
|
|
65
|
+
timedOut
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
// Handle spawn errors (e.g., command not found)
|
|
69
|
+
proc.on('error', (error) => {
|
|
70
|
+
clearTimeout(timeoutId);
|
|
71
|
+
const durationMs = Date.now() - startTime;
|
|
72
|
+
resolve({
|
|
73
|
+
success: false,
|
|
74
|
+
exitCode: -1,
|
|
75
|
+
stdout,
|
|
76
|
+
stderr: stderr || error.message,
|
|
77
|
+
durationMs,
|
|
78
|
+
timedOut: false
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=TestRunner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestRunner.js","sourceRoot":"","sources":["../../src/services/TestRunner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAwC3C;;GAEG;AACH,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,YAAY,CAAC,WAAmB;YAC9B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACrB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QACvB,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,OAA0B;YAClC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;YAE1D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC7B,IAAI,MAAM,GAAG,EAAE,CAAC;gBAChB,IAAI,MAAM,GAAG,EAAE,CAAC;gBAChB,IAAI,QAAQ,GAAG,KAAK,CAAC;gBAErB,yDAAyD;gBACzD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,EAAE;oBAC1C,GAAG,EAAE,OAAO,CAAC,UAAU;oBACvB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;oBAC/B,KAAK,EAAE,IAAI;iBACZ,CAAC,CAAC;gBAEH,cAAc;gBACd,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;oBAChC,QAAQ,GAAG,IAAI,CAAC;oBAChB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACrB,qDAAqD;oBACrD,UAAU,CAAC,GAAG,EAAE;wBACd,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACvB,CAAC,EAAE,IAAI,CAAC,CAAC;gBACX,CAAC,EAAE,SAAS,CAAC,CAAC;gBAEd,iBAAiB;gBACjB,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;oBACvC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC9B,MAAM,IAAI,KAAK,CAAC;oBAChB,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;gBAEH,iBAAiB;gBACjB,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;oBACvC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC9B,MAAM,IAAI,KAAK,CAAC;oBAChB,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC3B,CAAC,CAAC,CAAC;gBAEH,oBAAoB;gBACpB,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;oBACxB,YAAY,CAAC,SAAS,CAAC,CAAC;oBACxB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;oBAE1C,OAAO,CAAC;wBACN,OAAO,EAAE,IAAI,KAAK,CAAC;wBACnB,QAAQ,EAAE,IAAI,IAAI,CAAC,CAAC;wBACpB,MAAM;wBACN,MAAM;wBACN,UAAU;wBACV,QAAQ;qBACT,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,gDAAgD;gBAChD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBACzB,YAAY,CAAC,SAAS,CAAC,CAAC;oBACxB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;oBAE1C,OAAO,CAAC;wBACN,OAAO,EAAE,KAAK;wBACd,QAAQ,EAAE,CAAC,CAAC;wBACZ,MAAM;wBACN,MAAM,EAAE,MAAM,IAAI,KAAK,CAAC,OAAO;wBAC/B,UAAU;wBACV,QAAQ,EAAE,KAAK;qBAChB,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/services/index.d.ts
CHANGED
|
@@ -22,4 +22,6 @@ export { createGitHubService, GitHubFetchError, type GitHubService, type GitHubS
|
|
|
22
22
|
export { createSpecInitService, type SpecInitService, type SpecInitResult } from './SpecInitService.js';
|
|
23
23
|
export { createClaudeErrorDetector, type ClaudeErrorDetectorService, type ClaudeError, type ClaudeErrorCode } from './ClaudeErrorDetector.js';
|
|
24
24
|
export { createClaudeHealthCheck, type ClaudeHealthCheckService, type HealthCheckResult, type HealthCheckOptions } from './ClaudeHealthCheck.js';
|
|
25
|
+
export { createProjectDetector, type ProjectDetectorService, type DetectionResult } from './ProjectDetector.js';
|
|
26
|
+
export { createTestRunner, type TestRunnerService, type TestResult, type TestRunnerOptions } from './TestRunner.js';
|
|
25
27
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,iBAAiB,EACjB,UAAU,EACV,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,gBAAgB,EAChB,KAAK,iBAAiB,EACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,kBAAkB,EAClB,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,mBAAmB,EACnB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EAC1B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,sBAAsB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,KAAK,YAAY,EACjB,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,KAAK,0BAA0B,EAChC,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,mBAAmB,EACnB,KAAK,sBAAsB,EAC3B,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,IAAI,EACV,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACxB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,sBAAsB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,sBAAsB,EACtB,KAAK,uBAAuB,EAC5B,KAAK,SAAS,EACf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,qBAAqB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,QAAQ,EACb,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,EACnB,KAAK,sBAAsB,EAC3B,KAAK,kBAAkB,EACxB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,UAAU,EACf,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,WAAW,EACjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,qBAAqB,EACrB,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,yBAAyB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,uBAAuB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACxB,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"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"}
|
package/dist/services/index.js
CHANGED
|
@@ -22,4 +22,6 @@ export { createGitHubService, GitHubFetchError } from './GitHubService.js';
|
|
|
22
22
|
export { createSpecInitService } from './SpecInitService.js';
|
|
23
23
|
export { createClaudeErrorDetector } from './ClaudeErrorDetector.js';
|
|
24
24
|
export { createClaudeHealthCheck } from './ClaudeHealthCheck.js';
|
|
25
|
+
export { createProjectDetector } from './ProjectDetector.js';
|
|
26
|
+
export { createTestRunner } from './TestRunner.js';
|
|
25
27
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,iBAAiB,EACjB,UAAU,EAEX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,gBAAgB,EAEjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,kBAAkB,EAEnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,mBAAmB,EAGpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,sBAAsB,EAGvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EAIpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAEnB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,mBAAmB,EAGpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,gBAAgB,EAGjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,gBAAgB,EAKjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,sBAAsB,EAMvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,sBAAsB,EAGvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,qBAAqB,EAItB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,EAGpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,kBAAkB,EAInB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,qBAAqB,EAKtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,EAIpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAOjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,qBAAqB,EAGtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,yBAAyB,EAI1B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,uBAAuB,EAIxB,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,iBAAiB,EACjB,UAAU,EAEX,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,gBAAgB,EAEjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,kBAAkB,EAEnB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,mBAAmB,EAGpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,sBAAsB,EAGvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EAIpB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAEnB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,mBAAmB,EAGpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,gBAAgB,EAGjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,gBAAgB,EAKjB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,sBAAsB,EAMvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,sBAAsB,EAGvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,qBAAqB,EAItB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,EAGpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,kBAAkB,EAInB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,qBAAqB,EAKtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,mBAAmB,EAIpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAOjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,qBAAqB,EAGtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,yBAAyB,EAI1B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,uBAAuB,EAIxB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,qBAAqB,EAGtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,gBAAgB,EAIjB,MAAM,iBAAiB,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,MAAM,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAE7E;;;GAGG;AACH,MAAM,MAAM,OAAO,GACf,MAAM,GACN,OAAO,GACP,QAAQ,GACR,MAAM,GACN,OAAO,GACP,MAAM,GACN,SAAS,CAAC;AAEd;;;GAGG;AACH;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,WAAW,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAgBrG,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA6BH;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAiF;IACxG,MAAM,EAAE;QACN,KAAK,EAAE,yBAAyB;QAChC,IAAI,EAAE,0BAA0B;QAChC,GAAG,EAAE,CAAC,yBAAyB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,wBAAwB,CAAC;KACnH;IACD,MAAM,EAAE;QACN,KAAK,EAAE,kBAAkB;QACzB,IAAI,EAAE,gBAAgB;QACtB,GAAG,EAAE,CAAC,kBAAkB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,kBAAkB,CAAC;KACzF;IACD,KAAK,EAAE;QACL,KAAK,EAAE,aAAa;QACpB,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC;KAC3D;CACF,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA6BH;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAiF;IACxG,MAAM,EAAE;QACN,KAAK,EAAE,yBAAyB;QAChC,IAAI,EAAE,0BAA0B;QAChC,GAAG,EAAE,CAAC,yBAAyB,EAAE,0BAA0B,EAAE,0BAA0B,EAAE,wBAAwB,CAAC;KACnH;IACD,MAAM,EAAE;QACN,KAAK,EAAE,kBAAkB;QACzB,IAAI,EAAE,gBAAgB;QACtB,GAAG,EAAE,CAAC,kBAAkB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,kBAAkB,CAAC;KACzF;IACD,KAAK,EAAE;QACL,KAAK,EAAE,aAAa;QACpB,IAAI,EAAE,IAAI;QACV,GAAG,EAAE,CAAC,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC;KAC3D;CACF,CAAC;AAkKF,gCAAgC;AAChC,OAAO,EAKL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EACjB,MAAM,oBAAoB,CAAC"}
|
|
@@ -46,6 +46,16 @@ Execute implementation tasks for feature using Test-Driven Development.
|
|
|
46
46
|
**Read all necessary context**:
|
|
47
47
|
- `.red64/specs/{feature}/spec.json`, `requirements.md`, `design.md`, `tasks.md`
|
|
48
48
|
- **Entire `.red64/steering/` directory** for complete project memory
|
|
49
|
+
- **`.red64/steering/feedback.md`** - CRITICAL: Contains project-specific test, lint, and dev server commands
|
|
50
|
+
|
|
51
|
+
**Parse feedback.md for commands**:
|
|
52
|
+
Extract these values from the YAML blocks in `feedback.md`:
|
|
53
|
+
- `test`: Primary test command (e.g., `pnpm test:run`, `uv run pytest`)
|
|
54
|
+
- `lint`: Primary lint command (e.g., `pnpm lint`, `uv run ruff check .`)
|
|
55
|
+
- `dev_server`: Dev server command (e.g., `pnpm dev`, `bin/rails server`)
|
|
56
|
+
- `dev_port`: Dev server port (e.g., `3000`, `5173`, `8000`)
|
|
57
|
+
- `dev_url`: Dev server base URL (e.g., `http://localhost:3000`)
|
|
58
|
+
- `ui_verification_enabled`: Whether to use agent-browser for UI tasks
|
|
49
59
|
|
|
50
60
|
**Validate approvals**:
|
|
51
61
|
- Verify tasks are approved in spec.json (stop if not, see Safety & Fallback)
|
|
@@ -81,17 +91,136 @@ For each selected task, follow Kent Beck's TDD cycle:
|
|
|
81
91
|
- No regressions in existing functionality
|
|
82
92
|
- Code coverage maintained or improved
|
|
83
93
|
|
|
94
|
+
5. **FEEDBACK LOOP - Self-Correction**:
|
|
95
|
+
After each implementation change, run the feedback loop using commands from `feedback.md`:
|
|
96
|
+
|
|
97
|
+
**Testing Feedback** (MANDATORY):
|
|
98
|
+
```bash
|
|
99
|
+
# Use the 'test' command from .red64/steering/feedback.md
|
|
100
|
+
# Examples by stack:
|
|
101
|
+
# - React/Next.js: pnpm test:run
|
|
102
|
+
# - Python: uv run pytest
|
|
103
|
+
# - Rails: bin/rails test
|
|
104
|
+
{test_command_from_feedback_md}
|
|
105
|
+
```
|
|
106
|
+
- Parse test output for failures
|
|
107
|
+
- If tests fail: Fix issues before proceeding
|
|
108
|
+
- Never mark implementation complete with failing tests
|
|
109
|
+
|
|
110
|
+
**Linting Feedback** (when available):
|
|
111
|
+
```bash
|
|
112
|
+
# Use the 'lint' command from .red64/steering/feedback.md
|
|
113
|
+
# Examples by stack:
|
|
114
|
+
# - React/Next.js: pnpm lint
|
|
115
|
+
# - Python: uv run ruff check .
|
|
116
|
+
# - Rails: bundle exec rubocop
|
|
117
|
+
{lint_command_from_feedback_md}
|
|
118
|
+
```
|
|
119
|
+
- Fix critical/error-level issues
|
|
120
|
+
- Warnings are advisory (log but proceed)
|
|
121
|
+
|
|
122
|
+
**UI Verification** (for UI-related tasks - see UI Verification Protocol below):
|
|
123
|
+
- Check `ui_verification_enabled` in feedback.md (skip if false)
|
|
124
|
+
- Required when task involves: components, pages, layouts, styles, visual elements
|
|
125
|
+
- Use agent-browser for screenshot capture and accessibility analysis
|
|
126
|
+
|
|
84
127
|
**Note**: Do NOT update task checkboxes in tasks.md. The orchestrator handles task completion tracking.
|
|
85
128
|
|
|
129
|
+
## UI Verification Protocol
|
|
130
|
+
|
|
131
|
+
When implementing UI-related tasks (components, pages, layouts, styles, visual elements), use **agent-browser** for verification:
|
|
132
|
+
|
|
133
|
+
### When to Use UI Verification
|
|
134
|
+
- Task creates or modifies React/Vue/Angular components
|
|
135
|
+
- Task involves styling changes (CSS, Tailwind, styled-components)
|
|
136
|
+
- Task mentions visual elements, layouts, or design specs
|
|
137
|
+
- Design.md includes mockups, wireframes, or visual references
|
|
138
|
+
|
|
139
|
+
### UI Verification Steps
|
|
140
|
+
|
|
141
|
+
1. **Start Development Server** (if not running):
|
|
142
|
+
```bash
|
|
143
|
+
# Use 'dev_server' command from .red64/steering/feedback.md
|
|
144
|
+
# Examples by stack:
|
|
145
|
+
# - React: pnpm dev (port 5173)
|
|
146
|
+
# - Next.js: pnpm dev (port 3000)
|
|
147
|
+
# - Python/FastAPI: uv run uvicorn src.app.main:app --reload (port 8000)
|
|
148
|
+
# - Rails: bin/rails server (port 3000)
|
|
149
|
+
{dev_server_command_from_feedback_md} &>/dev/null &
|
|
150
|
+
# Wait for server to be ready
|
|
151
|
+
sleep 5
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
2. **Navigate to Feature**:
|
|
155
|
+
```bash
|
|
156
|
+
# Use 'dev_url' from .red64/steering/feedback.md as base URL
|
|
157
|
+
agent-browser goto {dev_url_from_feedback_md}/path/to/feature
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
3. **Capture Screenshot**:
|
|
161
|
+
```bash
|
|
162
|
+
agent-browser screenshot --full-page /tmp/ui-capture-$(date +%s).png
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
4. **Get Accessibility Tree** (for structural verification):
|
|
166
|
+
```bash
|
|
167
|
+
agent-browser snapshot > /tmp/accessibility-tree.json
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
5. **Analyze and Compare**:
|
|
171
|
+
- Read the captured screenshot
|
|
172
|
+
- Compare against design specifications in design.md
|
|
173
|
+
- Check accessibility tree for proper element structure
|
|
174
|
+
- Verify interactive elements are accessible
|
|
175
|
+
|
|
176
|
+
6. **Fix Visual Discrepancies**:
|
|
177
|
+
- If UI doesn't match design spec: fix code and repeat steps 2-5
|
|
178
|
+
- If accessibility issues found: add proper ARIA labels, semantic HTML
|
|
179
|
+
- Continue until UI matches specification
|
|
180
|
+
|
|
181
|
+
### Agent-Browser Commands Reference
|
|
182
|
+
|
|
183
|
+
| Command | Purpose |
|
|
184
|
+
|---------|---------|
|
|
185
|
+
| `agent-browser goto <url>` | Navigate to URL |
|
|
186
|
+
| `agent-browser screenshot [--full-page] <path>` | Capture screenshot |
|
|
187
|
+
| `agent-browser snapshot` | Get AI-optimized accessibility tree |
|
|
188
|
+
| `agent-browser click <element-ref>` | Click on element |
|
|
189
|
+
| `agent-browser type <element-ref> <text>` | Type into input |
|
|
190
|
+
| `agent-browser scroll <direction>` | Scroll page |
|
|
191
|
+
|
|
192
|
+
### UI Verification Loop
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
┌─────────────────────────────────────────────────────────┐
|
|
196
|
+
│ 1. Implement UI code changes │
|
|
197
|
+
│ 2. Start dev server (if not running) │
|
|
198
|
+
│ 3. Navigate: agent-browser goto <url> │
|
|
199
|
+
│ 4. Capture: agent-browser screenshot /tmp/ui.png │
|
|
200
|
+
│ 5. Analyze screenshot vs. design spec │
|
|
201
|
+
│ 6. If visual mismatch: │
|
|
202
|
+
│ - Identify discrepancies │
|
|
203
|
+
│ - Fix code │
|
|
204
|
+
│ - Goto step 3 │
|
|
205
|
+
│ 7. Capture accessibility tree for structure check │
|
|
206
|
+
│ 8. Fix accessibility issues if found │
|
|
207
|
+
│ 9. Run tests to ensure no regressions │
|
|
208
|
+
│ 10. Mark implementation complete │
|
|
209
|
+
└─────────────────────────────────────────────────────────┘
|
|
210
|
+
```
|
|
211
|
+
|
|
86
212
|
## Critical Constraints
|
|
87
213
|
- **TDD Mandatory**: Tests MUST be written before implementation code
|
|
88
214
|
- **Task Scope**: Implement only what the specific task requires
|
|
89
215
|
- **Test Coverage**: All new code must have tests
|
|
90
216
|
- **No Regressions**: Existing tests must continue to pass
|
|
91
217
|
- **Design Alignment**: Implementation must follow design.md specifications
|
|
218
|
+
- **Feedback Loop**: Run tests after EVERY implementation change; fix failures before proceeding
|
|
219
|
+
- **UI Verification**: For UI-related tasks, use agent-browser to capture and verify visual output
|
|
92
220
|
|
|
93
221
|
## Tool Guidance
|
|
94
|
-
- **Read first**:
|
|
222
|
+
- **Read feedback.md first**: Parse `.red64/steering/feedback.md` to get project-specific test, lint, and dev server commands
|
|
223
|
+
- **Read all context**: Load specs and steering before implementation
|
|
95
224
|
- **Test first**: Write tests before code
|
|
96
225
|
- Use **WebSearch/WebFetch** for library documentation when needed
|
|
97
226
|
|
|
@@ -117,4 +246,4 @@ Provide brief summary in the language specified in spec.json:
|
|
|
117
246
|
- **Action**: Debug and fix, then re-run
|
|
118
247
|
|
|
119
248
|
**Note**: You execute tasks autonomously. Return final report only when complete.
|
|
120
|
-
think
|
|
249
|
+
think
|
|
@@ -25,6 +25,19 @@ If validation fails, inform user to complete tasks generation first.
|
|
|
25
25
|
- If `$2` provided: Parse task numbers (e.g., "1.1", "1,2,3")
|
|
26
26
|
- Otherwise: Read `.red64/specs/$1/tasks.md` and find all unchecked tasks (`- [ ]`)
|
|
27
27
|
|
|
28
|
+
## Detect UI-Related Tasks
|
|
29
|
+
|
|
30
|
+
Before invoking the subagent, analyze the tasks to determine if they involve UI work:
|
|
31
|
+
|
|
32
|
+
**UI Detection Keywords** (in task description or design.md):
|
|
33
|
+
- Component, page, layout, view, screen
|
|
34
|
+
- Style, CSS, Tailwind, styled-components
|
|
35
|
+
- Button, form, input, modal, dialog
|
|
36
|
+
- Visual, UI, UX, design, mockup
|
|
37
|
+
- Frontend, client-side, browser
|
|
38
|
+
|
|
39
|
+
If UI-related keywords detected, set `UI Mode: enabled` in the prompt.
|
|
40
|
+
|
|
28
41
|
## Invoke Subagent
|
|
29
42
|
|
|
30
43
|
Delegate TDD implementation to spec-tdd-impl-agent:
|
|
@@ -45,6 +58,17 @@ File patterns to read:
|
|
|
45
58
|
- .red64/steering/*.md
|
|
46
59
|
|
|
47
60
|
TDD Mode: strict (test-first)
|
|
61
|
+
UI Mode: {enabled if UI-related, disabled otherwise}
|
|
62
|
+
|
|
63
|
+
## Feedback Requirements
|
|
64
|
+
After EVERY implementation change:
|
|
65
|
+
1. Run project tests: Use command from .red64/steering/feedback.md
|
|
66
|
+
2. Fix any test failures before proceeding
|
|
67
|
+
3. If UI Mode enabled: Use agent-browser for visual verification
|
|
68
|
+
- Start dev server if not running
|
|
69
|
+
- Capture screenshots of implemented UI
|
|
70
|
+
- Compare against design specifications
|
|
71
|
+
- Fix visual discrepancies before marking complete
|
|
48
72
|
"""
|
|
49
73
|
)
|
|
50
74
|
```
|
|
@@ -46,6 +46,16 @@ Execute implementation tasks for feature using Test-Driven Development.
|
|
|
46
46
|
**Read all necessary context**:
|
|
47
47
|
- `.red64/specs/{feature}/spec.json`, `requirements.md`, `design.md`, `tasks.md`
|
|
48
48
|
- **Entire `.red64/steering/` directory** for complete project memory
|
|
49
|
+
- **`.red64/steering/feedback.md`** - CRITICAL: Contains project-specific test, lint, and dev server commands
|
|
50
|
+
|
|
51
|
+
**Parse feedback.md for commands**:
|
|
52
|
+
Extract these values from the YAML blocks in `feedback.md`:
|
|
53
|
+
- `test`: Primary test command (e.g., `pnpm test:run`, `uv run pytest`)
|
|
54
|
+
- `lint`: Primary lint command (e.g., `pnpm lint`, `uv run ruff check .`)
|
|
55
|
+
- `dev_server`: Dev server command (e.g., `pnpm dev`, `bin/rails server`)
|
|
56
|
+
- `dev_port`: Dev server port (e.g., `3000`, `5173`, `8000`)
|
|
57
|
+
- `dev_url`: Dev server base URL (e.g., `http://localhost:3000`)
|
|
58
|
+
- `ui_verification_enabled`: Whether to use agent-browser for UI tasks
|
|
49
59
|
|
|
50
60
|
**Validate approvals**:
|
|
51
61
|
- Verify tasks are approved in spec.json (stop if not, see Safety & Fallback)
|
|
@@ -81,17 +91,136 @@ For each selected task, follow Kent Beck's TDD cycle:
|
|
|
81
91
|
- No regressions in existing functionality
|
|
82
92
|
- Code coverage maintained or improved
|
|
83
93
|
|
|
94
|
+
5. **FEEDBACK LOOP - Self-Correction**:
|
|
95
|
+
After each implementation change, run the feedback loop using commands from `feedback.md`:
|
|
96
|
+
|
|
97
|
+
**Testing Feedback** (MANDATORY):
|
|
98
|
+
```bash
|
|
99
|
+
# Use the 'test' command from .red64/steering/feedback.md
|
|
100
|
+
# Examples by stack:
|
|
101
|
+
# - React/Next.js: pnpm test:run
|
|
102
|
+
# - Python: uv run pytest
|
|
103
|
+
# - Rails: bin/rails test
|
|
104
|
+
{test_command_from_feedback_md}
|
|
105
|
+
```
|
|
106
|
+
- Parse test output for failures
|
|
107
|
+
- If tests fail: Fix issues before proceeding
|
|
108
|
+
- Never mark implementation complete with failing tests
|
|
109
|
+
|
|
110
|
+
**Linting Feedback** (when available):
|
|
111
|
+
```bash
|
|
112
|
+
# Use the 'lint' command from .red64/steering/feedback.md
|
|
113
|
+
# Examples by stack:
|
|
114
|
+
# - React/Next.js: pnpm lint
|
|
115
|
+
# - Python: uv run ruff check .
|
|
116
|
+
# - Rails: bundle exec rubocop
|
|
117
|
+
{lint_command_from_feedback_md}
|
|
118
|
+
```
|
|
119
|
+
- Fix critical/error-level issues
|
|
120
|
+
- Warnings are advisory (log but proceed)
|
|
121
|
+
|
|
122
|
+
**UI Verification** (for UI-related tasks - see UI Verification Protocol below):
|
|
123
|
+
- Check `ui_verification_enabled` in feedback.md (skip if false)
|
|
124
|
+
- Required when task involves: components, pages, layouts, styles, visual elements
|
|
125
|
+
- Use agent-browser for screenshot capture and accessibility analysis
|
|
126
|
+
|
|
84
127
|
**Note**: Do NOT update task checkboxes in tasks.md. The orchestrator handles task completion tracking.
|
|
85
128
|
|
|
129
|
+
## UI Verification Protocol
|
|
130
|
+
|
|
131
|
+
When implementing UI-related tasks (components, pages, layouts, styles, visual elements), use **agent-browser** for verification:
|
|
132
|
+
|
|
133
|
+
### When to Use UI Verification
|
|
134
|
+
- Task creates or modifies React/Vue/Angular components
|
|
135
|
+
- Task involves styling changes (CSS, Tailwind, styled-components)
|
|
136
|
+
- Task mentions visual elements, layouts, or design specs
|
|
137
|
+
- Design.md includes mockups, wireframes, or visual references
|
|
138
|
+
|
|
139
|
+
### UI Verification Steps
|
|
140
|
+
|
|
141
|
+
1. **Start Development Server** (if not running):
|
|
142
|
+
```bash
|
|
143
|
+
# Use 'dev_server' command from .red64/steering/feedback.md
|
|
144
|
+
# Examples by stack:
|
|
145
|
+
# - React: pnpm dev (port 5173)
|
|
146
|
+
# - Next.js: pnpm dev (port 3000)
|
|
147
|
+
# - Python/FastAPI: uv run uvicorn src.app.main:app --reload (port 8000)
|
|
148
|
+
# - Rails: bin/rails server (port 3000)
|
|
149
|
+
{dev_server_command_from_feedback_md} &>/dev/null &
|
|
150
|
+
# Wait for server to be ready
|
|
151
|
+
sleep 5
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
2. **Navigate to Feature**:
|
|
155
|
+
```bash
|
|
156
|
+
# Use 'dev_url' from .red64/steering/feedback.md as base URL
|
|
157
|
+
agent-browser goto {dev_url_from_feedback_md}/path/to/feature
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
3. **Capture Screenshot**:
|
|
161
|
+
```bash
|
|
162
|
+
agent-browser screenshot --full-page /tmp/ui-capture-$(date +%s).png
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
4. **Get Accessibility Tree** (for structural verification):
|
|
166
|
+
```bash
|
|
167
|
+
agent-browser snapshot > /tmp/accessibility-tree.json
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
5. **Analyze and Compare**:
|
|
171
|
+
- Read the captured screenshot
|
|
172
|
+
- Compare against design specifications in design.md
|
|
173
|
+
- Check accessibility tree for proper element structure
|
|
174
|
+
- Verify interactive elements are accessible
|
|
175
|
+
|
|
176
|
+
6. **Fix Visual Discrepancies**:
|
|
177
|
+
- If UI doesn't match design spec: fix code and repeat steps 2-5
|
|
178
|
+
- If accessibility issues found: add proper ARIA labels, semantic HTML
|
|
179
|
+
- Continue until UI matches specification
|
|
180
|
+
|
|
181
|
+
### Agent-Browser Commands Reference
|
|
182
|
+
|
|
183
|
+
| Command | Purpose |
|
|
184
|
+
|---------|---------|
|
|
185
|
+
| `agent-browser goto <url>` | Navigate to URL |
|
|
186
|
+
| `agent-browser screenshot [--full-page] <path>` | Capture screenshot |
|
|
187
|
+
| `agent-browser snapshot` | Get AI-optimized accessibility tree |
|
|
188
|
+
| `agent-browser click <element-ref>` | Click on element |
|
|
189
|
+
| `agent-browser type <element-ref> <text>` | Type into input |
|
|
190
|
+
| `agent-browser scroll <direction>` | Scroll page |
|
|
191
|
+
|
|
192
|
+
### UI Verification Loop
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
┌─────────────────────────────────────────────────────────┐
|
|
196
|
+
│ 1. Implement UI code changes │
|
|
197
|
+
│ 2. Start dev server (if not running) │
|
|
198
|
+
│ 3. Navigate: agent-browser goto <url> │
|
|
199
|
+
│ 4. Capture: agent-browser screenshot /tmp/ui.png │
|
|
200
|
+
│ 5. Analyze screenshot vs. design spec │
|
|
201
|
+
│ 6. If visual mismatch: │
|
|
202
|
+
│ - Identify discrepancies │
|
|
203
|
+
│ - Fix code │
|
|
204
|
+
│ - Goto step 3 │
|
|
205
|
+
│ 7. Capture accessibility tree for structure check │
|
|
206
|
+
│ 8. Fix accessibility issues if found │
|
|
207
|
+
│ 9. Run tests to ensure no regressions │
|
|
208
|
+
│ 10. Mark implementation complete │
|
|
209
|
+
└─────────────────────────────────────────────────────────┘
|
|
210
|
+
```
|
|
211
|
+
|
|
86
212
|
## Critical Constraints
|
|
87
213
|
- **TDD Mandatory**: Tests MUST be written before implementation code
|
|
88
214
|
- **Task Scope**: Implement only what the specific task requires
|
|
89
215
|
- **Test Coverage**: All new code must have tests
|
|
90
216
|
- **No Regressions**: Existing tests must continue to pass
|
|
91
217
|
- **Design Alignment**: Implementation must follow design.md specifications
|
|
218
|
+
- **Feedback Loop**: Run tests after EVERY implementation change; fix failures before proceeding
|
|
219
|
+
- **UI Verification**: For UI-related tasks, use agent-browser to capture and verify visual output
|
|
92
220
|
|
|
93
221
|
## Tool Guidance
|
|
94
|
-
- **Read first**:
|
|
222
|
+
- **Read feedback.md first**: Parse `.red64/steering/feedback.md` to get project-specific test, lint, and dev server commands
|
|
223
|
+
- **Read all context**: Load specs and steering before implementation
|
|
95
224
|
- **Test first**: Write tests before code
|
|
96
225
|
- Use **WebSearch/WebFetch** for library documentation when needed
|
|
97
226
|
|
|
@@ -117,4 +246,4 @@ Provide brief summary in the language specified in spec.json:
|
|
|
117
246
|
- **Action**: Debug and fix, then re-run
|
|
118
247
|
|
|
119
248
|
**Note**: You execute tasks autonomously. Return final report only when complete.
|
|
120
|
-
think
|
|
249
|
+
think
|
|
@@ -25,6 +25,19 @@ If validation fails, inform user to complete tasks generation first.
|
|
|
25
25
|
- If `$2` provided: Parse task numbers (e.g., "1.1", "1,2,3")
|
|
26
26
|
- Otherwise: Read `.red64/specs/$1/tasks.md` and find all unchecked tasks (`- [ ]`)
|
|
27
27
|
|
|
28
|
+
## Detect UI-Related Tasks
|
|
29
|
+
|
|
30
|
+
Before invoking the subagent, analyze the tasks to determine if they involve UI work:
|
|
31
|
+
|
|
32
|
+
**UI Detection Keywords** (in task description or design.md):
|
|
33
|
+
- Component, page, layout, view, screen
|
|
34
|
+
- Style, CSS, Tailwind, styled-components
|
|
35
|
+
- Button, form, input, modal, dialog
|
|
36
|
+
- Visual, UI, UX, design, mockup
|
|
37
|
+
- Frontend, client-side, browser
|
|
38
|
+
|
|
39
|
+
If UI-related keywords detected, set `UI Mode: enabled` in the prompt.
|
|
40
|
+
|
|
28
41
|
## Invoke Subagent
|
|
29
42
|
|
|
30
43
|
Delegate TDD implementation to spec-tdd-impl-agent:
|
|
@@ -45,6 +58,17 @@ File patterns to read:
|
|
|
45
58
|
- .red64/steering/*.md
|
|
46
59
|
|
|
47
60
|
TDD Mode: strict (test-first)
|
|
61
|
+
UI Mode: {enabled if UI-related, disabled otherwise}
|
|
62
|
+
|
|
63
|
+
## Feedback Requirements
|
|
64
|
+
After EVERY implementation change:
|
|
65
|
+
1. Run project tests: Use command from .red64/steering/feedback.md
|
|
66
|
+
2. Fix any test failures before proceeding
|
|
67
|
+
3. If UI Mode enabled: Use agent-browser for visual verification
|
|
68
|
+
- Start dev server if not running
|
|
69
|
+
- Capture screenshots of implemented UI
|
|
70
|
+
- Compare against design specifications
|
|
71
|
+
- Fix visual discrepancies before marking complete
|
|
48
72
|
"""
|
|
49
73
|
)
|
|
50
74
|
```
|