@auto-engineer/app-implementer 1.77.0 → 1.79.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/CHANGELOG.md CHANGED
@@ -1,5 +1,79 @@
1
1
  # @auto-engineer/app-implementer
2
2
 
3
+ ## 1.79.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`ec198e5`](https://github.com/BeOnAuto/auto-engineer/commit/ec198e559e662df16611ba433c56938304a869b6) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-checks**: extract findProjectRoot into shared module
8
+
9
+ - [`f460341`](https://github.com/BeOnAuto/auto-engineer/commit/f46034125e102b216d35a59f7260170480dc7fa4) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-checks**: extract runTypeCheck core logic
10
+
11
+ - [`ec1480d`](https://github.com/BeOnAuto/auto-engineer/commit/ec1480d6431df13948ae26dc2ad691c28ddafdf8) Thanks [@github-actions[bot]](https://github.com/github-actions%5Bbot%5D)! - - **react-component-implementer**: add aesthetic quality checks to visual evaluator
12
+ - **app-implementer**: add comprehensive recipe-based visual design system
13
+ - **react-component-implementer**: replace design principles with Tailwind recipes
14
+ - **global**: version packages
15
+ - **react-component-implementer**: finalize ketchup plan for design system upgrade
16
+
17
+ - [`8eb0244`](https://github.com/BeOnAuto/auto-engineer/commit/8eb02443763228e8182cfb3c30606e94cc9f0c30) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-checks**: extract runLintCheck core logic
18
+
19
+ ### Patch Changes
20
+
21
+ - [`506b0b4`](https://github.com/BeOnAuto/auto-engineer/commit/506b0b4810247e10c0896d45a37f4f0610d53455) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **react-component-implementer**: replace Message[] with ChatTurn in RefinementHistory
22
+
23
+ - [`087f977`](https://github.com/BeOnAuto/auto-engineer/commit/087f9776128b0610b945f23d0f4c3bc1a3d816dd) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **app-implementer**: replace Message[] with ChatTurn in RefinementHistory
24
+
25
+ - [`9bc98b4`](https://github.com/BeOnAuto/auto-engineer/commit/9bc98b4f384fa3417447e65286b015e1e10e63e9) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-checks**: slim CheckLint handler to delegate to runLintCheck
26
+
27
+ - [`b3ed5c1`](https://github.com/BeOnAuto/auto-engineer/commit/b3ed5c10575d00ca106237137bafc3524e8e9d82) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-generator-apollo-emmett**: ketchup plan for slim ReadModel API
28
+
29
+ - [`9c7ad8f`](https://github.com/BeOnAuto/auto-engineer/commit/9c7ad8fb3dd5d8321a80c4035baa9fe20701b651) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **global**: ketchup plan for LLM context growth optimization
30
+
31
+ - [`cedc3c0`](https://github.com/BeOnAuto/auto-engineer/commit/cedc3c0995af6025ab3d38a5a65d5bec9b4ecc7d) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **model-factory**: add ChatMessage and ChatTurn types for refinement history
32
+
33
+ - [`9757597`](https://github.com/BeOnAuto/auto-engineer/commit/9757597a1e562dfe81efa2de128aa10e8d091c79) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-checks**: add ketchup plan for unify check commands
34
+
35
+ - [`8104cc8`](https://github.com/BeOnAuto/auto-engineer/commit/8104cc82e7193c6a1a52a60da844a3e3fdb20b3b) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-checks**: export findProjectRoot, runTypeCheck, runLintCheck from index
36
+
37
+ - [`0bdb8d9`](https://github.com/BeOnAuto/auto-engineer/commit/0bdb8d9e606ce702cb7bbe81cbdc1f55fff58881) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-checks**: finalize ketchup plan for unify check commands
38
+
39
+ - [`31f65ac`](https://github.com/BeOnAuto/auto-engineer/commit/31f65acb9dfb656edfd482afc454bb4373b1d29d) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-generator-apollo-emmett**: slim ReadModel API to find + findOne
40
+
41
+ - [`25f8375`](https://github.com/BeOnAuto/auto-engineer/commit/25f8375ac181f09ff50aca3bccc3132b97814637) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **react-component-implementer**: replace lint-tier with runLintCheck, delete type-checker
42
+
43
+ - [`ab92096`](https://github.com/BeOnAuto/auto-engineer/commit/ab920961c9fd7515be9c09b4dbb1054bf03c94b9) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **react-component-implementer**: replace type-check-tier with runTypeCheck
44
+
45
+ - [`bcd8c4a`](https://github.com/BeOnAuto/auto-engineer/commit/bcd8c4a1e5e3d867c248d6bd55f66d7ef4863f46) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-checks**: use shared findProjectRoot in check-tests
46
+
47
+ - [`41ed452`](https://github.com/BeOnAuto/auto-engineer/commit/41ed4525bc796b1bdc1825fed20dd9f336108ca8) Thanks [@rami-hatoum](https://github.com/rami-hatoum)! - - **server-checks**: slim CheckTypes handler to delegate to runTypeCheck
48
+
49
+ - Updated dependencies [[`506b0b4`](https://github.com/BeOnAuto/auto-engineer/commit/506b0b4810247e10c0896d45a37f4f0610d53455), [`087f977`](https://github.com/BeOnAuto/auto-engineer/commit/087f9776128b0610b945f23d0f4c3bc1a3d816dd), [`9bc98b4`](https://github.com/BeOnAuto/auto-engineer/commit/9bc98b4f384fa3417447e65286b015e1e10e63e9), [`b3ed5c1`](https://github.com/BeOnAuto/auto-engineer/commit/b3ed5c10575d00ca106237137bafc3524e8e9d82), [`ec198e5`](https://github.com/BeOnAuto/auto-engineer/commit/ec198e559e662df16611ba433c56938304a869b6), [`9c7ad8f`](https://github.com/BeOnAuto/auto-engineer/commit/9c7ad8fb3dd5d8321a80c4035baa9fe20701b651), [`cedc3c0`](https://github.com/BeOnAuto/auto-engineer/commit/cedc3c0995af6025ab3d38a5a65d5bec9b4ecc7d), [`f460341`](https://github.com/BeOnAuto/auto-engineer/commit/f46034125e102b216d35a59f7260170480dc7fa4), [`9757597`](https://github.com/BeOnAuto/auto-engineer/commit/9757597a1e562dfe81efa2de128aa10e8d091c79), [`8104cc8`](https://github.com/BeOnAuto/auto-engineer/commit/8104cc82e7193c6a1a52a60da844a3e3fdb20b3b), [`ec1480d`](https://github.com/BeOnAuto/auto-engineer/commit/ec1480d6431df13948ae26dc2ad691c28ddafdf8), [`0bdb8d9`](https://github.com/BeOnAuto/auto-engineer/commit/0bdb8d9e606ce702cb7bbe81cbdc1f55fff58881), [`31f65ac`](https://github.com/BeOnAuto/auto-engineer/commit/31f65acb9dfb656edfd482afc454bb4373b1d29d), [`25f8375`](https://github.com/BeOnAuto/auto-engineer/commit/25f8375ac181f09ff50aca3bccc3132b97814637), [`ab92096`](https://github.com/BeOnAuto/auto-engineer/commit/ab920961c9fd7515be9c09b4dbb1054bf03c94b9), [`bcd8c4a`](https://github.com/BeOnAuto/auto-engineer/commit/bcd8c4a1e5e3d867c248d6bd55f66d7ef4863f46), [`41ed452`](https://github.com/BeOnAuto/auto-engineer/commit/41ed4525bc796b1bdc1825fed20dd9f336108ca8), [`8eb0244`](https://github.com/BeOnAuto/auto-engineer/commit/8eb02443763228e8182cfb3c30606e94cc9f0c30)]:
50
+ - @auto-engineer/message-bus@1.79.0
51
+ - @auto-engineer/model-factory@1.79.0
52
+
53
+ ## 1.78.0
54
+
55
+ ### Minor Changes
56
+
57
+ - [`4b29a2e`](https://github.com/BeOnAuto/auto-engineer/commit/4b29a2e95bec496ea403593a200664b10645c0cb) Thanks [@osamanar](https://github.com/osamanar)! - - **react-component-implementer**: add aesthetic quality checks to visual evaluator
58
+
59
+ - [`56de1d6`](https://github.com/BeOnAuto/auto-engineer/commit/56de1d6bd0b63c988847cbaa1027f0e934f2f5d7) Thanks [@osamanar](https://github.com/osamanar)! - - **app-implementer**: add comprehensive recipe-based visual design system
60
+
61
+ - [`73ffce3`](https://github.com/BeOnAuto/auto-engineer/commit/73ffce321cbc5e0a6c91506ccfe6c7ee7635a1ee) Thanks [@github-actions[bot]](https://github.com/github-actions%5Bbot%5D)! - - **packages/react-component-implementer**: fixes component generation
62
+ - **react-component-implementer**: add comprehensive visual design system to prompt
63
+ - **global**: version packages
64
+
65
+ - [`e9a92e0`](https://github.com/BeOnAuto/auto-engineer/commit/e9a92e0244299674e0071bc8afa5b0f38eb10e85) Thanks [@osamanar](https://github.com/osamanar)! - - **react-component-implementer**: replace design principles with Tailwind recipes
66
+
67
+ ### Patch Changes
68
+
69
+ - [`3045eb6`](https://github.com/BeOnAuto/auto-engineer/commit/3045eb6a8e26213660562eaa480b5b50478bde0c) Thanks [@osamanar](https://github.com/osamanar)! - - **react-component-implementer**: finalize ketchup plan for design system upgrade
70
+
71
+ - [`953ade0`](https://github.com/BeOnAuto/auto-engineer/commit/953ade01f373b9259f853310a3dd43a0f06d56bf) Thanks [@osamanar](https://github.com/osamanar)! - - **react-component-implementer**: add ketchup plan for visual design system upgrade
72
+
73
+ - Updated dependencies [[`4b29a2e`](https://github.com/BeOnAuto/auto-engineer/commit/4b29a2e95bec496ea403593a200664b10645c0cb), [`56de1d6`](https://github.com/BeOnAuto/auto-engineer/commit/56de1d6bd0b63c988847cbaa1027f0e934f2f5d7), [`3045eb6`](https://github.com/BeOnAuto/auto-engineer/commit/3045eb6a8e26213660562eaa480b5b50478bde0c), [`953ade0`](https://github.com/BeOnAuto/auto-engineer/commit/953ade01f373b9259f853310a3dd43a0f06d56bf), [`73ffce3`](https://github.com/BeOnAuto/auto-engineer/commit/73ffce321cbc5e0a6c91506ccfe6c7ee7635a1ee), [`e9a92e0`](https://github.com/BeOnAuto/auto-engineer/commit/e9a92e0244299674e0071bc8afa5b0f38eb10e85)]:
74
+ - @auto-engineer/message-bus@1.78.0
75
+ - @auto-engineer/model-factory@1.78.0
76
+
3
77
  ## 1.77.0
4
78
 
5
79
  ### Minor Changes
@@ -18,13 +18,8 @@ export interface AppGenerationContext {
18
18
  graphqlQueries?: string;
19
19
  graphqlMutations?: string;
20
20
  }
21
- export interface Message {
22
- role: 'user' | 'assistant';
23
- content: string;
24
- }
25
- export interface RefinementHistory {
26
- messages: Message[];
27
- }
21
+ import type { ChatTurn } from '@auto-engineer/model-factory';
22
+ export type RefinementHistory = ChatTurn;
28
23
  export interface TokenUsage {
29
24
  inputTokens: number;
30
25
  outputTokens: number;
@@ -1 +1 @@
1
- {"version":3,"file":"app-generator.d.ts","sourceRoot":"","sources":["../../src/app-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAGxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIzD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAsBlE;AA8DD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAyF1E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAqBxE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAYjE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAYhG;AA6BD,wBAAsB,WAAW,CAC/B,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC;IAAE,GAAG,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC,CAqC/E;AAED,wBAAsB,SAAS,CAC7B,GAAG,EAAE,YAAY,EACjB,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC;IAAE,GAAG,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC,CAuC/E"}
1
+ {"version":3,"file":"app-generator.d.ts","sourceRoot":"","sources":["../../src/app-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAGxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAIzD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAE7D,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AAEzC,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,gBAAgB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAsBlE;AA8DD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAiN1E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAqBxE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAYjE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAYhG;AA6BD,wBAAsB,WAAW,CAC/B,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC;IAAE,GAAG,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC,CAmC/E;AAED,wBAAsB,SAAS,CAC7B,GAAG,EAAE,YAAY,EACjB,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC;IAAE,GAAG,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC,CA6C/E"}
@@ -108,12 +108,6 @@ export function buildAppSystemPrompt(context) {
108
108
  ]
109
109
  : []),
110
110
  '',
111
- 'Layout Architecture Patterns:',
112
- '- Full-height layout: <div className="h-screen flex flex-col"><header className="flex-shrink-0">...</header><main className="flex-1 overflow-auto">...</main></div>',
113
- '- Sidebar + main: <div className="h-full flex"><aside className="w-64 flex-shrink-0 border-r">...</aside><main className="flex-1 overflow-auto">...</main></div>',
114
- '- Centered content: max-w-7xl mx-auto px-4 sm:px-6 lg:px-8',
115
- '- Grid layouts: grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6',
116
- '',
117
111
  'shadcn/ui Usage Patterns:',
118
112
  '- Tooltip: ALWAYS wrap in <TooltipProvider>. Example: <TooltipProvider><Tooltip><TooltipTrigger>...</TooltipTrigger><TooltipContent>...</TooltipContent></Tooltip></TooltipProvider>',
119
113
  "- Dialog/Sheet/Popover: Use Radix portals. Don't nest them inside each other.",
@@ -126,11 +120,137 @@ export function buildAppSystemPrompt(context) {
126
120
  '- Import validation: Verify named vs default exports. import { Link } from "react-router-dom" (named), not import Link from "react-router-dom"',
127
121
  '- Only import packages available in the starter project: react, react-dom, react-router-dom, @tanstack/react-query, graphql-request',
128
122
  '',
129
- 'Visual Quality:',
130
- '- The application must appear visually stunning, professionally crafted, and polished',
131
- '- Use proper spacing: space-y-16 between sections, space-y-6 between content blocks, space-y-3 between elements',
132
- '- Use responsive design: mobile-first with sm:, md:, lg: breakpoints',
133
- '- Include hover states, transitions (transition-all duration-200), and proper focus rings',
123
+ '# Visual Design System — Tailwind Recipes',
124
+ '',
125
+ '## 1. Text Hierarchy Recipe',
126
+ 'PRIMARY: text-xl font-bold text-foreground',
127
+ 'SECONDARY: text-sm text-muted-foreground',
128
+ 'TERTIARY: text-xs text-muted-foreground/60',
129
+ 'Bold at smaller size > Normal at larger size. text-lg font-bold beats text-2xl font-normal.',
130
+ 'Stick to 2 weights (font-normal + font-semibold/bold) and 2-3 colors (text-foreground, text-muted-foreground, text-muted-foreground/60).',
131
+ 'De-emphasize competitors instead of inflating the element.',
132
+ '',
133
+ '## 2. Label Patterns Recipe',
134
+ 'Combine label into value: "12 left in stock" not "In stock: 12".',
135
+ 'When labels ARE needed: label = text-xs font-medium uppercase tracking-wider text-muted-foreground, value = text-lg font-semibold.',
136
+ '',
137
+ '## 3. Stat/Metric Widget Recipe',
138
+ 'Label: text-xs font-medium uppercase tracking-wider text-muted-foreground',
139
+ 'Value: text-3xl font-bold text-foreground',
140
+ 'Unit: text-lg text-muted-foreground (inline)',
141
+ '',
142
+ '## 4. Navigation Recipe',
143
+ 'Active: font-semibold text-primary border-b-2 border-primary',
144
+ 'Inactive: font-medium text-muted-foreground hover:text-foreground',
145
+ 'Icons: text-muted-foreground/60 w-5 h-5',
146
+ '',
147
+ '## 5. Text on Colored Backgrounds',
148
+ 'Primary text: text-primary-foreground. De-emphasis: same hue lighter shade.',
149
+ 'NEVER: text-white/60 or text-gray-400 on colored bg.',
150
+ '',
151
+ '## 6. Button Hierarchy',
152
+ 'Primary: <Button> (solid). ONE per section.',
153
+ 'Secondary: <Button variant="outline"> or variant="secondary"',
154
+ 'Tertiary: <Button variant="ghost"> or variant="link"',
155
+ 'Destructive: ghost/outline unless it IS the primary action in a confirmation dialog.',
156
+ '',
157
+ '## 7. Spacing Grouping Recipe',
158
+ 'Within a group: gap-2. Between groups: gap-6.',
159
+ 'RULE: Inter-group gap >= 2x intra-group gap.',
160
+ 'Heading spacing ASYMMETRIC: mt-8/mt-12 above, mb-3/mb-4 below.',
161
+ 'Form label to input: mt-1.5. Between form groups: space-y-5.',
162
+ '',
163
+ '## 8. Layout Constraints',
164
+ 'Content pages: max-w-2xl mx-auto or max-w-3xl mx-auto',
165
+ 'Sidebars: w-64 flex-shrink-0 (NEVER percentage-based)',
166
+ 'Self-contained (modals, forms): max-w-sm or max-w-md',
167
+ 'Full-height: <div className="h-screen flex flex-col"><header className="shrink-0">...</header><main className="flex-1 overflow-auto">...</main></div>',
168
+ 'Sidebar + main: <div className="h-full flex"><aside className="w-64 shrink-0 border-r">...</aside><main className="flex-1 overflow-auto">...</main></div>',
169
+ 'Grid: grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 gap-6',
170
+ 'Centered content: max-w-7xl mx-auto px-4 sm:px-6 lg:px-8',
171
+ 'Paragraph text: max-w-prose or max-w-2xl. NEVER full width.',
172
+ '',
173
+ '## 9. Shadow Elevation',
174
+ 'shadow-sm: Buttons/inputs. shadow-md: Cards. shadow-lg: Popovers. shadow-xl: Modals.',
175
+ 'Realistic: shadow-[0_4px_6px_rgba(0,0,0,0.07),0_5px_15px_rgba(0,0,0,0.1)]',
176
+ 'Before adding a border, try shadow-sm or bg-muted instead.',
177
+ '',
178
+ '## 10. Overlapping Elements',
179
+ 'Cards breaking out of sections: -mt-16 relative z-10',
180
+ 'Avatars overlapping banners: -mt-10 ring-4 ring-background',
181
+ '',
182
+ '## 11. Background Alternation — MANDATORY for multi-section pages',
183
+ 'Landing pages MUST alternate section backgrounds:',
184
+ ' Hero: bg-primary text-primary-foreground py-20',
185
+ ' Features: bg-background py-16',
186
+ ' Social proof: bg-muted py-16',
187
+ ' CTA: bg-primary text-primary-foreground py-16',
188
+ '',
189
+ '## 12. Accent Borders — MANDATORY',
190
+ 'Every page section MUST include at least ONE accent:',
191
+ ' Card top: border-t-4 border-primary',
192
+ ' Alert left: border-l-4 border-blue-500',
193
+ ' Tab active: border-b-2 border-primary',
194
+ ' Heading underline: <div className="w-12 h-1 bg-primary rounded-full mt-3" />',
195
+ '',
196
+ '## 13. Icon Bullets — Replace Plain Lists',
197
+ 'NEVER bare <ul className="list-disc">. Use icon + text with flex items-start gap-3.',
198
+ '',
199
+ '## 14. Saturated Greys',
200
+ 'Use tinted greys: bg-slate-50 (cool), bg-stone-50 (warm), bg-zinc-50 (neutral). Use semantic tokens.',
201
+ '',
202
+ '## 15. Gradient Hue Rotation',
203
+ 'Gradients rotate hue: from-cyan-400 to-blue-600. Lighter end → nearest bright hue.',
204
+ '',
205
+ '## 16. Responsive Typography',
206
+ 'Headlines: text-2xl sm:text-3xl md:text-4xl lg:text-5xl font-bold tracking-tight',
207
+ 'Body: text-base (stable). Line-height: leading-relaxed for body, leading-tight for headings.',
208
+ '',
209
+ '## 17. Table Recipes',
210
+ 'Stacked primary/secondary text in cells. Avatars for identity rows. Colored pill badges for status.',
211
+ '',
212
+ '## 18. Rich Dropdowns',
213
+ 'Multi-column panels: icon + bold title + gray description per item. Footer with bg-muted.',
214
+ '',
215
+ '## 19. Selectable Cards for Options',
216
+ 'Replace native radios with border-2 rounded-xl p-5 cards. Selected: border-primary + checkmark.',
217
+ '',
218
+ '## 20. Empty States',
219
+ 'HIDE filters/tabs when no data. Show: muted icon → heading → description → CTA. Center with py-16.',
220
+ '',
221
+ '## 21. Personality Archetypes — Pick ONE',
222
+ 'FORMAL/SECURE: rounded, dark hero, blue accent',
223
+ 'CASUAL/FRIENDLY: rounded-xl, light bg, warm accent',
224
+ 'PLAYFUL: rounded-full buttons, vibrant colors, rounded-2xl cards',
225
+ 'LUXURY/MINIMAL: rounded-none, monochrome, extreme whitespace',
226
+ 'CORPORATE/BOLD: dark photo hero with overlay, amber/gold CTA',
227
+ 'MODERN SAAS: rounded-full buttons, purple/violet accent, pill CTAs',
228
+ 'NEVER mix border-radius strategies.',
229
+ '',
230
+ '## 22. Two-Tone Headlines',
231
+ 'Hero headlines: split into <span className="text-foreground">...</span> + <span className="text-primary">...</span>',
232
+ '',
233
+ '## 23. Avatar Edge Definition',
234
+ 'ring-1 ring-black/10 on all avatars. Overlapping: ring-2 ring-background.',
235
+ '',
236
+ '## 24. Image Handling',
237
+ 'object-cover in fixed containers. Icons at wrong size: wrap in bg-primary/10 rounded-full.',
238
+ 'Hero images: always add bg-black/50 or bg-gradient-to-t from-black/60 overlay.',
239
+ '',
240
+ '## 25. Accessible Color',
241
+ 'Body: ≥4.5:1 contrast. Headings: ≥3:1.',
242
+ 'Status badges: bg-emerald-50 text-emerald-700 (GOOD), bg-emerald-400 text-white (BAD — fails contrast).',
243
+ 'ALWAYS pair color with icon for color-blind safety.',
244
+ '',
245
+ '## Interactive States',
246
+ 'Hover: hover:bg-accent or hover:shadow-md. Focus: focus-visible:ring-2.',
247
+ 'Active: active:scale-[0.98]. Disabled: opacity-50 cursor-not-allowed.',
248
+ 'Transitions: transition-all duration-200 ease-out.',
249
+ '',
250
+ '## State Experiences',
251
+ 'Loading: Skeleton placeholders (animate-pulse bg-muted), match final layout.',
252
+ 'Empty: Center vertically, large muted icon, heading, CTA. HIDE filters.',
253
+ 'Error: Friendly tone, near source, Try Again action.',
134
254
  '',
135
255
  'Implementation Mindset:',
136
256
  '- Generate complete, production-ready code in a single pass',
@@ -236,10 +356,8 @@ export async function generateApp(context, model) {
236
356
  const files = parseGeneratedFiles(text);
237
357
  debug(' Parsed', files.length, 'files:', files.map((f) => f.path).join(', '));
238
358
  const history = {
239
- messages: [
240
- { role: 'user', content: prompt },
241
- { role: 'assistant', content: text },
242
- ],
359
+ prompt: { role: 'user', content: prompt },
360
+ response: { role: 'assistant', content: text },
243
361
  };
244
362
  const tokenUsage = {
245
363
  inputTokens: usage?.inputTokens ?? 0,
@@ -256,7 +374,7 @@ export async function refineApp(app, errors, context, history, model) {
256
374
  debug(' Errored files:', erroredFiles.map((f) => f.path).join(', '));
257
375
  const refinementPrompt = buildRefinementPrompt(erroredFiles, allFileNames, errors);
258
376
  debug(' Refinement prompt length:', refinementPrompt.length, 'chars');
259
- debug(' Conversation history:', history.messages.length, 'messages');
377
+ debug(' Conversation history: prompt %d chars, response %d chars', history.prompt.content.length, history.response.content.length);
260
378
  debug(' Calling LLM for refinement with model: %s', typeof model === 'string' ? model : model.modelId);
261
379
  const llmStart = Date.now();
262
380
  const { text, usage } = await generateText({
@@ -266,7 +384,8 @@ export async function refineApp(app, errors, context, history, model) {
266
384
  role: 'system',
267
385
  content: system,
268
386
  },
269
- ...history.messages,
387
+ history.prompt,
388
+ history.response,
270
389
  { role: 'user', content: refinementPrompt },
271
390
  ],
272
391
  });
@@ -275,7 +394,8 @@ export async function refineApp(app, errors, context, history, model) {
275
394
  const files = parseGeneratedFiles(text);
276
395
  debug(' Parsed', files.length, 'files:', files.map((f) => f.path).join(', '));
277
396
  const newHistory = {
278
- messages: [...history.messages, { role: 'user', content: refinementPrompt }, { role: 'assistant', content: text }],
397
+ prompt: history.prompt,
398
+ response: { role: 'assistant', content: text },
279
399
  };
280
400
  const tokenUsage = {
281
401
  inputTokens: usage?.inputTokens ?? 0,
@@ -1 +1 @@
1
- {"version":3,"file":"app-generator.js","sourceRoot":"","sources":["../../src/app-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app-generator.js","sourceRoot":"","sources":["../../src/app-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=app-generator.specs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-generator.specs.d.ts","sourceRoot":"","sources":["../../src/app-generator.specs.ts"],"names":[],"mappings":""}
@@ -0,0 +1,123 @@
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
+ });
123
+ //# sourceMappingURL=app-generator.specs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-generator.specs.js","sourceRoot":"","sources":["../../src/app-generator.specs.ts"],"names":[],"mappings":"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"}