@auto-engineer/component-implementor-react 1.110.0 → 1.110.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.turbo/turbo-test.log +3 -3
  3. package/.turbo/turbo-type-check.log +1 -1
  4. package/CHANGELOG.md +13 -0
  5. package/dist/src/commands/implement-component.d.ts.map +1 -1
  6. package/dist/src/commands/implement-component.js +5 -1
  7. package/dist/src/commands/implement-component.js.map +1 -1
  8. package/dist/src/index.d.ts +0 -1
  9. package/dist/src/index.d.ts.map +1 -1
  10. package/dist/src/index.js +0 -1
  11. package/dist/src/index.js.map +1 -1
  12. package/dist/src/pipeline/run-pipeline.d.ts +4 -3
  13. package/dist/src/pipeline/run-pipeline.d.ts.map +1 -1
  14. package/dist/src/pipeline/run-pipeline.js +2 -2
  15. package/dist/src/pipeline/run-pipeline.js.map +1 -1
  16. package/dist/src/pipeline/run-pipeline.test.js +4 -2
  17. package/dist/src/pipeline/run-pipeline.test.js.map +1 -1
  18. package/dist/src/pipeline/steps/generate-story.d.ts +2 -1
  19. package/dist/src/pipeline/steps/generate-story.d.ts.map +1 -1
  20. package/dist/src/pipeline/steps/generate-story.js +11 -5
  21. package/dist/src/pipeline/steps/generate-story.js.map +1 -1
  22. package/dist/src/pipeline/steps/generate-story.test.js +11 -5
  23. package/dist/src/pipeline/steps/generate-story.test.js.map +1 -1
  24. package/dist/tsconfig.tsbuildinfo +1 -1
  25. package/package.json +3 -3
  26. package/src/commands/implement-component.ts +6 -1
  27. package/src/index.ts +0 -1
  28. package/src/pipeline/run-pipeline.test.ts +4 -2
  29. package/src/pipeline/run-pipeline.ts +6 -5
  30. package/src/pipeline/steps/generate-story.test.ts +14 -5
  31. package/src/pipeline/steps/generate-story.ts +13 -5
  32. package/vitest.config.ts +1 -1
  33. package/dist/src/generate-story-deterministic.d.ts +0 -30
  34. package/dist/src/generate-story-deterministic.d.ts.map +0 -1
  35. package/dist/src/generate-story-deterministic.js +0 -229
  36. package/dist/src/generate-story-deterministic.js.map +0 -1
  37. package/src/generate-story-deterministic.ts +0 -267
package/package.json CHANGED
@@ -6,13 +6,13 @@
6
6
  "dependencies": {
7
7
  "ai": "^6.0.0",
8
8
  "debug": "^4.4.1",
9
- "@auto-engineer/message-bus": "1.110.0",
10
- "@auto-engineer/model-factory": "1.110.0"
9
+ "@auto-engineer/message-bus": "1.110.1",
10
+ "@auto-engineer/model-factory": "1.110.1"
11
11
  },
12
12
  "devDependencies": {
13
13
  "vitest": "^3.2.1"
14
14
  },
15
- "version": "1.110.0",
15
+ "version": "1.110.1",
16
16
  "publishConfig": {
17
17
  "access": "public"
18
18
  },
@@ -133,6 +133,11 @@ function buildPipelineConfig(): PipelineConfig {
133
133
  process.env.IMPL_MODEL ??
134
134
  process.env.CUSTOM_PROVIDER_DEFAULT_MODEL ??
135
135
  '',
136
+ generateStory:
137
+ process.env.STEP_GENERATE_STORY_MODEL ??
138
+ process.env.IMPL_MODEL ??
139
+ process.env.CUSTOM_PROVIDER_DEFAULT_MODEL ??
140
+ '',
136
141
  fixer:
137
142
  process.env.STEP_FIXER_MODEL ??
138
143
  process.env.IMPL_FIXER_MODEL ??
@@ -148,6 +153,7 @@ function createPipelineModels(): PipelineModels {
148
153
  return {
149
154
  generateTest: model,
150
155
  generateComponent: model,
156
+ generateStory: model,
151
157
  fixer: model,
152
158
  };
153
159
  }
@@ -202,7 +208,6 @@ export async function handleImplementComponent(
202
208
  existingComponent,
203
209
  existingTest,
204
210
  isModify,
205
- storyVariants: payload.storyVariants,
206
211
  llmCalls: 0,
207
212
  errorFeedback,
208
213
  attemptNumber,
package/src/index.ts CHANGED
@@ -10,7 +10,6 @@ export type {
10
10
  ImplementComponentEvents,
11
11
  } from './commands/implement-component';
12
12
  export { handleImplementComponent } from './commands/implement-component';
13
- export { generateStoryDeterministic } from './generate-story-deterministic';
14
13
  export type {
15
14
  ModelConfig,
16
15
  PipelineConfig,
@@ -160,6 +160,7 @@ function makeModels(): PipelineModels {
160
160
  return {
161
161
  generateTest: fakeModel,
162
162
  generateComponent: fakeModel,
163
+ generateStory: fakeModel,
163
164
  fixer: fakeModel,
164
165
  };
165
166
  }
@@ -169,6 +170,7 @@ function makeConfig(): PipelineConfig {
169
170
  models: {
170
171
  generateTest: '',
171
172
  generateComponent: '',
173
+ generateStory: '',
172
174
  fixer: '',
173
175
  },
174
176
  };
@@ -200,7 +202,7 @@ describe('buildPipelineSteps', () => {
200
202
 
201
203
  expect(generateTestStep).toHaveBeenCalledWith(models.generateTest, ctx);
202
204
  expect(generateComponentStep).toHaveBeenCalledWith(models.generateComponent, ctx);
203
- expect(generateStoryStep).toHaveBeenCalledWith(ctx);
205
+ expect(generateStoryStep).toHaveBeenCalledWith(models.generateStory, ctx);
204
206
  });
205
207
 
206
208
  it('wires fix step on retry attempt', async () => {
@@ -214,6 +216,6 @@ describe('buildPipelineSteps', () => {
214
216
  }
215
217
 
216
218
  expect(fixFromFeedbackStep).toHaveBeenCalledWith(models.fixer, ctx);
217
- expect(generateStoryStep).toHaveBeenCalledWith(ctx);
219
+ expect(generateStoryStep).toHaveBeenCalledWith(models.generateStory, ctx);
218
220
  });
219
221
  });
@@ -1,6 +1,6 @@
1
1
  import type { LanguageModel } from 'ai';
2
2
  import createDebug from 'debug';
3
- import type { DeterministicStoryProp, StoryVariant } from '../generate-story-deterministic';
3
+ import type { ScaffoldProp } from '../scaffold';
4
4
  import type { SpecDeltas } from '../spec-contract';
5
5
  import { fixFromFeedbackStep } from './steps/fix-from-feedback';
6
6
  import { generateComponentStep } from './steps/generate-component';
@@ -28,12 +28,11 @@ export type PipelineContext = {
28
28
  targetDir: string;
29
29
  specDeltas: SpecDeltas;
30
30
  projectSection: string;
31
- props?: DeterministicStoryProp[];
31
+ props?: ScaffoldProp[];
32
32
  composes: Array<{ id: string; path: string }>;
33
33
  existingComponent?: string;
34
34
  existingTest?: string;
35
35
  isModify: boolean;
36
- storyVariants?: StoryVariant[];
37
36
  testCode?: string;
38
37
  componentCode?: string;
39
38
  storyCode?: string;
@@ -45,6 +44,7 @@ export type PipelineContext = {
45
44
  export type ModelConfig = {
46
45
  generateTest: string;
47
46
  generateComponent: string;
47
+ generateStory: string;
48
48
  fixer: string;
49
49
  };
50
50
 
@@ -55,6 +55,7 @@ export type PipelineConfig = {
55
55
  export type PipelineModels = {
56
56
  generateTest: LanguageModel;
57
57
  generateComponent: LanguageModel;
58
+ generateStory: LanguageModel;
58
59
  fixer: LanguageModel;
59
60
  };
60
61
 
@@ -78,7 +79,7 @@ export function buildPipelineSteps(
78
79
  },
79
80
  {
80
81
  name: 'Generate Story',
81
- run: () => generateStoryStep(ctx),
82
+ run: () => generateStoryStep(models.generateStory, ctx),
82
83
  },
83
84
  ];
84
85
  }
@@ -95,7 +96,7 @@ export function buildPipelineSteps(
95
96
  },
96
97
  {
97
98
  name: 'Generate Story',
98
- run: () => generateStoryStep(ctx),
99
+ run: () => generateStoryStep(models.generateStory, ctx),
99
100
  },
100
101
  ];
101
102
  }
@@ -1,9 +1,16 @@
1
+ import type { LanguageModel } from 'ai';
1
2
  import { describe, expect, it, vi } from 'vitest';
2
3
 
3
4
  vi.mock('node:fs/promises', () => ({
4
5
  writeFile: vi.fn(),
5
6
  }));
6
7
 
8
+ vi.mock('ai', () => ({
9
+ generateText: vi.fn(async () => ({
10
+ text: '```tsx\nimport type { Meta, StoryObj } from "@storybook/react-vite";\nimport { MyButton } from "@/components/ui/MyButton";\n\nconst meta: Meta<typeof MyButton> = { title: "UI Components/MyButton", component: MyButton };\nexport default meta;\n\ntype Story = StoryObj<typeof MyButton>;\n\nexport const Default: Story = { args: {} };\n```',
11
+ })),
12
+ }));
13
+
7
14
  import { writeFile } from 'node:fs/promises';
8
15
  import type { PipelineContext } from '../run-pipeline';
9
16
  import { generateStoryStep } from './generate-story';
@@ -26,12 +33,14 @@ function makeCtx(overrides: Partial<PipelineContext> = {}): PipelineContext {
26
33
  };
27
34
  }
28
35
 
36
+ const fakeModel = {} as LanguageModel;
37
+
29
38
  describe('generateStoryStep', () => {
30
- it('generates story deterministically and writes to storyPath', async () => {
39
+ it('generates story via LLM and writes to storyPath', async () => {
31
40
  vi.mocked(writeFile).mockResolvedValue(undefined);
32
41
 
33
42
  const ctx = makeCtx();
34
- const result = await generateStoryStep(ctx);
43
+ const result = await generateStoryStep(fakeModel, ctx);
35
44
 
36
45
  expect(result).toEqual({ success: true });
37
46
  expect(ctx.storyCode).toContain('export default meta');
@@ -43,12 +52,12 @@ describe('generateStoryStep', () => {
43
52
  );
44
53
  });
45
54
 
46
- it('does not increment llmCalls since no LLM is used', async () => {
55
+ it('increments llmCalls', async () => {
47
56
  vi.mocked(writeFile).mockResolvedValue(undefined);
48
57
 
49
58
  const ctx = makeCtx();
50
- await generateStoryStep(ctx);
59
+ await generateStoryStep(fakeModel, ctx);
51
60
 
52
- expect(ctx.llmCalls).toBe(0);
61
+ expect(ctx.llmCalls).toBe(1);
53
62
  });
54
63
  });
@@ -1,15 +1,23 @@
1
1
  import { writeFile } from 'node:fs/promises';
2
- import { generateStoryDeterministic } from '../../generate-story-deterministic';
2
+ import type { LanguageModel } from 'ai';
3
+ import { generateText } from 'ai';
4
+ import { extractCodeBlock } from '../../extract-code-block';
5
+ import { buildStoryPrompt } from '../../prompt';
3
6
  import type { PipelineContext, StepResult } from '../run-pipeline';
4
7
 
5
- export async function generateStoryStep(ctx: PipelineContext): Promise<StepResult> {
6
- const storyCode = generateStoryDeterministic({
8
+ export async function generateStoryStep(model: LanguageModel, ctx: PipelineContext): Promise<StepResult> {
9
+ const { system, prompt } = buildStoryPrompt({
7
10
  componentName: ctx.componentName,
8
11
  componentImportPath: ctx.componentImportPath,
9
- props: ctx.props,
10
- storyVariants: ctx.storyVariants,
12
+ specDeltas: ctx.specDeltas,
13
+ componentCode: ctx.componentCode,
14
+ projectSection: ctx.projectSection,
11
15
  });
12
16
 
17
+ const { text } = await generateText({ model, system, prompt });
18
+ ctx.llmCalls++;
19
+
20
+ const storyCode = extractCodeBlock(text);
13
21
  ctx.storyCode = storyCode;
14
22
  await writeFile(ctx.storyPath, storyCode, 'utf-8');
15
23
 
package/vitest.config.ts CHANGED
@@ -14,7 +14,7 @@ export default defineConfig({
14
14
  'src/project-context.ts',
15
15
  'src/scaffold.ts',
16
16
  'src/extract-exports.ts',
17
- 'src/generate-story-deterministic.ts',
17
+ 'src/pipeline/steps/generate-story.ts',
18
18
  ],
19
19
  thresholds: { statements: 100, branches: 100, functions: 100, lines: 100 },
20
20
  },
@@ -1,30 +0,0 @@
1
- export interface DeterministicStoryProp {
2
- name: string;
3
- type: string;
4
- required: boolean;
5
- default?: string;
6
- description: string;
7
- category: 'data' | 'callback' | 'slot' | 'visual' | 'state' | 'config';
8
- }
9
- export interface StoryVariant {
10
- name: string;
11
- description: string;
12
- args: Record<string, unknown>;
13
- needsPlayFunction?: boolean;
14
- playDescription?: string;
15
- }
16
- export interface DeterministicStoryInput {
17
- componentName: string;
18
- componentImportPath: string;
19
- props?: DeterministicStoryProp[];
20
- storyVariants?: StoryVariant[];
21
- }
22
- /**
23
- * Generates a Storybook CSF3 story file deterministically (no LLM call).
24
- *
25
- * Uses structured prop data and optional story variants to emit a complete
26
- * `.stories.tsx` file string. When no variants are provided, a Default
27
- * story is synthesized from the props with sensible placeholder values.
28
- */
29
- export declare function generateStoryDeterministic(input: DeterministicStoryInput): string;
30
- //# sourceMappingURL=generate-story-deterministic.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-story-deterministic.d.ts","sourceRoot":"","sources":["../../src/generate-story-deterministic.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;CACxE;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACjC,aAAa,CAAC,EAAE,YAAY,EAAE,CAAC;CAChC;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CAkDjF"}
@@ -1,229 +0,0 @@
1
- // ═══════════════════════════════════════════════════════════════════
2
- // Deterministic story generator — no LLM call, pure template logic
3
- // ═══════════════════════════════════════════════════════════════════
4
- /**
5
- * Generates a Storybook CSF3 story file deterministically (no LLM call).
6
- *
7
- * Uses structured prop data and optional story variants to emit a complete
8
- * `.stories.tsx` file string. When no variants are provided, a Default
9
- * story is synthesized from the props with sensible placeholder values.
10
- */
11
- export function generateStoryDeterministic(input) {
12
- const { componentName, componentImportPath, props, storyVariants } = input;
13
- const lines = [];
14
- // ── Imports ──────────────────────────────────────────────────────
15
- lines.push(`import type { Meta, StoryObj } from '@storybook/react-vite';`);
16
- lines.push(`import { ${componentName} } from '${componentImportPath}';`);
17
- lines.push('');
18
- // ── Meta ─────────────────────────────────────────────────────────
19
- lines.push(`const meta: Meta<typeof ${componentName}> = {`);
20
- lines.push(` title: 'UI Components/${componentName}',`);
21
- lines.push(` component: ${componentName},`);
22
- lines.push(`};`);
23
- lines.push(`export default meta;`);
24
- lines.push('');
25
- // ── Story type alias ─────────────────────────────────────────────
26
- lines.push(`type Story = StoryObj<typeof ${componentName}>;`);
27
- // ── Stories ──────────────────────────────────────────────────────
28
- if (storyVariants && storyVariants.length > 0) {
29
- for (const variant of storyVariants) {
30
- lines.push('');
31
- lines.push(`export const ${variant.name}: Story = {`);
32
- const argsBlock = serializeArgs(variant.args);
33
- if (argsBlock) {
34
- lines.push(` args: {`);
35
- lines.push(argsBlock);
36
- lines.push(` },`);
37
- }
38
- lines.push(`};`);
39
- }
40
- }
41
- else {
42
- // Derive a Default story from props
43
- const defaultArgs = deriveDefaultArgs(props ?? []);
44
- lines.push('');
45
- lines.push(`export const Default: Story = {`);
46
- const argsBlock = serializeArgs(defaultArgs);
47
- if (argsBlock) {
48
- lines.push(` args: {`);
49
- lines.push(argsBlock);
50
- lines.push(` },`);
51
- }
52
- lines.push(`};`);
53
- }
54
- lines.push('');
55
- return lines.join('\n');
56
- }
57
- // ═══════════════════════════════════════════════════════════════════
58
- // Internals
59
- // ═══════════════════════════════════════════════════════════════════
60
- /**
61
- * Derives sensible default arg values from structured prop definitions.
62
- *
63
- * - `callback` props are omitted (Storybook auto-detects them via argTypes).
64
- * - `slot` props are omitted (ReactNode cannot be serialized to args).
65
- * - `data` props get placeholder values based on their TypeScript type.
66
- * - `visual` props use the declared default if present, otherwise a placeholder.
67
- * - `state` props default to `false`.
68
- * - `config` props use the declared default if present, otherwise a placeholder.
69
- */
70
- function deriveDefaultArgs(props) {
71
- const args = {};
72
- for (const prop of props) {
73
- // Skip categories that cannot or should not be serialized in args
74
- if (prop.category === 'callback' || prop.category === 'slot') {
75
- continue;
76
- }
77
- if (prop.category === 'state') {
78
- args[prop.name] = false;
79
- continue;
80
- }
81
- // If a default is declared, try to use it
82
- if (prop.default !== undefined) {
83
- const parsed = parseDefaultValue(prop.default);
84
- if (parsed !== undefined) {
85
- args[prop.name] = parsed;
86
- continue;
87
- }
88
- }
89
- // Otherwise generate a placeholder based on the TypeScript type string
90
- args[prop.name] = placeholderForType(prop.type);
91
- }
92
- return args;
93
- }
94
- /**
95
- * Attempts to parse a default value string into a JS primitive.
96
- * Returns `undefined` when the string cannot be meaningfully parsed
97
- * (e.g. an arrow function or complex expression).
98
- */
99
- function parseDefaultValue(raw) {
100
- const trimmed = raw.trim();
101
- if (trimmed === 'true')
102
- return true;
103
- if (trimmed === 'false')
104
- return false;
105
- if (trimmed === 'null')
106
- return null;
107
- if (trimmed === 'undefined')
108
- return undefined;
109
- // Quoted string
110
- const stringMatch = trimmed.match(/^['"](.*)['"]$/);
111
- if (stringMatch)
112
- return stringMatch[1];
113
- // Numeric
114
- const num = Number(trimmed);
115
- if (!Number.isNaN(num) && trimmed !== '')
116
- return num;
117
- // Array or object literal — attempt JSON parse
118
- if (trimmed.startsWith('[') || trimmed.startsWith('{')) {
119
- try {
120
- return JSON.parse(trimmed);
121
- }
122
- catch {
123
- return undefined;
124
- }
125
- }
126
- // Anything else (functions, expressions) → skip
127
- return undefined;
128
- }
129
- /**
130
- * Returns a sensible placeholder value for a given TypeScript type string.
131
- */
132
- function placeholderForType(typeStr) {
133
- const t = typeStr.trim();
134
- if (t === 'string')
135
- return 'Example';
136
- if (t === 'number')
137
- return 42;
138
- if (t === 'boolean')
139
- return true;
140
- // Union of string literals — pick the first literal
141
- const literalUnion = t.match(/^['"]([^'"]+)['"]/);
142
- if (literalUnion)
143
- return literalUnion[1];
144
- // Array types
145
- if (t.endsWith('[]') || t.startsWith('Array<'))
146
- return [];
147
- // Generic object / Record
148
- if (t === 'object' || t.startsWith('Record<') || t.startsWith('{'))
149
- return {};
150
- // Fallback
151
- return undefined;
152
- }
153
- /**
154
- * Serializes an args record into indented TypeScript object body lines.
155
- * Returns an empty string when the args record is empty (caller should
156
- * omit the `args` block entirely).
157
- *
158
- * Each value is formatted as a valid TypeScript literal:
159
- * - strings → quoted
160
- * - numbers / booleans → as-is
161
- * - arrays / plain objects → JSON.stringify
162
- * - undefined, null, functions → skipped
163
- */
164
- function serializeArgs(args) {
165
- const entries = [];
166
- for (const [key, value] of Object.entries(args)) {
167
- const formatted = formatArgValue(value);
168
- if (formatted === null)
169
- continue;
170
- entries.push(` ${key}: ${formatted},`);
171
- }
172
- return entries.join('\n');
173
- }
174
- function formatArgValue(value) {
175
- if (value === undefined)
176
- return null;
177
- if (value === null)
178
- return null;
179
- if (typeof value === 'function')
180
- return null;
181
- if (typeof value === 'string') {
182
- // Callback strings like "() => {}" — emit as raw JS, not quoted
183
- if (/^\s*\(/.test(value) || /^\s*function\s*\(/.test(value)) {
184
- return value;
185
- }
186
- return JSON.stringify(value);
187
- }
188
- if (typeof value === 'number')
189
- return String(value);
190
- if (typeof value === 'boolean')
191
- return String(value);
192
- // Arrays and plain objects — deep-fix stringified JSON values first
193
- if (Array.isArray(value) || typeof value === 'object') {
194
- const fixed = deepParseStringifiedJson(value);
195
- return JSON.stringify(fixed);
196
- }
197
- return null;
198
- }
199
- /**
200
- * Recursively walks a value and parses any string that looks like
201
- * stringified JSON back into an actual object/array. This fixes
202
- * FEA output where nested objects are accidentally double-stringified.
203
- */
204
- function deepParseStringifiedJson(value) {
205
- if (typeof value === 'string') {
206
- const trimmed = value.trim();
207
- if ((trimmed.startsWith('{') && trimmed.endsWith('}')) || (trimmed.startsWith('[') && trimmed.endsWith(']'))) {
208
- try {
209
- return deepParseStringifiedJson(JSON.parse(trimmed));
210
- }
211
- catch {
212
- return value;
213
- }
214
- }
215
- return value;
216
- }
217
- if (Array.isArray(value)) {
218
- return value.map(deepParseStringifiedJson);
219
- }
220
- if (value !== null && typeof value === 'object') {
221
- const result = {};
222
- for (const [k, v] of Object.entries(value)) {
223
- result[k] = deepParseStringifiedJson(v);
224
- }
225
- return result;
226
- }
227
- return value;
228
- }
229
- //# sourceMappingURL=generate-story-deterministic.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"generate-story-deterministic.js","sourceRoot":"","sources":["../../src/generate-story-deterministic.ts"],"names":[],"mappings":"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"}