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
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { GREENFIELD_PHASES, BROWNFIELD_PHASES } from '../../types/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* Agent icons and names
|
|
6
|
+
*/
|
|
7
|
+
const AGENT_INFO = {
|
|
8
|
+
claude: { icon: '\uD83E\uDD16', name: 'Claude', color: '#D97706' }, // 🤖
|
|
9
|
+
gemini: { icon: '\u2728', name: 'Gemini', color: '#4285F4' }, // ✨
|
|
10
|
+
codex: { icon: '\uD83D\uDFE2', name: 'Codex', color: '#10A37F' }, // 🟢
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Simplified phase display names (short for sidebar)
|
|
14
|
+
*/
|
|
15
|
+
function getShortPhaseName(phase) {
|
|
16
|
+
const names = {
|
|
17
|
+
'initializing': 'Init',
|
|
18
|
+
'requirements-generating': 'Require',
|
|
19
|
+
'requirements-approval': 'Review',
|
|
20
|
+
'gap-analysis': 'Gap',
|
|
21
|
+
'gap-review': 'Review',
|
|
22
|
+
'design-generating': 'Design',
|
|
23
|
+
'design-approval': 'Review',
|
|
24
|
+
'tasks-generating': 'Tasks',
|
|
25
|
+
'tasks-approval': 'Review',
|
|
26
|
+
'implementing': 'Impl',
|
|
27
|
+
'complete': 'Done',
|
|
28
|
+
};
|
|
29
|
+
return names[phase] ?? phase.slice(0, 8);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get status indicator symbol
|
|
33
|
+
*/
|
|
34
|
+
function getStatusIndicator(status) {
|
|
35
|
+
switch (status) {
|
|
36
|
+
case 'completed':
|
|
37
|
+
return '\u2713'; // checkmark ✓
|
|
38
|
+
case 'current':
|
|
39
|
+
return '\u25CF'; // filled circle ●
|
|
40
|
+
case 'pending':
|
|
41
|
+
return '\u25CB'; // empty circle ○
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get status color
|
|
46
|
+
*/
|
|
47
|
+
function getStatusColor(status) {
|
|
48
|
+
switch (status) {
|
|
49
|
+
case 'completed':
|
|
50
|
+
return 'green';
|
|
51
|
+
case 'current':
|
|
52
|
+
return 'yellow';
|
|
53
|
+
case 'pending':
|
|
54
|
+
return 'gray';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Determine phase status relative to current phase
|
|
59
|
+
*/
|
|
60
|
+
function getPhaseStatus(phase, currentPhase, phases) {
|
|
61
|
+
// Handle terminal phases
|
|
62
|
+
if (currentPhase === 'complete') {
|
|
63
|
+
return 'completed';
|
|
64
|
+
}
|
|
65
|
+
if (currentPhase === 'aborted' || currentPhase === 'error') {
|
|
66
|
+
if (phase === currentPhase)
|
|
67
|
+
return 'current';
|
|
68
|
+
const currentIndex = phases.indexOf(currentPhase);
|
|
69
|
+
const phaseIndex = phases.indexOf(phase);
|
|
70
|
+
return phaseIndex < currentIndex ? 'completed' : 'pending';
|
|
71
|
+
}
|
|
72
|
+
// Handle idle - nothing is completed yet
|
|
73
|
+
if (currentPhase === 'idle') {
|
|
74
|
+
return 'pending';
|
|
75
|
+
}
|
|
76
|
+
const currentIndex = phases.indexOf(currentPhase);
|
|
77
|
+
const phaseIndex = phases.indexOf(phase);
|
|
78
|
+
if (currentIndex === -1 || phaseIndex === -1) {
|
|
79
|
+
return 'pending';
|
|
80
|
+
}
|
|
81
|
+
if (phaseIndex < currentIndex) {
|
|
82
|
+
return 'completed';
|
|
83
|
+
}
|
|
84
|
+
else if (phaseIndex === currentIndex) {
|
|
85
|
+
return 'current';
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
return 'pending';
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get display phases for sidebar (simplified list)
|
|
93
|
+
*/
|
|
94
|
+
function getSidebarPhases(mode) {
|
|
95
|
+
const phases = mode === 'greenfield' ? GREENFIELD_PHASES : BROWNFIELD_PHASES;
|
|
96
|
+
// Show only main phases (not approval/review phases)
|
|
97
|
+
return phases.filter(phase => phase === 'initializing' ||
|
|
98
|
+
phase === 'requirements-generating' ||
|
|
99
|
+
phase === 'gap-analysis' ||
|
|
100
|
+
phase === 'design-generating' ||
|
|
101
|
+
phase === 'tasks-generating' ||
|
|
102
|
+
phase === 'implementing' ||
|
|
103
|
+
phase === 'complete');
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Truncate string with ellipsis
|
|
107
|
+
*/
|
|
108
|
+
function truncate(str, maxLen) {
|
|
109
|
+
if (str.length <= maxLen)
|
|
110
|
+
return str;
|
|
111
|
+
return str.slice(0, maxLen - 1) + '…';
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get short model name for display
|
|
115
|
+
*/
|
|
116
|
+
function getShortModelName(model) {
|
|
117
|
+
// Extract key part of model name
|
|
118
|
+
if (model.includes('haiku'))
|
|
119
|
+
return 'haiku';
|
|
120
|
+
if (model.includes('sonnet'))
|
|
121
|
+
return 'sonnet';
|
|
122
|
+
if (model.includes('opus'))
|
|
123
|
+
return 'opus';
|
|
124
|
+
if (model.includes('flash-lite'))
|
|
125
|
+
return 'flash-lite';
|
|
126
|
+
if (model.includes('flash'))
|
|
127
|
+
return 'flash';
|
|
128
|
+
if (model.includes('pro'))
|
|
129
|
+
return 'pro';
|
|
130
|
+
if (model.includes('o3-mini'))
|
|
131
|
+
return 'o3-mini';
|
|
132
|
+
if (model.includes('o1-mini'))
|
|
133
|
+
return 'o1-mini';
|
|
134
|
+
if (model.includes('4o-mini'))
|
|
135
|
+
return '4o-mini';
|
|
136
|
+
if (model.includes('4o'))
|
|
137
|
+
return '4o';
|
|
138
|
+
if (model.includes('o1'))
|
|
139
|
+
return 'o1';
|
|
140
|
+
return truncate(model, 10);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* FeatureSidebar Component
|
|
144
|
+
* Displays feature info in a compact right-side panel
|
|
145
|
+
*/
|
|
146
|
+
export const FeatureSidebar = ({ featureName, sandboxMode, currentPhase, mode, currentTask, totalTasks, commitCount, agent = 'claude', model, }) => {
|
|
147
|
+
const displayName = truncate(featureName, 10);
|
|
148
|
+
const allPhases = mode === 'greenfield' ? GREENFIELD_PHASES : BROWNFIELD_PHASES;
|
|
149
|
+
const sidebarPhases = getSidebarPhases(mode);
|
|
150
|
+
const agentInfo = AGENT_INFO[agent];
|
|
151
|
+
// Extract short model name (e.g., "claude-3-5-haiku-latest" -> "haiku")
|
|
152
|
+
const shortModel = model ? getShortModelName(model) : undefined;
|
|
153
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, marginLeft: 1, width: 16, children: [_jsx(Text, { bold: true, color: "cyan", children: displayName }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [sandboxMode && (_jsxs(Text, { color: "blue", children: ['\uD83D\uDC33', " sandbox"] })), _jsxs(Text, { children: [agentInfo.icon, " ", agentInfo.name] }), shortModel && (_jsxs(Text, { dimColor: true, children: [" \u2514 ", shortModel] }))] }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "\u2500 Phases \u2500" }), sidebarPhases.map((phase) => {
|
|
154
|
+
const status = getPhaseStatus(phase, currentPhase, allPhases);
|
|
155
|
+
const indicator = getStatusIndicator(status);
|
|
156
|
+
const color = getStatusColor(status);
|
|
157
|
+
const name = getShortPhaseName(phase);
|
|
158
|
+
// Show task progress for implementing phase
|
|
159
|
+
const isImplementing = phase === 'implementing';
|
|
160
|
+
const progress = isImplementing && totalTasks > 0
|
|
161
|
+
? ` ${currentTask}/${totalTasks}`
|
|
162
|
+
: '';
|
|
163
|
+
return (_jsx(Box, { children: _jsxs(Text, { color: color, children: [indicator, " ", name, progress] }) }, phase));
|
|
164
|
+
})] }), _jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { dimColor: true, children: "\u2500 Commits \u2500" }), _jsxs(Text, { children: [commitCount, " commit", commitCount !== 1 ? 's' : ''] })] })] }));
|
|
165
|
+
};
|
|
166
|
+
//# sourceMappingURL=FeatureSidebar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeatureSidebar.js","sourceRoot":"","sources":["../../../src/components/ui/FeatureSidebar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FlowTable Component
|
|
3
|
+
* Task 2.2: Create flow listing table component
|
|
4
|
+
* Requirements: 3.3, 3.4
|
|
5
|
+
*/
|
|
6
|
+
import React from 'react';
|
|
7
|
+
import type { FlowState } from '../../types/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Props for FlowTable component
|
|
10
|
+
*/
|
|
11
|
+
export interface FlowTableProps {
|
|
12
|
+
readonly flows: readonly FlowState[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* FlowTable Component
|
|
16
|
+
* Displays active flows in a table format
|
|
17
|
+
* Requirements: 3.3 - Display table with Feature, Phase, Branch, Updated columns
|
|
18
|
+
* Requirements: 3.4 - Display relative timestamps
|
|
19
|
+
*/
|
|
20
|
+
export declare const FlowTable: React.FC<FlowTableProps>;
|
|
21
|
+
//# sourceMappingURL=FlowTable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FlowTable.d.ts","sourceRoot":"","sources":["../../../src/components/ui/FlowTable.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAC;CACtC;AAwID;;;;;GAKG;AACH,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAgB9C,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { formatDistanceToNow } from 'date-fns';
|
|
4
|
+
/**
|
|
5
|
+
* Column widths (characters)
|
|
6
|
+
*/
|
|
7
|
+
const COLUMN_WIDTHS = {
|
|
8
|
+
feature: 20,
|
|
9
|
+
phase: 18,
|
|
10
|
+
branch: 20,
|
|
11
|
+
updated: 15
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Truncate string to max length with ellipsis
|
|
15
|
+
*/
|
|
16
|
+
function truncate(str, maxLen) {
|
|
17
|
+
if (str.length <= maxLen) {
|
|
18
|
+
return str.padEnd(maxLen);
|
|
19
|
+
}
|
|
20
|
+
return str.slice(0, maxLen - 1) + '\u2026';
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get display name for a phase
|
|
24
|
+
*/
|
|
25
|
+
function getPhaseDisplayName(phaseType) {
|
|
26
|
+
const names = {
|
|
27
|
+
'idle': 'Ready',
|
|
28
|
+
'initializing': 'Initializing',
|
|
29
|
+
'requirements-generating': 'Requirements',
|
|
30
|
+
'requirements-approval': 'Requirements Review',
|
|
31
|
+
'gap-analysis': 'Gap Analysis',
|
|
32
|
+
'gap-review': 'Gap Review',
|
|
33
|
+
'design-generating': 'Design',
|
|
34
|
+
'design-approval': 'Design Review',
|
|
35
|
+
'design-validation': 'Design Validation',
|
|
36
|
+
'design-validation-review': 'Validation Review',
|
|
37
|
+
'tasks-generating': 'Tasks',
|
|
38
|
+
'tasks-approval': 'Tasks Review',
|
|
39
|
+
'implementing': 'Implementing',
|
|
40
|
+
'paused': 'Paused',
|
|
41
|
+
'validation': 'Validation',
|
|
42
|
+
'pr': 'PR',
|
|
43
|
+
'merge-decision': 'Merge Decision',
|
|
44
|
+
'complete': 'Complete',
|
|
45
|
+
'aborted': 'Aborted',
|
|
46
|
+
'error': 'Error'
|
|
47
|
+
};
|
|
48
|
+
return names[phaseType] ?? phaseType;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Get branch name from flow state
|
|
52
|
+
* Extracts branch name from worktreePath or generates from feature
|
|
53
|
+
*/
|
|
54
|
+
function getBranchName(flow) {
|
|
55
|
+
if (flow.metadata.worktreePath) {
|
|
56
|
+
// Extract feature from path like /repo/worktrees/my-feature
|
|
57
|
+
const parts = flow.metadata.worktreePath.split('/');
|
|
58
|
+
const feature = parts[parts.length - 1];
|
|
59
|
+
return `feature/${feature}`;
|
|
60
|
+
}
|
|
61
|
+
return `feature/${flow.feature}`;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Format relative time
|
|
65
|
+
*/
|
|
66
|
+
function formatRelativeTime(dateStr) {
|
|
67
|
+
try {
|
|
68
|
+
return formatDistanceToNow(new Date(dateStr), { addSuffix: true });
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return 'unknown';
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Sort flows by updatedAt descending (most recent first)
|
|
76
|
+
*/
|
|
77
|
+
function sortFlows(flows) {
|
|
78
|
+
return [...flows].sort((a, b) => {
|
|
79
|
+
const dateA = new Date(a.updatedAt).getTime();
|
|
80
|
+
const dateB = new Date(b.updatedAt).getTime();
|
|
81
|
+
return dateB - dateA;
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Table header component
|
|
86
|
+
*/
|
|
87
|
+
const TableHeader = () => (_jsxs(Box, { children: [_jsx(Text, { bold: true, color: "cyan", children: truncate('Feature', COLUMN_WIDTHS.feature) }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, color: "cyan", children: truncate('Phase', COLUMN_WIDTHS.phase) }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, color: "cyan", children: truncate('Branch', COLUMN_WIDTHS.branch) }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, color: "cyan", children: truncate('Updated', COLUMN_WIDTHS.updated) })] }));
|
|
88
|
+
const TableRow = ({ flow }) => {
|
|
89
|
+
const feature = truncate(flow.feature, COLUMN_WIDTHS.feature);
|
|
90
|
+
const phase = truncate(getPhaseDisplayName(flow.phase.type), COLUMN_WIDTHS.phase);
|
|
91
|
+
const branch = truncate(getBranchName(flow), COLUMN_WIDTHS.branch);
|
|
92
|
+
const updated = truncate(formatRelativeTime(flow.updatedAt), COLUMN_WIDTHS.updated);
|
|
93
|
+
return (_jsxs(Box, { children: [_jsx(Text, { children: feature }), _jsx(Text, { children: " " }), _jsx(Text, { color: "yellow", children: phase }), _jsx(Text, { children: " " }), _jsx(Text, { dimColor: true, children: branch }), _jsx(Text, { children: " " }), _jsx(Text, { dimColor: true, children: updated })] }));
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* FlowTable Component
|
|
97
|
+
* Displays active flows in a table format
|
|
98
|
+
* Requirements: 3.3 - Display table with Feature, Phase, Branch, Updated columns
|
|
99
|
+
* Requirements: 3.4 - Display relative timestamps
|
|
100
|
+
*/
|
|
101
|
+
export const FlowTable = ({ flows }) => {
|
|
102
|
+
const sortedFlows = sortFlows(flows);
|
|
103
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(TableHeader, {}), _jsx(Box, { children: _jsx(Text, { dimColor: true, children: ''.padEnd(COLUMN_WIDTHS.feature + COLUMN_WIDTHS.phase + COLUMN_WIDTHS.branch + COLUMN_WIDTHS.updated + 3, '-') }) }), sortedFlows.map((flow) => (_jsx(TableRow, { flow: flow }, flow.feature)))] }));
|
|
104
|
+
};
|
|
105
|
+
//# sourceMappingURL=FlowTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FlowTable.js","sourceRoot":"","sources":["../../../src/components/ui/FlowTable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Header component with box-drawing characters and branding
|
|
3
|
+
* Requirements: 6.3, 8.4
|
|
4
|
+
*/
|
|
5
|
+
import React from 'react';
|
|
6
|
+
/**
|
|
7
|
+
* Props for Header component
|
|
8
|
+
*/
|
|
9
|
+
interface HeaderProps {
|
|
10
|
+
readonly title: string;
|
|
11
|
+
readonly subtitle?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Header with box-drawing border and branding
|
|
15
|
+
* Requirements: 6.3 - Use box-drawing characters for headers
|
|
16
|
+
* Requirements: 8.4 - Display "Red64 Flow Orchestrator" as title
|
|
17
|
+
*/
|
|
18
|
+
export declare const Header: React.FC<HeaderProps>;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=Header.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Header.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B;;GAEG;AACH,UAAU,WAAW;IACnB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;GAIG;AACH,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAgBxC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
/**
|
|
4
|
+
* Header with box-drawing border and branding
|
|
5
|
+
* Requirements: 6.3 - Use box-drawing characters for headers
|
|
6
|
+
* Requirements: 8.4 - Display "Red64 Flow Orchestrator" as title
|
|
7
|
+
*/
|
|
8
|
+
export const Header = ({ title, subtitle }) => {
|
|
9
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: "cyan", paddingX: 1, children: [_jsx(Text, { bold: true, color: "cyan", children: title }), subtitle && (_jsx(Text, { dimColor: true, children: subtitle }))] }));
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=Header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Header.js","sourceRoot":"","sources":["../../../src/components/ui/Header.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAUhC;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAA0B,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;IACnE,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,OAAO,EACnB,WAAW,EAAC,MAAM,EAClB,QAAQ,EAAE,CAAC,aAEX,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,MAAM,YACpB,KAAK,GACD,EACN,QAAQ,IAAI,CACX,KAAC,IAAI,IAAC,QAAQ,kBAAE,QAAQ,GAAQ,CACjC,IACG,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OutputRegion component for agent output display
|
|
3
|
+
* Requirements: 7.7
|
|
4
|
+
*/
|
|
5
|
+
import React from 'react';
|
|
6
|
+
/**
|
|
7
|
+
* Props for OutputRegion component
|
|
8
|
+
*/
|
|
9
|
+
interface OutputRegionProps {
|
|
10
|
+
readonly lines: readonly string[];
|
|
11
|
+
readonly maxHeight?: number;
|
|
12
|
+
readonly title?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Scrollable text region for displaying agent output
|
|
16
|
+
* Requirements: 7.7 - Display agent output in a dedicated UI region
|
|
17
|
+
*/
|
|
18
|
+
export declare const OutputRegion: React.FC<OutputRegionProps>;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=OutputRegion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OutputRegion.d.ts","sourceRoot":"","sources":["../../../src/components/ui/OutputRegion.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B;;GAEG;AACH,UAAU,iBAAiB;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA+BpD,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
/**
|
|
4
|
+
* Scrollable text region for displaying agent output
|
|
5
|
+
* Requirements: 7.7 - Display agent output in a dedicated UI region
|
|
6
|
+
*/
|
|
7
|
+
export const OutputRegion = ({ lines, maxHeight, title }) => {
|
|
8
|
+
// If maxHeight is set, only show the last N lines
|
|
9
|
+
const displayLines = maxHeight && lines.length > maxHeight
|
|
10
|
+
? lines.slice(-maxHeight)
|
|
11
|
+
: lines;
|
|
12
|
+
return (_jsxs(Box, { flexDirection: "column", borderStyle: "single", borderColor: "gray", paddingX: 1, children: [title && (_jsx(Text, { bold: true, dimColor: true, children: title })), displayLines.length === 0 ? (_jsx(Text, { dimColor: true, children: "No output" })) : (displayLines.map((line, index) => (_jsx(Text, { children: line }, index))))] }));
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=OutputRegion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OutputRegion.js","sourceRoot":"","sources":["../../../src/components/ui/OutputRegion.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAWhC;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAgC,CAAC,EACxD,KAAK,EACL,SAAS,EACT,KAAK,EACN,EAAE,EAAE;IACH,kDAAkD;IAClD,MAAM,YAAY,GAAG,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS;QACxD,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC;QACzB,CAAC,CAAC,KAAK,CAAC;IAEV,OAAO,CACL,MAAC,GAAG,IACF,aAAa,EAAC,QAAQ,EACtB,WAAW,EAAC,QAAQ,EACpB,WAAW,EAAC,MAAM,EAClB,QAAQ,EAAE,CAAC,aAEV,KAAK,IAAI,CACR,KAAC,IAAI,IAAC,IAAI,QAAC,QAAQ,kBAChB,KAAK,GACD,CACR,EACA,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAC3B,KAAC,IAAI,IAAC,QAAQ,gCAAiB,CAChC,CAAC,CAAC,CAAC,CACF,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAChC,KAAC,IAAI,cAAc,IAAI,IAAZ,KAAK,CAAe,CAChC,CAAC,CACH,IACG,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PhaseProgressView Component
|
|
3
|
+
* Task 2.1: Create phase progress visualization component
|
|
4
|
+
* Requirements: 1.4, 2.1, 2.2
|
|
5
|
+
*/
|
|
6
|
+
import React from 'react';
|
|
7
|
+
import type { ExtendedFlowPhase, WorkflowMode } from '../../types/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Props for PhaseProgressView
|
|
10
|
+
*/
|
|
11
|
+
export interface PhaseProgressViewProps {
|
|
12
|
+
readonly phases: readonly ExtendedFlowPhase['type'][];
|
|
13
|
+
readonly currentPhase: ExtendedFlowPhase['type'];
|
|
14
|
+
readonly mode: WorkflowMode;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* PhaseProgressView Component
|
|
18
|
+
* Displays workflow phases with visual status indicators
|
|
19
|
+
* Requirements: 1.4 - Display completed phases with checkmarks
|
|
20
|
+
* Requirements: 2.1, 2.2 - Visual status indicators for phase progress
|
|
21
|
+
*/
|
|
22
|
+
export declare const PhaseProgressView: React.FC<PhaseProgressViewProps>;
|
|
23
|
+
//# sourceMappingURL=PhaseProgressView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhaseProgressView.d.ts","sourceRoot":"","sources":["../../../src/components/ui/PhaseProgressView.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAE5E;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,SAAS,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;IACtD,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC7B;AAsHD;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAyB9D,CAAC"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
/**
|
|
4
|
+
* Get human-readable name for a phase
|
|
5
|
+
*/
|
|
6
|
+
function getPhaseDisplayName(phase) {
|
|
7
|
+
const names = {
|
|
8
|
+
'idle': 'Ready',
|
|
9
|
+
'initializing': 'Initialize',
|
|
10
|
+
'requirements-generating': 'Requirements',
|
|
11
|
+
'requirements-approval': 'Review Requirements',
|
|
12
|
+
'gap-analysis': 'Gap Analysis',
|
|
13
|
+
'gap-review': 'Review Gaps',
|
|
14
|
+
'design-generating': 'Design',
|
|
15
|
+
'design-approval': 'Review Design',
|
|
16
|
+
'design-validation': 'Validate Design',
|
|
17
|
+
'design-validation-review': 'Review Validation',
|
|
18
|
+
'tasks-generating': 'Tasks',
|
|
19
|
+
'tasks-approval': 'Review Tasks',
|
|
20
|
+
'implementing': 'Implementation',
|
|
21
|
+
'paused': 'Paused',
|
|
22
|
+
'validation': 'Validation',
|
|
23
|
+
'pr': 'Pull Request',
|
|
24
|
+
'merge-decision': 'Merge Decision',
|
|
25
|
+
'complete': 'Complete',
|
|
26
|
+
'aborted': 'Aborted',
|
|
27
|
+
'error': 'Error'
|
|
28
|
+
};
|
|
29
|
+
return names[phase] ?? phase;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get status indicator symbol
|
|
33
|
+
*/
|
|
34
|
+
function getStatusIndicator(status) {
|
|
35
|
+
switch (status) {
|
|
36
|
+
case 'completed':
|
|
37
|
+
return '\u2713'; // checkmark
|
|
38
|
+
case 'current':
|
|
39
|
+
return '\u25CF'; // filled circle
|
|
40
|
+
case 'pending':
|
|
41
|
+
return '\u25CB'; // empty circle
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get status color
|
|
46
|
+
*/
|
|
47
|
+
function getStatusColor(status) {
|
|
48
|
+
switch (status) {
|
|
49
|
+
case 'completed':
|
|
50
|
+
return 'green';
|
|
51
|
+
case 'current':
|
|
52
|
+
return 'yellow';
|
|
53
|
+
case 'pending':
|
|
54
|
+
return 'gray';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Determine phase status relative to current phase
|
|
59
|
+
*/
|
|
60
|
+
function getPhaseStatus(phase, currentPhase, phases) {
|
|
61
|
+
// Handle terminal phases
|
|
62
|
+
if (currentPhase === 'complete' || currentPhase === 'aborted' || currentPhase === 'error') {
|
|
63
|
+
if (phase === currentPhase)
|
|
64
|
+
return 'current';
|
|
65
|
+
// All other phases are completed for complete, or we consider the path leading to abort/error
|
|
66
|
+
return 'completed';
|
|
67
|
+
}
|
|
68
|
+
// Handle idle - nothing is completed yet
|
|
69
|
+
if (currentPhase === 'idle') {
|
|
70
|
+
return 'pending';
|
|
71
|
+
}
|
|
72
|
+
const currentIndex = phases.indexOf(currentPhase);
|
|
73
|
+
const phaseIndex = phases.indexOf(phase);
|
|
74
|
+
// If current phase not in the list, treat as pending
|
|
75
|
+
if (currentIndex === -1) {
|
|
76
|
+
return 'pending';
|
|
77
|
+
}
|
|
78
|
+
// Phase not in list
|
|
79
|
+
if (phaseIndex === -1) {
|
|
80
|
+
return 'pending';
|
|
81
|
+
}
|
|
82
|
+
if (phaseIndex < currentIndex) {
|
|
83
|
+
return 'completed';
|
|
84
|
+
}
|
|
85
|
+
else if (phaseIndex === currentIndex) {
|
|
86
|
+
return 'current';
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
return 'pending';
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Filter phases for display (skip terminal and special phases)
|
|
94
|
+
*/
|
|
95
|
+
function getDisplayPhases(phases) {
|
|
96
|
+
return phases.filter(phase => phase !== 'idle' &&
|
|
97
|
+
phase !== 'paused' &&
|
|
98
|
+
phase !== 'aborted' &&
|
|
99
|
+
phase !== 'error');
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* PhaseProgressView Component
|
|
103
|
+
* Displays workflow phases with visual status indicators
|
|
104
|
+
* Requirements: 1.4 - Display completed phases with checkmarks
|
|
105
|
+
* Requirements: 2.1, 2.2 - Visual status indicators for phase progress
|
|
106
|
+
*/
|
|
107
|
+
export const PhaseProgressView = ({ phases, currentPhase, mode: _mode }) => {
|
|
108
|
+
const displayPhases = getDisplayPhases(phases);
|
|
109
|
+
return (_jsx(Box, { flexDirection: "column", children: displayPhases.map((phase) => {
|
|
110
|
+
const status = getPhaseStatus(phase, currentPhase, phases);
|
|
111
|
+
const indicator = getStatusIndicator(status);
|
|
112
|
+
const color = getStatusColor(status);
|
|
113
|
+
const name = getPhaseDisplayName(phase);
|
|
114
|
+
return (_jsx(Box, { children: _jsxs(Text, { color: color, children: [indicator, " ", name] }) }, phase));
|
|
115
|
+
}) }));
|
|
116
|
+
};
|
|
117
|
+
//# sourceMappingURL=PhaseProgressView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhaseProgressView.js","sourceRoot":"","sources":["../../../src/components/ui/PhaseProgressView.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAiBhC;;GAEG;AACH,SAAS,mBAAmB,CAAC,KAAgC;IAC3D,MAAM,KAAK,GAA8C;QACvD,MAAM,EAAE,OAAO;QACf,cAAc,EAAE,YAAY;QAC5B,yBAAyB,EAAE,cAAc;QACzC,uBAAuB,EAAE,qBAAqB;QAC9C,cAAc,EAAE,cAAc;QAC9B,YAAY,EAAE,aAAa;QAC3B,mBAAmB,EAAE,QAAQ;QAC7B,iBAAiB,EAAE,eAAe;QAClC,mBAAmB,EAAE,iBAAiB;QACtC,0BAA0B,EAAE,mBAAmB;QAC/C,kBAAkB,EAAE,OAAO;QAC3B,gBAAgB,EAAE,cAAc;QAChC,cAAc,EAAE,gBAAgB;QAChC,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE,YAAY;QAC1B,IAAI,EAAE,cAAc;QACpB,gBAAgB,EAAE,gBAAgB;QAClC,UAAU,EAAE,UAAU;QACtB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,OAAO;KACjB,CAAC;IACF,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,MAAmB;IAC7C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,WAAW;YACd,OAAO,QAAQ,CAAC,CAAC,YAAY;QAC/B,KAAK,SAAS;YACZ,OAAO,QAAQ,CAAC,CAAC,gBAAgB;QACnC,KAAK,SAAS;YACZ,OAAO,QAAQ,CAAC,CAAC,eAAe;IACpC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,MAAmB;IACzC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,WAAW;YACd,OAAO,OAAO,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO,QAAQ,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CACrB,KAAgC,EAChC,YAAuC,EACvC,MAA4C;IAE5C,yBAAyB;IACzB,IAAI,YAAY,KAAK,UAAU,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,OAAO,EAAE,CAAC;QAC1F,IAAI,KAAK,KAAK,YAAY;YAAE,OAAO,SAAS,CAAC;QAC7C,8FAA8F;QAC9F,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,yCAAyC;IACzC,IAAI,YAAY,KAAK,MAAM,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAEzC,qDAAqD;IACrD,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,oBAAoB;IACpB,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,UAAU,GAAG,YAAY,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC;IACrB,CAAC;SAAM,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;QACvC,OAAO,SAAS,CAAC;IACnB,CAAC;SAAM,CAAC;QACN,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,MAA4C;IACpE,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC3B,KAAK,KAAK,MAAM;QAChB,KAAK,KAAK,QAAQ;QAClB,KAAK,KAAK,SAAS;QACnB,KAAK,KAAK,OAAO,CAClB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAqC,CAAC,EAClE,MAAM,EACN,YAAY,EACZ,IAAI,EAAE,KAAK,EACZ,EAAE,EAAE;IACH,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAE/C,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,YACxB,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;YAC3D,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YACrC,MAAM,IAAI,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAExC,OAAO,CACL,KAAC,GAAG,cACF,MAAC,IAAI,IAAC,KAAK,EAAE,KAAK,aACf,SAAS,OAAG,IAAI,IACZ,IAHC,KAAK,CAIT,CACP,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProgressBar component wrapper
|
|
3
|
+
* Requirements: 6.4
|
|
4
|
+
*/
|
|
5
|
+
import React from 'react';
|
|
6
|
+
/**
|
|
7
|
+
* Props for ProgressBar component
|
|
8
|
+
*/
|
|
9
|
+
interface ProgressBarProps {
|
|
10
|
+
readonly current: number;
|
|
11
|
+
readonly total: number;
|
|
12
|
+
readonly label?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Progress bar for task counts during implementation phase
|
|
16
|
+
* Requirements: 6.4 - Display progress bars or task counts
|
|
17
|
+
*/
|
|
18
|
+
export declare const ProgressBar: React.FC<ProgressBarProps>;
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=ProgressBar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgressBar.d.ts","sourceRoot":"","sources":["../../../src/components/ui/ProgressBar.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B;;GAEG;AACH,UAAU,gBAAgB;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAgBlD,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from 'ink';
|
|
3
|
+
import { ProgressBar as InkProgressBar } from '@inkjs/ui';
|
|
4
|
+
/**
|
|
5
|
+
* Progress bar for task counts during implementation phase
|
|
6
|
+
* Requirements: 6.4 - Display progress bars or task counts
|
|
7
|
+
*/
|
|
8
|
+
export const ProgressBar = ({ current, total, label }) => {
|
|
9
|
+
const progress = total > 0 ? current / total : 0;
|
|
10
|
+
return (_jsxs(Box, { flexDirection: "column", children: [label && _jsx(Text, { children: label }), _jsxs(Box, { children: [_jsx(InkProgressBar, { value: progress }), _jsxs(Text, { children: [" ", current, "/", total] })] })] }));
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=ProgressBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgressBar.js","sourceRoot":"","sources":["../../../src/components/ui/ProgressBar.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,WAAW,IAAI,cAAc,EAAE,MAAM,WAAW,CAAC;AAW1D;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAA+B,CAAC,EACtD,OAAO,EACP,KAAK,EACL,KAAK,EACN,EAAE,EAAE;IACH,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjD,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACxB,KAAK,IAAI,KAAC,IAAI,cAAE,KAAK,GAAQ,EAC9B,MAAC,GAAG,eACF,KAAC,cAAc,IAAC,KAAK,EAAE,QAAQ,GAAI,EACnC,MAAC,IAAI,oBAAG,OAAO,OAAG,KAAK,IAAQ,IAC3B,IACF,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SelectMenu component for interactive selection
|
|
3
|
+
* Requirements: 6.5, 6.6
|
|
4
|
+
*/
|
|
5
|
+
import React from 'react';
|
|
6
|
+
/**
|
|
7
|
+
* Menu item interface
|
|
8
|
+
*/
|
|
9
|
+
export interface SelectMenuItem<T = string> {
|
|
10
|
+
readonly label: string;
|
|
11
|
+
readonly value: T;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Props for SelectMenu component
|
|
15
|
+
*/
|
|
16
|
+
interface SelectMenuProps<T = string> {
|
|
17
|
+
readonly items: readonly SelectMenuItem<T>[];
|
|
18
|
+
readonly onSelect: (item: SelectMenuItem<T>) => void;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Interactive selection menu for approval gates
|
|
22
|
+
* Requirements: 6.5 - Support keyboard navigation
|
|
23
|
+
* Requirements: 6.6 - Render approval gates as interactive selection menus
|
|
24
|
+
*/
|
|
25
|
+
export declare function SelectMenu<T = string>({ items, onSelect }: SelectMenuProps<T>): React.ReactElement;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=SelectMenu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectMenu.d.ts","sourceRoot":"","sources":["../../../src/components/ui/SelectMenu.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B;;GAEG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,MAAM;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;CACnB;AAED;;GAEG;AACH,UAAU,eAAe,CAAC,CAAC,GAAG,MAAM;IAClC,QAAQ,CAAC,KAAK,EAAE,SAAS,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;CACtD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,GAAG,MAAM,EAAE,EACrC,KAAK,EACL,QAAQ,EACT,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,CAmBzC"}
|