wiggum-cli 0.2.3 → 0.2.6
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/dist/ai/enhancer.d.ts.map +1 -1
- package/dist/ai/enhancer.js +61 -13
- package/dist/ai/enhancer.js.map +1 -1
- package/dist/ai/providers.d.ts +4 -0
- package/dist/ai/providers.d.ts.map +1 -1
- package/dist/ai/providers.js +16 -0
- package/dist/ai/providers.js.map +1 -1
- package/dist/generator/templates.d.ts +8 -0
- package/dist/generator/templates.d.ts.map +1 -1
- package/dist/generator/templates.js +90 -4
- package/dist/generator/templates.js.map +1 -1
- package/dist/templates/guides/AGENTS.md.tmpl +39 -22
- package/package.json +1 -1
- package/src/ai/enhancer.ts +67 -11
- package/src/ai/providers.ts +18 -0
- package/src/generator/templates.ts +139 -6
- package/src/templates/guides/AGENTS.md.tmpl +39 -22
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enhancer.d.ts","sourceRoot":"","sources":["../../src/ai/enhancer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAkC,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAY,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"enhancer.d.ts","sourceRoot":"","sources":["../../src/ai/enhancer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAkC,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAY,KAAK,UAAU,EAAgD,MAAM,gBAAgB,CAAC;AAKzG;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,6CAA6C;IAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,kDAAkD;IAClD,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;IACpC,iCAAiC;IACjC,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,wDAAwD;IACxD,0BAA0B,CAAC,EAAE,MAAM,EAAE,CAAC;CACvC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IACpD,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kEAAkE;IAClE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAqFD;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,OAAO,CAAU;gBAEb,OAAO,GAAE,eAAoB;IAOzC;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;OAEG;IACG,OAAO,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAgElE;;OAEG;YACW,aAAa;IAmB3B;;OAEG;YACW,cAAc;CA+E7B;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,UAAU,EACtB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,kBAAkB,CAAC,CAG7B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAwEnE"}
|
package/dist/ai/enhancer.js
CHANGED
|
@@ -3,14 +3,20 @@
|
|
|
3
3
|
* Uses AI to analyze the codebase for deeper insights
|
|
4
4
|
*/
|
|
5
5
|
import { generateText, stepCountIs } from 'ai';
|
|
6
|
-
import { getModel, hasApiKey, getApiKeyEnvVar } from './providers.js';
|
|
6
|
+
import { getModel, hasApiKey, getApiKeyEnvVar, isReasoningModel } from './providers.js';
|
|
7
7
|
import { SYSTEM_PROMPT, SYSTEM_PROMPT_AGENTIC, createAnalysisPrompt } from './prompts.js';
|
|
8
8
|
import { createExplorationTools } from './tools.js';
|
|
9
9
|
import { logger } from '../utils/logger.js';
|
|
10
10
|
/**
|
|
11
11
|
* Parse AI response JSON safely
|
|
12
12
|
*/
|
|
13
|
-
function parseAIResponse(text) {
|
|
13
|
+
function parseAIResponse(text, verbose = false) {
|
|
14
|
+
if (!text || text.trim() === '') {
|
|
15
|
+
if (verbose) {
|
|
16
|
+
logger.warn('AI response text is empty');
|
|
17
|
+
}
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
14
20
|
try {
|
|
15
21
|
// Try to extract JSON from the response
|
|
16
22
|
// The AI might wrap it in markdown code blocks
|
|
@@ -20,15 +26,32 @@ function parseAIResponse(text) {
|
|
|
20
26
|
if (jsonMatch) {
|
|
21
27
|
jsonText = jsonMatch[1];
|
|
22
28
|
}
|
|
23
|
-
// Try to find JSON object
|
|
29
|
+
// Try to find JSON object - use greedy match for the outermost braces
|
|
30
|
+
// This handles cases where there's text before/after the JSON
|
|
24
31
|
const objectMatch = jsonText.match(/\{[\s\S]*\}/);
|
|
25
32
|
if (objectMatch) {
|
|
26
33
|
jsonText = objectMatch[0];
|
|
27
34
|
}
|
|
28
|
-
|
|
35
|
+
// Try to parse JSON
|
|
36
|
+
const result = JSON.parse(jsonText);
|
|
37
|
+
// Validate that we got the expected structure
|
|
38
|
+
if (!result || typeof result !== 'object') {
|
|
39
|
+
if (verbose) {
|
|
40
|
+
logger.warn('AI response parsed but is not an object');
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
return result;
|
|
29
45
|
}
|
|
30
46
|
catch (error) {
|
|
31
|
-
|
|
47
|
+
if (verbose) {
|
|
48
|
+
logger.warn(`Failed to parse AI response as JSON: ${error instanceof Error ? error.message : String(error)}`);
|
|
49
|
+
// Log first 500 chars of response for debugging
|
|
50
|
+
logger.warn(`Response preview: ${text.substring(0, 500)}...`);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
logger.warn('Failed to parse AI response as JSON');
|
|
54
|
+
}
|
|
32
55
|
return null;
|
|
33
56
|
}
|
|
34
57
|
}
|
|
@@ -107,11 +130,11 @@ export class AIEnhancer {
|
|
|
107
130
|
let analysis;
|
|
108
131
|
if (this.agentic) {
|
|
109
132
|
// Agentic mode: use tools to explore codebase
|
|
110
|
-
analysis = await this.enhanceAgentic(model, scanResult);
|
|
133
|
+
analysis = await this.enhanceAgentic(model, modelId, scanResult);
|
|
111
134
|
}
|
|
112
135
|
else {
|
|
113
136
|
// Simple mode: just analyze detected stack
|
|
114
|
-
analysis = await this.enhanceSimple(model, scanResult);
|
|
137
|
+
analysis = await this.enhanceSimple(model, modelId, scanResult);
|
|
115
138
|
}
|
|
116
139
|
if (!analysis) {
|
|
117
140
|
return {
|
|
@@ -145,21 +168,22 @@ export class AIEnhancer {
|
|
|
145
168
|
/**
|
|
146
169
|
* Simple enhancement mode - analyze detected stack without tools
|
|
147
170
|
*/
|
|
148
|
-
async enhanceSimple(model, scanResult) {
|
|
171
|
+
async enhanceSimple(model, modelId, scanResult) {
|
|
149
172
|
const prompt = createAnalysisPrompt(scanResult);
|
|
150
173
|
const { text } = await generateText({
|
|
151
174
|
model,
|
|
152
175
|
system: SYSTEM_PROMPT,
|
|
153
176
|
prompt,
|
|
154
177
|
maxOutputTokens: 2000,
|
|
155
|
-
temperature
|
|
178
|
+
// Reasoning models don't support temperature
|
|
179
|
+
...(isReasoningModel(modelId) ? {} : { temperature: 0.3 }),
|
|
156
180
|
});
|
|
157
181
|
return parseAIResponse(text);
|
|
158
182
|
}
|
|
159
183
|
/**
|
|
160
184
|
* Agentic enhancement mode - use tools to explore codebase
|
|
161
185
|
*/
|
|
162
|
-
async enhanceAgentic(model, scanResult) {
|
|
186
|
+
async enhanceAgentic(model, modelId, scanResult) {
|
|
163
187
|
const tools = createExplorationTools(scanResult.projectRoot);
|
|
164
188
|
const prompt = `Analyze this codebase and produce configuration for AI-assisted development.
|
|
165
189
|
|
|
@@ -192,16 +216,40 @@ When done exploring, output your final analysis as valid JSON matching this stru
|
|
|
192
216
|
}`;
|
|
193
217
|
// Use agentic loop - AI will call tools until it has enough info
|
|
194
218
|
// stopWhen: stepCountIs(10) allows up to 10 tool-calling steps
|
|
195
|
-
const
|
|
219
|
+
const result = await generateText({
|
|
196
220
|
model,
|
|
197
221
|
system: SYSTEM_PROMPT_AGENTIC,
|
|
198
222
|
prompt,
|
|
199
223
|
tools,
|
|
200
224
|
stopWhen: stepCountIs(10),
|
|
201
225
|
maxOutputTokens: 4000,
|
|
202
|
-
temperature
|
|
226
|
+
// Reasoning models don't support temperature
|
|
227
|
+
...(isReasoningModel(modelId) ? {} : { temperature: 0.3 }),
|
|
203
228
|
});
|
|
204
|
-
|
|
229
|
+
// Try to get text from the result
|
|
230
|
+
let textToParse = result.text;
|
|
231
|
+
// If text is empty, try to extract from steps
|
|
232
|
+
if (!textToParse || textToParse.trim() === '') {
|
|
233
|
+
if (this.verbose) {
|
|
234
|
+
logger.info(`No direct text output, checking ${result.steps?.length || 0} steps...`);
|
|
235
|
+
}
|
|
236
|
+
// Look through steps for text content (from last to first)
|
|
237
|
+
const steps = result.steps || [];
|
|
238
|
+
for (let i = steps.length - 1; i >= 0; i--) {
|
|
239
|
+
const step = steps[i];
|
|
240
|
+
if (step.text && step.text.trim() !== '') {
|
|
241
|
+
textToParse = step.text;
|
|
242
|
+
if (this.verbose) {
|
|
243
|
+
logger.info(`Found text in step ${i + 1}`);
|
|
244
|
+
}
|
|
245
|
+
break;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
if (this.verbose && (!textToParse || textToParse.trim() === '')) {
|
|
250
|
+
logger.warn('No text output found in response or steps');
|
|
251
|
+
}
|
|
252
|
+
return parseAIResponse(textToParse, this.verbose);
|
|
205
253
|
}
|
|
206
254
|
}
|
|
207
255
|
/**
|
package/dist/ai/enhancer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enhancer.js","sourceRoot":"","sources":["../../src/ai/enhancer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAmB,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"enhancer.js","sourceRoot":"","sources":["../../src/ai/enhancer.ts"],"names":[],"mappings":"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"}
|
package/dist/ai/providers.d.ts
CHANGED
|
@@ -44,4 +44,8 @@ export declare function getAvailableProvider(): AIProvider | null;
|
|
|
44
44
|
* Get the environment variable name for a provider's API key
|
|
45
45
|
*/
|
|
46
46
|
export declare function getApiKeyEnvVar(provider: AIProvider): string;
|
|
47
|
+
/**
|
|
48
|
+
* Check if a model is a reasoning model that doesn't support temperature
|
|
49
|
+
*/
|
|
50
|
+
export declare function isReasoningModel(modelId: string): boolean;
|
|
47
51
|
//# sourceMappingURL=providers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/ai/providers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAExC;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,YAAY,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,UAAU,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAWD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,UAAU,EAAE,WAAW,EAAE,CAkB9D,CAAC;AAYF;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAGvD;AAmBD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,GAAE,UAAwB,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,cAAc,CA0CnG;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,UAAU,GAAG,IAAI,CAUxD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,CAE5D"}
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/ai/providers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAExC;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,YAAY,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,UAAU,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAWD;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,UAAU,EAAE,WAAW,EAAE,CAkB9D,CAAC;AAYF;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,UAAU,GAAG,OAAO,CAGvD;AAmBD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,GAAE,UAAwB,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,cAAc,CA0CnG;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,UAAU,GAAG,IAAI,CAUxD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,UAAU,GAAG,MAAM,CAE5D;AAaD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEzD"}
|
package/dist/ai/providers.js
CHANGED
|
@@ -123,4 +123,20 @@ export function getAvailableProvider() {
|
|
|
123
123
|
export function getApiKeyEnvVar(provider) {
|
|
124
124
|
return API_KEY_ENV_VARS[provider];
|
|
125
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Models that don't support temperature parameter (reasoning models)
|
|
128
|
+
*/
|
|
129
|
+
const REASONING_MODELS = [
|
|
130
|
+
// OpenAI reasoning models
|
|
131
|
+
'o1', 'o1-mini', 'o1-preview',
|
|
132
|
+
'o3', 'o3-mini',
|
|
133
|
+
'gpt-5', 'gpt-5.1', 'gpt-5-mini',
|
|
134
|
+
'gpt-5.1-codex', 'gpt-5.1-codex-max',
|
|
135
|
+
];
|
|
136
|
+
/**
|
|
137
|
+
* Check if a model is a reasoning model that doesn't support temperature
|
|
138
|
+
*/
|
|
139
|
+
export function isReasoningModel(modelId) {
|
|
140
|
+
return REASONING_MODELS.some(m => modelId.startsWith(m));
|
|
141
|
+
}
|
|
126
142
|
//# sourceMappingURL=providers.js.map
|
package/dist/ai/providers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/ai/providers.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/ai/providers.ts"],"names":[],"mappings":"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"}
|
|
@@ -28,6 +28,14 @@ export interface TemplateVariables {
|
|
|
28
28
|
typecheckCommand: string;
|
|
29
29
|
formatCommand: string;
|
|
30
30
|
appDir: string;
|
|
31
|
+
aiEntryPoints: string;
|
|
32
|
+
aiKeyDirectories: string;
|
|
33
|
+
aiNamingConventions: string;
|
|
34
|
+
aiImplementationGuidelines: string;
|
|
35
|
+
aiMcpEssential: string;
|
|
36
|
+
aiMcpRecommended: string;
|
|
37
|
+
aiMissedTechnologies: string;
|
|
38
|
+
hasAiAnalysis: string;
|
|
31
39
|
[key: string]: string;
|
|
32
40
|
}
|
|
33
41
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/generator/templates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,qBAAqB,CAAC;AAKrE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAEhC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IAGpB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IAGzB,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAG9B,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IAGvB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IAGvB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IAGtB,MAAM,EAAE,MAAM,CAAC;IAGf,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/generator/templates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,qBAAqB,CAAC;AAKrE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAEhC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IAGpB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IAGzB,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAG9B,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IAGvB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IAGvB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IAGtB,MAAM,EAAE,MAAM,CAAC;IAGf,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,0BAA0B,EAAE,MAAM,CAAC;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;IAGtB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAsJD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,iBAAiB,CAiEnH;AAsKD;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,GAAG,MAAM,CAWtF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAG7G;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAKxC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA2BrF;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,iBAAiB,GAC3B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAU9B"}
|
|
@@ -40,6 +40,78 @@ function deriveCommands(packageManager) {
|
|
|
40
40
|
formatCommand: pm === 'npm' ? 'npx prettier --write .' : `${pm} prettier --write .`,
|
|
41
41
|
};
|
|
42
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Format AI analysis data for templates
|
|
45
|
+
*/
|
|
46
|
+
function formatAiAnalysisForTemplates(scanResult) {
|
|
47
|
+
// Check if this is an EnhancedScanResult with aiAnalysis
|
|
48
|
+
const aiAnalysis = scanResult.aiAnalysis;
|
|
49
|
+
if (!aiAnalysis) {
|
|
50
|
+
return {
|
|
51
|
+
hasAiAnalysis: '',
|
|
52
|
+
aiEntryPoints: '',
|
|
53
|
+
aiKeyDirectories: '',
|
|
54
|
+
aiNamingConventions: '',
|
|
55
|
+
aiImplementationGuidelines: '',
|
|
56
|
+
aiMcpEssential: '',
|
|
57
|
+
aiMcpRecommended: '',
|
|
58
|
+
aiMissedTechnologies: '',
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
// Format entry points as bullet list
|
|
62
|
+
const entryPoints = aiAnalysis.projectContext?.entryPoints || [];
|
|
63
|
+
const aiEntryPoints = entryPoints.length > 0
|
|
64
|
+
? entryPoints.map(e => `- \`${e}\``).join('\n')
|
|
65
|
+
: '';
|
|
66
|
+
// Format key directories as table rows
|
|
67
|
+
const keyDirs = aiAnalysis.projectContext?.keyDirectories || {};
|
|
68
|
+
const aiKeyDirectories = Object.keys(keyDirs).length > 0
|
|
69
|
+
? Object.entries(keyDirs).map(([dir, purpose]) => `| \`${dir}/\` | ${purpose} |`).join('\n')
|
|
70
|
+
: '';
|
|
71
|
+
// Naming conventions
|
|
72
|
+
const aiNamingConventions = aiAnalysis.projectContext?.namingConventions || '';
|
|
73
|
+
// Implementation guidelines as bullet list
|
|
74
|
+
const guidelines = aiAnalysis.implementationGuidelines || [];
|
|
75
|
+
const aiImplementationGuidelines = guidelines.length > 0
|
|
76
|
+
? guidelines.map(g => `- ${g}`).join('\n')
|
|
77
|
+
: '';
|
|
78
|
+
// MCP servers
|
|
79
|
+
const aiMcpEssential = (aiAnalysis.mcpServers?.essential || []).join(', ');
|
|
80
|
+
const aiMcpRecommended = (aiAnalysis.mcpServers?.recommended || []).join(', ');
|
|
81
|
+
// Missed technologies
|
|
82
|
+
const aiMissedTechnologies = (aiAnalysis.possibleMissedTechnologies || []).join(', ');
|
|
83
|
+
return {
|
|
84
|
+
hasAiAnalysis: 'true',
|
|
85
|
+
aiEntryPoints,
|
|
86
|
+
aiKeyDirectories,
|
|
87
|
+
aiNamingConventions,
|
|
88
|
+
aiImplementationGuidelines,
|
|
89
|
+
aiMcpEssential,
|
|
90
|
+
aiMcpRecommended,
|
|
91
|
+
aiMissedTechnologies,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Extract AI-detected commands or fall back to derived commands
|
|
96
|
+
*/
|
|
97
|
+
function getCommands(scanResult, packageManager) {
|
|
98
|
+
// Check for AI-detected commands
|
|
99
|
+
const aiCommands = scanResult.aiAnalysis?.commands;
|
|
100
|
+
// Derive default commands from package manager
|
|
101
|
+
const derived = deriveCommands(packageManager);
|
|
102
|
+
if (!aiCommands) {
|
|
103
|
+
return derived;
|
|
104
|
+
}
|
|
105
|
+
// Use AI-detected commands where available, fall back to derived
|
|
106
|
+
return {
|
|
107
|
+
devCommand: aiCommands.dev || derived.devCommand,
|
|
108
|
+
buildCommand: aiCommands.build || derived.buildCommand,
|
|
109
|
+
testCommand: aiCommands.test || derived.testCommand,
|
|
110
|
+
lintCommand: aiCommands.lint || derived.lintCommand,
|
|
111
|
+
typecheckCommand: aiCommands.typecheck || derived.typecheckCommand,
|
|
112
|
+
formatCommand: aiCommands.format || derived.formatCommand,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
43
115
|
/**
|
|
44
116
|
* Extract template variables from scan result
|
|
45
117
|
*/
|
|
@@ -63,10 +135,23 @@ export function extractVariables(scanResult, customVars = {}) {
|
|
|
63
135
|
const styling = stack.styling?.name || DEFAULT_VARIABLES.styling;
|
|
64
136
|
const stylingVersion = stack.styling?.version || DEFAULT_VARIABLES.stylingVersion;
|
|
65
137
|
const stylingVariant = stack.styling?.variant || DEFAULT_VARIABLES.stylingVariant;
|
|
66
|
-
//
|
|
67
|
-
const commands =
|
|
68
|
-
//
|
|
69
|
-
const
|
|
138
|
+
// Get commands (AI-detected or derived)
|
|
139
|
+
const commands = getCommands(scanResult, packageManager);
|
|
140
|
+
// Extract AI analysis data
|
|
141
|
+
const aiData = formatAiAnalysisForTemplates(scanResult);
|
|
142
|
+
// Determine app directory - use AI entry points if available
|
|
143
|
+
let appDir = 'src';
|
|
144
|
+
if (frameworkVariant === 'app-router' || framework.toLowerCase().includes('next')) {
|
|
145
|
+
appDir = 'app';
|
|
146
|
+
}
|
|
147
|
+
else if (aiData.aiEntryPoints) {
|
|
148
|
+
// Try to extract common directory from entry points
|
|
149
|
+
const entryPoints = scanResult
|
|
150
|
+
.aiAnalysis?.projectContext?.entryPoints || [];
|
|
151
|
+
if (entryPoints.length > 0 && entryPoints[0].startsWith('src/')) {
|
|
152
|
+
appDir = 'src';
|
|
153
|
+
}
|
|
154
|
+
}
|
|
70
155
|
return {
|
|
71
156
|
projectName,
|
|
72
157
|
projectRoot,
|
|
@@ -84,6 +169,7 @@ export function extractVariables(scanResult, customVars = {}) {
|
|
|
84
169
|
stylingVariant,
|
|
85
170
|
appDir,
|
|
86
171
|
...commands,
|
|
172
|
+
...aiData,
|
|
87
173
|
...customVars,
|
|
88
174
|
};
|
|
89
175
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/generator/templates.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/generator/templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,20 @@
|
|
|
3
3
|
## Stack
|
|
4
4
|
{{framework}}{{#if frameworkVersion}} {{frameworkVersion}}{{/if}}{{#if frameworkVariant}} ({{frameworkVariant}}){{/if}}, TypeScript, {{styling || css}}{{#if unitTest}}, {{unitTest}}{{/if}}{{#if e2eTest}}, {{e2eTest}}{{/if}}
|
|
5
5
|
|
|
6
|
+
{{#if aiEntryPoints}}## Entry Points
|
|
7
|
+
{{aiEntryPoints}}
|
|
8
|
+
|
|
9
|
+
{{/if}}
|
|
6
10
|
## Commands
|
|
11
|
+
{{#if hasAiAnalysis}}
|
|
12
|
+
| Action | Command |
|
|
13
|
+
|--------|---------|
|
|
14
|
+
| Dev | `{{devCommand}}` |
|
|
15
|
+
| Build | `{{buildCommand}}` |
|
|
16
|
+
| Test | `{{testCommand}}` |
|
|
17
|
+
| Lint | `{{lintCommand}}` |
|
|
18
|
+
| Typecheck | `{{typecheckCommand}}` |
|
|
19
|
+
{{else}}
|
|
7
20
|
All commands run from `{{appDir}}/` directory:
|
|
8
21
|
|
|
9
22
|
| Action | Command |
|
|
@@ -16,19 +29,20 @@ All commands run from `{{appDir}}/` directory:
|
|
|
16
29
|
| Typecheck | `cd {{appDir}} && {{typecheckCommand}}` |
|
|
17
30
|
{{#if unitTest}}| Test | `cd {{appDir}} && {{testCommand}}` |
|
|
18
31
|
| Test watch | `cd {{appDir}} && {{testCommand}} -- --watch` |{{/if}}
|
|
32
|
+
{{/if}}
|
|
19
33
|
|
|
20
34
|
## Validation (run before commit)
|
|
21
35
|
```bash
|
|
22
|
-
|
|
36
|
+
{{lintCommand}} && {{typecheckCommand}}{{#if unitTest}} && {{testCommand}}{{/if}} && {{buildCommand}}
|
|
23
37
|
```
|
|
24
38
|
|
|
25
|
-
##
|
|
26
|
-
```bash
|
|
27
|
-
cd {{appDir}} && {{packageManager}} audit # Check vulnerable dependencies
|
|
28
|
-
```
|
|
29
|
-
Then review changes against @.ralph/guides/SECURITY.md checklist.
|
|
30
|
-
Use `mcp__supabase__get_advisors` with type "security" to check RLS policies.
|
|
39
|
+
{{#if aiKeyDirectories}}## Project Structure
|
|
31
40
|
|
|
41
|
+
| Directory | Purpose |
|
|
42
|
+
|-----------|---------|
|
|
43
|
+
{{aiKeyDirectories}}
|
|
44
|
+
|
|
45
|
+
{{else}}
|
|
32
46
|
## Patterns
|
|
33
47
|
- Pages: `{{appDir}}/app/` - Next.js App Router
|
|
34
48
|
- Components: `{{appDir}}/components/` - see ui/, ai-elements/, survey-editor/
|
|
@@ -36,27 +50,30 @@ Use `mcp__supabase__get_advisors` with type "security" to check RLS policies.
|
|
|
36
50
|
- Store: `{{appDir}}/store/` - State management
|
|
37
51
|
- Server Actions: `{{appDir}}/app/actions.ts` and `{{appDir}}/app/actions/`
|
|
38
52
|
- Libs: `{{appDir}}/lib/` - utilities and integrations
|
|
53
|
+
{{/if}}
|
|
54
|
+
|
|
55
|
+
{{#if aiImplementationGuidelines}}## Implementation Guidelines
|
|
56
|
+
{{aiImplementationGuidelines}}
|
|
39
57
|
|
|
58
|
+
{{/if}}
|
|
40
59
|
## Search Tools
|
|
41
60
|
- **Codebase search**: Use `mgrep "query"` (preferred over Grep/Glob)
|
|
42
61
|
- **Documentation lookup**: Use Context7 MCP for library/framework docs
|
|
43
62
|
- **Web search**: Use `mgrep --web "query"` for general web lookups
|
|
44
63
|
|
|
45
64
|
## Code Rules
|
|
46
|
-
-
|
|
65
|
+
{{#if aiNamingConventions}}- Naming: {{aiNamingConventions}}
|
|
66
|
+
{{/if}}- Explicit return types on functions
|
|
47
67
|
- No `any` - use `unknown` if truly unknown
|
|
48
68
|
- Early returns over nested conditionals
|
|
49
69
|
- Named exports, not default exports
|
|
50
70
|
- Path alias `@/` maps to `{{appDir}}/` root
|
|
51
|
-
- Follow patterns in existing
|
|
71
|
+
- Follow patterns in existing code
|
|
52
72
|
- 2-space indentation, single quotes
|
|
53
|
-
- PascalCase for components, `use` prefix for hooks
|
|
54
|
-
- kebab-case for folder names (e.g., `survey-editor`)
|
|
55
73
|
|
|
56
74
|
{{#if unitTest}}## Testing
|
|
57
75
|
- Framework: {{unitTest}}{{#if unitTestVersion}} {{unitTestVersion}}{{/if}}
|
|
58
|
-
-
|
|
59
|
-
- Run: `cd {{appDir}} && {{testCommand}}`
|
|
76
|
+
- Run: `{{testCommand}}`
|
|
60
77
|
- Each feature task should include tests
|
|
61
78
|
- Validation fails if tests fail
|
|
62
79
|
{{/if}}
|
|
@@ -71,30 +88,30 @@ Use `mcp__supabase__get_advisors` with type "security" to check RLS policies.
|
|
|
71
88
|
- After changes: validate, commit, push
|
|
72
89
|
|
|
73
90
|
## MCP Servers Available
|
|
74
|
-
- **
|
|
91
|
+
{{#if aiMcpEssential}}- **Essential**: {{aiMcpEssential}}
|
|
92
|
+
{{/if}}{{#if aiMcpRecommended}}- **Recommended**: {{aiMcpRecommended}}
|
|
93
|
+
{{/if}}- **Supabase**: Query DB, manage migrations, generate types
|
|
75
94
|
- **PostHog**: Analytics, feature flags, experiments
|
|
76
95
|
- **Playwright**: Browser automation for E2E testing
|
|
77
96
|
- Navigate: `browser_navigate`, `browser_snapshot`
|
|
78
97
|
- Interact: `browser_click`, `browser_type`, `browser_fill_form`
|
|
79
98
|
- Verify: `browser_wait_for`, `browser_console_messages`
|
|
80
99
|
- Debug: `browser_take_screenshot`
|
|
81
|
-
- **Codex CLI** (shell command, not MCP): PR review
|
|
82
|
-
- Command: `echo "prompt" | codex exec --full-auto -`
|
|
83
|
-
- For reviews: `codex review --base main` (interactive mode)
|
|
84
|
-
- Location: `/opt/homebrew/bin/codex`
|
|
85
|
-
- Use for: code review, PR feedback before merge
|
|
86
100
|
- **Context7**: Documentation lookup for libraries/frameworks
|
|
87
101
|
|
|
102
|
+
{{#if aiMissedTechnologies}}## May Also Use
|
|
103
|
+
{{aiMissedTechnologies}}
|
|
104
|
+
|
|
105
|
+
{{/if}}
|
|
88
106
|
## Quick Triggers
|
|
89
107
|
| Keywords | Action |
|
|
90
108
|
|----------|--------|
|
|
91
109
|
| type error, ts | Run typecheck |
|
|
92
|
-
| lint, format | Run lint --fix
|
|
110
|
+
| lint, format | Run lint --fix |
|
|
93
111
|
| deploy, build | Run full build |
|
|
94
|
-
| error, debug | Check
|
|
112
|
+
| error, debug | Check logs or console |
|
|
95
113
|
| database, table | Use Supabase MCP |
|
|
96
114
|
| e2e, browser test | Use Playwright MCP |
|
|
97
115
|
|
|
98
116
|
## Detailed Docs
|
|
99
|
-
- Architecture: `{{appDir}}/.claude/CLAUDE.md` - comprehensive codebase details
|
|
100
117
|
- Frontend: `.ralph/guides/FRONTEND.md` - design patterns, component usage, quality checklist
|
package/package.json
CHANGED
package/src/ai/enhancer.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
import { generateText, stepCountIs } from 'ai';
|
|
7
7
|
import type { ScanResult, DetectedStack, DetectionResult } from '../scanner/types.js';
|
|
8
|
-
import { getModel, type AIProvider, hasApiKey, getApiKeyEnvVar } from './providers.js';
|
|
8
|
+
import { getModel, type AIProvider, hasApiKey, getApiKeyEnvVar, isReasoningModel } from './providers.js';
|
|
9
9
|
import { SYSTEM_PROMPT, SYSTEM_PROMPT_AGENTIC, createAnalysisPrompt } from './prompts.js';
|
|
10
10
|
import { createExplorationTools } from './tools.js';
|
|
11
11
|
import { logger } from '../utils/logger.js';
|
|
@@ -84,7 +84,14 @@ export interface EnhancerOptions {
|
|
|
84
84
|
/**
|
|
85
85
|
* Parse AI response JSON safely
|
|
86
86
|
*/
|
|
87
|
-
function parseAIResponse(text: string): AIAnalysisResult | null {
|
|
87
|
+
function parseAIResponse(text: string, verbose: boolean = false): AIAnalysisResult | null {
|
|
88
|
+
if (!text || text.trim() === '') {
|
|
89
|
+
if (verbose) {
|
|
90
|
+
logger.warn('AI response text is empty');
|
|
91
|
+
}
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
|
|
88
95
|
try {
|
|
89
96
|
// Try to extract JSON from the response
|
|
90
97
|
// The AI might wrap it in markdown code blocks
|
|
@@ -96,15 +103,33 @@ function parseAIResponse(text: string): AIAnalysisResult | null {
|
|
|
96
103
|
jsonText = jsonMatch[1];
|
|
97
104
|
}
|
|
98
105
|
|
|
99
|
-
// Try to find JSON object
|
|
106
|
+
// Try to find JSON object - use greedy match for the outermost braces
|
|
107
|
+
// This handles cases where there's text before/after the JSON
|
|
100
108
|
const objectMatch = jsonText.match(/\{[\s\S]*\}/);
|
|
101
109
|
if (objectMatch) {
|
|
102
110
|
jsonText = objectMatch[0];
|
|
103
111
|
}
|
|
104
112
|
|
|
105
|
-
|
|
113
|
+
// Try to parse JSON
|
|
114
|
+
const result = JSON.parse(jsonText) as AIAnalysisResult;
|
|
115
|
+
|
|
116
|
+
// Validate that we got the expected structure
|
|
117
|
+
if (!result || typeof result !== 'object') {
|
|
118
|
+
if (verbose) {
|
|
119
|
+
logger.warn('AI response parsed but is not an object');
|
|
120
|
+
}
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
return result;
|
|
106
125
|
} catch (error) {
|
|
107
|
-
|
|
126
|
+
if (verbose) {
|
|
127
|
+
logger.warn(`Failed to parse AI response as JSON: ${error instanceof Error ? error.message : String(error)}`);
|
|
128
|
+
// Log first 500 chars of response for debugging
|
|
129
|
+
logger.warn(`Response preview: ${text.substring(0, 500)}...`);
|
|
130
|
+
} else {
|
|
131
|
+
logger.warn('Failed to parse AI response as JSON');
|
|
132
|
+
}
|
|
108
133
|
return null;
|
|
109
134
|
}
|
|
110
135
|
}
|
|
@@ -199,10 +224,10 @@ export class AIEnhancer {
|
|
|
199
224
|
|
|
200
225
|
if (this.agentic) {
|
|
201
226
|
// Agentic mode: use tools to explore codebase
|
|
202
|
-
analysis = await this.enhanceAgentic(model, scanResult);
|
|
227
|
+
analysis = await this.enhanceAgentic(model, modelId, scanResult);
|
|
203
228
|
} else {
|
|
204
229
|
// Simple mode: just analyze detected stack
|
|
205
|
-
analysis = await this.enhanceSimple(model, scanResult);
|
|
230
|
+
analysis = await this.enhanceSimple(model, modelId, scanResult);
|
|
206
231
|
}
|
|
207
232
|
|
|
208
233
|
if (!analysis) {
|
|
@@ -242,6 +267,7 @@ export class AIEnhancer {
|
|
|
242
267
|
*/
|
|
243
268
|
private async enhanceSimple(
|
|
244
269
|
model: ReturnType<typeof getModel>['model'],
|
|
270
|
+
modelId: string,
|
|
245
271
|
scanResult: ScanResult
|
|
246
272
|
): Promise<AIAnalysisResult | null> {
|
|
247
273
|
const prompt = createAnalysisPrompt(scanResult);
|
|
@@ -251,7 +277,8 @@ export class AIEnhancer {
|
|
|
251
277
|
system: SYSTEM_PROMPT,
|
|
252
278
|
prompt,
|
|
253
279
|
maxOutputTokens: 2000,
|
|
254
|
-
temperature
|
|
280
|
+
// Reasoning models don't support temperature
|
|
281
|
+
...(isReasoningModel(modelId) ? {} : { temperature: 0.3 }),
|
|
255
282
|
});
|
|
256
283
|
|
|
257
284
|
return parseAIResponse(text);
|
|
@@ -262,6 +289,7 @@ export class AIEnhancer {
|
|
|
262
289
|
*/
|
|
263
290
|
private async enhanceAgentic(
|
|
264
291
|
model: ReturnType<typeof getModel>['model'],
|
|
292
|
+
modelId: string,
|
|
265
293
|
scanResult: ScanResult
|
|
266
294
|
): Promise<AIAnalysisResult | null> {
|
|
267
295
|
const tools = createExplorationTools(scanResult.projectRoot);
|
|
@@ -298,17 +326,45 @@ When done exploring, output your final analysis as valid JSON matching this stru
|
|
|
298
326
|
|
|
299
327
|
// Use agentic loop - AI will call tools until it has enough info
|
|
300
328
|
// stopWhen: stepCountIs(10) allows up to 10 tool-calling steps
|
|
301
|
-
const
|
|
329
|
+
const result = await generateText({
|
|
302
330
|
model,
|
|
303
331
|
system: SYSTEM_PROMPT_AGENTIC,
|
|
304
332
|
prompt,
|
|
305
333
|
tools,
|
|
306
334
|
stopWhen: stepCountIs(10),
|
|
307
335
|
maxOutputTokens: 4000,
|
|
308
|
-
temperature
|
|
336
|
+
// Reasoning models don't support temperature
|
|
337
|
+
...(isReasoningModel(modelId) ? {} : { temperature: 0.3 }),
|
|
309
338
|
});
|
|
310
339
|
|
|
311
|
-
|
|
340
|
+
// Try to get text from the result
|
|
341
|
+
let textToParse = result.text;
|
|
342
|
+
|
|
343
|
+
// If text is empty, try to extract from steps
|
|
344
|
+
if (!textToParse || textToParse.trim() === '') {
|
|
345
|
+
if (this.verbose) {
|
|
346
|
+
logger.info(`No direct text output, checking ${result.steps?.length || 0} steps...`);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
// Look through steps for text content (from last to first)
|
|
350
|
+
const steps = result.steps || [];
|
|
351
|
+
for (let i = steps.length - 1; i >= 0; i--) {
|
|
352
|
+
const step = steps[i];
|
|
353
|
+
if (step.text && step.text.trim() !== '') {
|
|
354
|
+
textToParse = step.text;
|
|
355
|
+
if (this.verbose) {
|
|
356
|
+
logger.info(`Found text in step ${i + 1}`);
|
|
357
|
+
}
|
|
358
|
+
break;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
if (this.verbose && (!textToParse || textToParse.trim() === '')) {
|
|
364
|
+
logger.warn('No text output found in response or steps');
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
return parseAIResponse(textToParse, this.verbose);
|
|
312
368
|
}
|
|
313
369
|
}
|
|
314
370
|
|
package/src/ai/providers.ts
CHANGED
|
@@ -166,3 +166,21 @@ export function getAvailableProvider(): AIProvider | null {
|
|
|
166
166
|
export function getApiKeyEnvVar(provider: AIProvider): string {
|
|
167
167
|
return API_KEY_ENV_VARS[provider];
|
|
168
168
|
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Models that don't support temperature parameter (reasoning models)
|
|
172
|
+
*/
|
|
173
|
+
const REASONING_MODELS = [
|
|
174
|
+
// OpenAI reasoning models
|
|
175
|
+
'o1', 'o1-mini', 'o1-preview',
|
|
176
|
+
'o3', 'o3-mini',
|
|
177
|
+
'gpt-5', 'gpt-5.1', 'gpt-5-mini',
|
|
178
|
+
'gpt-5.1-codex', 'gpt-5.1-codex-max',
|
|
179
|
+
];
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Check if a model is a reasoning model that doesn't support temperature
|
|
183
|
+
*/
|
|
184
|
+
export function isReasoningModel(modelId: string): boolean {
|
|
185
|
+
return REASONING_MODELS.some(m => modelId.startsWith(m));
|
|
186
|
+
}
|
|
@@ -39,7 +39,7 @@ export interface TemplateVariables {
|
|
|
39
39
|
stylingVersion: string;
|
|
40
40
|
stylingVariant: string;
|
|
41
41
|
|
|
42
|
-
// Commands (derived from package manager)
|
|
42
|
+
// Commands (derived from package manager or AI detected)
|
|
43
43
|
devCommand: string;
|
|
44
44
|
buildCommand: string;
|
|
45
45
|
testCommand: string;
|
|
@@ -50,6 +50,16 @@ export interface TemplateVariables {
|
|
|
50
50
|
// Paths
|
|
51
51
|
appDir: string;
|
|
52
52
|
|
|
53
|
+
// AI Analysis (optional - populated when AI enhancement is used)
|
|
54
|
+
aiEntryPoints: string;
|
|
55
|
+
aiKeyDirectories: string;
|
|
56
|
+
aiNamingConventions: string;
|
|
57
|
+
aiImplementationGuidelines: string;
|
|
58
|
+
aiMcpEssential: string;
|
|
59
|
+
aiMcpRecommended: string;
|
|
60
|
+
aiMissedTechnologies: string;
|
|
61
|
+
hasAiAnalysis: string;
|
|
62
|
+
|
|
53
63
|
// Custom variables
|
|
54
64
|
[key: string]: string;
|
|
55
65
|
}
|
|
@@ -93,6 +103,115 @@ function deriveCommands(packageManager: string): Pick<
|
|
|
93
103
|
};
|
|
94
104
|
}
|
|
95
105
|
|
|
106
|
+
/**
|
|
107
|
+
* AI analysis template variables
|
|
108
|
+
*/
|
|
109
|
+
type AiTemplateVars = Pick<TemplateVariables,
|
|
110
|
+
'hasAiAnalysis' | 'aiEntryPoints' | 'aiKeyDirectories' | 'aiNamingConventions' |
|
|
111
|
+
'aiImplementationGuidelines' | 'aiMcpEssential' | 'aiMcpRecommended' | 'aiMissedTechnologies'
|
|
112
|
+
>;
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Format AI analysis data for templates
|
|
116
|
+
*/
|
|
117
|
+
function formatAiAnalysisForTemplates(scanResult: ScanResult): AiTemplateVars {
|
|
118
|
+
// Check if this is an EnhancedScanResult with aiAnalysis
|
|
119
|
+
const aiAnalysis = (scanResult as { aiAnalysis?: {
|
|
120
|
+
projectContext?: {
|
|
121
|
+
entryPoints?: string[];
|
|
122
|
+
keyDirectories?: Record<string, string>;
|
|
123
|
+
namingConventions?: string;
|
|
124
|
+
};
|
|
125
|
+
commands?: Record<string, string>;
|
|
126
|
+
implementationGuidelines?: string[];
|
|
127
|
+
mcpServers?: {
|
|
128
|
+
essential?: string[];
|
|
129
|
+
recommended?: string[];
|
|
130
|
+
};
|
|
131
|
+
possibleMissedTechnologies?: string[];
|
|
132
|
+
} }).aiAnalysis;
|
|
133
|
+
|
|
134
|
+
if (!aiAnalysis) {
|
|
135
|
+
return {
|
|
136
|
+
hasAiAnalysis: '',
|
|
137
|
+
aiEntryPoints: '',
|
|
138
|
+
aiKeyDirectories: '',
|
|
139
|
+
aiNamingConventions: '',
|
|
140
|
+
aiImplementationGuidelines: '',
|
|
141
|
+
aiMcpEssential: '',
|
|
142
|
+
aiMcpRecommended: '',
|
|
143
|
+
aiMissedTechnologies: '',
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Format entry points as bullet list
|
|
148
|
+
const entryPoints = aiAnalysis.projectContext?.entryPoints || [];
|
|
149
|
+
const aiEntryPoints = entryPoints.length > 0
|
|
150
|
+
? entryPoints.map(e => `- \`${e}\``).join('\n')
|
|
151
|
+
: '';
|
|
152
|
+
|
|
153
|
+
// Format key directories as table rows
|
|
154
|
+
const keyDirs = aiAnalysis.projectContext?.keyDirectories || {};
|
|
155
|
+
const aiKeyDirectories = Object.keys(keyDirs).length > 0
|
|
156
|
+
? Object.entries(keyDirs).map(([dir, purpose]) => `| \`${dir}/\` | ${purpose} |`).join('\n')
|
|
157
|
+
: '';
|
|
158
|
+
|
|
159
|
+
// Naming conventions
|
|
160
|
+
const aiNamingConventions = aiAnalysis.projectContext?.namingConventions || '';
|
|
161
|
+
|
|
162
|
+
// Implementation guidelines as bullet list
|
|
163
|
+
const guidelines = aiAnalysis.implementationGuidelines || [];
|
|
164
|
+
const aiImplementationGuidelines = guidelines.length > 0
|
|
165
|
+
? guidelines.map(g => `- ${g}`).join('\n')
|
|
166
|
+
: '';
|
|
167
|
+
|
|
168
|
+
// MCP servers
|
|
169
|
+
const aiMcpEssential = (aiAnalysis.mcpServers?.essential || []).join(', ');
|
|
170
|
+
const aiMcpRecommended = (aiAnalysis.mcpServers?.recommended || []).join(', ');
|
|
171
|
+
|
|
172
|
+
// Missed technologies
|
|
173
|
+
const aiMissedTechnologies = (aiAnalysis.possibleMissedTechnologies || []).join(', ');
|
|
174
|
+
|
|
175
|
+
return {
|
|
176
|
+
hasAiAnalysis: 'true',
|
|
177
|
+
aiEntryPoints,
|
|
178
|
+
aiKeyDirectories,
|
|
179
|
+
aiNamingConventions,
|
|
180
|
+
aiImplementationGuidelines,
|
|
181
|
+
aiMcpEssential,
|
|
182
|
+
aiMcpRecommended,
|
|
183
|
+
aiMissedTechnologies,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Extract AI-detected commands or fall back to derived commands
|
|
189
|
+
*/
|
|
190
|
+
function getCommands(
|
|
191
|
+
scanResult: ScanResult,
|
|
192
|
+
packageManager: string
|
|
193
|
+
): Pick<TemplateVariables, 'devCommand' | 'buildCommand' | 'testCommand' | 'lintCommand' | 'typecheckCommand' | 'formatCommand'> {
|
|
194
|
+
// Check for AI-detected commands
|
|
195
|
+
const aiCommands = (scanResult as { aiAnalysis?: { commands?: Record<string, string> } }).aiAnalysis?.commands;
|
|
196
|
+
|
|
197
|
+
// Derive default commands from package manager
|
|
198
|
+
const derived = deriveCommands(packageManager);
|
|
199
|
+
|
|
200
|
+
if (!aiCommands) {
|
|
201
|
+
return derived;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Use AI-detected commands where available, fall back to derived
|
|
205
|
+
return {
|
|
206
|
+
devCommand: aiCommands.dev || derived.devCommand,
|
|
207
|
+
buildCommand: aiCommands.build || derived.buildCommand,
|
|
208
|
+
testCommand: aiCommands.test || derived.testCommand,
|
|
209
|
+
lintCommand: aiCommands.lint || derived.lintCommand,
|
|
210
|
+
typecheckCommand: aiCommands.typecheck || derived.typecheckCommand,
|
|
211
|
+
formatCommand: aiCommands.format || derived.formatCommand,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
|
|
96
215
|
/**
|
|
97
216
|
* Extract template variables from scan result
|
|
98
217
|
*/
|
|
@@ -122,11 +241,24 @@ export function extractVariables(scanResult: ScanResult, customVars: Record<stri
|
|
|
122
241
|
const stylingVersion = stack.styling?.version || DEFAULT_VARIABLES.stylingVersion!;
|
|
123
242
|
const stylingVariant = stack.styling?.variant || DEFAULT_VARIABLES.stylingVariant!;
|
|
124
243
|
|
|
125
|
-
//
|
|
126
|
-
const commands =
|
|
127
|
-
|
|
128
|
-
//
|
|
129
|
-
const
|
|
244
|
+
// Get commands (AI-detected or derived)
|
|
245
|
+
const commands = getCommands(scanResult, packageManager);
|
|
246
|
+
|
|
247
|
+
// Extract AI analysis data
|
|
248
|
+
const aiData = formatAiAnalysisForTemplates(scanResult);
|
|
249
|
+
|
|
250
|
+
// Determine app directory - use AI entry points if available
|
|
251
|
+
let appDir = 'src';
|
|
252
|
+
if (frameworkVariant === 'app-router' || framework.toLowerCase().includes('next')) {
|
|
253
|
+
appDir = 'app';
|
|
254
|
+
} else if (aiData.aiEntryPoints) {
|
|
255
|
+
// Try to extract common directory from entry points
|
|
256
|
+
const entryPoints = (scanResult as { aiAnalysis?: { projectContext?: { entryPoints?: string[] } } })
|
|
257
|
+
.aiAnalysis?.projectContext?.entryPoints || [];
|
|
258
|
+
if (entryPoints.length > 0 && entryPoints[0].startsWith('src/')) {
|
|
259
|
+
appDir = 'src';
|
|
260
|
+
}
|
|
261
|
+
}
|
|
130
262
|
|
|
131
263
|
return {
|
|
132
264
|
projectName,
|
|
@@ -145,6 +277,7 @@ export function extractVariables(scanResult: ScanResult, customVars: Record<stri
|
|
|
145
277
|
stylingVariant,
|
|
146
278
|
appDir,
|
|
147
279
|
...commands,
|
|
280
|
+
...aiData,
|
|
148
281
|
...customVars,
|
|
149
282
|
};
|
|
150
283
|
}
|
|
@@ -3,7 +3,20 @@
|
|
|
3
3
|
## Stack
|
|
4
4
|
{{framework}}{{#if frameworkVersion}} {{frameworkVersion}}{{/if}}{{#if frameworkVariant}} ({{frameworkVariant}}){{/if}}, TypeScript, {{styling || css}}{{#if unitTest}}, {{unitTest}}{{/if}}{{#if e2eTest}}, {{e2eTest}}{{/if}}
|
|
5
5
|
|
|
6
|
+
{{#if aiEntryPoints}}## Entry Points
|
|
7
|
+
{{aiEntryPoints}}
|
|
8
|
+
|
|
9
|
+
{{/if}}
|
|
6
10
|
## Commands
|
|
11
|
+
{{#if hasAiAnalysis}}
|
|
12
|
+
| Action | Command |
|
|
13
|
+
|--------|---------|
|
|
14
|
+
| Dev | `{{devCommand}}` |
|
|
15
|
+
| Build | `{{buildCommand}}` |
|
|
16
|
+
| Test | `{{testCommand}}` |
|
|
17
|
+
| Lint | `{{lintCommand}}` |
|
|
18
|
+
| Typecheck | `{{typecheckCommand}}` |
|
|
19
|
+
{{else}}
|
|
7
20
|
All commands run from `{{appDir}}/` directory:
|
|
8
21
|
|
|
9
22
|
| Action | Command |
|
|
@@ -16,19 +29,20 @@ All commands run from `{{appDir}}/` directory:
|
|
|
16
29
|
| Typecheck | `cd {{appDir}} && {{typecheckCommand}}` |
|
|
17
30
|
{{#if unitTest}}| Test | `cd {{appDir}} && {{testCommand}}` |
|
|
18
31
|
| Test watch | `cd {{appDir}} && {{testCommand}} -- --watch` |{{/if}}
|
|
32
|
+
{{/if}}
|
|
19
33
|
|
|
20
34
|
## Validation (run before commit)
|
|
21
35
|
```bash
|
|
22
|
-
|
|
36
|
+
{{lintCommand}} && {{typecheckCommand}}{{#if unitTest}} && {{testCommand}}{{/if}} && {{buildCommand}}
|
|
23
37
|
```
|
|
24
38
|
|
|
25
|
-
##
|
|
26
|
-
```bash
|
|
27
|
-
cd {{appDir}} && {{packageManager}} audit # Check vulnerable dependencies
|
|
28
|
-
```
|
|
29
|
-
Then review changes against @.ralph/guides/SECURITY.md checklist.
|
|
30
|
-
Use `mcp__supabase__get_advisors` with type "security" to check RLS policies.
|
|
39
|
+
{{#if aiKeyDirectories}}## Project Structure
|
|
31
40
|
|
|
41
|
+
| Directory | Purpose |
|
|
42
|
+
|-----------|---------|
|
|
43
|
+
{{aiKeyDirectories}}
|
|
44
|
+
|
|
45
|
+
{{else}}
|
|
32
46
|
## Patterns
|
|
33
47
|
- Pages: `{{appDir}}/app/` - Next.js App Router
|
|
34
48
|
- Components: `{{appDir}}/components/` - see ui/, ai-elements/, survey-editor/
|
|
@@ -36,27 +50,30 @@ Use `mcp__supabase__get_advisors` with type "security" to check RLS policies.
|
|
|
36
50
|
- Store: `{{appDir}}/store/` - State management
|
|
37
51
|
- Server Actions: `{{appDir}}/app/actions.ts` and `{{appDir}}/app/actions/`
|
|
38
52
|
- Libs: `{{appDir}}/lib/` - utilities and integrations
|
|
53
|
+
{{/if}}
|
|
54
|
+
|
|
55
|
+
{{#if aiImplementationGuidelines}}## Implementation Guidelines
|
|
56
|
+
{{aiImplementationGuidelines}}
|
|
39
57
|
|
|
58
|
+
{{/if}}
|
|
40
59
|
## Search Tools
|
|
41
60
|
- **Codebase search**: Use `mgrep "query"` (preferred over Grep/Glob)
|
|
42
61
|
- **Documentation lookup**: Use Context7 MCP for library/framework docs
|
|
43
62
|
- **Web search**: Use `mgrep --web "query"` for general web lookups
|
|
44
63
|
|
|
45
64
|
## Code Rules
|
|
46
|
-
-
|
|
65
|
+
{{#if aiNamingConventions}}- Naming: {{aiNamingConventions}}
|
|
66
|
+
{{/if}}- Explicit return types on functions
|
|
47
67
|
- No `any` - use `unknown` if truly unknown
|
|
48
68
|
- Early returns over nested conditionals
|
|
49
69
|
- Named exports, not default exports
|
|
50
70
|
- Path alias `@/` maps to `{{appDir}}/` root
|
|
51
|
-
- Follow patterns in existing
|
|
71
|
+
- Follow patterns in existing code
|
|
52
72
|
- 2-space indentation, single quotes
|
|
53
|
-
- PascalCase for components, `use` prefix for hooks
|
|
54
|
-
- kebab-case for folder names (e.g., `survey-editor`)
|
|
55
73
|
|
|
56
74
|
{{#if unitTest}}## Testing
|
|
57
75
|
- Framework: {{unitTest}}{{#if unitTestVersion}} {{unitTestVersion}}{{/if}}
|
|
58
|
-
-
|
|
59
|
-
- Run: `cd {{appDir}} && {{testCommand}}`
|
|
76
|
+
- Run: `{{testCommand}}`
|
|
60
77
|
- Each feature task should include tests
|
|
61
78
|
- Validation fails if tests fail
|
|
62
79
|
{{/if}}
|
|
@@ -71,30 +88,30 @@ Use `mcp__supabase__get_advisors` with type "security" to check RLS policies.
|
|
|
71
88
|
- After changes: validate, commit, push
|
|
72
89
|
|
|
73
90
|
## MCP Servers Available
|
|
74
|
-
- **
|
|
91
|
+
{{#if aiMcpEssential}}- **Essential**: {{aiMcpEssential}}
|
|
92
|
+
{{/if}}{{#if aiMcpRecommended}}- **Recommended**: {{aiMcpRecommended}}
|
|
93
|
+
{{/if}}- **Supabase**: Query DB, manage migrations, generate types
|
|
75
94
|
- **PostHog**: Analytics, feature flags, experiments
|
|
76
95
|
- **Playwright**: Browser automation for E2E testing
|
|
77
96
|
- Navigate: `browser_navigate`, `browser_snapshot`
|
|
78
97
|
- Interact: `browser_click`, `browser_type`, `browser_fill_form`
|
|
79
98
|
- Verify: `browser_wait_for`, `browser_console_messages`
|
|
80
99
|
- Debug: `browser_take_screenshot`
|
|
81
|
-
- **Codex CLI** (shell command, not MCP): PR review
|
|
82
|
-
- Command: `echo "prompt" | codex exec --full-auto -`
|
|
83
|
-
- For reviews: `codex review --base main` (interactive mode)
|
|
84
|
-
- Location: `/opt/homebrew/bin/codex`
|
|
85
|
-
- Use for: code review, PR feedback before merge
|
|
86
100
|
- **Context7**: Documentation lookup for libraries/frameworks
|
|
87
101
|
|
|
102
|
+
{{#if aiMissedTechnologies}}## May Also Use
|
|
103
|
+
{{aiMissedTechnologies}}
|
|
104
|
+
|
|
105
|
+
{{/if}}
|
|
88
106
|
## Quick Triggers
|
|
89
107
|
| Keywords | Action |
|
|
90
108
|
|----------|--------|
|
|
91
109
|
| type error, ts | Run typecheck |
|
|
92
|
-
| lint, format | Run lint --fix
|
|
110
|
+
| lint, format | Run lint --fix |
|
|
93
111
|
| deploy, build | Run full build |
|
|
94
|
-
| error, debug | Check
|
|
112
|
+
| error, debug | Check logs or console |
|
|
95
113
|
| database, table | Use Supabase MCP |
|
|
96
114
|
| e2e, browser test | Use Playwright MCP |
|
|
97
115
|
|
|
98
116
|
## Detailed Docs
|
|
99
|
-
- Architecture: `{{appDir}}/.claude/CLAUDE.md` - comprehensive codebase details
|
|
100
117
|
- Frontend: `.ralph/guides/FRONTEND.md` - design patterns, component usage, quality checklist
|