@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
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Valentino Engine
2
2
 
3
- > **Antifragile Open Source UI Design Engine** — part of the [HALE-BOPP](https://dev.azure.com/EasyWayData/EasyWay-DataPortal/_git/hale-bopp-valentino-engine) family.
3
+ > **Antifragile Open Source UI Design Engine** — part of the [HALE-BOPP](https://github.com/hale-bopp-data) family.
4
4
 
5
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)
6
6
  [![npm](https://img.shields.io/npm/v/@hale-bopp/valentino-engine)](https://www.npmjs.com/package/@hale-bopp/valentino-engine)
@@ -86,6 +86,67 @@ Any MCP-compatible AI agent can connect to Valentino Engine:
86
86
  | `valentino_get_skill` | Get design skill rules |
87
87
  | `valentino_list_guardrails` | List 10 Sovereign Guardrails |
88
88
 
89
+ ## Valentino Cockpit — Il Sarto Parla
90
+
91
+ Interactive conversational cockpit for building and editing pages. Speak naturally (IT/EN), import from screenshots, URLs, videos, or existing projects.
92
+
93
+ ### Quick Launch
94
+
95
+ ```bash
96
+ # Windows
97
+ cockpit.bat
98
+
99
+ # Mac / Linux
100
+ ./cockpit.sh
101
+
102
+ # Any OS
103
+ npx tsx src/cockpit-server.ts examples/minimal-site/pages/home.json
104
+ ```
105
+
106
+ Then open **http://localhost:3781** in your browser.
107
+
108
+ ### With LLM (smart parsing)
109
+
110
+ ```bash
111
+ # Windows
112
+ set OPENROUTER_API_KEY=sk-or-v1-your-key
113
+ cockpit.bat
114
+
115
+ # Mac / Linux
116
+ OPENROUTER_API_KEY=sk-or-v1-your-key ./cockpit.sh
117
+ ```
118
+
119
+ Or configure the API key from the **Settings** button in the browser UI.
120
+
121
+ ### Custom page spec & port
122
+
123
+ ```bash
124
+ # Windows
125
+ cockpit.bat path\to\my-page.json 4000
126
+
127
+ # Mac / Linux
128
+ ./cockpit.sh path/to/my-page.json 4000
129
+ ```
130
+
131
+ ### CLI REPL (no browser)
132
+
133
+ ```bash
134
+ npx tsx src/bin/valentino.ts cockpit examples/minimal-site/pages/home.json
135
+ ```
136
+
137
+ ### Features
138
+
139
+ | Feature | What it does |
140
+ |---------|-------------|
141
+ | **Chat** | Speak naturally: "mostrami le sezioni", "aggiungi stats", "rimuovi la cta" |
142
+ | **Import Screenshot** | Upload a screenshot, LLM vision generates a page spec |
143
+ | **Import URL** | Paste a URL, system fetches and analyzes the page |
144
+ | **Import Video** | Upload a video, browser extracts frames, LLM composes a page |
145
+ | **Import Project** | Point to a local HTML/CSS folder, generates governed specs |
146
+ | **Undo / Save** | Full undo history, save to disk |
147
+ | **Settings** | Configure OpenRouter API key and model from the UI |
148
+ | **Live Preview** | See page sections update in real-time as you work |
149
+
89
150
  ## The 10 Sovereign Guardrails
90
151
 
91
152
  1. **WhatIf di Layout** — Wireframe first, code second
@@ -101,7 +162,7 @@ Any MCP-compatible AI agent can connect to Valentino Engine:
101
162
 
102
163
  ## Contributing
103
164
 
104
- PRs welcome! Please link your PR to an ADO Work Item under [Epic #480](https://dev.azure.com/EasyWayData/EasyWay-DataPortal/_workitems/edit/480).
165
+ PRs welcome! See [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines.
105
166
 
106
167
  ## License
107
168
 
@@ -0,0 +1,16 @@
1
+ /**
2
+ * CLI command: valentino cockpit
3
+ * Interactive cockpit for page spec manipulation.
4
+ *
5
+ * Usage:
6
+ * valentino cockpit <spec.json> Interactive REPL (Phase 1)
7
+ * valentino cockpit <spec.json> <action.json> Execute action on spec
8
+ * valentino cockpit <spec.json> --describe Describe page structure
9
+ * valentino cockpit <spec.json> --validate Validate page spec
10
+ * valentino cockpit <spec.json> --parse "text" Parse intent (dry run)
11
+ * valentino cockpit --schema page Print PageSpecV1 JSON Schema
12
+ * valentino cockpit --schema action Print CockpitAction JSON Schema
13
+ * valentino cockpit --schema section <type> Print section JSON Schema
14
+ */
15
+ export declare function runCockpit(args: string[]): Promise<void>;
16
+ //# sourceMappingURL=cockpit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cockpit.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/cockpit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AA0BH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyL9D"}
@@ -0,0 +1,205 @@
1
+ /**
2
+ * CLI command: valentino cockpit
3
+ * Interactive cockpit for page spec manipulation.
4
+ *
5
+ * Usage:
6
+ * valentino cockpit <spec.json> Interactive REPL (Phase 1)
7
+ * valentino cockpit <spec.json> <action.json> Execute action on spec
8
+ * valentino cockpit <spec.json> --describe Describe page structure
9
+ * valentino cockpit <spec.json> --validate Validate page spec
10
+ * valentino cockpit <spec.json> --parse "text" Parse intent (dry run)
11
+ * valentino cockpit --schema page Print PageSpecV1 JSON Schema
12
+ * valentino cockpit --schema action Print CockpitAction JSON Schema
13
+ * valentino cockpit --schema section <type> Print section JSON Schema
14
+ */
15
+ import { readFileSync, existsSync, writeFileSync } from 'fs';
16
+ import { resolve } from 'path';
17
+ import { executeCockpitAction, validateCockpitAction, describeCockpitAction, } from '../../core/cockpit-api.js';
18
+ import { getPageSpecSchema, getCockpitActionSchema, getSectionSchema, getSchemaDefinedSectionTypes, } from '../../core/schema-export.js';
19
+ import { parseIntentLocal } from '../../core/intent-parser.js';
20
+ import { startRepl } from '../../core/cockpit-repl.js';
21
+ import { startCockpitServer } from '../../cockpit-server.js';
22
+ function loadJSON(filePath) {
23
+ if (!existsSync(filePath))
24
+ return null;
25
+ try {
26
+ return JSON.parse(readFileSync(filePath, 'utf-8'));
27
+ }
28
+ catch {
29
+ return null;
30
+ }
31
+ }
32
+ export async function runCockpit(args) {
33
+ // Schema mode
34
+ if (args.includes('--schema')) {
35
+ const schemaIdx = args.indexOf('--schema');
36
+ const schemaType = args[schemaIdx + 1];
37
+ switch (schemaType) {
38
+ case 'page':
39
+ console.log(JSON.stringify(getPageSpecSchema(), null, 2));
40
+ return;
41
+ case 'action':
42
+ console.log(JSON.stringify(getCockpitActionSchema(), null, 2));
43
+ return;
44
+ case 'section': {
45
+ const sectionType = args[schemaIdx + 2];
46
+ if (!sectionType) {
47
+ console.log('Available section types:', getSchemaDefinedSectionTypes().join(', '));
48
+ return;
49
+ }
50
+ const schema = getSectionSchema(sectionType);
51
+ if (!schema) {
52
+ console.error(`Unknown section type: ${sectionType}`);
53
+ console.log('Available:', getSchemaDefinedSectionTypes().join(', '));
54
+ process.exit(1);
55
+ }
56
+ console.log(JSON.stringify(schema, null, 2));
57
+ return;
58
+ }
59
+ default:
60
+ console.error('Usage: valentino cockpit --schema <page|action|section [type]>');
61
+ process.exit(1);
62
+ }
63
+ }
64
+ // Need a spec file for all other operations
65
+ const files = args.filter(a => !a.startsWith('-'));
66
+ if (!files.length) {
67
+ console.log(`
68
+ valentino cockpit — Conversational Cockpit for page spec manipulation
69
+
70
+ Usage:
71
+ valentino cockpit <spec.json> Interactive REPL
72
+ valentino cockpit <spec.json> --serve [--port N] Web cockpit (default: 3781)
73
+ valentino cockpit <spec.json> <action.json> Execute action on spec
74
+ valentino cockpit <spec.json> --describe Describe page structure
75
+ valentino cockpit <spec.json> --validate Validate page spec
76
+ valentino cockpit <spec.json> --parse "text" Parse intent (dry run)
77
+ valentino cockpit --schema page Print PageSpecV1 JSON Schema
78
+ valentino cockpit --schema action Print CockpitAction JSON Schema
79
+ valentino cockpit --schema section <type> Print section JSON Schema
80
+ `);
81
+ return;
82
+ }
83
+ const specPath = resolve(files[0]);
84
+ const spec = loadJSON(specPath);
85
+ if (!spec) {
86
+ console.error(`Cannot read spec: ${specPath}`);
87
+ process.exit(1);
88
+ }
89
+ // Describe mode
90
+ if (args.includes('--describe')) {
91
+ const result = executeCockpitAction(spec, {
92
+ action: 'query',
93
+ query: { type: 'describe-page' },
94
+ });
95
+ console.log(JSON.stringify(result.data, null, 2));
96
+ return;
97
+ }
98
+ // Validate mode
99
+ if (args.includes('--validate')) {
100
+ const result = executeCockpitAction(spec, {
101
+ action: 'query',
102
+ query: { type: 'validate' },
103
+ });
104
+ if (result.warnings.length === 0) {
105
+ console.log(' ✅ Page spec is valid');
106
+ }
107
+ else {
108
+ for (const w of result.warnings) {
109
+ console.log(` ⚠ [${w.source}] ${w.message}`);
110
+ }
111
+ }
112
+ return;
113
+ }
114
+ // Serve mode: start web cockpit server
115
+ if (args.includes('--serve')) {
116
+ const portIdx = args.indexOf('--port');
117
+ const port = portIdx !== -1 ? parseInt(args[portIdx + 1], 10) : undefined;
118
+ startCockpitServer({ specPath, port });
119
+ return;
120
+ }
121
+ // Parse mode: dry-run intent parsing
122
+ if (args.includes('--parse')) {
123
+ const parseIdx = args.indexOf('--parse');
124
+ const text = args[parseIdx + 1];
125
+ if (!text) {
126
+ console.error('Usage: valentino cockpit <spec.json> --parse "your request"');
127
+ process.exit(1);
128
+ }
129
+ const result = parseIntentLocal(text, spec);
130
+ if (result.intent) {
131
+ console.log(` Intent: ${result.intent.description}`);
132
+ console.log(` Confidence: ${result.intent.confidence}`);
133
+ console.log(` Action: ${JSON.stringify(result.intent.action, null, 2)}`);
134
+ }
135
+ else {
136
+ console.log(' Could not parse intent from input.');
137
+ }
138
+ return;
139
+ }
140
+ // Interactive REPL mode: only spec file, no action file, no flags
141
+ if (files.length === 1 && !args.some(a => a.startsWith('--'))) {
142
+ const { writeFileSync: writeFs } = await import('fs');
143
+ const savedPath = specPath;
144
+ await startRepl({
145
+ spec,
146
+ onSpecChange: (updatedSpec) => {
147
+ writeFs(savedPath, JSON.stringify(updatedSpec, null, 2) + '\n');
148
+ console.log(` Saved to ${savedPath}`);
149
+ },
150
+ });
151
+ return;
152
+ }
153
+ // Action mode: need action file
154
+ if (files.length < 2) {
155
+ console.error('Usage: valentino cockpit <spec.json> <action.json>');
156
+ process.exit(1);
157
+ }
158
+ const actionPath = resolve(files[1]);
159
+ const action = loadJSON(actionPath);
160
+ if (!action) {
161
+ console.error(`Cannot read action: ${actionPath}`);
162
+ process.exit(1);
163
+ }
164
+ // Pre-flight validation
165
+ const preErrors = validateCockpitAction(action, spec);
166
+ if (preErrors.length > 0) {
167
+ console.error(' ❌ Action validation failed:');
168
+ for (const e of preErrors) {
169
+ console.error(` ${e}`);
170
+ }
171
+ process.exit(1);
172
+ }
173
+ // Show what will happen
174
+ console.log(` → ${describeCockpitAction(action)}`);
175
+ // Execute
176
+ const result = executeCockpitAction(spec, action);
177
+ // Show warnings
178
+ for (const w of result.warnings) {
179
+ const icon = w.source === 'validation' ? '❌' : '⚠ ';
180
+ console.log(` ${icon} [${w.source}] ${w.message}`);
181
+ }
182
+ if (result.success) {
183
+ // Write output
184
+ const outPath = args.includes('--out')
185
+ ? resolve(args[args.indexOf('--out') + 1])
186
+ : specPath;
187
+ if (args.includes('--out') || args.includes('--in-place')) {
188
+ writeFileSync(outPath, JSON.stringify(result.spec, null, 2) + '\n');
189
+ console.log(` ✅ Written to ${outPath}`);
190
+ }
191
+ else {
192
+ // Dry run — print to stdout
193
+ console.log(JSON.stringify(result.spec, null, 2));
194
+ }
195
+ }
196
+ else {
197
+ console.error(' ❌ Action failed');
198
+ process.exit(1);
199
+ }
200
+ // Query data
201
+ if (result.data) {
202
+ console.log(JSON.stringify(result.data, null, 2));
203
+ }
204
+ }
205
+ //# sourceMappingURL=cockpit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cockpit.js","sourceRoot":"","sources":["../../../src/bin/commands/cockpit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * CLI command: valentino theme-audit <theme-pack.json> [--surfaces surfaces.json] [--registry registry.json] [--level AA|AAA]
3
+ *
4
+ * Static contrast analysis: crosses theme-pack text tokens with Valentino surfaces.
5
+ */
6
+ export declare function runThemeAudit(args: string[]): void;
7
+ //# sourceMappingURL=theme-audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-audit.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/theme-audit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAwBH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAwDlD"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * CLI command: valentino theme-audit <theme-pack.json> [--surfaces surfaces.json] [--registry registry.json] [--level AA|AAA]
3
+ *
4
+ * Static contrast analysis: crosses theme-pack text tokens with Valentino surfaces.
5
+ */
6
+ import { readFileSync } from 'node:fs';
7
+ import { auditThemePack, validateThemePackAgainstRegistry, VALENTINO_SURFACES, } from '../../core/theme-audit.js';
8
+ function loadJson(path) {
9
+ return JSON.parse(readFileSync(path, 'utf-8'));
10
+ }
11
+ function parseThemePack(raw) {
12
+ const obj = raw;
13
+ return {
14
+ id: obj.id ?? 'unknown',
15
+ cssVars: obj.cssVars ?? {},
16
+ };
17
+ }
18
+ export function runThemeAudit(args) {
19
+ if (args.length === 0) {
20
+ console.error('Usage: valentino theme-audit <theme-pack.json> [--surfaces surfaces.json] [--registry registry.json] [--level AA|AAA]');
21
+ process.exit(1);
22
+ }
23
+ const themePackPath = args[0];
24
+ let surfacesPath = null;
25
+ let registryPath = null;
26
+ let level = 'AA';
27
+ for (let i = 1; i < args.length; i++) {
28
+ if (args[i] === '--surfaces' && args[i + 1]) {
29
+ surfacesPath = args[++i];
30
+ }
31
+ else if (args[i] === '--registry' && args[i + 1]) {
32
+ registryPath = args[++i];
33
+ }
34
+ else if (args[i] === '--level' && args[i + 1]) {
35
+ level = args[++i];
36
+ }
37
+ }
38
+ const themePack = parseThemePack(loadJson(themePackPath));
39
+ const surfaces = surfacesPath
40
+ ? loadJson(surfacesPath)
41
+ : VALENTINO_SURFACES;
42
+ // Contrast audit
43
+ const result = auditThemePack(themePack, { surfaces, level });
44
+ // Registry validation (if provided)
45
+ const registryViolations = registryPath
46
+ ? validateThemePackAgainstRegistry(themePack, loadJson(registryPath).themePacks)
47
+ : [];
48
+ // Output
49
+ console.log(`\nTheme-pack: ${result.themePackId}`);
50
+ console.log(`Level: ${level} | Checks: ${result.checked} | Surfaces: ${surfaces.length}`);
51
+ console.log('─'.repeat(70));
52
+ if (registryViolations.length > 0) {
53
+ console.log(`\n⚠ Registry violations (${registryViolations.length}):\n`);
54
+ for (const v of registryViolations) {
55
+ console.log(` ${v.token} — ${v.reason}`);
56
+ }
57
+ }
58
+ if (result.violations.length > 0) {
59
+ console.log(`\n✗ Contrast violations (${result.violations.length}):\n`);
60
+ for (const v of result.violations) {
61
+ console.log(` ${v.token}: ${v.value} on ${v.surface} (${v.surfaceBackground})`);
62
+ console.log(` ratio ${v.ratio}:1 — needs ${v.required}:1\n`);
63
+ }
64
+ process.exit(1);
65
+ }
66
+ else {
67
+ console.log(`\n✓ All ${result.checked} token×surface pairs pass ${level} contrast.\n`);
68
+ }
69
+ }
70
+ //# sourceMappingURL=theme-audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-audit.js","sourceRoot":"","sources":["../../../src/bin/commands/theme-audit.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":"AAwEA,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA4FhD"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/validate.ts"],"names":[],"mappings":"AA0EA,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAmMhD"}
@@ -1,7 +1,9 @@
1
- import { readFileSync, existsSync } from 'fs';
1
+ import { readFileSync, existsSync, readdirSync } from 'fs';
2
2
  import { resolve, dirname } from 'path';
3
3
  import { validatePageSpec } from '../../core/page-spec.js';
4
4
  import { collectPureCmsWarnings } from '../../core/guardrails-cms.js';
5
+ import { auditThemePack, VALENTINO_SURFACES } from '../../core/theme-audit.js';
6
+ import { probeContrastUsageMulti, extractShadowDomStyles } from '../../core/contrast-usage-probe.js';
5
7
  function findProjectRoot(startDir) {
6
8
  let dir = resolve(startDir);
7
9
  for (let i = 0; i < 10; i++) {
@@ -144,6 +146,97 @@ export function runValidate(args) {
144
146
  }
145
147
  }
146
148
  }
149
+ // 3. Theme-pack contrast audit (if --all)
150
+ if (args.includes('--all') && projectRoot) {
151
+ const themePackDir = resolve(projectRoot, 'public/theme-packs');
152
+ const registryPath = resolve(themePackDir, 'valentino-palette.registry.json');
153
+ const brandingPath = resolve(projectRoot, 'public/branding.json');
154
+ // Load foundation tokens from branding.json (or registry foundationTokens)
155
+ let foundationTokens = {};
156
+ const registry = loadJSON(registryPath);
157
+ if (registry?.foundationTokens) {
158
+ for (const [k, v] of Object.entries(registry.foundationTokens)) {
159
+ foundationTokens[k] = v.value;
160
+ }
161
+ }
162
+ // Discover and audit theme-packs
163
+ if (existsSync(themePackDir)) {
164
+ const packFiles = readdirSync(themePackDir).filter(f => f.startsWith('theme-pack.') && f.endsWith('.json'));
165
+ // Also audit foundation tokens as a "base" theme (no theme-pack active)
166
+ if (Object.keys(foundationTokens).length > 0) {
167
+ const baseResult = auditThemePack({ id: '_foundation', cssVars: foundationTokens }, { surfaces: VALENTINO_SURFACES, level: 'AA' });
168
+ for (const v of baseResult.violations) {
169
+ console.error(` ❌ [theme-contrast] Foundation "${v.token}" (${v.value}) fails on ${v.surface}: ${v.ratio}:1 < ${v.required}:1`);
170
+ totalErrors++;
171
+ hasErrors = true;
172
+ }
173
+ }
174
+ for (const file of packFiles) {
175
+ const raw = loadJSON(resolve(themePackDir, file));
176
+ if (!raw?.cssVars)
177
+ continue;
178
+ const tp = { id: raw.id ?? file, cssVars: raw.cssVars };
179
+ const result = auditThemePack(tp, {
180
+ surfaces: VALENTINO_SURFACES,
181
+ level: 'AA',
182
+ foundationTokens,
183
+ });
184
+ for (const v of result.violations) {
185
+ console.error(` ❌ [theme-contrast] ${tp.id}: "${v.token}" (${v.value}) fails on ${v.surface}: ${v.ratio}:1 < ${v.required}:1`);
186
+ totalErrors++;
187
+ hasErrors = true;
188
+ }
189
+ if (!quietMode && result.passed) {
190
+ console.log(` ✅ theme-pack ${tp.id}: all contrast checks pass`);
191
+ }
192
+ }
193
+ }
194
+ // 4. CSS usage probe — find text variables without surface remaps
195
+ // Scans framework.css + Shadow DOM component styles
196
+ const frameworkCssPath = resolve(projectRoot, 'src/framework.css');
197
+ if (existsSync(frameworkCssPath)) {
198
+ const primaryCss = readFileSync(frameworkCssPath, 'utf-8');
199
+ // Discover Shadow DOM component styles
200
+ const componentSources = [];
201
+ const componentsDir = resolve(projectRoot, 'src/components');
202
+ if (existsSync(componentsDir)) {
203
+ const scanDirs = [componentsDir, resolve(componentsDir, 'lib')];
204
+ for (const dir of scanDirs) {
205
+ if (!existsSync(dir))
206
+ continue;
207
+ const tsFiles = readdirSync(dir).filter(f => f.endsWith('.ts'));
208
+ for (const file of tsFiles) {
209
+ const content = readFileSync(resolve(dir, file), 'utf-8');
210
+ const styles = extractShadowDomStyles(content, file);
211
+ for (const s of styles) {
212
+ componentSources.push({ name: s.componentName, css: s.css });
213
+ }
214
+ }
215
+ }
216
+ }
217
+ const usageResult = probeContrastUsageMulti(primaryCss, componentSources);
218
+ for (const w of usageResult.warnings) {
219
+ if (w.severity === 'error') {
220
+ console.error(` ❌ [contrast-usage] ${w.message}`);
221
+ totalErrors++;
222
+ hasErrors = true;
223
+ }
224
+ else {
225
+ console.log(` ⚠ [contrast-usage] ${w.message}`);
226
+ totalWarnings++;
227
+ }
228
+ }
229
+ if (!quietMode) {
230
+ const srcCount = usageResult.sources.filter(s => s.warningCount > 0).length;
231
+ if (usageResult.valid) {
232
+ console.log(` ✅ CSS usage probe: all text tokens remapped (${usageResult.sources.length} sources scanned)`);
233
+ }
234
+ else {
235
+ console.log(` ⚠ ${usageResult.warnings.length} unremediated token(s) across ${srcCount} source(s)`);
236
+ }
237
+ }
238
+ }
239
+ }
147
240
  // Summary
148
241
  if (!quietMode) {
149
242
  const profileLabel = profile ? ` (profile: ${profile.template})` : '';
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/bin/commands/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/bin/commands/validate.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,8 @@ import { runManifestResolve } from './commands/manifest.js';
12
12
  import { runContrast } from './commands/contrast.js';
13
13
  import { runInit } from './commands/init.js';
14
14
  import { runLlms } from './commands/llms.js';
15
+ import { runCockpit } from './commands/cockpit.js';
16
+ import { runThemeAudit } from './commands/theme-audit.js';
15
17
  const [, , command, ...args] = process.argv;
16
18
  switch (command) {
17
19
  case 'init':
@@ -51,6 +53,12 @@ switch (command) {
51
53
  case 'llms':
52
54
  runLlms(args);
53
55
  break;
56
+ case 'cockpit':
57
+ runCockpit(args);
58
+ break;
59
+ case 'theme-audit':
60
+ runThemeAudit(args);
61
+ break;
54
62
  default:
55
63
  console.log(`
56
64
  🎨 Valentino Engine v0.1.0 — Antifragile Open Source UI Design Engine
@@ -65,8 +73,14 @@ Usage:
65
73
  valentino catalog resolve <spec.json> --catalog <catalog.json> Resolve spec with catalog
66
74
  valentino manifest resolve <manifest.json> --route /path Resolve route to page ID
67
75
  valentino llms <manifest.json> [--content c.json] [--site N] Generate llms.txt + llms-full.txt
76
+ valentino cockpit <spec.json> Interactive conversational REPL
77
+ valentino cockpit <spec.json> --serve [--port N] Web cockpit (browser UI)
78
+ valentino cockpit <spec.json> <action.json> Execute cockpit action on page spec
79
+ valentino cockpit <spec.json> --parse "text" Parse intent (dry run)
80
+ valentino cockpit --schema <page|action|section [type]> Print JSON Schema
81
+ valentino theme-audit <pack.json> [--registry r.json] [--level AA|AAA] Audit theme-pack contrast on surfaces
68
82
 
69
- Epic: https://dev.azure.com/EasyWayData/EasyWay-DataPortal/_workitems/edit/480
83
+ GitHub: https://github.com/hale-bopp-data/valentino-engine
70
84
  `);
71
85
  }
72
86
  //# sourceMappingURL=valentino.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"valentino.js","sourceRoot":"","sources":["../../src/bin/valentino.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,MAAM,CAAC,EAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;AAE3C,QAAQ,OAAO,EAAE,CAAC;IACd,KAAK,MAAM;QACP,OAAO,CAAC,IAAI,CAAC,CAAC;QACd,MAAM;IAEV,KAAK,OAAO;QACR,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,MAAM;IAEV,KAAK,UAAU;QACX,WAAW,CAAC,IAAI,CAAC,CAAC;QAClB,MAAM;IAEV,KAAK,YAAY;QACb,aAAa,EAAE,CAAC;QAChB,MAAM;IAEV,KAAK,OAAO;QACR,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM;IAEV,KAAK,SAAS;QACV,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;YAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACvD,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;YACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,MAAM;IAEV,KAAK,UAAU;QACX,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;YAAE,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACxD,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;YACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,MAAM;IAEV,KAAK,UAAU;QACX,WAAW,CAAC,IAAI,CAAC,CAAC;QAClB,MAAM;IAEV,KAAK,MAAM;QACP,OAAO,CAAC,IAAI,CAAC,CAAC;QACd,MAAM;IAEV;QACI,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;CAenB,CAAC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"valentino.js","sourceRoot":"","sources":["../../src/bin/valentino.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,CAAC,EAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;AAE3C,QAAQ,OAAO,EAAE,CAAC;IACd,KAAK,MAAM;QACP,OAAO,CAAC,IAAI,CAAC,CAAC;QACd,MAAM;IAEV,KAAK,OAAO;QACR,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,MAAM;IAEV,KAAK,UAAU;QACX,WAAW,CAAC,IAAI,CAAC,CAAC;QAClB,MAAM;IAEV,KAAK,YAAY;QACb,aAAa,EAAE,CAAC;QAChB,MAAM;IAEV,KAAK,OAAO;QACR,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM;IAEV,KAAK,SAAS;QACV,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;YAAE,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACvD,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAC;YACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,MAAM;IAEV,KAAK,UAAU;QACX,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;YAAE,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;aACxD,CAAC;YACF,OAAO,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;YACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,MAAM;IAEV,KAAK,UAAU;QACX,WAAW,CAAC,IAAI,CAAC,CAAC;QAClB,MAAM;IAEV,KAAK,MAAM;QACP,OAAO,CAAC,IAAI,CAAC,CAAC;QACd,MAAM;IAEV,KAAK,SAAS;QACV,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,MAAM;IAEV,KAAK,aAAa;QACd,aAAa,CAAC,IAAI,CAAC,CAAC;QACpB,MAAM;IAEV;QACI,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;CAqBnB,CAAC,CAAC;AACH,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Cockpit Server — HTTP API + Web UI for the Valentino Conversational Cockpit.
3
+ * Feature #778 (Il Sarto Parla), PBI #781 (Phase 2).
4
+ *
5
+ * Wraps cockpit-api over HTTP. Serves a built-in web UI.
6
+ * Zero external dependencies — uses Node built-in http module.
7
+ *
8
+ * Usage:
9
+ * npx tsx src/cockpit-server.ts <spec.json> [--port 3781]
10
+ * valentino cockpit <spec.json> --serve [--port 3781]
11
+ */
12
+ export type CockpitServerOptions = {
13
+ specPath: string;
14
+ port?: number;
15
+ };
16
+ export declare function startCockpitServer(options: CockpitServerOptions): void;
17
+ //# sourceMappingURL=cockpit-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cockpit-server.d.ts","sourceRoot":"","sources":["../src/cockpit-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA0hBH,MAAM,MAAM,oBAAoB,GAAG;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAmDtE"}