@vib3code/sdk 2.0.3-canary.60bc0f0 → 2.0.3-canary.74aebb4

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 (44) hide show
  1. package/DOCS/EXPANSION_DESIGN.md +977 -0
  2. package/DOCS/EXPANSION_DESIGN_ULTRA.md +387 -0
  3. package/DOCS/MASTER_PLAN_2026-01-31.md +2 -2
  4. package/DOCS/OPTIMIZATION_PLAN_MATH.md +118 -0
  5. package/DOCS/SYSTEM_INVENTORY.md +2 -2
  6. package/DOCS/WEBGPU_STATUS.md +119 -38
  7. package/DOCS/archive/WEBGPU_STATUS_2026-02-15_STALE.md +38 -0
  8. package/DOCS/dev-tracks/DEV_TRACK_SESSION_2026-02-16.md +108 -0
  9. package/DOCS/dev-tracks/PERF_UPGRADE_2026-02-16.md +308 -0
  10. package/docs/webgpu-live.html +1 -1
  11. package/package.json +1 -1
  12. package/src/agent/mcp/MCPServer.js +195 -136
  13. package/src/agent/mcp/tools.js +45 -32
  14. package/src/experimental/GameLoop.js +72 -0
  15. package/src/experimental/LatticePhysics.js +100 -0
  16. package/src/experimental/LiveDirector.js +143 -0
  17. package/src/experimental/PlayerController4D.js +154 -0
  18. package/src/experimental/VIB3Actor.js +138 -0
  19. package/src/experimental/VIB3Compositor.js +117 -0
  20. package/src/experimental/VIB3Link.js +122 -0
  21. package/src/experimental/VIB3Orchestrator.js +146 -0
  22. package/src/experimental/VIB3Universe.js +109 -0
  23. package/src/experimental/demos/CrystalLabyrinth.js +202 -0
  24. package/src/faceted/FacetedSystem.js +19 -6
  25. package/src/geometry/generators/Crystal.js +2 -2
  26. package/src/holograms/HolographicVisualizer.js +58 -89
  27. package/src/math/Mat4x4.js +122 -6
  28. package/src/math/Rotor4D.js +93 -39
  29. package/src/math/Vec4.js +119 -78
  30. package/src/quantum/QuantumVisualizer.js +24 -20
  31. package/src/render/ShaderLoader.js +38 -0
  32. package/src/render/ShaderProgram.js +4 -4
  33. package/src/render/UnifiedRenderBridge.js +1 -1
  34. package/src/render/backends/WebGPUBackend.js +8 -4
  35. package/src/shaders/common/geometry24.glsl +65 -0
  36. package/src/shaders/common/geometry24.wgsl +54 -0
  37. package/src/shaders/common/rotation4d.glsl +4 -4
  38. package/src/shaders/common/rotation4d.wgsl +2 -2
  39. package/src/shaders/common/uniforms.wgsl +15 -8
  40. package/src/shaders/faceted/faceted.frag.wgsl +19 -6
  41. package/src/shaders/holographic/holographic.frag.wgsl +7 -5
  42. package/src/shaders/quantum/quantum.frag.wgsl +7 -5
  43. package/src/ui/adaptive/renderers/webgpu/WebGPURenderer.ts +2 -2
  44. package/tools/shader-sync-verify.js +6 -4
@@ -0,0 +1,146 @@
1
+ /**
2
+ * VIB3Orchestrator - The Core of the VIB3 Universe
3
+ *
4
+ * Manages the lifecycle and coordination of multiple VIB3+ entities (visualizers).
5
+ * Implements the "Universe" concept where multiple instances share a clock,
6
+ * physics, and event bus.
7
+ *
8
+ * @experimental
9
+ */
10
+ export class VIB3Orchestrator {
11
+ constructor() {
12
+ this.entities = new Map(); // id -> Entity
13
+ this.nextEntityId = 1;
14
+
15
+ // Master Clock
16
+ this.time = 0;
17
+ this.lastFrameTime = 0;
18
+ this.paused = false;
19
+
20
+ // Systems
21
+ this.eventBus = new EventTarget();
22
+
23
+ // Bind loop
24
+ this.tick = this.tick.bind(this);
25
+ }
26
+
27
+ /**
28
+ * Start the universe simulation loop.
29
+ */
30
+ start() {
31
+ if (this.running) return;
32
+ this.running = true;
33
+ this.lastFrameTime = performance.now();
34
+ requestAnimationFrame(this.tick);
35
+ console.log('VIB3Orchestrator: Universe started.');
36
+ }
37
+
38
+ /**
39
+ * Stop the universe simulation loop.
40
+ */
41
+ stop() {
42
+ this.running = false;
43
+ console.log('VIB3Orchestrator: Universe stopped.');
44
+ }
45
+
46
+ /**
47
+ * Spawn a new VIB3 entity.
48
+ * @param {string} type - 'actor', 'prop', 'environment'
49
+ * @param {object} config - Configuration for the entity
50
+ * @returns {string} Entity ID
51
+ */
52
+ spawn(type, config = {}) {
53
+ const id = `vib3_entity_${this.nextEntityId++}`;
54
+
55
+ // In a real implementation, this would instantiate VIB3Actor or VIB3Prop
56
+ // For now, we store a mock object representing the entity state
57
+ const entity = {
58
+ id,
59
+ type,
60
+ config,
61
+ position: config.position || { x: 0, y: 0, z: 0 },
62
+ rotation: config.rotation || { x: 0, y: 0, z: 0, w: 0 }, // 4D rotation
63
+ active: true,
64
+
65
+ // Mock VIB3Engine interface
66
+ engine: {
67
+ setParameter: (k, v) => console.log(`[${id}] set ${k}=${v}`),
68
+ getParameter: (k) => 0
69
+ },
70
+
71
+ update: (dt) => {
72
+ // Default update logic
73
+ // e.g., apply basic physics or script behavior
74
+ }
75
+ };
76
+
77
+ this.entities.set(id, entity);
78
+ this.emit('entitySpawned', { id, type });
79
+ console.log(`VIB3Orchestrator: Spawned ${type} (${id})`);
80
+
81
+ return id;
82
+ }
83
+
84
+ /**
85
+ * Remove an entity from the universe.
86
+ * @param {string} id
87
+ */
88
+ kill(id) {
89
+ if (this.entities.has(id)) {
90
+ const entity = this.entities.get(id);
91
+ // Cleanup logic (e.g., destroy VIB3Engine instance)
92
+ if (entity.destroy) entity.destroy();
93
+
94
+ this.entities.delete(id);
95
+ this.emit('entityDespawned', { id });
96
+ console.log(`VIB3Orchestrator: Killed entity ${id}`);
97
+ }
98
+ }
99
+
100
+ /**
101
+ * The main simulation loop.
102
+ * Prioritizes Physics -> Narrative -> Visuals.
103
+ * @param {number} timestamp
104
+ */
105
+ tick(timestamp) {
106
+ if (!this.running) return;
107
+
108
+ const dt = (timestamp - this.lastFrameTime) / 1000;
109
+ this.lastFrameTime = timestamp;
110
+ this.time += dt;
111
+
112
+ // 1. Physics / Logic Update
113
+ this.entities.forEach(entity => {
114
+ if (entity.active && entity.update) {
115
+ entity.update(this.time, dt);
116
+ }
117
+ });
118
+
119
+ // 2. Event Processing (Mock)
120
+ // Check for collisions, triggers, etc.
121
+
122
+ // 3. Visual Sync (Mock)
123
+ // Ensure all entities are rendering the current frame
124
+
125
+ requestAnimationFrame(this.tick);
126
+ }
127
+
128
+ /**
129
+ * Emit a global universe event.
130
+ * @param {string} name
131
+ * @param {object} detail
132
+ */
133
+ emit(name, detail) {
134
+ const event = new CustomEvent(name, { detail });
135
+ this.eventBus.dispatchEvent(event);
136
+ }
137
+
138
+ /**
139
+ * Listen for global universe events.
140
+ * @param {string} name
141
+ * @param {function} callback
142
+ */
143
+ on(name, callback) {
144
+ this.eventBus.addEventListener(name, (e) => callback(e.detail));
145
+ }
146
+ }
@@ -0,0 +1,109 @@
1
+ /**
2
+ * VIB3Universe - High-Level Entry Point for VIB3+ Ultra
3
+ *
4
+ * Combines Orchestrator (Logic) and Compositor (Visuals) into a single API.
5
+ * Manages the "World" where multiple VIB3+ instances coexist.
6
+ *
7
+ * @experimental
8
+ */
9
+ import { VIB3Orchestrator } from './VIB3Orchestrator.js';
10
+ import { VIB3Compositor } from './VIB3Compositor.js';
11
+ import { VIB3Actor } from './VIB3Actor.js';
12
+ import { VIB3Engine } from '../core/VIB3Engine.js';
13
+
14
+ export class VIB3Universe {
15
+ /**
16
+ * @param {string} containerId - DOM ID for the universe container
17
+ */
18
+ constructor(containerId = 'vib3-universe') {
19
+ this.orchestrator = new VIB3Orchestrator();
20
+ this.compositor = new VIB3Compositor(containerId);
21
+ this.actors = new Map(); // id -> VIB3Actor
22
+ }
23
+
24
+ /**
25
+ * Start the universe simulation.
26
+ */
27
+ start() {
28
+ this.orchestrator.start();
29
+ }
30
+
31
+ /**
32
+ * Stop the universe simulation.
33
+ */
34
+ stop() {
35
+ this.orchestrator.stop();
36
+ }
37
+
38
+ /**
39
+ * Spawn a new actor into the universe.
40
+ * @param {object} config
41
+ * @param {string} config.personality - Actor personality profile
42
+ * @param {string} config.system - Visualization system ('quantum', 'faceted', 'holographic')
43
+ * @param {number} config.geometry - Initial geometry index
44
+ * @param {object} config.layer - Layer options { zIndex, blendMode, opacity, position }
45
+ * @returns {Promise<VIB3Actor>} The spawned actor
46
+ */
47
+ async spawnActor(config = {}) {
48
+ const actorId = `actor_${Date.now()}_${Math.floor(Math.random() * 1000)}`;
49
+
50
+ // 1. Create a container for this actor's engine
51
+ const container = document.createElement('div');
52
+ container.id = `container_${actorId}`;
53
+ container.style.width = '100%';
54
+ container.style.height = '100%';
55
+ container.style.pointerEvents = 'none'; // Default to pass-through events
56
+
57
+ // 2. Add to compositor (visual layer)
58
+ this.compositor.addInstance(actorId, container, config.layer || {});
59
+
60
+ // 3. Initialize VIB3 Engine
61
+ const engine = new VIB3Engine({
62
+ system: config.system || 'holographic',
63
+ preferWebGPU: true // Ultra tier defaults to high perf
64
+ });
65
+
66
+ // Initialize engine within the container
67
+ // Note: VIB3Engine.initialize expects a container ID
68
+ await engine.initialize(container.id);
69
+
70
+ // Set initial state
71
+ if (config.geometry !== undefined) {
72
+ engine.setParameter('geometry', config.geometry);
73
+ }
74
+
75
+ // 4. Wrap in Actor (logic layer)
76
+ const actor = new VIB3Actor(engine, config.personality || 'neutral');
77
+ actor.id = actorId;
78
+
79
+ // 5. Register with Orchestrator (simulation loop)
80
+ this.orchestrator.entities.set(actorId, actor);
81
+ this.actors.set(actorId, actor);
82
+
83
+ console.log(`VIB3Universe: Spawned actor ${actorId}`);
84
+ return actor;
85
+ }
86
+
87
+ /**
88
+ * Remove an actor from the universe.
89
+ * @param {string} actorId
90
+ */
91
+ despawnActor(actorId) {
92
+ const actor = this.actors.get(actorId);
93
+ if (actor) {
94
+ // Remove from logic
95
+ this.orchestrator.kill(actorId);
96
+
97
+ // Cleanup engine
98
+ if (actor.engine && actor.engine.destroy) {
99
+ actor.engine.destroy();
100
+ }
101
+
102
+ // Remove from visuals
103
+ this.compositor.removeInstance(actorId);
104
+ this.actors.delete(actorId);
105
+
106
+ console.log(`VIB3Universe: Despawned actor ${actorId}`);
107
+ }
108
+ }
109
+ }
@@ -0,0 +1,202 @@
1
+ /**
2
+ * CrystalLabyrinth.js - Vertical Slice Demo
3
+ *
4
+ * Implements the full "Ultra" stack:
5
+ * - VIB3Universe (Multi-instance)
6
+ * - VIB3Orchestrator (Game Loop)
7
+ * - VIB3Compositor (Visuals)
8
+ * - LatticePhysics (4D Collision)
9
+ * - PlayerController4D (Input)
10
+ * - LiveDirector (AI Pacing)
11
+ *
12
+ * @experimental
13
+ */
14
+ import { VIB3Universe } from '../VIB3Universe.js';
15
+ import { GameLoop } from '../GameLoop.js';
16
+ import { LatticePhysics } from '../LatticePhysics.js';
17
+ import { PlayerController4D } from '../PlayerController4D.js';
18
+ import { LiveDirector } from '../LiveDirector.js';
19
+
20
+ class CrystalLabyrinthGame {
21
+ constructor() {
22
+ this.universe = new VIB3Universe('vib3-universe');
23
+ this.physics = new LatticePhysics();
24
+ this.director = new LiveDirector(this.universe);
25
+
26
+ // Game State
27
+ this.score = 0;
28
+ this.health = 100;
29
+ this.isPlaying = false;
30
+
31
+ // Entities
32
+ this.player = null; // The "Camera"
33
+ this.crystals = [];
34
+ this.shadows = [];
35
+
36
+ // UI
37
+ this.ui = {
38
+ score: document.getElementById('score'),
39
+ health: document.getElementById('health'),
40
+ overlay: document.getElementById('overlay'),
41
+ startBtn: document.getElementById('start-btn')
42
+ };
43
+
44
+ // Bind input
45
+ this.controller = new PlayerController4D(document.body, {
46
+ setParameter: (k, v) => this.updatePlayerView(k, v)
47
+ });
48
+
49
+ // Setup Loop
50
+ this.loop = new GameLoop(
51
+ (dt) => this.update(dt),
52
+ (alpha) => this.render(alpha)
53
+ );
54
+
55
+ this.init();
56
+ }
57
+
58
+ async init() {
59
+ // Create the "World" (Background Layer)
60
+ // A deep, slow-moving Holographic system representing the void
61
+ const world = await this.universe.spawnActor({
62
+ personality: 'neutral',
63
+ system: 'holographic',
64
+ geometry: 11, // Hypersphere
65
+ layer: { zIndex: 0, opacity: 0.4 }
66
+ });
67
+
68
+ // Setup UI listeners
69
+ this.ui.startBtn.addEventListener('click', () => this.start());
70
+ }
71
+
72
+ start() {
73
+ this.isPlaying = true;
74
+ this.ui.overlay.classList.add('hidden');
75
+
76
+ // Start Systems
77
+ this.universe.start();
78
+ this.loop.start();
79
+ this.director.start();
80
+
81
+ // Spawn Level
82
+ this.spawnLevel();
83
+ }
84
+
85
+ async spawnLevel() {
86
+ // Spawn 5 Crystals (Pickups)
87
+ for (let i = 0; i < 5; i++) {
88
+ const crystal = await this.universe.spawnActor({
89
+ personality: 'heroic', // Bright, positive
90
+ system: 'faceted',
91
+ geometry: 7, // Crystal
92
+ layer: { zIndex: 10, blendMode: 'screen', opacity: 0.9 }
93
+ });
94
+
95
+ // Random position in 4D space (mock)
96
+ crystal.physics = {
97
+ pos: {
98
+ x: (Math.random() - 0.5) * 20,
99
+ y: (Math.random() - 0.5) * 5,
100
+ z: (Math.random() - 0.5) * 20
101
+ },
102
+ vel: { x: 0, y: 0, z: 0 },
103
+ acc: { x: 0, y: 0, z: 0 }
104
+ };
105
+
106
+ this.crystals.push(crystal);
107
+ }
108
+
109
+ // Spawn 3 Shadows (Enemies)
110
+ for (let i = 0; i < 3; i++) {
111
+ const shadow = await this.universe.spawnActor({
112
+ personality: 'glitch', // Chaotic, negative
113
+ system: 'quantum',
114
+ geometry: 16, // Spiky
115
+ layer: { zIndex: 5, blendMode: 'multiply', opacity: 0.7 }
116
+ });
117
+
118
+ shadow.physics = {
119
+ pos: { x: 0, y: 0, z: -30 }, // Start far away
120
+ vel: { x: 0, y: 0, z: 0 },
121
+ acc: { x: 0, y: 0, z: 0 }
122
+ };
123
+
124
+ this.shadows.push(shadow);
125
+ }
126
+ }
127
+
128
+ /**
129
+ * Physics Update (Fixed Timestep)
130
+ */
131
+ update(dt) {
132
+ if (!this.isPlaying) return;
133
+
134
+ // 1. Update Player Controls
135
+ this.controller.update(dt);
136
+
137
+ // 2. Update Physics World
138
+ // Sync player controller state to physics engine?
139
+ // For now, controller handles movement directly.
140
+
141
+ // 3. AI Logic (Shadows hunt player)
142
+ this.shadows.forEach(shadow => {
143
+ // Move towards player (0,0,0 relative to camera)
144
+ // In a real engine, we'd have absolute coordinates.
145
+ // Here, we simulate relative motion by updating parameters
146
+
147
+ // Mock: Oscillate shadow intensity based on "proximity"
148
+ shadow.emote('panic', 0.5);
149
+ });
150
+
151
+ // 4. Check Collisions (Mock)
152
+ // If player is close to a crystal -> Collect
153
+ if (Math.random() < 0.005 && this.crystals.length > 0) {
154
+ this.collectCrystal(this.crystals.pop());
155
+ }
156
+ }
157
+
158
+ /**
159
+ * Render Update (Variable Timestep)
160
+ */
161
+ render(alpha) {
162
+ // Visual interpolation could happen here
163
+ }
164
+
165
+ updatePlayerView(key, value) {
166
+ // Broadcast player view changes to the World actor
167
+ // This makes the world rotate around the player
168
+ const world = this.universe.actors.get(this.universe.orchestrator.entities.keys().next().value);
169
+ if (world && world.engine) {
170
+ world.engine.setParameter(key, value);
171
+ }
172
+ }
173
+
174
+ collectCrystal(actor) {
175
+ this.score++;
176
+ this.ui.score.innerText = this.score;
177
+
178
+ // FX
179
+ actor.emote('joy', 1.0, 500);
180
+ setTimeout(() => {
181
+ this.universe.despawnActor(actor.id);
182
+ }, 500);
183
+
184
+ if (this.score >= 5) {
185
+ this.win();
186
+ }
187
+ }
188
+
189
+ win() {
190
+ this.isPlaying = false;
191
+ this.ui.overlay.innerHTML = `
192
+ <h1 style="color: #0f0; text-shadow: 0 0 20px #0f0;">SECTOR STABILIZED</h1>
193
+ <p>The lattice is secure.</p>
194
+ <button onclick="location.reload()">Re-enter</button>
195
+ `;
196
+ this.ui.overlay.classList.remove('hidden');
197
+ this.loop.stop();
198
+ }
199
+ }
200
+
201
+ // Start Game
202
+ new CrystalLabyrinthGame();
@@ -160,10 +160,16 @@ const FRAGMENT_SHADER_GLSL = `
160
160
  int geomType = int(clamp(floor(baseGeomFloat + 0.5), 0.0, totalBase - 1.0));
161
161
 
162
162
  if (geomType == 0) {
163
- // Tetrahedron lattice
164
- vec4 pos = fract(p * u_gridDensity * 0.08);
165
- vec4 dist = min(pos, 1.0 - pos);
166
- return min(min(dist.x, dist.y), min(dist.z, dist.w)) * u_morphFactor;
163
+ // Tetrahedron lattice — tetrahedral symmetry planes
164
+ float d = u_gridDensity * 0.08;
165
+ vec3 c1 = normalize(vec3(1.0, 1.0, 1.0));
166
+ vec3 c2 = normalize(vec3(-1.0, -1.0, 1.0));
167
+ vec3 c3 = normalize(vec3(-1.0, 1.0, -1.0));
168
+ vec3 c4 = normalize(vec3(1.0, -1.0, -1.0));
169
+ vec3 q = fract(p.xyz * d + 0.5) - 0.5;
170
+ float minPlane = min(min(abs(dot(q, c1)), abs(dot(q, c2))),
171
+ min(abs(dot(q, c3)), abs(dot(q, c4))));
172
+ return (1.0 - smoothstep(0.0, 0.05, minPlane)) * u_morphFactor;
167
173
  }
168
174
  else if (geomType == 1) {
169
175
  // Hypercube lattice
@@ -429,8 +435,15 @@ fn geometryFunction_w(p: vec4<f32>) -> f32 {
429
435
  let gt = i32(clamp(floor(baseFloat + 0.5), 0.0, 7.0));
430
436
  let d = u.gridDensity * 0.08;
431
437
  if (gt == 0) {
432
- let pos = fract(p * d); let dist = min(pos, 1.0 - pos);
433
- return min(min(dist.x, dist.y), min(dist.z, dist.w)) * u.morphFactor;
438
+ // Tetrahedron tetrahedral symmetry planes
439
+ let c1 = normalize(vec3<f32>(1.0, 1.0, 1.0));
440
+ let c2 = normalize(vec3<f32>(-1.0, -1.0, 1.0));
441
+ let c3 = normalize(vec3<f32>(-1.0, 1.0, -1.0));
442
+ let c4 = normalize(vec3<f32>(1.0, -1.0, -1.0));
443
+ let q = fract(p.xyz * d + 0.5) - 0.5;
444
+ let minPlane = min(min(abs(dot(q, c1)), abs(dot(q, c2))),
445
+ min(abs(dot(q, c3)), abs(dot(q, c4))));
446
+ return (1.0 - smoothstep(0.0, 0.05, minPlane)) * u.morphFactor;
434
447
  } else if (gt == 1) {
435
448
  let pos = fract(p * d); let dist = min(pos, 1.0 - pos);
436
449
  return min(min(dist.x, dist.y), min(dist.z, dist.w)) * u.morphFactor;
@@ -61,8 +61,8 @@ export function generate24CellVertices(size = 1) {
61
61
  ];
62
62
  for (const [s1, s2] of signs) {
63
63
  const v = new Vec4(0, 0, 0, 0);
64
- v.data[i] = s1 * s;
65
- v.data[j] = s2 * s;
64
+ v.setComponent(i, s1 * s);
65
+ v.setComponent(j, s2 * s);
66
66
  vertices.push(v);
67
67
  }
68
68
  }