popeye-cli 1.4.7 → 1.6.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 (214) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +264 -63
  3. package/dist/adapters/gemini.d.ts +1 -0
  4. package/dist/adapters/gemini.d.ts.map +1 -1
  5. package/dist/adapters/gemini.js +9 -4
  6. package/dist/adapters/gemini.js.map +1 -1
  7. package/dist/adapters/grok.d.ts +1 -0
  8. package/dist/adapters/grok.d.ts.map +1 -1
  9. package/dist/adapters/grok.js +9 -4
  10. package/dist/adapters/grok.js.map +1 -1
  11. package/dist/adapters/openai.d.ts +1 -1
  12. package/dist/adapters/openai.d.ts.map +1 -1
  13. package/dist/adapters/openai.js +35 -9
  14. package/dist/adapters/openai.js.map +1 -1
  15. package/dist/cli/commands/create.d.ts.map +1 -1
  16. package/dist/cli/commands/create.js +54 -4
  17. package/dist/cli/commands/create.js.map +1 -1
  18. package/dist/cli/interactive.d.ts +29 -0
  19. package/dist/cli/interactive.d.ts.map +1 -1
  20. package/dist/cli/interactive.js +132 -7
  21. package/dist/cli/interactive.js.map +1 -1
  22. package/dist/generators/all.d.ts +8 -2
  23. package/dist/generators/all.d.ts.map +1 -1
  24. package/dist/generators/all.js +37 -316
  25. package/dist/generators/all.js.map +1 -1
  26. package/dist/generators/doc-parser.d.ts +64 -0
  27. package/dist/generators/doc-parser.d.ts.map +1 -0
  28. package/dist/generators/doc-parser.js +407 -0
  29. package/dist/generators/doc-parser.js.map +1 -0
  30. package/dist/generators/frontend-design-analyzer.d.ts +30 -0
  31. package/dist/generators/frontend-design-analyzer.d.ts.map +1 -0
  32. package/dist/generators/frontend-design-analyzer.js +208 -0
  33. package/dist/generators/frontend-design-analyzer.js.map +1 -0
  34. package/dist/generators/shared-packages.d.ts +45 -0
  35. package/dist/generators/shared-packages.d.ts.map +1 -0
  36. package/dist/generators/shared-packages.js +456 -0
  37. package/dist/generators/shared-packages.js.map +1 -0
  38. package/dist/generators/templates/index.d.ts +8 -0
  39. package/dist/generators/templates/index.d.ts.map +1 -1
  40. package/dist/generators/templates/index.js +8 -0
  41. package/dist/generators/templates/index.js.map +1 -1
  42. package/dist/generators/templates/website-components.d.ts +33 -0
  43. package/dist/generators/templates/website-components.d.ts.map +1 -0
  44. package/dist/generators/templates/website-components.js +303 -0
  45. package/dist/generators/templates/website-components.js.map +1 -0
  46. package/dist/generators/templates/website-config.d.ts +55 -0
  47. package/dist/generators/templates/website-config.d.ts.map +1 -0
  48. package/dist/generators/templates/website-config.js +425 -0
  49. package/dist/generators/templates/website-config.js.map +1 -0
  50. package/dist/generators/templates/website-conversion.d.ts +27 -0
  51. package/dist/generators/templates/website-conversion.d.ts.map +1 -0
  52. package/dist/generators/templates/website-conversion.js +326 -0
  53. package/dist/generators/templates/website-conversion.js.map +1 -0
  54. package/dist/generators/templates/website-landing.d.ts +24 -0
  55. package/dist/generators/templates/website-landing.d.ts.map +1 -0
  56. package/dist/generators/templates/website-landing.js +276 -0
  57. package/dist/generators/templates/website-landing.js.map +1 -0
  58. package/dist/generators/templates/website-layout.d.ts +42 -0
  59. package/dist/generators/templates/website-layout.d.ts.map +1 -0
  60. package/dist/generators/templates/website-layout.js +408 -0
  61. package/dist/generators/templates/website-layout.js.map +1 -0
  62. package/dist/generators/templates/website-pricing.d.ts +11 -0
  63. package/dist/generators/templates/website-pricing.d.ts.map +1 -0
  64. package/dist/generators/templates/website-pricing.js +313 -0
  65. package/dist/generators/templates/website-pricing.js.map +1 -0
  66. package/dist/generators/templates/website-sections.d.ts +102 -0
  67. package/dist/generators/templates/website-sections.d.ts.map +1 -0
  68. package/dist/generators/templates/website-sections.js +444 -0
  69. package/dist/generators/templates/website-sections.js.map +1 -0
  70. package/dist/generators/templates/website-seo.d.ts +76 -0
  71. package/dist/generators/templates/website-seo.d.ts.map +1 -0
  72. package/dist/generators/templates/website-seo.js +326 -0
  73. package/dist/generators/templates/website-seo.js.map +1 -0
  74. package/dist/generators/templates/website.d.ts +10 -83
  75. package/dist/generators/templates/website.d.ts.map +1 -1
  76. package/dist/generators/templates/website.js +12 -875
  77. package/dist/generators/templates/website.js.map +1 -1
  78. package/dist/generators/website-content-scanner.d.ts +37 -0
  79. package/dist/generators/website-content-scanner.d.ts.map +1 -0
  80. package/dist/generators/website-content-scanner.js +165 -0
  81. package/dist/generators/website-content-scanner.js.map +1 -0
  82. package/dist/generators/website-context.d.ts +119 -0
  83. package/dist/generators/website-context.d.ts.map +1 -0
  84. package/dist/generators/website-context.js +350 -0
  85. package/dist/generators/website-context.js.map +1 -0
  86. package/dist/generators/website-debug.d.ts +68 -0
  87. package/dist/generators/website-debug.d.ts.map +1 -0
  88. package/dist/generators/website-debug.js +93 -0
  89. package/dist/generators/website-debug.js.map +1 -0
  90. package/dist/generators/website.d.ts +5 -0
  91. package/dist/generators/website.d.ts.map +1 -1
  92. package/dist/generators/website.js +136 -11
  93. package/dist/generators/website.js.map +1 -1
  94. package/dist/generators/workspace-root.d.ts +27 -0
  95. package/dist/generators/workspace-root.d.ts.map +1 -0
  96. package/dist/generators/workspace-root.js +100 -0
  97. package/dist/generators/workspace-root.js.map +1 -0
  98. package/dist/state/index.d.ts +35 -0
  99. package/dist/state/index.d.ts.map +1 -1
  100. package/dist/state/index.js +40 -0
  101. package/dist/state/index.js.map +1 -1
  102. package/dist/types/consensus.d.ts +3 -0
  103. package/dist/types/consensus.d.ts.map +1 -1
  104. package/dist/types/consensus.js +1 -0
  105. package/dist/types/consensus.js.map +1 -1
  106. package/dist/types/website-strategy.d.ts +263 -0
  107. package/dist/types/website-strategy.d.ts.map +1 -0
  108. package/dist/types/website-strategy.js +105 -0
  109. package/dist/types/website-strategy.js.map +1 -0
  110. package/dist/types/workflow.d.ts +21 -0
  111. package/dist/types/workflow.d.ts.map +1 -1
  112. package/dist/types/workflow.js +8 -0
  113. package/dist/types/workflow.js.map +1 -1
  114. package/dist/upgrade/handlers.d.ts +15 -0
  115. package/dist/upgrade/handlers.d.ts.map +1 -1
  116. package/dist/upgrade/handlers.js +52 -0
  117. package/dist/upgrade/handlers.js.map +1 -1
  118. package/dist/workflow/auto-fix-bundler.d.ts +37 -0
  119. package/dist/workflow/auto-fix-bundler.d.ts.map +1 -0
  120. package/dist/workflow/auto-fix-bundler.js +320 -0
  121. package/dist/workflow/auto-fix-bundler.js.map +1 -0
  122. package/dist/workflow/auto-fix.d.ts.map +1 -1
  123. package/dist/workflow/auto-fix.js +10 -3
  124. package/dist/workflow/auto-fix.js.map +1 -1
  125. package/dist/workflow/consensus.d.ts.map +1 -1
  126. package/dist/workflow/consensus.js +2 -0
  127. package/dist/workflow/consensus.js.map +1 -1
  128. package/dist/workflow/execution-mode.d.ts.map +1 -1
  129. package/dist/workflow/execution-mode.js +18 -0
  130. package/dist/workflow/execution-mode.js.map +1 -1
  131. package/dist/workflow/index.d.ts +4 -0
  132. package/dist/workflow/index.d.ts.map +1 -1
  133. package/dist/workflow/index.js +37 -0
  134. package/dist/workflow/index.js.map +1 -1
  135. package/dist/workflow/overview.d.ts +89 -0
  136. package/dist/workflow/overview.d.ts.map +1 -0
  137. package/dist/workflow/overview.js +358 -0
  138. package/dist/workflow/overview.js.map +1 -0
  139. package/dist/workflow/plan-mode.d.ts +6 -4
  140. package/dist/workflow/plan-mode.d.ts.map +1 -1
  141. package/dist/workflow/plan-mode.js +148 -6
  142. package/dist/workflow/plan-mode.js.map +1 -1
  143. package/dist/workflow/website-strategy.d.ts +79 -0
  144. package/dist/workflow/website-strategy.d.ts.map +1 -0
  145. package/dist/workflow/website-strategy.js +310 -0
  146. package/dist/workflow/website-strategy.js.map +1 -0
  147. package/dist/workflow/website-updater.d.ts +17 -0
  148. package/dist/workflow/website-updater.d.ts.map +1 -0
  149. package/dist/workflow/website-updater.js +116 -0
  150. package/dist/workflow/website-updater.js.map +1 -0
  151. package/dist/workflow/workflow-logger.d.ts +1 -1
  152. package/dist/workflow/workflow-logger.d.ts.map +1 -1
  153. package/dist/workflow/workflow-logger.js.map +1 -1
  154. package/package.json +1 -1
  155. package/src/adapters/gemini.ts +10 -4
  156. package/src/adapters/grok.ts +10 -4
  157. package/src/adapters/openai.ts +38 -6
  158. package/src/cli/commands/create.ts +58 -4
  159. package/src/cli/interactive.ts +143 -7
  160. package/src/generators/all.ts +49 -332
  161. package/src/generators/doc-parser.ts +449 -0
  162. package/src/generators/frontend-design-analyzer.ts +261 -0
  163. package/src/generators/shared-packages.ts +500 -0
  164. package/src/generators/templates/index.ts +8 -0
  165. package/src/generators/templates/website-components.ts +330 -0
  166. package/src/generators/templates/website-config.ts +444 -0
  167. package/src/generators/templates/website-conversion.ts +341 -0
  168. package/src/generators/templates/website-landing.ts +331 -0
  169. package/src/generators/templates/website-layout.ts +443 -0
  170. package/src/generators/templates/website-pricing.ts +330 -0
  171. package/src/generators/templates/website-sections.ts +541 -0
  172. package/src/generators/templates/website-seo.ts +370 -0
  173. package/src/generators/templates/website.ts +38 -905
  174. package/src/generators/website-content-scanner.ts +208 -0
  175. package/src/generators/website-context.ts +493 -0
  176. package/src/generators/website-debug.ts +130 -0
  177. package/src/generators/website.ts +178 -20
  178. package/src/generators/workspace-root.ts +113 -0
  179. package/src/state/index.ts +56 -0
  180. package/src/types/consensus.ts +3 -0
  181. package/src/types/website-strategy.ts +243 -0
  182. package/src/types/workflow.ts +21 -0
  183. package/src/upgrade/handlers.ts +65 -0
  184. package/src/workflow/auto-fix-bundler.ts +392 -0
  185. package/src/workflow/auto-fix.ts +11 -3
  186. package/src/workflow/consensus.ts +2 -0
  187. package/src/workflow/execution-mode.ts +21 -0
  188. package/src/workflow/index.ts +37 -0
  189. package/src/workflow/overview.ts +475 -0
  190. package/src/workflow/plan-mode.ts +193 -8
  191. package/src/workflow/website-strategy.ts +379 -0
  192. package/src/workflow/website-updater.ts +142 -0
  193. package/src/workflow/workflow-logger.ts +1 -0
  194. package/tests/adapters/persona-switching.test.ts +63 -0
  195. package/tests/cli/project-naming.test.ts +136 -0
  196. package/tests/generators/doc-parser.test.ts +121 -0
  197. package/tests/generators/frontend-design-analyzer.test.ts +90 -0
  198. package/tests/generators/quality-gate.test.ts +183 -0
  199. package/tests/generators/shared-packages.test.ts +83 -0
  200. package/tests/generators/website-components.test.ts +159 -0
  201. package/tests/generators/website-config.test.ts +84 -0
  202. package/tests/generators/website-content-scanner.test.ts +181 -0
  203. package/tests/generators/website-context.test.ts +331 -0
  204. package/tests/generators/website-debug.test.ts +77 -0
  205. package/tests/generators/website-landing.test.ts +188 -0
  206. package/tests/generators/website-pricing.test.ts +98 -0
  207. package/tests/generators/website-sections.test.ts +245 -0
  208. package/tests/generators/website-seo-quality.test.ts +246 -0
  209. package/tests/generators/workspace-root.test.ts +105 -0
  210. package/tests/upgrade/handlers.test.ts +162 -0
  211. package/tests/workflow/auto-fix-bundler.test.ts +242 -0
  212. package/tests/workflow/overview.test.ts +392 -0
  213. package/tests/workflow/plan-mode.test.ts +111 -1
  214. package/tests/workflow/website-strategy.test.ts +246 -0
@@ -4,7 +4,14 @@
4
4
  */
5
5
  import { promises as fs } from 'node:fs';
6
6
  import path from 'node:path';
7
- import { generateWebsitePackageJson, generateNextConfig, generateWebsiteTsconfig, generateWebsiteTailwindConfig, generateWebsitePostcssConfig, generateWebsiteLayout, generateWebsiteGlobalsCss, generateWebsiteLandingPage, generateWebsitePricingPage, generateWebsiteSitemap, generateWebsiteRobots, generateWebsiteDockerfile, generateWebsiteReadme, generateWebsiteSpec, generateWebsiteVitestConfig, generateWebsiteVitestSetup, generateWebsiteTest, generateWebsiteDocsPage, generateWebsiteBlogPage, generateWebsiteNextEnv, } from './templates/website.js';
7
+ import { generateWebsiteLayout, generateWebsiteGlobalsCss, generateWebsiteLandingPage, generateWebsitePricingPage, generateWebsiteReadme, generateWebsiteSpec, generateWebsiteTest, generateWebsiteDocsPage, generateWebsiteBlogPage, } from './templates/website.js';
8
+ import { generateWebsitePackageJson, generateNextConfig, generateWebsiteTsconfig, generateWebsiteTailwindConfig, generateWebsitePostcssConfig, generateWebsiteDockerfile, generateWebsiteVitestConfig, generateWebsiteVitestSetup, generateWebsiteNextEnv, } from './templates/website-config.js';
9
+ import { generateWebsiteHeader, generateWebsiteFooter, generateWebsiteNavigation, } from './templates/website-components.js';
10
+ import { generateJsonLdComponent, generateEnhancedSitemap, generateEnhancedRobots, generate404Page, generate500Page, generateWebManifest, generateMetaHelper, } from './templates/website-seo.js';
11
+ import { generateLeadCaptureRoute, generateContactForm, generateLeadCaptureEnvExample, } from './templates/website-conversion.js';
12
+ import { validateWebsiteContextOrThrow } from './website-context.js';
13
+ import { scanGeneratedContent } from './website-content-scanner.js';
14
+ import { printDebugTrace, isDebugEnabled } from './website-debug.js';
8
15
  /**
9
16
  * Create a directory if it doesn't exist
10
17
  */
@@ -28,7 +35,7 @@ async function writeFile(filePath, content) {
28
35
  export async function generateWebsiteProject(spec, outputDir, options = {}) {
29
36
  const { baseDir,
30
37
  // packageName reserved for future use
31
- workspaceMode = false, skipDocker = false, skipReadme = false, } = options;
38
+ workspaceMode = false, skipDocker = false, skipReadme = false, contentContext, skipValidation = false, } = options;
32
39
  const projectName = spec.name || 'my-project';
33
40
  // In workspace mode with baseDir, use it directly; otherwise create subdirectory
34
41
  const projectDir = baseDir || path.join(outputDir, projectName);
@@ -40,16 +47,61 @@ export async function generateWebsiteProject(spec, outputDir, options = {}) {
40
47
  await ensureDir(path.join(projectDir, 'src', 'app', 'pricing'));
41
48
  await ensureDir(path.join(projectDir, 'src', 'app', 'docs'));
42
49
  await ensureDir(path.join(projectDir, 'src', 'app', 'blog'));
50
+ await ensureDir(path.join(projectDir, 'src', 'app', 'api', 'lead'));
43
51
  await ensureDir(path.join(projectDir, 'src', 'components'));
44
52
  await ensureDir(path.join(projectDir, 'src', 'lib'));
45
53
  await ensureDir(path.join(projectDir, 'content', 'blog'));
46
54
  await ensureDir(path.join(projectDir, 'content', 'docs'));
47
55
  await ensureDir(path.join(projectDir, 'public'));
56
+ await ensureDir(path.join(projectDir, 'public', 'brand'));
48
57
  await ensureDir(path.join(projectDir, 'tests'));
49
58
  // Only create .popeye dir in standalone mode
50
59
  if (!workspaceMode) {
51
60
  await ensureDir(path.join(projectDir, '.popeye'));
52
61
  }
62
+ // Validate content context quality gate
63
+ if (!skipValidation) {
64
+ const validationContext = contentContext || {
65
+ productName: projectName,
66
+ features: [],
67
+ rawDocs: '',
68
+ };
69
+ validateWebsiteContextOrThrow(validationContext, projectName);
70
+ }
71
+ // Debug trace
72
+ if (isDebugEnabled() && contentContext) {
73
+ const trace = {
74
+ workspaceRoot: projectDir,
75
+ docsFound: contentContext.rawDocs
76
+ ? contentContext.rawDocs.split(/^--- .+ ---$/m).filter(Boolean).map((s, i) => ({
77
+ path: `doc-${i}`,
78
+ size: s.length,
79
+ }))
80
+ : [],
81
+ brandAssets: {
82
+ logoPath: contentContext.brand?.logoPath,
83
+ logoOutputPath: contentContext.brandAssets?.logoOutputPath || 'public/brand/logo.svg',
84
+ },
85
+ productName: {
86
+ value: contentContext.productName,
87
+ source: contentContext.rawDocs ? 'docs' : 'directory',
88
+ },
89
+ primaryColor: {
90
+ value: contentContext.brand?.primaryColor,
91
+ source: contentContext.brand?.primaryColor ? 'brand-docs' : 'defaults',
92
+ },
93
+ strategyStatus: contentContext.strategy ? 'success' : 'skipped',
94
+ templateValues: {
95
+ headline: contentContext.strategy?.messaging.headline,
96
+ features: contentContext.features.length,
97
+ pricingTiers: contentContext.pricing?.length || 0,
98
+ },
99
+ sectionsRendered: [],
100
+ validationPassed: true,
101
+ validationIssues: [],
102
+ };
103
+ printDebugTrace(trace);
104
+ }
53
105
  // Generate and write files
54
106
  const files = [
55
107
  // Config files
@@ -67,7 +119,11 @@ export async function generateWebsiteProject(spec, outputDir, options = {}) {
67
119
  },
68
120
  {
69
121
  path: path.join(projectDir, 'tailwind.config.ts'),
70
- content: generateWebsiteTailwindConfig(),
122
+ content: generateWebsiteTailwindConfig({
123
+ primaryColor: contentContext?.brand?.primaryColor,
124
+ workspaceMode,
125
+ projectName: workspaceMode ? projectName : undefined,
126
+ }),
71
127
  },
72
128
  {
73
129
  path: path.join(projectDir, 'postcss.config.js'),
@@ -84,19 +140,19 @@ export async function generateWebsiteProject(spec, outputDir, options = {}) {
84
140
  // App Router files
85
141
  {
86
142
  path: path.join(projectDir, 'src', 'app', 'layout.tsx'),
87
- content: generateWebsiteLayout(projectName),
143
+ content: generateWebsiteLayout(projectName, contentContext),
88
144
  },
89
145
  {
90
146
  path: path.join(projectDir, 'src', 'app', 'globals.css'),
91
- content: generateWebsiteGlobalsCss(),
147
+ content: generateWebsiteGlobalsCss(contentContext),
92
148
  },
93
149
  {
94
150
  path: path.join(projectDir, 'src', 'app', 'page.tsx'),
95
- content: generateWebsiteLandingPage(projectName),
151
+ content: generateWebsiteLandingPage(projectName, contentContext),
96
152
  },
97
153
  {
98
154
  path: path.join(projectDir, 'src', 'app', 'pricing', 'page.tsx'),
99
- content: generateWebsitePricingPage(projectName),
155
+ content: generateWebsitePricingPage(projectName, contentContext),
100
156
  },
101
157
  {
102
158
  path: path.join(projectDir, 'src', 'app', 'docs', 'page.tsx'),
@@ -106,14 +162,58 @@ export async function generateWebsiteProject(spec, outputDir, options = {}) {
106
162
  path: path.join(projectDir, 'src', 'app', 'blog', 'page.tsx'),
107
163
  content: generateWebsiteBlogPage(),
108
164
  },
165
+ // Shared components
166
+ {
167
+ path: path.join(projectDir, 'src', 'components', 'Header.tsx'),
168
+ content: generateWebsiteHeader(projectName, contentContext, contentContext?.strategy),
169
+ },
170
+ {
171
+ path: path.join(projectDir, 'src', 'components', 'Footer.tsx'),
172
+ content: generateWebsiteFooter(projectName, contentContext, contentContext?.strategy),
173
+ },
174
+ {
175
+ path: path.join(projectDir, 'src', 'components', 'JsonLd.tsx'),
176
+ content: generateJsonLdComponent(),
177
+ },
178
+ {
179
+ path: path.join(projectDir, 'src', 'components', 'ContactForm.tsx'),
180
+ content: generateContactForm(contentContext?.strategy),
181
+ },
182
+ {
183
+ path: path.join(projectDir, 'src', 'lib', 'navigation.ts'),
184
+ content: generateWebsiteNavigation(contentContext?.strategy),
185
+ },
186
+ {
187
+ path: path.join(projectDir, 'src', 'lib', 'metadata.ts'),
188
+ content: generateMetaHelper(projectName, contentContext?.strategy),
189
+ },
190
+ // Lead capture API route
191
+ {
192
+ path: path.join(projectDir, 'src', 'app', 'api', 'lead', 'route.ts'),
193
+ content: generateLeadCaptureRoute(contentContext?.strategy?.conversionStrategy.leadCapture || 'webhook'),
194
+ },
109
195
  // SEO files
110
196
  {
111
197
  path: path.join(projectDir, 'src', 'app', 'sitemap.ts'),
112
- content: generateWebsiteSitemap(projectName),
198
+ content: generateEnhancedSitemap(projectName, contentContext?.strategy),
113
199
  },
114
200
  {
115
201
  path: path.join(projectDir, 'src', 'app', 'robots.ts'),
116
- content: generateWebsiteRobots(projectName),
202
+ content: generateEnhancedRobots(projectName),
203
+ },
204
+ // Error pages
205
+ {
206
+ path: path.join(projectDir, 'src', 'app', 'not-found.tsx'),
207
+ content: generate404Page(projectName, contentContext),
208
+ },
209
+ {
210
+ path: path.join(projectDir, 'src', 'app', 'error.tsx'),
211
+ content: generate500Page(projectName),
212
+ },
213
+ // PWA manifest
214
+ {
215
+ path: path.join(projectDir, 'public', 'manifest.webmanifest'),
216
+ content: generateWebManifest(projectName, contentContext),
117
217
  },
118
218
  // Test files
119
219
  {
@@ -148,7 +248,8 @@ export async function generateWebsiteProject(spec, outputDir, options = {}) {
148
248
  // Environment
149
249
  {
150
250
  path: path.join(projectDir, '.env.example'),
151
- content: 'NEXT_PUBLIC_SITE_URL=http://localhost:3001\nNEXT_PUBLIC_APP_URL=http://localhost:3000\n',
251
+ content: 'NEXT_PUBLIC_SITE_URL=http://localhost:3001\nNEXT_PUBLIC_APP_URL=http://localhost:3000\n' +
252
+ generateLeadCaptureEnvExample(contentContext?.strategy?.conversionStrategy.leadCapture || 'webhook'),
152
253
  },
153
254
  {
154
255
  path: path.join(projectDir, '.gitignore'),
@@ -159,9 +260,21 @@ export async function generateWebsiteProject(spec, outputDir, options = {}) {
159
260
  if (!workspaceMode) {
160
261
  files.push({
161
262
  path: path.join(projectDir, '.popeye', 'website-spec.json'),
162
- content: generateWebsiteSpec(projectName),
263
+ content: generateWebsiteSpec(projectName, contentContext),
163
264
  });
164
265
  }
266
+ // Copy logo to public/brand/ if brand context has one
267
+ if (contentContext?.brand?.logoPath) {
268
+ try {
269
+ const logoExt = path.extname(contentContext.brand.logoPath);
270
+ const destPath = path.join(projectDir, 'public', 'brand', `logo${logoExt}`);
271
+ await fs.copyFile(contentContext.brand.logoPath, destPath);
272
+ filesCreated.push(destPath);
273
+ }
274
+ catch {
275
+ // Non-blocking: logo copy failure should not stop generation
276
+ }
277
+ }
165
278
  // Add README if not skipped
166
279
  if (!skipReadme) {
167
280
  files.push({
@@ -181,6 +294,18 @@ export async function generateWebsiteProject(spec, outputDir, options = {}) {
181
294
  await writeFile(file.path, file.content);
182
295
  filesCreated.push(file.path);
183
296
  }
297
+ // Post-generation content scan for placeholder fingerprints
298
+ try {
299
+ const scanResult = await scanGeneratedContent(projectDir);
300
+ if (scanResult.issues.length > 0) {
301
+ for (const issue of scanResult.issues) {
302
+ console.warn(`[content-scan] ${issue.severity}: ${issue.message} in ${issue.file}`);
303
+ }
304
+ }
305
+ }
306
+ catch {
307
+ // Non-blocking: scan failures should not stop generation
308
+ }
184
309
  return {
185
310
  success: true,
186
311
  projectDir,
@@ -1 +1 @@
1
- {"version":3,"file":"website.js","sourceRoot":"","sources":["../../src/generators/website.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"website.js","sourceRoot":"","sources":["../../src/generators/website.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Workspace root detection
3
+ * Resolves the workspace root directory by walking up the directory tree,
4
+ * looking for Popeye config, monorepo indicators, or package.json with workspaces
5
+ */
6
+ /**
7
+ * Resolve the workspace root directory from a given working directory
8
+ *
9
+ * Heuristic priority:
10
+ * 1. Walk ancestors: first dir containing `.popeye/` -> workspace root
11
+ * 2. First dir containing `package.json` with "workspaces" field
12
+ * 3. First dir containing `pnpm-workspace.yaml` or `turbo.json`
13
+ * 4. `cwd` (fallback)
14
+ *
15
+ * @param cwd - The current working directory
16
+ * @returns The resolved workspace root path
17
+ */
18
+ export declare function resolveWorkspaceRoot(cwd: string): Promise<string>;
19
+ /**
20
+ * Build a list of directories to scan for docs and brand assets
21
+ * Includes workspace root, its parent, and relevant subdirectories
22
+ *
23
+ * @param cwd - The current working directory
24
+ * @returns Array of directories to scan (deduplicated)
25
+ */
26
+ export declare function getScanDirectories(cwd: string): Promise<string[]>;
27
+ //# sourceMappingURL=workspace-root.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-root.d.ts","sourceRoot":"","sources":["../../src/generators/workspace-root.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoCvE;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA4BvE"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Workspace root detection
3
+ * Resolves the workspace root directory by walking up the directory tree,
4
+ * looking for Popeye config, monorepo indicators, or package.json with workspaces
5
+ */
6
+ import { promises as fs } from 'node:fs';
7
+ import path from 'node:path';
8
+ /**
9
+ * Resolve the workspace root directory from a given working directory
10
+ *
11
+ * Heuristic priority:
12
+ * 1. Walk ancestors: first dir containing `.popeye/` -> workspace root
13
+ * 2. First dir containing `package.json` with "workspaces" field
14
+ * 3. First dir containing `pnpm-workspace.yaml` or `turbo.json`
15
+ * 4. `cwd` (fallback)
16
+ *
17
+ * @param cwd - The current working directory
18
+ * @returns The resolved workspace root path
19
+ */
20
+ export async function resolveWorkspaceRoot(cwd) {
21
+ let current = path.resolve(cwd);
22
+ const root = path.parse(current).root;
23
+ while (current !== root) {
24
+ // Check for .popeye/ directory
25
+ if (await dirExists(path.join(current, '.popeye'))) {
26
+ return current;
27
+ }
28
+ // Check for package.json with "workspaces" field
29
+ const pkgJsonPath = path.join(current, 'package.json');
30
+ if (await fileExists(pkgJsonPath)) {
31
+ try {
32
+ const content = await fs.readFile(pkgJsonPath, 'utf-8');
33
+ const pkg = JSON.parse(content);
34
+ if (pkg.workspaces) {
35
+ return current;
36
+ }
37
+ }
38
+ catch {
39
+ // Invalid JSON, skip
40
+ }
41
+ }
42
+ // Check for pnpm-workspace.yaml or turbo.json
43
+ if ((await fileExists(path.join(current, 'pnpm-workspace.yaml'))) ||
44
+ (await fileExists(path.join(current, 'turbo.json')))) {
45
+ return current;
46
+ }
47
+ current = path.dirname(current);
48
+ }
49
+ return cwd;
50
+ }
51
+ /**
52
+ * Build a list of directories to scan for docs and brand assets
53
+ * Includes workspace root, its parent, and relevant subdirectories
54
+ *
55
+ * @param cwd - The current working directory
56
+ * @returns Array of directories to scan (deduplicated)
57
+ */
58
+ export async function getScanDirectories(cwd) {
59
+ const workspaceRoot = await resolveWorkspaceRoot(cwd);
60
+ const parentDir = path.dirname(workspaceRoot);
61
+ const candidates = [workspaceRoot, parentDir];
62
+ const subdirs = ['docs', 'brand', 'assets'];
63
+ for (const base of [workspaceRoot, parentDir]) {
64
+ for (const sub of subdirs) {
65
+ candidates.push(path.join(base, sub));
66
+ }
67
+ }
68
+ // Deduplicate by resolved path and filter to existing directories
69
+ const seen = new Set();
70
+ const result = [];
71
+ for (const dir of candidates) {
72
+ const resolved = path.resolve(dir);
73
+ if (seen.has(resolved))
74
+ continue;
75
+ seen.add(resolved);
76
+ if (await dirExists(resolved)) {
77
+ result.push(resolved);
78
+ }
79
+ }
80
+ return result;
81
+ }
82
+ async function fileExists(filePath) {
83
+ try {
84
+ const stat = await fs.stat(filePath);
85
+ return stat.isFile();
86
+ }
87
+ catch {
88
+ return false;
89
+ }
90
+ }
91
+ async function dirExists(dirPath) {
92
+ try {
93
+ const stat = await fs.stat(dirPath);
94
+ return stat.isDirectory();
95
+ }
96
+ catch {
97
+ return false;
98
+ }
99
+ }
100
+ //# sourceMappingURL=workspace-root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-root.js","sourceRoot":"","sources":["../../src/generators/workspace-root.ts"],"names":[],"mappings":"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"}
@@ -113,6 +113,41 @@ export declare function storePlan(projectDir: string, plan: string): Promise<Pro
113
113
  * @returns The updated state
114
114
  */
115
115
  export declare function storeSpecification(projectDir: string, specification: string): Promise<ProjectState>;
116
+ /**
117
+ * Store discovered user documentation in project state
118
+ *
119
+ * @param projectDir - The project root directory
120
+ * @param userDocs - Combined user documentation content
121
+ * @returns The updated state
122
+ */
123
+ export declare function storeUserDocs(projectDir: string, userDocs: string): Promise<ProjectState>;
124
+ /**
125
+ * Store discovered source document paths in project state
126
+ *
127
+ * @param projectDir - The project root directory
128
+ * @param sourceDocPaths - Array of absolute paths to doc files
129
+ * @returns The updated state
130
+ */
131
+ export declare function storeSourceDocPaths(projectDir: string, sourceDocPaths: string[]): Promise<ProjectState>;
132
+ /**
133
+ * Store brand context in project state
134
+ *
135
+ * @param projectDir - The project root directory
136
+ * @param brandContext - Brand context with logo path and primary color
137
+ * @returns The updated state
138
+ */
139
+ export declare function storeBrandContext(projectDir: string, brandContext: {
140
+ logoPath?: string;
141
+ primaryColor?: string;
142
+ }): Promise<ProjectState>;
143
+ /**
144
+ * Store website strategy path in project state
145
+ *
146
+ * @param projectDir - The project root directory
147
+ * @param strategyPath - Relative path to strategy JSON file
148
+ * @returns The updated state
149
+ */
150
+ export declare function storeWebsiteStrategyPath(projectDir: string, strategyPath: string): Promise<ProjectState>;
116
151
  /**
117
152
  * Mark the project as complete
118
153
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EACV,YAAY,EACZ,IAAI,EACJ,SAAS,EACT,UAAU,EACV,aAAa,EACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAWvD,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAE9B;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,WAAW,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,CAAC,CA8BvB;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAQ3E;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAExE;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAC7B,OAAO,CAAC,YAAY,CAAC,CAiBvB;AAED;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAC5B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,YAAY,CAAC,CAEvB;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,GAClC,OAAO,CAAC,YAAY,CAAC,CA0BvB;AAED;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAC5B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,GAAG,aAAa,CAAC,EAAE,GACnD,OAAO,CAAC,YAAY,CAAC,CAsBvB;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,UAAU,EAClB,iBAAiB,GAAE,OAAO,CAAC,IAAI,CAAM,GACpC,OAAO,CAAC,YAAY,CAAC,CA0BvB;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,OAAO,CAAC,YAAY,CAAC,CAUvB;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,OAAO,CAAC,YAAY,CAAC,CAEvB;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,kBAAkB,GAC5B,OAAO,CAAC,YAAY,CAAC,CAMvB;AAED;;;;;;GAMG;AACH,wBAAsB,SAAS,CAC7B,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,YAAY,CAAC,CAEvB;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,YAAY,CAAC,CAEvB;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,YAAY,CAAC,CAEvB;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,YAAY,CAAC,CAEvB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GACzD,OAAO,CAAC,YAAY,CAAC,CAEvB;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,YAAY,CAAC,CAEvB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAK/E;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAC/B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,YAAY,CAAC,CAKvB;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7D,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC,CAmBD;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7D,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,IAAI,CAAC;CACZ,GAAG,IAAI,CAAC,CAaR;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,YAAY,CAAC,CAmCvB;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAIxE;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IAEtC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,EAAE,OAAO,CAAC;IAGtB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAG1B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IAGpB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAG3B,eAAe,EAAE,MAAM,CAAC;IAGxB,aAAa,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,QAAQ,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAG3D,eAAe,EAAE,MAAM,CAAC;IAGxB,oBAAoB,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClF,eAAe,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzF;AA+GD;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,CA4IjG;AAED;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IACzE,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,uBAAuB,CAAC;CACnC,CAAC,CAmCD;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAmDtF;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAuKlG;AAkCD;;;;;GAKG;AACH,wBAAsB,gCAAgC,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;IAClF,mBAAmB,EAAE,OAAO,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC,CAAC;IACtE,gBAAgB,EAAE,sBAAsB,CAAC;IACzC,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CAsCD"}
@@ -244,6 +244,46 @@ export async function storePlan(projectDir, plan) {
244
244
  export async function storeSpecification(projectDir, specification) {
245
245
  return updateState(projectDir, { specification });
246
246
  }
247
+ /**
248
+ * Store discovered user documentation in project state
249
+ *
250
+ * @param projectDir - The project root directory
251
+ * @param userDocs - Combined user documentation content
252
+ * @returns The updated state
253
+ */
254
+ export async function storeUserDocs(projectDir, userDocs) {
255
+ return updateState(projectDir, { userDocs });
256
+ }
257
+ /**
258
+ * Store discovered source document paths in project state
259
+ *
260
+ * @param projectDir - The project root directory
261
+ * @param sourceDocPaths - Array of absolute paths to doc files
262
+ * @returns The updated state
263
+ */
264
+ export async function storeSourceDocPaths(projectDir, sourceDocPaths) {
265
+ return updateState(projectDir, { sourceDocPaths });
266
+ }
267
+ /**
268
+ * Store brand context in project state
269
+ *
270
+ * @param projectDir - The project root directory
271
+ * @param brandContext - Brand context with logo path and primary color
272
+ * @returns The updated state
273
+ */
274
+ export async function storeBrandContext(projectDir, brandContext) {
275
+ return updateState(projectDir, { brandContext });
276
+ }
277
+ /**
278
+ * Store website strategy path in project state
279
+ *
280
+ * @param projectDir - The project root directory
281
+ * @param strategyPath - Relative path to strategy JSON file
282
+ * @returns The updated state
283
+ */
284
+ export async function storeWebsiteStrategyPath(projectDir, strategyPath) {
285
+ return updateState(projectDir, { websiteStrategy: strategyPath });
286
+ }
247
287
  /**
248
288
  * Mark the project as complete
249
289
  *