@hale-bopp/valentino-engine 2.1.0 → 2.3.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 (102) hide show
  1. package/README.md +63 -2
  2. package/dist/bin/commands/cockpit.d.ts +16 -0
  3. package/dist/bin/commands/cockpit.d.ts.map +1 -0
  4. package/dist/bin/commands/cockpit.js +205 -0
  5. package/dist/bin/commands/cockpit.js.map +1 -0
  6. package/dist/bin/commands/theme-audit.d.ts +7 -0
  7. package/dist/bin/commands/theme-audit.d.ts.map +1 -0
  8. package/dist/bin/commands/theme-audit.js +70 -0
  9. package/dist/bin/commands/theme-audit.js.map +1 -0
  10. package/dist/bin/commands/validate.d.ts.map +1 -1
  11. package/dist/bin/commands/validate.js +94 -1
  12. package/dist/bin/commands/validate.js.map +1 -1
  13. package/dist/bin/valentino.js +15 -1
  14. package/dist/bin/valentino.js.map +1 -1
  15. package/dist/cockpit-server.d.ts +17 -0
  16. package/dist/cockpit-server.d.ts.map +1 -0
  17. package/dist/cockpit-server.js +505 -0
  18. package/dist/cockpit-server.js.map +1 -0
  19. package/dist/cockpit-web/index.html +979 -0
  20. package/dist/core/cockpit-api.d.ts +99 -0
  21. package/dist/core/cockpit-api.d.ts.map +1 -0
  22. package/dist/core/cockpit-api.js +269 -0
  23. package/dist/core/cockpit-api.js.map +1 -0
  24. package/dist/core/cockpit-repl.d.ts +51 -0
  25. package/dist/core/cockpit-repl.d.ts.map +1 -0
  26. package/dist/core/cockpit-repl.js +217 -0
  27. package/dist/core/cockpit-repl.js.map +1 -0
  28. package/dist/core/contrast-usage-probe.d.ts +84 -0
  29. package/dist/core/contrast-usage-probe.d.ts.map +1 -0
  30. package/dist/core/contrast-usage-probe.js +244 -0
  31. package/dist/core/contrast-usage-probe.js.map +1 -0
  32. package/dist/core/contrast-usage-probe.test.d.ts +2 -0
  33. package/dist/core/contrast-usage-probe.test.d.ts.map +1 -0
  34. package/dist/core/contrast-usage-probe.test.js +186 -0
  35. package/dist/core/contrast-usage-probe.test.js.map +1 -0
  36. package/dist/core/editor.d.ts +80 -0
  37. package/dist/core/editor.d.ts.map +1 -0
  38. package/dist/core/editor.js +421 -0
  39. package/dist/core/editor.js.map +1 -0
  40. package/dist/core/gallery.d.ts +53 -0
  41. package/dist/core/gallery.d.ts.map +1 -0
  42. package/dist/core/gallery.js +123 -0
  43. package/dist/core/gallery.js.map +1 -0
  44. package/dist/core/gallery.test.d.ts +2 -0
  45. package/dist/core/gallery.test.d.ts.map +1 -0
  46. package/dist/core/gallery.test.js +127 -0
  47. package/dist/core/gallery.test.js.map +1 -0
  48. package/dist/core/intent-parser.d.ts +67 -0
  49. package/dist/core/intent-parser.d.ts.map +1 -0
  50. package/dist/core/intent-parser.js +485 -0
  51. package/dist/core/intent-parser.js.map +1 -0
  52. package/dist/core/openrouter-client.d.ts +38 -0
  53. package/dist/core/openrouter-client.d.ts.map +1 -0
  54. package/dist/core/openrouter-client.js +123 -0
  55. package/dist/core/openrouter-client.js.map +1 -0
  56. package/dist/core/page-generator.d.ts +85 -0
  57. package/dist/core/page-generator.d.ts.map +1 -0
  58. package/dist/core/page-generator.js +353 -0
  59. package/dist/core/page-generator.js.map +1 -0
  60. package/dist/core/page-generator.test.d.ts +2 -0
  61. package/dist/core/page-generator.test.d.ts.map +1 -0
  62. package/dist/core/page-generator.test.js +138 -0
  63. package/dist/core/page-generator.test.js.map +1 -0
  64. package/dist/core/page-status.d.ts +15 -1
  65. package/dist/core/page-status.d.ts.map +1 -1
  66. package/dist/core/page-status.js +21 -0
  67. package/dist/core/page-status.js.map +1 -1
  68. package/dist/core/project-adapter.d.ts +73 -0
  69. package/dist/core/project-adapter.d.ts.map +1 -0
  70. package/dist/core/project-adapter.js +364 -0
  71. package/dist/core/project-adapter.js.map +1 -0
  72. package/dist/core/schema-export.d.ts +32 -0
  73. package/dist/core/schema-export.d.ts.map +1 -0
  74. package/dist/core/schema-export.js +493 -0
  75. package/dist/core/schema-export.js.map +1 -0
  76. package/dist/core/theme-audit.d.ts +104 -0
  77. package/dist/core/theme-audit.d.ts.map +1 -0
  78. package/dist/core/theme-audit.js +127 -0
  79. package/dist/core/theme-audit.js.map +1 -0
  80. package/dist/core/theme-audit.test.d.ts +2 -0
  81. package/dist/core/theme-audit.test.d.ts.map +1 -0
  82. package/dist/core/theme-audit.test.js +198 -0
  83. package/dist/core/theme-audit.test.js.map +1 -0
  84. package/dist/core/url-import.d.ts +41 -0
  85. package/dist/core/url-import.d.ts.map +1 -0
  86. package/dist/core/url-import.js +207 -0
  87. package/dist/core/url-import.js.map +1 -0
  88. package/dist/core/video-import.d.ts +46 -0
  89. package/dist/core/video-import.d.ts.map +1 -0
  90. package/dist/core/video-import.js +192 -0
  91. package/dist/core/video-import.js.map +1 -0
  92. package/dist/core/visual-import.d.ts +42 -0
  93. package/dist/core/visual-import.d.ts.map +1 -0
  94. package/dist/core/visual-import.js +227 -0
  95. package/dist/core/visual-import.js.map +1 -0
  96. package/dist/index.d.ts +31 -2
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +31 -1
  99. package/dist/index.js.map +1 -1
  100. package/dist/mcp/index.js +32 -0
  101. package/dist/mcp/index.js.map +1 -1
  102. package/package.json +10 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gallery.js","sourceRoot":"","sources":["../../src/core/gallery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=gallery.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gallery.test.d.ts","sourceRoot":"","sources":["../../src/core/gallery.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,127 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { listCatalogEntries, listPageEntries, listAllGalleryEntries, filterGalleryEntries } from './gallery.js';
3
+ const catalog = {
4
+ version: '1',
5
+ templates: {
6
+ 'product-tpl': { page: { profile: 'product-surface', themeId: 'dark' } },
7
+ },
8
+ sectionPresets: {},
9
+ transitionProfiles: {},
10
+ pageBlueprints: {
11
+ 'landing-bp': {
12
+ spec: {
13
+ version: '1',
14
+ id: 'landing-bp',
15
+ profile: 'home-signature',
16
+ sections: [
17
+ { type: 'hero', titleKey: 'bp.hero.title' },
18
+ { type: 'cards', variant: 'catalog', items: [{ titleKey: 'bp.card1' }] },
19
+ { type: 'cta', titleKey: 'bp.cta.title' },
20
+ ],
21
+ },
22
+ },
23
+ 'about-bp': {
24
+ spec: {
25
+ version: '1',
26
+ id: 'about-bp',
27
+ profile: 'reading-manifesto',
28
+ sections: [
29
+ { type: 'hero', titleKey: 'about.hero.title' },
30
+ { type: 'manifesto', contentPrefix: 'about.manifesto' },
31
+ ],
32
+ },
33
+ governance: { tier: 'standard' },
34
+ },
35
+ },
36
+ };
37
+ const manifest = {
38
+ version: '1',
39
+ pages: [
40
+ { id: 'home', route: '/', spec: 'home.json', status: 'published' },
41
+ { id: 'draft-page', route: '/draft', spec: 'draft.json', status: 'draft' },
42
+ { id: 'about', route: '/about', spec: 'about.json', status: 'published' },
43
+ ],
44
+ };
45
+ describe('listCatalogEntries', () => {
46
+ it('returns blueprints and templates', () => {
47
+ const entries = listCatalogEntries(catalog);
48
+ expect(entries).toHaveLength(3); // 2 blueprints + 1 template
49
+ });
50
+ it('blueprints have section metadata', () => {
51
+ const entries = listCatalogEntries(catalog);
52
+ const landing = entries.find(e => e.id === 'landing-bp');
53
+ expect(landing).toBeDefined();
54
+ expect(landing.kind).toBe('blueprint');
55
+ expect(landing.sectionCount).toBe(3);
56
+ expect(landing.sectionTypes).toContain('hero');
57
+ expect(landing.sectionTypes).toContain('cards');
58
+ expect(landing.sectionTypes).toContain('cta');
59
+ });
60
+ it('templates have kind template', () => {
61
+ const entries = listCatalogEntries(catalog);
62
+ const tpl = entries.find(e => e.id === 'product-tpl');
63
+ expect(tpl).toBeDefined();
64
+ expect(tpl.kind).toBe('template');
65
+ expect(tpl.profile).toBe('product-surface');
66
+ });
67
+ it('includes governance tier', () => {
68
+ const entries = listCatalogEntries(catalog);
69
+ const about = entries.find(e => e.id === 'about-bp');
70
+ expect(about.governanceTier).toBe('standard');
71
+ });
72
+ });
73
+ describe('listPageEntries', () => {
74
+ it('returns only published pages', () => {
75
+ const entries = listPageEntries(manifest);
76
+ expect(entries).toHaveLength(2);
77
+ expect(entries.map(e => e.id)).toContain('home');
78
+ expect(entries.map(e => e.id)).toContain('about');
79
+ expect(entries.map(e => e.id)).not.toContain('draft-page');
80
+ });
81
+ it('entries have kind page', () => {
82
+ const entries = listPageEntries(manifest);
83
+ expect(entries.every(e => e.kind === 'page')).toBe(true);
84
+ });
85
+ });
86
+ describe('listAllGalleryEntries', () => {
87
+ it('combines catalog and manifest', () => {
88
+ const entries = listAllGalleryEntries(catalog, manifest);
89
+ expect(entries.length).toBe(5); // 2 bp + 1 tpl + 2 published pages
90
+ });
91
+ it('works with catalog only', () => {
92
+ const entries = listAllGalleryEntries(catalog);
93
+ expect(entries).toHaveLength(3);
94
+ });
95
+ });
96
+ describe('filterGalleryEntries', () => {
97
+ const all = listAllGalleryEntries(catalog, manifest);
98
+ it('filters by kind', () => {
99
+ const blueprints = filterGalleryEntries(all, { kind: 'blueprint' });
100
+ expect(blueprints).toHaveLength(2);
101
+ expect(blueprints.every(e => e.kind === 'blueprint')).toBe(true);
102
+ });
103
+ it('filters by multiple kinds', () => {
104
+ const result = filterGalleryEntries(all, { kind: ['blueprint', 'template'] });
105
+ expect(result).toHaveLength(3);
106
+ });
107
+ it('filters by profile', () => {
108
+ const result = filterGalleryEntries(all, { profile: 'home-signature' });
109
+ expect(result.length).toBeGreaterThanOrEqual(1);
110
+ expect(result.every(e => e.profile === 'home-signature')).toBe(true);
111
+ });
112
+ it('filters by section type', () => {
113
+ const result = filterGalleryEntries(all, { sectionType: 'manifesto' });
114
+ expect(result.length).toBeGreaterThanOrEqual(1);
115
+ expect(result.every(e => e.sectionTypes.includes('manifesto'))).toBe(true);
116
+ });
117
+ it('filters by search text', () => {
118
+ const result = filterGalleryEntries(all, { search: 'landing' });
119
+ expect(result.length).toBeGreaterThanOrEqual(1);
120
+ });
121
+ it('combines filters', () => {
122
+ const result = filterGalleryEntries(all, { kind: 'blueprint', profile: 'home-signature' });
123
+ expect(result).toHaveLength(1);
124
+ expect(result[0].id).toBe('landing-bp');
125
+ });
126
+ });
127
+ //# sourceMappingURL=gallery.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gallery.test.js","sourceRoot":"","sources":["../../src/core/gallery.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Intent Parser — Natural language → CockpitAction.
3
+ * Feature #778 (Il Sarto Parla), PBI #780 (Phase 1).
4
+ *
5
+ * Two modes:
6
+ * - Local (rule-based): regex patterns for IT/EN, always works, zero API.
7
+ * - LLM (callback): delegates to external LLM, validates output, falls back to local.
8
+ *
9
+ * Pure functions, no I/O, no LLM client.
10
+ */
11
+ import type { CockpitAction } from './cockpit-api.js';
12
+ import type { SectionSpec, PageSpecV1 } from './types.js';
13
+ export type ParsedIntent = {
14
+ action: CockpitAction;
15
+ confidence: 'high' | 'medium' | 'low';
16
+ description: string;
17
+ };
18
+ export type IntentParseResult = {
19
+ intent: ParsedIntent | null;
20
+ mode: 'local' | 'llm';
21
+ raw: string;
22
+ fallbackReason?: string;
23
+ };
24
+ export type IntentLlmCallback = (prompt: string, context: IntentLlmContext) => Promise<unknown>;
25
+ export type IntentLlmContext = {
26
+ pageSpec: PageSpecV1;
27
+ actionSchema: object;
28
+ sectionSchemas: Record<string, object>;
29
+ sectionSummary: Array<{
30
+ index: number;
31
+ type: string;
32
+ titleKey?: string;
33
+ }>;
34
+ };
35
+ declare function resolveSectionType(raw: string): string | null;
36
+ declare function parseIndex(raw: string, totalSections: number): number | null;
37
+ declare function buildMinimalSection(sectionType: string): SectionSpec;
38
+ declare function buildSectionSummary(spec: PageSpecV1): Array<{
39
+ index: number;
40
+ type: string;
41
+ titleKey?: string;
42
+ }>;
43
+ /**
44
+ * Parse a natural language operator request into a CockpitAction.
45
+ *
46
+ * Supports IT and EN. If `llm` callback is provided, tries LLM first
47
+ * with automatic fallback to local rule-based parser.
48
+ *
49
+ * @example
50
+ * ```ts
51
+ * // Local mode
52
+ * const result = parseIntent("mostrami le sezioni", pageSpec);
53
+ *
54
+ * // LLM mode with fallback
55
+ * const result = await parseIntent("aggiungi una hero", pageSpec, myLlm);
56
+ * ```
57
+ */
58
+ export declare function parseIntent(input: string, spec: PageSpecV1, llm?: IntentLlmCallback): Promise<IntentParseResult>;
59
+ /**
60
+ * Synchronous local-only parsing. No LLM, always works.
61
+ */
62
+ export declare function parseIntentLocal(input: string, spec: PageSpecV1): IntentParseResult;
63
+ /**
64
+ * Exported for testing.
65
+ */
66
+ export { resolveSectionType, parseIndex, buildMinimalSection, buildSectionSummary };
67
+ //# sourceMappingURL=intent-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent-parser.d.ts","sourceRoot":"","sources":["../../src/core/intent-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,kBAAkB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQ1D,MAAM,MAAM,YAAY,GAAG;IACvB,MAAM,EAAE,aAAa,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC5B,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,OAAO,GAAG,KAAK,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG,CAC5B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,gBAAgB,KACxB,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,MAAM,MAAM,gBAAgB,GAAG;IAC3B,QAAQ,EAAE,UAAU,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,cAAc,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC7E,CAAC;AAiCF,iBAAS,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAItD;AAgBD,iBAAS,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiBrE;AAiQD,iBAAS,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,CAgC7D;AAyDD,iBAAS,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAMxG;AA4DD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,WAAW,CAC7B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,UAAU,EAChB,GAAG,CAAC,EAAE,iBAAiB,GACxB,OAAO,CAAC,iBAAiB,CAAC,CAK5B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,iBAAiB,CAEnF;AAED;;GAEG;AACH,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,CAAC"}