meto-cli 0.1.5 → 0.6.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.
@@ -0,0 +1,57 @@
1
+ import type { TechStack } from "./types.js";
2
+ /**
3
+ * Minimal context the user provides before AI takes over generation.
4
+ */
5
+ export interface AIGenerationContext {
6
+ projectName: string;
7
+ description: string;
8
+ targetUsers: string;
9
+ techStack: TechStack;
10
+ customStack: string | undefined;
11
+ }
12
+ /**
13
+ * Result of a successful AI generation subprocess call.
14
+ */
15
+ export interface AIGenerationResult {
16
+ /** Raw stdout output from the Claude Code subprocess. */
17
+ raw: string;
18
+ }
19
+ /**
20
+ * Error thrown when the Claude Code subprocess exits with a non-zero code.
21
+ */
22
+ export declare class AIGenerationError extends Error {
23
+ /** The stderr output from the failed subprocess. */
24
+ readonly stderr: string;
25
+ /** The exit code from the subprocess (null if terminated by signal). */
26
+ readonly exitCode: number | null;
27
+ constructor(stderr: string, exitCode: number | null);
28
+ }
29
+ /**
30
+ * Error thrown when the Claude Code subprocess exceeds the timeout.
31
+ */
32
+ export declare class AIGenerationTimeoutError extends Error {
33
+ /** The timeout duration in milliseconds. */
34
+ readonly timeoutMs: number;
35
+ constructor(timeoutMs: number);
36
+ }
37
+ /**
38
+ * Builds the structured prompt that instructs Claude Code to generate project content.
39
+ *
40
+ * The prompt specifies section markers so the output can be deterministically parsed.
41
+ * Each section is delimited by `---SECTION:<NAME>---` and `---END:<NAME>---` markers.
42
+ */
43
+ export declare function buildAIPrompt(context: AIGenerationContext): string;
44
+ /**
45
+ * Invokes Claude Code as a subprocess with a structured prompt and returns the raw output.
46
+ *
47
+ * The function spawns `claude` with the `-p` flag, passing the generation prompt.
48
+ * It captures stdout and returns it as a raw string for downstream parsing.
49
+ *
50
+ * @param context - The minimal project context collected from the user
51
+ * @param timeoutMs - Maximum time to wait for the subprocess (default 90 seconds)
52
+ * @returns The raw stdout output from Claude Code
53
+ * @throws {AIGenerationTimeoutError} If the subprocess exceeds the timeout
54
+ * @throws {AIGenerationError} If the subprocess exits with a non-zero code
55
+ */
56
+ export declare function generateWithAI(context: AIGenerationContext, timeoutMs?: number): Promise<AIGenerationResult>;
57
+ //# sourceMappingURL=ai-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-generator.d.ts","sourceRoot":"","sources":["../../src/cli/ai-generator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,yDAAyD;IACzD,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,oDAAoD;IACpD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;gBAErB,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;CAOpD;AAED;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,4CAA4C;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,SAAS,EAAE,MAAM;CAM9B;AAOD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAuFlE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,mBAAmB,EAC5B,SAAS,GAAE,MAA2B,GACrC,OAAO,CAAC,kBAAkB,CAAC,CAwC7B"}
@@ -0,0 +1,172 @@
1
+ import { spawn } from "node:child_process";
2
+ import { getStackDescription } from "./stacks.js";
3
+ /**
4
+ * Error thrown when the Claude Code subprocess exits with a non-zero code.
5
+ */
6
+ export class AIGenerationError extends Error {
7
+ /** The stderr output from the failed subprocess. */
8
+ stderr;
9
+ /** The exit code from the subprocess (null if terminated by signal). */
10
+ exitCode;
11
+ constructor(stderr, exitCode) {
12
+ const codeInfo = exitCode !== null ? ` (exit code ${exitCode})` : "";
13
+ super(`AI generation failed${codeInfo}: ${stderr}`);
14
+ this.name = "AIGenerationError";
15
+ this.stderr = stderr;
16
+ this.exitCode = exitCode;
17
+ }
18
+ }
19
+ /**
20
+ * Error thrown when the Claude Code subprocess exceeds the timeout.
21
+ */
22
+ export class AIGenerationTimeoutError extends Error {
23
+ /** The timeout duration in milliseconds. */
24
+ timeoutMs;
25
+ constructor(timeoutMs) {
26
+ const seconds = Math.round(timeoutMs / 1000);
27
+ super(`AI generation timed out after ${seconds} seconds`);
28
+ this.name = "AIGenerationTimeoutError";
29
+ this.timeoutMs = timeoutMs;
30
+ }
31
+ }
32
+ /**
33
+ * Default timeout for the AI generation subprocess (90 seconds).
34
+ */
35
+ const DEFAULT_TIMEOUT_MS = 90_000;
36
+ /**
37
+ * Builds the structured prompt that instructs Claude Code to generate project content.
38
+ *
39
+ * The prompt specifies section markers so the output can be deterministically parsed.
40
+ * Each section is delimited by `---SECTION:<NAME>---` and `---END:<NAME>---` markers.
41
+ */
42
+ export function buildAIPrompt(context) {
43
+ const stackDescription = context.techStack === "custom"
44
+ ? context.customStack ?? "Custom stack"
45
+ : getStackDescription(context.techStack);
46
+ return `You are a senior product manager and technical architect. Based on the project brief below, generate structured project content for a software project scaffold.
47
+
48
+ PROJECT BRIEF:
49
+ - Name: ${context.projectName}
50
+ - Description: ${context.description}
51
+ - Target Users: ${context.targetUsers}
52
+ - Tech Stack: ${stackDescription}
53
+
54
+ Generate the following sections. Each section MUST be wrapped in markers exactly as shown. Do not include the markers inside the content itself.
55
+
56
+ ---SECTION:PRODUCT_VISION---
57
+ Write an expanded product vision (3-5 paragraphs). Cover what the product does, why it matters, who it serves, and what differentiates it. Be specific and actionable, not generic.
58
+ ---END:PRODUCT_VISION---
59
+
60
+ ---SECTION:PROBLEM_STATEMENT---
61
+ Write a clear problem statement (2-3 paragraphs). Describe the pain point, who experiences it, and why existing solutions fall short.
62
+ ---END:PROBLEM_STATEMENT---
63
+
64
+ ---SECTION:SUCCESS_CRITERIA---
65
+ Write 5-8 measurable success criteria as a markdown bullet list. Each criterion should be specific and verifiable (e.g., "New user can complete onboarding in under 2 minutes").
66
+ ---END:SUCCESS_CRITERIA---
67
+
68
+ ---SECTION:VALUE_PROPOSITION---
69
+ Write a one-line value proposition that captures the core benefit. Follow it with 2-3 supporting sentences.
70
+ ---END:VALUE_PROPOSITION---
71
+
72
+ ---SECTION:OUT_OF_SCOPE---
73
+ Write 5-8 items that are explicitly out of scope for v1 as a markdown bullet list. Be specific about what will NOT be built.
74
+ ---END:OUT_OF_SCOPE---
75
+
76
+ ---SECTION:EPICS---
77
+ Generate 4-6 epics. Each epic must follow this exact format:
78
+
79
+ ## E1 -- [Epic Title]
80
+ **Goal:** [One sentence describing the outcome]
81
+ **Status:** Not started
82
+ **Tasks:** To be sliced by @meto-pm
83
+
84
+ ---
85
+
86
+ ## E2 -- [Epic Title]
87
+ **Goal:** [One sentence describing the outcome]
88
+ **Status:** Not started
89
+ **Tasks:** To be sliced by @meto-pm
90
+
91
+ Continue for E3, E4, etc. Epics should progress logically from setup through core features to deployment.
92
+ ---END:EPICS---
93
+
94
+ ---SECTION:STARTER_TASKS---
95
+ Slice the FIRST epic (E1) into 3-5 task slices. Each task must follow this exact format:
96
+
97
+ ## [slice-001] -- [Task Title]
98
+ **Epic:** E1 | **Size:** S | **Depends on:** none
99
+
100
+ **User Story**
101
+ As a [role], I want [capability] so that [benefit].
102
+
103
+ **Acceptance Criteria**
104
+ - [ ] [Specific, testable criterion]
105
+ - [ ] [Another criterion]
106
+ - [ ] [At least 3 criteria per task]
107
+
108
+ **Out of Scope**
109
+ [What this task does NOT include]
110
+
111
+ ---
112
+
113
+ Continue with [slice-002], [slice-003], etc. Tasks should be small enough to complete in one session.
114
+ ---END:STARTER_TASKS---
115
+
116
+ ---SECTION:DEFINITION_OF_DONE---
117
+ Write a Definition of Done checklist with two sections:
118
+
119
+ ## Universal Checks
120
+ - [ ] [5-6 universal quality checks appropriate for the tech stack]
121
+
122
+ ## Stack-Specific Checks
123
+ - [ ] [4-5 checks specific to the chosen technology]
124
+ ---END:DEFINITION_OF_DONE---
125
+
126
+ IMPORTANT: Output ONLY the sections above with their markers. No introduction, no conclusion, no commentary outside the markers.`;
127
+ }
128
+ /**
129
+ * Invokes Claude Code as a subprocess with a structured prompt and returns the raw output.
130
+ *
131
+ * The function spawns `claude` with the `-p` flag, passing the generation prompt.
132
+ * It captures stdout and returns it as a raw string for downstream parsing.
133
+ *
134
+ * @param context - The minimal project context collected from the user
135
+ * @param timeoutMs - Maximum time to wait for the subprocess (default 90 seconds)
136
+ * @returns The raw stdout output from Claude Code
137
+ * @throws {AIGenerationTimeoutError} If the subprocess exceeds the timeout
138
+ * @throws {AIGenerationError} If the subprocess exits with a non-zero code
139
+ */
140
+ export function generateWithAI(context, timeoutMs = DEFAULT_TIMEOUT_MS) {
141
+ const prompt = buildAIPrompt(context);
142
+ return new Promise((resolve, reject) => {
143
+ const child = spawn("claude", ["-p", prompt], {
144
+ stdio: ["ignore", "pipe", "pipe"],
145
+ });
146
+ let stdout = "";
147
+ let stderr = "";
148
+ child.stdout.on("data", (chunk) => {
149
+ stdout += chunk.toString();
150
+ });
151
+ child.stderr.on("data", (chunk) => {
152
+ stderr += chunk.toString();
153
+ });
154
+ const timer = setTimeout(() => {
155
+ child.kill("SIGTERM");
156
+ reject(new AIGenerationTimeoutError(timeoutMs));
157
+ }, timeoutMs);
158
+ child.on("close", (code) => {
159
+ clearTimeout(timer);
160
+ if (code !== 0) {
161
+ reject(new AIGenerationError(stderr, code));
162
+ return;
163
+ }
164
+ resolve({ raw: stdout });
165
+ });
166
+ child.on("error", (err) => {
167
+ clearTimeout(timer);
168
+ reject(new AIGenerationError(err.message, null));
169
+ });
170
+ });
171
+ }
172
+ //# sourceMappingURL=ai-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-generator.js","sourceRoot":"","sources":["../../src/cli/ai-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Structured content generated by AI, mapped to scaffold template tokens.
3
+ */
4
+ export interface AIGeneratedContent {
5
+ productVision: string;
6
+ problemStatement: string;
7
+ successCriteria: string;
8
+ valueProposition: string;
9
+ outOfScope: string;
10
+ /** Formatted markdown with epic definitions. */
11
+ epics: string;
12
+ /** Formatted markdown with task slice definitions. */
13
+ starterTasks: string;
14
+ /** Definition of Done checklist. */
15
+ definitionOfDone: string;
16
+ }
17
+ /**
18
+ * Result of validating AI-generated content.
19
+ */
20
+ export interface ValidationResult {
21
+ valid: boolean;
22
+ warnings: string[];
23
+ }
24
+ /**
25
+ * Error thrown when the AI output cannot be parsed at all.
26
+ */
27
+ export declare class AIParseError extends Error {
28
+ /** The raw unparseable output for debugging. */
29
+ readonly rawOutput: string;
30
+ constructor(rawOutput: string);
31
+ }
32
+ /**
33
+ * Parses raw AI output into structured AIGeneratedContent.
34
+ *
35
+ * Extracts content between section markers (`---SECTION:<NAME>---` / `---END:<NAME>---`).
36
+ * Missing sections receive a fallback value. If no markers are found at all,
37
+ * throws an AIParseError.
38
+ *
39
+ * @param raw - The raw stdout string from the Claude Code subprocess
40
+ * @returns Parsed and structured content ready for template token mapping
41
+ * @throws {AIParseError} If the output contains no recognizable section markers
42
+ */
43
+ export declare function parseAIOutput(raw: string): AIGeneratedContent;
44
+ /**
45
+ * Validates parsed AI-generated content for structural quality.
46
+ *
47
+ * Checks:
48
+ * - No section is empty or still using the fallback value
49
+ * - Epics section contains at least `## E1`
50
+ * - Starter tasks section contains at least `## [slice-001]`
51
+ * - Each task has "Acceptance Criteria" and "Out of Scope" headings
52
+ *
53
+ * @param content - The parsed AIGeneratedContent to validate
54
+ * @returns A ValidationResult indicating whether the content is valid, with warnings
55
+ */
56
+ export declare function validateAIContent(content: AIGeneratedContent): ValidationResult;
57
+ //# sourceMappingURL=ai-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-parser.d.ts","sourceRoot":"","sources":["../../src/cli/ai-parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,YAAY,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACrC,gDAAgD;IAChD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,SAAS,EAAE,MAAM;CAK9B;AA2DD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CA4B7D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,gBAAgB,CA0C/E"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Error thrown when the AI output cannot be parsed at all.
3
+ */
4
+ export class AIParseError extends Error {
5
+ /** The raw unparseable output for debugging. */
6
+ rawOutput;
7
+ constructor(rawOutput) {
8
+ super("AI output is unparseable -- no section markers found");
9
+ this.name = "AIParseError";
10
+ this.rawOutput = rawOutput;
11
+ }
12
+ }
13
+ /**
14
+ * Section names used as delimiters in the AI output.
15
+ */
16
+ const SECTION_NAMES = [
17
+ "PRODUCT_VISION",
18
+ "PROBLEM_STATEMENT",
19
+ "SUCCESS_CRITERIA",
20
+ "VALUE_PROPOSITION",
21
+ "OUT_OF_SCOPE",
22
+ "EPICS",
23
+ "STARTER_TASKS",
24
+ "DEFINITION_OF_DONE",
25
+ ];
26
+ /**
27
+ * Default fallback value used when a section is missing from the AI output.
28
+ */
29
+ const FALLBACK_VALUE = "To be defined by @meto-pm";
30
+ /**
31
+ * Maps section names to AIGeneratedContent field keys.
32
+ */
33
+ const SECTION_TO_FIELD = {
34
+ PRODUCT_VISION: "productVision",
35
+ PROBLEM_STATEMENT: "problemStatement",
36
+ SUCCESS_CRITERIA: "successCriteria",
37
+ VALUE_PROPOSITION: "valueProposition",
38
+ OUT_OF_SCOPE: "outOfScope",
39
+ EPICS: "epics",
40
+ STARTER_TASKS: "starterTasks",
41
+ DEFINITION_OF_DONE: "definitionOfDone",
42
+ };
43
+ /**
44
+ * Extracts the content between section markers for a given section name.
45
+ * Returns undefined if the section is not found.
46
+ */
47
+ function extractSection(raw, sectionName) {
48
+ const startMarker = `---SECTION:${sectionName}---`;
49
+ const endMarker = `---END:${sectionName}---`;
50
+ const startIndex = raw.indexOf(startMarker);
51
+ if (startIndex === -1) {
52
+ return undefined;
53
+ }
54
+ const contentStart = startIndex + startMarker.length;
55
+ const endIndex = raw.indexOf(endMarker, contentStart);
56
+ if (endIndex === -1) {
57
+ return undefined;
58
+ }
59
+ return raw.slice(contentStart, endIndex).trim();
60
+ }
61
+ /**
62
+ * Parses raw AI output into structured AIGeneratedContent.
63
+ *
64
+ * Extracts content between section markers (`---SECTION:<NAME>---` / `---END:<NAME>---`).
65
+ * Missing sections receive a fallback value. If no markers are found at all,
66
+ * throws an AIParseError.
67
+ *
68
+ * @param raw - The raw stdout string from the Claude Code subprocess
69
+ * @returns Parsed and structured content ready for template token mapping
70
+ * @throws {AIParseError} If the output contains no recognizable section markers
71
+ */
72
+ export function parseAIOutput(raw) {
73
+ let foundSections = 0;
74
+ const result = {
75
+ productVision: FALLBACK_VALUE,
76
+ problemStatement: FALLBACK_VALUE,
77
+ successCriteria: FALLBACK_VALUE,
78
+ valueProposition: FALLBACK_VALUE,
79
+ outOfScope: FALLBACK_VALUE,
80
+ epics: FALLBACK_VALUE,
81
+ starterTasks: FALLBACK_VALUE,
82
+ definitionOfDone: FALLBACK_VALUE,
83
+ };
84
+ for (const sectionName of SECTION_NAMES) {
85
+ const content = extractSection(raw, sectionName);
86
+ if (content !== undefined) {
87
+ foundSections++;
88
+ const fieldKey = SECTION_TO_FIELD[sectionName];
89
+ result[fieldKey] = content.length > 0 ? content : FALLBACK_VALUE;
90
+ }
91
+ }
92
+ if (foundSections === 0) {
93
+ throw new AIParseError(raw);
94
+ }
95
+ return result;
96
+ }
97
+ /**
98
+ * Validates parsed AI-generated content for structural quality.
99
+ *
100
+ * Checks:
101
+ * - No section is empty or still using the fallback value
102
+ * - Epics section contains at least `## E1`
103
+ * - Starter tasks section contains at least `## [slice-001]`
104
+ * - Each task has "Acceptance Criteria" and "Out of Scope" headings
105
+ *
106
+ * @param content - The parsed AIGeneratedContent to validate
107
+ * @returns A ValidationResult indicating whether the content is valid, with warnings
108
+ */
109
+ export function validateAIContent(content) {
110
+ const warnings = [];
111
+ const fieldLabels = {
112
+ productVision: "Product Vision",
113
+ problemStatement: "Problem Statement",
114
+ successCriteria: "Success Criteria",
115
+ valueProposition: "Value Proposition",
116
+ outOfScope: "Out of Scope",
117
+ epics: "Epics",
118
+ starterTasks: "Starter Tasks",
119
+ definitionOfDone: "Definition of Done",
120
+ };
121
+ for (const [key, label] of Object.entries(fieldLabels)) {
122
+ const value = content[key];
123
+ if (value.length === 0 || value === FALLBACK_VALUE) {
124
+ warnings.push(`${label} section is missing or uses fallback value`);
125
+ }
126
+ }
127
+ if (!content.epics.includes("## E1")) {
128
+ warnings.push("Epics section does not contain at least ## E1");
129
+ }
130
+ if (!content.starterTasks.includes("## [slice-001]")) {
131
+ warnings.push("Starter Tasks section does not contain at least ## [slice-001]");
132
+ }
133
+ if (content.starterTasks !== FALLBACK_VALUE) {
134
+ if (!content.starterTasks.includes("Acceptance Criteria")) {
135
+ warnings.push("Starter Tasks are missing Acceptance Criteria headings");
136
+ }
137
+ if (!content.starterTasks.includes("Out of Scope")) {
138
+ warnings.push("Starter Tasks are missing Out of Scope headings");
139
+ }
140
+ }
141
+ return {
142
+ valid: warnings.length === 0,
143
+ warnings,
144
+ };
145
+ }
146
+ //# sourceMappingURL=ai-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-parser.js","sourceRoot":"","sources":["../../src/cli/ai-parser.ts"],"names":[],"mappings":"AAyBA;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,gDAAgD;IACvC,SAAS,CAAS;IAE3B,YAAY,SAAiB;QAC3B,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,aAAa,GAAG;IACpB,gBAAgB;IAChB,mBAAmB;IACnB,kBAAkB;IAClB,mBAAmB;IACnB,cAAc;IACd,OAAO;IACP,eAAe;IACf,oBAAoB;CACZ,CAAC;AAIX;;GAEG;AACH,MAAM,cAAc,GAAG,2BAA2B,CAAC;AAEnD;;GAEG;AACH,MAAM,gBAAgB,GAAkD;IACtE,cAAc,EAAE,eAAe;IAC/B,iBAAiB,EAAE,kBAAkB;IACrC,gBAAgB,EAAE,iBAAiB;IACnC,iBAAiB,EAAE,kBAAkB;IACrC,YAAY,EAAE,YAAY;IAC1B,KAAK,EAAE,OAAO;IACd,aAAa,EAAE,cAAc;IAC7B,kBAAkB,EAAE,kBAAkB;CACvC,CAAC;AAEF;;;GAGG;AACH,SAAS,cAAc,CAAC,GAAW,EAAE,WAAwB;IAC3D,MAAM,WAAW,GAAG,cAAc,WAAW,KAAK,CAAC;IACnD,MAAM,SAAS,GAAG,UAAU,WAAW,KAAK,CAAC;IAE7C,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC5C,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,YAAY,GAAG,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC;IACrD,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IACtD,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;AAClD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,MAAM,MAAM,GAAuB;QACjC,aAAa,EAAE,cAAc;QAC7B,gBAAgB,EAAE,cAAc;QAChC,eAAe,EAAE,cAAc;QAC/B,gBAAgB,EAAE,cAAc;QAChC,UAAU,EAAE,cAAc;QAC1B,KAAK,EAAE,cAAc;QACrB,YAAY,EAAE,cAAc;QAC5B,gBAAgB,EAAE,cAAc;KACjC,CAAC;IAEF,KAAK,MAAM,WAAW,IAAI,aAAa,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACjD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,aAAa,EAAE,CAAC;YAChB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;YAC/C,MAAM,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;QACnE,CAAC;IACH,CAAC;IAED,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAA2B;IAC3D,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,MAAM,WAAW,GAA6C;QAC5D,aAAa,EAAE,gBAAgB;QAC/B,gBAAgB,EAAE,mBAAmB;QACrC,eAAe,EAAE,kBAAkB;QACnC,gBAAgB,EAAE,mBAAmB;QACrC,UAAU,EAAE,cAAc;QAC1B,KAAK,EAAE,OAAO;QACd,YAAY,EAAE,eAAe;QAC7B,gBAAgB,EAAE,oBAAoB;KACvC,CAAC;IAEF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACvD,MAAM,KAAK,GAAG,OAAO,CAAC,GAA+B,CAAC,CAAC;QACvD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;YACnD,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,4CAA4C,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,QAAQ,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACrD,QAAQ,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;IAClF,CAAC;IAED,IAAI,OAAO,CAAC,YAAY,KAAK,cAAc,EAAE,CAAC;QAC5C,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;YAC1D,QAAQ,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;QAC1E,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACnD,QAAQ,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,MAAM,KAAK,CAAC;QAC5B,QAAQ;KACT,CAAC;AACJ,CAAC"}
package/dist/cli/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import { readFile } from "node:fs/promises";
3
3
  import { join } from "node:path";
4
4
  import * as p from "@clack/prompts";
5
- import { collectProjectBrief } from "./prompts.js";
5
+ import { collectDeepContent, collectProjectBrief } from "./prompts.js";
6
6
  import { InterruptionHandler } from "./interruption.js";
7
7
  import { buildTokenMap, renderTemplates, resolveTemplatesDir, } from "./renderer.js";
8
8
  import { runGitHubFlow } from "./github.js";
@@ -11,6 +11,8 @@ import { runSupabaseFlow } from "./supabase.js";
11
11
  import { checkWritePermission, PreflightError, runPreflightChecks, } from "./preflight.js";
12
12
  import { DirectoryNotEmptyError, writeScaffold } from "./scaffold.js";
13
13
  import { formatFileTree } from "./tree.js";
14
+ import { generateWithAI, AIGenerationTimeoutError } from "./ai-generator.js";
15
+ import { parseAIOutput, validateAIContent } from "./ai-parser.js";
14
16
  /**
15
17
  * Resolves the absolute path to the package root directory.
16
18
  * At runtime: dist/cli/index.js -> package root is ../../
@@ -46,6 +48,7 @@ function printHelp() {
46
48
  "Commands:",
47
49
  " init Scaffold a new structured project",
48
50
  " init --dry-run Preview files without writing to disk",
51
+ " init --no-ai Skip AI generation, use standard prompts",
49
52
  "",
50
53
  "Options:",
51
54
  " --help, -h Show this help message",
@@ -90,7 +93,31 @@ async function main() {
90
93
  if (!preflight.gitAvailable) {
91
94
  p.log.warning("git not found -- the scaffolded project will not be initialized as a git repository.");
92
95
  }
93
- const brief = await collectProjectBrief();
96
+ const noAIFlag = process.argv.includes("--no-ai");
97
+ let useAI = preflight.claudeCodeAvailable && !noAIFlag;
98
+ if (noAIFlag) {
99
+ p.log.info("AI generation disabled via --no-ai flag");
100
+ }
101
+ else if (preflight.claudeCodeAvailable) {
102
+ p.log.info("Claude Code detected -- AI-powered generation available");
103
+ const confirmAI = await p.confirm({
104
+ message: "Use AI to generate your project content?",
105
+ initialValue: true,
106
+ });
107
+ if (p.isCancel(confirmAI)) {
108
+ p.cancel("Project setup cancelled.");
109
+ interruption.uninstall();
110
+ process.exit(0);
111
+ }
112
+ useAI = confirmAI;
113
+ if (!useAI) {
114
+ p.log.info("Using standard prompts instead.");
115
+ }
116
+ }
117
+ else {
118
+ p.log.info("Claude Code not found -- using standard prompts");
119
+ }
120
+ const brief = await collectProjectBrief({ useAI });
94
121
  const writeError = await checkWritePermission(brief.outputDirectory);
95
122
  if (writeError !== undefined) {
96
123
  p.log.error(writeError);
@@ -107,11 +134,73 @@ async function main() {
107
134
  `Stack: ${stackLabel}`,
108
135
  `Output: ${brief.outputDirectory}`,
109
136
  ].join("\n"), "Project Brief");
137
+ let aiContent;
138
+ if (useAI) {
139
+ const aiSpinner = p.spinner();
140
+ aiSpinner.start("Generating project content with Claude Code...");
141
+ const startTime = Date.now();
142
+ let elapsedSeconds = 0;
143
+ const progressTimer = setInterval(() => {
144
+ elapsedSeconds += 10;
145
+ aiSpinner.message(`Generating project content with Claude Code... (${elapsedSeconds}s)`);
146
+ }, 10_000);
147
+ try {
148
+ const aiResult = await generateWithAI({
149
+ projectName: brief.projectName,
150
+ description: brief.description,
151
+ targetUsers: brief.targetUsers,
152
+ techStack: brief.techStack,
153
+ customStack: brief.customStack,
154
+ });
155
+ clearInterval(progressTimer);
156
+ const totalSeconds = Math.round((Date.now() - startTime) / 1000);
157
+ aiContent = parseAIOutput(aiResult.raw);
158
+ aiSpinner.stop(`Project content generated (${totalSeconds}s)`);
159
+ const validation = validateAIContent(aiContent);
160
+ if (validation.warnings.length > 0) {
161
+ for (const warning of validation.warnings) {
162
+ p.log.warning(warning);
163
+ }
164
+ }
165
+ const epicCount = (aiContent.epics.match(/## E\d+/g) ?? []).length;
166
+ const taskCount = (aiContent.starterTasks.match(/## \[slice-\d+\]/g) ?? []).length;
167
+ const dodCustomized = aiContent.definitionOfDone !== "To be defined by @meto-pm";
168
+ const visionFirstLine = aiContent.productVision.split("\n")[0].trim();
169
+ const visionPreview = visionFirstLine.length > 80
170
+ ? visionFirstLine.slice(0, 77) + "..."
171
+ : visionFirstLine;
172
+ const summaryLines = [
173
+ `Vision: ${visionPreview}`,
174
+ `Epics: ${epicCount}`,
175
+ `Tasks: ${taskCount}`,
176
+ `DoD: ${dodCustomized ? "Customized for stack" : "Default"}`,
177
+ ];
178
+ p.note(summaryLines.join("\n"), "AI Generation Summary");
179
+ }
180
+ catch (aiError) {
181
+ clearInterval(progressTimer);
182
+ if (aiError instanceof AIGenerationTimeoutError) {
183
+ aiSpinner.stop("AI generation failed -- falling back to standard prompts");
184
+ p.log.warning(`Timed out after ${Math.round(aiError.timeoutMs / 1000)} seconds. Falling back to standard prompts.`);
185
+ }
186
+ else {
187
+ const reason = aiError instanceof Error ? aiError.message : "Unknown error";
188
+ aiSpinner.stop("AI generation failed -- falling back to standard prompts");
189
+ p.log.warning(`AI generation failed: ${reason}. Falling back to standard prompts.`);
190
+ }
191
+ const deep = await collectDeepContent();
192
+ brief.problemStatement = deep.problemStatement;
193
+ brief.successCriteria = deep.successCriteria;
194
+ brief.valueProposition = deep.valueProposition;
195
+ brief.outOfScope = deep.outOfScope;
196
+ brief.codeConventions = deep.codeConventions;
197
+ }
198
+ }
110
199
  const s = p.spinner();
111
200
  s.start("Rendering templates...");
112
201
  try {
113
202
  const templatesDir = resolveTemplatesDir();
114
- const tokens = buildTokenMap(brief);
203
+ const tokens = buildTokenMap(brief, aiContent);
115
204
  const renderedFiles = await renderTemplates(templatesDir, tokens);
116
205
  if (dryRun) {
117
206
  s.stop("Templates rendered (dry run).");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EACL,aAAa,EACb,eAAe,EACf,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACL,oBAAoB,EACpB,cAAc,EACd,kBAAkB,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGlE;;;GAGG;AACH,SAAS,kBAAkB;IACzB,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACtD,OAAO,kBAAkB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,WAAW;IACxB,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,EAAE,cAAc,CAAC,CAAC;IACnE,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxC,IACE,OAAO,MAAM,KAAK,QAAQ;QAC1B,MAAM,KAAK,IAAI;QACf,SAAS,IAAI,MAAM;QACnB,OAAQ,MAAkC,CAAC,OAAO,KAAK,QAAQ,EAC/D,CAAC;QACD,OAAQ,MAAkC,CAAC,OAAiB,CAAC;IAC/D,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,SAAS,SAAS;IAChB,CAAC,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAC7D,CAAC,CAAC,IAAI,CACJ;QACE,qCAAqC;QACrC,EAAE;QACF,WAAW;QACX,uDAAuD;QACvD,2DAA2D;QAC3D,8DAA8D;QAC9D,EAAE;QACF,UAAU;QACV,4CAA4C;QAC5C,gDAAgD;KACjD,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,MAAM,CACP,CAAC;IACF,CAAC,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;AACjD,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE5B,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAC1D,SAAS,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAC;QACpC,CAAC,CAAC,KAAK,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;QAChC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACZ,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAClD,MAAM,YAAY,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAC/C,YAAY,CAAC,OAAO,EAAE,CAAC;QAEvB,CAAC,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QAE7D,IAAI,SAAS,CAAC;QACd,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,kBAAkB,EAAE,CAAC;QACzC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,IAAI,KAAK,YAAY,cAAc,EAAE,CAAC;gBACpC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;iBAAM,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAClC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,4BAA4B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACN,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;YACxE,CAAC;YACD,YAAY,CAAC,SAAS,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;YAC5B,CAAC,CAAC,GAAG,CAAC,OAAO,CACX,sFAAsF,CACvF,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,KAAK,GAAG,SAAS,CAAC,mBAAmB,IAAI,CAAC,QAAQ,CAAC;QAEvD,IAAI,QAAQ,EAAE,CAAC;YACb,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACxD,CAAC;aAAM,IAAI,SAAS,CAAC,mBAAmB,EAAE,CAAC;YACzC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;YAEtE,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC;gBAChC,OAAO,EAAE,0CAA0C;gBACnD,YAAY,EAAE,IAAI;aACnB,CAAC,CAAC;YACH,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC1B,CAAC,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;gBACrC,YAAY,CAAC,SAAS,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,KAAK,GAAG,SAAS,CAAC;YAElB,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAEnD,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACrE,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACxB,YAAY,CAAC,SAAS,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,UAAU,GACd,KAAK,CAAC,SAAS,KAAK,QAAQ;YAC1B,CAAC,CAAC,KAAK,CAAC,WAAW;YACnB,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;QAEtB,CAAC,CAAC,IAAI,CACJ;YACE,eAAe,KAAK,CAAC,WAAW,EAAE;YAClC,eAAe,KAAK,CAAC,WAAW,EAAE;YAClC,eAAe,KAAK,CAAC,WAAW,EAAE;YAClC,eAAe,UAAU,EAAE;YAC3B,eAAe,KAAK,CAAC,eAAe,EAAE;SACvC,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,eAAe,CAChB,CAAC;QAEF,IAAI,SAAyC,CAAC;QAE9C,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,SAAS,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YAC9B,SAAS,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAElE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,IAAI,cAAc,GAAG,CAAC,CAAC;YACvB,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,EAAE;gBACrC,cAAc,IAAI,EAAE,CAAC;gBACrB,SAAS,CAAC,OAAO,CAAC,mDAAmD,cAAc,IAAI,CAAC,CAAC;YAC3F,CAAC,EAAE,MAAM,CAAC,CAAC;YAEX,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC;oBACpC,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,WAAW,EAAE,KAAK,CAAC,WAAW;oBAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;iBAC/B,CAAC,CAAC;gBAEH,aAAa,CAAC,aAAa,CAAC,CAAC;gBAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;gBAEjE,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACxC,SAAS,CAAC,IAAI,CAAC,8BAA8B,YAAY,IAAI,CAAC,CAAC;gBAE/D,MAAM,UAAU,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;gBAChD,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACnC,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;wBAC1C,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBACzB,CAAC;gBACH,CAAC;gBAED,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;gBACnE,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;gBACnF,MAAM,aAAa,GAAG,SAAS,CAAC,gBAAgB,KAAK,2BAA2B,CAAC;gBAEjF,MAAM,eAAe,GAAG,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACtE,MAAM,aAAa,GACjB,eAAe,CAAC,MAAM,GAAG,EAAE;oBACzB,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK;oBACtC,CAAC,CAAC,eAAe,CAAC;gBAEtB,MAAM,YAAY,GAAa;oBAC7B,WAAW,aAAa,EAAE;oBAC1B,UAAU,SAAS,EAAE;oBACrB,UAAU,SAAS,EAAE;oBACrB,QAAQ,aAAa,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS,EAAE;iBAC7D,CAAC;gBAEF,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,uBAAuB,CAAC,CAAC;YAC3D,CAAC;YAAC,OAAO,OAAgB,EAAE,CAAC;gBAC1B,aAAa,CAAC,aAAa,CAAC,CAAC;gBAE7B,IAAI,OAAO,YAAY,wBAAwB,EAAE,CAAC;oBAChD,SAAS,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;oBAC3E,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,mBAAmB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,6CAA6C,CAAC,CAAC;gBACtH,CAAC;qBAAM,CAAC;oBACN,MAAM,MAAM,GACV,OAAO,YAAY,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;oBAC/D,SAAS,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;oBAC3E,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,yBAAyB,MAAM,qCAAqC,CAAC,CAAC;gBACtF,CAAC;gBAED,MAAM,IAAI,GAAG,MAAM,kBAAkB,EAAE,CAAC;gBACxC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;gBAC/C,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;gBAC7C,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;gBAC/C,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;gBACnC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;YAC/C,CAAC;QACH,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAElC,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,mBAAmB,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAC/C,MAAM,aAAa,GAAG,MAAM,eAAe,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YAElE,IAAI,MAAM,EAAE,CAAC;gBACX,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;gBAExC,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;gBAC3D,MAAM,IAAI,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;gBAEvC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,6BAA6B,CAAC,CAAC;gBAC5C,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;gBACnD,CAAC,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;gBACpD,YAAY,CAAC,SAAS,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YACxC,MAAM,aAAa,CAAC,KAAK,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;YAC1D,YAAY,CAAC,MAAM,EAAE,CAAC;YAEtB,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAE9B,IAAI,gBAAgB,GAAG,KAAK,CAAC;YAC7B,IAAI,SAAS,CAAC,YAAY,EAAE,CAAC;gBAC3B,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;gBAC/B,UAAU,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;gBAEnD,IAAI,CAAC;oBACH,MAAM,WAAW,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;oBACzC,UAAU,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;oBAC/C,gBAAgB,GAAG,IAAI,CAAC;gBAC1B,CAAC;gBAAC,MAAM,CAAC;oBACP,UAAU,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,aAAa,CACtC,KAAK,CAAC,WAAW,EACjB,KAAK,CAAC,eAAe,EACrB,gBAAgB,CACjB,CAAC;YAEF,MAAM,cAAc,GAAG,MAAM,eAAe,CAC1C,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,eAAe,CACtB,CAAC;YAEF,MAAM,SAAS,GAAa;gBAC1B,MAAM,KAAK,CAAC,eAAe,EAAE;gBAC7B,qBAAqB;gBACrB,wEAAwE;gBACxE,oFAAoF;gBACpF,wCAAwC;aACzC,CAAC;YAEF,IAAI,YAAY,CAAC,WAAW,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;gBACrD,SAAS,CAAC,IAAI,CAAC,gBAAgB,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;YACzD,CAAC;YAED,IAAI,KAAK,CAAC,SAAS,KAAK,iBAAiB,EAAE,CAAC;gBAC1C,IAAI,cAAc,CAAC,WAAW,EAAE,CAAC;oBAC/B,SAAS,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;gBAC/E,CAAC;gBACD,SAAS,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC;YACxF,CAAC;YAED,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;gBAC5B,SAAS,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACzD,CAAC;YAED,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;YAE3C,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAClB,YAAY,CAAC,MAAM,EAAE,CAAC;YAEtB,IAAI,KAAK,YAAY,sBAAsB,EAAE,CAAC;gBAC5C,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;iBAAM,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAClC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;YAC1E,CAAC;YAED,YAAY,CAAC,SAAS,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,YAAY,CAAC,SAAS,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IAED,CAAC,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAC7D,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IAC/D,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -4,6 +4,8 @@
4
4
  export interface PreflightResult {
5
5
  /** Whether git is available on the system PATH. */
6
6
  gitAvailable: boolean;
7
+ /** Whether Claude Code CLI is available on the system PATH. */
8
+ claudeCodeAvailable: boolean;
7
9
  }
8
10
  /**
9
11
  * Parses the major version number from a Node.js version string.
@@ -21,6 +23,11 @@ export declare function checkNodeVersion(versionString: string, minimumMajor: nu
21
23
  * Resolves to true if git is found, false otherwise.
22
24
  */
23
25
  export declare function checkGitAvailable(): Promise<boolean>;
26
+ /**
27
+ * Checks whether Claude Code CLI is available by running `claude --version`.
28
+ * Resolves to true if Claude Code is found, false otherwise.
29
+ */
30
+ export declare function checkClaudeCodeAvailable(): Promise<boolean>;
24
31
  /**
25
32
  * Checks whether the parent directory of the given output path exists and is writable.
26
33
  * Returns an error message string if the check fails, or undefined if OK.
@@ -1 +1 @@
1
- {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/cli/preflight.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAMnE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,GACnB,MAAM,GAAG,SAAS,CAMpB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAMpD;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAY7B;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC,CASnE;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAI5B"}
1
+ {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/cli/preflight.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mDAAmD;IACnD,YAAY,EAAE,OAAO,CAAC;IACtB,+DAA+D;IAC/D,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAMnE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,GACnB,MAAM,GAAG,SAAS,CAMpB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAMpD;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,OAAO,CAAC,OAAO,CAAC,CAM3D;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAY7B;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC,CAYnE;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAI5B"}