@auto-engineer/component-implementor-react 1.95.0 → 1.96.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.
Files changed (85) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/.turbo/turbo-test.log +6 -6
  3. package/.turbo/turbo-type-check.log +1 -1
  4. package/CHANGELOG.md +72 -0
  5. package/dist/src/commands/implement-component.d.ts.map +1 -1
  6. package/dist/src/commands/implement-component.js +13 -16
  7. package/dist/src/commands/implement-component.js.map +1 -1
  8. package/dist/src/commands/implement-component.test.js +14 -5
  9. package/dist/src/commands/implement-component.test.js.map +1 -1
  10. package/dist/src/extract-code-block.d.ts +1 -0
  11. package/dist/src/extract-code-block.d.ts.map +1 -1
  12. package/dist/src/extract-code-block.js +12 -0
  13. package/dist/src/extract-code-block.js.map +1 -1
  14. package/dist/src/extract-code-block.test.js +28 -1
  15. package/dist/src/extract-code-block.test.js.map +1 -1
  16. package/dist/src/generate-component.d.ts +2 -13
  17. package/dist/src/generate-component.d.ts.map +1 -1
  18. package/dist/src/generate-component.js +4 -29
  19. package/dist/src/generate-component.js.map +1 -1
  20. package/dist/src/generate-component.test.js +18 -22
  21. package/dist/src/generate-component.test.js.map +1 -1
  22. package/dist/src/generate-story.d.ts +2 -12
  23. package/dist/src/generate-story.d.ts.map +1 -1
  24. package/dist/src/generate-story.js +4 -25
  25. package/dist/src/generate-story.js.map +1 -1
  26. package/dist/src/generate-story.test.js +17 -21
  27. package/dist/src/generate-story.test.js.map +1 -1
  28. package/dist/src/generate-test.d.ts +2 -12
  29. package/dist/src/generate-test.d.ts.map +1 -1
  30. package/dist/src/generate-test.js +4 -28
  31. package/dist/src/generate-test.js.map +1 -1
  32. package/dist/src/generate-test.test.js +17 -6
  33. package/dist/src/generate-test.test.js.map +1 -1
  34. package/dist/src/prompt.d.ts +64 -0
  35. package/dist/src/prompt.d.ts.map +1 -0
  36. package/dist/src/prompt.js +481 -0
  37. package/dist/src/prompt.js.map +1 -0
  38. package/dist/src/prompt.test.d.ts +2 -0
  39. package/dist/src/prompt.test.d.ts.map +1 -0
  40. package/dist/src/prompt.test.js +136 -0
  41. package/dist/src/prompt.test.js.map +1 -0
  42. package/dist/src/reconcile.d.ts +8 -0
  43. package/dist/src/reconcile.d.ts.map +1 -0
  44. package/dist/src/reconcile.js +18 -0
  45. package/dist/src/reconcile.js.map +1 -0
  46. package/dist/src/reconcile.test.d.ts +2 -0
  47. package/dist/src/reconcile.test.d.ts.map +1 -0
  48. package/dist/src/reconcile.test.js +108 -0
  49. package/dist/src/reconcile.test.js.map +1 -0
  50. package/dist/src/run.d.ts +2 -0
  51. package/dist/src/run.d.ts.map +1 -0
  52. package/dist/src/run.js +86 -0
  53. package/dist/src/run.js.map +1 -0
  54. package/dist/src/spec-contract.d.ts +9 -0
  55. package/dist/src/spec-contract.d.ts.map +1 -0
  56. package/dist/src/spec-contract.js +16 -0
  57. package/dist/src/spec-contract.js.map +1 -0
  58. package/dist/tsconfig.tsbuildinfo +1 -1
  59. package/improvement-prompt.md +208 -0
  60. package/inputs/action-button/spec.json +50 -0
  61. package/inputs/command-palette/spec.json +62 -0
  62. package/inputs/data-card/spec.json +59 -0
  63. package/inputs/editable-data-table/spec.json +70 -0
  64. package/inputs/multi-step-form/spec.json +66 -0
  65. package/inputs/notification-center/spec.json +67 -0
  66. package/inputs/search-input/spec.json +62 -0
  67. package/inputs/status-badge/spec.json +46 -0
  68. package/package.json +4 -3
  69. package/scripts/improve.ts +592 -0
  70. package/src/commands/implement-component.test.ts +14 -5
  71. package/src/commands/implement-component.ts +13 -17
  72. package/src/extract-code-block.test.ts +33 -1
  73. package/src/extract-code-block.ts +13 -0
  74. package/src/generate-component.test.ts +22 -26
  75. package/src/generate-component.ts +5 -46
  76. package/src/generate-story.test.ts +17 -21
  77. package/src/generate-story.ts +5 -40
  78. package/src/generate-test.test.ts +22 -7
  79. package/src/generate-test.ts +5 -44
  80. package/src/prompt.test.ts +163 -0
  81. package/src/prompt.ts +581 -0
  82. package/src/reconcile.test.ts +127 -0
  83. package/src/reconcile.ts +27 -0
  84. package/src/run.ts +106 -0
  85. package/src/spec-contract.ts +22 -0
@@ -1,5 +1,5 @@
1
1
 
2
- > @auto-engineer/component-implementor-react@1.95.0 build /home/runner/work/auto-engineer/auto-engineer/packages/component-implementor-react
2
+ > @auto-engineer/component-implementor-react@1.96.0 build /home/runner/work/auto-engineer/auto-engineer/packages/component-implementor-react
3
3
  > tsc && tsx ../../scripts/fix-esm-imports.ts
4
4
 
5
5
  Fixed ESM imports in dist/
@@ -1,14 +1,14 @@
1
1
 
2
- > @auto-engineer/component-implementor-react@1.94.0 test /home/runner/work/auto-engineer/auto-engineer/packages/component-implementor-react
2
+ > @auto-engineer/component-implementor-react@1.95.0 test /home/runner/work/auto-engineer/auto-engineer/packages/component-implementor-react
3
3
  > vitest run --reporter=dot
4
4
 
5
5
 
6
6
   RUN  v3.2.4 /home/runner/work/auto-engineer/auto-engineer/packages/component-implementor-react
7
7
 
8
- ····················
8
+ ················································
9
9
 
10
-  Test Files  5 passed (5)
11
-  Tests  20 passed (20)
12
-  Start at  16:17:02
13
-  Duration  2.95s (transform 1.36s, setup 0ms, collect 2.34s, tests 151ms, environment 1ms, prepare 1.99s)
10
+  Test Files  7 passed (7)
11
+  Tests  48 passed (48)
12
+  Start at  00:06:37
13
+  Duration  4.67s (transform 1.34s, setup 0ms, collect 2.85s, tests 288ms, environment 2ms, prepare 3.20s)
14
14
 
@@ -1,4 +1,4 @@
1
1
 
2
- > @auto-engineer/component-implementor-react@1.94.0 type-check /home/runner/work/auto-engineer/auto-engineer/packages/component-implementor-react
2
+ > @auto-engineer/component-implementor-react@1.95.0 type-check /home/runner/work/auto-engineer/auto-engineer/packages/component-implementor-react
3
3
  > tsc --noEmit
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,77 @@
1
1
  # @auto-engineer/component-implementor-react
2
2
 
3
+ ## 1.96.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`81f38b5`](https://github.com/BeOnAuto/auto-engineer/commit/81f38b57044f9556a9f90dca2cd5fc945c9cd34c) Thanks [@SamHatoum](https://github.com/SamHatoum)! - - **packages/pipeline**: add getRunStats method to PipelineReadModel
8
+
9
+ - [`26e7f3e`](https://github.com/BeOnAuto/auto-engineer/commit/26e7f3e445149e3eef2e4872686aff841ff25a70) Thanks [@SamHatoum](https://github.com/SamHatoum)! - - **narrative**: add scene field to NarrativeSchema
10
+
11
+ - [`4a24c5a`](https://github.com/BeOnAuto/auto-engineer/commit/4a24c5a1e62a943760e7d855434e5e2b9a9d9a22) Thanks [@SamHatoum](https://github.com/SamHatoum)! - - **dev-server**: add preWarmed flag to install client dependencies
12
+
13
+ - [`b227607`](https://github.com/BeOnAuto/auto-engineer/commit/b227607fb4cc5e23b4ee12073d48058d6d6031e1) Thanks [@SamHatoum](https://github.com/SamHatoum)! - - **server-generator-apollo-emmett**: remove --ignore-workspace from install command
14
+
15
+ - [`f42888d`](https://github.com/BeOnAuto/auto-engineer/commit/f42888de73e6167e92316b657da7834869e6cf39) Thanks [@SamHatoum](https://github.com/SamHatoum)! - - **narrative**: add JourneyPlanningSchema progressive disclosure variant
16
+
17
+ - [`2709e66`](https://github.com/BeOnAuto/auto-engineer/commit/2709e6650ae277a7abacc4c4b4cbfd5fdc1cbc86) Thanks [@SamHatoum](https://github.com/SamHatoum)! - - **narrative**: export Journey, SceneClassification, SceneRoute, JourneyPlanning types
18
+
19
+ - [`b1a635a`](https://github.com/BeOnAuto/auto-engineer/commit/b1a635aa5845d270086e354685d8277106e9d633) Thanks [@osamanar](https://github.com/osamanar)! - Based on the diff analysis, here's the changelog:
20
+ - Upgraded AI prompt system with detailed, role-based prompts for component, test, story, and reconciler generation
21
+ - Added a reconciliation step that harmonizes generated component code with its Storybook story
22
+ - Introduced an automated improvement loop that evaluates output quality across multiple spec scenarios and iteratively refines prompts
23
+ - Consolidated shared types and spec-building logic into reusable modules, reducing duplication across generators
24
+ - Added sample component specs (action button, data card, search input, and more) for benchmarking prompt quality
25
+
26
+ - [`032349d`](https://github.com/BeOnAuto/auto-engineer/commit/032349d475dd3cea19fe440bf4f903bd473dec60) Thanks [@SamHatoum](https://github.com/SamHatoum)! - - **typical**: pass preWarmed flag from DEPS_PRE_WARMED env var and remove --ignore-workspace
27
+
28
+ - [`a177d2a`](https://github.com/BeOnAuto/auto-engineer/commit/a177d2a07e71e7c6f98146ce8f6287a4d2829c37) Thanks [@SamHatoum](https://github.com/SamHatoum)! - - **narrative**: add SceneRouteSchema and SceneClassificationSchema
29
+
30
+ - [`42d7111`](https://github.com/BeOnAuto/auto-engineer/commit/42d711159577d6844e74955a10361d57b154ca44) Thanks [@SamHatoum](https://github.com/SamHatoum)! - - **packages/pipeline**: add getAllItemStatuses and getAllNodeStatuses to PipelineReadModel
31
+
32
+ - [`19d3375`](https://github.com/BeOnAuto/auto-engineer/commit/19d33751bc6912c1e2745e0f06b860f16bd2056e) Thanks [@github-actions[bot]](https://github.com/github-actions%5Bbot%5D)! - - **server-generator-apollo-emmett**: add null-document guidance to projection template
33
+ - **server-generator-apollo-emmett**: add discriminated union guidance to evolve template
34
+ - **server-generator-apollo-emmett**: fill missing inline object fields with type defaults
35
+ - **server-implementer**: add discriminated union narrowing guidance to prompts
36
+ - **server-implementer**: load full shared directory into implementer context
37
+
38
+ - [`981285d`](https://github.com/BeOnAuto/auto-engineer/commit/981285d9d5fa747a9d924d9388e111750453e0be) Thanks [@SamHatoum](https://github.com/SamHatoum)! - - **dev-server**: add preWarmed flag to install server dependencies
39
+
40
+ - [`267cb9f`](https://github.com/BeOnAuto/auto-engineer/commit/267cb9fd83c90bd4a7e3a9b38c2577b3d744ad61) Thanks [@SamHatoum](https://github.com/SamHatoum)! - - **narrative**: add journeys to modelSchema and JourneyPlanningSchema
41
+
42
+ - [`056ef79`](https://github.com/BeOnAuto/auto-engineer/commit/056ef797bd70346b47f0f0ad2a48a2c567204d46) Thanks [@SamHatoum](https://github.com/SamHatoum)! - - **packages/pipeline**: add GET /run-stats endpoint with pipeline status
43
+
44
+ - [`a6cb7ec`](https://github.com/BeOnAuto/auto-engineer/commit/a6cb7ec9460bc4412e5ce022473815e668774f44) Thanks [@osamanar](https://github.com/osamanar)! - - Improved the starter template for generated React clients
45
+ - Added a run script for easier project execution
46
+
47
+ - [`2e7404e`](https://github.com/BeOnAuto/auto-engineer/commit/2e7404e5ce5f222d0931e63d8adb2f8acbeec494) Thanks [@SamHatoum](https://github.com/SamHatoum)! - - **narrative**: add JourneySchema
48
+
49
+ ### Patch Changes
50
+
51
+ - [`6dfd6cc`](https://github.com/BeOnAuto/auto-engineer/commit/6dfd6ccac984f3f85cfdfd8de9c0771083e1be8d) Thanks [@SamHatoum](https://github.com/SamHatoum)! - - **typical**: add server deps to root for workspace pre-warming
52
+
53
+ - [`991cb70`](https://github.com/BeOnAuto/auto-engineer/commit/991cb70914a145e20f174698418a16e81782221c) Thanks [@SamHatoum](https://github.com/SamHatoum)! - - **typical**: convert typical example to pnpm workspace
54
+
55
+ - [`cf8c874`](https://github.com/BeOnAuto/auto-engineer/commit/cf8c874347eff977663c5f958c9fcba06a65921e) Thanks [@SamHatoum](https://github.com/SamHatoum)! - - **narrative**: add ketchup plan for journey-narrative consolidation RFC
56
+
57
+ - [`f02782d`](https://github.com/BeOnAuto/auto-engineer/commit/f02782d419431234046b0f0bd91ead278f9a1b07) Thanks [@SamHatoum](https://github.com/SamHatoum)! - - **packages/pipeline**: add correlationId query param and use runStats for hasActivity in /run-stats
58
+
59
+ - [`02bf378`](https://github.com/BeOnAuto/auto-engineer/commit/02bf378c5f26061efef1636abdffa472600b8103) Thanks [@SamHatoum](https://github.com/SamHatoum)! - - **pipeline**: sort exports to fix biome organizeImports error
60
+
61
+ - [`b1d6595`](https://github.com/BeOnAuto/auto-engineer/commit/b1d6595116b32332e38ee7b34a2b274ada8d173e) Thanks [@SamHatoum](https://github.com/SamHatoum)! - - Updated esbuild build tool dependencies to latest versions
62
+
63
+ - [`c756f3f`](https://github.com/BeOnAuto/auto-engineer/commit/c756f3fed9c48547b2709128c76ab81262ce25c6) Thanks [@SamHatoum](https://github.com/SamHatoum)! - - **narrative**: update ketchup-plan and apply linter fixes
64
+
65
+ - [`06efd83`](https://github.com/BeOnAuto/auto-engineer/commit/06efd83cb0c813fc5e869ac9f3ff7811a3857940) Thanks [@SamHatoum](https://github.com/SamHatoum)! - - **cli**: increase server test timeouts for CI reliability
66
+
67
+ - [`a5cb16c`](https://github.com/BeOnAuto/auto-engineer/commit/a5cb16ccf7b3758e39b8bf2d96ce164b7e3d2bc6) Thanks [@SamHatoum](https://github.com/SamHatoum)! - - **typical**: update lockfile for server deps
68
+
69
+ - [`784c650`](https://github.com/BeOnAuto/auto-engineer/commit/784c6504222da8bd8557cfde80252866fc2b69ef) Thanks [@SamHatoum](https://github.com/SamHatoum)! - - **pipeline**: export RunStats type from package index
70
+
71
+ - Updated dependencies [[`81f38b5`](https://github.com/BeOnAuto/auto-engineer/commit/81f38b57044f9556a9f90dca2cd5fc945c9cd34c), [`26e7f3e`](https://github.com/BeOnAuto/auto-engineer/commit/26e7f3e445149e3eef2e4872686aff841ff25a70), [`4a24c5a`](https://github.com/BeOnAuto/auto-engineer/commit/4a24c5a1e62a943760e7d855434e5e2b9a9d9a22), [`6dfd6cc`](https://github.com/BeOnAuto/auto-engineer/commit/6dfd6ccac984f3f85cfdfd8de9c0771083e1be8d), [`b227607`](https://github.com/BeOnAuto/auto-engineer/commit/b227607fb4cc5e23b4ee12073d48058d6d6031e1), [`f42888d`](https://github.com/BeOnAuto/auto-engineer/commit/f42888de73e6167e92316b657da7834869e6cf39), [`991cb70`](https://github.com/BeOnAuto/auto-engineer/commit/991cb70914a145e20f174698418a16e81782221c), [`2709e66`](https://github.com/BeOnAuto/auto-engineer/commit/2709e6650ae277a7abacc4c4b4cbfd5fdc1cbc86), [`b1a635a`](https://github.com/BeOnAuto/auto-engineer/commit/b1a635aa5845d270086e354685d8277106e9d633), [`032349d`](https://github.com/BeOnAuto/auto-engineer/commit/032349d475dd3cea19fe440bf4f903bd473dec60), [`cf8c874`](https://github.com/BeOnAuto/auto-engineer/commit/cf8c874347eff977663c5f958c9fcba06a65921e), [`a177d2a`](https://github.com/BeOnAuto/auto-engineer/commit/a177d2a07e71e7c6f98146ce8f6287a4d2829c37), [`f02782d`](https://github.com/BeOnAuto/auto-engineer/commit/f02782d419431234046b0f0bd91ead278f9a1b07), [`02bf378`](https://github.com/BeOnAuto/auto-engineer/commit/02bf378c5f26061efef1636abdffa472600b8103), [`42d7111`](https://github.com/BeOnAuto/auto-engineer/commit/42d711159577d6844e74955a10361d57b154ca44), [`19d3375`](https://github.com/BeOnAuto/auto-engineer/commit/19d33751bc6912c1e2745e0f06b860f16bd2056e), [`b1d6595`](https://github.com/BeOnAuto/auto-engineer/commit/b1d6595116b32332e38ee7b34a2b274ada8d173e), [`981285d`](https://github.com/BeOnAuto/auto-engineer/commit/981285d9d5fa747a9d924d9388e111750453e0be), [`c756f3f`](https://github.com/BeOnAuto/auto-engineer/commit/c756f3fed9c48547b2709128c76ab81262ce25c6), [`267cb9f`](https://github.com/BeOnAuto/auto-engineer/commit/267cb9fd83c90bd4a7e3a9b38c2577b3d744ad61), [`056ef79`](https://github.com/BeOnAuto/auto-engineer/commit/056ef797bd70346b47f0f0ad2a48a2c567204d46), [`06efd83`](https://github.com/BeOnAuto/auto-engineer/commit/06efd83cb0c813fc5e869ac9f3ff7811a3857940), [`a5cb16c`](https://github.com/BeOnAuto/auto-engineer/commit/a5cb16ccf7b3758e39b8bf2d96ce164b7e3d2bc6), [`784c650`](https://github.com/BeOnAuto/auto-engineer/commit/784c6504222da8bd8557cfde80252866fc2b69ef), [`a6cb7ec`](https://github.com/BeOnAuto/auto-engineer/commit/a6cb7ec9460bc4412e5ce022473815e668774f44), [`2e7404e`](https://github.com/BeOnAuto/auto-engineer/commit/2e7404e5ce5f222d0931e63d8adb2f8acbeec494)]:
72
+ - @auto-engineer/message-bus@1.96.0
73
+ - @auto-engineer/model-factory@1.96.0
74
+
3
75
  ## 1.95.0
4
76
 
5
77
  ### Minor Changes
@@ -1 +1 @@
1
- {"version":3,"file":"implement-component.d.ts","sourceRoot":"","sources":["../../../src/commands/implement-component.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,OAAO,EAAwB,KAAK,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAQ5F,KAAK,mBAAmB,GAAG;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACjD,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,OAAO,EAAE,mBAAmB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAC7C,oBAAoB,EACpB;IACE,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,YAAY,CAAC;CACnB,CACF,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,KAAK,CAC3C,sBAAsB,EACtB;IACE,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CACF,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG,KAAK,CACpD,+BAA+B,EAC/B;IACE,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CACF,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,yBAAyB,GAAG,kCAAkC,CAAC;AAuBtG,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,yBAAyB,GAAG,kCAAkC,CAAC,CA8EzE;AAED,eAAO,MAAM,cAAc;;;;;;GA2BzB,CAAC;AAEH,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"implement-component.d.ts","sourceRoot":"","sources":["../../../src/commands/implement-component.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,OAAO,EAAwB,KAAK,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAS5F,KAAK,mBAAmB,GAAG;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CACjD,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,OAAO,EAAE,mBAAmB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAC7C,oBAAoB,EACpB;IACE,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,YAAY,CAAC;CACnB,CACF,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,KAAK,CAC3C,sBAAsB,EACtB;IACE,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CACF,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG,KAAK,CACpD,+BAA+B,EAC/B;IACE,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,CACF,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,yBAAyB,GAAG,kCAAkC,CAAC;AAuBtG,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,yBAAyB,GAAG,kCAAkC,CAAC,CAyEzE;AAED,eAAO,MAAM,cAAc;;;;;;GA2BzB,CAAC;AAEH,eAAe,cAAc,CAAC"}
@@ -6,6 +6,7 @@ import createDebug from 'debug';
6
6
  import { generateComponentFile } from '../generate-component.js';
7
7
  import { generateStoryFile } from '../generate-story.js';
8
8
  import { generateTestFile } from '../generate-test.js';
9
+ import { reconcile } from '../reconcile.js';
9
10
  const debug = createDebug('auto:component-implementor-react:command');
10
11
  function pascalCase(id) {
11
12
  return id
@@ -40,30 +41,26 @@ export async function handleImplementComponent(command) {
40
41
  interaction: payload.interaction,
41
42
  styling: payload.styling,
42
43
  };
43
- debug('Generating test file...');
44
- const testCode = await generateTestFile({
45
- componentName,
46
- specDeltas,
47
- existingComponent,
48
- });
49
- debug('Generating component file...');
50
- const componentCode = await generateComponentFile({
44
+ debug('Running Frontend, Tester, and Story agents in parallel...');
45
+ const [componentCode, testCode, storyCode] = await Promise.all([
46
+ generateComponentFile({ componentName, specDeltas, existingComponent }),
47
+ generateTestFile({ componentName, specDeltas, existingComponent }),
48
+ generateStoryFile({ componentName, specDeltas }),
49
+ ]);
50
+ debug('Reconciling component and story against tests...');
51
+ const reconciled = await reconcile({
51
52
  componentName,
52
53
  specDeltas,
54
+ componentCode,
53
55
  testCode,
56
+ storyCode,
54
57
  existingComponent,
55
58
  });
56
- debug('Generating story file...');
57
- const storyCode = await generateStoryFile({
58
- componentName,
59
- specDeltas,
60
- componentCode,
61
- });
62
59
  await mkdir(path.dirname(testPath), { recursive: true });
63
60
  await Promise.all([
64
61
  writeFile(testPath, testCode, 'utf-8'),
65
- writeFile(componentPath, componentCode, 'utf-8'),
66
- writeFile(storyPath, storyCode, 'utf-8'),
62
+ writeFile(componentPath, reconciled.componentCode, 'utf-8'),
63
+ writeFile(storyPath, reconciled.storyCode, 'utf-8'),
67
64
  ]);
68
65
  debug('Wrote 3 files for %s', componentName);
69
66
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"implement-component.js","sourceRoot":"","sources":["../../../src/commands/implement-component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"implement-component.js","sourceRoot":"","sources":["../../../src/commands/implement-component.ts"],"names":[],"mappings":"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"}
@@ -47,12 +47,17 @@ describe('implement-component', () => {
47
47
  vi.clearAllMocks();
48
48
  });
49
49
  describe('handleImplementComponent', () => {
50
- it('generates 3 files and returns ComponentImplemented on success', async () => {
50
+ it('generates 3 files via parallel agents + reconciliation and returns ComponentImplemented', async () => {
51
51
  const mockGenerateText = vi.mocked(generateText);
52
+ // Phase 1: 3 parallel calls (component, test, story)
52
53
  mockGenerateText
53
- .mockResolvedValueOnce({ text: 'test file code' })
54
54
  .mockResolvedValueOnce({ text: 'component file code' })
55
- .mockResolvedValueOnce({ text: 'story file code' });
55
+ .mockResolvedValueOnce({ text: 'test file code' })
56
+ .mockResolvedValueOnce({ text: 'story file code' })
57
+ // Phase 2: reconciliation
58
+ .mockResolvedValueOnce({
59
+ text: '```tsx\nreconciled component\n```\n\n```tsx\nreconciled story\n```',
60
+ });
56
61
  vi.mocked(existsSync).mockReturnValue(false);
57
62
  vi.mocked(writeFile).mockResolvedValue(undefined);
58
63
  const result = await handleImplementComponent(makeCommand());
@@ -73,14 +78,18 @@ describe('implement-component', () => {
73
78
  requestId: 'req-1',
74
79
  correlationId: 'cor-1',
75
80
  });
81
+ expect(mockGenerateText).toHaveBeenCalledTimes(4);
76
82
  expect(writeFile).toHaveBeenCalledTimes(3);
77
83
  });
78
84
  it('reads existing component when modifying', async () => {
79
85
  const mockGenerateText = vi.mocked(generateText);
80
86
  mockGenerateText
81
- .mockResolvedValueOnce({ text: 'test code' })
82
87
  .mockResolvedValueOnce({ text: 'component code' })
83
- .mockResolvedValueOnce({ text: 'story code' });
88
+ .mockResolvedValueOnce({ text: 'test code' })
89
+ .mockResolvedValueOnce({ text: 'story code' })
90
+ .mockResolvedValueOnce({
91
+ text: '```tsx\nrc\n```\n```tsx\nrs\n```',
92
+ });
84
93
  vi.mocked(existsSync).mockReturnValue(true);
85
94
  vi.mocked(readFile).mockResolvedValue('existing component code');
86
95
  vi.mocked(writeFile).mockResolvedValue(undefined);
@@ -1 +1 @@
1
- {"version":3,"file":"implement-component.test.js","sourceRoot":"","sources":["../../../src/commands/implement-component.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"implement-component.test.js","sourceRoot":"","sources":["../../../src/commands/implement-component.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE7D,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IACnB,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE;CACtB,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7C,kBAAkB,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC;CAC9C,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE;IACjB,SAAS,EAAE,EAAE,CAAC,EAAE,EAAE;IAClB,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;CACf,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IACxB,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;CACpB,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAEjF,SAAS,WAAW,CAAC,YAAqC,EAAE;IAC1D,OAAO;QACL,IAAI,EAAE,oBAA6B;QACnC,IAAI,EAAE;YACJ,SAAS,EAAE,iBAAiB;YAC5B,GAAG,EAAE;gBACH,EAAE,EAAE,OAAO;gBACX,SAAS,EAAE,EAAE;gBACb,MAAM,EAAE,oBAA6B;gBACrC,OAAO,EAAE;oBACP,WAAW,EAAE,WAAW;oBACxB,SAAS,EAAE,CAAC,0BAA0B,CAAC;oBACvC,SAAS,EAAE,CAAC,4BAA4B,CAAC;oBACzC,WAAW,EAAE,CAAC,uBAAuB,CAAC;oBACtC,OAAO,EAAE,CAAC,oBAAoB,CAAC;oBAC/B,aAAa,EAAE,wCAAwC;oBACvD,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,gCAAgC,CAAC,EAAE;iBACtD;aACF;YACD,GAAG,SAAS;SACb;QACD,SAAS,EAAE,OAAO;QAClB,aAAa,EAAE,OAAO;KACvB,CAAC;AACJ,CAAC;AAED,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,aAAa,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,yFAAyF,EAAE,KAAK,IAAI,EAAE;YACvG,MAAM,gBAAgB,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACjD,qDAAqD;YACrD,gBAAgB;iBACb,qBAAqB,CAAC,EAAE,IAAI,EAAE,qBAAqB,EAA8C,CAAC;iBAClG,qBAAqB,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAA8C,CAAC;iBAC7F,qBAAqB,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAA8C,CAAC;gBAC/F,0BAA0B;iBACzB,qBAAqB,CAAC;gBACrB,IAAI,EAAE,oEAAoE;aAC/B,CAAC,CAAC;YAEjD,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAC7C,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAElD,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,WAAW,EAAE,CAAC,CAAC;YAE7D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,sBAAsB;gBAC5B,IAAI,EAAE;oBACJ,IAAI,EAAE,UAAU;oBAChB,aAAa,EAAE,gDAAgD;oBAC/D,QAAQ,EAAE,qDAAqD;oBAC/D,SAAS,EAAE,wDAAwD;oBACnE,YAAY,EAAE;wBACZ,qDAAqD;wBACrD,gDAAgD;wBAChD,wDAAwD;qBACzD;iBACF;gBACD,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC3B,SAAS,EAAE,OAAO;gBAClB,aAAa,EAAE,OAAO;aACvB,CAAC,CAAC;YAEH,MAAM,CAAC,gBAAgB,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YAClD,MAAM,CAAC,SAAS,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YACvD,MAAM,gBAAgB,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACjD,gBAAgB;iBACb,qBAAqB,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAA8C,CAAC;iBAC7F,qBAAqB,CAAC,EAAE,IAAI,EAAE,WAAW,EAA8C,CAAC;iBACxF,qBAAqB,CAAC,EAAE,IAAI,EAAE,YAAY,EAA8C,CAAC;iBACzF,qBAAqB,CAAC;gBACrB,IAAI,EAAE,kCAAkC;aACG,CAAC,CAAC;YAEjD,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAC5C,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,iBAAiB,CAAC,yBAAkC,CAAC,CAAC;YAC1E,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAElD,MAAM,OAAO,GAAG,WAAW,CAAC;gBAC1B,GAAG,EAAE;oBACH,EAAE,EAAE,OAAO;oBACX,SAAS,EAAE,EAAE;oBACb,MAAM,EAAE,oBAAoB;oBAC5B,OAAO,EAAE;wBACP,WAAW,EAAE,WAAW;wBACxB,SAAS,EAAE,CAAC,kBAAkB,CAAC;wBAC/B,SAAS,EAAE,EAAE;wBACb,WAAW,EAAE,EAAE;wBACf,OAAO,EAAE,EAAE;wBACX,aAAa,EAAE,wCAAwC;wBACvD,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,gCAAgC,CAAC,EAAE;qBACtD;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,wBAAwB,CAAC,OAAO,CAAC,CAAC;YAExC,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,gDAAgD,EAAE,OAAO,CAAC,CAAC;QACnG,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;YAC9D,MAAM,gBAAgB,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YACjD,gBAAgB,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAEjE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAE7C,MAAM,MAAM,GAAG,MAAM,wBAAwB,CAAC,WAAW,EAAE,CAAC,CAAC;YAE7D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;gBACrB,IAAI,EAAE,+BAA+B;gBACrC,IAAI,EAAE;oBACJ,KAAK,EAAE,iBAAiB;oBACxB,IAAI,EAAE,UAAU;iBACjB;gBACD,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;gBAC3B,SAAS,EAAE,OAAO;gBAClB,aAAa,EAAE,OAAO;aACvB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;YAC9B,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACvD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export declare function extractCodeBlock(text: string): string;
2
+ export declare function extractCodeBlocks(text: string): string[];
2
3
  //# sourceMappingURL=extract-code-block.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"extract-code-block.d.ts","sourceRoot":"","sources":["../../src/extract-code-block.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKrD"}
1
+ {"version":3,"file":"extract-code-block.d.ts","sourceRoot":"","sources":["../../src/extract-code-block.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKrD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAWxD"}
@@ -4,4 +4,16 @@ export function extractCodeBlock(text) {
4
4
  .replace(/```/g, '')
5
5
  .trim();
6
6
  }
7
+ export function extractCodeBlocks(text) {
8
+ const blocks = [];
9
+ const regex = /```(?:tsx?|typescript)?\n([\s\S]*?)```/g;
10
+ let match;
11
+ while ((match = regex.exec(text)) !== null) {
12
+ blocks.push(match[1].trim());
13
+ }
14
+ if (blocks.length === 0) {
15
+ blocks.push(text.trim());
16
+ }
17
+ return blocks;
18
+ }
7
19
  //# sourceMappingURL=extract-code-block.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extract-code-block.js","sourceRoot":"","sources":["../../src/extract-code-block.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,IAAI;SACR,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC;SACvC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;SACnB,IAAI,EAAE,CAAC;AACZ,CAAC"}
1
+ {"version":3,"file":"extract-code-block.js","sourceRoot":"","sources":["../../src/extract-code-block.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,IAAI;SACR,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC;SACvC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;SACnB,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,yCAAyC,CAAC;IACxD,IAAI,KAA6B,CAAC;IAClC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, it } from 'vitest';
2
- import { extractCodeBlock } from './extract-code-block.js';
2
+ import { extractCodeBlock, extractCodeBlocks } from './extract-code-block.js';
3
3
  describe('extractCodeBlock', () => {
4
4
  it('returns plain text unchanged', () => {
5
5
  expect(extractCodeBlock('const x = 1;')).toBe('const x = 1;');
@@ -25,4 +25,31 @@ describe('extractCodeBlock', () => {
25
25
  expect(extractCodeBlock(input)).toBe('const x = 1;');
26
26
  });
27
27
  });
28
+ describe('extractCodeBlocks', () => {
29
+ it('extracts multiple code blocks', () => {
30
+ const input = '```tsx\ncomponent code\n```\n\nsome text\n\n```tsx\nstory code\n```';
31
+ const blocks = extractCodeBlocks(input);
32
+ expect(blocks).toEqual(['component code', 'story code']);
33
+ });
34
+ it('extracts blocks with different language tags', () => {
35
+ const input = '```tsx\nfirst block\n```\n```ts\nsecond block\n```';
36
+ const blocks = extractCodeBlocks(input);
37
+ expect(blocks).toEqual(['first block', 'second block']);
38
+ });
39
+ it('extracts bare code blocks', () => {
40
+ const input = '```\nbare block\n```';
41
+ const blocks = extractCodeBlocks(input);
42
+ expect(blocks).toEqual(['bare block']);
43
+ });
44
+ it('falls back to full text when no code blocks found', () => {
45
+ const input = 'plain text content';
46
+ const blocks = extractCodeBlocks(input);
47
+ expect(blocks).toEqual(['plain text content']);
48
+ });
49
+ it('trims content within each block', () => {
50
+ const input = '```tsx\n spaced content \n```';
51
+ const blocks = extractCodeBlocks(input);
52
+ expect(blocks).toEqual(['spaced content']);
53
+ });
54
+ });
28
55
  //# sourceMappingURL=extract-code-block.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extract-code-block.test.js","sourceRoot":"","sources":["../../src/extract-code-block.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,KAAK,GAAG,2BAA2B,CAAC;QAC1C,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,KAAK,GAAG,kCAAkC,CAAC;QACjD,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,KAAK,GAAG,0BAA0B,CAAC;QACzC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,KAAK,GAAG,wBAAwB,CAAC;QACvC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,KAAK,GAAG,mCAAmC,CAAC;QAClD,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"extract-code-block.test.js","sourceRoot":"","sources":["../../src/extract-code-block.test.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,4 @@
1
- type SpecDeltas = {
2
- structure: string[];
3
- rendering: string[];
4
- interaction: string[];
5
- styling: string[];
6
- };
7
- type GenerateComponentInput = {
8
- componentName: string;
9
- specDeltas: SpecDeltas;
10
- testCode: string;
11
- existingComponent?: string;
12
- };
1
+ import { type ComponentPromptInput } from './prompt';
2
+ export type GenerateComponentInput = ComponentPromptInput;
13
3
  export declare function generateComponentFile(input: GenerateComponentInput): Promise<string>;
14
- export {};
15
4
  //# sourceMappingURL=generate-component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate-component.d.ts","sourceRoot":"","sources":["../../src/generate-component.ts"],"names":[],"mappings":"AAIA,KAAK,UAAU,GAAG;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAiCF,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAO1F"}
1
+ {"version":3,"file":"generate-component.d.ts","sourceRoot":"","sources":["../../src/generate-component.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwB,KAAK,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAE3E,MAAM,MAAM,sBAAsB,GAAG,oBAAoB,CAAC;AAE1D,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ1F"}
@@ -1,38 +1,13 @@
1
1
  import { createModelFromEnv } from '@auto-engineer/model-factory';
2
2
  import { generateText } from 'ai';
3
3
  import { extractCodeBlock } from './extract-code-block.js';
4
- function buildSpecSection(heading, items) {
5
- if (items.length === 0)
6
- return '';
7
- return `## ${heading}\n${items.map((i) => `- ${i}`).join('\n')}`;
8
- }
9
- function buildPrompt(input) {
10
- const sections = [
11
- buildSpecSection('Structure', input.specDeltas.structure),
12
- buildSpecSection('Rendering', input.specDeltas.rendering),
13
- buildSpecSection('Interaction', input.specDeltas.interaction),
14
- buildSpecSection('Styling', input.specDeltas.styling),
15
- ]
16
- .filter(Boolean)
17
- .join('\n\n');
18
- const existingContext = input.existingComponent
19
- ? `\n\n## Existing Component\n\`\`\`tsx\n${input.existingComponent}\n\`\`\``
20
- : '';
21
- return `Component: ${input.componentName}\n\n${sections}${existingContext}\n\n## Test File\n\`\`\`tsx\n${input.testCode}\n\`\`\``;
22
- }
23
- const SYSTEM_PROMPT = `You are a React component expert. Write a React component (.tsx) that satisfies the spec and passes the provided test.
24
-
25
- Rules:
26
- - Use functional components with TypeScript
27
- - Export the component as a named export
28
- - Use Tailwind CSS classes for styling
29
- - The component must pass the provided test
30
- - Return ONLY the component file code, no commentary`;
4
+ import { buildComponentPrompt } from './prompt.js';
31
5
  export async function generateComponentFile(input) {
6
+ const { system, prompt } = buildComponentPrompt(input);
32
7
  const { text } = await generateText({
33
8
  model: createModelFromEnv(),
34
- system: SYSTEM_PROMPT,
35
- prompt: buildPrompt(input),
9
+ system,
10
+ prompt,
36
11
  });
37
12
  return extractCodeBlock(text);
38
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generate-component.js","sourceRoot":"","sources":["../../src/generate-component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAgBxD,SAAS,gBAAgB,CAAC,OAAe,EAAE,KAAe;IACxD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,OAAO,MAAM,OAAO,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACnE,CAAC;AAED,SAAS,WAAW,CAAC,KAA6B;IAChD,MAAM,QAAQ,GAAG;QACf,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;QACzD,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;QACzD,gBAAgB,CAAC,aAAa,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC;QAC7D,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;KACtD;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhB,MAAM,eAAe,GAAG,KAAK,CAAC,iBAAiB;QAC7C,CAAC,CAAC,yCAAyC,KAAK,CAAC,iBAAiB,UAAU;QAC5E,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,cAAc,KAAK,CAAC,aAAa,OAAO,QAAQ,GAAG,eAAe,gCAAgC,KAAK,CAAC,QAAQ,UAAU,CAAC;AACpI,CAAC;AAED,MAAM,aAAa,GAAG;;;;;;;qDAO+B,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,KAA6B;IACvE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC;QAClC,KAAK,EAAE,kBAAkB,EAAE;QAC3B,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC;KAC3B,CAAC,CAAC;IACH,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"generate-component.js","sourceRoot":"","sources":["../../src/generate-component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAA6B,MAAM,UAAU,CAAC;AAI3E,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,KAA6B;IACvE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACvD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC;QAClC,KAAK,EAAE,kBAAkB,EAAE;QAC3B,MAAM;QACN,MAAM;KACP,CAAC,CAAC;IACH,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC"}
@@ -25,25 +25,35 @@ describe('generateComponentFile', () => {
25
25
  const result = await generateComponentFile({
26
26
  componentName: 'Button',
27
27
  specDeltas,
28
- testCode: 'import { render } from "@testing-library/react";',
29
28
  });
30
29
  expect(result).toBe('export function Button() { return <button />; }');
31
30
  });
32
- it('includes spec deltas and test code in the prompt', async () => {
31
+ it('passes system prompt with methodology, rules, and checklist', async () => {
33
32
  const mockGenerateText = vi.mocked(generateText);
34
33
  mockGenerateText.mockResolvedValue({
35
34
  text: 'component code',
36
35
  });
37
- await generateComponentFile({
38
- componentName: 'Button',
39
- specDeltas,
40
- testCode: 'describe("Button", () => {})',
36
+ await generateComponentFile({ componentName: 'Button', specDeltas });
37
+ const system = mockGenerateText.mock.calls[0][0].system;
38
+ expect(system).toContain('staff-level frontend engineer');
39
+ expect(system).toContain('METHODOLOGY');
40
+ expect(system).toContain('RULES');
41
+ expect(system).toContain('QUALITY CHECKLIST');
42
+ expect(system).toContain('Named exports');
43
+ expect(system).toContain('Tailwind CSS');
44
+ expect(system).toContain('ARIA roles');
45
+ });
46
+ it('includes spec deltas in the user prompt', async () => {
47
+ const mockGenerateText = vi.mocked(generateText);
48
+ mockGenerateText.mockResolvedValue({
49
+ text: 'component code',
41
50
  });
51
+ await generateComponentFile({ componentName: 'Button', specDeltas });
42
52
  const prompt = mockGenerateText.mock.calls[0][0].prompt;
53
+ expect(prompt).toContain('## Spec Deltas');
43
54
  expect(prompt).toContain('## Structure');
44
55
  expect(prompt).toContain('renders a Button element');
45
- expect(prompt).toContain('## Test File');
46
- expect(prompt).toContain('describe("Button", () => {})');
56
+ expect(prompt).toContain('**Button**');
47
57
  });
48
58
  it('includes existing component code when provided', async () => {
49
59
  const mockGenerateText = vi.mocked(generateText);
@@ -53,25 +63,11 @@ describe('generateComponentFile', () => {
53
63
  await generateComponentFile({
54
64
  componentName: 'Button',
55
65
  specDeltas,
56
- testCode: 'test code',
57
66
  existingComponent: 'export function Button() {}',
58
67
  });
59
68
  const prompt = mockGenerateText.mock.calls[0][0].prompt;
60
69
  expect(prompt).toContain('## Existing Component');
61
70
  expect(prompt).toContain('export function Button() {}');
62
71
  });
63
- it('uses system prompt referencing React component generation', async () => {
64
- const mockGenerateText = vi.mocked(generateText);
65
- mockGenerateText.mockResolvedValue({
66
- text: 'code',
67
- });
68
- await generateComponentFile({
69
- componentName: 'Button',
70
- specDeltas,
71
- testCode: 'test',
72
- });
73
- const system = mockGenerateText.mock.calls[0][0].system;
74
- expect(system).toContain('React');
75
- });
76
72
  });
77
73
  //# sourceMappingURL=generate-component.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate-component.test.js","sourceRoot":"","sources":["../../src/generate-component.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate-component.test.js","sourceRoot":"","sources":["../../src/generate-component.test.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,4 @@
1
- type SpecDeltas = {
2
- structure: string[];
3
- rendering: string[];
4
- interaction: string[];
5
- styling: string[];
6
- };
7
- type GenerateStoryInput = {
8
- componentName: string;
9
- specDeltas: SpecDeltas;
10
- componentCode: string;
11
- };
1
+ import { type StoryPromptInput } from './prompt';
2
+ export type GenerateStoryInput = StoryPromptInput;
12
3
  export declare function generateStoryFile(input: GenerateStoryInput): Promise<string>;
13
- export {};
14
4
  //# sourceMappingURL=generate-story.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generate-story.d.ts","sourceRoot":"","sources":["../../src/generate-story.ts"],"names":[],"mappings":"AAIA,KAAK,UAAU,GAAG;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AA4BF,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAOlF"}
1
+ {"version":3,"file":"generate-story.d.ts","sourceRoot":"","sources":["../../src/generate-story.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEnE,MAAM,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAElD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAQlF"}
@@ -1,34 +1,13 @@
1
1
  import { createModelFromEnv } from '@auto-engineer/model-factory';
2
2
  import { generateText } from 'ai';
3
3
  import { extractCodeBlock } from './extract-code-block.js';
4
- function buildSpecSection(heading, items) {
5
- if (items.length === 0)
6
- return '';
7
- return `## ${heading}\n${items.map((i) => `- ${i}`).join('\n')}`;
8
- }
9
- function buildPrompt(input) {
10
- const sections = [
11
- buildSpecSection('Structure', input.specDeltas.structure),
12
- buildSpecSection('Rendering', input.specDeltas.rendering),
13
- buildSpecSection('Interaction', input.specDeltas.interaction),
14
- buildSpecSection('Styling', input.specDeltas.styling),
15
- ]
16
- .filter(Boolean)
17
- .join('\n\n');
18
- return `Component: ${input.componentName}\n\n${sections}\n\n## Component Code\n\`\`\`tsx\n${input.componentCode}\n\`\`\``;
19
- }
20
- const SYSTEM_PROMPT = `You are a Storybook expert. Write a Storybook story file (.stories.tsx) for the described React component.
21
-
22
- Rules:
23
- - Use CSF3 format (export default meta, named story exports)
24
- - Import Meta and StoryObj from @storybook/react
25
- - Create stories that showcase different states from the spec
26
- - Return ONLY the story file code, no commentary`;
4
+ import { buildStoryPrompt } from './prompt.js';
27
5
  export async function generateStoryFile(input) {
6
+ const { system, prompt } = buildStoryPrompt(input);
28
7
  const { text } = await generateText({
29
8
  model: createModelFromEnv(),
30
- system: SYSTEM_PROMPT,
31
- prompt: buildPrompt(input),
9
+ system,
10
+ prompt,
32
11
  });
33
12
  return extractCodeBlock(text);
34
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generate-story.js","sourceRoot":"","sources":["../../src/generate-story.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAexD,SAAS,gBAAgB,CAAC,OAAe,EAAE,KAAe;IACxD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,OAAO,MAAM,OAAO,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACnE,CAAC;AAED,SAAS,WAAW,CAAC,KAAyB;IAC5C,MAAM,QAAQ,GAAG;QACf,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;QACzD,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;QACzD,gBAAgB,CAAC,aAAa,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC;QAC7D,gBAAgB,CAAC,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;KACtD;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhB,OAAO,cAAc,KAAK,CAAC,aAAa,OAAO,QAAQ,qCAAqC,KAAK,CAAC,aAAa,UAAU,CAAC;AAC5H,CAAC;AAED,MAAM,aAAa,GAAG;;;;;;iDAM2B,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAyB;IAC/D,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC;QAClC,KAAK,EAAE,kBAAkB,EAAE;QAC3B,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,WAAW,CAAC,KAAK,CAAC;KAC3B,CAAC,CAAC;IACH,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"generate-story.js","sourceRoot":"","sources":["../../src/generate-story.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAyB,MAAM,UAAU,CAAC;AAInE,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAyB;IAC/D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,YAAY,CAAC;QAClC,KAAK,EAAE,kBAAkB,EAAE;QAC3B,MAAM;QACN,MAAM;KACP,CAAC,CAAC;IACH,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC"}