ralph-starter 0.0.1 → 0.1.1-beta.1
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 +707 -17
- package/dist/auth/browser.d.ts +10 -0
- package/dist/auth/browser.d.ts.map +1 -0
- package/dist/auth/browser.js +56 -0
- package/dist/auth/browser.js.map +1 -0
- package/dist/auth/index.d.ts +5 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +5 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/oauth-server.d.ts +20 -0
- package/dist/auth/oauth-server.d.ts.map +1 -0
- package/dist/auth/oauth-server.js +168 -0
- package/dist/auth/oauth-server.js.map +1 -0
- package/dist/auth/pkce.d.ts +46 -0
- package/dist/auth/pkce.d.ts.map +1 -0
- package/dist/auth/pkce.js +57 -0
- package/dist/auth/pkce.js.map +1 -0
- package/dist/auth/providers/base.d.ts +52 -0
- package/dist/auth/providers/base.d.ts.map +1 -0
- package/dist/auth/providers/base.js +70 -0
- package/dist/auth/providers/base.js.map +1 -0
- package/dist/auth/providers/index.d.ts +23 -0
- package/dist/auth/providers/index.d.ts.map +1 -0
- package/dist/auth/providers/index.js +39 -0
- package/dist/auth/providers/index.js.map +1 -0
- package/dist/auth/providers/linear.d.ts +37 -0
- package/dist/auth/providers/linear.d.ts.map +1 -0
- package/dist/auth/providers/linear.js +46 -0
- package/dist/auth/providers/linear.js.map +1 -0
- package/dist/auth/providers/notion.d.ts +36 -0
- package/dist/auth/providers/notion.d.ts.map +1 -0
- package/dist/auth/providers/notion.js +75 -0
- package/dist/auth/providers/notion.js.map +1 -0
- package/dist/auth/providers/todoist.d.ts +29 -0
- package/dist/auth/providers/todoist.d.ts.map +1 -0
- package/dist/auth/providers/todoist.js +40 -0
- package/dist/auth/providers/todoist.js.map +1 -0
- package/dist/automation/git.d.ts +15 -0
- package/dist/automation/git.d.ts.map +1 -0
- package/dist/automation/git.js +73 -0
- package/dist/automation/git.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +192 -19
- package/dist/cli.js.map +1 -0
- package/dist/commands/auth.d.ts +14 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +243 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/check.d.ts +12 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +124 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/config.d.ts +13 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +374 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/init.d.ts +31 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +353 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/integrations.d.ts +17 -0
- package/dist/commands/integrations.d.ts.map +1 -0
- package/dist/commands/integrations.js +193 -0
- package/dist/commands/integrations.js.map +1 -0
- package/dist/commands/plan.d.ts +5 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +80 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/run.d.ts +26 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +351 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/scaffold.d.ts +9 -0
- package/dist/commands/scaffold.d.ts.map +1 -0
- package/dist/commands/scaffold.js +128 -0
- package/dist/commands/scaffold.js.map +1 -0
- package/dist/commands/setup.d.ts +12 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +27 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/skill.d.ts +6 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +151 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/source.d.ts +17 -0
- package/dist/commands/source.d.ts.map +1 -0
- package/dist/commands/source.js +173 -0
- package/dist/commands/source.js.map +1 -0
- package/dist/config/manager.d.ts +70 -0
- package/dist/config/manager.d.ts.map +1 -0
- package/dist/config/manager.js +227 -0
- package/dist/config/manager.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -2
- package/dist/index.js.map +1 -0
- package/dist/integrations/_template/auth.d.ts +29 -0
- package/dist/integrations/_template/auth.d.ts.map +1 -0
- package/dist/integrations/_template/auth.js +42 -0
- package/dist/integrations/_template/auth.js.map +1 -0
- package/dist/integrations/_template/index.d.ts +8 -0
- package/dist/integrations/_template/index.d.ts.map +1 -0
- package/dist/integrations/_template/index.js +8 -0
- package/dist/integrations/_template/index.js.map +1 -0
- package/dist/integrations/_template/source.d.ts +34 -0
- package/dist/integrations/_template/source.d.ts.map +1 -0
- package/dist/integrations/_template/source.js +124 -0
- package/dist/integrations/_template/source.js.map +1 -0
- package/dist/integrations/base.d.ts +158 -0
- package/dist/integrations/base.d.ts.map +1 -0
- package/dist/integrations/base.js +109 -0
- package/dist/integrations/base.js.map +1 -0
- package/dist/integrations/github/index.d.ts +8 -0
- package/dist/integrations/github/index.d.ts.map +1 -0
- package/dist/integrations/github/index.js +8 -0
- package/dist/integrations/github/index.js.map +1 -0
- package/dist/integrations/github/source.d.ts +26 -0
- package/dist/integrations/github/source.d.ts.map +1 -0
- package/dist/integrations/github/source.js +190 -0
- package/dist/integrations/github/source.js.map +1 -0
- package/dist/integrations/index.d.ts +37 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +71 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/linear/auth.d.ts +37 -0
- package/dist/integrations/linear/auth.d.ts.map +1 -0
- package/dist/integrations/linear/auth.js +45 -0
- package/dist/integrations/linear/auth.js.map +1 -0
- package/dist/integrations/linear/index.d.ts +9 -0
- package/dist/integrations/linear/index.d.ts.map +1 -0
- package/dist/integrations/linear/index.js +9 -0
- package/dist/integrations/linear/index.js.map +1 -0
- package/dist/integrations/linear/source.d.ts +26 -0
- package/dist/integrations/linear/source.d.ts.map +1 -0
- package/dist/integrations/linear/source.js +248 -0
- package/dist/integrations/linear/source.js.map +1 -0
- package/dist/integrations/notion/index.d.ts +8 -0
- package/dist/integrations/notion/index.d.ts.map +1 -0
- package/dist/integrations/notion/index.js +8 -0
- package/dist/integrations/notion/index.js.map +1 -0
- package/dist/integrations/notion/source.d.ts +53 -0
- package/dist/integrations/notion/source.d.ts.map +1 -0
- package/dist/integrations/notion/source.js +463 -0
- package/dist/integrations/notion/source.js.map +1 -0
- package/dist/llm/api.d.ts +29 -0
- package/dist/llm/api.d.ts.map +1 -0
- package/dist/llm/api.js +152 -0
- package/dist/llm/api.js.map +1 -0
- package/dist/llm/index.d.ts +7 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +7 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/providers.d.ts +24 -0
- package/dist/llm/providers.d.ts.map +1 -0
- package/dist/llm/providers.js +51 -0
- package/dist/llm/providers.js.map +1 -0
- package/dist/loop/__tests__/agents.test.d.ts +2 -0
- package/dist/loop/__tests__/agents.test.d.ts.map +1 -0
- package/dist/loop/__tests__/agents.test.js +183 -0
- package/dist/loop/__tests__/agents.test.js.map +1 -0
- package/dist/loop/__tests__/circuit-breaker.test.d.ts +2 -0
- package/dist/loop/__tests__/circuit-breaker.test.d.ts.map +1 -0
- package/dist/loop/__tests__/circuit-breaker.test.js +161 -0
- package/dist/loop/__tests__/circuit-breaker.test.js.map +1 -0
- package/dist/loop/__tests__/cost-tracker.test.d.ts +2 -0
- package/dist/loop/__tests__/cost-tracker.test.d.ts.map +1 -0
- package/dist/loop/__tests__/cost-tracker.test.js +200 -0
- package/dist/loop/__tests__/cost-tracker.test.js.map +1 -0
- package/dist/loop/__tests__/rate-limiter.test.d.ts +2 -0
- package/dist/loop/__tests__/rate-limiter.test.d.ts.map +1 -0
- package/dist/loop/__tests__/rate-limiter.test.js +198 -0
- package/dist/loop/__tests__/rate-limiter.test.js.map +1 -0
- package/dist/loop/__tests__/validation.test.d.ts +2 -0
- package/dist/loop/__tests__/validation.test.d.ts.map +1 -0
- package/dist/loop/__tests__/validation.test.js +234 -0
- package/dist/loop/__tests__/validation.test.js.map +1 -0
- package/dist/loop/agents.d.ts +26 -0
- package/dist/loop/agents.d.ts.map +1 -0
- package/dist/loop/agents.js +188 -0
- package/dist/loop/agents.js.map +1 -0
- package/dist/loop/circuit-breaker.d.ts +61 -0
- package/dist/loop/circuit-breaker.d.ts.map +1 -0
- package/dist/loop/circuit-breaker.js +143 -0
- package/dist/loop/circuit-breaker.js.map +1 -0
- package/dist/loop/cost-tracker.d.ts +90 -0
- package/dist/loop/cost-tracker.d.ts.map +1 -0
- package/dist/loop/cost-tracker.js +229 -0
- package/dist/loop/cost-tracker.js.map +1 -0
- package/dist/loop/estimator.d.ts +20 -0
- package/dist/loop/estimator.d.ts.map +1 -0
- package/dist/loop/estimator.js +123 -0
- package/dist/loop/estimator.js.map +1 -0
- package/dist/loop/executor.d.ts +44 -0
- package/dist/loop/executor.d.ts.map +1 -0
- package/dist/loop/executor.js +646 -0
- package/dist/loop/executor.js.map +1 -0
- package/dist/loop/progress.d.ts +34 -0
- package/dist/loop/progress.d.ts.map +1 -0
- package/dist/loop/progress.js +186 -0
- package/dist/loop/progress.js.map +1 -0
- package/dist/loop/rate-limiter.d.ts +71 -0
- package/dist/loop/rate-limiter.d.ts.map +1 -0
- package/dist/loop/rate-limiter.js +151 -0
- package/dist/loop/rate-limiter.js.map +1 -0
- package/dist/loop/semantic-analyzer.d.ts +33 -0
- package/dist/loop/semantic-analyzer.d.ts.map +1 -0
- package/dist/loop/semantic-analyzer.js +153 -0
- package/dist/loop/semantic-analyzer.js.map +1 -0
- package/dist/loop/skills.d.ts +29 -0
- package/dist/loop/skills.d.ts.map +1 -0
- package/dist/loop/skills.js +174 -0
- package/dist/loop/skills.js.map +1 -0
- package/dist/loop/step-detector.d.ts +17 -0
- package/dist/loop/step-detector.d.ts.map +1 -0
- package/dist/loop/step-detector.js +280 -0
- package/dist/loop/step-detector.js.map +1 -0
- package/dist/loop/task-counter.d.ts +41 -0
- package/dist/loop/task-counter.d.ts.map +1 -0
- package/dist/loop/task-counter.js +99 -0
- package/dist/loop/task-counter.js.map +1 -0
- package/dist/loop/validation.d.ts +28 -0
- package/dist/loop/validation.d.ts.map +1 -0
- package/dist/loop/validation.js +138 -0
- package/dist/loop/validation.js.map +1 -0
- package/dist/mcp/core/init.d.ts +15 -0
- package/dist/mcp/core/init.d.ts.map +1 -0
- package/dist/mcp/core/init.js +272 -0
- package/dist/mcp/core/init.js.map +1 -0
- package/dist/mcp/core/plan.d.ts +15 -0
- package/dist/mcp/core/plan.d.ts.map +1 -0
- package/dist/mcp/core/plan.js +90 -0
- package/dist/mcp/core/plan.js.map +1 -0
- package/dist/mcp/core/run.d.ts +26 -0
- package/dist/mcp/core/run.d.ts.map +1 -0
- package/dist/mcp/core/run.js +114 -0
- package/dist/mcp/core/run.js.map +1 -0
- package/dist/mcp/prompts.d.ts +10 -0
- package/dist/mcp/prompts.d.ts.map +1 -0
- package/dist/mcp/prompts.js +163 -0
- package/dist/mcp/prompts.js.map +1 -0
- package/dist/mcp/resources.d.ts +16 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +114 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/server.d.ts +10 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +73 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +15 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +316 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/presets/index.d.ts +36 -0
- package/dist/presets/index.d.ts.map +1 -0
- package/dist/presets/index.js +236 -0
- package/dist/presets/index.js.map +1 -0
- package/dist/setup/agent-detector.d.ts +57 -0
- package/dist/setup/agent-detector.d.ts.map +1 -0
- package/dist/setup/agent-detector.js +170 -0
- package/dist/setup/agent-detector.js.map +1 -0
- package/dist/setup/index.d.ts +7 -0
- package/dist/setup/index.d.ts.map +1 -0
- package/dist/setup/index.js +7 -0
- package/dist/setup/index.js.map +1 -0
- package/dist/setup/llm-tester.d.ts +33 -0
- package/dist/setup/llm-tester.d.ts.map +1 -0
- package/dist/setup/llm-tester.js +105 -0
- package/dist/setup/llm-tester.js.map +1 -0
- package/dist/setup/wizard.d.ts +19 -0
- package/dist/setup/wizard.d.ts.map +1 -0
- package/dist/setup/wizard.js +313 -0
- package/dist/setup/wizard.js.map +1 -0
- package/dist/sources/__tests__/file.test.d.ts +2 -0
- package/dist/sources/__tests__/file.test.d.ts.map +1 -0
- package/dist/sources/__tests__/file.test.js +126 -0
- package/dist/sources/__tests__/file.test.js.map +1 -0
- package/dist/sources/__tests__/github.test.d.ts +2 -0
- package/dist/sources/__tests__/github.test.d.ts.map +1 -0
- package/dist/sources/__tests__/github.test.js +157 -0
- package/dist/sources/__tests__/github.test.js.map +1 -0
- package/dist/sources/base.d.ts +72 -0
- package/dist/sources/base.d.ts.map +1 -0
- package/dist/sources/base.js +127 -0
- package/dist/sources/base.js.map +1 -0
- package/dist/sources/builtin/file.d.ts +21 -0
- package/dist/sources/builtin/file.d.ts.map +1 -0
- package/dist/sources/builtin/file.js +129 -0
- package/dist/sources/builtin/file.js.map +1 -0
- package/dist/sources/builtin/github-scraper.d.ts +65 -0
- package/dist/sources/builtin/github-scraper.d.ts.map +1 -0
- package/dist/sources/builtin/github-scraper.js +324 -0
- package/dist/sources/builtin/github-scraper.js.map +1 -0
- package/dist/sources/builtin/pdf.d.ts +24 -0
- package/dist/sources/builtin/pdf.d.ts.map +1 -0
- package/dist/sources/builtin/pdf.js +174 -0
- package/dist/sources/builtin/pdf.js.map +1 -0
- package/dist/sources/builtin/url.d.ts +47 -0
- package/dist/sources/builtin/url.d.ts.map +1 -0
- package/dist/sources/builtin/url.js +429 -0
- package/dist/sources/builtin/url.js.map +1 -0
- package/dist/sources/config.d.ts +72 -0
- package/dist/sources/config.d.ts.map +1 -0
- package/dist/sources/config.js +215 -0
- package/dist/sources/config.js.map +1 -0
- package/dist/sources/index.d.ts +47 -0
- package/dist/sources/index.d.ts.map +1 -0
- package/dist/sources/index.js +210 -0
- package/dist/sources/index.js.map +1 -0
- package/dist/sources/integrations/github.d.ts +24 -0
- package/dist/sources/integrations/github.d.ts.map +1 -0
- package/dist/sources/integrations/github.js +193 -0
- package/dist/sources/integrations/github.js.map +1 -0
- package/dist/sources/integrations/linear.d.ts +18 -0
- package/dist/sources/integrations/linear.d.ts.map +1 -0
- package/dist/sources/integrations/linear.js +197 -0
- package/dist/sources/integrations/linear.js.map +1 -0
- package/dist/sources/integrations/notion.d.ts +39 -0
- package/dist/sources/integrations/notion.d.ts.map +1 -0
- package/dist/sources/integrations/notion.js +343 -0
- package/dist/sources/integrations/notion.js.map +1 -0
- package/dist/sources/integrations/todoist.d.ts +18 -0
- package/dist/sources/integrations/todoist.d.ts.map +1 -0
- package/dist/sources/integrations/todoist.js +154 -0
- package/dist/sources/integrations/todoist.js.map +1 -0
- package/dist/sources/types.d.ts +106 -0
- package/dist/sources/types.d.ts.map +1 -0
- package/dist/sources/types.js +9 -0
- package/dist/sources/types.js.map +1 -0
- package/dist/ui/index.d.ts +3 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +3 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/progress-renderer.d.ts +54 -0
- package/dist/ui/progress-renderer.d.ts.map +1 -0
- package/dist/ui/progress-renderer.js +118 -0
- package/dist/ui/progress-renderer.js.map +1 -0
- package/dist/ui/shimmer.d.ts +16 -0
- package/dist/ui/shimmer.d.ts.map +1 -0
- package/dist/ui/shimmer.js +31 -0
- package/dist/ui/shimmer.js.map +1 -0
- package/dist/wizard/ascii-art.d.ts +93 -0
- package/dist/wizard/ascii-art.d.ts.map +1 -0
- package/dist/wizard/ascii-art.js +378 -0
- package/dist/wizard/ascii-art.js.map +1 -0
- package/dist/wizard/idea-prompts.d.ts +18 -0
- package/dist/wizard/idea-prompts.d.ts.map +1 -0
- package/dist/wizard/idea-prompts.js +154 -0
- package/dist/wizard/idea-prompts.js.map +1 -0
- package/dist/wizard/idea-ui.d.ts +34 -0
- package/dist/wizard/idea-ui.d.ts.map +1 -0
- package/dist/wizard/idea-ui.js +225 -0
- package/dist/wizard/idea-ui.js.map +1 -0
- package/dist/wizard/ideas.d.ts +27 -0
- package/dist/wizard/ideas.d.ts.map +1 -0
- package/dist/wizard/ideas.js +511 -0
- package/dist/wizard/ideas.js.map +1 -0
- package/dist/wizard/index.d.ts +11 -0
- package/dist/wizard/index.d.ts.map +1 -0
- package/dist/wizard/index.js +472 -0
- package/dist/wizard/index.js.map +1 -0
- package/dist/wizard/llm.d.ts +14 -0
- package/dist/wizard/llm.d.ts.map +1 -0
- package/dist/wizard/llm.js +420 -0
- package/dist/wizard/llm.js.map +1 -0
- package/dist/wizard/prompts.d.ts +75 -0
- package/dist/wizard/prompts.d.ts.map +1 -0
- package/dist/wizard/prompts.js +455 -0
- package/dist/wizard/prompts.js.map +1 -0
- package/dist/wizard/spec-generator.d.ts +14 -0
- package/dist/wizard/spec-generator.d.ts.map +1 -0
- package/dist/wizard/spec-generator.js +200 -0
- package/dist/wizard/spec-generator.js.map +1 -0
- package/dist/wizard/types.d.ts +53 -0
- package/dist/wizard/types.d.ts.map +1 -0
- package/dist/wizard/types.js +10 -0
- package/dist/wizard/types.js.map +1 -0
- package/dist/wizard/ui.d.ts +57 -0
- package/dist/wizard/ui.d.ts.map +1 -0
- package/dist/wizard/ui.js +211 -0
- package/dist/wizard/ui.js.map +1 -0
- package/package.json +67 -8
|
@@ -0,0 +1,472 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { join, resolve } from 'node:path';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import inquirer from 'inquirer';
|
|
5
|
+
import ora from 'ora';
|
|
6
|
+
import { detectProject, detectRalphPlaybook, initCommand } from '../commands/init.js';
|
|
7
|
+
import { planCommand } from '../commands/plan.js';
|
|
8
|
+
import { runCommand } from '../commands/run.js';
|
|
9
|
+
import { getConfiguredLLM, promptForLLMSetup } from '../config/manager.js';
|
|
10
|
+
import { detectBestAgent } from '../loop/agents.js';
|
|
11
|
+
import { isClaudeCodeAvailable } from '../setup/agent-detector.js';
|
|
12
|
+
import { runSetupWizard } from '../setup/wizard.js';
|
|
13
|
+
import { runIdeaMode } from './ideas.js';
|
|
14
|
+
import { isLlmAvailable, refineIdea } from './llm.js';
|
|
15
|
+
import { askContinueAction, askExecutionOptions, askExistingProjectAction, askForComplexity, askForFeatures, askForIdea, askForProjectType, askForTechStack, askHasIdea, askImproveAction, askImprovementPrompt, askRalphPlaybookAction, askWhatToModify, askWorkingDirectory, confirmPlan, } from './prompts.js';
|
|
16
|
+
import { generateAgentsMd, generateSpec, sanitizeFilename } from './spec-generator.js';
|
|
17
|
+
import { DEFAULT_WIZARD_ANSWERS } from './types.js';
|
|
18
|
+
import { formatComplexity, formatProjectType, showDetectedProject, showDetectedRalphPlaybook, showError, showExecutionPlan, showRefinedSummary, showSuccess, showWelcome, } from './ui.js';
|
|
19
|
+
// Global spinner reference for cleanup on exit
|
|
20
|
+
let activeSpinner = null;
|
|
21
|
+
/**
|
|
22
|
+
* Handle graceful exit on Ctrl+C
|
|
23
|
+
*/
|
|
24
|
+
function setupGracefulExit() {
|
|
25
|
+
const cleanup = () => {
|
|
26
|
+
if (activeSpinner) {
|
|
27
|
+
activeSpinner.stop();
|
|
28
|
+
}
|
|
29
|
+
console.log(chalk.dim('\n\nExiting...'));
|
|
30
|
+
process.exit(0);
|
|
31
|
+
};
|
|
32
|
+
// Handle SIGINT (Ctrl+C)
|
|
33
|
+
process.on('SIGINT', cleanup);
|
|
34
|
+
// Handle SIGTERM
|
|
35
|
+
process.on('SIGTERM', cleanup);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Check if error is an exit/interrupt error from inquirer
|
|
39
|
+
*/
|
|
40
|
+
function isExitError(error) {
|
|
41
|
+
if (error instanceof Error) {
|
|
42
|
+
return (error.name === 'ExitPromptError' ||
|
|
43
|
+
error.message.includes('User force closed') ||
|
|
44
|
+
error.message.includes('SIGINT'));
|
|
45
|
+
}
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Run the interactive wizard
|
|
50
|
+
*/
|
|
51
|
+
export async function runWizard() {
|
|
52
|
+
// Setup graceful exit handling
|
|
53
|
+
setupGracefulExit();
|
|
54
|
+
const spinner = ora();
|
|
55
|
+
activeSpinner = spinner;
|
|
56
|
+
try {
|
|
57
|
+
await runWizardFlow(spinner);
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
// Handle graceful exit (Ctrl+C)
|
|
61
|
+
if (isExitError(error)) {
|
|
62
|
+
spinner.stop();
|
|
63
|
+
console.log(chalk.dim('\n\nExiting...'));
|
|
64
|
+
process.exit(0);
|
|
65
|
+
}
|
|
66
|
+
// Re-throw other errors
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
finally {
|
|
70
|
+
activeSpinner = null;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Check if LLM is available (either Claude Code CLI or API key)
|
|
75
|
+
*/
|
|
76
|
+
async function checkLLMAvailability() {
|
|
77
|
+
// Priority 1: Check for Claude Code CLI
|
|
78
|
+
const claudeCheck = await isClaudeCodeAvailable();
|
|
79
|
+
if (claudeCheck.available) {
|
|
80
|
+
return { available: true, usesClaudeCode: true, needsSetup: false };
|
|
81
|
+
}
|
|
82
|
+
// Priority 2: Check for API key
|
|
83
|
+
const llmConfig = getConfiguredLLM();
|
|
84
|
+
if (llmConfig) {
|
|
85
|
+
return { available: true, usesClaudeCode: false, needsSetup: false };
|
|
86
|
+
}
|
|
87
|
+
// Nothing configured
|
|
88
|
+
return { available: false, usesClaudeCode: false, needsSetup: true };
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Main wizard flow (extracted for cleaner error handling)
|
|
92
|
+
*/
|
|
93
|
+
async function runWizardFlow(spinner) {
|
|
94
|
+
// First-run detection: Check if LLM is configured
|
|
95
|
+
spinner.start('Checking configuration...');
|
|
96
|
+
const llmStatus = await checkLLMAvailability();
|
|
97
|
+
spinner.stop();
|
|
98
|
+
if (llmStatus.needsSetup) {
|
|
99
|
+
console.log();
|
|
100
|
+
console.log(chalk.yellow(' No LLM configured yet.'));
|
|
101
|
+
console.log(chalk.dim(' The wizard uses AI to help refine your project idea.'));
|
|
102
|
+
console.log();
|
|
103
|
+
const { action } = await inquirer.prompt([
|
|
104
|
+
{
|
|
105
|
+
type: 'list',
|
|
106
|
+
name: 'action',
|
|
107
|
+
message: 'What would you like to do?',
|
|
108
|
+
choices: [
|
|
109
|
+
{ name: 'Run setup wizard (recommended)', value: 'setup' },
|
|
110
|
+
{ name: 'Enter API key now', value: 'quick' },
|
|
111
|
+
{ name: 'Continue anyway (will use template fallbacks)', value: 'continue' },
|
|
112
|
+
],
|
|
113
|
+
},
|
|
114
|
+
]);
|
|
115
|
+
if (action === 'setup') {
|
|
116
|
+
const result = await runSetupWizard();
|
|
117
|
+
if (!result.success) {
|
|
118
|
+
console.log(chalk.dim(' Setup cancelled. You can run it later with: ralph-starter setup'));
|
|
119
|
+
console.log();
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
else if (action === 'quick') {
|
|
124
|
+
const result = await promptForLLMSetup();
|
|
125
|
+
if (!result) {
|
|
126
|
+
console.log(chalk.dim(' No API key provided. Continuing with template fallbacks...'));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// 'continue' - proceed with fallbacks
|
|
130
|
+
console.log();
|
|
131
|
+
}
|
|
132
|
+
// Check for agent
|
|
133
|
+
spinner.start('Checking for coding agents...');
|
|
134
|
+
const agent = await detectBestAgent();
|
|
135
|
+
spinner.stop();
|
|
136
|
+
if (!agent) {
|
|
137
|
+
showError('No coding agent found!', 'ralph-starter needs a coding agent to build your project.', 'Install Claude Code: npm install -g @anthropic-ai/claude-code');
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
// Detect if we're in an existing project before showing welcome
|
|
141
|
+
const cwd = process.cwd();
|
|
142
|
+
const cwdPlaybook = detectRalphPlaybook(cwd);
|
|
143
|
+
const cwdProject = detectProject(cwd);
|
|
144
|
+
const cwdIsRalphProject = cwdPlaybook.hasPlaybook;
|
|
145
|
+
const cwdIsExistingProject = cwdIsRalphProject || cwdProject.type !== 'unknown';
|
|
146
|
+
// Show welcome
|
|
147
|
+
showWelcome();
|
|
148
|
+
// If existing project detected, show info
|
|
149
|
+
if (cwdIsRalphProject) {
|
|
150
|
+
showDetectedRalphPlaybook(cwdPlaybook, cwd);
|
|
151
|
+
}
|
|
152
|
+
else if (cwdIsExistingProject) {
|
|
153
|
+
showDetectedProject(cwdProject, cwd);
|
|
154
|
+
}
|
|
155
|
+
// Initialize answers
|
|
156
|
+
const answers = {
|
|
157
|
+
...DEFAULT_WIZARD_ANSWERS,
|
|
158
|
+
rawIdea: '',
|
|
159
|
+
projectName: '',
|
|
160
|
+
projectDescription: '',
|
|
161
|
+
suggestedFeatures: [],
|
|
162
|
+
selectedFeatures: [],
|
|
163
|
+
techStack: {},
|
|
164
|
+
complexity: 'mvp',
|
|
165
|
+
autoRun: true,
|
|
166
|
+
autoCommit: false,
|
|
167
|
+
workingDirectory: process.cwd(),
|
|
168
|
+
};
|
|
169
|
+
// Step 1: Get the idea (with optional brainstorming or improve existing)
|
|
170
|
+
let continueWizard = true;
|
|
171
|
+
while (continueWizard) {
|
|
172
|
+
// Ask if user has an idea, needs help, or wants to improve existing
|
|
173
|
+
const hasIdea = await askHasIdea({
|
|
174
|
+
isExistingProject: cwdIsExistingProject,
|
|
175
|
+
isRalphProject: cwdIsRalphProject,
|
|
176
|
+
});
|
|
177
|
+
// Handle "improve existing project" flow
|
|
178
|
+
if (hasIdea === 'improve_existing') {
|
|
179
|
+
const improveAction = await askImproveAction();
|
|
180
|
+
if (improveAction === 'prompt') {
|
|
181
|
+
// User gives specific instructions
|
|
182
|
+
const improvementPrompt = await askImprovementPrompt();
|
|
183
|
+
console.log();
|
|
184
|
+
console.log(chalk.cyan.bold(' Starting improvement loop...'));
|
|
185
|
+
console.log();
|
|
186
|
+
// Run with the improvement as the task
|
|
187
|
+
await runCommand(improvementPrompt, {
|
|
188
|
+
auto: true,
|
|
189
|
+
commit: false,
|
|
190
|
+
validate: true,
|
|
191
|
+
});
|
|
192
|
+
showSuccess('Improvement complete!');
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
// Analyze and suggest improvements
|
|
197
|
+
console.log();
|
|
198
|
+
console.log(chalk.cyan.bold(' Analyzing project...'));
|
|
199
|
+
console.log();
|
|
200
|
+
const analysisPrompt = `Analyze this codebase and suggest improvements. Look at:
|
|
201
|
+
1. Code quality and best practices
|
|
202
|
+
2. Missing features or incomplete implementations
|
|
203
|
+
3. Performance opportunities
|
|
204
|
+
4. Security concerns
|
|
205
|
+
5. Developer experience improvements
|
|
206
|
+
|
|
207
|
+
Provide a prioritized list of suggestions with explanations.`;
|
|
208
|
+
await runCommand(analysisPrompt, {
|
|
209
|
+
auto: true,
|
|
210
|
+
commit: false,
|
|
211
|
+
validate: false,
|
|
212
|
+
maxIterations: 5,
|
|
213
|
+
});
|
|
214
|
+
showSuccess('Analysis complete!');
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
let idea;
|
|
219
|
+
if (hasIdea === 'need_help') {
|
|
220
|
+
// Launch idea mode
|
|
221
|
+
const selectedIdea = await runIdeaMode();
|
|
222
|
+
if (selectedIdea === null) {
|
|
223
|
+
// User wants to describe their own after browsing ideas
|
|
224
|
+
idea = await askForIdea();
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
idea = selectedIdea;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
idea = await askForIdea();
|
|
232
|
+
}
|
|
233
|
+
answers.rawIdea = idea;
|
|
234
|
+
// Refine with LLM
|
|
235
|
+
spinner.start('Thinking about your idea...');
|
|
236
|
+
let refinedIdea;
|
|
237
|
+
try {
|
|
238
|
+
refinedIdea = await refineIdea(idea);
|
|
239
|
+
spinner.succeed('Got it!');
|
|
240
|
+
}
|
|
241
|
+
catch (_error) {
|
|
242
|
+
spinner.fail('Could not analyze idea');
|
|
243
|
+
// Use fallback
|
|
244
|
+
refinedIdea = {
|
|
245
|
+
projectName: 'my-project',
|
|
246
|
+
projectDescription: idea,
|
|
247
|
+
projectType: 'web',
|
|
248
|
+
suggestedStack: { frontend: 'react', backend: 'nodejs' },
|
|
249
|
+
coreFeatures: ['Core functionality'],
|
|
250
|
+
suggestedFeatures: [],
|
|
251
|
+
estimatedComplexity: 'mvp',
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
// Apply refinement to answers
|
|
255
|
+
answers.projectName = refinedIdea.projectName;
|
|
256
|
+
answers.projectDescription = refinedIdea.projectDescription;
|
|
257
|
+
answers.projectType = refinedIdea.projectType;
|
|
258
|
+
answers.techStack = refinedIdea.suggestedStack;
|
|
259
|
+
answers.suggestedFeatures = refinedIdea.suggestedFeatures;
|
|
260
|
+
answers.complexity = refinedIdea.estimatedComplexity;
|
|
261
|
+
// Let user refine
|
|
262
|
+
let refining = true;
|
|
263
|
+
while (refining) {
|
|
264
|
+
// Show summary
|
|
265
|
+
showRefinedSummary(answers.projectName, formatProjectType(answers.projectType || 'web'), answers.techStack, [
|
|
266
|
+
...refinedIdea.coreFeatures,
|
|
267
|
+
...answers.selectedFeatures.filter((f) => !refinedIdea.coreFeatures.includes(f)),
|
|
268
|
+
], formatComplexity(answers.complexity));
|
|
269
|
+
// Confirm
|
|
270
|
+
const action = await confirmPlan();
|
|
271
|
+
if (action === 'proceed') {
|
|
272
|
+
refining = false;
|
|
273
|
+
continueWizard = false;
|
|
274
|
+
}
|
|
275
|
+
else if (action === 'restart') {
|
|
276
|
+
refining = false;
|
|
277
|
+
// Will loop back to get new idea
|
|
278
|
+
}
|
|
279
|
+
else if (action === 'modify') {
|
|
280
|
+
const modifyWhat = await askWhatToModify();
|
|
281
|
+
switch (modifyWhat) {
|
|
282
|
+
case 'type':
|
|
283
|
+
answers.projectType = await askForProjectType(answers.projectType);
|
|
284
|
+
break;
|
|
285
|
+
case 'stack':
|
|
286
|
+
answers.techStack = await askForTechStack(answers.projectType || 'web', answers.techStack);
|
|
287
|
+
break;
|
|
288
|
+
case 'features':
|
|
289
|
+
answers.selectedFeatures = await askForFeatures(refinedIdea.coreFeatures, refinedIdea.suggestedFeatures);
|
|
290
|
+
break;
|
|
291
|
+
case 'complexity':
|
|
292
|
+
answers.complexity = await askForComplexity(answers.complexity);
|
|
293
|
+
break;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
// Get execution options
|
|
299
|
+
const execOptions = await askExecutionOptions();
|
|
300
|
+
answers.autoRun = execOptions.autoRun;
|
|
301
|
+
answers.autoCommit = execOptions.autoCommit;
|
|
302
|
+
// Get working directory with existing project detection
|
|
303
|
+
let workDir = '';
|
|
304
|
+
let isExistingProject = false;
|
|
305
|
+
const _isRalphPlaybook = false;
|
|
306
|
+
// Loop until we have a valid directory decision
|
|
307
|
+
let selectingDirectory = true;
|
|
308
|
+
while (selectingDirectory) {
|
|
309
|
+
answers.workingDirectory = await askWorkingDirectory(answers.projectName);
|
|
310
|
+
workDir = resolve(process.cwd(), answers.workingDirectory);
|
|
311
|
+
// Check for existing project
|
|
312
|
+
if (existsSync(workDir)) {
|
|
313
|
+
// First check for Ralph Playbook (takes priority)
|
|
314
|
+
const playbook = detectRalphPlaybook(workDir);
|
|
315
|
+
if (playbook.hasPlaybook) {
|
|
316
|
+
// Show Ralph Playbook info
|
|
317
|
+
showDetectedRalphPlaybook(playbook, workDir);
|
|
318
|
+
const action = await askRalphPlaybookAction();
|
|
319
|
+
if (action === 'continue') {
|
|
320
|
+
// User wants to continue working on this project
|
|
321
|
+
process.chdir(workDir);
|
|
322
|
+
// Show menu for what to do
|
|
323
|
+
const continueAction = await askContinueAction();
|
|
324
|
+
if (continueAction === 'run') {
|
|
325
|
+
console.log();
|
|
326
|
+
console.log(chalk.cyan.bold(' Starting build loop...'));
|
|
327
|
+
console.log();
|
|
328
|
+
await runCommand(undefined, {
|
|
329
|
+
auto: true,
|
|
330
|
+
commit: answers.autoCommit,
|
|
331
|
+
validate: true,
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
else if (continueAction === 'plan') {
|
|
335
|
+
console.log();
|
|
336
|
+
console.log(chalk.cyan.bold(' Regenerating implementation plan...'));
|
|
337
|
+
console.log();
|
|
338
|
+
await planCommand({ auto: true });
|
|
339
|
+
}
|
|
340
|
+
else if (continueAction === 'add_spec') {
|
|
341
|
+
// TODO: Implement add spec flow
|
|
342
|
+
console.log();
|
|
343
|
+
console.log(chalk.yellow(' Add spec flow coming soon!'));
|
|
344
|
+
console.log(chalk.dim(' For now, manually add a .md file to the specs/ folder.'));
|
|
345
|
+
console.log();
|
|
346
|
+
}
|
|
347
|
+
showSuccess('Done!');
|
|
348
|
+
return; // Exit wizard early
|
|
349
|
+
}
|
|
350
|
+
else if (action === 'fresh') {
|
|
351
|
+
// Will overwrite - continue normal flow
|
|
352
|
+
selectingDirectory = false;
|
|
353
|
+
}
|
|
354
|
+
else {
|
|
355
|
+
// 'different' - loop back to ask for directory again
|
|
356
|
+
console.log(chalk.dim(' Choose a different directory...'));
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
// No Ralph Playbook, check for language project
|
|
361
|
+
const detectedProject = detectProject(workDir);
|
|
362
|
+
if (detectedProject.type !== 'unknown') {
|
|
363
|
+
// Show detected project info
|
|
364
|
+
showDetectedProject(detectedProject, workDir);
|
|
365
|
+
const action = await askExistingProjectAction(detectedProject);
|
|
366
|
+
if (action === 'enhance') {
|
|
367
|
+
// Use existing project - skip creating new directory
|
|
368
|
+
isExistingProject = true;
|
|
369
|
+
selectingDirectory = false;
|
|
370
|
+
}
|
|
371
|
+
else if (action === 'subfolder') {
|
|
372
|
+
// Create subfolder inside existing project
|
|
373
|
+
const subfolderName = sanitizeFilename(answers.projectName);
|
|
374
|
+
answers.workingDirectory = join(answers.workingDirectory, subfolderName);
|
|
375
|
+
workDir = resolve(process.cwd(), answers.workingDirectory);
|
|
376
|
+
selectingDirectory = false;
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
// 'different' - loop back to ask for directory again
|
|
380
|
+
console.log(chalk.dim(' Choose a different directory...'));
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
// Directory exists but no recognized project - proceed normally
|
|
385
|
+
selectingDirectory = false;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
else {
|
|
390
|
+
// Directory doesn't exist - proceed normally
|
|
391
|
+
selectingDirectory = false;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
// Show execution plan
|
|
395
|
+
showExecutionPlan(answers.autoCommit);
|
|
396
|
+
// Create directory if needed (skip for existing projects)
|
|
397
|
+
if (!existsSync(workDir)) {
|
|
398
|
+
mkdirSync(workDir, { recursive: true });
|
|
399
|
+
console.log(chalk.dim(` Created: ${workDir}`));
|
|
400
|
+
}
|
|
401
|
+
else if (isExistingProject) {
|
|
402
|
+
console.log(chalk.dim(` Using existing project: ${workDir}`));
|
|
403
|
+
}
|
|
404
|
+
// Change to working directory
|
|
405
|
+
process.chdir(workDir);
|
|
406
|
+
// Step 1: Initialize Ralph Playbook
|
|
407
|
+
spinner.start('Setting up project...');
|
|
408
|
+
try {
|
|
409
|
+
await initCommand({ name: answers.projectName });
|
|
410
|
+
spinner.succeed('Project initialized');
|
|
411
|
+
}
|
|
412
|
+
catch (error) {
|
|
413
|
+
spinner.fail('Failed to initialize project');
|
|
414
|
+
console.error(error);
|
|
415
|
+
return;
|
|
416
|
+
}
|
|
417
|
+
// Step 2: Write the spec file
|
|
418
|
+
spinner.start('Writing specification...');
|
|
419
|
+
const specsDir = join(workDir, 'specs');
|
|
420
|
+
if (!existsSync(specsDir)) {
|
|
421
|
+
mkdirSync(specsDir, { recursive: true });
|
|
422
|
+
}
|
|
423
|
+
const specContent = generateSpec(answers);
|
|
424
|
+
const specFilename = `${sanitizeFilename(answers.projectName)}.md`;
|
|
425
|
+
writeFileSync(join(specsDir, specFilename), specContent);
|
|
426
|
+
spinner.succeed('Specification written');
|
|
427
|
+
// Step 3: Generate custom AGENTS.md
|
|
428
|
+
const agentsContent = generateAgentsMd(answers);
|
|
429
|
+
writeFileSync(join(workDir, 'AGENTS.md'), agentsContent);
|
|
430
|
+
// Step 4: Run planning
|
|
431
|
+
spinner.start('Creating implementation plan...');
|
|
432
|
+
try {
|
|
433
|
+
await planCommand({ auto: true });
|
|
434
|
+
spinner.succeed('Implementation plan created');
|
|
435
|
+
}
|
|
436
|
+
catch (error) {
|
|
437
|
+
spinner.fail('Failed to create plan');
|
|
438
|
+
console.error(error);
|
|
439
|
+
return;
|
|
440
|
+
}
|
|
441
|
+
// Step 5: Optionally run execution
|
|
442
|
+
if (answers.autoRun) {
|
|
443
|
+
console.log();
|
|
444
|
+
console.log(chalk.cyan.bold(' Starting build...'));
|
|
445
|
+
console.log();
|
|
446
|
+
try {
|
|
447
|
+
await runCommand(undefined, {
|
|
448
|
+
auto: true,
|
|
449
|
+
commit: answers.autoCommit,
|
|
450
|
+
validate: true,
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
catch (error) {
|
|
454
|
+
console.error(chalk.red('Build failed:'), error);
|
|
455
|
+
return;
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
// Done!
|
|
459
|
+
showSuccess('All done!');
|
|
460
|
+
if (!answers.autoRun) {
|
|
461
|
+
console.log(chalk.dim(' To start building, run:'));
|
|
462
|
+
console.log(chalk.gray(` cd ${answers.workingDirectory}`));
|
|
463
|
+
console.log(chalk.gray(' ralph-starter run'));
|
|
464
|
+
}
|
|
465
|
+
console.log();
|
|
466
|
+
}
|
|
467
|
+
// Export for use in CLI
|
|
468
|
+
export { isLlmAvailable };
|
|
469
|
+
export { runIdeaMode };
|
|
470
|
+
export * from './ascii-art.js';
|
|
471
|
+
export { showError, showSuccess, showWorking } from './ui.js';
|
|
472
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wizard/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Ora } from 'ora';
|
|
2
|
+
import type { RefinedIdea } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Refine user's idea using LLM (hybrid approach)
|
|
5
|
+
* Priority: Claude Code CLI (no API key needed) > Direct API > Template fallback
|
|
6
|
+
* @param spinner - Optional spinner to stop before streaming output
|
|
7
|
+
*/
|
|
8
|
+
export declare function refineIdea(idea: string, spinner?: Ora): Promise<RefinedIdea>;
|
|
9
|
+
/**
|
|
10
|
+
* Check if LLM refinement is available
|
|
11
|
+
* Priority: Claude Code agent (no API key needed) > API key configured
|
|
12
|
+
*/
|
|
13
|
+
export declare function isLlmAvailable(): Promise<boolean>;
|
|
14
|
+
//# sourceMappingURL=llm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../src/wizard/llm.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAK/B,OAAO,KAAK,EAAe,WAAW,EAAa,MAAM,YAAY,CAAC;AAyGtE;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAwClF;AAmTD;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAQvD"}
|