@vib3code/sdk 2.0.1 → 2.0.3-canary.75a3290

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 (136) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/DOCS/AGENT_HARNESS_ARCHITECTURE.md +243 -0
  3. package/DOCS/CLI_ONBOARDING.md +1 -1
  4. package/DOCS/CROSS_SITE_DESIGN_PATTERNS.md +117 -0
  5. package/DOCS/EPIC_SCROLL_EVENTS.md +773 -0
  6. package/DOCS/HANDOFF_LANDING_PAGE.md +154 -0
  7. package/DOCS/HANDOFF_SDK_DEVELOPMENT.md +493 -0
  8. package/DOCS/MULTIVIZ_CHOREOGRAPHY_PATTERNS.md +937 -0
  9. package/DOCS/PRODUCT_STRATEGY.md +63 -0
  10. package/DOCS/README.md +103 -0
  11. package/DOCS/REFERENCE_SCROLL_ANALYSIS.md +97 -0
  12. package/DOCS/ROADMAP.md +111 -0
  13. package/DOCS/SCROLL_TIMELINE_v3.md +269 -0
  14. package/DOCS/SITE_REFACTOR_PLAN.md +100 -0
  15. package/DOCS/STATUS.md +24 -0
  16. package/DOCS/SYSTEM_INVENTORY.md +33 -30
  17. package/DOCS/VISUAL_ANALYSIS_CLICKERSS.md +85 -0
  18. package/DOCS/VISUAL_ANALYSIS_FACETAD.md +133 -0
  19. package/DOCS/VISUAL_ANALYSIS_SIMONE.md +95 -0
  20. package/DOCS/VISUAL_ANALYSIS_TABLESIDE.md +86 -0
  21. package/DOCS/{BLUEPRINT_EXECUTION_PLAN_2026-01-07.md → archive/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md} +1 -1
  22. package/DOCS/{DEV_TRACK_ANALYSIS.md → archive/DEV_TRACK_ANALYSIS.md} +3 -0
  23. package/DOCS/{SYSTEM_AUDIT_2026-01-30.md → archive/SYSTEM_AUDIT_2026-01-30.md} +3 -0
  24. package/DOCS/{DEV_TRACK_SESSION_2026-01-31.md → dev-tracks/DEV_TRACK_SESSION_2026-01-31.md} +1 -1
  25. package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-06.md +231 -0
  26. package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-13.md +127 -0
  27. package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-15.md +142 -0
  28. package/DOCS/dev-tracks/README.md +10 -0
  29. package/README.md +26 -13
  30. package/cpp/CMakeLists.txt +236 -0
  31. package/cpp/bindings/embind.cpp +269 -0
  32. package/cpp/build.sh +129 -0
  33. package/cpp/geometry/Crystal.cpp +103 -0
  34. package/cpp/geometry/Fractal.cpp +136 -0
  35. package/cpp/geometry/GeometryGenerator.cpp +262 -0
  36. package/cpp/geometry/KleinBottle.cpp +71 -0
  37. package/cpp/geometry/Sphere.cpp +134 -0
  38. package/cpp/geometry/Tesseract.cpp +94 -0
  39. package/cpp/geometry/Tetrahedron.cpp +83 -0
  40. package/cpp/geometry/Torus.cpp +65 -0
  41. package/cpp/geometry/WarpFunctions.cpp +238 -0
  42. package/cpp/geometry/Wave.cpp +85 -0
  43. package/cpp/include/vib3_ffi.h +238 -0
  44. package/cpp/math/Mat4x4.cpp +409 -0
  45. package/cpp/math/Mat4x4.hpp +209 -0
  46. package/cpp/math/Projection.cpp +142 -0
  47. package/cpp/math/Projection.hpp +148 -0
  48. package/cpp/math/Rotor4D.cpp +322 -0
  49. package/cpp/math/Rotor4D.hpp +204 -0
  50. package/cpp/math/Vec4.cpp +303 -0
  51. package/cpp/math/Vec4.hpp +225 -0
  52. package/cpp/src/vib3_ffi.cpp +607 -0
  53. package/cpp/tests/Geometry_test.cpp +213 -0
  54. package/cpp/tests/Mat4x4_test.cpp +494 -0
  55. package/cpp/tests/Projection_test.cpp +298 -0
  56. package/cpp/tests/Rotor4D_test.cpp +423 -0
  57. package/cpp/tests/Vec4_test.cpp +489 -0
  58. package/package.json +40 -27
  59. package/src/agent/index.js +1 -3
  60. package/src/agent/mcp/MCPServer.js +918 -0
  61. package/src/agent/mcp/index.js +1 -1
  62. package/src/agent/mcp/stdio-server.js +264 -0
  63. package/src/agent/mcp/tools.js +454 -0
  64. package/src/cli/index.js +374 -44
  65. package/src/core/CanvasManager.js +97 -204
  66. package/src/core/ErrorReporter.js +1 -1
  67. package/src/core/Parameters.js +1 -1
  68. package/src/core/VIB3Engine.js +93 -4
  69. package/src/core/VitalitySystem.js +53 -0
  70. package/src/core/index.js +18 -0
  71. package/src/core/renderers/FacetedRendererAdapter.js +10 -9
  72. package/src/core/renderers/HolographicRendererAdapter.js +13 -9
  73. package/src/core/renderers/QuantumRendererAdapter.js +11 -7
  74. package/src/creative/AestheticMapper.js +628 -0
  75. package/src/creative/ChoreographyPlayer.js +481 -0
  76. package/src/creative/index.js +11 -0
  77. package/src/export/TradingCardManager.js +3 -4
  78. package/src/export/index.js +11 -1
  79. package/src/faceted/FacetedSystem.js +241 -388
  80. package/src/holograms/HolographicVisualizer.js +29 -12
  81. package/src/holograms/RealHolographicSystem.js +194 -43
  82. package/src/math/index.js +7 -7
  83. package/src/polychora/PolychoraSystem.js +77 -0
  84. package/src/quantum/QuantumEngine.js +103 -66
  85. package/src/quantum/QuantumVisualizer.js +7 -2
  86. package/src/reactivity/index.js +3 -5
  87. package/src/render/LayerPresetManager.js +372 -0
  88. package/src/render/LayerReactivityBridge.js +344 -0
  89. package/src/render/LayerRelationshipGraph.js +610 -0
  90. package/src/render/MultiCanvasBridge.js +148 -25
  91. package/src/render/UnifiedRenderBridge.js +3 -0
  92. package/src/render/index.js +27 -2
  93. package/src/scene/index.js +4 -4
  94. package/src/shaders/faceted/faceted.frag.glsl +220 -80
  95. package/src/shaders/faceted/faceted.frag.wgsl +138 -97
  96. package/src/shaders/holographic/holographic.frag.glsl +28 -9
  97. package/src/shaders/holographic/holographic.frag.wgsl +107 -38
  98. package/src/shaders/quantum/quantum.frag.glsl +1 -0
  99. package/src/shaders/quantum/quantum.frag.wgsl +1 -1
  100. package/src/testing/ParallelTestFramework.js +2 -2
  101. package/src/viewer/GalleryUI.js +17 -0
  102. package/src/viewer/ViewerPortal.js +2 -2
  103. package/src/viewer/index.js +1 -1
  104. package/tools/headless-renderer.js +258 -0
  105. package/tools/shader-sync-verify.js +8 -4
  106. package/tools/site-analysis/all-reports.json +32 -0
  107. package/tools/site-analysis/combined-analysis.md +50 -0
  108. package/tools/site-analyzer.mjs +779 -0
  109. package/tools/visual-catalog/capture.js +276 -0
  110. package/tools/visual-catalog/composite.js +138 -0
  111. package/types/adaptive-sdk.d.ts +204 -5
  112. package/types/agent/cli.d.ts +78 -0
  113. package/types/agent/index.d.ts +18 -0
  114. package/types/agent/mcp.d.ts +87 -0
  115. package/types/agent/telemetry.d.ts +190 -0
  116. package/types/core/VIB3Engine.d.ts +26 -0
  117. package/types/core/index.d.ts +261 -0
  118. package/types/creative/AestheticMapper.d.ts +72 -0
  119. package/types/creative/ChoreographyPlayer.d.ts +96 -0
  120. package/types/creative/index.d.ts +17 -0
  121. package/types/export/index.d.ts +243 -0
  122. package/types/geometry/index.d.ts +164 -0
  123. package/types/math/index.d.ts +214 -0
  124. package/types/render/LayerPresetManager.d.ts +78 -0
  125. package/types/render/LayerReactivityBridge.d.ts +85 -0
  126. package/types/render/LayerRelationshipGraph.d.ts +174 -0
  127. package/types/render/index.d.ts +3 -0
  128. package/types/scene/index.d.ts +204 -0
  129. package/types/systems/index.d.ts +244 -0
  130. package/types/variations/index.d.ts +62 -0
  131. package/types/viewer/index.d.ts +225 -0
  132. /package/DOCS/{DEV_TRACK_PLAN_2026-01-07.md → archive/DEV_TRACK_PLAN_2026-01-07.md} +0 -0
  133. /package/DOCS/{SESSION_014_PLAN.md → archive/SESSION_014_PLAN.md} +0 -0
  134. /package/DOCS/{SESSION_LOG_2026-01-07.md → archive/SESSION_LOG_2026-01-07.md} +0 -0
  135. /package/DOCS/{STRATEGIC_BLUEPRINT_2026-01-07.md → archive/STRATEGIC_BLUEPRINT_2026-01-07.md} +0 -0
  136. /package/src/viewer/{ReactivityManager.js → ViewerInputHandler.js} +0 -0
@@ -22,6 +22,11 @@ export class QuantumEngine {
22
22
  /** @type {HTMLCanvasElement|null} */
23
23
  this.canvasOverride = options.canvas || null;
24
24
 
25
+ // Multi-canvas override: { background, shadow, content, highlight, accent }
26
+ // Enables 5-layer mode without DOM ID lookup (for landing page / multi-instance)
27
+ /** @type {Object<string, HTMLCanvasElement>|null} */
28
+ this.canvasSet = options.canvases || null;
29
+
25
30
  // Bridge rendering state
26
31
  /** @type {MultiCanvasBridge|null} */
27
32
  this._multiCanvasBridge = null;
@@ -89,6 +94,37 @@ export class QuantumEngine {
89
94
  return;
90
95
  }
91
96
 
97
+ // Multi-canvas override: 5-layer mode with provided canvas elements
98
+ // Used by landing page adapters to create multiple independent 5-layer instances
99
+ if (this.canvasSet) {
100
+ const layerDefs = [
101
+ { key: 'background', role: 'background', reactivity: 0.4 },
102
+ { key: 'shadow', role: 'shadow', reactivity: 0.6 },
103
+ { key: 'content', role: 'content', reactivity: 1.0 },
104
+ { key: 'highlight', role: 'highlight', reactivity: 1.3 },
105
+ { key: 'accent', role: 'accent', reactivity: 1.6 },
106
+ ];
107
+
108
+ layerDefs.forEach(layer => {
109
+ const canvas = this.canvasSet[layer.key];
110
+ if (!canvas) return;
111
+ try {
112
+ const visualizer = new QuantumHolographicVisualizer(
113
+ canvas, layer.role, layer.reactivity, 0
114
+ );
115
+ if (visualizer.gl) {
116
+ this.visualizers.push(visualizer);
117
+ console.log(`🌌 Created quantum layer (canvasSet): ${layer.role}`);
118
+ }
119
+ } catch (error) {
120
+ console.warn(`Failed to create quantum layer ${layer.role}:`, error);
121
+ }
122
+ });
123
+
124
+ console.log(`✅ Created ${this.visualizers.length} quantum visualizers via canvasSet`);
125
+ return;
126
+ }
127
+
92
128
  const layers = [
93
129
  { id: 'quantum-background-canvas', role: 'background', reactivity: 0.4 },
94
130
  { id: 'quantum-shadow-canvas', role: 'shadow', reactivity: 0.6 },
@@ -340,22 +376,27 @@ export class QuantumEngine {
340
376
  console.log('🌌 Quantum gesture reactivity skipped (single-canvas override mode)');
341
377
  return;
342
378
  }
343
-
379
+
344
380
  console.log('🌌 Setting up Quantum: velocity + click + scroll + multi-parameter reactivity');
345
-
381
+
346
382
  // Enhanced state for smooth effects
347
383
  this.clickFlashIntensity = 0;
348
384
  this.scrollMorph = 1.0; // Base morph factor
349
385
  this.velocitySmoothing = 0.8; // Smoother velocity transitions
350
-
351
- const quantumCanvases = [
352
- 'quantum-background-canvas', 'quantum-shadow-canvas', 'quantum-content-canvas',
353
- 'quantum-highlight-canvas', 'quantum-accent-canvas'
354
- ];
355
-
356
- quantumCanvases.forEach(canvasId => {
357
- const canvas = document.getElementById(canvasId);
358
- if (!canvas) return;
386
+
387
+ // Gather canvases: from canvasSet (landing page) or DOM IDs (main app)
388
+ const canvasElements = [];
389
+ if (this.canvasSet) {
390
+ Object.values(this.canvasSet).forEach(c => { if (c) canvasElements.push(c); });
391
+ } else {
392
+ ['quantum-background-canvas', 'quantum-shadow-canvas', 'quantum-content-canvas',
393
+ 'quantum-highlight-canvas', 'quantum-accent-canvas'].forEach(id => {
394
+ const c = document.getElementById(id);
395
+ if (c) canvasElements.push(c);
396
+ });
397
+ }
398
+
399
+ canvasElements.forEach(canvas => {
359
400
 
360
401
  // Mouse movement -> smooth velocity + multiple parameters
361
402
  canvas.addEventListener('mousemove', (e) => {
@@ -368,20 +409,19 @@ export class QuantumEngine {
368
409
  this.updateEnhancedQuantumParameters(mouseX, mouseY);
369
410
  });
370
411
 
371
- // Touch movement -> same enhanced parameters
412
+ // Touch movement -> same enhanced parameters
372
413
  canvas.addEventListener('touchmove', (e) => {
373
414
  if (!this.isActive) return;
374
- e.preventDefault();
375
-
415
+
376
416
  if (e.touches.length > 0) {
377
417
  const touch = e.touches[0];
378
418
  const rect = canvas.getBoundingClientRect();
379
419
  const touchX = (touch.clientX - rect.left) / rect.width;
380
420
  const touchY = (touch.clientY - rect.top) / rect.height;
381
-
421
+
382
422
  this.updateEnhancedQuantumParameters(touchX, touchY);
383
423
  }
384
- }, { passive: false });
424
+ }, { passive: true });
385
425
 
386
426
  // Click -> quantum flash effect
387
427
  canvas.addEventListener('click', (e) => {
@@ -398,9 +438,8 @@ export class QuantumEngine {
398
438
  // Wheel -> quantum morphing scroll effect
399
439
  canvas.addEventListener('wheel', (e) => {
400
440
  if (!this.isActive) return;
401
- e.preventDefault();
402
441
  this.updateQuantumScroll(e.deltaY);
403
- }, { passive: false });
442
+ }, { passive: true });
404
443
  });
405
444
 
406
445
  // Start smooth animation loops
@@ -483,7 +522,11 @@ export class QuantumEngine {
483
522
  this.lastMousePosition.x = x;
484
523
  this.lastMousePosition.y = y;
485
524
 
486
- console.log(`🌌 Quantum EXPERIMENTAL: X=${x.toFixed(2)}→Rot=${rotationAngle.toFixed(2)}, Y=${y.toFixed(2)}→Density=${Math.round(gridDensity)}, Dist=${normalizedDistance.toFixed(2)}→Hue=${Math.round(hue)}, Hemisphere=${leftHemisphere ? 'L' : 'R'}${topHemisphere ? 'T' : 'B'}`);
525
+ // Debug logging (throttled to avoid console spam)
526
+ if (!this._lastLogTime || performance.now() - this._lastLogTime > 2000) {
527
+ this._lastLogTime = performance.now();
528
+ console.log(`Quantum: Rot=${rotationAngle.toFixed(2)}, Density=${Math.round(gridDensity)}, Hue=${Math.round(hue)}`);
529
+ }
487
530
  }
488
531
 
489
532
  triggerQuantumClick() {
@@ -495,7 +538,7 @@ export class QuantumEngine {
495
538
  this.quantumSpeedWave = 2.0; // Speed wave effect
496
539
  this.quantumHueShift = 60; // Color explosion shift
497
540
 
498
- console.log('💥 Quantum energy burst: flash + chaos + speed + hue explosion');
541
+ // Quantum energy burst triggered
499
542
  }
500
543
 
501
544
  updateQuantumScroll(deltaY) {
@@ -511,81 +554,60 @@ export class QuantumEngine {
511
554
  window.updateParameter('morphFactor', this.scrollMorph.toFixed(2));
512
555
  }
513
556
 
514
- console.log(`🌀 Quantum scroll morph: ${this.scrollMorph.toFixed(2)}`);
557
+ // Quantum scroll morph updated
515
558
  }
516
559
 
517
560
  startQuantumEffectLoops() {
561
+ this._effectsLoopActive = true;
518
562
  const quantumEffects = () => {
519
- let hasActiveEffects = false;
520
-
563
+ if (!this._effectsLoopActive) return;
564
+
521
565
  // QUANTUM FLASH EFFECT (saturation + morph)
522
566
  if (this.clickFlashIntensity > 0.01) {
523
- hasActiveEffects = true;
524
-
525
- // Flash affects saturation - quantum shimmer effect
526
- const flashSaturation = 0.9 + (this.clickFlashIntensity * 0.1); // 0.9-1.0 boost
527
- const flashMorph = this.scrollMorph + (this.clickFlashIntensity * 0.5); // Morph boost
528
-
567
+ const flashSaturation = 0.9 + (this.clickFlashIntensity * 0.1);
568
+ const flashMorph = this.scrollMorph + (this.clickFlashIntensity * 0.5);
569
+
529
570
  if (window.updateParameter) {
530
571
  window.updateParameter('saturation', flashSaturation.toFixed(2));
531
572
  window.updateParameter('morphFactor', flashMorph.toFixed(2));
532
573
  }
533
-
534
- // Smooth decay
535
574
  this.clickFlashIntensity *= 0.91;
536
575
  }
537
-
576
+
538
577
  // DRAMATIC CHAOS BLAST EFFECT (fluid decay)
539
578
  if (this.quantumChaosBlast > 0.01) {
540
- hasActiveEffects = true;
541
-
542
- const baseChaos = 0.3; // Quantum default chaos
579
+ const baseChaos = 0.3;
543
580
  const currentChaos = baseChaos + this.quantumChaosBlast;
544
-
545
581
  if (window.updateParameter) {
546
582
  window.updateParameter('chaos', Math.min(1.0, currentChaos).toFixed(2));
547
583
  }
548
-
549
- // Smooth decay
550
- this.quantumChaosBlast *= 0.88; // Slightly faster than faceted for quantum energy feel
584
+ this.quantumChaosBlast *= 0.88;
551
585
  }
552
-
553
- // DRAMATIC SPEED WAVE EFFECT (fluid decay)
586
+
587
+ // DRAMATIC SPEED WAVE EFFECT (fluid decay)
554
588
  if (this.quantumSpeedWave > 0.01) {
555
- hasActiveEffects = true;
556
-
557
- const baseSpeed = 1.0; // Quantum default speed
589
+ const baseSpeed = 1.0;
558
590
  const currentSpeed = baseSpeed + this.quantumSpeedWave;
559
-
560
591
  if (window.updateParameter) {
561
592
  window.updateParameter('speed', Math.min(3.0, currentSpeed).toFixed(2));
562
593
  }
563
-
564
- // Smooth wave decay
565
594
  this.quantumSpeedWave *= 0.89;
566
595
  }
567
-
596
+
568
597
  // QUANTUM HUE EXPLOSION EFFECT (fluid decay)
569
598
  if (this.quantumHueShift > 1) {
570
- hasActiveEffects = true;
571
-
572
- const baseHue = 280; // Quantum purple-blue
599
+ const baseHue = 280;
573
600
  const currentHue = (baseHue + this.quantumHueShift) % 360;
574
-
575
601
  if (window.updateParameter) {
576
602
  window.updateParameter('hue', Math.round(currentHue));
577
603
  }
578
-
579
- // Smooth color return
580
604
  this.quantumHueShift *= 0.90;
581
605
  }
582
-
583
- if (this.isActive) {
584
- requestAnimationFrame(quantumEffects);
585
- }
606
+
607
+ this._effectsRafId = requestAnimationFrame(quantumEffects);
586
608
  };
587
-
588
- quantumEffects();
609
+
610
+ this._effectsRafId = requestAnimationFrame(quantumEffects);
589
611
  }
590
612
 
591
613
  async enableAudio() {
@@ -691,16 +713,17 @@ export class QuantumEngine {
691
713
  if (window.mobileDebug) {
692
714
  window.mobileDebug.log(`🎬 Quantum Engine: Starting render loop with ${this.visualizers?.length} visualizers, isActive=${this.isActive}`);
693
715
  }
694
-
716
+
717
+ this._renderLoopActive = true;
695
718
  const render = () => {
719
+ if (!this._renderLoopActive) return;
696
720
  this.renderFrame();
697
-
698
- requestAnimationFrame(render);
721
+ this._renderRafId = requestAnimationFrame(render);
699
722
  };
700
-
701
- render();
723
+
724
+ this._renderRafId = requestAnimationFrame(render);
702
725
  console.log('🎬 Quantum render loop started');
703
-
726
+
704
727
  if (window.mobileDebug) {
705
728
  window.mobileDebug.log(`✅ Quantum Engine: Render loop started, will render when isActive=true`);
706
729
  }
@@ -777,6 +800,20 @@ export class QuantumEngine {
777
800
  destroy() {
778
801
  this.isActive = false;
779
802
 
803
+ // Cancel render loop
804
+ this._renderLoopActive = false;
805
+ if (this._renderRafId) {
806
+ cancelAnimationFrame(this._renderRafId);
807
+ this._renderRafId = null;
808
+ }
809
+
810
+ // Cancel effects loop
811
+ this._effectsLoopActive = false;
812
+ if (this._effectsRafId) {
813
+ cancelAnimationFrame(this._effectsRafId);
814
+ this._effectsRafId = null;
815
+ }
816
+
780
817
  // Disconnect from universal reactivity
781
818
  if (window.universalReactivity) {
782
819
  window.universalReactivity.disconnectSystem('quantum');
@@ -276,6 +276,7 @@ uniform float u_rot4dZW;
276
276
  uniform float u_mouseIntensity;
277
277
  uniform float u_clickIntensity;
278
278
  uniform float u_roleIntensity;
279
+ uniform float u_breath;
279
280
 
280
281
  // 6D rotation matrices - 3D space rotations (XY, XZ, YZ)
281
282
  mat4 rotateXY(float theta) {
@@ -681,7 +682,9 @@ void main() {
681
682
  geometryIntensity += shimmer * geometryIntensity;
682
683
 
683
684
  // Apply user intensity control
684
- float finalIntensity = geometryIntensity * u_intensity;
685
+ // Breath modulation (Exhale system)
686
+ float breathMod = 1.0 + (u_breath * 0.4);
687
+ float finalIntensity = geometryIntensity * u_intensity * breathMod;
685
688
 
686
689
  // LAYER-BY-LAYER COLOR SYSTEM with user hue/saturation/intensity controls
687
690
  // Determine canvas layer from role/variant (0=background, 1=shadow, 2=content, 3=highlight, 4=accent)
@@ -792,7 +795,8 @@ void main() {
792
795
  rot4dZW: this.gl.getUniformLocation(this.program, 'u_rot4dZW'),
793
796
  mouseIntensity: this.gl.getUniformLocation(this.program, 'u_mouseIntensity'),
794
797
  clickIntensity: this.gl.getUniformLocation(this.program, 'u_clickIntensity'),
795
- roleIntensity: this.gl.getUniformLocation(this.program, 'u_roleIntensity')
798
+ roleIntensity: this.gl.getUniformLocation(this.program, 'u_roleIntensity'),
799
+ breath: this.gl.getUniformLocation(this.program, 'u_breath')
796
800
  };
797
801
  }
798
802
 
@@ -1065,6 +1069,7 @@ void main() {
1065
1069
  this.gl.uniform1f(this.uniforms.mouseIntensity, this.mouseIntensity);
1066
1070
  this.gl.uniform1f(this.uniforms.clickIntensity, this.clickIntensity);
1067
1071
  this.gl.uniform1f(this.uniforms.roleIntensity, roleIntensities[this.role] || 1.0);
1072
+ this.gl.uniform1f(this.uniforms.breath, this.params.breath || 0.0);
1068
1073
 
1069
1074
  this.gl.drawArrays(this.gl.TRIANGLE_STRIP, 0, 4);
1070
1075
  }
@@ -23,10 +23,11 @@ export { ReactivityManager } from './ReactivityManager.js';
23
23
  /**
24
24
  * Create a pre-configured ReactivityManager with common settings
25
25
  */
26
- export function createReactivityManager(options = {}) {
26
+ export async function createReactivityManager(options = {}) {
27
27
  const { config, parameterUpdateFn } = options;
28
28
 
29
- const manager = new (await import('./ReactivityManager.js')).ReactivityManager(parameterUpdateFn);
29
+ const { ReactivityManager } = await import('./ReactivityManager.js');
30
+ const manager = new ReactivityManager(parameterUpdateFn);
30
31
 
31
32
  if (config) {
32
33
  manager.loadConfig(config);
@@ -39,7 +40,6 @@ export function createReactivityManager(options = {}) {
39
40
  * Create ReactivityConfig from a preset name
40
41
  */
41
42
  export function createPresetConfig(presetName) {
42
- const { ReactivityConfig } = require('./ReactivityConfig.js');
43
43
  const config = new ReactivityConfig();
44
44
 
45
45
  switch (presetName) {
@@ -89,5 +89,3 @@ export function createPresetConfig(presetName) {
89
89
 
90
90
  return config;
91
91
  }
92
-
93
- console.log('🎛️ VIB3+ Reactivity System loaded');