@hale-bopp/valentino-engine 1.0.0 → 2.1.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 (71) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/dist/bin/commands/init.d.ts +3 -0
  3. package/dist/bin/commands/init.d.ts.map +1 -0
  4. package/dist/bin/commands/init.js +428 -0
  5. package/dist/bin/commands/init.js.map +1 -0
  6. package/dist/bin/commands/llms.d.ts +2 -0
  7. package/dist/bin/commands/llms.d.ts.map +1 -0
  8. package/dist/bin/commands/llms.js +84 -0
  9. package/dist/bin/commands/llms.js.map +1 -0
  10. package/dist/bin/commands/validate.d.ts.map +1 -1
  11. package/dist/bin/commands/validate.js +152 -11
  12. package/dist/bin/commands/validate.js.map +1 -1
  13. package/dist/bin/valentino.js +10 -0
  14. package/dist/bin/valentino.js.map +1 -1
  15. package/dist/core/animation.d.ts +18 -0
  16. package/dist/core/animation.d.ts.map +1 -0
  17. package/dist/core/animation.js +91 -0
  18. package/dist/core/animation.js.map +1 -0
  19. package/dist/core/encoding.d.ts +32 -0
  20. package/dist/core/encoding.d.ts.map +1 -0
  21. package/dist/core/encoding.js +112 -0
  22. package/dist/core/encoding.js.map +1 -0
  23. package/dist/core/extension-registry.d.ts +64 -0
  24. package/dist/core/extension-registry.d.ts.map +1 -0
  25. package/dist/core/extension-registry.js +62 -0
  26. package/dist/core/extension-registry.js.map +1 -0
  27. package/dist/core/guardrails-cms.d.ts +70 -0
  28. package/dist/core/guardrails-cms.d.ts.map +1 -0
  29. package/dist/core/guardrails-cms.js +299 -0
  30. package/dist/core/guardrails-cms.js.map +1 -0
  31. package/dist/core/hero-contract.js +2 -2
  32. package/dist/core/hero-contract.js.map +1 -1
  33. package/dist/core/hero-contract.test.js +9 -2
  34. package/dist/core/hero-contract.test.js.map +1 -1
  35. package/dist/core/llms-generator.d.ts +36 -0
  36. package/dist/core/llms-generator.d.ts.map +1 -0
  37. package/dist/core/llms-generator.js +95 -0
  38. package/dist/core/llms-generator.js.map +1 -0
  39. package/dist/core/media.d.ts +24 -0
  40. package/dist/core/media.d.ts.map +1 -0
  41. package/dist/core/media.js +16 -0
  42. package/dist/core/media.js.map +1 -0
  43. package/dist/core/page-status.d.ts +18 -0
  44. package/dist/core/page-status.d.ts.map +1 -0
  45. package/dist/core/page-status.js +33 -0
  46. package/dist/core/page-status.js.map +1 -0
  47. package/dist/core/redirects.d.ts +19 -0
  48. package/dist/core/redirects.d.ts.map +1 -0
  49. package/dist/core/redirects.js +17 -0
  50. package/dist/core/redirects.js.map +1 -0
  51. package/dist/core/rhythm.d.ts.map +1 -1
  52. package/dist/core/rhythm.js +20 -1
  53. package/dist/core/rhythm.js.map +1 -1
  54. package/dist/core/rhythm.test.js +6 -6
  55. package/dist/core/rhythm.test.js.map +1 -1
  56. package/dist/core/section-integrity.d.ts.map +1 -1
  57. package/dist/core/section-integrity.js +10 -0
  58. package/dist/core/section-integrity.js.map +1 -1
  59. package/dist/core/section-integrity.test.js +12 -0
  60. package/dist/core/section-integrity.test.js.map +1 -1
  61. package/dist/core/seo.d.ts +26 -0
  62. package/dist/core/seo.d.ts.map +1 -0
  63. package/dist/core/seo.js +49 -0
  64. package/dist/core/seo.js.map +1 -0
  65. package/dist/core/types.d.ts +30 -1
  66. package/dist/core/types.d.ts.map +1 -1
  67. package/dist/index.d.ts +20 -1
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +18 -0
  70. package/dist/index.js.map +1 -1
  71. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,47 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.1.0] — 2026-03-26
4
+
5
+ ### Added
6
+ - **CMS Guardrails (PBI #605)**: 6 new checks — `checkOgImageExists`, `checkMediaOrphans`, `checkMediaMissingAlt`, `checkBreadcrumbDepth`, `checkLanguageCoverage`, `checkDuplicateRoutes` (12/14 total)
7
+ - **LLMs.txt Generator (PBI #614)**: `generateLlmsTxt` (L0 compact) + `generateLlmsFullTxt` (L1 detailed) + CLI `valentino llms`
8
+ - **Animation Presets (PBI #611)**: `AnimationSpec` on `SectionPresentationBase`, 5 presets (fade-up/in, slide-left/right, scale-in), `probeAnimations` validation, `resolveAnimationCSS` for consumers
9
+ - **Encoding Guardrail (PBI #629)**: `checkMojibake` (14 Latin-1/Win-1252 patterns), `checkTypography` (15+ rules for IT/EN/FR/DE/ES), `checkEncoding` combined
10
+
11
+ ### Changed
12
+ - CLI now has 10 commands (was 9): added `llms`
13
+ - Test suite: 239 tests across 16 suites (was 170/13)
14
+ - Core modules: 17 (was 14)
15
+ - `collectPureCmsWarnings` accepts new options: `mediaManifest`, `contentByLang`
16
+
17
+ ## [2.0.0] — 2026-03-26
18
+
19
+ ### Breaking Changes
20
+ - **`resolveMediaUrl(manifest, key)`**: now requires `MediaManifest` as first argument (was single-arg before)
21
+
22
+ ### Added
23
+ - **CMS Module**: `getPageStatus`, `getPublishAt`, `isPageVisible` — page lifecycle management
24
+ - **Redirects Module**: `findRedirect`, `RedirectRule`, `RedirectsConfig` — declarative redirect resolution
25
+ - **Media Module**: `resolveMediaUrl`, `resolveMediaAsset`, `MediaAsset`, `MediaManifest` — media resolution
26
+ - **SEO Module**: `buildWebPageSchema`, `SeoSpec` — Schema.org WebPage generation
27
+ - **Extension Registry**: 6 extension points (custom renderers, guardrails, statuses, content/media resolvers, editor panels)
28
+ - **CMS Guardrails**: 6 pure rules migrated from portal (draft, publishAt, 404, redirects, SEO, maintenance)
29
+ - **CLI `valentino init`**: interactive scaffolding with 4 templates (minimal, product, advisor, conversion)
30
+ - **CLI `valentino validate`**: reads `valentino.guardrails.json`, applies severity per template
31
+ - **ManifestPageV1**: extended with `status`, `publishAt`, `seo` (optional fields)
32
+ - **PagesManifestV1**: added `maintenanceMode` (optional)
33
+ - **PageSpecV1**: added `seo` (optional)
34
+
35
+ ### Changed
36
+ - CLI now has 9 commands (was 7): added `init` and `validate`
37
+ - Test suite: 170 tests across 14 suites (was 109/9)
38
+ - Core modules: 14 (was 10)
39
+
40
+ ### Architecture
41
+ - Full CMS logic extracted from easyway-portal — engine is now standalone
42
+ - Portal reduced to glue code (I/O + DOM), imports everything from engine
43
+ - Consumer example: `examples/minimal-consumer/`
44
+
3
45
  ## [1.0.0] — 2026-03-23
4
46
 
5
47
  ### Added
@@ -0,0 +1,3 @@
1
+ export declare function generateProject(projectDir: string, projectName: string, lang: string, templateId: string, guardrailsEnabled: boolean): void;
2
+ export declare function runInit(args: string[]): Promise<void>;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/init.ts"],"names":[],"mappings":"AA2KA,wBAAgB,eAAe,CAC3B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,iBAAiB,EAAE,OAAO,GAC3B,IAAI,CAkLN;AAoCD,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmF3D"}
@@ -0,0 +1,428 @@
1
+ /**
2
+ * valentino init — Scaffolding interattivo per nuovi progetti.
3
+ * Crea un progetto completo con page spec, content, catalog, guardrails.
4
+ *
5
+ * Usage: valentino init <name> [--template <id>] [--lang <code>] [--git <url>]
6
+ */
7
+ import fs from 'node:fs';
8
+ import path from 'node:path';
9
+ import { execSync } from 'node:child_process';
10
+ import * as readline from 'node:readline';
11
+ const TEMPLATES = {
12
+ 'minimal': {
13
+ label: 'Minimal',
14
+ description: '2 pagine (home + about) — perfetto per iniziare',
15
+ blueprintId: null,
16
+ pages: [
17
+ {
18
+ id: 'home', route: '/', titleKey: 'home.hero.title',
19
+ spec: {
20
+ version: '1', id: 'home',
21
+ sections: [
22
+ { type: 'hero', presentation: { surface: 'dark', rhythmProfile: 'hero' }, titleKey: 'home.hero.title', taglineKey: 'home.hero.tagline' },
23
+ { type: 'cards', presentation: { surface: 'muted', rhythmProfile: 'feature' }, titleKey: 'home.cards.title', variant: 'feature', items: [
24
+ { titleKey: 'home.cards.item1.title', descKey: 'home.cards.item1.desc' },
25
+ { titleKey: 'home.cards.item2.title', descKey: 'home.cards.item2.desc' },
26
+ { titleKey: 'home.cards.item3.title', descKey: 'home.cards.item3.desc' },
27
+ ] },
28
+ { type: 'cta', presentation: { surface: 'accent', rhythmProfile: 'transition' }, titleKey: 'home.cta.title', primary: { labelKey: 'home.cta.primary', action: { type: 'link', href: '/about' } } },
29
+ ],
30
+ },
31
+ contentKeys: {
32
+ 'home.hero.title': 'Welcome to {{name}}',
33
+ 'home.hero.tagline': 'Your tagline here',
34
+ 'home.cards.title': 'What we offer',
35
+ 'home.cards.item1.title': 'Feature 1', 'home.cards.item1.desc': 'Description of feature 1',
36
+ 'home.cards.item2.title': 'Feature 2', 'home.cards.item2.desc': 'Description of feature 2',
37
+ 'home.cards.item3.title': 'Feature 3', 'home.cards.item3.desc': 'Description of feature 3',
38
+ 'home.cta.title': 'Get started', 'home.cta.primary': 'Learn more',
39
+ },
40
+ },
41
+ {
42
+ id: 'about', route: '/about', titleKey: 'about.hero.title',
43
+ spec: {
44
+ version: '1', id: 'about',
45
+ sections: [
46
+ { type: 'hero', presentation: { surface: 'dark', rhythmProfile: 'hero' }, titleKey: 'about.hero.title', taglineKey: 'about.hero.tagline' },
47
+ { type: 'cards', presentation: { surface: 'default', rhythmProfile: 'reading' }, titleKey: 'about.team.title', variant: 'feature', items: [
48
+ { titleKey: 'about.team.item1.title', descKey: 'about.team.item1.desc' },
49
+ { titleKey: 'about.team.item2.title', descKey: 'about.team.item2.desc' },
50
+ ] },
51
+ ],
52
+ },
53
+ contentKeys: {
54
+ 'about.hero.title': 'About us',
55
+ 'about.hero.tagline': 'Our story',
56
+ 'about.team.title': 'The team',
57
+ 'about.team.item1.title': 'Member 1', 'about.team.item1.desc': 'Role and bio',
58
+ 'about.team.item2.title': 'Member 2', 'about.team.item2.desc': 'Role and bio',
59
+ },
60
+ },
61
+ ],
62
+ guardrails: {
63
+ 'seo': { severity: 'warning' },
64
+ 'i18n': { severity: 'off' },
65
+ 'media': { severity: 'warning', maxSizeKb: 500 },
66
+ 'contrast': { severity: 'warning', level: 'AA' },
67
+ 'rhythm': { severity: 'warning' },
68
+ 'draft-orphan': { severity: 'warning' },
69
+ 'redirect': { severity: 'error' },
70
+ '404': { severity: 'error' },
71
+ },
72
+ },
73
+ 'product': {
74
+ label: 'Product',
75
+ description: '4 pagine (hero, offerta, confronto, CTA) — sito prodotto',
76
+ blueprintId: 'product-surface',
77
+ pages: [], // generated from blueprint
78
+ guardrails: {
79
+ 'seo': { severity: 'error', required: true },
80
+ 'i18n': { severity: 'warning', minLanguages: 2 },
81
+ 'media': { severity: 'warning', maxSizeKb: 500 },
82
+ 'contrast': { severity: 'error', level: 'AA' },
83
+ 'rhythm': { severity: 'warning' },
84
+ 'draft-orphan': { severity: 'warning', staleDays: 30 },
85
+ 'redirect': { severity: 'error' },
86
+ '404': { severity: 'error' },
87
+ },
88
+ },
89
+ 'advisor': {
90
+ label: 'Advisor',
91
+ description: '4 pagine con interfaccia consulenza AI',
92
+ blueprintId: 'advisor-review',
93
+ pages: [],
94
+ guardrails: {
95
+ 'seo': { severity: 'warning' },
96
+ 'i18n': { severity: 'off' },
97
+ 'media': { severity: 'warning' },
98
+ 'contrast': { severity: 'error', level: 'AA' },
99
+ 'rhythm': { severity: 'warning' },
100
+ 'form': { severity: 'error' },
101
+ 'cta-presence': { severity: 'error', minCta: 1 },
102
+ '404': { severity: 'error' },
103
+ },
104
+ },
105
+ 'conversion': {
106
+ label: 'Conversion',
107
+ description: 'Landing page con form di contatto/demo',
108
+ blueprintId: 'conversion-intake',
109
+ pages: [],
110
+ guardrails: {
111
+ 'seo': { severity: 'error', required: true },
112
+ 'i18n': { severity: 'off' },
113
+ 'contrast': { severity: 'error', level: 'AA' },
114
+ 'cta-presence': { severity: 'error', minCta: 1 },
115
+ 'form': { severity: 'error' },
116
+ 'above-the-fold': { severity: 'warning' },
117
+ '404': { severity: 'error' },
118
+ },
119
+ },
120
+ };
121
+ // ---------------------------------------------------------------------------
122
+ // Interactive prompt helper
123
+ // ---------------------------------------------------------------------------
124
+ function ask(rl, question, defaultVal) {
125
+ const suffix = defaultVal ? ` (${defaultVal})` : '';
126
+ return new Promise((resolve) => {
127
+ rl.question(` ${question}${suffix}: `, (answer) => {
128
+ resolve(answer.trim() || defaultVal || '');
129
+ });
130
+ });
131
+ }
132
+ function chooseTemplate(rl) {
133
+ return new Promise((resolve) => {
134
+ console.log('\n Available templates:');
135
+ const keys = Object.keys(TEMPLATES);
136
+ keys.forEach((k, i) => {
137
+ const t = TEMPLATES[k];
138
+ console.log(` ${i + 1}. ${t.label} — ${t.description}`);
139
+ });
140
+ rl.question(`\n Choose template (1-${keys.length}): `, (answer) => {
141
+ const idx = parseInt(answer.trim(), 10) - 1;
142
+ resolve(keys[idx] || keys[0]);
143
+ });
144
+ });
145
+ }
146
+ // ---------------------------------------------------------------------------
147
+ // Scaffold generator
148
+ // ---------------------------------------------------------------------------
149
+ export function generateProject(projectDir, projectName, lang, templateId, guardrailsEnabled) {
150
+ const template = TEMPLATES[templateId];
151
+ if (!template)
152
+ throw new Error(`Unknown template: ${templateId}`);
153
+ // Create directories
154
+ const dirs = ['public/pages', 'public/content', 'public/media', 'public/runtime'];
155
+ for (const d of dirs) {
156
+ fs.mkdirSync(path.join(projectDir, d), { recursive: true });
157
+ }
158
+ // Content: collect all content keys from pages
159
+ const contentEN = {};
160
+ const contentLocal = {};
161
+ for (const page of template.pages) {
162
+ for (const [key, val] of Object.entries(page.contentKeys)) {
163
+ const parts = key.split('.');
164
+ const section = parts[0];
165
+ if (!contentEN[section])
166
+ contentEN[section] = {};
167
+ contentEN[section][parts.slice(1).join('.')] = val.replace('{{name}}', projectName);
168
+ if (lang !== 'en') {
169
+ if (!contentLocal[section])
170
+ contentLocal[section] = {};
171
+ contentLocal[section][parts.slice(1).join('.')] = `[${lang.toUpperCase()}] ${val.replace('{{name}}', projectName)}`;
172
+ }
173
+ }
174
+ }
175
+ // Pages manifest
176
+ const manifest = {
177
+ version: '1',
178
+ defaultLanguage: lang,
179
+ maintenanceMode: false,
180
+ navigation: {
181
+ interactionMode: 'hover',
182
+ items: template.pages.map((p, i) => ({
183
+ id: p.id,
184
+ labelKey: `nav.${p.id}`,
185
+ href: p.route,
186
+ pageId: p.id,
187
+ order: (i + 1) * 10,
188
+ })),
189
+ },
190
+ pages: [
191
+ ...template.pages.map((p) => ({
192
+ id: p.id,
193
+ route: p.route,
194
+ titleKey: p.titleKey,
195
+ spec: `/pages/${p.id}.json`,
196
+ nav: { labelKey: `nav.${p.id}`, order: template.pages.indexOf(p) * 10 + 10 },
197
+ })),
198
+ { id: 'not-found', route: '/404', spec: '/pages/not-found.json', titleKey: 'notFound.title' },
199
+ ],
200
+ };
201
+ // Add nav keys to content
202
+ contentEN['nav'] = {};
203
+ for (const p of template.pages) {
204
+ contentEN['nav'][p.id] = p.id.charAt(0).toUpperCase() + p.id.slice(1);
205
+ }
206
+ contentEN['notFound'] = { title: 'Page not found', body: 'The page you are looking for does not exist.' };
207
+ // Write files
208
+ writeJSON(projectDir, 'public/pages/pages.manifest.json', manifest);
209
+ for (const page of template.pages) {
210
+ writeJSON(projectDir, `public/pages/${page.id}.json`, page.spec);
211
+ }
212
+ // 404 page
213
+ writeJSON(projectDir, 'public/pages/not-found.json', {
214
+ version: '1', id: 'not-found',
215
+ sections: [
216
+ { type: 'hero', presentation: { surface: 'dark', rhythmProfile: 'hero' }, titleKey: 'notFound.title', taglineKey: 'notFound.body' },
217
+ ],
218
+ });
219
+ // Content files
220
+ writeJSON(projectDir, 'public/content/content.json', contentEN);
221
+ if (lang !== 'en') {
222
+ writeJSON(projectDir, `public/content/${lang}.json`, contentLocal);
223
+ }
224
+ // Media manifest (empty)
225
+ writeJSON(projectDir, 'public/media/media.manifest.json', { version: '1', assets: [] });
226
+ // Redirects (empty)
227
+ writeJSON(projectDir, 'public/redirects.json', { version: '1', rules: [] });
228
+ // Catalog (from engine defaults)
229
+ writeJSON(projectDir, 'public/runtime/valentino.catalog.json', getDefaultCatalog());
230
+ // Guardrails profile
231
+ writeJSON(projectDir, 'valentino.guardrails.json', {
232
+ template: templateId,
233
+ guardrails: template.guardrails,
234
+ });
235
+ // Config
236
+ writeJSON(projectDir, 'valentino.config.json', {
237
+ name: projectName,
238
+ version: '1',
239
+ defaultLanguage: lang,
240
+ template: templateId,
241
+ engine: '@hale-bopp/valentino-engine',
242
+ });
243
+ // package.json
244
+ writeJSON(projectDir, 'package.json', {
245
+ name: projectName,
246
+ version: '0.1.0',
247
+ private: true,
248
+ type: 'module',
249
+ scripts: {
250
+ validate: 'valentino validate public/pages/*.json',
251
+ 'probe:all': 'valentino probe all public/pages/*.json',
252
+ audit: 'valentino audit',
253
+ },
254
+ dependencies: {
255
+ '@hale-bopp/valentino-engine': '^1.1.0',
256
+ },
257
+ });
258
+ // .gitignore
259
+ fs.writeFileSync(path.join(projectDir, '.gitignore'), [
260
+ 'node_modules/', 'dist/', '.DS_Store', '*.log', '.env', '.env.*',
261
+ ].join('\n') + '\n');
262
+ // README
263
+ const readme = `# ${projectName}
264
+
265
+ Built with [valentino-engine](https://github.com/hale-bopp-data/valentino-engine).
266
+
267
+ ## Quick start
268
+
269
+ \`\`\`bash
270
+ npm install
271
+ npx valentino validate public/pages/*.json # Validate page specs
272
+ npx valentino probe all public/pages/*.json # Run all probes
273
+ \`\`\`
274
+
275
+ ## How to add a page
276
+
277
+ 1. Create \`public/pages/my-page.json\` with sections (hero, cards, cta, form...)
278
+ 2. Register it in \`public/pages/pages.manifest.json\`
279
+ 3. Add content keys in \`public/content/content.json\`
280
+ 4. Run \`npx valentino validate\` to check
281
+
282
+ ## Template: ${templateId}
283
+
284
+ ${template.description}
285
+
286
+ ## Guardrails
287
+
288
+ This project uses the \`${templateId}\` guardrail profile. Edit \`valentino.guardrails.json\` to customize.
289
+
290
+ ## Structure
291
+
292
+ \`\`\`
293
+ public/
294
+ pages/ Page spec JSON files
295
+ content/ i18n content (content.json = EN, ${lang}.json = ${lang.toUpperCase()})
296
+ media/ Media assets + manifest
297
+ runtime/ Valentino catalog (templates, presets, blueprints)
298
+ valentino.config.json Project config
299
+ valentino.guardrails.json Guardrail profile
300
+ \`\`\`
301
+ `;
302
+ fs.writeFileSync(path.join(projectDir, 'README.md'), readme);
303
+ // Pre-commit hook (optional)
304
+ if (guardrailsEnabled) {
305
+ const hooksDir = path.join(projectDir, '.husky');
306
+ fs.mkdirSync(hooksDir, { recursive: true });
307
+ fs.writeFileSync(path.join(hooksDir, 'pre-commit'), '#!/usr/bin/env sh\nnpx valentino validate public/pages/*.json\n');
308
+ try {
309
+ fs.chmodSync(path.join(hooksDir, 'pre-commit'), 0o755);
310
+ }
311
+ catch { /* Windows */ }
312
+ }
313
+ }
314
+ function writeJSON(base, relPath, data) {
315
+ const full = path.join(base, relPath);
316
+ fs.mkdirSync(path.dirname(full), { recursive: true });
317
+ fs.writeFileSync(full, JSON.stringify(data, null, 2) + '\n');
318
+ }
319
+ function getDefaultCatalog() {
320
+ // Minimal catalog with core presets — consumer can extend
321
+ return {
322
+ version: '1',
323
+ templates: {
324
+ 'home-signature-template': { page: { profile: 'home-signature' } },
325
+ 'product-surface-template': { page: { profile: 'product-surface' } },
326
+ 'advisor-surface-template': { page: { profile: 'advisor-surface' } },
327
+ 'conversion-form-template': { page: { profile: 'conversion-form' } },
328
+ },
329
+ sectionPresets: {
330
+ 'hero-home-signature': { presentation: { surface: 'dark', tone: 'immersive', rhythmProfile: 'hero' } },
331
+ 'hero-shell-immersive': { presentation: { surface: 'shell-dark', surfaceScreen: 'immersive', tone: 'immersive', rhythmProfile: 'hero' } },
332
+ 'cards-muted-feature': { presentation: { surface: 'muted', rhythmProfile: 'feature' } },
333
+ 'cards-muted-proof': { presentation: { surface: 'muted', rhythmProfile: 'proof' } },
334
+ 'cta-accent-closeout': { presentation: { surface: 'accent', rhythmProfile: 'transition' } },
335
+ 'form-default-transition': { presentation: { surface: 'default', rhythmProfile: 'transition' } },
336
+ },
337
+ transitionProfiles: {
338
+ 'hero-intro-merge': { presentation: { seamProfile: 'hero-intro-merge', seamDensity: 'default', surfaceEntry: 'slab' } },
339
+ },
340
+ pageBlueprints: {},
341
+ };
342
+ }
343
+ // ---------------------------------------------------------------------------
344
+ // Main entry point
345
+ // ---------------------------------------------------------------------------
346
+ export async function runInit(args) {
347
+ // Parse flags
348
+ let projectName = '';
349
+ let templateId = '';
350
+ let lang = '';
351
+ let gitUrl = '';
352
+ for (let i = 0; i < args.length; i++) {
353
+ if (args[i] === '--template' && args[i + 1]) {
354
+ templateId = args[++i];
355
+ continue;
356
+ }
357
+ if (args[i] === '--lang' && args[i + 1]) {
358
+ lang = args[++i];
359
+ continue;
360
+ }
361
+ if (args[i] === '--git' && args[i + 1]) {
362
+ gitUrl = args[++i];
363
+ continue;
364
+ }
365
+ if (!args[i].startsWith('-') && !projectName) {
366
+ projectName = args[i];
367
+ }
368
+ }
369
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
370
+ console.log('\n 🎨 Valentino Init — Create a new project\n');
371
+ // 1. Name
372
+ if (!projectName) {
373
+ projectName = await ask(rl, 'Project name', 'my-valentino-site');
374
+ }
375
+ // 2. Template
376
+ if (!templateId || !TEMPLATES[templateId]) {
377
+ templateId = await chooseTemplate(rl);
378
+ }
379
+ // 3. Language
380
+ if (!lang) {
381
+ lang = await ask(rl, 'Default language', 'en');
382
+ }
383
+ // 4. Git remote
384
+ if (!gitUrl) {
385
+ gitUrl = await ask(rl, 'Git remote URL (optional, press Enter to skip)');
386
+ }
387
+ // 5. Guardrails
388
+ const guardrailsAnswer = await ask(rl, 'Enable pre-commit guardrails? (Y/n)', 'Y');
389
+ const guardrailsEnabled = guardrailsAnswer.toLowerCase() !== 'n';
390
+ rl.close();
391
+ // Generate
392
+ const projectDir = path.resolve(process.cwd(), projectName);
393
+ if (fs.existsSync(projectDir)) {
394
+ console.error(`\n Error: directory "${projectName}" already exists.`);
395
+ process.exit(1);
396
+ }
397
+ console.log(`\n Creating project "${projectName}" with template "${templateId}"...`);
398
+ generateProject(projectDir, projectName, lang, templateId, guardrailsEnabled);
399
+ // Git init
400
+ if (gitUrl || guardrailsEnabled) {
401
+ try {
402
+ execSync('git init', { cwd: projectDir, stdio: 'pipe' });
403
+ if (gitUrl) {
404
+ execSync(`git remote add origin ${gitUrl}`, { cwd: projectDir, stdio: 'pipe' });
405
+ }
406
+ execSync('git add -A', { cwd: projectDir, stdio: 'pipe' });
407
+ execSync('git commit -m "Initial commit — valentino init"', { cwd: projectDir, stdio: 'pipe' });
408
+ console.log(' ✓ Git initialized' + (gitUrl ? ` with remote ${gitUrl}` : ''));
409
+ }
410
+ catch {
411
+ console.log(' ⚠ Git init failed — you can do it manually');
412
+ }
413
+ }
414
+ // Summary
415
+ const template = TEMPLATES[templateId];
416
+ const pageCount = template.pages.length + 1; // +1 for 404
417
+ console.log(`
418
+ ✓ Project "${projectName}" created with template "${templateId}"
419
+ ✓ ${pageCount} pages, language: ${lang}, guardrails: ${guardrailsEnabled ? 'active' : 'off'}
420
+
421
+ Next steps:
422
+ cd ${projectName}
423
+ npm install
424
+ # Edit public/content/content.json — replace placeholder text
425
+ npx valentino validate public/pages/*.json
426
+ `);
427
+ }
428
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/bin/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runLlms(args: string[]): void;
2
+ //# sourceMappingURL=llms.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llms.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/llms.ts"],"names":[],"mappings":"AA0BA,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAoE5C"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * CLI command: valentino llms <manifest.json> [options]
3
+ * Generates llms.txt and llms-full.txt from a pages manifest.
4
+ */
5
+ import { readFileSync, writeFileSync } from 'node:fs';
6
+ import { resolve } from 'node:path';
7
+ import { generateLlmsTxt, generateLlmsFullTxt } from '../../core/llms-generator.js';
8
+ function loadJson(path) {
9
+ return JSON.parse(readFileSync(path, 'utf-8'));
10
+ }
11
+ function flattenKeys(obj, prefix = '') {
12
+ const result = {};
13
+ for (const [key, value] of Object.entries(obj)) {
14
+ const fullKey = prefix ? `${prefix}.${key}` : key;
15
+ if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
16
+ Object.assign(result, flattenKeys(value, fullKey));
17
+ }
18
+ else if (typeof value === 'string') {
19
+ result[fullKey] = value;
20
+ }
21
+ }
22
+ return result;
23
+ }
24
+ export function runLlms(args) {
25
+ const manifestPath = args.find((a) => !a.startsWith('--'));
26
+ if (!manifestPath) {
27
+ console.error('Usage: valentino llms <manifest.json> [--content content.json] [--site "Name"] [--tagline "..."] [--base-url https://...] [--out-dir ./public] [--specs-dir ./pages]');
28
+ process.exit(1);
29
+ }
30
+ // Parse options
31
+ const getOpt = (flag) => {
32
+ const idx = args.indexOf(flag);
33
+ return idx >= 0 && idx + 1 < args.length ? args[idx + 1] : undefined;
34
+ };
35
+ const contentPath = getOpt('--content');
36
+ const siteName = getOpt('--site') || 'Site';
37
+ const tagline = getOpt('--tagline');
38
+ const baseUrl = getOpt('--base-url');
39
+ const outDir = getOpt('--out-dir') || '.';
40
+ const specsDir = getOpt('--specs-dir');
41
+ const capsRaw = getOpt('--capabilities');
42
+ // Load manifest
43
+ const manifest = loadJson(resolve(manifestPath));
44
+ // Content resolver
45
+ let contentMap = {};
46
+ if (contentPath) {
47
+ const raw = loadJson(resolve(contentPath));
48
+ contentMap = flattenKeys(raw);
49
+ }
50
+ const resolveContent = (key) => contentMap[key];
51
+ // Load page specs if dir provided
52
+ let specsById;
53
+ if (specsDir) {
54
+ specsById = new Map();
55
+ for (const page of manifest.pages) {
56
+ try {
57
+ const specPath = resolve(specsDir, page.spec.replace(/^\/pages\//, ''));
58
+ const spec = loadJson(specPath);
59
+ specsById.set(page.id, spec);
60
+ }
61
+ catch {
62
+ // Spec not found — skip
63
+ }
64
+ }
65
+ }
66
+ // Capabilities
67
+ const capabilities = capsRaw
68
+ ? capsRaw.split(';').map((s) => s.trim()).filter(Boolean)
69
+ : undefined;
70
+ const options = { siteName, tagline, baseUrl, capabilities, resolveContent, specsById };
71
+ // Generate
72
+ const llmsTxt = generateLlmsTxt(manifest, options);
73
+ const llmsFullTxt = generateLlmsFullTxt(manifest, options);
74
+ // Write
75
+ const outLlms = resolve(outDir, 'llms.txt');
76
+ const outFull = resolve(outDir, 'llms-full.txt');
77
+ writeFileSync(outLlms, llmsTxt, 'utf-8');
78
+ writeFileSync(outFull, llmsFullTxt, 'utf-8');
79
+ const llmsLines = llmsTxt.split('\n').length;
80
+ const fullLines = llmsFullTxt.split('\n').length;
81
+ console.log(`✅ Generated ${outLlms} (${llmsLines} lines)`);
82
+ console.log(`✅ Generated ${outFull} (${fullLines} lines)`);
83
+ }
84
+ //# sourceMappingURL=llms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llms.js","sourceRoot":"","sources":["../../../src/bin/commands/llms.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/validate.ts"],"names":[],"mappings":"AAGA,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAchD"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/validate.ts"],"names":[],"mappings":"AAwEA,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA4FhD"}