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.
@@ -35,6 +35,17 @@ export function checkGitAvailable() {
35
35
  });
36
36
  });
37
37
  }
38
+ /**
39
+ * Checks whether Claude Code CLI is available by running `claude --version`.
40
+ * Resolves to true if Claude Code is found, false otherwise.
41
+ */
42
+ export function checkClaudeCodeAvailable() {
43
+ return new Promise((promiseResolve) => {
44
+ execFile("claude", ["--version"], (error) => {
45
+ promiseResolve(error === null);
46
+ });
47
+ });
48
+ }
38
49
  /**
39
50
  * Checks whether the parent directory of the given output path exists and is writable.
40
51
  * Returns an error message string if the check fails, or undefined if OK.
@@ -64,8 +75,11 @@ export async function runPreflightChecks() {
64
75
  if (nodeError !== undefined) {
65
76
  throw new PreflightError(nodeError);
66
77
  }
67
- const gitAvailable = await checkGitAvailable();
68
- return { gitAvailable };
78
+ const [gitAvailable, claudeCodeAvailable] = await Promise.all([
79
+ checkGitAvailable(),
80
+ checkClaudeCodeAvailable(),
81
+ ]);
82
+ return { gitAvailable, claudeCodeAvailable };
69
83
  }
70
84
  /**
71
85
  * Error thrown when a blocking pre-flight check fails.
@@ -1 +1 @@
1
- {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/cli/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAU7C;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,aAAqB;IACzD,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,aAAqB,EACrB,YAAoB;IAEpB,MAAM,KAAK,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;IACnD,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,YAAY,EAAE,CAAC;QAChD,OAAO,yBAAyB,YAAY,8BAA8B,aAAa,GAAG,CAAC;IAC7F,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE;QACpC,QAAQ,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;YACvC,cAAc,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,UAAkB;IAElB,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAExC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,MAAM,GACV,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAC3D,OAAO,mBAAmB,YAAY,KAAK,MAAM,EAAE,CAAC;IACtD,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACxD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,iBAAiB,EAAE,CAAC;IAE/C,OAAO,EAAE,YAAY,EAAE,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
1
+ {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/cli/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAY7C;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,aAAqB;IACzD,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,aAAqB,EACrB,YAAoB;IAEpB,MAAM,KAAK,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;IACnD,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,YAAY,EAAE,CAAC;QAChD,OAAO,yBAAyB,YAAY,8BAA8B,aAAa,GAAG,CAAC;IAC7F,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE;QACpC,QAAQ,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;YACvC,cAAc,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE;QACpC,QAAQ,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1C,cAAc,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,UAAkB;IAElB,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAExC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO,SAAS,CAAC;IACnB,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,MAAM,GACV,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAC3D,OAAO,mBAAmB,YAAY,KAAK,MAAM,EAAE,CAAC;IACtD,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACxD,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,CAAC,YAAY,EAAE,mBAAmB,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC5D,iBAAiB,EAAE;QACnB,wBAAwB,EAAE;KAC3B,CAAC,CAAC;IAEH,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
@@ -1,7 +1,33 @@
1
1
  import type { ProjectBrief } from "./types.js";
2
+ /**
3
+ * Options for controlling the prompt flow.
4
+ */
5
+ export interface CollectBriefOptions {
6
+ /** When true, skips deep content prompts (AI will generate those). */
7
+ useAI?: boolean;
8
+ }
9
+ /**
10
+ * Deep content fields collected from the user when AI is not used.
11
+ */
12
+ export interface DeepContentFields {
13
+ problemStatement: string;
14
+ successCriteria: string;
15
+ valueProposition: string;
16
+ outOfScope: string;
17
+ codeConventions: string;
18
+ }
19
+ /**
20
+ * Collects the deep content prompts (problem statement, success criteria,
21
+ * value proposition, out of scope, code conventions).
22
+ * Called during the normal static flow, or as a fallback when AI generation fails.
23
+ */
24
+ export declare function collectDeepContent(): Promise<DeepContentFields>;
2
25
  /**
3
26
  * Collects the project brief from the user via interactive prompts.
27
+ * When `options.useAI` is true, skips the deep content prompts (problem statement,
28
+ * success criteria, value proposition, out of scope, code conventions) because
29
+ * the AI generator will produce those.
4
30
  * Returns the completed brief. Exits the process if the user cancels.
5
31
  */
6
- export declare function collectProjectBrief(): Promise<ProjectBrief>;
32
+ export declare function collectProjectBrief(options?: CollectBriefOptions): Promise<ProjectBrief>;
7
33
  //# sourceMappingURL=prompts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/cli/prompts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,YAAY,CAAC;AAoC1D;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,YAAY,CAAC,CA4HjE"}
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/cli/prompts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,YAAY,CAAC;AAoC1D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,sEAAsE;IACtE,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB;AAMD;;;;GAIG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CA2CrE;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,YAAY,CAAC,CAuHvB"}
@@ -30,11 +30,60 @@ function handleCancel(value) {
30
30
  process.exit(0);
31
31
  }
32
32
  }
33
+ const DEFAULT_DEFERRED = "To be defined by @meto-pm";
34
+ const DEFAULT_CONVENTIONS = "TypeScript strict mode, no any types, no console.log in production code";
35
+ /**
36
+ * Collects the deep content prompts (problem statement, success criteria,
37
+ * value proposition, out of scope, code conventions).
38
+ * Called during the normal static flow, or as a fallback when AI generation fails.
39
+ */
40
+ export async function collectDeepContent() {
41
+ const problemInput = await p.text({
42
+ message: "What problem does this project solve?",
43
+ placeholder: "Users struggle with X because Y, leading to Z",
44
+ defaultValue: DEFAULT_DEFERRED,
45
+ });
46
+ handleCancel(problemInput);
47
+ const criteriaInput = await p.text({
48
+ message: "How will you measure success?",
49
+ placeholder: "User can do X in under Y minutes, Z% adoption in first month",
50
+ defaultValue: DEFAULT_DEFERRED,
51
+ });
52
+ handleCancel(criteriaInput);
53
+ const valueInput = await p.text({
54
+ message: "What is the core value proposition? (one line)",
55
+ placeholder: "The fastest way to do X without compromising on Y",
56
+ defaultValue: DEFAULT_DEFERRED,
57
+ });
58
+ handleCancel(valueInput);
59
+ const scopeInput = await p.text({
60
+ message: "What is out of scope for v1?",
61
+ placeholder: "Multi-tenancy, mobile app, internationalization",
62
+ defaultValue: DEFAULT_DEFERRED,
63
+ });
64
+ handleCancel(scopeInput);
65
+ const conventionsInput = await p.text({
66
+ message: "Any code conventions or standards?",
67
+ placeholder: "TypeScript strict, ESLint, Prettier, conventional commits",
68
+ defaultValue: DEFAULT_CONVENTIONS,
69
+ });
70
+ handleCancel(conventionsInput);
71
+ return {
72
+ problemStatement: problemInput.trim(),
73
+ successCriteria: criteriaInput.trim(),
74
+ valueProposition: valueInput.trim(),
75
+ outOfScope: scopeInput.trim(),
76
+ codeConventions: conventionsInput.trim(),
77
+ };
78
+ }
33
79
  /**
34
80
  * Collects the project brief from the user via interactive prompts.
81
+ * When `options.useAI` is true, skips the deep content prompts (problem statement,
82
+ * success criteria, value proposition, out of scope, code conventions) because
83
+ * the AI generator will produce those.
35
84
  * Returns the completed brief. Exits the process if the user cancels.
36
85
  */
37
- export async function collectProjectBrief() {
86
+ export async function collectProjectBrief(options = {}) {
38
87
  const projectName = await p.text({
39
88
  message: "What is your project name?",
40
89
  placeholder: "my-awesome-project",
@@ -71,6 +120,26 @@ export async function collectProjectBrief() {
71
120
  label: "Node.js CLI",
72
121
  hint: "Command-line tool distributed via npm",
73
122
  },
123
+ {
124
+ value: "python-fastapi",
125
+ label: "Python (FastAPI)",
126
+ hint: "REST API with async support, auto-generated docs",
127
+ },
128
+ {
129
+ value: "go",
130
+ label: "Go",
131
+ hint: "Compiled backend service or CLI tool",
132
+ },
133
+ {
134
+ value: "vite-react",
135
+ label: "Vite + React",
136
+ hint: "Client-side SPA with fast dev server",
137
+ },
138
+ {
139
+ value: "flutter",
140
+ label: "Flutter",
141
+ hint: "Cross-platform mobile and web app with Dart",
142
+ },
74
143
  {
75
144
  value: "custom",
76
145
  label: "Custom",
@@ -92,38 +161,19 @@ export async function collectProjectBrief() {
92
161
  handleCancel(customStackInput);
93
162
  customStack = customStackInput.trim();
94
163
  }
95
- const defaultDeferred = "To be defined by @meto-pm";
96
- const problemStatement = await p.text({
97
- message: "What problem does this project solve?",
98
- placeholder: "Users struggle with X because Y, leading to Z",
99
- defaultValue: defaultDeferred,
100
- });
101
- handleCancel(problemStatement);
102
- const successCriteria = await p.text({
103
- message: "How will you measure success?",
104
- placeholder: "User can do X in under Y minutes, Z% adoption in first month",
105
- defaultValue: defaultDeferred,
106
- });
107
- handleCancel(successCriteria);
108
- const valueProposition = await p.text({
109
- message: "What is the core value proposition? (one line)",
110
- placeholder: "The fastest way to do X without compromising on Y",
111
- defaultValue: defaultDeferred,
112
- });
113
- handleCancel(valueProposition);
114
- const outOfScope = await p.text({
115
- message: "What is out of scope for v1?",
116
- placeholder: "Multi-tenancy, mobile app, internationalization",
117
- defaultValue: defaultDeferred,
118
- });
119
- handleCancel(outOfScope);
120
- const defaultConventions = "TypeScript strict mode, no any types, no console.log in production code";
121
- const codeConventions = await p.text({
122
- message: "Any code conventions or standards?",
123
- placeholder: "TypeScript strict, ESLint, Prettier, conventional commits",
124
- defaultValue: defaultConventions,
125
- });
126
- handleCancel(codeConventions);
164
+ let problemStatement = DEFAULT_DEFERRED;
165
+ let successCriteria = DEFAULT_DEFERRED;
166
+ let valueProposition = DEFAULT_DEFERRED;
167
+ let outOfScope = DEFAULT_DEFERRED;
168
+ let codeConventions = DEFAULT_CONVENTIONS;
169
+ if (!options.useAI) {
170
+ const deep = await collectDeepContent();
171
+ problemStatement = deep.problemStatement;
172
+ successCriteria = deep.successCriteria;
173
+ valueProposition = deep.valueProposition;
174
+ outOfScope = deep.outOfScope;
175
+ codeConventions = deep.codeConventions;
176
+ }
127
177
  const outputDirectory = await p.text({
128
178
  message: "Output directory?",
129
179
  defaultValue: `./${projectName}`,
@@ -137,11 +187,11 @@ export async function collectProjectBrief() {
137
187
  targetUsers: targetUsers.trim(),
138
188
  techStack,
139
189
  customStack,
140
- problemStatement: problemStatement.trim(),
141
- successCriteria: successCriteria.trim(),
142
- valueProposition: valueProposition.trim(),
143
- outOfScope: outOfScope.trim(),
144
- codeConventions: codeConventions.trim(),
190
+ problemStatement,
191
+ successCriteria,
192
+ valueProposition,
193
+ outOfScope,
194
+ codeConventions,
145
195
  outputDirectory: outputDirectory.trim(),
146
196
  };
147
197
  }
@@ -1 +1 @@
1
- {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/cli/prompts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/cli/prompts.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { ProjectBrief } from "./types.js";
2
+ import type { AIGeneratedContent } from "./ai-parser.js";
2
3
  /**
3
4
  * Map of template tokens to their replacement values.
4
5
  * Tokens in templates look like {{TOKEN_NAME}}.
@@ -15,11 +16,12 @@ export interface RenderedFile {
15
16
  }
16
17
  /**
17
18
  * Builds a token replacement map from the project brief.
18
- * Only tokens that the brief can fill are included.
19
- * Remaining tokens (e.g. {{PROBLEM_STATEMENT}}) are left as-is
20
- * for the PM agent to populate later.
19
+ * When AI-generated content is provided, it overrides the brief's static fields
20
+ * for PRODUCT_VISION, PROBLEM_STATEMENT, SUCCESS_CRITERIA, VALUE_PROPOSITION,
21
+ * OUT_OF_SCOPE, DEFINITION_OF_DONE, STARTER_EPICS, and STARTER_TASKS.
22
+ * PROJECT_NAME, TARGET_USERS, TECH_STACK, and CODE_CONVENTIONS always come from the brief.
21
23
  */
22
- export declare function buildTokenMap(brief: ProjectBrief): TokenMap;
24
+ export declare function buildTokenMap(brief: ProjectBrief, aiContent?: AIGeneratedContent): TokenMap;
23
25
  /**
24
26
  * Replaces all `{{TOKEN}}` occurrences in content using the provided map.
25
27
  * Tokens not present in the map are left untouched.
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/cli/renderer.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,sEAAsE;IACtE,YAAY,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,GAAG,QAAQ,CAkB3D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,MAAM,CAOvE;AAqDD;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAK5C;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,YAAY,EAAE,CAAC,CAgBzB"}
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/cli/renderer.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEzD;;;GAGG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,sEAAsE;IACtE,YAAY,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,YAAY,EACnB,SAAS,CAAC,EAAE,kBAAkB,GAC7B,QAAQ,CAoCV;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,GAAG,MAAM,CAOvE;AAqDD;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAK5C;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,QAAQ,GACf,OAAO,CAAC,YAAY,EAAE,CAAC,CAgBzB"}
@@ -3,11 +3,28 @@ import { basename, dirname, join, relative } from "node:path";
3
3
  import { getDefinitionOfDone, getStackDescription, getStarterEpics, } from "./stacks.js";
4
4
  /**
5
5
  * Builds a token replacement map from the project brief.
6
- * Only tokens that the brief can fill are included.
7
- * Remaining tokens (e.g. {{PROBLEM_STATEMENT}}) are left as-is
8
- * for the PM agent to populate later.
6
+ * When AI-generated content is provided, it overrides the brief's static fields
7
+ * for PRODUCT_VISION, PROBLEM_STATEMENT, SUCCESS_CRITERIA, VALUE_PROPOSITION,
8
+ * OUT_OF_SCOPE, DEFINITION_OF_DONE, STARTER_EPICS, and STARTER_TASKS.
9
+ * PROJECT_NAME, TARGET_USERS, TECH_STACK, and CODE_CONVENTIONS always come from the brief.
9
10
  */
10
- export function buildTokenMap(brief) {
11
+ export function buildTokenMap(brief, aiContent) {
12
+ if (aiContent !== undefined) {
13
+ return {
14
+ PROJECT_NAME: brief.projectName,
15
+ PRODUCT_VISION: aiContent.productVision,
16
+ TECH_STACK: getStackDescription(brief.techStack, brief.customStack),
17
+ TARGET_USERS: brief.targetUsers,
18
+ PROBLEM_STATEMENT: aiContent.problemStatement,
19
+ SUCCESS_CRITERIA: aiContent.successCriteria,
20
+ VALUE_PROPOSITION: aiContent.valueProposition,
21
+ OUT_OF_SCOPE: aiContent.outOfScope,
22
+ CODE_CONVENTIONS: brief.codeConventions,
23
+ DEFINITION_OF_DONE: aiContent.definitionOfDone,
24
+ STARTER_EPICS: aiContent.epics,
25
+ STARTER_TASKS: aiContent.starterTasks,
26
+ };
27
+ }
11
28
  return {
12
29
  PROJECT_NAME: brief.projectName,
13
30
  PRODUCT_VISION: brief.description,
@@ -20,6 +37,7 @@ export function buildTokenMap(brief) {
20
37
  CODE_CONVENTIONS: brief.codeConventions,
21
38
  DEFINITION_OF_DONE: getDefinitionOfDone(brief.techStack, brief.customStack),
22
39
  STARTER_EPICS: getStarterEpics(brief.techStack, brief.projectName, brief.customStack),
40
+ STARTER_TASKS: "",
23
41
  };
24
42
  }
25
43
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/cli/renderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/cli/renderer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"stacks.d.ts","sourceRoot":"","sources":["../../src/cli/stacks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAyP5C;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,EAChB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAOR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,EAChB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAQR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAYR"}
1
+ {"version":3,"file":"stacks.d.ts","sourceRoot":"","sources":["../../src/cli/stacks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA6f5C;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,EAChB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAOR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,EAChB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAQR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAYR"}
@@ -44,10 +44,77 @@ const NODEJS_CLI_DESCRIPTION = `## Stack Overview
44
44
  ## Key Libraries
45
45
  - **commander or yargs** -- argument parsing (if needed)
46
46
  - **vitest** -- fast TypeScript-native testing`;
47
+ /**
48
+ * Structured description for the Python (FastAPI) stack.
49
+ */
50
+ const PYTHON_FASTAPI_DESCRIPTION = `## Stack Overview
51
+
52
+ | Layer | Choice | Reason |
53
+ |---|---|---|
54
+ | Runtime | Python 3.11+ | Modern async support, type hints, broad ecosystem |
55
+ | Framework | FastAPI | High-performance async framework with auto-generated docs |
56
+ | Database | PostgreSQL or SQLite | Robust relational database with strong Python driver support |
57
+ | ORM | SQLAlchemy or Tortoise | Mature ORM with migration support and async capabilities |
58
+ | Docs | Auto-generated OpenAPI/Swagger | Interactive API docs available at /docs out of the box |
59
+
60
+ ## Key Libraries
61
+ - **Pydantic** -- data validation and serialization
62
+ - **Alembic** -- database migration management`;
63
+ /**
64
+ * Structured description for the Go stack.
65
+ */
66
+ const GO_DESCRIPTION = `## Stack Overview
67
+
68
+ | Layer | Choice | Reason |
69
+ |---|---|---|
70
+ | Language | Go 1.22+ | Fast compilation, built-in concurrency, single binary output |
71
+ | HTTP | net/http or Chi/Gin | Standard library or lightweight router depending on complexity |
72
+ | Database | PostgreSQL via pgx or GORM | High-performance driver or full ORM for rapid development |
73
+ | Testing | Built-in testing package | No external framework needed, benchmarks included |
74
+
75
+ ## Key Libraries
76
+ - **slog** -- structured logging (stdlib)
77
+ - **cobra** -- CLI argument parsing (if building a CLI)`;
78
+ /**
79
+ * Structured description for the Vite + React stack.
80
+ */
81
+ const VITE_REACT_DESCRIPTION = `## Stack Overview
82
+
83
+ | Layer | Choice | Reason |
84
+ |---|---|---|
85
+ | Build | Vite | Lightning-fast HMR and optimized production builds |
86
+ | UI | React 18+ | Component-based UI with concurrent rendering support |
87
+ | Styling | Tailwind CSS or CSS Modules | Utility-first styling or scoped CSS depending on preference |
88
+ | Routing | React Router | Declarative routing with nested layouts and data loading |
89
+ | State | Zustand or Redux Toolkit | Lightweight or full-featured state management |
90
+
91
+ ## Key Libraries
92
+ - **TypeScript** -- strict mode throughout
93
+ - **Vitest** -- fast Vite-native testing`;
94
+ /**
95
+ * Structured description for the Flutter stack.
96
+ */
97
+ const FLUTTER_DESCRIPTION = `## Stack Overview
98
+
99
+ | Layer | Choice | Reason |
100
+ |---|---|---|
101
+ | Language | Dart | Optimized for UI development with hot reload |
102
+ | UI | Flutter widgets | Rich widget library for iOS, Android, and web |
103
+ | State | Riverpod or Bloc | Reactive state management with compile-time safety |
104
+ | Backend | Firebase or custom API | Serverless backend or connect to any REST/GraphQL API |
105
+ | Testing | Flutter test framework | Widget tests, unit tests, and integration tests built-in |
106
+
107
+ ## Key Libraries
108
+ - **GoRouter** -- declarative routing with deep link support
109
+ - **freezed** -- immutable data classes with union types`;
47
110
  const STACK_DESCRIPTIONS = {
48
111
  "nextjs-supabase": NEXTJS_SUPABASE_DESCRIPTION,
49
112
  "react-native": REACT_NATIVE_DESCRIPTION,
50
113
  "nodejs-cli": NODEJS_CLI_DESCRIPTION,
114
+ "python-fastapi": PYTHON_FASTAPI_DESCRIPTION,
115
+ "go": GO_DESCRIPTION,
116
+ "vite-react": VITE_REACT_DESCRIPTION,
117
+ "flutter": FLUTTER_DESCRIPTION,
51
118
  };
52
119
  /**
53
120
  * Definition of Done criteria for the Next.js + Supabase stack.
@@ -109,10 +176,75 @@ const CUSTOM_STACK_DOD = `## Universal Checks
109
176
 
110
177
  ## Stack-Specific Checks
111
178
  *Add stack-specific checks here based on your chosen technology.*`;
179
+ /**
180
+ * Definition of Done criteria for the Python (FastAPI) stack.
181
+ */
182
+ const PYTHON_FASTAPI_DOD = `## Universal Checks
183
+ - [ ] mypy type checking passes with no errors
184
+ - [ ] No \`print()\` statements in committed code
185
+ - [ ] No commented-out code in committed files
186
+ - [ ] Error states handled (proper HTTP error responses)
187
+
188
+ ## Stack-Specific Checks
189
+ - [ ] All endpoints return proper HTTP status codes
190
+ - [ ] Pydantic models used for request/response validation
191
+ - [ ] Database migrations applied and tested locally
192
+ - [ ] API docs accessible at \`/docs\`
193
+ - [ ] Tests pass with \`pytest\``;
194
+ /**
195
+ * Definition of Done criteria for the Go stack.
196
+ */
197
+ const GO_DOD = `## Universal Checks
198
+ - [ ] Code compiles with \`go build\`
199
+ - [ ] \`go vet\` passes with no warnings
200
+ - [ ] No \`fmt.Println\` in committed code
201
+ - [ ] No commented-out code in committed files
202
+ - [ ] Error states handled (no ignored error returns)
203
+
204
+ ## Stack-Specific Checks
205
+ - [ ] \`golangci-lint\` passes
206
+ - [ ] Error values always checked
207
+ - [ ] Context propagated through handlers
208
+ - [ ] Tests pass with \`go test ./...\``;
209
+ /**
210
+ * Definition of Done criteria for the Vite + React stack.
211
+ */
212
+ const VITE_REACT_DOD = `## Universal Checks
213
+ - [ ] TypeScript compiles with no errors (\`npx tsc --noEmit\`)
214
+ - [ ] No \`any\` types in changed files
215
+ - [ ] No \`console.log\` in committed code
216
+ - [ ] No commented-out code in committed files
217
+ - [ ] Error states handled (loading, empty, error UI)
218
+
219
+ ## Stack-Specific Checks
220
+ - [ ] No layout shifts on load
221
+ - [ ] Responsive at 375px minimum
222
+ - [ ] Route transitions work
223
+ - [ ] Build succeeds with \`npm run build\`
224
+ - [ ] No runtime errors in browser console`;
225
+ /**
226
+ * Definition of Done criteria for the Flutter stack.
227
+ */
228
+ const FLUTTER_DOD = `## Universal Checks
229
+ - [ ] \`dart analyze\` passes with no errors
230
+ - [ ] No \`print()\` in committed code
231
+ - [ ] No commented-out code in committed files
232
+ - [ ] Error states handled (loading, empty, error UI)
233
+
234
+ ## Stack-Specific Checks
235
+ - [ ] Runs on iOS simulator without crash
236
+ - [ ] Runs on Android emulator without crash
237
+ - [ ] No hardcoded dimensions (use responsive sizing)
238
+ - [ ] Widget tests pass with \`flutter test\`
239
+ - [ ] Responsive across screen sizes`;
112
240
  const STACK_DODS = {
113
241
  "nextjs-supabase": NEXTJS_SUPABASE_DOD,
114
242
  "react-native": REACT_NATIVE_DOD,
115
243
  "nodejs-cli": NODEJS_CLI_DOD,
244
+ "python-fastapi": PYTHON_FASTAPI_DOD,
245
+ "go": GO_DOD,
246
+ "vite-react": VITE_REACT_DOD,
247
+ "flutter": FLUTTER_DOD,
116
248
  };
117
249
  /**
118
250
  * Starter epics for the Next.js + Supabase stack.
@@ -226,10 +358,126 @@ const CUSTOM_STACK_EPICS = `## E1 -- Project Setup
226
358
  **Goal:** Set up deployment pipeline and ship the first version to production.
227
359
  **Status:** Not started
228
360
  **Tasks:** To be sliced by @meto-pm`;
361
+ /**
362
+ * Starter epics for the Python (FastAPI) stack.
363
+ */
364
+ const PYTHON_FASTAPI_EPICS = `## E1 -- Project Setup
365
+ **Goal:** Initialize the FastAPI project with virtual environment, install dependencies, and configure development tooling (mypy, pytest, linter).
366
+ **Status:** Not started
367
+ **Tasks:** To be sliced by @meto-pm
368
+
369
+ ---
370
+
371
+ ## E2 -- Database + Models
372
+ **Goal:** Set up SQLAlchemy with PostgreSQL or SQLite, define initial models, configure Alembic migrations, and create seed data.
373
+ **Status:** Not started
374
+ **Tasks:** To be sliced by @meto-pm
375
+
376
+ ---
377
+
378
+ ## E3 -- Core API Endpoints
379
+ **Goal:** Build the primary API endpoints for the application. To be defined by @meto-pm based on the product vision.
380
+ **Status:** Not started
381
+ **Tasks:** To be sliced by @meto-pm
382
+
383
+ ---
384
+
385
+ ## E4 -- Deploy
386
+ **Goal:** Containerize with Docker, configure cloud hosting, and manage environment variables for production.
387
+ **Status:** Not started
388
+ **Tasks:** To be sliced by @meto-pm`;
389
+ /**
390
+ * Starter epics for the Go stack.
391
+ */
392
+ const GO_EPICS = `## E1 -- Project Setup
393
+ **Goal:** Initialize the Go module, establish directory structure, and create a Makefile with build, test, and lint targets.
394
+ **Status:** Not started
395
+ **Tasks:** To be sliced by @meto-pm
396
+
397
+ ---
398
+
399
+ ## E2 -- Core Service
400
+ **Goal:** Implement the main HTTP handler or CLI command that delivers the core value of the service.
401
+ **Status:** Not started
402
+ **Tasks:** To be sliced by @meto-pm
403
+
404
+ ---
405
+
406
+ ## E3 -- Testing + CI
407
+ **Goal:** Add unit tests, configure golangci-lint, and set up continuous integration.
408
+ **Status:** Not started
409
+ **Tasks:** To be sliced by @meto-pm
410
+
411
+ ---
412
+
413
+ ## E4 -- Deploy
414
+ **Goal:** Containerize with Docker, configure binary distribution, and set up production deployment.
415
+ **Status:** Not started
416
+ **Tasks:** To be sliced by @meto-pm`;
417
+ /**
418
+ * Starter epics for the Vite + React stack.
419
+ */
420
+ const VITE_REACT_EPICS = `## E1 -- Project Setup
421
+ **Goal:** Initialize the Vite project with React, configure Tailwind CSS, set up React Router, and establish the development environment.
422
+ **Status:** Not started
423
+ **Tasks:** To be sliced by @meto-pm
424
+
425
+ ---
426
+
427
+ ## E2 -- Core Feature
428
+ **Goal:** Build the primary feature of the application. To be defined by @meto-pm based on the product vision.
429
+ **Status:** Not started
430
+ **Tasks:** To be sliced by @meto-pm
431
+
432
+ ---
433
+
434
+ ## E3 -- Testing
435
+ **Goal:** Add Vitest with React Testing Library for component and integration tests.
436
+ **Status:** Not started
437
+ **Tasks:** To be sliced by @meto-pm
438
+
439
+ ---
440
+
441
+ ## E4 -- Deploy
442
+ **Goal:** Configure static hosting, set up CI/CD pipeline, and optimize production build.
443
+ **Status:** Not started
444
+ **Tasks:** To be sliced by @meto-pm`;
445
+ /**
446
+ * Starter epics for the Flutter stack.
447
+ */
448
+ const FLUTTER_EPICS = `## E1 -- Project Setup
449
+ **Goal:** Initialize the Flutter project, configure project structure, and set up the app theme and design system.
450
+ **Status:** Not started
451
+ **Tasks:** To be sliced by @meto-pm
452
+
453
+ ---
454
+
455
+ ## E2 -- Navigation + Routing
456
+ **Goal:** Implement navigation with GoRouter or Navigator 2.0, including deep link support.
457
+ **Status:** Not started
458
+ **Tasks:** To be sliced by @meto-pm
459
+
460
+ ---
461
+
462
+ ## E3 -- Core Feature
463
+ **Goal:** Build the primary feature of the application. To be defined by @meto-pm based on the product vision.
464
+ **Status:** Not started
465
+ **Tasks:** To be sliced by @meto-pm
466
+
467
+ ---
468
+
469
+ ## E4 -- App Store Prep
470
+ **Goal:** Prepare app icons, splash screen, metadata, and production builds for App Store and Play Store submission.
471
+ **Status:** Not started
472
+ **Tasks:** To be sliced by @meto-pm`;
229
473
  const STACK_EPICS = {
230
474
  "nextjs-supabase": NEXTJS_SUPABASE_EPICS,
231
475
  "react-native": REACT_NATIVE_EPICS,
232
476
  "nodejs-cli": NODEJS_CLI_EPICS,
477
+ "python-fastapi": PYTHON_FASTAPI_EPICS,
478
+ "go": GO_EPICS,
479
+ "vite-react": VITE_REACT_EPICS,
480
+ "flutter": FLUTTER_EPICS,
233
481
  };
234
482
  /**
235
483
  * Returns a structured markdown description for the selected tech stack.
@@ -1 +1 @@
1
- {"version":3,"file":"stacks.js","sourceRoot":"","sources":["../../src/cli/stacks.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,2BAA2B,GAAG;;;;;;;;;;;;2CAYO,CAAC;AAE5C;;GAEG;AACH,MAAM,wBAAwB,GAAG;;;;;;;;;;;2CAWU,CAAC;AAE5C;;GAEG;AACH,MAAM,sBAAsB,GAAG;;;;;;;;;;;+CAWgB,CAAC;AAEhD,MAAM,kBAAkB,GAAiD;IACvE,iBAAiB,EAAE,2BAA2B;IAC9C,cAAc,EAAE,wBAAwB;IACxC,YAAY,EAAE,sBAAsB;CACrC,CAAC;AAEF;;GAEG;AACH,MAAM,mBAAmB,GAAG;;;;;;;;;;;;0DAY8B,CAAC;AAE3D;;GAEG;AACH,MAAM,gBAAgB,GAAG;;;;;;;;;;;;6CAYoB,CAAC;AAE9C;;GAEG;AACH,MAAM,cAAc,GAAG;;;;;;;;;;;;sEAY+C,CAAC;AAEvE;;GAEG;AACH,MAAM,gBAAgB,GAAG;;;;;;;;kEAQyC,CAAC;AAEnE,MAAM,UAAU,GAAiD;IAC/D,iBAAiB,EAAE,mBAAmB;IACtC,cAAc,EAAE,gBAAgB;IAChC,YAAY,EAAE,cAAc;CAC7B,CAAC;AAEF;;GAEG;AACH,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;oCAwBM,CAAC;AAErC;;GAEG;AACH,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;oCAwBS,CAAC;AAErC;;GAEG;AACH,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;oCAwBW,CAAC;AAErC;;GAEG;AACH,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;oCAwBS,CAAC;AAErC,MAAM,WAAW,GAAiD;IAChE,iBAAiB,EAAE,qBAAqB;IACxC,cAAc,EAAE,kBAAkB;IAClC,YAAY,EAAE,gBAAgB;CAC/B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAgB,EAChB,WAAoB;IAEpB,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,WAAW,IAAI,uCAAuC,CAAC;QAC3E,OAAO,sBAAsB,WAAW,EAAE,CAAC;IAC7C,CAAC;IAED,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAgB,EAChB,WAAoB;IAEpB,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,OAAO,WAAW,KAAK,SAAS;YAC9B,CAAC,CAAC,GAAG,gBAAgB,uBAAuB,WAAW,EAAE;YACzD,CAAC,CAAC,gBAAgB,CAAC;IACvB,CAAC;IAED,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAC7B,KAAgB,EAChB,WAAmB,EACnB,WAAoB;IAEpB,MAAM,OAAO,GAAG,cAAc,WAAW,+JAA+J,CAAC;IAEzM,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvB,MAAM,IAAI,GACR,WAAW,KAAK,SAAS;YACvB,CAAC,CAAC,8BAA8B,WAAW,kDAAkD;YAC7F,CAAC,CAAC,EAAE,CAAC;QACT,OAAO,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAAC;IAC7C,CAAC;IAED,OAAO,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;AACtC,CAAC"}
1
+ {"version":3,"file":"stacks.js","sourceRoot":"","sources":["../../src/cli/stacks.ts"],"names":[],"mappings":"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"}