@auto-engineer/react-gen 1.136.0 → 1.138.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/agents/create-codegen-agent.d.ts +5 -0
- package/dist/src/agents/create-codegen-agent.d.ts.map +1 -0
- package/dist/src/agents/create-codegen-agent.js +30 -0
- package/dist/src/agents/create-codegen-agent.js.map +1 -0
- package/dist/src/agents/create-constants-agent.d.ts.map +1 -1
- package/dist/src/agents/create-constants-agent.js +25 -8
- package/dist/src/agents/create-constants-agent.js.map +1 -1
- package/dist/src/agents/create-landing-page-agent.d.ts.map +1 -1
- package/dist/src/agents/create-landing-page-agent.js +3 -4
- package/dist/src/agents/create-landing-page-agent.js.map +1 -1
- package/dist/src/agents/create-narrative-agent.d.ts.map +1 -1
- package/dist/src/agents/create-narrative-agent.js +4 -5
- package/dist/src/agents/create-narrative-agent.js.map +1 -1
- package/dist/src/agents/create-pipeline.d.ts +1 -0
- package/dist/src/agents/create-pipeline.d.ts.map +1 -1
- package/dist/src/agents/create-pipeline.js +4 -2
- package/dist/src/agents/create-pipeline.js.map +1 -1
- package/dist/src/agents/create-router-agent.d.ts.map +1 -1
- package/dist/src/agents/create-router-agent.js +3 -4
- package/dist/src/agents/create-router-agent.js.map +1 -1
- package/dist/src/agents/create-theme-agent.d.ts.map +1 -1
- package/dist/src/agents/create-theme-agent.js +3 -4
- package/dist/src/agents/create-theme-agent.js.map +1 -1
- package/dist/src/agents/create-validation-agent.d.ts.map +1 -1
- package/dist/src/agents/create-validation-agent.js +3 -4
- package/dist/src/agents/create-validation-agent.js.map +1 -1
- package/dist/src/commands/generate-react-app.d.ts.map +1 -1
- package/dist/src/commands/generate-react-app.js +2 -1
- package/dist/src/commands/generate-react-app.js.map +1 -1
- package/dist/src/prompts/build-narrative-context.d.ts +1 -1
- package/dist/src/prompts/build-narrative-context.d.ts.map +1 -1
- package/dist/src/prompts/build-narrative-context.js +25 -6
- package/dist/src/prompts/build-narrative-context.js.map +1 -1
- package/dist/src/prompts/landing-page-system.d.ts +1 -1
- package/dist/src/prompts/landing-page-system.d.ts.map +1 -1
- package/dist/src/prompts/landing-page-system.js +11 -5
- package/dist/src/prompts/landing-page-system.js.map +1 -1
- package/dist/src/prompts/narrative-system.d.ts +1 -1
- package/dist/src/prompts/narrative-system.d.ts.map +1 -1
- package/dist/src/prompts/narrative-system.js +39 -16
- package/dist/src/prompts/narrative-system.js.map +1 -1
- package/dist/src/prompts/router-system.d.ts +1 -1
- package/dist/src/prompts/router-system.d.ts.map +1 -1
- package/dist/src/prompts/router-system.js +7 -4
- package/dist/src/prompts/router-system.js.map +1 -1
- package/dist/src/prompts/validation-system.d.ts +1 -1
- package/dist/src/prompts/validation-system.d.ts.map +1 -1
- package/dist/src/prompts/validation-system.js +5 -2
- package/dist/src/prompts/validation-system.js.map +1 -1
- package/dist/src/tools/check-imports.d.ts.map +1 -1
- package/dist/src/tools/check-imports.js +7 -2
- package/dist/src/tools/check-imports.js.map +1 -1
- package/dist/src/tools/list-files.d.ts.map +1 -1
- package/dist/src/tools/list-files.js +2 -0
- package/dist/src/tools/list-files.js.map +1 -1
- package/dist/src/tools/load-skills.d.ts +8 -0
- package/dist/src/tools/load-skills.d.ts.map +1 -0
- package/dist/src/tools/load-skills.js +28 -0
- package/dist/src/tools/load-skills.js.map +1 -0
- package/dist/src/tools/write-file.d.ts.map +1 -1
- package/dist/src/tools/write-file.js +10 -0
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/types.d.ts +19 -19
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +4 -4
- package/dist/src/types.js.map +1 -1
- package/dist/starter/codegen.ts +17 -0
- package/dist/starter/package.json +5 -1
- package/dist/starter/pnpm-lock.yaml +2382 -85
- package/dist/starter/src/App.tsx +1 -1
- package/dist/starter/src/gql/execute.ts +9 -0
- package/dist/starter/src/gql/fragment-masking.ts +82 -0
- package/dist/starter/src/gql/gql.ts +6 -0
- package/dist/starter/src/gql/graphql.ts +37 -0
- package/dist/starter/src/gql/index.ts +2 -0
- package/dist/starter/src/main.tsx +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/starter/codegen.ts +17 -0
- package/starter/package.json +5 -1
- package/starter/pnpm-lock.yaml +2382 -85
- package/starter/src/App.tsx +1 -1
- package/starter/src/gql/execute.ts +9 -0
- package/starter/src/gql/fragment-masking.ts +82 -0
- package/starter/src/gql/gql.ts +6 -0
- package/starter/src/gql/graphql.ts +37 -0
- package/starter/src/gql/index.ts +2 -0
- package/starter/src/main.tsx +1 -1
- package/dist/starter/package-lock.json +0 -7590
- package/starter/package-lock.json +0 -7590
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-codegen-agent.d.ts","sourceRoot":"","sources":["../../../src/agents/create-codegen-agent.ts"],"names":[],"mappings":"AAOA,wBAAsB,UAAU,CAAC,IAAI,EAAE;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA6BpG"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import createDebug from 'debug';
|
|
3
|
+
import { execaCommand } from 'execa';
|
|
4
|
+
import fs from 'fs-extra';
|
|
5
|
+
const debug = createDebug('auto:react-gen:codegen');
|
|
6
|
+
export async function runCodegen(opts) {
|
|
7
|
+
const { graphqlSchema, outputDir } = opts;
|
|
8
|
+
// Write schema to output directory
|
|
9
|
+
const schemaPath = path.join(outputDir, 'schema.graphql');
|
|
10
|
+
await fs.writeFile(schemaPath, graphqlSchema, 'utf-8');
|
|
11
|
+
debug('wrote schema.graphql');
|
|
12
|
+
// Run codegen — hard failure if it fails
|
|
13
|
+
const result = await execaCommand('npx graphql-codegen', {
|
|
14
|
+
cwd: outputDir,
|
|
15
|
+
reject: false,
|
|
16
|
+
});
|
|
17
|
+
if (result.exitCode !== 0) {
|
|
18
|
+
const output = `${result.stdout}\n${result.stderr}`.trim();
|
|
19
|
+
debug('codegen failed: %s', output);
|
|
20
|
+
throw new Error(`GraphQL codegen failed:\n${output}`);
|
|
21
|
+
}
|
|
22
|
+
debug('codegen complete');
|
|
23
|
+
// Verify output was produced
|
|
24
|
+
const gqlOutputPath = path.join(outputDir, 'src', 'gql', 'graphql.ts');
|
|
25
|
+
if (!(await fs.pathExists(gqlOutputPath))) {
|
|
26
|
+
throw new Error('GraphQL codegen did not produce src/gql/graphql.ts');
|
|
27
|
+
}
|
|
28
|
+
return 'GraphQL codegen completed successfully';
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=create-codegen-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-codegen-agent.js","sourceRoot":"","sources":["../../../src/agents/create-codegen-agent.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,WAAW,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AACrC,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,MAAM,KAAK,GAAG,WAAW,CAAC,wBAAwB,CAAC,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAkD;IACjF,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAE1C,mCAAmC;IACnC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IAC1D,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC;IACvD,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAE9B,yCAAyC;IACzC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,qBAAqB,EAAE;QACvD,GAAG,EAAE,SAAS;QACd,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QAC3D,KAAK,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAE1B,6BAA6B;IAC7B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;IACvE,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,wCAAwC,CAAC;AAClD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-constants-agent.d.ts","sourceRoot":"","sources":["../../../src/agents/create-constants-agent.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"create-constants-agent.d.ts","sourceRoot":"","sources":["../../../src/agents/create-constants-agent.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAS,MAAM,aAAa,CAAC;AAqCtD,wBAAsB,YAAY,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BnG"}
|
|
@@ -7,19 +7,27 @@ function toConstName(name) {
|
|
|
7
7
|
.replace(/[^a-zA-Z0-9]+/g, '_')
|
|
8
8
|
.toUpperCase();
|
|
9
9
|
}
|
|
10
|
-
function
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
function isMutation(slice) {
|
|
11
|
+
if (slice.type === 'command')
|
|
12
|
+
return true;
|
|
13
|
+
if (slice.request && slice.request.trimStart().startsWith('mutation'))
|
|
14
|
+
return true;
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
function buildFile(slices, kind) {
|
|
18
|
+
if (slices.length === 0)
|
|
13
19
|
return null;
|
|
14
20
|
const lines = [
|
|
15
|
-
`// Auto-generated GraphQL
|
|
16
|
-
`// DO NOT EDIT — these are
|
|
21
|
+
`// Auto-generated GraphQL ${kind === 'query' ? 'queries' : 'mutations'} from domain model.`,
|
|
22
|
+
`// DO NOT EDIT — these are typed operations generated from the model.`,
|
|
23
|
+
``,
|
|
24
|
+
`import { graphql } from '@/gql';`,
|
|
17
25
|
``,
|
|
18
26
|
];
|
|
19
|
-
for (const slice of
|
|
27
|
+
for (const slice of slices) {
|
|
20
28
|
const constName = toConstName(slice.name);
|
|
21
29
|
lines.push(`/** Slice: "${slice.name}" (${slice.type}) */`);
|
|
22
|
-
lines.push(`export const ${constName} = \`${slice.request}
|
|
30
|
+
lines.push(`export const ${constName} = graphql(\`${slice.request}\`);`);
|
|
23
31
|
lines.push(``);
|
|
24
32
|
}
|
|
25
33
|
return lines.join('\n');
|
|
@@ -30,7 +38,16 @@ export async function runConstants(opts) {
|
|
|
30
38
|
const slug = slugify(narrative.name);
|
|
31
39
|
const dir = path.join(opts.outputDir, 'src', 'features', slug);
|
|
32
40
|
await fs.ensureDir(dir);
|
|
33
|
-
const
|
|
41
|
+
const slicesWithRequests = narrative.slices.filter((s) => s.request && s.type !== 'react');
|
|
42
|
+
const mutations = slicesWithRequests.filter((s) => isMutation(s));
|
|
43
|
+
const queries = slicesWithRequests.filter((s) => !isMutation(s));
|
|
44
|
+
const mutationsContent = buildFile(mutations, 'mutation');
|
|
45
|
+
if (mutationsContent) {
|
|
46
|
+
const fp = path.join(dir, 'mutations.ts');
|
|
47
|
+
await fs.writeFile(fp, mutationsContent, 'utf-8');
|
|
48
|
+
created.push(`src/features/${slug}/mutations.ts`);
|
|
49
|
+
}
|
|
50
|
+
const queriesContent = buildFile(queries, 'query');
|
|
34
51
|
if (queriesContent) {
|
|
35
52
|
const fp = path.join(dir, 'queries.ts');
|
|
36
53
|
await fs.writeFile(fp, queriesContent, 'utf-8');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-constants-agent.js","sourceRoot":"","sources":["../../../src/agents/create-constants-agent.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,UAAU,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,IAAI;SACR,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;SACnC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,WAAW,EAAE,CAAC;AACnB,CAAC;AAED,SAAS,
|
|
1
|
+
{"version":3,"file":"create-constants-agent.js","sourceRoot":"","sources":["../../../src/agents/create-constants-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-landing-page-agent.d.ts","sourceRoot":"","sources":["../../../src/agents/create-landing-page-agent.ts"],"names":[],"mappings":"AACA,OAAO,EAA6B,KAAK,aAAa,EAAqB,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"create-landing-page-agent.d.ts","sourceRoot":"","sources":["../../../src/agents/create-landing-page-agent.ts"],"names":[],"mappings":"AACA,OAAO,EAA6B,KAAK,aAAa,EAAqB,MAAM,IAAI,CAAC;AAOtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AA8B/C,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BpH"}
|
|
@@ -4,8 +4,8 @@ import fs from 'fs-extra';
|
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import { LANDING_PAGE_SYSTEM_PROMPT } from '../prompts/landing-page-system.js';
|
|
6
6
|
import { createExitLoopTool } from '../tools/exit-loop.js';
|
|
7
|
+
import { createLoadSkillsTool } from '../tools/load-skills.js';
|
|
7
8
|
import { createReadFileTool } from '../tools/read-file.js';
|
|
8
|
-
import { getSkillToolkit } from '../utils/create-skill-tool.js';
|
|
9
9
|
import { slugify } from '../utils/slugify.js';
|
|
10
10
|
const SKILL_NAMES = [
|
|
11
11
|
'design-taste-frontend',
|
|
@@ -33,7 +33,6 @@ function createWriteLandingPageTool(outputDir) {
|
|
|
33
33
|
});
|
|
34
34
|
}
|
|
35
35
|
export async function runLandingPageAgent(model, llm, outputDir) {
|
|
36
|
-
const { skill } = await getSkillToolkit();
|
|
37
36
|
const narrativeDescriptions = model.narratives
|
|
38
37
|
.map((n) => {
|
|
39
38
|
const slug = slugify(n.name);
|
|
@@ -48,9 +47,9 @@ ${narrativeDescriptions}`;
|
|
|
48
47
|
const { text } = await generateText({
|
|
49
48
|
model: llm,
|
|
50
49
|
system: `${LANDING_PAGE_SYSTEM_PROMPT}\n\n---\n\n${domainContext}`,
|
|
51
|
-
prompt: `
|
|
50
|
+
prompt: `Call load_skills once to load all design rules, then write the landing page component. Call exit_loop when done.`,
|
|
52
51
|
tools: {
|
|
53
|
-
|
|
52
|
+
load_skills: createLoadSkillsTool(SKILL_NAMES),
|
|
54
53
|
write_landing_page: createWriteLandingPageTool(outputDir),
|
|
55
54
|
read_file: createReadFileTool(outputDir),
|
|
56
55
|
exit_loop: createExitLoopTool('Call this after you have written the landing page component.'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-landing-page-agent.js","sourceRoot":"","sources":["../../../src/agents/create-landing-page-agent.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAsB,WAAW,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AACtF,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"create-landing-page-agent.js","sourceRoot":"","sources":["../../../src/agents/create-landing-page-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-narrative-agent.d.ts","sourceRoot":"","sources":["../../../src/agents/create-narrative-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,aAAa,EAAe,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"create-narrative-agent.d.ts","sourceRoot":"","sources":["../../../src/agents/create-narrative-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,aAAa,EAAe,MAAM,IAAI,CAAC;AAOhF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAc7C,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmBpH"}
|
|
@@ -2,9 +2,9 @@ import { generateText, hasToolCall, stepCountIs } from 'ai';
|
|
|
2
2
|
import { buildNarrativeContext } from '../prompts/build-narrative-context.js';
|
|
3
3
|
import { NARRATIVE_SYSTEM_PROMPT } from '../prompts/narrative-system.js';
|
|
4
4
|
import { createExitLoopTool } from '../tools/exit-loop.js';
|
|
5
|
+
import { createLoadSkillsTool } from '../tools/load-skills.js';
|
|
5
6
|
import { createReadFileTool } from '../tools/read-file.js';
|
|
6
7
|
import { createWriteFileTool } from '../tools/write-file.js';
|
|
7
|
-
import { getSkillToolkit } from '../utils/create-skill-tool.js';
|
|
8
8
|
const SKILL_NAMES = [
|
|
9
9
|
'design-taste-frontend',
|
|
10
10
|
'full-output-enforcement',
|
|
@@ -17,14 +17,13 @@ const SKILL_NAMES = [
|
|
|
17
17
|
'web-design-guidelines',
|
|
18
18
|
];
|
|
19
19
|
export async function runNarrativeAgent(narrative, llm, outputDir) {
|
|
20
|
-
const context = buildNarrativeContext(narrative);
|
|
21
|
-
const { skill } = await getSkillToolkit();
|
|
20
|
+
const context = buildNarrativeContext(narrative, outputDir);
|
|
22
21
|
const { text } = await generateText({
|
|
23
22
|
model: llm,
|
|
24
23
|
system: `${NARRATIVE_SYSTEM_PROMPT}\n\n---\n\n${context}`,
|
|
25
|
-
prompt: `
|
|
24
|
+
prompt: `Call load_skills once to load all design rules, then generate ALL component files for every slice. Call exit_loop when done.`,
|
|
26
25
|
tools: {
|
|
27
|
-
|
|
26
|
+
load_skills: createLoadSkillsTool(SKILL_NAMES),
|
|
28
27
|
write_file: createWriteFileTool(outputDir),
|
|
29
28
|
read_file: createReadFileTool(outputDir),
|
|
30
29
|
exit_loop: createExitLoopTool('Call this after you have written ALL components for the narrative. Do not exit until every slice has a corresponding component file.'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-narrative-agent.js","sourceRoot":"","sources":["../../../src/agents/create-narrative-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAsB,WAAW,EAAE,MAAM,IAAI,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"create-narrative-agent.js","sourceRoot":"","sources":["../../../src/agents/create-narrative-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAsB,WAAW,EAAE,MAAM,IAAI,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,MAAM,WAAW,GAAG;IAClB,uBAAuB;IACvB,yBAAyB;IACzB,6BAA6B;IAC7B,iBAAiB;IACjB,wBAAwB;IACxB,yBAAyB;IACzB,YAAY;IACZ,cAAc;IACd,uBAAuB;CACxB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAAoB,EAAE,GAAkB,EAAE,SAAiB;IACjG,MAAM,OAAO,GAAG,qBAAqB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAE5D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC;QAClC,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,GAAG,uBAAuB,cAAc,OAAO,EAAE;QACzD,MAAM,EAAE,8HAA8H;QACtI,KAAK,EAAE;YACL,WAAW,EAAE,oBAAoB,CAAC,WAAW,CAAC;YAC9C,UAAU,EAAE,mBAAmB,CAAC,SAAS,CAAC;YAC1C,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC;YACxC,SAAS,EAAE,kBAAkB,CAC3B,sIAAsI,CACvI;SACF;QACD,QAAQ,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;KACtD,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-pipeline.d.ts","sourceRoot":"","sources":["../../../src/agents/create-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAExC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"create-pipeline.d.ts","sourceRoot":"","sources":["../../../src/agents/create-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAExC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAY/C,wBAAsB,WAAW,CAAC,IAAI,EAAE;IACtC,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,aAAa,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBhB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import createDebug from 'debug';
|
|
2
|
+
import { runCodegen } from './create-codegen-agent.js';
|
|
2
3
|
import { runConstants } from './create-constants-agent.js';
|
|
3
4
|
import { runLandingPageAgent } from './create-landing-page-agent.js';
|
|
4
5
|
import { runNarrativeAgent } from './create-narrative-agent.js';
|
|
@@ -8,13 +9,14 @@ import { runValidationAgent } from './create-validation-agent.js';
|
|
|
8
9
|
import { runScaffold } from './scaffold-agent.js';
|
|
9
10
|
const debug = createDebug('auto:react-gen:pipeline');
|
|
10
11
|
export async function runPipeline(opts) {
|
|
11
|
-
const { model, llm, starterDir, outputDir } = opts;
|
|
12
|
+
const { model, llm, starterDir, outputDir, graphqlSchema } = opts;
|
|
12
13
|
debug('scaffold');
|
|
13
14
|
await runScaffold({ starterDir, outputDir });
|
|
14
15
|
debug('constants');
|
|
15
16
|
await runConstants({ model, outputDir });
|
|
16
|
-
debug('parallel: landing page + theme + %d narratives', model.narratives.length);
|
|
17
|
+
debug('parallel: codegen + landing page + theme + %d narratives', model.narratives.length);
|
|
17
18
|
await Promise.all([
|
|
19
|
+
runCodegen({ graphqlSchema, outputDir }),
|
|
18
20
|
runLandingPageAgent(model, llm, outputDir),
|
|
19
21
|
runThemeAgent(model, llm, outputDir),
|
|
20
22
|
...model.narratives.map((n) => runNarrativeAgent(n, llm, outputDir)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-pipeline.js","sourceRoot":"","sources":["../../../src/agents/create-pipeline.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,KAAK,GAAG,WAAW,CAAC,yBAAyB,CAAC,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"create-pipeline.js","sourceRoot":"","sources":["../../../src/agents/create-pipeline.ts"],"names":[],"mappings":"AACA,OAAO,WAAW,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,MAAM,KAAK,GAAG,WAAW,CAAC,yBAAyB,CAAC,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAMjC;IACC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAElE,KAAK,CAAC,UAAU,CAAC,CAAC;IAClB,MAAM,WAAW,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC;IAE7C,KAAK,CAAC,WAAW,CAAC,CAAC;IACnB,MAAM,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IAEzC,KAAK,CAAC,0DAA0D,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC3F,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,UAAU,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;QACxC,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,CAAC;QAC1C,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,CAAC;QACpC,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;KACrE,CAAC,CAAC;IAEH,KAAK,CAAC,QAAQ,CAAC,CAAC;IAChB,MAAM,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;IAE5C,KAAK,CAAC,YAAY,CAAC,CAAC;IACpB,MAAM,kBAAkB,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAEhD,KAAK,CAAC,mBAAmB,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-router-agent.d.ts","sourceRoot":"","sources":["../../../src/agents/create-router-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,aAAa,EAAe,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"create-router-agent.d.ts","sourceRoot":"","sources":["../../../src/agents/create-router-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,aAAa,EAAe,MAAM,IAAI,CAAC;AAOhF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAW/C,wBAAsB,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA+B/G"}
|
|
@@ -2,9 +2,9 @@ import { generateText, hasToolCall, stepCountIs } from 'ai';
|
|
|
2
2
|
import { ROUTER_SYSTEM_PROMPT } from '../prompts/router-system.js';
|
|
3
3
|
import { createExitLoopTool } from '../tools/exit-loop.js';
|
|
4
4
|
import { createListFilesTool } from '../tools/list-files.js';
|
|
5
|
+
import { createLoadSkillsTool } from '../tools/load-skills.js';
|
|
5
6
|
import { createReadFileTool } from '../tools/read-file.js';
|
|
6
7
|
import { createWriteFileTool } from '../tools/write-file.js';
|
|
7
|
-
import { getSkillToolkit } from '../utils/create-skill-tool.js';
|
|
8
8
|
import { slugify } from '../utils/slugify.js';
|
|
9
9
|
const SKILL_NAMES = [
|
|
10
10
|
'design-taste-frontend',
|
|
@@ -14,7 +14,6 @@ const SKILL_NAMES = [
|
|
|
14
14
|
'react-doctor',
|
|
15
15
|
];
|
|
16
16
|
export async function runRouterAgent(model, llm, outputDir) {
|
|
17
|
-
const { skill } = await getSkillToolkit();
|
|
18
17
|
const narrativeDescriptions = model.narratives
|
|
19
18
|
.map((n) => {
|
|
20
19
|
const slug = slugify(n.name);
|
|
@@ -31,9 +30,9 @@ IMPORTANT: Each feature MUST be mapped to the exact route listed above. Do NOT i
|
|
|
31
30
|
const { text } = await generateText({
|
|
32
31
|
model: llm,
|
|
33
32
|
system: `${ROUTER_SYSTEM_PROMPT}\n\n---\n\n${domainContext}`,
|
|
34
|
-
prompt: `
|
|
33
|
+
prompt: `Call load_skills once to load all design rules, then write the router config. Call exit_loop when done.`,
|
|
35
34
|
tools: {
|
|
36
|
-
|
|
35
|
+
load_skills: createLoadSkillsTool(SKILL_NAMES),
|
|
37
36
|
write_file: createWriteFileTool(outputDir, { allowProtected: true }),
|
|
38
37
|
read_file: createReadFileTool(outputDir),
|
|
39
38
|
list_files: createListFilesTool(outputDir),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-router-agent.js","sourceRoot":"","sources":["../../../src/agents/create-router-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAsB,WAAW,EAAE,MAAM,IAAI,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"create-router-agent.js","sourceRoot":"","sources":["../../../src/agents/create-router-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAsB,WAAW,EAAE,MAAM,IAAI,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,WAAW,GAAG;IAClB,uBAAuB;IACvB,yBAAyB;IACzB,iBAAiB;IACjB,6BAA6B;IAC7B,cAAc;CACf,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAkB,EAAE,GAAkB,EAAE,SAAiB;IAC5F,MAAM,qBAAqB,GAAG,KAAK,CAAC,UAAU;SAC3C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACT,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,OAAO,CAAC,CAAC,IAAI,kBAAkB,IAAI,mCAAmC,IAAI,KAAK,CAAC;IACzF,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,aAAa,GAAG;cACV,KAAK,CAAC,OAAO;;;EAGzB,qBAAqB;;6GAEsF,CAAC;IAE5G,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC;QAClC,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,GAAG,oBAAoB,cAAc,aAAa,EAAE;QAC5D,MAAM,EAAE,yGAAyG;QACjH,KAAK,EAAE;YACL,WAAW,EAAE,oBAAoB,CAAC,WAAW,CAAC;YAC9C,UAAU,EAAE,mBAAmB,CAAC,SAAS,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;YACpE,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC;YACxC,UAAU,EAAE,mBAAmB,CAAC,SAAS,CAAC;YAC1C,SAAS,EAAE,kBAAkB,CAAC,sEAAsE,CAAC;SACtG;QACD,QAAQ,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;KACtD,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-theme-agent.d.ts","sourceRoot":"","sources":["../../../src/agents/create-theme-agent.ts"],"names":[],"mappings":"AACA,OAAO,EAA6B,KAAK,aAAa,EAAqB,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"create-theme-agent.d.ts","sourceRoot":"","sources":["../../../src/agents/create-theme-agent.ts"],"names":[],"mappings":"AACA,OAAO,EAA6B,KAAK,aAAa,EAAqB,MAAM,IAAI,CAAC;AAQtF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAkG/C,wBAAsB,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsB9G"}
|
|
@@ -4,9 +4,9 @@ import fs from 'fs-extra';
|
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import { THEME_SYSTEM_PROMPT } from '../prompts/theme-system.js';
|
|
6
6
|
import { createExitLoopTool } from '../tools/exit-loop.js';
|
|
7
|
+
import { createLoadSkillsTool } from '../tools/load-skills.js';
|
|
7
8
|
import { createReadFileTool } from '../tools/read-file.js';
|
|
8
9
|
import { createWriteFileTool } from '../tools/write-file.js';
|
|
9
|
-
import { getSkillToolkit } from '../utils/create-skill-tool.js';
|
|
10
10
|
const SKILL_NAMES = ['design-taste-frontend', 'high-end-visual-design', 'design-system', 'design'];
|
|
11
11
|
function createCheckThemeTool(outputDir) {
|
|
12
12
|
return tool({
|
|
@@ -82,7 +82,6 @@ function createCheckThemeTool(outputDir) {
|
|
|
82
82
|
});
|
|
83
83
|
}
|
|
84
84
|
export async function runThemeAgent(model, llm, outputDir) {
|
|
85
|
-
const { skill } = await getSkillToolkit();
|
|
86
85
|
const narrativeDescriptions = model.narratives
|
|
87
86
|
.map((n) => `- ${n.name}: ${n.description || n.slices.map((s) => s.name).join(', ')}`)
|
|
88
87
|
.join('\n');
|
|
@@ -90,9 +89,9 @@ export async function runThemeAgent(model, llm, outputDir) {
|
|
|
90
89
|
const { text } = await generateText({
|
|
91
90
|
model: llm,
|
|
92
91
|
system: `${THEME_SYSTEM_PROMPT}\n\n---\n\n${context}`,
|
|
93
|
-
prompt: `
|
|
92
|
+
prompt: `Call load_skills once to load all design rules, then write index.css and call check_theme to verify it. If check_theme says ok, call exit_loop.`,
|
|
94
93
|
tools: {
|
|
95
|
-
|
|
94
|
+
load_skills: createLoadSkillsTool(SKILL_NAMES),
|
|
96
95
|
write_file: createWriteFileTool(outputDir, { allowProtected: true }),
|
|
97
96
|
read_file: createReadFileTool(outputDir),
|
|
98
97
|
check_theme: createCheckThemeTool(outputDir),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-theme-agent.js","sourceRoot":"","sources":["../../../src/agents/create-theme-agent.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAsB,WAAW,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AACtF,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"create-theme-agent.js","sourceRoot":"","sources":["../../../src/agents/create-theme-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-validation-agent.d.ts","sourceRoot":"","sources":["../../../src/agents/create-validation-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,aAAa,EAAe,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"create-validation-agent.d.ts","sourceRoot":"","sources":["../../../src/agents/create-validation-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,aAAa,EAAe,MAAM,IAAI,CAAC;AAUhF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,aAAa,EAClB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CA2BjB"}
|
|
@@ -3,14 +3,13 @@ import { VALIDATION_SYSTEM_PROMPT } from '../prompts/validation-system.js';
|
|
|
3
3
|
import { createCheckImportsTool } from '../tools/check-imports.js';
|
|
4
4
|
import { createExitLoopTool } from '../tools/exit-loop.js';
|
|
5
5
|
import { createListFilesTool } from '../tools/list-files.js';
|
|
6
|
+
import { createLoadSkillsTool } from '../tools/load-skills.js';
|
|
6
7
|
import { createReadFileTool } from '../tools/read-file.js';
|
|
7
8
|
import { createRunEslintTool } from '../tools/run-eslint.js';
|
|
8
9
|
import { createRunTscTool } from '../tools/run-tsc.js';
|
|
9
10
|
import { createWriteFileTool } from '../tools/write-file.js';
|
|
10
|
-
import { getSkillToolkit } from '../utils/create-skill-tool.js';
|
|
11
11
|
const SKILL_NAMES = ['redesign-existing-projects', 'react-doctor', 'web-design-guidelines'];
|
|
12
12
|
export async function runValidationAgent(llm, domainModel, outputDir) {
|
|
13
|
-
const { skill } = await getSkillToolkit();
|
|
14
13
|
const narrativeDescriptions = domainModel.narratives
|
|
15
14
|
.map((n) => `- ${n.name}: ${n.description || n.slices.map((s) => s.name).join(', ')}`)
|
|
16
15
|
.join('\n');
|
|
@@ -18,9 +17,9 @@ export async function runValidationAgent(llm, domainModel, outputDir) {
|
|
|
18
17
|
const { text } = await generateText({
|
|
19
18
|
model: llm,
|
|
20
19
|
system: VALIDATION_SYSTEM_PROMPT + domainHint,
|
|
21
|
-
prompt: `
|
|
20
|
+
prompt: `Call load_skills once to load all rules, then run tsc and eslint to check for errors. Fix any issues found. Call exit_loop when both report 0 errors.`,
|
|
22
21
|
tools: {
|
|
23
|
-
|
|
22
|
+
load_skills: createLoadSkillsTool(SKILL_NAMES),
|
|
24
23
|
run_tsc: createRunTscTool(outputDir),
|
|
25
24
|
run_eslint: createRunEslintTool(outputDir),
|
|
26
25
|
check_imports: createCheckImportsTool(outputDir),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-validation-agent.js","sourceRoot":"","sources":["../../../src/agents/create-validation-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAsB,WAAW,EAAE,MAAM,IAAI,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"create-validation-agent.js","sourceRoot":"","sources":["../../../src/agents/create-validation-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAsB,WAAW,EAAE,MAAM,IAAI,CAAC;AAChF,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,MAAM,WAAW,GAAG,CAAC,4BAA4B,EAAE,cAAc,EAAE,uBAAuB,CAAC,CAAC;AAE5F,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAAkB,EAClB,WAAwB,EACxB,SAAiB;IAEjB,MAAM,qBAAqB,GAAG,WAAW,CAAC,UAAU;SACjD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;SACrF,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,MAAM,UAAU,GAAG,qCAAqC,WAAW,CAAC,OAAO,iCAAiC,qBAAqB,gJAAgJ,CAAC;IAElR,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC;QAClC,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,wBAAwB,GAAG,UAAU;QAC7C,MAAM,EAAE,uJAAuJ;QAC/J,KAAK,EAAE;YACL,WAAW,EAAE,oBAAoB,CAAC,WAAW,CAAC;YAC9C,OAAO,EAAE,gBAAgB,CAAC,SAAS,CAAC;YACpC,UAAU,EAAE,mBAAmB,CAAC,SAAS,CAAC;YAC1C,aAAa,EAAE,sBAAsB,CAAC,SAAS,CAAC;YAChD,UAAU,EAAE,mBAAmB,CAAC,SAAS,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;YACpE,SAAS,EAAE,kBAAkB,CAAC,SAAS,CAAC;YACxC,UAAU,EAAE,mBAAmB,CAAC,SAAS,CAAC;YAC1C,SAAS,EAAE,kBAAkB,CAC3B,+FAA+F,CAChG;SACF;QACD,QAAQ,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;KACtD,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-react-app.d.ts","sourceRoot":"","sources":["../../../src/commands/generate-react-app.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,OAAO,EAAwB,KAAK,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAI5F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAc/C,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAC3C,kBAAkB,EAClB;IACE,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB,CACF,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,KAAK,CACxC,mBAAmB,EACnB;IACE,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB,CACF,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,KAAK,CAC/C,0BAA0B,EAC1B;IACE,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CACF,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,sBAAsB,GAAG,6BAA6B,CAAC;AAE5F,eAAO,MAAM,cAAc;;;;;;
|
|
1
|
+
{"version":3,"file":"generate-react-app.d.ts","sourceRoot":"","sources":["../../../src/commands/generate-react-app.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,OAAO,EAAwB,KAAK,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAI5F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAc/C,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAC3C,kBAAkB,EAClB;IACE,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB,CACF,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,KAAK,CACxC,mBAAmB,EACnB;IACE,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACpB,CACF,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,KAAK,CAC/C,0BAA0B,EAC1B;IACE,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CACF,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,sBAAsB,GAAG,6BAA6B,CAAC;AAE5F,eAAO,MAAM,cAAc;;;;;;GAkFzB,CAAC;AAEH,eAAe,cAAc,CAAC"}
|
|
@@ -45,7 +45,7 @@ export const commandHandler = defineCommandHandler({
|
|
|
45
45
|
{ name: 'ReactAppGenerationFailed', displayName: 'Front End Build Failed' },
|
|
46
46
|
],
|
|
47
47
|
handle: async (command) => {
|
|
48
|
-
const { model: providedModel, modelPath, outputDir } = command.data;
|
|
48
|
+
const { model: providedModel, modelPath, graphqlSchema, outputDir } = command.data;
|
|
49
49
|
if (providedModel === undefined && modelPath === undefined) {
|
|
50
50
|
throw new Error('Either model or modelPath must be provided');
|
|
51
51
|
}
|
|
@@ -65,6 +65,7 @@ export const commandHandler = defineCommandHandler({
|
|
|
65
65
|
llm,
|
|
66
66
|
starterDir,
|
|
67
67
|
outputDir: resolvedOutput,
|
|
68
|
+
graphqlSchema: graphqlSchema,
|
|
68
69
|
});
|
|
69
70
|
debug('Pipeline complete → %s', resolvedOutput);
|
|
70
71
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate-react-app.js","sourceRoot":"","sources":["../../../src/commands/generate-react-app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAgB,oBAAoB,EAAc,MAAM,4BAA4B,CAAC;AAC5F,OAAO,WAAW,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,MAAM,KAAK,GAAG,WAAW,CAAC,gBAAgB,CAAC,CAAC;AAE5C,MAAM,kBAAkB,GAAG,GAAW,EAAE;IACtC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;IAC9D,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,WAAW,CAAC;IACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;IAC9D,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC7C,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AA+BF,MAAM,CAAC,MAAM,cAAc,GAAG,oBAAoB,CAAC;IACjD,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,iBAAiB;IAC9B,KAAK,EAAE,gBAAgB;IACvB,WAAW,EACT,sKAAsK;IACxK,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE;QACN,KAAK,EAAE;YACL,WAAW,EAAE,qDAAqD;SACnE;QACD,SAAS,EAAE;YACT,WAAW,EAAE,4DAA4D;SAC1E;QACD,aAAa,EAAE;YACb,WAAW,EAAE,kDAAkD;SAChE;QACD,SAAS,EAAE;YACT,WAAW,EAAE,8CAA8C;YAC3D,QAAQ,EAAE,IAAI;SACf;KACF;IACD,QAAQ,EAAE,CAAC,uEAAuE,CAAC;IACnF,MAAM,EAAE;QACN,EAAE,IAAI,EAAE,mBAAmB,EAAE,WAAW,EAAE,iBAAiB,EAAE;QAC7D,EAAE,IAAI,EAAE,0BAA0B,EAAE,WAAW,EAAE,wBAAwB,EAAE;KAC5E;IACD,MAAM,EAAE,KAAK,EAAE,OAAgB,EAAmC,EAAE;QAClE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,GAAI,OAAmC,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"generate-react-app.js","sourceRoot":"","sources":["../../../src/commands/generate-react-app.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { Narrative } from '../types.js';
|
|
2
|
-
export declare function buildNarrativeContext(narrative: Narrative): string;
|
|
2
|
+
export declare function buildNarrativeContext(narrative: Narrative, outputDir: string): string;
|
|
3
3
|
//# sourceMappingURL=build-narrative-context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-narrative-context.d.ts","sourceRoot":"","sources":["../../../src/prompts/build-narrative-context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"build-narrative-context.d.ts","sourceRoot":"","sources":["../../../src/prompts/build-narrative-context.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAA+B,SAAS,EAAS,MAAM,aAAa,CAAC;AAmGjF,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAkDrF"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
1
3
|
import { slugify } from '../utils/slugify.js';
|
|
2
4
|
function formatClientSpecs(specs, indent = 0) {
|
|
3
5
|
const pad = ' '.repeat(indent);
|
|
@@ -47,8 +49,11 @@ function buildSliceBlock(slice, narrativeSlug) {
|
|
|
47
49
|
lines.push(`Output file: src/features/${narrativeSlug}/${componentName}.tsx`);
|
|
48
50
|
if (slice.request) {
|
|
49
51
|
const constName = toConstName(slice.name);
|
|
50
|
-
|
|
51
|
-
|
|
52
|
+
const isMut = slice.type === 'command' || slice.request.trimStart().startsWith('mutation');
|
|
53
|
+
const file = isMut ? 'mutations' : 'queries';
|
|
54
|
+
lines.push(`Typed GraphQL operation in ${file}.ts: ${constName}`);
|
|
55
|
+
lines.push(`Import: import { ${constName} } from './${file}.js';`);
|
|
56
|
+
lines.push(`Usage: import { execute } from "@/gql/execute"; execute(${constName}, vars) — types are inferred automatically, do NOT define manual interfaces.`);
|
|
52
57
|
}
|
|
53
58
|
if (slice.client?.specs?.length) {
|
|
54
59
|
lines.push(``);
|
|
@@ -69,7 +74,7 @@ function buildSliceBlock(slice, narrativeSlug) {
|
|
|
69
74
|
}
|
|
70
75
|
return lines.join('\n');
|
|
71
76
|
}
|
|
72
|
-
export function buildNarrativeContext(narrative) {
|
|
77
|
+
export function buildNarrativeContext(narrative, outputDir) {
|
|
73
78
|
const slug = slugify(narrative.name);
|
|
74
79
|
const pageName = `${toPascalCase(narrative.name)}Page`;
|
|
75
80
|
const frontendSlices = narrative.slices.filter((s) => s.type !== 'react');
|
|
@@ -77,14 +82,28 @@ export function buildNarrativeContext(narrative) {
|
|
|
77
82
|
const lines = [
|
|
78
83
|
`# Narrative: "${narrative.name}"`,
|
|
79
84
|
`Feature folder: src/features/${slug}/`,
|
|
80
|
-
`GraphQL constants: src/features/${slug}/queries.ts (already generated — read it first!)`,
|
|
81
85
|
`Page file: src/pages/${pageName}.tsx`,
|
|
82
86
|
``,
|
|
83
|
-
`FIRST STEP: call read_file("src/features/${slug}/queries.ts") to see the available constants.`,
|
|
84
|
-
``,
|
|
85
87
|
`## Slices to implement:`,
|
|
86
88
|
``,
|
|
87
89
|
];
|
|
90
|
+
// Embed pre-generated operations content so LLM doesn't need to read files
|
|
91
|
+
const queriesPath = path.join(outputDir, 'src', 'features', slug, 'queries.ts');
|
|
92
|
+
const mutationsPath = path.join(outputDir, 'src', 'features', slug, 'mutations.ts');
|
|
93
|
+
if (fs.existsSync(queriesPath)) {
|
|
94
|
+
lines.push(`## queries.ts (pre-generated — do NOT recreate or modify):`);
|
|
95
|
+
lines.push('```typescript');
|
|
96
|
+
lines.push(fs.readFileSync(queriesPath, 'utf-8').trim());
|
|
97
|
+
lines.push('```');
|
|
98
|
+
lines.push('');
|
|
99
|
+
}
|
|
100
|
+
if (fs.existsSync(mutationsPath)) {
|
|
101
|
+
lines.push(`## mutations.ts (pre-generated — do NOT recreate or modify):`);
|
|
102
|
+
lines.push('```typescript');
|
|
103
|
+
lines.push(fs.readFileSync(mutationsPath, 'utf-8').trim());
|
|
104
|
+
lines.push('```');
|
|
105
|
+
lines.push('');
|
|
106
|
+
}
|
|
88
107
|
frontendSlices.forEach((slice) => {
|
|
89
108
|
lines.push(buildSliceBlock(slice, slug));
|
|
90
109
|
lines.push(``);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-narrative-context.js","sourceRoot":"","sources":["../../../src/prompts/build-narrative-context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"build-narrative-context.js","sourceRoot":"","sources":["../../../src/prompts/build-narrative-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,SAAS,iBAAiB,CAAC,KAAuB,EAAE,MAAM,GAAG,CAAC;IAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAChC,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9D,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,MAAM,MAAM,IAAI,CAAC,KAAK,GAAG,CAAC;QAChD,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;YAC1B,OAAO,GAAG,IAAI,KAAK,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;QACpE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAoB;IAC9C,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACZ,IAAI,CAAC,KAAK;SACP,GAAG,CACF,CAAC,IAAI,EAAE,EAAE,CACP,WAAW,IAAI,CAAC,IAAI,IAAI;QACxB,IAAI,CAAC,QAAQ;aACV,GAAG,CACF,CAAC,EAAE,EAAE,EAAE,CACL,gBAAgB,EAAE,CAAC,IAAI,IAAI,WAAW,IAAI;YAC1C,EAAE,CAAC,KAAK;iBACL,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACT,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1E,OAAO,SAAS,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC;YAC9C,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAChB;aACA,IAAI,CAAC,IAAI,CAAC,CAChB;SACA,IAAI,CAAC,IAAI,CAAC,CACd;SACA,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,IAAI;SACR,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC;SACnC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,WAAW,EAAE,CAAC;AACnB,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,eAAe,CAAC,KAAY,EAAE,aAAqB;IAC1D,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,IAAI,YAAY,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;IAC/D,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,6BAA6B,aAAa,IAAI,aAAa,MAAM,CAAC,CAAC;IAE9E,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC3F,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,8BAA8B,IAAI,QAAQ,SAAS,EAAE,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,oBAAoB,SAAS,cAAc,IAAI,IAAI,CAAC,CAAC;QAChE,KAAK,CAAC,IAAI,CACR,2DAA2D,SAAS,8EAA8E,CACnJ,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAC/G,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,SAAoB,EAAE,SAAiB;IAC3E,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC;IACvD,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IAC1E,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IAEvE,MAAM,KAAK,GAAa;QACtB,iBAAiB,SAAS,CAAC,IAAI,GAAG;QAClC,gCAAgC,IAAI,GAAG;QACvC,wBAAwB,QAAQ,MAAM;QACtC,EAAE;QACF,yBAAyB;QACzB,EAAE;KACH,CAAC;IAEF,2EAA2E;IAC3E,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IAChF,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACpF,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;QACzE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACzD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;QAC3E,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,cAAc,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/B,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,IAAI,CAAC,sBAAsB,QAAQ,MAAM,CAAC,CAAC;IACjD,KAAK,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;IAErF,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QACrD,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACxB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const LANDING_PAGE_SYSTEM_PROMPT = "You are a principal UI architect building a landing page. Use write_landing_page to create the landing page component.\n\n## YOUR ONLY JOB\nWrite src/components/landing-page.tsx \u2014 a premium, tasteful landing page for this application.\n\n## DESIGN PRINCIPLES \u2014 NON-NEGOTIABLE\n\n### Typography\n- Use extreme typographic contrast. Headlines should be large (text-4xl to text-6xl), bold, with tight tracking (tracking-tighter) and tight line-height (leading-[1.08]).\n- Body text: text-base or text-lg, text-muted-foreground, leading-relaxed, max-w-[50ch] or max-w-[65ch].\n- Section labels: text-xs uppercase tracking-[0.2em] text-muted-foreground font-medium \u2014 always precede section headings with these.\n- Never use Inter or Roboto. The theme already sets the right font.\n\n### Color & Surfaces\n- Use the theme's primary color sparingly \u2014 only for CTAs, icon accents, small highlights.\n- Cards and containers: subtle border (border border-border/60), gentle bg (bg-card or bg-muted/30). No heavy shadows.\n- Tint shadows to match the background hue, never use pure black shadows.\n\n### Layout\n- Hero: split-screen layout using CSS Grid (grid-cols-1 lg:grid-cols-2). The hero MUST use min-h-[80dvh] or min-h-[85dvh].\n- Hero left side: headline, bullet points with check-mark icons showing value propositions, CTA buttons.\n- Hero right side: a
|
|
1
|
+
export declare const LANDING_PAGE_SYSTEM_PROMPT = "You are a principal UI architect building a landing page. Use write_landing_page to create the landing page component.\n\n## YOUR ONLY JOB\nWrite src/components/landing-page.tsx \u2014 a premium, tasteful landing page for this application.\n\nCRITICAL: Do NOT include any navigation bar, header, or top nav in the landing page. The App.tsx shell already provides a sticky navigation header. Your landing page renders BELOW that header. Adding another nav creates a duplicate header bar.\n\n## DESIGN PRINCIPLES \u2014 NON-NEGOTIABLE\n\n### Typography\n- Use extreme typographic contrast. Headlines should be large (text-4xl to text-6xl), bold, with tight tracking (tracking-tighter) and tight line-height (leading-[1.08]).\n- Body text: text-base or text-lg, text-muted-foreground, leading-relaxed, max-w-[50ch] or max-w-[65ch].\n- Section labels: text-xs uppercase tracking-[0.2em] text-muted-foreground font-medium \u2014 always precede section headings with these.\n- Never use Inter or Roboto. The theme already sets the right font.\n\n### Color & Surfaces\n- Use the theme's primary color sparingly \u2014 only for CTAs, icon accents, small highlights.\n- Cards and containers: subtle border (border border-border/60), gentle bg (bg-card or bg-muted/30). No heavy shadows.\n- Tint shadows to match the background hue, never use pure black shadows.\n\n### Layout\n- Hero: split-screen layout using CSS Grid (grid-cols-1 lg:grid-cols-2). The hero MUST use min-h-[80dvh] or min-h-[85dvh].\n- Hero left side: headline, bullet points with check-mark icons showing value propositions, CTA buttons.\n- Hero right side: build a mock \"app preview\" \u2014 a realistic-looking card or panel that previews what the actual app interface looks like. Use real UI components (Card, Badge, small stat numbers, progress indicators) arranged to look like a miniature dashboard screenshot. Add a subtle rotateY(2deg) or -rotate-1 transform and a soft shadow to make it pop. This should look like a floating app window, NOT abstract shapes or placeholder graphics.\n- Feature showcase: choose the layout pattern that best fits THIS application's features. Options:\n (a) Alternating zig-zag (grid-cols-2, text on one side, preview on the other, alternating sides) \u2014 best for 2-4 features with rich previews\n (b) Stacked feature cards (full-width cards, each with text + inline preview) \u2014 best for 3+ features, compact\n (c) Feature grid (2-column grid of equal cards, each with icon + heading + description) \u2014 best for 4+ small features\n Whatever pattern you choose, include a mock UI preview for each feature built with real components (Card, Badge, form inputs, stat numbers). Previews should look like miniature screenshots of the actual feature \u2014 showing realistic sample data, not placeholders.\n- Massive whitespace between sections: py-24 to py-32. Let the design breathe.\n- A value strip between hero and features: border-y, bg-muted/30, py-6, showing 3 compact feature summaries with icons in a grid-cols-3 layout.\n- A bottom CTA section: full-width bg-foreground text-background py-20 with centered headline + CTA button (inverted colors). This should feel like a strong closing statement.\n- Container: max-w-6xl mx-auto px-6.\n- Never use 3-column card grids for features. Use 2 columns or zig-zag alternating.\n- Never use h-screen. Always min-h-[Xdvh].\n\n### Components & Interactions\n- CTA buttons: h-12 rounded-xl px-8 font-semibold. Use the Button component from @/components/ui/button.\n- Include a nested arrow icon inside CTAs: a small circular span (inline-flex h-6 w-6 items-center justify-center rounded-full bg-primary-foreground/15) containing an ArrowRight icon.\n- Hover states on feature links: text-primary with gap transition.\n- Eyebrow tags before feature titles: small pill (rounded-full bg-primary/8 px-3 py-1) with icon + uppercase label.\n\n### Navigation \u2014 CRITICAL\n- Every CTA button and feature card MUST link to the correct route using <Link to=\"/route\"> from react-router-dom.\n- The APPLICATION CONTEXT below lists each feature with its route. Use those exact paths.\n- Hero CTA buttons: wrap in <Link> or use <Button asChild><Link to=\"/route\">...</Link></Button>.\n- Feature cards: wrap each card in <Link to=\"/route\"> so clicking anywhere navigates.\n- NEVER use plain <button> or <a href=\"#\"> \u2014 always use <Link to=\"...\">.\n\n### Content\n- Write copy like a real product marketer for THIS specific domain. Be specific, not generic.\n- Hero headline: bold, domain-specific, 3-6 words. Not \"Welcome to X\".\n- Value propositions as bullet points with Check icons in small primary circles.\n- Feature descriptions: specific to what the feature does. 1-2 sentences.\n- BANNED phrases: \"Welcome to\", \"Get Started Today\", \"Elevate\", \"Seamless\", \"Unleash\", \"Next-Gen\", \"Game-changer\".\n- NO emojis anywhere.\n\n## AVAILABLE IMPORTS\n- react-router-dom: Link\n- lucide-react: any icon (ArrowRight, Check, and domain-relevant icons)\n- @/components/ui/button: Button\n- @/components/ui/card: Card, CardHeader, CardTitle, CardContent, CardDescription\n- @/components/ui/badge: Badge\n- @/lib/utils: cn()\n\n## OUTPUT\nCall write_landing_page with the COMPLETE file content. No partial code, no placeholders.\nThen call exit_loop.";
|
|
2
2
|
//# sourceMappingURL=landing-page-system.d.ts.map
|