@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,489 @@
1
+ /**
2
+ * Vec4_test.cpp - Unit tests for Vec4 4D vector class
3
+ *
4
+ * Tests construction, arithmetic, geometric operations, and static factories.
5
+ */
6
+
7
+ #include <gtest/gtest.h>
8
+ #include "math/Vec4.hpp"
9
+ #include <cmath>
10
+
11
+ using namespace vib3;
12
+
13
+ // Tolerance for floating-point comparisons
14
+ static constexpr float kEpsilon = 1e-5f;
15
+
16
+ // ============================================================================
17
+ // Construction
18
+ // ============================================================================
19
+
20
+ TEST(Vec4, DefaultConstructorIsZero) {
21
+ Vec4 v;
22
+ EXPECT_FLOAT_EQ(v.x, 0.0f);
23
+ EXPECT_FLOAT_EQ(v.y, 0.0f);
24
+ EXPECT_FLOAT_EQ(v.z, 0.0f);
25
+ EXPECT_FLOAT_EQ(v.w, 0.0f);
26
+ }
27
+
28
+ TEST(Vec4, ParameterizedConstructor) {
29
+ Vec4 v(1.0f, 2.0f, 3.0f, 4.0f);
30
+ EXPECT_FLOAT_EQ(v.x, 1.0f);
31
+ EXPECT_FLOAT_EQ(v.y, 2.0f);
32
+ EXPECT_FLOAT_EQ(v.z, 3.0f);
33
+ EXPECT_FLOAT_EQ(v.w, 4.0f);
34
+ }
35
+
36
+ TEST(Vec4, ScalarConstructor) {
37
+ Vec4 v(5.0f);
38
+ EXPECT_FLOAT_EQ(v.x, 5.0f);
39
+ EXPECT_FLOAT_EQ(v.y, 5.0f);
40
+ EXPECT_FLOAT_EQ(v.z, 5.0f);
41
+ EXPECT_FLOAT_EQ(v.w, 5.0f);
42
+ }
43
+
44
+ TEST(Vec4, ArrayConstructor) {
45
+ std::array<float, 4> arr = {1.0f, 2.0f, 3.0f, 4.0f};
46
+ Vec4 v(arr);
47
+ EXPECT_FLOAT_EQ(v.x, 1.0f);
48
+ EXPECT_FLOAT_EQ(v.y, 2.0f);
49
+ EXPECT_FLOAT_EQ(v.z, 3.0f);
50
+ EXPECT_FLOAT_EQ(v.w, 4.0f);
51
+ }
52
+
53
+ // ============================================================================
54
+ // Static Factories
55
+ // ============================================================================
56
+
57
+ TEST(Vec4, ZeroFactory) {
58
+ Vec4 v = Vec4::zero();
59
+ EXPECT_FLOAT_EQ(v.x, 0.0f);
60
+ EXPECT_FLOAT_EQ(v.y, 0.0f);
61
+ EXPECT_FLOAT_EQ(v.z, 0.0f);
62
+ EXPECT_FLOAT_EQ(v.w, 0.0f);
63
+ }
64
+
65
+ TEST(Vec4, OneFactory) {
66
+ Vec4 v = Vec4::one();
67
+ EXPECT_FLOAT_EQ(v.x, 1.0f);
68
+ EXPECT_FLOAT_EQ(v.y, 1.0f);
69
+ EXPECT_FLOAT_EQ(v.z, 1.0f);
70
+ EXPECT_FLOAT_EQ(v.w, 1.0f);
71
+ }
72
+
73
+ TEST(Vec4, UnitXFactory) {
74
+ Vec4 v = Vec4::unitX();
75
+ EXPECT_FLOAT_EQ(v.x, 1.0f);
76
+ EXPECT_FLOAT_EQ(v.y, 0.0f);
77
+ EXPECT_FLOAT_EQ(v.z, 0.0f);
78
+ EXPECT_FLOAT_EQ(v.w, 0.0f);
79
+ }
80
+
81
+ TEST(Vec4, UnitYFactory) {
82
+ Vec4 v = Vec4::unitY();
83
+ EXPECT_FLOAT_EQ(v.x, 0.0f);
84
+ EXPECT_FLOAT_EQ(v.y, 1.0f);
85
+ EXPECT_FLOAT_EQ(v.z, 0.0f);
86
+ EXPECT_FLOAT_EQ(v.w, 0.0f);
87
+ }
88
+
89
+ TEST(Vec4, UnitZFactory) {
90
+ Vec4 v = Vec4::unitZ();
91
+ EXPECT_FLOAT_EQ(v.x, 0.0f);
92
+ EXPECT_FLOAT_EQ(v.y, 0.0f);
93
+ EXPECT_FLOAT_EQ(v.z, 1.0f);
94
+ EXPECT_FLOAT_EQ(v.w, 0.0f);
95
+ }
96
+
97
+ TEST(Vec4, UnitWFactory) {
98
+ Vec4 v = Vec4::unitW();
99
+ EXPECT_FLOAT_EQ(v.x, 0.0f);
100
+ EXPECT_FLOAT_EQ(v.y, 0.0f);
101
+ EXPECT_FLOAT_EQ(v.z, 0.0f);
102
+ EXPECT_FLOAT_EQ(v.w, 1.0f);
103
+ }
104
+
105
+ // ============================================================================
106
+ // Element Access
107
+ // ============================================================================
108
+
109
+ TEST(Vec4, SubscriptOperator) {
110
+ Vec4 v(10.0f, 20.0f, 30.0f, 40.0f);
111
+ EXPECT_FLOAT_EQ(v[0], 10.0f);
112
+ EXPECT_FLOAT_EQ(v[1], 20.0f);
113
+ EXPECT_FLOAT_EQ(v[2], 30.0f);
114
+ EXPECT_FLOAT_EQ(v[3], 40.0f);
115
+ }
116
+
117
+ TEST(Vec4, SubscriptOperatorMutation) {
118
+ Vec4 v;
119
+ v[0] = 1.0f;
120
+ v[1] = 2.0f;
121
+ v[2] = 3.0f;
122
+ v[3] = 4.0f;
123
+ EXPECT_FLOAT_EQ(v.x, 1.0f);
124
+ EXPECT_FLOAT_EQ(v.y, 2.0f);
125
+ EXPECT_FLOAT_EQ(v.z, 3.0f);
126
+ EXPECT_FLOAT_EQ(v.w, 4.0f);
127
+ }
128
+
129
+ // ============================================================================
130
+ // Arithmetic
131
+ // ============================================================================
132
+
133
+ TEST(Vec4, Addition) {
134
+ Vec4 a(1.0f, 2.0f, 3.0f, 4.0f);
135
+ Vec4 b(5.0f, 6.0f, 7.0f, 8.0f);
136
+ Vec4 c = a + b;
137
+ EXPECT_FLOAT_EQ(c.x, 6.0f);
138
+ EXPECT_FLOAT_EQ(c.y, 8.0f);
139
+ EXPECT_FLOAT_EQ(c.z, 10.0f);
140
+ EXPECT_FLOAT_EQ(c.w, 12.0f);
141
+ }
142
+
143
+ TEST(Vec4, Subtraction) {
144
+ Vec4 a(5.0f, 7.0f, 9.0f, 11.0f);
145
+ Vec4 b(1.0f, 2.0f, 3.0f, 4.0f);
146
+ Vec4 c = a - b;
147
+ EXPECT_FLOAT_EQ(c.x, 4.0f);
148
+ EXPECT_FLOAT_EQ(c.y, 5.0f);
149
+ EXPECT_FLOAT_EQ(c.z, 6.0f);
150
+ EXPECT_FLOAT_EQ(c.w, 7.0f);
151
+ }
152
+
153
+ TEST(Vec4, ScalarMultiplication) {
154
+ Vec4 v(1.0f, 2.0f, 3.0f, 4.0f);
155
+ Vec4 result = v * 2.0f;
156
+ EXPECT_FLOAT_EQ(result.x, 2.0f);
157
+ EXPECT_FLOAT_EQ(result.y, 4.0f);
158
+ EXPECT_FLOAT_EQ(result.z, 6.0f);
159
+ EXPECT_FLOAT_EQ(result.w, 8.0f);
160
+ }
161
+
162
+ TEST(Vec4, ScalarMultiplicationCommutative) {
163
+ Vec4 v(1.0f, 2.0f, 3.0f, 4.0f);
164
+ Vec4 result = 3.0f * v;
165
+ EXPECT_FLOAT_EQ(result.x, 3.0f);
166
+ EXPECT_FLOAT_EQ(result.y, 6.0f);
167
+ EXPECT_FLOAT_EQ(result.z, 9.0f);
168
+ EXPECT_FLOAT_EQ(result.w, 12.0f);
169
+ }
170
+
171
+ TEST(Vec4, ScalarDivision) {
172
+ Vec4 v(2.0f, 4.0f, 6.0f, 8.0f);
173
+ Vec4 result = v / 2.0f;
174
+ EXPECT_FLOAT_EQ(result.x, 1.0f);
175
+ EXPECT_FLOAT_EQ(result.y, 2.0f);
176
+ EXPECT_FLOAT_EQ(result.z, 3.0f);
177
+ EXPECT_FLOAT_EQ(result.w, 4.0f);
178
+ }
179
+
180
+ TEST(Vec4, Negation) {
181
+ Vec4 v(1.0f, -2.0f, 3.0f, -4.0f);
182
+ Vec4 neg = -v;
183
+ EXPECT_FLOAT_EQ(neg.x, -1.0f);
184
+ EXPECT_FLOAT_EQ(neg.y, 2.0f);
185
+ EXPECT_FLOAT_EQ(neg.z, -3.0f);
186
+ EXPECT_FLOAT_EQ(neg.w, 4.0f);
187
+ }
188
+
189
+ TEST(Vec4, CompoundAddition) {
190
+ Vec4 a(1.0f, 2.0f, 3.0f, 4.0f);
191
+ a += Vec4(10.0f, 20.0f, 30.0f, 40.0f);
192
+ EXPECT_FLOAT_EQ(a.x, 11.0f);
193
+ EXPECT_FLOAT_EQ(a.y, 22.0f);
194
+ EXPECT_FLOAT_EQ(a.z, 33.0f);
195
+ EXPECT_FLOAT_EQ(a.w, 44.0f);
196
+ }
197
+
198
+ TEST(Vec4, CompoundSubtraction) {
199
+ Vec4 a(10.0f, 20.0f, 30.0f, 40.0f);
200
+ a -= Vec4(1.0f, 2.0f, 3.0f, 4.0f);
201
+ EXPECT_FLOAT_EQ(a.x, 9.0f);
202
+ EXPECT_FLOAT_EQ(a.y, 18.0f);
203
+ EXPECT_FLOAT_EQ(a.z, 27.0f);
204
+ EXPECT_FLOAT_EQ(a.w, 36.0f);
205
+ }
206
+
207
+ TEST(Vec4, CompoundScalarMultiply) {
208
+ Vec4 a(1.0f, 2.0f, 3.0f, 4.0f);
209
+ a *= 5.0f;
210
+ EXPECT_FLOAT_EQ(a.x, 5.0f);
211
+ EXPECT_FLOAT_EQ(a.y, 10.0f);
212
+ EXPECT_FLOAT_EQ(a.z, 15.0f);
213
+ EXPECT_FLOAT_EQ(a.w, 20.0f);
214
+ }
215
+
216
+ TEST(Vec4, CompoundScalarDivide) {
217
+ Vec4 a(10.0f, 20.0f, 30.0f, 40.0f);
218
+ a /= 10.0f;
219
+ EXPECT_FLOAT_EQ(a.x, 1.0f);
220
+ EXPECT_FLOAT_EQ(a.y, 2.0f);
221
+ EXPECT_FLOAT_EQ(a.z, 3.0f);
222
+ EXPECT_FLOAT_EQ(a.w, 4.0f);
223
+ }
224
+
225
+ // ============================================================================
226
+ // Geometric Operations
227
+ // ============================================================================
228
+
229
+ TEST(Vec4, DotProduct) {
230
+ Vec4 a(1.0f, 2.0f, 3.0f, 4.0f);
231
+ Vec4 b(5.0f, 6.0f, 7.0f, 8.0f);
232
+ // 1*5 + 2*6 + 3*7 + 4*8 = 5 + 12 + 21 + 32 = 70
233
+ EXPECT_FLOAT_EQ(a.dot(b), 70.0f);
234
+ }
235
+
236
+ TEST(Vec4, DotProductOrthogonal) {
237
+ // Unit vectors are orthogonal
238
+ EXPECT_FLOAT_EQ(Vec4::unitX().dot(Vec4::unitY()), 0.0f);
239
+ EXPECT_FLOAT_EQ(Vec4::unitX().dot(Vec4::unitZ()), 0.0f);
240
+ EXPECT_FLOAT_EQ(Vec4::unitX().dot(Vec4::unitW()), 0.0f);
241
+ EXPECT_FLOAT_EQ(Vec4::unitY().dot(Vec4::unitZ()), 0.0f);
242
+ EXPECT_FLOAT_EQ(Vec4::unitY().dot(Vec4::unitW()), 0.0f);
243
+ EXPECT_FLOAT_EQ(Vec4::unitZ().dot(Vec4::unitW()), 0.0f);
244
+ }
245
+
246
+ TEST(Vec4, DotProductFreeFunction) {
247
+ Vec4 a(1.0f, 0.0f, 0.0f, 0.0f);
248
+ Vec4 b(0.0f, 1.0f, 0.0f, 0.0f);
249
+ EXPECT_FLOAT_EQ(dot(a, b), 0.0f);
250
+ EXPECT_FLOAT_EQ(dot(a, a), 1.0f);
251
+ }
252
+
253
+ TEST(Vec4, LengthOfUnitVectors) {
254
+ EXPECT_FLOAT_EQ(Vec4::unitX().length(), 1.0f);
255
+ EXPECT_FLOAT_EQ(Vec4::unitY().length(), 1.0f);
256
+ EXPECT_FLOAT_EQ(Vec4::unitZ().length(), 1.0f);
257
+ EXPECT_FLOAT_EQ(Vec4::unitW().length(), 1.0f);
258
+ }
259
+
260
+ TEST(Vec4, LengthSquared) {
261
+ Vec4 v(1.0f, 2.0f, 3.0f, 4.0f);
262
+ // 1 + 4 + 9 + 16 = 30
263
+ EXPECT_FLOAT_EQ(v.lengthSquared(), 30.0f);
264
+ }
265
+
266
+ TEST(Vec4, LengthGeneral) {
267
+ Vec4 v(3.0f, 4.0f, 0.0f, 0.0f);
268
+ EXPECT_FLOAT_EQ(v.length(), 5.0f);
269
+ }
270
+
271
+ TEST(Vec4, LengthZeroVector) {
272
+ EXPECT_FLOAT_EQ(Vec4::zero().length(), 0.0f);
273
+ }
274
+
275
+ TEST(Vec4, NormalizeUnitVector) {
276
+ Vec4 v = Vec4::unitX().normalized();
277
+ EXPECT_NEAR(v.x, 1.0f, kEpsilon);
278
+ EXPECT_NEAR(v.y, 0.0f, kEpsilon);
279
+ EXPECT_NEAR(v.z, 0.0f, kEpsilon);
280
+ EXPECT_NEAR(v.w, 0.0f, kEpsilon);
281
+ }
282
+
283
+ TEST(Vec4, NormalizeGeneralVector) {
284
+ Vec4 v(3.0f, 4.0f, 0.0f, 0.0f);
285
+ Vec4 n = v.normalized();
286
+ EXPECT_NEAR(n.length(), 1.0f, kEpsilon);
287
+ EXPECT_NEAR(n.x, 0.6f, kEpsilon);
288
+ EXPECT_NEAR(n.y, 0.8f, kEpsilon);
289
+ }
290
+
291
+ TEST(Vec4, NormalizeInPlace) {
292
+ Vec4 v(0.0f, 0.0f, 3.0f, 4.0f);
293
+ v.normalize();
294
+ EXPECT_NEAR(v.length(), 1.0f, kEpsilon);
295
+ }
296
+
297
+ TEST(Vec4, IsNormalized) {
298
+ EXPECT_TRUE(Vec4::unitX().isNormalized());
299
+ EXPECT_TRUE(Vec4::unitY().isNormalized());
300
+ EXPECT_FALSE(Vec4(2.0f, 0.0f, 0.0f, 0.0f).isNormalized());
301
+ EXPECT_FALSE(Vec4::zero().isNormalized());
302
+ }
303
+
304
+ TEST(Vec4, IsZero) {
305
+ EXPECT_TRUE(Vec4::zero().isZero());
306
+ EXPECT_TRUE(Vec4(0.0f, 0.0f, 0.0f, 0.0f).isZero());
307
+ EXPECT_FALSE(Vec4::unitX().isZero());
308
+ EXPECT_FALSE(Vec4(1e-7f, 0.0f, 0.0f, 0.0f).isZero());
309
+ }
310
+
311
+ // ============================================================================
312
+ // Distance
313
+ // ============================================================================
314
+
315
+ TEST(Vec4, DistanceToSelf) {
316
+ Vec4 v(1.0f, 2.0f, 3.0f, 4.0f);
317
+ EXPECT_FLOAT_EQ(v.distanceTo(v), 0.0f);
318
+ }
319
+
320
+ TEST(Vec4, DistanceBetweenPoints) {
321
+ Vec4 a(0.0f, 0.0f, 0.0f, 0.0f);
322
+ Vec4 b(3.0f, 4.0f, 0.0f, 0.0f);
323
+ EXPECT_FLOAT_EQ(a.distanceTo(b), 5.0f);
324
+ }
325
+
326
+ TEST(Vec4, DistanceSymmetric) {
327
+ Vec4 a(1.0f, 2.0f, 3.0f, 4.0f);
328
+ Vec4 b(5.0f, 6.0f, 7.0f, 8.0f);
329
+ EXPECT_FLOAT_EQ(a.distanceTo(b), b.distanceTo(a));
330
+ }
331
+
332
+ TEST(Vec4, DistanceFreeFunction) {
333
+ Vec4 a(0.0f, 0.0f, 0.0f, 0.0f);
334
+ Vec4 b(1.0f, 0.0f, 0.0f, 0.0f);
335
+ EXPECT_FLOAT_EQ(distance(a, b), 1.0f);
336
+ }
337
+
338
+ // ============================================================================
339
+ // Interpolation
340
+ // ============================================================================
341
+
342
+ TEST(Vec4, LerpEndpoints) {
343
+ Vec4 a(0.0f, 0.0f, 0.0f, 0.0f);
344
+ Vec4 b(10.0f, 20.0f, 30.0f, 40.0f);
345
+
346
+ Vec4 start = a.lerp(b, 0.0f);
347
+ EXPECT_FLOAT_EQ(start.x, 0.0f);
348
+ EXPECT_FLOAT_EQ(start.y, 0.0f);
349
+
350
+ Vec4 end = a.lerp(b, 1.0f);
351
+ EXPECT_FLOAT_EQ(end.x, 10.0f);
352
+ EXPECT_FLOAT_EQ(end.y, 20.0f);
353
+ }
354
+
355
+ TEST(Vec4, LerpMidpoint) {
356
+ Vec4 a(0.0f, 0.0f, 0.0f, 0.0f);
357
+ Vec4 b(10.0f, 20.0f, 30.0f, 40.0f);
358
+ Vec4 mid = a.lerp(b, 0.5f);
359
+ EXPECT_FLOAT_EQ(mid.x, 5.0f);
360
+ EXPECT_FLOAT_EQ(mid.y, 10.0f);
361
+ EXPECT_FLOAT_EQ(mid.z, 15.0f);
362
+ EXPECT_FLOAT_EQ(mid.w, 20.0f);
363
+ }
364
+
365
+ // ============================================================================
366
+ // Component-wise Operations
367
+ // ============================================================================
368
+
369
+ TEST(Vec4, ComponentMin) {
370
+ Vec4 a(1.0f, 5.0f, 3.0f, 8.0f);
371
+ Vec4 b(4.0f, 2.0f, 6.0f, 1.0f);
372
+ Vec4 m = a.min(b);
373
+ EXPECT_FLOAT_EQ(m.x, 1.0f);
374
+ EXPECT_FLOAT_EQ(m.y, 2.0f);
375
+ EXPECT_FLOAT_EQ(m.z, 3.0f);
376
+ EXPECT_FLOAT_EQ(m.w, 1.0f);
377
+ }
378
+
379
+ TEST(Vec4, ComponentMax) {
380
+ Vec4 a(1.0f, 5.0f, 3.0f, 8.0f);
381
+ Vec4 b(4.0f, 2.0f, 6.0f, 1.0f);
382
+ Vec4 m = a.max(b);
383
+ EXPECT_FLOAT_EQ(m.x, 4.0f);
384
+ EXPECT_FLOAT_EQ(m.y, 5.0f);
385
+ EXPECT_FLOAT_EQ(m.z, 6.0f);
386
+ EXPECT_FLOAT_EQ(m.w, 8.0f);
387
+ }
388
+
389
+ TEST(Vec4, Abs) {
390
+ Vec4 v(-1.0f, 2.0f, -3.0f, 4.0f);
391
+ Vec4 a = v.abs();
392
+ EXPECT_FLOAT_EQ(a.x, 1.0f);
393
+ EXPECT_FLOAT_EQ(a.y, 2.0f);
394
+ EXPECT_FLOAT_EQ(a.z, 3.0f);
395
+ EXPECT_FLOAT_EQ(a.w, 4.0f);
396
+ }
397
+
398
+ TEST(Vec4, Clamp) {
399
+ Vec4 v(-1.0f, 0.5f, 2.0f, 0.0f);
400
+ Vec4 lo(0.0f, 0.0f, 0.0f, 0.0f);
401
+ Vec4 hi(1.0f, 1.0f, 1.0f, 1.0f);
402
+ Vec4 c = v.clamp(lo, hi);
403
+ EXPECT_FLOAT_EQ(c.x, 0.0f);
404
+ EXPECT_FLOAT_EQ(c.y, 0.5f);
405
+ EXPECT_FLOAT_EQ(c.z, 1.0f);
406
+ EXPECT_FLOAT_EQ(c.w, 0.0f);
407
+ }
408
+
409
+ // ============================================================================
410
+ // Projection and Reflection
411
+ // ============================================================================
412
+
413
+ TEST(Vec4, ProjectOnto) {
414
+ Vec4 v(3.0f, 4.0f, 0.0f, 0.0f);
415
+ Vec4 onto(1.0f, 0.0f, 0.0f, 0.0f);
416
+ Vec4 proj = v.projectOnto(onto);
417
+ EXPECT_NEAR(proj.x, 3.0f, kEpsilon);
418
+ EXPECT_NEAR(proj.y, 0.0f, kEpsilon);
419
+ EXPECT_NEAR(proj.z, 0.0f, kEpsilon);
420
+ EXPECT_NEAR(proj.w, 0.0f, kEpsilon);
421
+ }
422
+
423
+ TEST(Vec4, ReflectAcrossNormal) {
424
+ // Reflect (1, -1, 0, 0) across the Y-axis normal (0, 1, 0, 0)
425
+ Vec4 v(1.0f, -1.0f, 0.0f, 0.0f);
426
+ Vec4 normal(0.0f, 1.0f, 0.0f, 0.0f);
427
+ Vec4 r = v.reflect(normal);
428
+ EXPECT_NEAR(r.x, 1.0f, kEpsilon);
429
+ EXPECT_NEAR(r.y, 1.0f, kEpsilon);
430
+ }
431
+
432
+ // ============================================================================
433
+ // Comparison
434
+ // ============================================================================
435
+
436
+ TEST(Vec4, Equality) {
437
+ Vec4 a(1.0f, 2.0f, 3.0f, 4.0f);
438
+ Vec4 b(1.0f, 2.0f, 3.0f, 4.0f);
439
+ EXPECT_TRUE(a == b);
440
+ EXPECT_FALSE(a != b);
441
+ }
442
+
443
+ TEST(Vec4, Inequality) {
444
+ Vec4 a(1.0f, 2.0f, 3.0f, 4.0f);
445
+ Vec4 b(1.0f, 2.0f, 3.0f, 5.0f);
446
+ EXPECT_FALSE(a == b);
447
+ EXPECT_TRUE(a != b);
448
+ }
449
+
450
+ // ============================================================================
451
+ // Data Pointer
452
+ // ============================================================================
453
+
454
+ TEST(Vec4, DataPointerAccess) {
455
+ Vec4 v(1.0f, 2.0f, 3.0f, 4.0f);
456
+ const float* p = v.ptr();
457
+ EXPECT_FLOAT_EQ(p[0], 1.0f);
458
+ EXPECT_FLOAT_EQ(p[1], 2.0f);
459
+ EXPECT_FLOAT_EQ(p[2], 3.0f);
460
+ EXPECT_FLOAT_EQ(p[3], 4.0f);
461
+ }
462
+
463
+ // ============================================================================
464
+ // 4D -> 3D Projections (member functions)
465
+ // ============================================================================
466
+
467
+ TEST(Vec4, PerspectiveProjectionAtOrigin) {
468
+ Vec4 v(0.0f, 0.0f, 0.0f, 0.0f);
469
+ auto proj = v.projectPerspective(2.0f);
470
+ EXPECT_NEAR(proj[0], 0.0f, kEpsilon);
471
+ EXPECT_NEAR(proj[1], 0.0f, kEpsilon);
472
+ EXPECT_NEAR(proj[2], 0.0f, kEpsilon);
473
+ }
474
+
475
+ TEST(Vec4, StereographicProjectionAtOrigin) {
476
+ Vec4 v(0.0f, 0.0f, 0.0f, 0.0f);
477
+ auto proj = v.projectStereographic();
478
+ EXPECT_NEAR(proj[0], 0.0f, kEpsilon);
479
+ EXPECT_NEAR(proj[1], 0.0f, kEpsilon);
480
+ EXPECT_NEAR(proj[2], 0.0f, kEpsilon);
481
+ }
482
+
483
+ TEST(Vec4, OrthographicProjectionDropsW) {
484
+ Vec4 v(1.0f, 2.0f, 3.0f, 99.0f);
485
+ auto proj = v.projectOrthographic();
486
+ EXPECT_FLOAT_EQ(proj[0], 1.0f);
487
+ EXPECT_FLOAT_EQ(proj[1], 2.0f);
488
+ EXPECT_FLOAT_EQ(proj[2], 3.0f);
489
+ }
@@ -477,7 +477,7 @@
477
477
 
478
478
  // Render active system
479
479
  if (activeSystem === 'faceted' && faceted) {
480
- faceted.renderFrame();
480
+ faceted.render();
481
481
  } else if (activeSystem === 'quantum' && quantum) {
482
482
  quantum.render();
483
483
  } else if (activeSystem === 'holographic' && holographic) {
package/package.json CHANGED
@@ -1,16 +1,15 @@
1
1
  {
2
2
  "name": "@vib3code/sdk",
3
- "version": "2.0.1",
3
+ "version": "2.0.3-canary.0a63e71",
4
4
  "description": "VIB3+ 4D Visualization SDK - Unified engine with 6D rotation, MCP agentic integration, and cross-platform support",
5
5
  "type": "module",
6
6
  "main": "src/core/VIB3Engine.js",
7
7
  "types": "./types/adaptive-sdk.d.ts",
8
8
  "bin": {
9
- "vib3": "./src/cli/index.js"
9
+ "vib3": "./src/cli/index.js",
10
+ "vib3-mcp": "./src/agent/mcp/stdio-server.js"
10
11
  },
11
- "sideEffects": [
12
- "./src/geometry/builders/*.js"
13
- ],
12
+ "sideEffects": false,
14
13
  "exports": {
15
14
  ".": {
16
15
  "types": "./types/adaptive-sdk.d.ts",
@@ -176,7 +175,7 @@
176
175
  "import": "./src/viewer/ViewerPortal.js"
177
176
  },
178
177
  "./viewer/reactivity": {
179
- "import": "./src/viewer/ReactivityManager.js"
178
+ "import": "./src/viewer/ViewerInputHandler.js"
180
179
  },
181
180
  "./viewer/card-bending": {
182
181
  "import": "./src/viewer/CardBending.js"
@@ -199,6 +198,9 @@
199
198
  "./reactivity/config": {
200
199
  "import": "./src/reactivity/ReactivityConfig.js"
201
200
  },
201
+ "./creative": {
202
+ "import": "./src/creative/index.js"
203
+ },
202
204
  "./creative/color-presets": {
203
205
  "import": "./src/creative/ColorPresetsSystem.js"
204
206
  },
@@ -211,6 +213,9 @@
211
213
  "./creative/timeline": {
212
214
  "import": "./src/creative/ParameterTimeline.js"
213
215
  },
216
+ "./export": {
217
+ "import": "./src/export/index.js"
218
+ },
214
219
  "./integrations/react": {
215
220
  "import": "./src/integrations/frameworks/Vib3React.js"
216
221
  },
@@ -247,6 +252,9 @@
247
252
  "./advanced/offscreen": {
248
253
  "import": "./src/advanced/OffscreenWorker.js"
249
254
  },
255
+ "./variations": {
256
+ "import": "./src/variations/VariationManager.js"
257
+ },
250
258
  "./tools/shader-sync": {
251
259
  "import": "./tools/shader-sync-verify.js"
252
260
  },
@@ -312,6 +320,30 @@
312
320
  "engines": {
313
321
  "node": ">=18.19.0"
314
322
  },
323
+ "scripts": {
324
+ "dev": "vite --open",
325
+ "dev:web": "vite --open",
326
+ "prepublishOnly": "npm test && npm run build:web",
327
+ "build:web": "vite build",
328
+ "build:lib": "vite build --mode lib",
329
+ "lint": "eslint \"src/**/*.{js,ts}\"",
330
+ "test": "vitest run",
331
+ "test:e2e": "playwright test",
332
+ "test:e2e:ui": "playwright test --ui",
333
+ "test:e2e:headed": "playwright test --headed",
334
+ "test:e2e:debug": "playwright test --debug",
335
+ "test:all": "vitest run && playwright test",
336
+ "bench": "vitest bench",
337
+ "analyze:bundle": "vite build --mode analyze",
338
+ "check:bundle": "pnpm exec vite build --outDir dist-ci --emptyOutDir && node tools/ci/bundleSizeCheck.mjs dist-ci --cleanup",
339
+ "codegen:localization": "tsx tools/codegen/localization-quaternions.ts",
340
+ "cli:telemetry": "node tools/cli/agent-cli.js telemetry:export",
341
+ "storybook": "storybook dev -p 6006",
342
+ "build:storybook": "storybook build",
343
+ "demo:generate": "node scripts/generate-demo-assets.js",
344
+ "verify:shaders": "node tools/shader-sync-verify.js"
345
+ },
346
+ "packageManager": "pnpm@9.4.0",
315
347
  "files": [
316
348
  "src/",
317
349
  "tools/",
@@ -319,7 +351,8 @@
319
351
  "DOCS/",
320
352
  "README.md",
321
353
  "LICENSE",
322
- "CHANGELOG.md"
354
+ "CHANGELOG.md",
355
+ "cpp/"
323
356
  ],
324
357
  "dependencies": {
325
358
  "ajv": "^8.17.1",
@@ -341,27 +374,5 @@
341
374
  "typescript": "^5.5.3",
342
375
  "vite": "^5.3.3",
343
376
  "vitest": "^1.6.0"
344
- },
345
- "scripts": {
346
- "dev": "vite --open",
347
- "dev:web": "vite --open",
348
- "build:web": "vite build",
349
- "build:lib": "vite build --mode lib",
350
- "lint": "eslint \"src/**/*.{js,ts}\"",
351
- "test": "vitest run",
352
- "test:e2e": "playwright test",
353
- "test:e2e:ui": "playwright test --ui",
354
- "test:e2e:headed": "playwright test --headed",
355
- "test:e2e:debug": "playwright test --debug",
356
- "test:all": "vitest run && playwright test",
357
- "bench": "vitest bench",
358
- "analyze:bundle": "vite build --mode analyze",
359
- "check:bundle": "pnpm exec vite build --outDir dist-ci --emptyOutDir && node tools/ci/bundleSizeCheck.mjs dist-ci --cleanup",
360
- "codegen:localization": "tsx tools/codegen/localization-quaternions.ts",
361
- "cli:telemetry": "node tools/cli/agent-cli.js telemetry:export",
362
- "storybook": "storybook dev -p 6006",
363
- "build:storybook": "storybook build",
364
- "demo:generate": "node scripts/generate-demo-assets.js",
365
- "verify:shaders": "node tools/shader-sync-verify.js"
366
377
  }
367
- }
378
+ }
@@ -68,6 +68,4 @@ export {
68
68
  createStreamingCLI
69
69
  } from './cli/index.js';
70
70
 
71
- // Default exports
72
- export { telemetry } from './telemetry/index.js';
73
- export { mcpServer } from './mcp/index.js';
71
+ // telemetry and mcpServer already exported above