@auto-engineer/app-implementer 1.79.0 → 1.81.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.
@@ -1,123 +1,136 @@
1
- import { generateText } from 'ai';
2
- import { beforeEach, describe, expect, it, vi } from 'vitest';
3
- import { buildImportMap, extractErroredFiles, generateApp, parseGeneratedFiles, refineApp } from './app-generator.js';
4
- vi.mock('ai', () => ({
5
- generateText: vi.fn(),
6
- }));
7
- const generateTextMock = vi.mocked(generateText);
8
- beforeEach(() => {
9
- vi.clearAllMocks();
10
- });
11
- function stubModel() {
12
- return { modelId: 'test-model' };
13
- }
14
- function stubContext() {
15
- return {
16
- journey: {
17
- entryPageId: 'home',
18
- pages: [{ pageId: 'home', name: 'Home', routePath: '/', description: 'Home page' }],
19
- navigationEdges: [],
20
- dataDependencies: [],
21
- },
22
- catalog: {
23
- instructions: 'instructions',
24
- overview: 'overview',
25
- componentDocs: [],
26
- },
27
- fileTree: 'tree',
28
- };
29
- }
30
- const sampleLlmResponse = ['<!-- file: App.tsx -->', '```tsx', 'export function App() { return <div/>; }', '```'].join('\n');
31
- describe('parseGeneratedFiles', () => {
32
- it('extracts files from LLM response', () => {
33
- expect(parseGeneratedFiles(sampleLlmResponse)).toEqual([
34
- { path: 'App.tsx', content: 'export function App() { return <div/>; }' },
35
- ]);
36
- });
37
- it('throws when no files found', () => {
38
- expect(() => parseGeneratedFiles('no code blocks here')).toThrow('No generated files found');
39
- });
40
- });
41
- describe('extractErroredFiles', () => {
42
- it('returns only files with matching error paths', () => {
43
- const files = [
44
- { path: 'App.tsx', content: 'app' },
45
- { path: 'pages/Home.tsx', content: 'home' },
46
- ];
47
- expect(extractErroredFiles(['pages/Home.tsx(1,5): error TS123'], files)).toEqual([
48
- { path: 'pages/Home.tsx', content: 'home' },
49
- ]);
50
- });
51
- it('returns all files when no error paths match', () => {
52
- const files = [{ path: 'App.tsx', content: 'app' }];
53
- expect(extractErroredFiles(['some general error'], files)).toEqual(files);
54
- });
55
- });
56
- describe('buildImportMap', () => {
57
- it('groups components by path', () => {
58
- const result = buildImportMap([
59
- { name: 'Button', componentPath: './src/components/ui/Button.tsx' },
60
- { name: 'Input', componentPath: './src/components/ui/Input.tsx' },
61
- ]);
62
- expect(result).toBe([
63
- '# Component Import Map',
64
- '',
65
- 'import { Button } from "@/components/ui/Button";',
66
- 'import { Input } from "@/components/ui/Input";',
67
- ].join('\n'));
68
- });
69
- it('returns empty string for entries without paths', () => {
70
- expect(buildImportMap([{ name: 'Foo' }])).toBe('');
71
- });
72
- });
73
- describe('generateApp', () => {
74
- it('returns history as ChatTurn with prompt and response', async () => {
75
- generateTextMock.mockResolvedValueOnce({
76
- text: sampleLlmResponse,
77
- usage: { inputTokens: 100, outputTokens: 200 },
78
- });
79
- const { history } = await generateApp(stubContext(), stubModel());
80
- expect(history).toEqual({
81
- prompt: { role: 'user', content: expect.any(String) },
82
- response: { role: 'assistant', content: sampleLlmResponse },
83
- });
84
- });
85
- });
86
- describe('refineApp', () => {
87
- it('passes correct message sequence to generateText', async () => {
88
- const history = {
89
- prompt: { role: 'user', content: 'original prompt' },
90
- response: { role: 'assistant', content: sampleLlmResponse },
91
- };
92
- const app = { files: [{ path: 'App.tsx', content: 'app' }] };
93
- generateTextMock.mockResolvedValueOnce({
94
- text: sampleLlmResponse,
95
- usage: { inputTokens: 100, outputTokens: 200 },
96
- });
97
- await refineApp(app, ['App.tsx(1,1): error TS123'], stubContext(), history, stubModel());
98
- const call = generateTextMock.mock.calls[0][0];
99
- expect(call.messages).toEqual([
100
- { role: 'system', content: expect.any(String) },
101
- { role: 'user', content: 'original prompt' },
102
- { role: 'assistant', content: sampleLlmResponse },
103
- { role: 'user', content: expect.any(String) },
104
- ]);
105
- });
106
- it('preserves original prompt and replaces only response', async () => {
107
- const history = {
108
- prompt: { role: 'user', content: 'original prompt' },
109
- response: { role: 'assistant', content: 'old response' },
110
- };
111
- const app = { files: [{ path: 'App.tsx', content: 'app' }] };
112
- generateTextMock.mockResolvedValueOnce({
113
- text: sampleLlmResponse,
114
- usage: { inputTokens: 100, outputTokens: 200 },
115
- });
116
- const { history: newHistory } = await refineApp(app, ['App.tsx(1,1): error TS123'], stubContext(), history, stubModel());
117
- expect(newHistory).toEqual({
118
- prompt: { role: 'user', content: 'original prompt' },
119
- response: { role: 'assistant', content: sampleLlmResponse },
120
- });
121
- });
122
- });
1
+ // import type { LanguageModel } from 'ai';
2
+ // import { generateText } from 'ai';
3
+ // import { beforeEach, describe, expect, it, vi } from 'vitest';
4
+ // import type { AppGenerationContext, RefinementHistory } from './app-generator.js';
5
+ // import { buildImportMap, extractErroredFiles, generateApp, parseGeneratedFiles, refineApp } from './app-generator.js';
6
+ export {};
7
+ // vi.mock('ai', () => ({
8
+ // generateText: vi.fn(),
9
+ // }));
10
+ // const generateTextMock = vi.mocked(generateText);
11
+ // beforeEach(() => {
12
+ // vi.clearAllMocks();
13
+ // });
14
+ // function stubModel(): LanguageModel {
15
+ // return { modelId: 'test-model' } as LanguageModel;
16
+ // }
17
+ // function stubContext(): AppGenerationContext {
18
+ // return {
19
+ // journey: {
20
+ // entryPageId: 'home',
21
+ // pages: [{ pageId: 'home', name: 'Home', routePath: '/', description: 'Home page' }],
22
+ // navigationEdges: [],
23
+ // dataDependencies: [],
24
+ // },
25
+ // catalog: {
26
+ // instructions: 'instructions',
27
+ // overview: 'overview',
28
+ // componentDocs: [],
29
+ // },
30
+ // fileTree: 'tree',
31
+ // };
32
+ // }
33
+ // const sampleLlmResponse = ['<!-- file: App.tsx -->', '```tsx', 'export function App() { return <div/>; }', '```'].join(
34
+ // '\n',
35
+ // );
36
+ // describe('parseGeneratedFiles', () => {
37
+ // it('extracts files from LLM response', () => {
38
+ // expect(parseGeneratedFiles(sampleLlmResponse)).toEqual([
39
+ // { path: 'App.tsx', content: 'export function App() { return <div/>; }' },
40
+ // ]);
41
+ // });
42
+ // it('throws when no files found', () => {
43
+ // expect(() => parseGeneratedFiles('no code blocks here')).toThrow('No generated files found');
44
+ // });
45
+ // });
46
+ // describe('extractErroredFiles', () => {
47
+ // it('returns only files with matching error paths', () => {
48
+ // const files = [
49
+ // { path: 'App.tsx', content: 'app' },
50
+ // { path: 'pages/Home.tsx', content: 'home' },
51
+ // ];
52
+ // expect(extractErroredFiles(['pages/Home.tsx(1,5): error TS123'], files)).toEqual([
53
+ // { path: 'pages/Home.tsx', content: 'home' },
54
+ // ]);
55
+ // });
56
+ // it('returns all files when no error paths match', () => {
57
+ // const files = [{ path: 'App.tsx', content: 'app' }];
58
+ // expect(extractErroredFiles(['some general error'], files)).toEqual(files);
59
+ // });
60
+ // });
61
+ // describe('buildImportMap', () => {
62
+ // it('groups components by path', () => {
63
+ // const result = buildImportMap([
64
+ // { name: 'Button', componentPath: './src/components/ui/Button.tsx' },
65
+ // { name: 'Input', componentPath: './src/components/ui/Input.tsx' },
66
+ // ]);
67
+ // expect(result).toBe(
68
+ // [
69
+ // '# Component Import Map',
70
+ // '',
71
+ // 'import { Button } from "@/components/ui/Button";',
72
+ // 'import { Input } from "@/components/ui/Input";',
73
+ // ].join('\n'),
74
+ // );
75
+ // });
76
+ // it('returns empty string for entries without paths', () => {
77
+ // expect(buildImportMap([{ name: 'Foo' }])).toBe('');
78
+ // });
79
+ // });
80
+ // describe('generateApp', () => {
81
+ // it('returns history as ChatTurn with prompt and response', async () => {
82
+ // generateTextMock.mockResolvedValueOnce({
83
+ // text: sampleLlmResponse,
84
+ // usage: { inputTokens: 100, outputTokens: 200 },
85
+ // } as ReturnType<typeof generateText> extends Promise<infer R> ? R : never);
86
+ // const { history } = await generateApp(stubContext(), stubModel());
87
+ // expect(history).toEqual({
88
+ // prompt: { role: 'user', content: expect.any(String) },
89
+ // response: { role: 'assistant', content: sampleLlmResponse },
90
+ // });
91
+ // });
92
+ // });
93
+ // describe('refineApp', () => {
94
+ // it('passes correct message sequence to generateText', async () => {
95
+ // const history: RefinementHistory = {
96
+ // prompt: { role: 'user', content: 'original prompt' },
97
+ // response: { role: 'assistant', content: sampleLlmResponse },
98
+ // };
99
+ // const app = { files: [{ path: 'App.tsx', content: 'app' }] };
100
+ // generateTextMock.mockResolvedValueOnce({
101
+ // text: sampleLlmResponse,
102
+ // usage: { inputTokens: 100, outputTokens: 200 },
103
+ // } as ReturnType<typeof generateText> extends Promise<infer R> ? R : never);
104
+ // await refineApp(app, ['App.tsx(1,1): error TS123'], stubContext(), history, stubModel());
105
+ // const call = generateTextMock.mock.calls[0][0];
106
+ // expect(call.messages).toEqual([
107
+ // { role: 'system', content: expect.any(String) },
108
+ // { role: 'user', content: 'original prompt' },
109
+ // { role: 'assistant', content: sampleLlmResponse },
110
+ // { role: 'user', content: expect.any(String) },
111
+ // ]);
112
+ // });
113
+ // it('preserves original prompt and replaces only response', async () => {
114
+ // const history: RefinementHistory = {
115
+ // prompt: { role: 'user', content: 'original prompt' },
116
+ // response: { role: 'assistant', content: 'old response' },
117
+ // };
118
+ // const app = { files: [{ path: 'App.tsx', content: 'app' }] };
119
+ // generateTextMock.mockResolvedValueOnce({
120
+ // text: sampleLlmResponse,
121
+ // usage: { inputTokens: 100, outputTokens: 200 },
122
+ // } as ReturnType<typeof generateText> extends Promise<infer R> ? R : never);
123
+ // const { history: newHistory } = await refineApp(
124
+ // app,
125
+ // ['App.tsx(1,1): error TS123'],
126
+ // stubContext(),
127
+ // history,
128
+ // stubModel(),
129
+ // );
130
+ // expect(newHistory).toEqual({
131
+ // prompt: { role: 'user', content: 'original prompt' },
132
+ // response: { role: 'assistant', content: sampleLlmResponse },
133
+ // });
134
+ // });
135
+ // });
123
136
  //# sourceMappingURL=app-generator.specs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-generator.specs.js","sourceRoot":"","sources":["../../src/app-generator.specs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-generator.specs.js","sourceRoot":"","sources":["../../src/app-generator.specs.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,qCAAqC;AACrC,iEAAiE;AACjE,qFAAqF;AACrF,yHAAyH;;AAEzH,yBAAyB;AACzB,2BAA2B;AAC3B,OAAO;AAEP,oDAAoD;AAEpD,qBAAqB;AACrB,wBAAwB;AACxB,MAAM;AAEN,wCAAwC;AACxC,uDAAuD;AACvD,IAAI;AAEJ,iDAAiD;AACjD,aAAa;AACb,iBAAiB;AACjB,6BAA6B;AAC7B,6FAA6F;AAC7F,6BAA6B;AAC7B,8BAA8B;AAC9B,SAAS;AACT,iBAAiB;AACjB,sCAAsC;AACtC,8BAA8B;AAC9B,2BAA2B;AAC3B,SAAS;AACT,wBAAwB;AACxB,OAAO;AACP,IAAI;AAEJ,0HAA0H;AAC1H,UAAU;AACV,KAAK;AAEL,0CAA0C;AAC1C,mDAAmD;AACnD,+DAA+D;AAC/D,kFAAkF;AAClF,UAAU;AACV,QAAQ;AAER,6CAA6C;AAC7C,oGAAoG;AACpG,QAAQ;AACR,MAAM;AAEN,0CAA0C;AAC1C,+DAA+D;AAC/D,sBAAsB;AACtB,6CAA6C;AAC7C,qDAAqD;AACrD,SAAS;AAET,yFAAyF;AACzF,qDAAqD;AACrD,UAAU;AACV,QAAQ;AAER,8DAA8D;AAC9D,2DAA2D;AAE3D,iFAAiF;AACjF,QAAQ;AACR,MAAM;AAEN,qCAAqC;AACrC,4CAA4C;AAC5C,sCAAsC;AACtC,6EAA6E;AAC7E,2EAA2E;AAC3E,UAAU;AAEV,2BAA2B;AAC3B,UAAU;AACV,oCAAoC;AACpC,cAAc;AACd,8DAA8D;AAC9D,4DAA4D;AAC5D,sBAAsB;AACtB,SAAS;AACT,QAAQ;AAER,iEAAiE;AACjE,0DAA0D;AAC1D,QAAQ;AACR,MAAM;AAEN,kCAAkC;AAClC,6EAA6E;AAC7E,+CAA+C;AAC/C,iCAAiC;AACjC,wDAAwD;AACxD,kFAAkF;AAElF,yEAAyE;AAEzE,gCAAgC;AAChC,+DAA+D;AAC/D,qEAAqE;AACrE,UAAU;AACV,QAAQ;AACR,MAAM;AAEN,gCAAgC;AAChC,wEAAwE;AACxE,2CAA2C;AAC3C,8DAA8D;AAC9D,qEAAqE;AACrE,SAAS;AACT,oEAAoE;AAEpE,+CAA+C;AAC/C,iCAAiC;AACjC,wDAAwD;AACxD,kFAAkF;AAElF,gGAAgG;AAEhG,sDAAsD;AACtD,sCAAsC;AACtC,yDAAyD;AACzD,sDAAsD;AACtD,2DAA2D;AAC3D,uDAAuD;AACvD,UAAU;AACV,QAAQ;AAER,6EAA6E;AAC7E,2CAA2C;AAC3C,8DAA8D;AAC9D,kEAAkE;AAClE,SAAS;AACT,oEAAoE;AAEpE,+CAA+C;AAC/C,iCAAiC;AACjC,wDAAwD;AACxD,kFAAkF;AAElF,uDAAuD;AACvD,aAAa;AACb,uCAAuC;AACvC,uBAAuB;AACvB,iBAAiB;AACjB,qBAAqB;AACrB,SAAS;AAET,mCAAmC;AACnC,8DAA8D;AAC9D,qEAAqE;AACrE,UAAU;AACV,QAAQ;AACR,MAAM"}
@@ -1 +1 @@
1
- {"version":3,"file":"journey-analyzer.d.ts","sourceRoot":"","sources":["../../src/journey-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAGxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAIjE,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvF,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,gBAAgB,EAAE,cAAc,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CA2BjD;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAU5F;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAO9D;AAED,wBAAsB,cAAc,CAClC,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC,CAsCtD"}
1
+ {"version":3,"file":"journey-analyzer.d.ts","sourceRoot":"","sources":["../../src/journey-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,IAAI,CAAC;AAGtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAIjE,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,gBAAgB,EAAE,cAAc,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CA2BjD;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAU5F;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAO9D;AAED,wBAAsB,cAAc,CAClC,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC,CA4CtD"}
@@ -53,17 +53,18 @@ export async function analyzeJourney(narrative, catalog, model) {
53
53
  const userPrompt = buildJourneyUserPrompt(narrative, catalog);
54
54
  debug(' System prompt length:', systemPrompt.length, 'chars');
55
55
  debug(' User prompt length:', userPrompt.length, 'chars');
56
- debug(' Calling LLM with model: %s', typeof model === 'string' ? model : model.modelId);
56
+ const buildJourneysMessages = [
57
+ {
58
+ role: 'system',
59
+ content: systemPrompt,
60
+ },
61
+ { role: 'user', content: userPrompt },
62
+ ];
63
+ debug(' Calling LLM with model: %s', typeof model === 'string' ? model : model.modelId, 'with messages', JSON.stringify(buildJourneysMessages, null, 2));
57
64
  const llmStart = Date.now();
58
65
  const { text, usage } = await generateText({
59
66
  model,
60
- messages: [
61
- {
62
- role: 'system',
63
- content: systemPrompt,
64
- },
65
- { role: 'user', content: userPrompt },
66
- ],
67
+ messages: buildJourneysMessages,
67
68
  });
68
69
  debug(` LLM responded in ${Date.now() - llmStart}ms (${text.length} chars)`);
69
70
  debug(' Parsing response...');
@@ -1 +1 @@
1
- {"version":3,"file":"journey-analyzer.js","sourceRoot":"","sources":["../../src/journey-analyzer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"journey-analyzer.js","sourceRoot":"","sources":["../../src/journey-analyzer.ts"],"names":[],"mappings":"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"}