@vib3code/sdk 2.0.1 → 2.0.3-canary.0a63e71

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 (192) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/DOCS/AGENT_HARNESS_ARCHITECTURE.md +245 -0
  3. package/DOCS/ANDROID_DEPLOYMENT.md +59 -0
  4. package/DOCS/ARCHITECTURE.md +1 -0
  5. package/DOCS/CI_TESTING.md +2 -0
  6. package/DOCS/CLI_ONBOARDING.md +3 -1
  7. package/DOCS/CONTROL_REFERENCE.md +2 -0
  8. package/DOCS/CROSS_SITE_DESIGN_PATTERNS.md +119 -0
  9. package/DOCS/ENV_SETUP.md +2 -0
  10. package/DOCS/EPIC_SCROLL_EVENTS.md +775 -0
  11. package/DOCS/EXPANSION_DESIGN.md +979 -0
  12. package/DOCS/EXPANSION_DESIGN_ULTRA.md +389 -0
  13. package/DOCS/EXPORT_FORMATS.md +2 -0
  14. package/DOCS/GPU_DISPOSAL_GUIDE.md +2 -0
  15. package/DOCS/HANDOFF_LANDING_PAGE.md +156 -0
  16. package/DOCS/HANDOFF_SDK_DEVELOPMENT.md +495 -0
  17. package/DOCS/LICENSING_TIERS.md +2 -0
  18. package/DOCS/MASTER_PLAN_2026-01-31.md +4 -2
  19. package/DOCS/MULTIVIZ_CHOREOGRAPHY_PATTERNS.md +939 -0
  20. package/DOCS/OBS_SETUP_GUIDE.md +2 -0
  21. package/DOCS/OPTIMIZATION_PLAN_MATH.md +119 -0
  22. package/DOCS/PRODUCT_STRATEGY.md +65 -0
  23. package/DOCS/PROJECT_SETUP.md +2 -0
  24. package/DOCS/README.md +105 -0
  25. package/DOCS/REFERENCE_SCROLL_ANALYSIS.md +99 -0
  26. package/DOCS/RENDERER_LIFECYCLE.md +2 -0
  27. package/DOCS/REPO_MANIFEST.md +2 -0
  28. package/DOCS/ROADMAP.md +113 -0
  29. package/DOCS/SCROLL_TIMELINE_v3.md +271 -0
  30. package/DOCS/SITE_REFACTOR_PLAN.md +102 -0
  31. package/DOCS/STATUS.md +26 -0
  32. package/DOCS/SYSTEM_INVENTORY.md +37 -32
  33. package/DOCS/TELEMETRY_EXPORTS.md +2 -0
  34. package/DOCS/VISUAL_ANALYSIS_CLICKERSS.md +87 -0
  35. package/DOCS/VISUAL_ANALYSIS_FACETAD.md +135 -0
  36. package/DOCS/VISUAL_ANALYSIS_SIMONE.md +97 -0
  37. package/DOCS/VISUAL_ANALYSIS_TABLESIDE.md +88 -0
  38. package/DOCS/WEBGPU_STATUS.md +121 -38
  39. package/DOCS/XR_BENCHMARKS.md +2 -0
  40. package/DOCS/archive/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md +1 -0
  41. package/DOCS/archive/DEV_TRACK_ANALYSIS.md +1 -0
  42. package/DOCS/archive/DEV_TRACK_PLAN_2026-01-07.md +1 -0
  43. package/DOCS/archive/SESSION_014_PLAN.md +1 -0
  44. package/DOCS/archive/SESSION_LOG_2026-01-07.md +1 -0
  45. package/DOCS/archive/STRATEGIC_BLUEPRINT_2026-01-07.md +1 -0
  46. package/DOCS/archive/SYSTEM_AUDIT_2026-01-30.md +1 -0
  47. package/DOCS/archive/WEBGPU_STATUS_2026-02-15_STALE.md +1 -0
  48. package/DOCS/{DEV_TRACK_SESSION_2026-01-31.md → dev-tracks/DEV_TRACK_SESSION_2026-01-31.md} +3 -1
  49. package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-06.md +233 -0
  50. package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-13.md +129 -0
  51. package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-15.md +144 -0
  52. package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-16.md +110 -0
  53. package/DOCS/dev-tracks/PERF_UPGRADE_2026-02-16.md +310 -0
  54. package/DOCS/dev-tracks/README.md +12 -0
  55. package/README.md +26 -13
  56. package/cpp/CMakeLists.txt +236 -0
  57. package/cpp/bindings/embind.cpp +269 -0
  58. package/cpp/build.sh +129 -0
  59. package/cpp/geometry/Crystal.cpp +103 -0
  60. package/cpp/geometry/Fractal.cpp +136 -0
  61. package/cpp/geometry/GeometryGenerator.cpp +262 -0
  62. package/cpp/geometry/KleinBottle.cpp +71 -0
  63. package/cpp/geometry/Sphere.cpp +134 -0
  64. package/cpp/geometry/Tesseract.cpp +94 -0
  65. package/cpp/geometry/Tetrahedron.cpp +83 -0
  66. package/cpp/geometry/Torus.cpp +65 -0
  67. package/cpp/geometry/WarpFunctions.cpp +238 -0
  68. package/cpp/geometry/Wave.cpp +85 -0
  69. package/cpp/include/vib3_ffi.h +238 -0
  70. package/cpp/math/Mat4x4.cpp +409 -0
  71. package/cpp/math/Mat4x4.hpp +209 -0
  72. package/cpp/math/Projection.cpp +142 -0
  73. package/cpp/math/Projection.hpp +148 -0
  74. package/cpp/math/Rotor4D.cpp +322 -0
  75. package/cpp/math/Rotor4D.hpp +204 -0
  76. package/cpp/math/Vec4.cpp +303 -0
  77. package/cpp/math/Vec4.hpp +225 -0
  78. package/cpp/src/vib3_ffi.cpp +607 -0
  79. package/cpp/tests/Geometry_test.cpp +213 -0
  80. package/cpp/tests/Mat4x4_test.cpp +494 -0
  81. package/cpp/tests/Projection_test.cpp +298 -0
  82. package/cpp/tests/Rotor4D_test.cpp +423 -0
  83. package/cpp/tests/Vec4_test.cpp +489 -0
  84. package/docs/webgpu-live.html +1 -1
  85. package/package.json +41 -30
  86. package/src/agent/index.js +1 -3
  87. package/src/agent/mcp/MCPServer.js +1220 -144
  88. package/src/agent/mcp/index.js +1 -1
  89. package/src/agent/mcp/stdio-server.js +264 -0
  90. package/src/agent/mcp/tools.js +498 -31
  91. package/src/cli/index.js +431 -47
  92. package/src/core/CanvasManager.js +97 -204
  93. package/src/core/ErrorReporter.js +1 -1
  94. package/src/core/Parameters.js +1 -1
  95. package/src/core/VIB3Engine.js +93 -4
  96. package/src/core/VitalitySystem.js +53 -0
  97. package/src/core/index.js +18 -0
  98. package/src/core/renderers/FacetedRendererAdapter.js +10 -9
  99. package/src/core/renderers/HolographicRendererAdapter.js +13 -9
  100. package/src/core/renderers/QuantumRendererAdapter.js +11 -7
  101. package/src/creative/AestheticMapper.js +628 -0
  102. package/src/creative/ChoreographyPlayer.js +481 -0
  103. package/src/creative/index.js +11 -0
  104. package/src/experimental/GameLoop.js +72 -0
  105. package/src/experimental/LatticePhysics.js +100 -0
  106. package/src/experimental/LiveDirector.js +143 -0
  107. package/src/experimental/PlayerController4D.js +154 -0
  108. package/src/experimental/VIB3Actor.js +138 -0
  109. package/src/experimental/VIB3Compositor.js +117 -0
  110. package/src/experimental/VIB3Link.js +122 -0
  111. package/src/experimental/VIB3Orchestrator.js +146 -0
  112. package/src/experimental/VIB3Universe.js +109 -0
  113. package/src/experimental/demos/CrystalLabyrinth.js +202 -0
  114. package/src/export/TradingCardManager.js +3 -4
  115. package/src/export/index.js +11 -1
  116. package/src/faceted/FacetedSystem.js +260 -394
  117. package/src/games/glyph-war/GlyphWarVisualizer.js +641 -0
  118. package/src/geometry/generators/Crystal.js +2 -2
  119. package/src/geometry/warp/HypersphereCore.js +53 -24
  120. package/src/holograms/HolographicVisualizer.js +84 -98
  121. package/src/holograms/RealHolographicSystem.js +194 -43
  122. package/src/math/Mat4x4.js +308 -105
  123. package/src/math/Rotor4D.js +124 -40
  124. package/src/math/Vec4.js +200 -103
  125. package/src/math/index.js +7 -7
  126. package/src/polychora/PolychoraSystem.js +77 -0
  127. package/src/quantum/QuantumEngine.js +103 -66
  128. package/src/quantum/QuantumVisualizer.js +31 -22
  129. package/src/reactivity/index.js +3 -5
  130. package/src/render/LayerPresetManager.js +372 -0
  131. package/src/render/LayerReactivityBridge.js +344 -0
  132. package/src/render/LayerRelationshipGraph.js +610 -0
  133. package/src/render/MultiCanvasBridge.js +148 -25
  134. package/src/render/ShaderLoader.js +38 -0
  135. package/src/render/ShaderProgram.js +4 -4
  136. package/src/render/UnifiedRenderBridge.js +4 -1
  137. package/src/render/backends/WebGPUBackend.js +8 -4
  138. package/src/render/index.js +27 -2
  139. package/src/scene/Node4D.js +74 -24
  140. package/src/scene/index.js +4 -4
  141. package/src/shaders/common/geometry24.glsl +65 -0
  142. package/src/shaders/common/geometry24.wgsl +54 -0
  143. package/src/shaders/common/rotation4d.glsl +4 -4
  144. package/src/shaders/common/rotation4d.wgsl +2 -2
  145. package/src/shaders/common/uniforms.wgsl +15 -8
  146. package/src/shaders/faceted/faceted.frag.glsl +220 -80
  147. package/src/shaders/faceted/faceted.frag.wgsl +144 -90
  148. package/src/shaders/holographic/holographic.frag.glsl +28 -9
  149. package/src/shaders/holographic/holographic.frag.wgsl +112 -41
  150. package/src/shaders/quantum/quantum.frag.glsl +1 -0
  151. package/src/shaders/quantum/quantum.frag.wgsl +6 -4
  152. package/src/testing/ParallelTestFramework.js +2 -2
  153. package/src/ui/adaptive/renderers/webgpu/WebGPURenderer.ts +2 -2
  154. package/src/viewer/GalleryUI.js +17 -0
  155. package/src/viewer/ViewerPortal.js +2 -2
  156. package/src/viewer/index.js +1 -1
  157. package/tools/headless-renderer.js +258 -0
  158. package/tools/shader-sync-verify.js +14 -8
  159. package/tools/site-analysis/all-reports.json +32 -0
  160. package/tools/site-analysis/combined-analysis.md +50 -0
  161. package/tools/site-analyzer.mjs +779 -0
  162. package/tools/visual-catalog/capture.js +276 -0
  163. package/tools/visual-catalog/composite.js +138 -0
  164. package/types/adaptive-sdk.d.ts +204 -5
  165. package/types/agent/cli.d.ts +78 -0
  166. package/types/agent/index.d.ts +18 -0
  167. package/types/agent/mcp.d.ts +87 -0
  168. package/types/agent/telemetry.d.ts +190 -0
  169. package/types/core/VIB3Engine.d.ts +26 -0
  170. package/types/core/index.d.ts +261 -0
  171. package/types/creative/AestheticMapper.d.ts +72 -0
  172. package/types/creative/ChoreographyPlayer.d.ts +96 -0
  173. package/types/creative/index.d.ts +17 -0
  174. package/types/export/index.d.ts +243 -0
  175. package/types/geometry/index.d.ts +164 -0
  176. package/types/math/index.d.ts +214 -0
  177. package/types/render/LayerPresetManager.d.ts +78 -0
  178. package/types/render/LayerReactivityBridge.d.ts +85 -0
  179. package/types/render/LayerRelationshipGraph.d.ts +174 -0
  180. package/types/render/index.d.ts +3 -0
  181. package/types/scene/index.d.ts +204 -0
  182. package/types/systems/index.d.ts +244 -0
  183. package/types/variations/index.d.ts +62 -0
  184. package/types/viewer/index.d.ts +225 -0
  185. package/DOCS/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md +0 -34
  186. package/DOCS/DEV_TRACK_ANALYSIS.md +0 -77
  187. package/DOCS/DEV_TRACK_PLAN_2026-01-07.md +0 -42
  188. package/DOCS/SESSION_014_PLAN.md +0 -195
  189. package/DOCS/SESSION_LOG_2026-01-07.md +0 -56
  190. package/DOCS/STRATEGIC_BLUEPRINT_2026-01-07.md +0 -72
  191. package/DOCS/SYSTEM_AUDIT_2026-01-30.md +0 -738
  192. /package/src/viewer/{ReactivityManager.js → ViewerInputHandler.js} +0 -0
@@ -0,0 +1,276 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * VIB3+ Visual Catalog — Automated Screenshot Capture
4
+ *
5
+ * Generates a comprehensive visual reference catalog using Playwright:
6
+ * 1. All 3 systems x 24 geometries = 72 base screenshots
7
+ * 2. Parameter effect pairs (before/after) for key params
8
+ * 3. Composite grid sheets for AI agent context
9
+ *
10
+ * Usage:
11
+ * npx playwright install chromium # first time
12
+ * node tools/visual-catalog/capture.js [--systems] [--params] [--grids] [--all]
13
+ *
14
+ * Output: visual-catalog/output/
15
+ * ├── systems/ # Per-system screenshots
16
+ * │ ├── quantum/ # quantum-geo00-tetrahedron.png ... quantum-geo23-ht-crystal.png
17
+ * │ ├── faceted/
18
+ * │ └── holographic/
19
+ * ├── params/ # Parameter before/after pairs
20
+ * │ ├── hue/ # hue-000.png, hue-120.png, hue-240.png
21
+ * │ ├── gridDensity/
22
+ * │ ├── chaos/
23
+ * │ └── ...
24
+ * ├── grids/ # Composite reference sheets
25
+ * │ ├── quantum-all-geometries.png
26
+ * │ ├── faceted-all-geometries.png
27
+ * │ ├── holographic-all-geometries.png
28
+ * │ └── param-effects-cheatsheet.png
29
+ * └── catalog.json # Index with metadata for AI agents
30
+ */
31
+
32
+ import { chromium } from '@playwright/test';
33
+ import { mkdirSync, writeFileSync, existsSync } from 'fs';
34
+ import { join, dirname } from 'path';
35
+ import { fileURLToPath } from 'url';
36
+ import { execSync } from 'child_process';
37
+
38
+ const __dirname = dirname(fileURLToPath(import.meta.url));
39
+ const ROOT = join(__dirname, '../..');
40
+ const OUTPUT = join(ROOT, 'visual-catalog', 'output');
41
+
42
+ // ─── Configuration ─────────────────────────────────────────────
43
+
44
+ const SYSTEMS = ['quantum', 'holographic', 'faceted'];
45
+ const SYSTEM_IDX = { quantum: 0, holographic: 1, faceted: 2 };
46
+
47
+ const GEOMETRIES = [
48
+ 'Tetrahedron', 'Hypercube', 'Sphere', 'Torus',
49
+ 'Klein Bottle', 'Fractal', 'Wave', 'Crystal',
50
+ 'Hyper-Tetra', 'Hyper-Cube', 'Hyper-Sphere', 'Hyper-Torus',
51
+ 'Hyper-Klein', 'Hyper-Fractal', 'Hyper-Wave', 'Hyper-Crystal',
52
+ 'HT-Tetra', 'HT-Cube', 'HT-Sphere', 'HT-Torus',
53
+ 'HT-Klein', 'HT-Fractal', 'HT-Wave', 'HT-Crystal',
54
+ ];
55
+
56
+ const DEFAULTS = {
57
+ geometry: 3, hue: 200, gridDensity: 24, speed: 1.0,
58
+ morphFactor: 0.5, chaos: 0.2, intensity: 0.7, saturation: 0.8,
59
+ dimension: 3.5, rot4dXW: 0, rot4dYW: 0, rot4dZW: 0,
60
+ rot4dXY: 0, rot4dXZ: 0, rot4dYZ: 0,
61
+ };
62
+
63
+ // Parameters to showcase with before/after values
64
+ const PARAM_SHOWCASES = {
65
+ hue: [0, 60, 120, 180, 240, 300],
66
+ gridDensity: [8, 20, 40, 60, 80],
67
+ chaos: [0, 0.25, 0.5, 0.75, 1.0],
68
+ morphFactor: [0, 0.5, 1.0, 1.5, 2.0],
69
+ intensity: [0.2, 0.5, 0.7, 0.9, 1.0],
70
+ dimension: [3.0, 3.25, 3.5, 3.75, 4.0, 4.5],
71
+ speed: [0.1, 0.5, 1.0, 2.0, 3.0],
72
+ rot4dXW: [0, 1.57, 3.14, 4.71],
73
+ rot4dYW: [0, 1.57, 3.14, 4.71],
74
+ saturation: [0, 0.25, 0.5, 0.75, 1.0],
75
+ };
76
+
77
+ const CANVAS_W = 600;
78
+ const CANVAS_H = 450;
79
+ const SETTLE_MS = 800; // ms to let the shader run before capturing
80
+
81
+ // ─── Helpers ───────────────────────────────────────────────────
82
+
83
+ function ensureDir(dir) {
84
+ if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
85
+ }
86
+
87
+ function slug(name) {
88
+ return name.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/-+$/, '');
89
+ }
90
+
91
+ // ─── Core Capture Functions ────────────────────────────────────
92
+
93
+ /**
94
+ * Navigate to the test page and set up system + params, then screenshot the canvas.
95
+ */
96
+ async function captureState(page, system, params, outputPath) {
97
+ const sysIdx = SYSTEM_IDX[system];
98
+
99
+ await page.evaluate(async ({ sysIdx, params }) => {
100
+ // Switch system
101
+ const btn = document.querySelector(`[data-pg-system="${sysIdx}"]`);
102
+ if (btn) btn.click();
103
+
104
+ // Wait a tick for system to initialize
105
+ await new Promise(r => setTimeout(r, 300));
106
+
107
+ // Set slider values
108
+ for (const [param, value] of Object.entries(params)) {
109
+ const input = document.getElementById(`ctrl-${param}`);
110
+ if (input) {
111
+ input.value = value;
112
+ input.dispatchEvent(new Event('input', { bubbles: true }));
113
+ }
114
+ }
115
+
116
+ // Set geometry via select
117
+ if ('geometry' in params) {
118
+ const geo = document.getElementById('ctrl-geometry');
119
+ if (geo) {
120
+ geo.value = params.geometry;
121
+ geo.dispatchEvent(new Event('change', { bubbles: true }));
122
+ }
123
+ }
124
+ }, { sysIdx, params });
125
+
126
+ // Let the shader settle
127
+ await page.waitForTimeout(SETTLE_MS);
128
+
129
+ // Screenshot the canvas element
130
+ const canvas = page.locator('#playground-canvas');
131
+ await canvas.screenshot({ path: outputPath });
132
+ }
133
+
134
+ // ─── Main Pipeline ─────────────────────────────────────────────
135
+
136
+ async function captureAllSystems(page, catalog) {
137
+ console.log('\n=== CAPTURING ALL SYSTEMS x GEOMETRIES ===\n');
138
+
139
+ for (const system of SYSTEMS) {
140
+ const dir = join(OUTPUT, 'systems', system);
141
+ ensureDir(dir);
142
+
143
+ for (let geo = 0; geo < 24; geo++) {
144
+ const geoName = GEOMETRIES[geo];
145
+ const filename = `${system}-geo${String(geo).padStart(2, '0')}-${slug(geoName)}.png`;
146
+ const outPath = join(dir, filename);
147
+
148
+ const params = { ...DEFAULTS, geometry: geo };
149
+ process.stdout.write(` ${system} / ${geoName} (${geo})...`);
150
+ await captureState(page, system, params, outPath);
151
+ console.log(' done');
152
+
153
+ catalog.systems.push({
154
+ system, geometry: geo, name: geoName,
155
+ path: `systems/${system}/${filename}`,
156
+ params: { ...params },
157
+ });
158
+ }
159
+ }
160
+ }
161
+
162
+ async function captureParamEffects(page, catalog) {
163
+ console.log('\n=== CAPTURING PARAMETER EFFECTS ===\n');
164
+
165
+ for (const [param, values] of Object.entries(PARAM_SHOWCASES)) {
166
+ const dir = join(OUTPUT, 'params', param);
167
+ ensureDir(dir);
168
+
169
+ for (const value of values) {
170
+ const params = { ...DEFAULTS, [param]: value };
171
+ const label = typeof value === 'number' ? value.toFixed(2).replace('.', '_') : String(value);
172
+ const filename = `${param}-${label}.png`;
173
+ const outPath = join(dir, filename);
174
+
175
+ process.stdout.write(` ${param}=${value}...`);
176
+ await captureState(page, 'faceted', params, outPath);
177
+ console.log(' done');
178
+
179
+ catalog.params.push({
180
+ param, value, path: `params/${param}/${filename}`,
181
+ system: 'faceted', params: { ...params },
182
+ });
183
+ }
184
+ }
185
+ }
186
+
187
+ async function compositeGrids(catalog) {
188
+ console.log('\n=== COMPOSITING GRID SHEETS ===\n');
189
+
190
+ const gridDir = join(OUTPUT, 'grids');
191
+ ensureDir(gridDir);
192
+
193
+ // Write a simple HTML-based grid compositor
194
+ // (uses browser-native canvas compositing via a helper page)
195
+ const gridManifest = {
196
+ note: 'Grid compositing requires manual or CI-based generation',
197
+ systems: SYSTEMS.map(sys => ({
198
+ name: `${sys}-all-geometries`,
199
+ images: catalog.systems
200
+ .filter(e => e.system === sys)
201
+ .map(e => e.path),
202
+ grid: '6x4',
203
+ })),
204
+ params: Object.keys(PARAM_SHOWCASES).map(param => ({
205
+ name: `param-${param}-effect`,
206
+ images: catalog.params
207
+ .filter(e => e.param === param)
208
+ .map(e => e.path),
209
+ grid: `${PARAM_SHOWCASES[param].length}x1`,
210
+ })),
211
+ };
212
+
213
+ writeFileSync(join(gridDir, 'grid-manifest.json'), JSON.stringify(gridManifest, null, 2));
214
+ console.log(' Grid manifest written (compose with tools/visual-catalog/composite.js)');
215
+
216
+ catalog.grids = gridManifest;
217
+ }
218
+
219
+ // ─── Entry Point ───────────────────────────────────────────────
220
+
221
+ async function main() {
222
+ const args = process.argv.slice(2);
223
+ const doSystems = args.includes('--systems') || args.includes('--all') || args.length === 0;
224
+ const doParams = args.includes('--params') || args.includes('--all') || args.length === 0;
225
+ const doGrids = args.includes('--grids') || args.includes('--all') || args.length === 0;
226
+
227
+ console.log('VIB3+ Visual Catalog Generator v2.0.3');
228
+ console.log(`Output: ${OUTPUT}`);
229
+ ensureDir(OUTPUT);
230
+
231
+ // Start dev server if not already running
232
+ let serverProcess = null;
233
+ try {
234
+ execSync('curl -s http://localhost:5173/ > /dev/null 2>&1');
235
+ console.log('Dev server already running on :5173');
236
+ } catch {
237
+ console.log('Starting dev server...');
238
+ const { spawn } = await import('child_process');
239
+ serverProcess = spawn('npx', ['vite', '--port', '5173'], { cwd: ROOT, stdio: 'ignore', detached: true });
240
+ serverProcess.unref();
241
+ await new Promise(r => setTimeout(r, 3000));
242
+ }
243
+
244
+ const browser = await chromium.launch({ headless: true });
245
+ const context = await browser.newContext({ viewport: { width: 1280, height: 900 } });
246
+ const page = await context.newPage();
247
+
248
+ // Navigate to landing page and scroll to playground section
249
+ await page.goto('http://localhost:5173/', { waitUntil: 'networkidle', timeout: 20000 });
250
+ await page.waitForTimeout(2000);
251
+
252
+ // Scroll playground into view to trigger GPU context acquisition
253
+ await page.evaluate(() => {
254
+ const el = document.getElementById('playgroundSection');
255
+ if (el) el.scrollIntoView({ behavior: 'instant', block: 'center' });
256
+ });
257
+ await page.waitForTimeout(1500);
258
+
259
+ const catalog = { version: '2.0.3', generated: new Date().toISOString(), systems: [], params: [], grids: null };
260
+
261
+ if (doSystems) await captureAllSystems(page, catalog);
262
+ if (doParams) await captureParamEffects(page, catalog);
263
+ if (doGrids) await compositeGrids(catalog);
264
+
265
+ // Write catalog index
266
+ writeFileSync(join(OUTPUT, 'catalog.json'), JSON.stringify(catalog, null, 2));
267
+ console.log(`\nCatalog written: ${join(OUTPUT, 'catalog.json')}`);
268
+ console.log(`Total screenshots: ${catalog.systems.length + catalog.params.length}`);
269
+
270
+ await browser.close();
271
+ if (serverProcess) {
272
+ try { process.kill(-serverProcess.pid); } catch {}
273
+ }
274
+ }
275
+
276
+ main().catch(e => { console.error(e); process.exit(1); });
@@ -0,0 +1,138 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * VIB3+ Visual Catalog — Grid Compositor
4
+ *
5
+ * Reads screenshots from visual-catalog/output/ and composites them into
6
+ * grid reference sheets for AI agent context. Uses HTML Canvas via Playwright.
7
+ *
8
+ * Usage:
9
+ * node tools/visual-catalog/composite.js
10
+ *
11
+ * Requires: visual-catalog/output/grids/grid-manifest.json (generated by capture.js)
12
+ */
13
+
14
+ import { chromium } from '@playwright/test';
15
+ import { readFileSync, writeFileSync, existsSync } from 'fs';
16
+ import { join, dirname } from 'path';
17
+ import { fileURLToPath } from 'url';
18
+
19
+ const __dirname = dirname(fileURLToPath(import.meta.url));
20
+ const ROOT = join(__dirname, '../..');
21
+ const OUTPUT = join(ROOT, 'visual-catalog', 'output');
22
+ const GRIDS_DIR = join(OUTPUT, 'grids');
23
+
24
+ const THUMB_W = 200;
25
+ const THUMB_H = 150;
26
+ const LABEL_H = 24;
27
+ const PAD = 4;
28
+
29
+ async function main() {
30
+ const manifestPath = join(GRIDS_DIR, 'grid-manifest.json');
31
+ if (!existsSync(manifestPath)) {
32
+ console.error('Run capture.js first to generate the grid manifest');
33
+ process.exit(1);
34
+ }
35
+
36
+ const manifest = JSON.parse(readFileSync(manifestPath, 'utf-8'));
37
+ const browser = await chromium.launch({ headless: true });
38
+ const context = await browser.newContext();
39
+
40
+ // Compose system grids (6 cols x 4 rows = 24 geometries)
41
+ for (const grid of manifest.systems) {
42
+ const [cols, rows] = grid.grid.split('x').map(Number);
43
+ const w = cols * (THUMB_W + PAD) + PAD;
44
+ const h = rows * (THUMB_H + LABEL_H + PAD) + PAD;
45
+
46
+ const page = await context.newPage({ viewport: { width: w, height: h } });
47
+
48
+ // Build HTML grid
49
+ const images = grid.images.map((imgPath, i) => {
50
+ const geoIdx = i;
51
+ const geoName = [
52
+ 'Tetrahedron', 'Hypercube', 'Sphere', 'Torus',
53
+ 'Klein Bottle', 'Fractal', 'Wave', 'Crystal',
54
+ 'H-Tetra', 'H-Cube', 'H-Sphere', 'H-Torus',
55
+ 'H-Klein', 'H-Fractal', 'H-Wave', 'H-Crystal',
56
+ 'HT-Tetra', 'HT-Cube', 'HT-Sphere', 'HT-Torus',
57
+ 'HT-Klein', 'HT-Fractal', 'HT-Wave', 'HT-Crystal',
58
+ ][geoIdx] || `Geo ${geoIdx}`;
59
+ const fullPath = join(OUTPUT, imgPath);
60
+ const b64 = existsSync(fullPath)
61
+ ? `data:image/png;base64,${readFileSync(fullPath).toString('base64')}`
62
+ : '';
63
+ return `<div class="cell">
64
+ <img src="${b64}" width="${THUMB_W}" height="${THUMB_H}">
65
+ <div class="label">${geoIdx}: ${geoName}</div>
66
+ </div>`;
67
+ });
68
+
69
+ const html = `<!DOCTYPE html><html><head><style>
70
+ body { margin:0; background:#0a0a14; font-family:monospace; }
71
+ .grid { display:grid; grid-template-columns:repeat(${cols}, ${THUMB_W + PAD}px); gap:${PAD}px; padding:${PAD}px; }
72
+ .cell { text-align:center; }
73
+ .cell img { border-radius:6px; border:1px solid rgba(0,240,255,0.2); display:block; }
74
+ .label { color:rgba(255,255,255,0.7); font-size:10px; height:${LABEL_H}px; line-height:${LABEL_H}px; }
75
+ h3 { color:#00f0ff; text-align:center; margin:8px 0 4px; font-size:14px; letter-spacing:2px; }
76
+ </style></head><body>
77
+ <h3>${grid.name.toUpperCase().replace(/-/g, ' ')}</h3>
78
+ <div class="grid">${images.join('')}</div>
79
+ </body></html>`;
80
+
81
+ await page.setContent(html, { waitUntil: 'load' });
82
+ await page.waitForTimeout(500);
83
+
84
+ const outPath = join(GRIDS_DIR, `${grid.name}.png`);
85
+ await page.screenshot({ path: outPath, fullPage: true });
86
+ console.log(`Composited: ${grid.name}.png (${cols}x${rows})`);
87
+ await page.close();
88
+ }
89
+
90
+ // Compose parameter effect strips
91
+ for (const paramGrid of manifest.params) {
92
+ const numImages = paramGrid.images.length;
93
+ const w = numImages * (THUMB_W + PAD) + PAD;
94
+ const h = THUMB_H + LABEL_H + PAD * 2 + 30;
95
+
96
+ const page = await context.newPage({ viewport: { width: w, height: h } });
97
+
98
+ const images = paramGrid.images.map((imgPath, i) => {
99
+ const fullPath = join(OUTPUT, imgPath);
100
+ const b64 = existsSync(fullPath)
101
+ ? `data:image/png;base64,${readFileSync(fullPath).toString('base64')}`
102
+ : '';
103
+ const paramName = paramGrid.name.replace('param-', '').replace('-effect', '');
104
+ // Extract value from filename
105
+ const match = imgPath.match(/[\d_]+\.png$/);
106
+ const valStr = match ? match[0].replace('.png', '').replace(/_/g, '.') : `${i}`;
107
+ return `<div class="cell">
108
+ <img src="${b64}" width="${THUMB_W}" height="${THUMB_H}">
109
+ <div class="label">${paramName}=${valStr}</div>
110
+ </div>`;
111
+ });
112
+
113
+ const html = `<!DOCTYPE html><html><head><style>
114
+ body { margin:0; background:#0a0a14; font-family:monospace; }
115
+ .strip { display:flex; gap:${PAD}px; padding:${PAD}px; }
116
+ .cell { text-align:center; }
117
+ .cell img { border-radius:6px; border:1px solid rgba(168,85,247,0.3); display:block; }
118
+ .label { color:rgba(255,255,255,0.7); font-size:10px; height:${LABEL_H}px; line-height:${LABEL_H}px; }
119
+ h3 { color:#a855f7; text-align:center; margin:8px 0 4px; font-size:13px; letter-spacing:2px; }
120
+ </style></head><body>
121
+ <h3>${paramGrid.name.toUpperCase().replace(/-/g, ' ')}</h3>
122
+ <div class="strip">${images.join('')}</div>
123
+ </body></html>`;
124
+
125
+ await page.setContent(html, { waitUntil: 'load' });
126
+ await page.waitForTimeout(300);
127
+
128
+ const outPath = join(GRIDS_DIR, `${paramGrid.name}.png`);
129
+ await page.screenshot({ path: outPath, fullPage: true });
130
+ console.log(`Composited: ${paramGrid.name}.png (${numImages} images)`);
131
+ await page.close();
132
+ }
133
+
134
+ await browser.close();
135
+ console.log('\nAll grids composited.');
136
+ }
137
+
138
+ main().catch(e => { console.error(e); process.exit(1); });
@@ -5,14 +5,20 @@
5
5
  * Barrel re-export for all typed modules.
6
6
  *
7
7
  * Typed modules:
8
- * - core/VIB3Engine (engine, systems, parameters, state)
9
- * - core/ErrorReporter (opt-in error capture)
10
- * - reactivity (ReactivityManager, ReactivityConfig, all input types)
11
- * - reactivity/SpatialInputSystem (universal spatial input)
8
+ * - core (VIB3Engine, CanvasManager, ParameterManager, ParameterMapper, VitalitySystem, RendererContracts, UnifiedResourceManager)
9
+ * - math (constants, projections, rotations, Vec4)
10
+ * - geometry (GeometryLibrary, generators, BufferBuilder)
11
+ * - systems (QuantumEngine, FacetedSystem, RealHolographicSystem)
12
+ * - scene (ObjectPool, TypedArrayPool, Vec4Pool, PoolManager)
13
+ * - viewer (ViewerPortal, ViewerInputHandler, GalleryUI, CardBending, AudioReactivity, TradingCardExporter)
14
+ * - variations (VariationManager)
15
+ * - reactivity (ReactivityManager, ReactivityConfig, SpatialInputSystem)
12
16
  * - render (WebGL/WebGPU backends, ShaderProgram, RenderState, CommandBuffer)
13
- * - creative (ColorPresets, TransitionAnimator, PostProcessing, Timeline)
17
+ * - creative (ColorPresets, TransitionAnimator, PostProcessing, Timeline, AestheticMapper, ChoreographyPlayer)
14
18
  * - integrations (React, Vue, Svelte, Figma, Three.js, TouchDesigner, OBS)
15
19
  * - advanced (WebXR, WebGPU Compute, MIDI, AI Presets, OffscreenWorker)
20
+ * - export (ExportManager, ShaderExporter, VIB3PackageExporter, TradingCardGenerator)
21
+ * - agent (MCPServer, AgentCLI, TelemetryService)
16
22
  */
17
23
 
18
24
  // Core engine
@@ -99,6 +105,37 @@ export {
99
105
  Shader4DOptions
100
106
  } from './render/index';
101
107
 
108
+ // Layer relationship system
109
+ export {
110
+ LayerRelationshipGraph,
111
+ RelationshipFn,
112
+ RelationshipPreset,
113
+ RelationshipConfig,
114
+ LayerRelationshipProfile,
115
+ LayerRelationshipExport,
116
+ LAYER_ORDER as RENDER_LAYER_ORDER,
117
+ PRESET_REGISTRY,
118
+ PROFILES
119
+ } from './render/LayerRelationshipGraph';
120
+
121
+ // Layer preset manager
122
+ export {
123
+ LayerPresetManager,
124
+ LayerPreset,
125
+ PresetMetadata,
126
+ PresetLibrary,
127
+ PresetManagerOptions
128
+ } from './render/LayerPresetManager';
129
+
130
+ // Layer reactivity bridge
131
+ export {
132
+ LayerReactivityBridge,
133
+ ModulationMapping,
134
+ InputState as LayerInputState,
135
+ ReactivityBridgeConfig,
136
+ MODULATION_PROFILES
137
+ } from './render/LayerReactivityBridge';
138
+
102
139
  // Creative tooling
103
140
  export {
104
141
  ColorPresetsSystem,
@@ -183,3 +220,165 @@ export {
183
220
  WorkerSwitchMessage,
184
221
  WorkerResizeMessage
185
222
  } from './advanced/index';
223
+
224
+ // Export system
225
+ export {
226
+ ExportManager,
227
+ ShaderExporter,
228
+ VIB3PackageExporter,
229
+ TradingCardGenerator,
230
+ TradingCardManager,
231
+ CardGeneratorBase,
232
+ FacetedCardGenerator,
233
+ QuantumCardGenerator,
234
+ HolographicCardGenerator,
235
+ TradingCardSystemFaceted,
236
+ TradingCardSystemHolographic,
237
+ TradingCardSystemQuantum,
238
+ VIB3_PACKAGE_VERSION,
239
+ exportSVG,
240
+ downloadSVG,
241
+ exportCSS,
242
+ downloadCSS,
243
+ toStyleObject,
244
+ exportLottie,
245
+ downloadLottie,
246
+ createVIB3Package
247
+ } from './export/index';
248
+
249
+ // Core - expanded types (CanvasManager, Parameters, RendererContracts, etc.)
250
+ export {
251
+ CanvasManager,
252
+ CanvasLayer,
253
+ ParameterManager,
254
+ ParameterDef,
255
+ VIB3Parameters,
256
+ ParameterConfiguration,
257
+ ParameterMapper,
258
+ MappableSystem,
259
+ VitalitySystem,
260
+ RendererContract,
261
+ RendererContractAdapter,
262
+ ResourceManagerContract,
263
+ FrameState,
264
+ UnifiedResourceManager
265
+ } from './core/index';
266
+
267
+ // Math - constants, projections, rotations, Vec4
268
+ export {
269
+ PI, TAU, HALF_PI, QUARTER_PI,
270
+ DEG_TO_RAD, RAD_TO_DEG,
271
+ EPSILON,
272
+ PHI, PHI_INV,
273
+ PLANE_NAMES as ROTATION_PLANE_NAMES,
274
+ encodeGeometry,
275
+ decodeGeometry,
276
+ toRadians,
277
+ toDegrees,
278
+ clamp,
279
+ lerp,
280
+ smoothstep,
281
+ smootherstep,
282
+ perspectiveProject4D,
283
+ stereographicProject4D,
284
+ ProjectionResult,
285
+ createRotationMatrix4D,
286
+ identityMatrix4x4,
287
+ multiplyMatrix4x4,
288
+ transposeMatrix4x4,
289
+ applyMatrix4x4,
290
+ vectorLength4D,
291
+ normalizeVector4D,
292
+ normalizeRotationAngles,
293
+ composeRotationMatrixFromAngles,
294
+ RotationPlane,
295
+ Matrix4x4,
296
+ Vector4D,
297
+ Vec4
298
+ } from './math/index';
299
+
300
+ // Geometry - library, generators, buffers
301
+ export {
302
+ GeometryLibrary,
303
+ Geometry4D,
304
+ VariationParameters,
305
+ GeometryBuffers,
306
+ buildVertexBuffer,
307
+ buildEdgeIndexBuffer,
308
+ buildFaceIndexBuffer,
309
+ buildGeometryBuffers,
310
+ generateTesseract,
311
+ generateSphere,
312
+ generateTorus
313
+ } from './geometry/index';
314
+
315
+ // Visualization systems
316
+ export {
317
+ QuantumEngine,
318
+ QuantumEngineOptions,
319
+ FacetedSystem,
320
+ FacetedSystemOptions,
321
+ RealHolographicSystem,
322
+ HolographicSystemOptions,
323
+ CanvasSet,
324
+ AudioData,
325
+ RenderMode
326
+ } from './systems/index';
327
+
328
+ // Scene - memory pools
329
+ export {
330
+ ObjectPool,
331
+ TypedArrayPool,
332
+ Vec4Pool,
333
+ Mat4x4Pool,
334
+ PoolManager,
335
+ pools,
336
+ PoolStats,
337
+ ObjectPoolOptions
338
+ } from './scene/index';
339
+
340
+ // Viewer - portal, input, gallery, cards
341
+ export {
342
+ ViewerPortal,
343
+ ViewerInputHandler,
344
+ GalleryUI,
345
+ CardBending,
346
+ AudioReactivity as ViewerAudioReactivity,
347
+ TradingCardExporter,
348
+ PortalMode,
349
+ RotationState,
350
+ InputSource,
351
+ InputPreset,
352
+ GalleryViewMode,
353
+ BendPreset,
354
+ FrameStyle,
355
+ RarityLevel
356
+ } from './viewer/index';
357
+
358
+ // Variations
359
+ export {
360
+ VariationManager,
361
+ VariationSlot,
362
+ VariationOptions
363
+ } from './variations/index';
364
+
365
+ // Agent system
366
+ export {
367
+ MCPServer,
368
+ mcpServer,
369
+ toolDefinitions,
370
+ AgentCLI,
371
+ BatchExecutor,
372
+ CommandType,
373
+ ResponseStatus,
374
+ TelemetryService,
375
+ TelemetrySpan,
376
+ EventType,
377
+ telemetry,
378
+ EventStreamServer,
379
+ EventStreamClient,
380
+ PrometheusExporter,
381
+ JSONExporter,
382
+ NDJSONExporter,
383
+ ConsoleExporter
384
+ } from './agent/index';