red64-cli 0.1.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/README.md +454 -0
- package/dist/cli/parseArgs.d.ts +16 -0
- package/dist/cli/parseArgs.d.ts.map +1 -0
- package/dist/cli/parseArgs.js +172 -0
- package/dist/cli/parseArgs.js.map +1 -0
- package/dist/cli/validateFlags.d.ts +22 -0
- package/dist/cli/validateFlags.d.ts.map +1 -0
- package/dist/cli/validateFlags.js +24 -0
- package/dist/cli/validateFlags.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +90 -0
- package/dist/cli.js.map +1 -0
- package/dist/components/App.d.ts +20 -0
- package/dist/components/App.d.ts.map +1 -0
- package/dist/components/App.js +35 -0
- package/dist/components/App.js.map +1 -0
- package/dist/components/CommandRouter.d.ts +21 -0
- package/dist/components/CommandRouter.d.ts.map +1 -0
- package/dist/components/CommandRouter.js +30 -0
- package/dist/components/CommandRouter.js.map +1 -0
- package/dist/components/GlobalConfig.d.ts +26 -0
- package/dist/components/GlobalConfig.d.ts.map +1 -0
- package/dist/components/GlobalConfig.js +30 -0
- package/dist/components/GlobalConfig.js.map +1 -0
- package/dist/components/index.d.ts +9 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +9 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/init/CompleteStep.d.ts +11 -0
- package/dist/components/init/CompleteStep.d.ts.map +1 -0
- package/dist/components/init/CompleteStep.js +15 -0
- package/dist/components/init/CompleteStep.js.map +1 -0
- package/dist/components/init/ErrorStep.d.ts +14 -0
- package/dist/components/init/ErrorStep.d.ts.map +1 -0
- package/dist/components/init/ErrorStep.js +36 -0
- package/dist/components/init/ErrorStep.js.map +1 -0
- package/dist/components/init/FetchStep.d.ts +15 -0
- package/dist/components/init/FetchStep.d.ts.map +1 -0
- package/dist/components/init/FetchStep.js +33 -0
- package/dist/components/init/FetchStep.js.map +1 -0
- package/dist/components/init/SetupStep.d.ts +14 -0
- package/dist/components/init/SetupStep.d.ts.map +1 -0
- package/dist/components/init/SetupStep.js +78 -0
- package/dist/components/init/SetupStep.js.map +1 -0
- package/dist/components/init/SteeringStep.d.ts +12 -0
- package/dist/components/init/SteeringStep.d.ts.map +1 -0
- package/dist/components/init/SteeringStep.js +43 -0
- package/dist/components/init/SteeringStep.js.map +1 -0
- package/dist/components/init/WelcomeStep.d.ts +12 -0
- package/dist/components/init/WelcomeStep.d.ts.map +1 -0
- package/dist/components/init/WelcomeStep.js +52 -0
- package/dist/components/init/WelcomeStep.js.map +1 -0
- package/dist/components/init/index.d.ts +11 -0
- package/dist/components/init/index.d.ts.map +1 -0
- package/dist/components/init/index.js +10 -0
- package/dist/components/init/index.js.map +1 -0
- package/dist/components/init/types.d.ts +98 -0
- package/dist/components/init/types.d.ts.map +1 -0
- package/dist/components/init/types.js +6 -0
- package/dist/components/init/types.js.map +1 -0
- package/dist/components/screens/AbortScreen.d.ts +14 -0
- package/dist/components/screens/AbortScreen.d.ts.map +1 -0
- package/dist/components/screens/AbortScreen.js +181 -0
- package/dist/components/screens/AbortScreen.js.map +1 -0
- package/dist/components/screens/ApprovalScreen.d.ts +24 -0
- package/dist/components/screens/ApprovalScreen.d.ts.map +1 -0
- package/dist/components/screens/ApprovalScreen.js +82 -0
- package/dist/components/screens/ApprovalScreen.js.map +1 -0
- package/dist/components/screens/HelpScreen.d.ts +20 -0
- package/dist/components/screens/HelpScreen.d.ts.map +1 -0
- package/dist/components/screens/HelpScreen.js +70 -0
- package/dist/components/screens/HelpScreen.js.map +1 -0
- package/dist/components/screens/InitScreen.d.ts +15 -0
- package/dist/components/screens/InitScreen.d.ts.map +1 -0
- package/dist/components/screens/InitScreen.js +420 -0
- package/dist/components/screens/InitScreen.js.map +1 -0
- package/dist/components/screens/ListScreen.d.ts +14 -0
- package/dist/components/screens/ListScreen.d.ts.map +1 -0
- package/dist/components/screens/ListScreen.js +57 -0
- package/dist/components/screens/ListScreen.js.map +1 -0
- package/dist/components/screens/ProgressScreen.d.ts +26 -0
- package/dist/components/screens/ProgressScreen.d.ts.map +1 -0
- package/dist/components/screens/ProgressScreen.js +64 -0
- package/dist/components/screens/ProgressScreen.js.map +1 -0
- package/dist/components/screens/ResumeScreen.d.ts +14 -0
- package/dist/components/screens/ResumeScreen.d.ts.map +1 -0
- package/dist/components/screens/ResumeScreen.js +108 -0
- package/dist/components/screens/ResumeScreen.js.map +1 -0
- package/dist/components/screens/ScreenProps.d.ts +12 -0
- package/dist/components/screens/ScreenProps.d.ts.map +1 -0
- package/dist/components/screens/ScreenProps.js +5 -0
- package/dist/components/screens/ScreenProps.js.map +1 -0
- package/dist/components/screens/StartScreen.d.ts +26 -0
- package/dist/components/screens/StartScreen.d.ts.map +1 -0
- package/dist/components/screens/StartScreen.js +1021 -0
- package/dist/components/screens/StartScreen.js.map +1 -0
- package/dist/components/screens/StatusScreen.d.ts +14 -0
- package/dist/components/screens/StatusScreen.d.ts.map +1 -0
- package/dist/components/screens/StatusScreen.js +115 -0
- package/dist/components/screens/StatusScreen.js.map +1 -0
- package/dist/components/screens/index.d.ts +15 -0
- package/dist/components/screens/index.d.ts.map +1 -0
- package/dist/components/screens/index.js +12 -0
- package/dist/components/screens/index.js.map +1 -0
- package/dist/components/ui/ErrorBoundary.d.ts +34 -0
- package/dist/components/ui/ErrorBoundary.d.ts.map +1 -0
- package/dist/components/ui/ErrorBoundary.js +37 -0
- package/dist/components/ui/ErrorBoundary.js.map +1 -0
- package/dist/components/ui/ErrorDisplay.d.ts +20 -0
- package/dist/components/ui/ErrorDisplay.d.ts.map +1 -0
- package/dist/components/ui/ErrorDisplay.js +12 -0
- package/dist/components/ui/ErrorDisplay.js.map +1 -0
- package/dist/components/ui/ErrorRecoveryPrompt.d.ts +30 -0
- package/dist/components/ui/ErrorRecoveryPrompt.d.ts.map +1 -0
- package/dist/components/ui/ErrorRecoveryPrompt.js +66 -0
- package/dist/components/ui/ErrorRecoveryPrompt.js.map +1 -0
- package/dist/components/ui/FeatureSidebar.d.ts +27 -0
- package/dist/components/ui/FeatureSidebar.d.ts.map +1 -0
- package/dist/components/ui/FeatureSidebar.js +166 -0
- package/dist/components/ui/FeatureSidebar.js.map +1 -0
- package/dist/components/ui/FlowTable.d.ts +21 -0
- package/dist/components/ui/FlowTable.d.ts.map +1 -0
- package/dist/components/ui/FlowTable.js +105 -0
- package/dist/components/ui/FlowTable.js.map +1 -0
- package/dist/components/ui/Header.d.ts +20 -0
- package/dist/components/ui/Header.d.ts.map +1 -0
- package/dist/components/ui/Header.js +11 -0
- package/dist/components/ui/Header.js.map +1 -0
- package/dist/components/ui/OutputRegion.d.ts +20 -0
- package/dist/components/ui/OutputRegion.d.ts.map +1 -0
- package/dist/components/ui/OutputRegion.js +14 -0
- package/dist/components/ui/OutputRegion.js.map +1 -0
- package/dist/components/ui/PhaseProgressView.d.ts +23 -0
- package/dist/components/ui/PhaseProgressView.d.ts.map +1 -0
- package/dist/components/ui/PhaseProgressView.js +117 -0
- package/dist/components/ui/PhaseProgressView.js.map +1 -0
- package/dist/components/ui/ProgressBar.d.ts +20 -0
- package/dist/components/ui/ProgressBar.d.ts.map +1 -0
- package/dist/components/ui/ProgressBar.js +12 -0
- package/dist/components/ui/ProgressBar.js.map +1 -0
- package/dist/components/ui/SelectMenu.d.ts +27 -0
- package/dist/components/ui/SelectMenu.d.ts.map +1 -0
- package/dist/components/ui/SelectMenu.js +21 -0
- package/dist/components/ui/SelectMenu.js.map +1 -0
- package/dist/components/ui/Spinner.d.ts +18 -0
- package/dist/components/ui/Spinner.d.ts.map +1 -0
- package/dist/components/ui/Spinner.js +10 -0
- package/dist/components/ui/Spinner.js.map +1 -0
- package/dist/components/ui/StatusLine.d.ts +21 -0
- package/dist/components/ui/StatusLine.d.ts.map +1 -0
- package/dist/components/ui/StatusLine.js +30 -0
- package/dist/components/ui/StatusLine.js.map +1 -0
- package/dist/components/ui/index.d.ts +16 -0
- package/dist/components/ui/index.d.ts.map +1 -0
- package/dist/components/ui/index.js +16 -0
- package/dist/components/ui/index.js.map +1 -0
- package/dist/services/AgentInvoker.d.ts +20 -0
- package/dist/services/AgentInvoker.d.ts.map +1 -0
- package/dist/services/AgentInvoker.js +282 -0
- package/dist/services/AgentInvoker.js.map +1 -0
- package/dist/services/BranchService.d.ts +28 -0
- package/dist/services/BranchService.d.ts.map +1 -0
- package/dist/services/BranchService.js +114 -0
- package/dist/services/BranchService.js.map +1 -0
- package/dist/services/CacheService.d.ts +57 -0
- package/dist/services/CacheService.d.ts.map +1 -0
- package/dist/services/CacheService.js +208 -0
- package/dist/services/CacheService.js.map +1 -0
- package/dist/services/ClaudeErrorDetector.d.ts +45 -0
- package/dist/services/ClaudeErrorDetector.d.ts.map +1 -0
- package/dist/services/ClaudeErrorDetector.js +207 -0
- package/dist/services/ClaudeErrorDetector.js.map +1 -0
- package/dist/services/ClaudeHealthCheck.d.ts +37 -0
- package/dist/services/ClaudeHealthCheck.d.ts.map +1 -0
- package/dist/services/ClaudeHealthCheck.js +197 -0
- package/dist/services/ClaudeHealthCheck.js.map +1 -0
- package/dist/services/CommitService.d.ts +36 -0
- package/dist/services/CommitService.d.ts.map +1 -0
- package/dist/services/CommitService.js +159 -0
- package/dist/services/CommitService.js.map +1 -0
- package/dist/services/ConfigService.d.ts +49 -0
- package/dist/services/ConfigService.d.ts.map +1 -0
- package/dist/services/ConfigService.js +57 -0
- package/dist/services/ConfigService.js.map +1 -0
- package/dist/services/DockerRunner.d.ts +45 -0
- package/dist/services/DockerRunner.d.ts.map +1 -0
- package/dist/services/DockerRunner.js +170 -0
- package/dist/services/DockerRunner.js.map +1 -0
- package/dist/services/ExtendedFlowStateMachine.d.ts +31 -0
- package/dist/services/ExtendedFlowStateMachine.d.ts.map +1 -0
- package/dist/services/ExtendedFlowStateMachine.js +302 -0
- package/dist/services/ExtendedFlowStateMachine.js.map +1 -0
- package/dist/services/FeatureValidator.d.ts +26 -0
- package/dist/services/FeatureValidator.d.ts.map +1 -0
- package/dist/services/FeatureValidator.js +48 -0
- package/dist/services/FeatureValidator.js.map +1 -0
- package/dist/services/FlowStateMachine.d.ts +26 -0
- package/dist/services/FlowStateMachine.d.ts.map +1 -0
- package/dist/services/FlowStateMachine.js +177 -0
- package/dist/services/FlowStateMachine.js.map +1 -0
- package/dist/services/GitHubService.d.ts +72 -0
- package/dist/services/GitHubService.d.ts.map +1 -0
- package/dist/services/GitHubService.js +150 -0
- package/dist/services/GitHubService.js.map +1 -0
- package/dist/services/GitStatusChecker.d.ts +29 -0
- package/dist/services/GitStatusChecker.d.ts.map +1 -0
- package/dist/services/GitStatusChecker.js +127 -0
- package/dist/services/GitStatusChecker.js.map +1 -0
- package/dist/services/PRCreatorService.d.ts +59 -0
- package/dist/services/PRCreatorService.d.ts.map +1 -0
- package/dist/services/PRCreatorService.js +212 -0
- package/dist/services/PRCreatorService.js.map +1 -0
- package/dist/services/PRStatusFetcher.d.ts +39 -0
- package/dist/services/PRStatusFetcher.d.ts.map +1 -0
- package/dist/services/PRStatusFetcher.js +144 -0
- package/dist/services/PRStatusFetcher.js.map +1 -0
- package/dist/services/PhaseExecutor.d.ts +29 -0
- package/dist/services/PhaseExecutor.d.ts.map +1 -0
- package/dist/services/PhaseExecutor.js +125 -0
- package/dist/services/PhaseExecutor.js.map +1 -0
- package/dist/services/SpecInitService.d.ts +33 -0
- package/dist/services/SpecInitService.d.ts.map +1 -0
- package/dist/services/SpecInitService.js +168 -0
- package/dist/services/SpecInitService.js.map +1 -0
- package/dist/services/StateStore.d.ts +24 -0
- package/dist/services/StateStore.d.ts.map +1 -0
- package/dist/services/StateStore.js +171 -0
- package/dist/services/StateStore.js.map +1 -0
- package/dist/services/TaskParser.d.ts +44 -0
- package/dist/services/TaskParser.d.ts.map +1 -0
- package/dist/services/TaskParser.js +167 -0
- package/dist/services/TaskParser.js.map +1 -0
- package/dist/services/TaskRunner.d.ts +52 -0
- package/dist/services/TaskRunner.d.ts.map +1 -0
- package/dist/services/TaskRunner.js +135 -0
- package/dist/services/TaskRunner.js.map +1 -0
- package/dist/services/TemplateService.d.ts +73 -0
- package/dist/services/TemplateService.d.ts.map +1 -0
- package/dist/services/TemplateService.js +263 -0
- package/dist/services/TemplateService.js.map +1 -0
- package/dist/services/WorktreeService.d.ts +51 -0
- package/dist/services/WorktreeService.d.ts.map +1 -0
- package/dist/services/WorktreeService.js +204 -0
- package/dist/services/WorktreeService.js.map +1 -0
- package/dist/services/index.d.ts +25 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +25 -0
- package/dist/services/index.js.map +1 -0
- package/dist/types/extended-flow.d.ts +167 -0
- package/dist/types/extended-flow.d.ts.map +1 -0
- package/dist/types/extended-flow.js +103 -0
- package/dist/types/extended-flow.js.map +1 -0
- package/dist/types/index.d.ts +210 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +28 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/git.d.ts +41 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +68 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/paths.d.ts +30 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +43 -0
- package/dist/utils/paths.js.map +1 -0
- package/framework/.red64/settings/rules/design-discovery-full.md +93 -0
- package/framework/.red64/settings/rules/design-discovery-light.md +49 -0
- package/framework/.red64/settings/rules/design-principles.md +182 -0
- package/framework/.red64/settings/rules/design-review.md +110 -0
- package/framework/.red64/settings/rules/ears-format.md +49 -0
- package/framework/.red64/settings/rules/gap-analysis.md +144 -0
- package/framework/.red64/settings/rules/steering-principles.md +90 -0
- package/framework/.red64/settings/rules/tasks-generation.md +131 -0
- package/framework/.red64/settings/rules/tasks-parallel-analysis.md +34 -0
- package/framework/.red64/settings/templates/flow-state.json +48 -0
- package/framework/.red64/settings/templates/specs/design.md +276 -0
- package/framework/.red64/settings/templates/specs/init.json +24 -0
- package/framework/.red64/settings/templates/specs/requirements-init.md +9 -0
- package/framework/.red64/settings/templates/specs/requirements.md +26 -0
- package/framework/.red64/settings/templates/specs/research.md +61 -0
- package/framework/.red64/settings/templates/specs/tasks.md +21 -0
- package/framework/.red64/settings/templates/steering/product.md +18 -0
- package/framework/.red64/settings/templates/steering/structure.md +41 -0
- package/framework/.red64/settings/templates/steering/tech.md +45 -0
- package/framework/.red64/settings/templates/steering-custom/api-standards.md +69 -0
- package/framework/.red64/settings/templates/steering-custom/authentication.md +67 -0
- package/framework/.red64/settings/templates/steering-custom/database.md +46 -0
- package/framework/.red64/settings/templates/steering-custom/deployment.md +54 -0
- package/framework/.red64/settings/templates/steering-custom/error-handling.md +59 -0
- package/framework/.red64/settings/templates/steering-custom/security.md +55 -0
- package/framework/.red64/settings/templates/steering-custom/testing.md +47 -0
- package/framework/agents/claude/.claude/agents/red64/spec-design.md +174 -0
- package/framework/agents/claude/.claude/agents/red64/spec-impl.md +120 -0
- package/framework/agents/claude/.claude/agents/red64/spec-requirements.md +102 -0
- package/framework/agents/claude/.claude/agents/red64/spec-tasks.md +141 -0
- package/framework/agents/claude/.claude/agents/red64/steering-custom.md +147 -0
- package/framework/agents/claude/.claude/agents/red64/steering.md +163 -0
- package/framework/agents/claude/.claude/agents/red64/validate-design.md +98 -0
- package/framework/agents/claude/.claude/agents/red64/validate-gap.md +99 -0
- package/framework/agents/claude/.claude/agents/red64/validate-impl.md +146 -0
- package/framework/agents/claude/.claude/commands/red64/spec-design.md +64 -0
- package/framework/agents/claude/.claude/commands/red64/spec-impl.md +68 -0
- package/framework/agents/claude/.claude/commands/red64/spec-init.md +65 -0
- package/framework/agents/claude/.claude/commands/red64/spec-quick.md +360 -0
- package/framework/agents/claude/.claude/commands/red64/spec-requirements.md +62 -0
- package/framework/agents/claude/.claude/commands/red64/spec-status.md +87 -0
- package/framework/agents/claude/.claude/commands/red64/spec-tasks.md +75 -0
- package/framework/agents/claude/.claude/commands/red64/steering-custom.md +59 -0
- package/framework/agents/claude/.claude/commands/red64/steering.md +62 -0
- package/framework/agents/claude/.claude/commands/red64/validate-design.md +59 -0
- package/framework/agents/claude/.claude/commands/red64/validate-gap.md +53 -0
- package/framework/agents/claude/.claude/commands/red64/validate-impl.md +68 -0
- package/framework/agents/claude/docs/CLAUDE.md +45 -0
- package/framework/agents/codex/.codex/agents/red64/spec-design.md +174 -0
- package/framework/agents/codex/.codex/agents/red64/spec-impl.md +120 -0
- package/framework/agents/codex/.codex/agents/red64/spec-requirements.md +102 -0
- package/framework/agents/codex/.codex/agents/red64/spec-tasks.md +141 -0
- package/framework/agents/codex/.codex/agents/red64/steering-custom.md +147 -0
- package/framework/agents/codex/.codex/agents/red64/steering.md +163 -0
- package/framework/agents/codex/.codex/agents/red64/validate-design.md +98 -0
- package/framework/agents/codex/.codex/agents/red64/validate-gap.md +99 -0
- package/framework/agents/codex/.codex/agents/red64/validate-impl.md +146 -0
- package/framework/agents/codex/.codex/commands/red64/spec-design.md +64 -0
- package/framework/agents/codex/.codex/commands/red64/spec-impl.md +68 -0
- package/framework/agents/codex/.codex/commands/red64/spec-init.md +65 -0
- package/framework/agents/codex/.codex/commands/red64/spec-quick.md +360 -0
- package/framework/agents/codex/.codex/commands/red64/spec-requirements.md +62 -0
- package/framework/agents/codex/.codex/commands/red64/spec-status.md +87 -0
- package/framework/agents/codex/.codex/commands/red64/spec-tasks.md +75 -0
- package/framework/agents/codex/.codex/commands/red64/steering-custom.md +59 -0
- package/framework/agents/codex/.codex/commands/red64/steering.md +62 -0
- package/framework/agents/codex/.codex/commands/red64/validate-design.md +59 -0
- package/framework/agents/codex/.codex/commands/red64/validate-gap.md +53 -0
- package/framework/agents/codex/.codex/commands/red64/validate-impl.md +68 -0
- package/framework/agents/codex/docs/AGENTS.md +68 -0
- package/framework/agents/gemini/commands.toml +607 -0
- package/framework/agents/gemini/docs/GEMINI.md +45 -0
- package/framework/stacks/generic/product.md +27 -0
- package/framework/stacks/generic/structure.md +46 -0
- package/framework/stacks/generic/tech.md +47 -0
- package/framework/stacks/node/product.md +27 -0
- package/framework/stacks/node/structure.md +82 -0
- package/framework/stacks/node/tech.md +63 -0
- package/framework/stacks/python/product.md +27 -0
- package/framework/stacks/python/structure.md +78 -0
- package/framework/stacks/python/tech.md +64 -0
- package/framework/stacks/react/product.md +27 -0
- package/framework/stacks/react/structure.md +76 -0
- package/framework/stacks/react/tech.md +65 -0
- package/package.json +47 -0
package/README.md
ADDED
|
@@ -0,0 +1,454 @@
|
|
|
1
|
+
# Red64 CLI
|
|
2
|
+
|
|
3
|
+
**Deterministic spec-driven development orchestrator for AI-assisted coding.**
|
|
4
|
+
|
|
5
|
+
Red64 automates the entire feature development lifecycle—from requirements to implementation—using a structured, phase-gated workflow that ensures quality and traceability.
|
|
6
|
+
|
|
7
|
+

|
|
8
|
+
<!-- TODO: Add screencast -->
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Quick Start
|
|
13
|
+
|
|
14
|
+
### 1. Install
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# Clone and install
|
|
18
|
+
git clone https://github.com/your-org/red64-cli.git
|
|
19
|
+
cd red64-cli
|
|
20
|
+
npm install
|
|
21
|
+
npm link
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### 2. Initialize your project
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
cd /path/to/your/project
|
|
28
|
+
red64 init
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### 3. Start a feature
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
red64 start "user-authentication" "Add login and registration with JWT tokens"
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Red64 will:
|
|
38
|
+
1. Create an isolated git worktree
|
|
39
|
+
2. Generate requirements (EARS format)
|
|
40
|
+
3. Create technical design
|
|
41
|
+
4. Break down into implementation tasks
|
|
42
|
+
5. Execute each task with commits
|
|
43
|
+
6. Complete with a ready-to-review branch
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## What is Red64?
|
|
48
|
+
|
|
49
|
+
Red64 is a **spec-driven development orchestrator** that brings structure and determinism to AI-assisted coding. Instead of ad-hoc prompting, Red64 enforces a rigorous workflow:
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
Requirements → Design → Tasks → Implementation
|
|
53
|
+
↓ ↓ ↓ ↓
|
|
54
|
+
(review) (review) (review) (commits)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Key Features
|
|
58
|
+
|
|
59
|
+
| Feature | Description |
|
|
60
|
+
|---------|-------------|
|
|
61
|
+
| **Spec-Driven** | Every feature starts with formal requirements and design |
|
|
62
|
+
| **Phase Gates** | Human review required between phases (or auto-approve with `-y`) |
|
|
63
|
+
| **Git Isolation** | Each feature runs in its own worktree and branch (sibling directory) |
|
|
64
|
+
| **Atomic Commits** | One commit per task for clean history |
|
|
65
|
+
| **Sandboxed Execution** | Optional Docker isolation for safe agent execution |
|
|
66
|
+
| **Resumable Flows** | `start` auto-detects in-progress flows and offers resume |
|
|
67
|
+
| **API Health Checks** | Validates Claude API before starting (credits, auth, network) |
|
|
68
|
+
|
|
69
|
+
### Goals
|
|
70
|
+
|
|
71
|
+
1. **Predictability**: Same inputs produce consistent outputs through structured phases
|
|
72
|
+
2. **Traceability**: Every code change links back to requirements and design decisions
|
|
73
|
+
3. **Quality**: Mandatory review gates prevent AI hallucinations from reaching production
|
|
74
|
+
4. **Isolation**: Git worktrees prevent work-in-progress from polluting main branch
|
|
75
|
+
5. **Efficiency**: Automate the tedious parts while keeping humans in control
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Installation
|
|
80
|
+
|
|
81
|
+
### Requirements
|
|
82
|
+
|
|
83
|
+
- Node.js >= 20.0.0
|
|
84
|
+
- Git
|
|
85
|
+
- Claude CLI (`npm install -g @anthropic-ai/claude-cli`)
|
|
86
|
+
- Docker (optional, for sandboxed execution)
|
|
87
|
+
|
|
88
|
+
### From Source
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
git clone https://github.com/your-org/red64-cli.git
|
|
92
|
+
cd red64-cli
|
|
93
|
+
npm install
|
|
94
|
+
npm run build
|
|
95
|
+
npm link
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Verify Installation
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
red64 --version
|
|
102
|
+
red64 help
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## Commands
|
|
108
|
+
|
|
109
|
+
### `red64 init`
|
|
110
|
+
|
|
111
|
+
Initialize Red64 in your project. Creates `.red64/` directory with steering documents.
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
red64 init
|
|
115
|
+
red64 init --repo owner/repo --stack nextjs
|
|
116
|
+
red64 init --agent gemini # Use Gemini as coding agent
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**Flags:**
|
|
120
|
+
- `-a, --agent <name>` — Coding agent: `claude`, `gemini`, `codex` (default: `claude`)
|
|
121
|
+
|
|
122
|
+

|
|
123
|
+
<!-- TODO: Add screenshot -->
|
|
124
|
+
|
|
125
|
+
### `red64 start <feature> <description>`
|
|
126
|
+
|
|
127
|
+
Start a new feature development flow, or resume an existing one.
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
red64 start "shopping-cart" "Add shopping cart with add/remove items and checkout"
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**Smart Resume Detection:**
|
|
134
|
+
|
|
135
|
+
When you run `start` for a feature that's already in progress (at any phase: requirements, design, tasks, or implementation), Red64 will:
|
|
136
|
+
|
|
137
|
+
1. **Detect uncommitted changes** — If the worktree has uncommitted changes, prompts:
|
|
138
|
+
- Commit changes (WIP commit)
|
|
139
|
+
- Discard changes
|
|
140
|
+
- Cancel
|
|
141
|
+
|
|
142
|
+
2. **Offer resume or restart** — If an in-progress flow is found, prompts:
|
|
143
|
+
- Resume from current phase
|
|
144
|
+
- Start fresh (discard previous progress)
|
|
145
|
+
- Cancel
|
|
146
|
+
|
|
147
|
+
This means you can always use `red64 start <feature>` to continue working—no separate resume command needed.
|
|
148
|
+
|
|
149
|
+
**Flags:**
|
|
150
|
+
- `-m, --model <name>` — Model to use (e.g., `claude-3-5-haiku-latest` for dev, `claude-sonnet-4-20250514` for prod)
|
|
151
|
+
- `-y, --yes` — Auto-approve all phases (skip review gates)
|
|
152
|
+
- `-b, --brownfield` — Enable gap analysis for existing codebases
|
|
153
|
+
- `-g, --greenfield` — New feature mode (default)
|
|
154
|
+
- `-s, --skip-permissions` — Pass to Claude CLI
|
|
155
|
+
- `-t, --tier <name>` — Use specific Claude config tier
|
|
156
|
+
- `--sandbox` — Run in Docker isolation
|
|
157
|
+
- `--verbose` — Show detailed execution logs
|
|
158
|
+
|
|
159
|
+

|
|
160
|
+
<!-- TODO: Add screenshot -->
|
|
161
|
+
|
|
162
|
+
### `red64 status [feature]`
|
|
163
|
+
|
|
164
|
+
Show the status of a flow.
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
red64 status shopping-cart
|
|
168
|
+
red64 status # Show all flows
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+

|
|
172
|
+
<!-- TODO: Add screenshot -->
|
|
173
|
+
|
|
174
|
+
### `red64 list`
|
|
175
|
+
|
|
176
|
+
List all active flows in the repository.
|
|
177
|
+
|
|
178
|
+
```bash
|
|
179
|
+
red64 list
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### `red64 abort <feature>`
|
|
183
|
+
|
|
184
|
+
Abort a flow and clean up resources (worktree, branch).
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
red64 abort shopping-cart
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## Workflow Phases
|
|
193
|
+
|
|
194
|
+
### 1. Initialization
|
|
195
|
+
|
|
196
|
+
Creates spec directory at `.red64/specs/<feature>/` with `spec.json`.
|
|
197
|
+
|
|
198
|
+
### 2. Requirements Generation
|
|
199
|
+
|
|
200
|
+
Generates `requirements.md` using EARS (Easy Approach to Requirements Syntax) format:
|
|
201
|
+
- Ubiquitous requirements
|
|
202
|
+
- Event-driven requirements
|
|
203
|
+
- State-driven requirements
|
|
204
|
+
- Optional features
|
|
205
|
+
- Unwanted behaviors
|
|
206
|
+
|
|
207
|
+
### 3. Gap Analysis (Brownfield only)
|
|
208
|
+
|
|
209
|
+
For existing codebases, analyzes what already exists and what needs to be built.
|
|
210
|
+
|
|
211
|
+
### 4. Design Generation
|
|
212
|
+
|
|
213
|
+
Creates `design.md` with:
|
|
214
|
+
- Architecture decisions
|
|
215
|
+
- Component design
|
|
216
|
+
- Data models
|
|
217
|
+
- API contracts
|
|
218
|
+
- File structure
|
|
219
|
+
|
|
220
|
+
### 5. Task Generation
|
|
221
|
+
|
|
222
|
+
Breaks down the design into atomic `tasks.md`:
|
|
223
|
+
- Each task is independently implementable
|
|
224
|
+
- Tasks are ordered by dependency
|
|
225
|
+
- Each task produces a commit
|
|
226
|
+
|
|
227
|
+
### 6. Implementation
|
|
228
|
+
|
|
229
|
+
Executes tasks sequentially:
|
|
230
|
+
- Runs `/red64:spec-impl <feature> <task-id>`
|
|
231
|
+
- Commits after each task
|
|
232
|
+
- Checkpoints every 3 tasks (optional pause)
|
|
233
|
+
|
|
234
|
+
### 7. Completion
|
|
235
|
+
|
|
236
|
+
Flow completes with:
|
|
237
|
+
- All tasks implemented
|
|
238
|
+
- Clean commit history
|
|
239
|
+
- Feature branch ready for PR
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## Comparison with Other Tools
|
|
244
|
+
|
|
245
|
+
| Feature | Red64 | Cursor/Copilot | Aider | Claude Code |
|
|
246
|
+
|---------|-------|----------------|-------|-------------|
|
|
247
|
+
| **Spec-driven workflow** | Yes | No | No | No |
|
|
248
|
+
| **Phase gates** | Yes | No | No | No |
|
|
249
|
+
| **Git worktree isolation** | Yes | No | No | No |
|
|
250
|
+
| **Atomic commits per task** | Yes | No | Yes | No |
|
|
251
|
+
| **Requirements generation** | Yes | No | No | No |
|
|
252
|
+
| **Design documents** | Yes | No | No | No |
|
|
253
|
+
| **Resumable flows** | Yes | No | Partial | No |
|
|
254
|
+
| **Docker sandboxing** | Yes | No | No | Yes |
|
|
255
|
+
| **IDE integration** | No | Yes | Partial | Yes |
|
|
256
|
+
| **Real-time editing** | No | Yes | Yes | Yes |
|
|
257
|
+
|
|
258
|
+
### When to use Red64
|
|
259
|
+
|
|
260
|
+
**Use Red64 when:**
|
|
261
|
+
- Building complete features (not quick fixes)
|
|
262
|
+
- You need traceable requirements and design
|
|
263
|
+
- Working on complex, multi-file changes
|
|
264
|
+
- You want clean git history with atomic commits
|
|
265
|
+
- You need to pause and resume work across sessions
|
|
266
|
+
|
|
267
|
+
**Use other tools when:**
|
|
268
|
+
- Making quick, single-file edits
|
|
269
|
+
- Exploring or prototyping ideas
|
|
270
|
+
- You need real-time IDE integration
|
|
271
|
+
- Working on bug fixes without spec requirements
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## Limitations
|
|
276
|
+
|
|
277
|
+
### Current Limitations
|
|
278
|
+
|
|
279
|
+
1. **No IDE integration** — Red64 is CLI-only; no VS Code or JetBrains plugins yet
|
|
280
|
+
2. **Sequential execution** — Tasks run one at a time, no parallelization
|
|
281
|
+
3. **No incremental changes** — Regenerating a phase replaces previous output entirely
|
|
282
|
+
4. **English-centric** — Prompts and templates are English-only (configurable per spec)
|
|
283
|
+
|
|
284
|
+
### Known Issues
|
|
285
|
+
|
|
286
|
+
- Large codebases may hit context limits during design phase
|
|
287
|
+
- Docker sandbox requires pre-built image (`docker build -f Dockerfile.sandbox -t red64-sandbox:latest .`)
|
|
288
|
+
- Some UI frameworks may not render correctly in all terminals
|
|
289
|
+
|
|
290
|
+
### Roadmap
|
|
291
|
+
|
|
292
|
+
- [ ] VS Code extension
|
|
293
|
+
- [ ] Parallel task execution
|
|
294
|
+
- [ ] Incremental phase editing
|
|
295
|
+
- [ ] Web dashboard for flow monitoring
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
## Project Structure
|
|
300
|
+
|
|
301
|
+
```
|
|
302
|
+
.red64/
|
|
303
|
+
├── specs/ # Feature specifications
|
|
304
|
+
│ └── <feature>/
|
|
305
|
+
│ ├── spec.json # Spec metadata
|
|
306
|
+
│ ├── requirements.md # EARS requirements
|
|
307
|
+
│ ├── design.md # Technical design
|
|
308
|
+
│ └── tasks.md # Implementation tasks
|
|
309
|
+
├── flows/ # Flow state and logs
|
|
310
|
+
│ └── <feature>/
|
|
311
|
+
│ ├── state.json # Current flow state
|
|
312
|
+
│ └── flow.log # Execution log
|
|
313
|
+
└── steering/ # Project-wide guidance
|
|
314
|
+
├── product.md # Product context
|
|
315
|
+
├── tech.md # Technical standards
|
|
316
|
+
└── structure.md # Codebase structure
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### Git Worktree Layout
|
|
320
|
+
|
|
321
|
+
Red64 creates git worktrees in a **sibling directory** following the [GitLens/VSCode convention](https://gist.github.com/ChristopherA/4643b2f5e024578606b9cd5d2e6815cc). This keeps the main repository clean and avoids nested git structures.
|
|
322
|
+
|
|
323
|
+
```
|
|
324
|
+
~/projects/
|
|
325
|
+
├── my-project/ # Main repository (unchanged)
|
|
326
|
+
│ ├── .git/
|
|
327
|
+
│ ├── .red64/
|
|
328
|
+
│ ├── src/
|
|
329
|
+
│ └── package.json
|
|
330
|
+
└── my-project.worktrees/ # Worktrees directory (sibling)
|
|
331
|
+
├── user-authentication/ # feature/user-authentication branch
|
|
332
|
+
│ ├── .red64/
|
|
333
|
+
│ ├── src/
|
|
334
|
+
│ └── package.json
|
|
335
|
+
└── shopping-cart/ # feature/shopping-cart branch
|
|
336
|
+
├── .red64/
|
|
337
|
+
├── src/
|
|
338
|
+
└── package.json
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
**Benefits of sibling worktrees:**
|
|
342
|
+
- Main repository stays clean (no `.gitignore` needed for worktrees)
|
|
343
|
+
- No nested `.git` references inside the working tree
|
|
344
|
+
- Better IDE and tool compatibility
|
|
345
|
+
- Clear separation between main work and feature isolation
|
|
346
|
+
- Easy to see all active features at a glance
|
|
347
|
+
|
|
348
|
+
---
|
|
349
|
+
|
|
350
|
+
## Configuration
|
|
351
|
+
|
|
352
|
+
### Steering Documents
|
|
353
|
+
|
|
354
|
+
Customize AI behavior by editing `.red64/steering/`:
|
|
355
|
+
|
|
356
|
+
- **product.md** — Product vision, user personas, business rules
|
|
357
|
+
- **tech.md** — Tech stack, coding standards, patterns to use/avoid
|
|
358
|
+
- **structure.md** — Codebase organization, file naming conventions
|
|
359
|
+
|
|
360
|
+
### Coding Agents
|
|
361
|
+
|
|
362
|
+
Red64 supports multiple coding agents. Set the agent at init time:
|
|
363
|
+
|
|
364
|
+
```bash
|
|
365
|
+
red64 init --agent claude # Default - Anthropic Claude
|
|
366
|
+
red64 init --agent gemini # Google Gemini
|
|
367
|
+
red64 init --agent codex # OpenAI Codex
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
The agent is stored in `.red64/config.json` and used for all subsequent commands.
|
|
371
|
+
|
|
372
|
+
### Model Selection
|
|
373
|
+
|
|
374
|
+
Override the model per command for cost optimization:
|
|
375
|
+
|
|
376
|
+
```bash
|
|
377
|
+
# Development (cheap, fast models)
|
|
378
|
+
red64 start "feature" "desc" --model claude-3-5-haiku-latest
|
|
379
|
+
red64 start "feature" "desc" --model gemini-2.0-flash
|
|
380
|
+
red64 start "feature" "desc" --model gpt-4o-mini
|
|
381
|
+
|
|
382
|
+
# Production (best quality models)
|
|
383
|
+
red64 start "feature" "desc" --model claude-sonnet-4-20250514
|
|
384
|
+
red64 start "feature" "desc" --model gemini-2.5-pro
|
|
385
|
+
red64 start "feature" "desc" --model o1
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
| Agent | Cheap (Dev) | Best (Prod) |
|
|
389
|
+
|-------|-------------|-------------|
|
|
390
|
+
| Claude | `claude-3-5-haiku-latest` | `claude-sonnet-4-20250514` |
|
|
391
|
+
| Gemini | `gemini-2.0-flash` | `gemini-2.5-pro` |
|
|
392
|
+
| Codex | `gpt-4o-mini` | `o1` |
|
|
393
|
+
|
|
394
|
+
### Claude Tiers
|
|
395
|
+
|
|
396
|
+
Use different Claude configurations with `--tier`:
|
|
397
|
+
|
|
398
|
+
```bash
|
|
399
|
+
red64 start "feature" "desc" --tier pro
|
|
400
|
+
# Uses ~/.claude-pro/ for configuration
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
---
|
|
404
|
+
|
|
405
|
+
## Development
|
|
406
|
+
|
|
407
|
+
### Run in development mode
|
|
408
|
+
|
|
409
|
+
```bash
|
|
410
|
+
npm run dev -- start my-feature "Feature description"
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
### Run tests
|
|
414
|
+
|
|
415
|
+
```bash
|
|
416
|
+
npm test
|
|
417
|
+
npm run test:ui
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
### Build
|
|
421
|
+
|
|
422
|
+
```bash
|
|
423
|
+
npm run build
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
### Type checking
|
|
427
|
+
|
|
428
|
+
```bash
|
|
429
|
+
npm run type-check
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
---
|
|
433
|
+
|
|
434
|
+
## Contributing
|
|
435
|
+
|
|
436
|
+
1. Fork the repository
|
|
437
|
+
2. Create a feature branch
|
|
438
|
+
3. Make your changes
|
|
439
|
+
4. Run tests: `npm test`
|
|
440
|
+
5. Submit a pull request
|
|
441
|
+
|
|
442
|
+
---
|
|
443
|
+
|
|
444
|
+
## License
|
|
445
|
+
|
|
446
|
+
MIT
|
|
447
|
+
|
|
448
|
+
---
|
|
449
|
+
|
|
450
|
+
## Acknowledgments
|
|
451
|
+
|
|
452
|
+
- Built by Yacin Bahi, yacin@Red64.io
|
|
453
|
+
- Inspired by spec-driven development and EARS requirements methodology
|
|
454
|
+
- Uses [Ink](https://github.com/vadimdemedes/ink) for terminal UI
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI argument parsing for red64
|
|
3
|
+
* Requirements: 3.2, 3.4, 4.7, 5.1-5.5, 8.1, 8.4, 8.5
|
|
4
|
+
*/
|
|
5
|
+
import type { CLIConfig } from '../types/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Parse CLI arguments into CLIConfig
|
|
8
|
+
* This function wraps argument parsing logic for testability
|
|
9
|
+
*/
|
|
10
|
+
export declare function parseArgs(argv: readonly string[]): CLIConfig;
|
|
11
|
+
/**
|
|
12
|
+
* Help text for red64 CLI
|
|
13
|
+
* Requirements: 4.7, 8.1, 8.4, 8.5
|
|
14
|
+
*/
|
|
15
|
+
export declare const HELP_TEXT: string;
|
|
16
|
+
//# sourceMappingURL=parseArgs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseArgs.d.ts","sourceRoot":"","sources":["../../src/cli/parseArgs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAqC,MAAM,mBAAmB,CAAC;AAatF;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CA8G5D;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS,QAuBd,CAAC"}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI argument parsing for red64
|
|
3
|
+
* Requirements: 3.2, 3.4, 4.7, 5.1-5.5, 8.1, 8.4, 8.5
|
|
4
|
+
*/
|
|
5
|
+
const VALID_AGENTS = ['claude', 'gemini', 'codex'];
|
|
6
|
+
const VALID_COMMANDS = [
|
|
7
|
+
'init',
|
|
8
|
+
'start',
|
|
9
|
+
'status',
|
|
10
|
+
'list',
|
|
11
|
+
'abort',
|
|
12
|
+
'help'
|
|
13
|
+
];
|
|
14
|
+
/**
|
|
15
|
+
* Parse CLI arguments into CLIConfig
|
|
16
|
+
* This function wraps argument parsing logic for testability
|
|
17
|
+
*/
|
|
18
|
+
export function parseArgs(argv) {
|
|
19
|
+
const flags = {
|
|
20
|
+
skipPermissions: false,
|
|
21
|
+
brownfield: false,
|
|
22
|
+
greenfield: true, // Default to greenfield mode
|
|
23
|
+
tier: undefined,
|
|
24
|
+
help: false,
|
|
25
|
+
version: false,
|
|
26
|
+
verbose: false,
|
|
27
|
+
yes: false,
|
|
28
|
+
sandbox: false,
|
|
29
|
+
model: undefined,
|
|
30
|
+
// Init-specific flags
|
|
31
|
+
repo: undefined,
|
|
32
|
+
stack: undefined,
|
|
33
|
+
'skip-guided': undefined,
|
|
34
|
+
'no-steering': undefined,
|
|
35
|
+
'no-cache': undefined,
|
|
36
|
+
agent: undefined
|
|
37
|
+
};
|
|
38
|
+
const positionalArgs = [];
|
|
39
|
+
let command = undefined;
|
|
40
|
+
// Parse arguments
|
|
41
|
+
for (let i = 0; i < argv.length; i++) {
|
|
42
|
+
let arg = argv[i];
|
|
43
|
+
let argValue;
|
|
44
|
+
// Handle --flag=value syntax
|
|
45
|
+
if (arg.startsWith('--') && arg.includes('=')) {
|
|
46
|
+
const eqIndex = arg.indexOf('=');
|
|
47
|
+
argValue = arg.slice(eqIndex + 1);
|
|
48
|
+
arg = arg.slice(0, eqIndex);
|
|
49
|
+
}
|
|
50
|
+
if (arg === '--skip-permissions' || arg === '-s') {
|
|
51
|
+
flags.skipPermissions = true;
|
|
52
|
+
}
|
|
53
|
+
else if (arg === '--brownfield' || arg === '-b') {
|
|
54
|
+
flags.brownfield = true;
|
|
55
|
+
flags.greenfield = false;
|
|
56
|
+
}
|
|
57
|
+
else if (arg === '--greenfield' || arg === '-g') {
|
|
58
|
+
flags.greenfield = true;
|
|
59
|
+
flags.brownfield = false;
|
|
60
|
+
}
|
|
61
|
+
else if (arg === '--tier' || arg === '-t') {
|
|
62
|
+
// Use argValue if --tier=value, otherwise next arg
|
|
63
|
+
const value = argValue ?? argv[i + 1];
|
|
64
|
+
if (value && !value.startsWith('-')) {
|
|
65
|
+
flags.tier = value;
|
|
66
|
+
if (!argValue)
|
|
67
|
+
i++; // Only skip if we used next arg
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else if (arg === '--help' || arg === '-h') {
|
|
71
|
+
flags.help = true;
|
|
72
|
+
}
|
|
73
|
+
else if (arg === '--version' || arg === '-v') {
|
|
74
|
+
flags.version = true;
|
|
75
|
+
}
|
|
76
|
+
else if (arg === '--verbose') {
|
|
77
|
+
flags.verbose = true;
|
|
78
|
+
}
|
|
79
|
+
else if (arg === '--yes' || arg === '-y') {
|
|
80
|
+
flags.yes = true;
|
|
81
|
+
}
|
|
82
|
+
else if (arg === '--sandbox') {
|
|
83
|
+
flags.sandbox = true;
|
|
84
|
+
}
|
|
85
|
+
else if (arg === '--model' || arg === '-m') {
|
|
86
|
+
const value = argValue ?? argv[i + 1];
|
|
87
|
+
if (value && !value.startsWith('-')) {
|
|
88
|
+
flags.model = value;
|
|
89
|
+
if (!argValue)
|
|
90
|
+
i++;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
else if (arg === '--repo') {
|
|
94
|
+
const value = argValue ?? argv[i + 1];
|
|
95
|
+
if (value && !value.startsWith('-')) {
|
|
96
|
+
flags.repo = value;
|
|
97
|
+
if (!argValue)
|
|
98
|
+
i++;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else if (arg === '--stack') {
|
|
102
|
+
const value = argValue ?? argv[i + 1];
|
|
103
|
+
if (value && !value.startsWith('-')) {
|
|
104
|
+
flags.stack = value;
|
|
105
|
+
if (!argValue)
|
|
106
|
+
i++;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
else if (arg === '--skip-guided') {
|
|
110
|
+
flags['skip-guided'] = true;
|
|
111
|
+
}
|
|
112
|
+
else if (arg === '--no-steering') {
|
|
113
|
+
flags['no-steering'] = true;
|
|
114
|
+
}
|
|
115
|
+
else if (arg === '--no-cache') {
|
|
116
|
+
flags['no-cache'] = true;
|
|
117
|
+
}
|
|
118
|
+
else if (arg === '--agent' || arg === '-a') {
|
|
119
|
+
const value = argValue ?? argv[i + 1];
|
|
120
|
+
if (value && !value.startsWith('-') && VALID_AGENTS.includes(value)) {
|
|
121
|
+
flags.agent = value;
|
|
122
|
+
if (!argValue)
|
|
123
|
+
i++;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
else if (!arg.startsWith('-')) {
|
|
127
|
+
positionalArgs.push(arg);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// First positional argument is the command
|
|
131
|
+
if (positionalArgs.length > 0) {
|
|
132
|
+
const potentialCommand = positionalArgs[0];
|
|
133
|
+
if (VALID_COMMANDS.includes(potentialCommand)) {
|
|
134
|
+
command = potentialCommand;
|
|
135
|
+
positionalArgs.shift(); // Remove command from args
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return {
|
|
139
|
+
command,
|
|
140
|
+
args: positionalArgs,
|
|
141
|
+
flags
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Help text for red64 CLI
|
|
146
|
+
* Requirements: 4.7, 8.1, 8.4, 8.5
|
|
147
|
+
*/
|
|
148
|
+
export const HELP_TEXT = `
|
|
149
|
+
Red64 Flow Orchestrator
|
|
150
|
+
|
|
151
|
+
Usage:
|
|
152
|
+
red64 init Bootstrap project for red64 flows
|
|
153
|
+
red64 start <feature> "<desc>" Start new feature flow (auto-resumes if exists)
|
|
154
|
+
red64 status [feature] Show flow status
|
|
155
|
+
red64 list List all active flows
|
|
156
|
+
red64 abort <feature> Abort and cleanup flow
|
|
157
|
+
red64 help Show this help
|
|
158
|
+
|
|
159
|
+
Init Options:
|
|
160
|
+
-a, --agent <name> Coding agent: claude, gemini, codex (default: claude)
|
|
161
|
+
|
|
162
|
+
Global Options:
|
|
163
|
+
-m, --model <name> Model to use (must match agent, e.g. claude-3-5-haiku-latest)
|
|
164
|
+
-s, --skip-permissions Pass skip-permissions to Claude CLI
|
|
165
|
+
-b, --brownfield Enable brownfield mode (gap analysis)
|
|
166
|
+
-g, --greenfield Greenfield mode (default)
|
|
167
|
+
-t, --tier <name> Use specified Claude config directory
|
|
168
|
+
--sandbox Run Claude in Docker container for isolation
|
|
169
|
+
-h, --help Show help
|
|
170
|
+
-v, --version Show version
|
|
171
|
+
`.trim();
|
|
172
|
+
//# sourceMappingURL=parseArgs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseArgs.js","sourceRoot":"","sources":["../../src/cli/parseArgs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flag validation for red64 CLI
|
|
3
|
+
* Requirements: 5.1-5.5
|
|
4
|
+
*/
|
|
5
|
+
import type { GlobalFlags } from '../types/index.js';
|
|
6
|
+
/**
|
|
7
|
+
* Validation error type
|
|
8
|
+
*/
|
|
9
|
+
export type FlagValidationError = string;
|
|
10
|
+
/**
|
|
11
|
+
* Validation result
|
|
12
|
+
*/
|
|
13
|
+
export interface FlagValidationResult {
|
|
14
|
+
readonly valid: boolean;
|
|
15
|
+
readonly errors: readonly FlagValidationError[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Validate CLI flags and return validation result
|
|
19
|
+
* Requirements: 5.4, 5.5
|
|
20
|
+
*/
|
|
21
|
+
export declare function validateFlags(flags: GlobalFlags): FlagValidationResult;
|
|
22
|
+
//# sourceMappingURL=validateFlags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateFlags.d.ts","sourceRoot":"","sources":["../../src/cli/validateFlags.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,mBAAmB,EAAE,CAAC;CACjD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,oBAAoB,CAiBtE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Flag validation for red64 CLI
|
|
3
|
+
* Requirements: 5.1-5.5
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Validate CLI flags and return validation result
|
|
7
|
+
* Requirements: 5.4, 5.5
|
|
8
|
+
*/
|
|
9
|
+
export function validateFlags(flags) {
|
|
10
|
+
const errors = [];
|
|
11
|
+
// Validate tier has a value when provided (not empty string)
|
|
12
|
+
if (flags.tier === '') {
|
|
13
|
+
errors.push('Error: --tier requires a value');
|
|
14
|
+
}
|
|
15
|
+
// Validate brownfield and greenfield are mutually exclusive
|
|
16
|
+
if (flags.brownfield && flags.greenfield) {
|
|
17
|
+
errors.push('Error: --brownfield and --greenfield are mutually exclusive');
|
|
18
|
+
}
|
|
19
|
+
return {
|
|
20
|
+
valid: errors.length === 0,
|
|
21
|
+
errors
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=validateFlags.js.map
|