@vib3code/sdk 2.0.1

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 (258) hide show
  1. package/CHANGELOG.md +118 -0
  2. package/DOCS/BLUEPRINT_EXECUTION_PLAN_2026-01-07.md +34 -0
  3. package/DOCS/CI_TESTING.md +38 -0
  4. package/DOCS/CLI_ONBOARDING.md +75 -0
  5. package/DOCS/CONTROL_REFERENCE.md +64 -0
  6. package/DOCS/DEV_TRACK_ANALYSIS.md +77 -0
  7. package/DOCS/DEV_TRACK_PLAN_2026-01-07.md +42 -0
  8. package/DOCS/DEV_TRACK_SESSION_2026-01-31.md +220 -0
  9. package/DOCS/ENV_SETUP.md +189 -0
  10. package/DOCS/EXPORT_FORMATS.md +417 -0
  11. package/DOCS/GPU_DISPOSAL_GUIDE.md +21 -0
  12. package/DOCS/LICENSING_TIERS.md +275 -0
  13. package/DOCS/MASTER_PLAN_2026-01-31.md +570 -0
  14. package/DOCS/OBS_SETUP_GUIDE.md +98 -0
  15. package/DOCS/PROJECT_SETUP.md +66 -0
  16. package/DOCS/RENDERER_LIFECYCLE.md +40 -0
  17. package/DOCS/REPO_MANIFEST.md +121 -0
  18. package/DOCS/SESSION_014_PLAN.md +195 -0
  19. package/DOCS/SESSION_LOG_2026-01-07.md +56 -0
  20. package/DOCS/STRATEGIC_BLUEPRINT_2026-01-07.md +72 -0
  21. package/DOCS/SYSTEM_AUDIT_2026-01-30.md +738 -0
  22. package/DOCS/SYSTEM_INVENTORY.md +520 -0
  23. package/DOCS/TELEMETRY_EXPORTS.md +34 -0
  24. package/DOCS/WEBGPU_STATUS.md +38 -0
  25. package/DOCS/XR_BENCHMARKS.md +608 -0
  26. package/LICENSE +21 -0
  27. package/README.md +426 -0
  28. package/docs/.nojekyll +0 -0
  29. package/docs/01-dissolution_of_euclidean_hegemony.html +346 -0
  30. package/docs/02-hyperspatial_ego_death.html +346 -0
  31. package/docs/03-post_cartesian_sublime.html +346 -0
  32. package/docs/04-crystalline_void_meditation.html +346 -0
  33. package/docs/05-quantum_decoherence_ballet.html +346 -0
  34. package/docs/06-dissolution_of_euclidean_hegemony.html +346 -0
  35. package/docs/07-hyperspatial_ego_death.html +346 -0
  36. package/docs/08-post_cartesian_sublime.html +346 -0
  37. package/docs/09-crystalline_void_meditation.html +346 -0
  38. package/docs/10-quantum_decoherence_ballet.html +346 -0
  39. package/docs/11-dissolution_of_euclidean_hegemony.html +346 -0
  40. package/docs/12-hyperspatial_ego_death.html +346 -0
  41. package/docs/13-post_cartesian_sublime.html +346 -0
  42. package/docs/index.html +794 -0
  43. package/docs/test-hub.html +441 -0
  44. package/docs/url-state.js +102 -0
  45. package/docs/vib3-exports/01-quantum-quantum-tetrahedron-lattice.html +489 -0
  46. package/docs/vib3-exports/02-quantum-quantum-hypersphere-matrix.html +489 -0
  47. package/docs/vib3-exports/03-quantum-quantum-hypertetra-fractal.html +489 -0
  48. package/docs/vib3-exports/04-faceted-faceted-crystal-structure.html +407 -0
  49. package/docs/vib3-exports/05-faceted-faceted-klein-bottle.html +407 -0
  50. package/docs/vib3-exports/06-faceted-faceted-hypertetra-torus.html +407 -0
  51. package/docs/vib3-exports/07-holographic-holographic-wave-field.html +457 -0
  52. package/docs/vib3-exports/08-holographic-holographic-hypersphere-sphere.html +457 -0
  53. package/docs/vib3-exports/09-holographic-holographic-hypertetra-crystal.html +457 -0
  54. package/docs/vib3-exports/index.html +238 -0
  55. package/docs/webgpu-live.html +702 -0
  56. package/package.json +367 -0
  57. package/src/advanced/AIPresetGenerator.js +777 -0
  58. package/src/advanced/MIDIController.js +703 -0
  59. package/src/advanced/OffscreenWorker.js +1051 -0
  60. package/src/advanced/WebGPUCompute.js +1051 -0
  61. package/src/advanced/WebXRRenderer.js +680 -0
  62. package/src/agent/cli/AgentCLI.js +615 -0
  63. package/src/agent/cli/index.js +14 -0
  64. package/src/agent/index.js +73 -0
  65. package/src/agent/mcp/MCPServer.js +950 -0
  66. package/src/agent/mcp/index.js +9 -0
  67. package/src/agent/mcp/tools.js +548 -0
  68. package/src/agent/telemetry/EventStream.js +669 -0
  69. package/src/agent/telemetry/Instrumentation.js +618 -0
  70. package/src/agent/telemetry/TelemetryExporters.js +427 -0
  71. package/src/agent/telemetry/TelemetryService.js +464 -0
  72. package/src/agent/telemetry/index.js +52 -0
  73. package/src/benchmarks/BenchmarkRunner.js +381 -0
  74. package/src/benchmarks/MetricsCollector.js +299 -0
  75. package/src/benchmarks/index.js +9 -0
  76. package/src/benchmarks/scenes.js +259 -0
  77. package/src/cli/index.js +675 -0
  78. package/src/config/ApiConfig.js +88 -0
  79. package/src/core/CanvasManager.js +217 -0
  80. package/src/core/ErrorReporter.js +117 -0
  81. package/src/core/ParameterMapper.js +333 -0
  82. package/src/core/Parameters.js +396 -0
  83. package/src/core/RendererContracts.js +200 -0
  84. package/src/core/UnifiedResourceManager.js +370 -0
  85. package/src/core/VIB3Engine.js +636 -0
  86. package/src/core/renderers/FacetedRendererAdapter.js +32 -0
  87. package/src/core/renderers/HolographicRendererAdapter.js +29 -0
  88. package/src/core/renderers/QuantumRendererAdapter.js +29 -0
  89. package/src/core/renderers/RendererLifecycleManager.js +63 -0
  90. package/src/creative/ColorPresetsSystem.js +980 -0
  91. package/src/creative/ParameterTimeline.js +1061 -0
  92. package/src/creative/PostProcessingPipeline.js +1113 -0
  93. package/src/creative/TransitionAnimator.js +683 -0
  94. package/src/export/CSSExporter.js +226 -0
  95. package/src/export/CardGeneratorBase.js +279 -0
  96. package/src/export/ExportManager.js +580 -0
  97. package/src/export/FacetedCardGenerator.js +279 -0
  98. package/src/export/HolographicCardGenerator.js +543 -0
  99. package/src/export/LottieExporter.js +552 -0
  100. package/src/export/QuantumCardGenerator.js +315 -0
  101. package/src/export/SVGExporter.js +519 -0
  102. package/src/export/ShaderExporter.js +903 -0
  103. package/src/export/TradingCardGenerator.js +3055 -0
  104. package/src/export/TradingCardManager.js +181 -0
  105. package/src/export/VIB3PackageExporter.js +559 -0
  106. package/src/export/index.js +14 -0
  107. package/src/export/systems/TradingCardSystemFaceted.js +494 -0
  108. package/src/export/systems/TradingCardSystemHolographic.js +452 -0
  109. package/src/export/systems/TradingCardSystemQuantum.js +411 -0
  110. package/src/faceted/FacetedSystem.js +963 -0
  111. package/src/features/CollectionManager.js +433 -0
  112. package/src/gallery/CollectionManager.js +240 -0
  113. package/src/gallery/GallerySystem.js +485 -0
  114. package/src/geometry/GeometryFactory.js +314 -0
  115. package/src/geometry/GeometryLibrary.js +72 -0
  116. package/src/geometry/buffers/BufferBuilder.js +338 -0
  117. package/src/geometry/buffers/index.js +18 -0
  118. package/src/geometry/generators/Crystal.js +420 -0
  119. package/src/geometry/generators/Fractal.js +298 -0
  120. package/src/geometry/generators/KleinBottle.js +197 -0
  121. package/src/geometry/generators/Sphere.js +192 -0
  122. package/src/geometry/generators/Tesseract.js +160 -0
  123. package/src/geometry/generators/Tetrahedron.js +225 -0
  124. package/src/geometry/generators/Torus.js +304 -0
  125. package/src/geometry/generators/Wave.js +341 -0
  126. package/src/geometry/index.js +142 -0
  127. package/src/geometry/warp/HypersphereCore.js +211 -0
  128. package/src/geometry/warp/HypertetraCore.js +386 -0
  129. package/src/geometry/warp/index.js +57 -0
  130. package/src/holograms/HolographicVisualizer.js +1073 -0
  131. package/src/holograms/RealHolographicSystem.js +966 -0
  132. package/src/holograms/variantRegistry.js +69 -0
  133. package/src/integrations/FigmaPlugin.js +854 -0
  134. package/src/integrations/OBSMode.js +754 -0
  135. package/src/integrations/ThreeJsPackage.js +660 -0
  136. package/src/integrations/TouchDesignerExport.js +552 -0
  137. package/src/integrations/frameworks/Vib3React.js +591 -0
  138. package/src/integrations/frameworks/Vib3Svelte.js +654 -0
  139. package/src/integrations/frameworks/Vib3Vue.js +628 -0
  140. package/src/llm/LLMParameterInterface.js +240 -0
  141. package/src/llm/LLMParameterUI.js +577 -0
  142. package/src/math/Mat4x4.js +708 -0
  143. package/src/math/Projection.js +341 -0
  144. package/src/math/Rotor4D.js +637 -0
  145. package/src/math/Vec4.js +476 -0
  146. package/src/math/constants.js +164 -0
  147. package/src/math/index.js +68 -0
  148. package/src/math/projections.js +54 -0
  149. package/src/math/rotations.js +196 -0
  150. package/src/quantum/QuantumEngine.js +906 -0
  151. package/src/quantum/QuantumVisualizer.js +1103 -0
  152. package/src/reactivity/ReactivityConfig.js +499 -0
  153. package/src/reactivity/ReactivityManager.js +586 -0
  154. package/src/reactivity/SpatialInputSystem.js +1783 -0
  155. package/src/reactivity/index.js +93 -0
  156. package/src/render/CommandBuffer.js +465 -0
  157. package/src/render/MultiCanvasBridge.js +340 -0
  158. package/src/render/RenderCommand.js +514 -0
  159. package/src/render/RenderResourceRegistry.js +523 -0
  160. package/src/render/RenderState.js +552 -0
  161. package/src/render/RenderTarget.js +512 -0
  162. package/src/render/ShaderLoader.js +253 -0
  163. package/src/render/ShaderProgram.js +599 -0
  164. package/src/render/UnifiedRenderBridge.js +496 -0
  165. package/src/render/backends/WebGLBackend.js +1108 -0
  166. package/src/render/backends/WebGPUBackend.js +1409 -0
  167. package/src/render/commands/CommandBufferExecutor.js +607 -0
  168. package/src/render/commands/RenderCommandBuffer.js +661 -0
  169. package/src/render/commands/index.js +17 -0
  170. package/src/render/index.js +367 -0
  171. package/src/scene/Disposable.js +498 -0
  172. package/src/scene/MemoryPool.js +618 -0
  173. package/src/scene/Node4D.js +697 -0
  174. package/src/scene/ResourceManager.js +599 -0
  175. package/src/scene/Scene4D.js +540 -0
  176. package/src/scene/index.js +98 -0
  177. package/src/schemas/error.schema.json +84 -0
  178. package/src/schemas/extension.schema.json +88 -0
  179. package/src/schemas/index.js +214 -0
  180. package/src/schemas/parameters.schema.json +142 -0
  181. package/src/schemas/tool-pack.schema.json +44 -0
  182. package/src/schemas/tool-response.schema.json +127 -0
  183. package/src/shaders/common/fullscreen.vert.glsl +5 -0
  184. package/src/shaders/common/fullscreen.vert.wgsl +17 -0
  185. package/src/shaders/common/geometry24.glsl +65 -0
  186. package/src/shaders/common/geometry24.wgsl +54 -0
  187. package/src/shaders/common/rotation4d.glsl +85 -0
  188. package/src/shaders/common/rotation4d.wgsl +86 -0
  189. package/src/shaders/common/uniforms.glsl +44 -0
  190. package/src/shaders/common/uniforms.wgsl +48 -0
  191. package/src/shaders/faceted/faceted.frag.glsl +129 -0
  192. package/src/shaders/faceted/faceted.frag.wgsl +164 -0
  193. package/src/shaders/holographic/holographic.frag.glsl +406 -0
  194. package/src/shaders/holographic/holographic.frag.wgsl +185 -0
  195. package/src/shaders/quantum/quantum.frag.glsl +513 -0
  196. package/src/shaders/quantum/quantum.frag.wgsl +361 -0
  197. package/src/testing/ParallelTestFramework.js +519 -0
  198. package/src/testing/__snapshots__/exportFormats.test.js.snap +24 -0
  199. package/src/testing/exportFormats.test.js +8 -0
  200. package/src/testing/projections.test.js +14 -0
  201. package/src/testing/rotations.test.js +37 -0
  202. package/src/ui/InteractivityMenu.js +516 -0
  203. package/src/ui/StatusManager.js +96 -0
  204. package/src/ui/adaptive/renderers/webgpu/BufferLayout.ts +252 -0
  205. package/src/ui/adaptive/renderers/webgpu/PolytopeInstanceBuffer.ts +144 -0
  206. package/src/ui/adaptive/renderers/webgpu/TripleBufferedUniform.ts +170 -0
  207. package/src/ui/adaptive/renderers/webgpu/WebGPURenderer.ts +735 -0
  208. package/src/ui/adaptive/renderers/webgpu/index.ts +112 -0
  209. package/src/variations/VariationManager.js +431 -0
  210. package/src/viewer/AudioReactivity.js +505 -0
  211. package/src/viewer/CardBending.js +481 -0
  212. package/src/viewer/GalleryUI.js +832 -0
  213. package/src/viewer/ReactivityManager.js +590 -0
  214. package/src/viewer/TradingCardExporter.js +600 -0
  215. package/src/viewer/ViewerPortal.js +374 -0
  216. package/src/viewer/index.js +12 -0
  217. package/src/wasm/WasmLoader.js +296 -0
  218. package/src/wasm/index.js +132 -0
  219. package/tools/agentic/mcpTools.js +88 -0
  220. package/tools/cli/agent-cli.js +92 -0
  221. package/tools/export/formats.js +24 -0
  222. package/tools/math/rotation-baseline.mjs +64 -0
  223. package/tools/shader-sync-verify.js +937 -0
  224. package/tools/telemetry/manifestPipeline.js +141 -0
  225. package/tools/telemetry/telemetryEvents.js +35 -0
  226. package/types/adaptive-sdk.d.ts +185 -0
  227. package/types/advanced/AIPresetGenerator.d.ts +81 -0
  228. package/types/advanced/MIDIController.d.ts +100 -0
  229. package/types/advanced/OffscreenWorker.d.ts +82 -0
  230. package/types/advanced/WebGPUCompute.d.ts +52 -0
  231. package/types/advanced/WebXRRenderer.d.ts +77 -0
  232. package/types/advanced/index.d.ts +46 -0
  233. package/types/core/ErrorReporter.d.ts +50 -0
  234. package/types/core/VIB3Engine.d.ts +204 -0
  235. package/types/creative/ColorPresetsSystem.d.ts +91 -0
  236. package/types/creative/ParameterTimeline.d.ts +74 -0
  237. package/types/creative/PostProcessingPipeline.d.ts +109 -0
  238. package/types/creative/TransitionAnimator.d.ts +71 -0
  239. package/types/creative/index.d.ts +35 -0
  240. package/types/integrations/FigmaPlugin.d.ts +46 -0
  241. package/types/integrations/OBSMode.d.ts +74 -0
  242. package/types/integrations/ThreeJsPackage.d.ts +62 -0
  243. package/types/integrations/TouchDesignerExport.d.ts +36 -0
  244. package/types/integrations/Vib3React.d.ts +74 -0
  245. package/types/integrations/Vib3Svelte.d.ts +63 -0
  246. package/types/integrations/Vib3Vue.d.ts +55 -0
  247. package/types/integrations/index.d.ts +52 -0
  248. package/types/reactivity/SpatialInputSystem.d.ts +173 -0
  249. package/types/reactivity/index.d.ts +394 -0
  250. package/types/render/CommandBuffer.d.ts +169 -0
  251. package/types/render/RenderCommand.d.ts +312 -0
  252. package/types/render/RenderState.d.ts +279 -0
  253. package/types/render/RenderTarget.d.ts +254 -0
  254. package/types/render/ShaderProgram.d.ts +277 -0
  255. package/types/render/UnifiedRenderBridge.d.ts +143 -0
  256. package/types/render/WebGLBackend.d.ts +168 -0
  257. package/types/render/WebGPUBackend.d.ts +186 -0
  258. package/types/render/index.d.ts +141 -0
@@ -0,0 +1,275 @@
1
+ # Licensing tiers (draft)
2
+
3
+ This document outlines the proposed licensing tiers for the VIB3+ SDK and agentic tooling. It is intended as a working draft for Phase 5.
4
+
5
+ ## Proposed tiers
6
+ | Tier | Price | Revenue Limit | Key Features |
7
+ | --- | --- | --- | --- |
8
+ | Community | Free (MIT) | Non-commercial | Runtime access, watermark on exports |
9
+ | Indie | $29/mo | <$100K | Commercial use, standard formats |
10
+ | Studio | $99/mo/seat | <$500K | Priority support, all formats |
11
+ | Pro | $249/mo/seat | <$2M | Source access, custom shaders |
12
+ | Enterprise | Custom | $2M+ | Indemnification, dedicated support |
13
+ | OEM/White-Label | Custom annual | Any | Rebranding/redistribution rights |
14
+
15
+ ## Feature matrix by tier
16
+
17
+ | Feature | Community | Indie | Studio | Pro | Enterprise |
18
+ |---------|-----------|-------|--------|-----|------------|
19
+ | WebGL backend | Yes | Yes | Yes | Yes | Yes |
20
+ | WebGPU backend | Yes | Yes | Yes | Yes | Yes |
21
+ | 24 geometry variants | Yes | Yes | Yes | Yes | Yes |
22
+ | 6D rotation | Yes | Yes | Yes | Yes | Yes |
23
+ | Export watermark | Yes | No | No | No | No |
24
+ | SVG export | 3/day | Unlimited | Unlimited | Unlimited | Unlimited |
25
+ | Lottie export | No | Yes | Yes | Yes | Yes |
26
+ | CSS variables export | No | Yes | Yes | Yes | Yes |
27
+ | Custom shaders | No | No | No | Yes | Yes |
28
+ | WASM core | No | No | Yes | Yes | Yes |
29
+ | Flutter bindings | No | No | Yes | Yes | Yes |
30
+ | Source access | No | No | No | Yes | Yes |
31
+ | Priority support | No | No | Yes | Yes | Yes |
32
+ | Dedicated support | No | No | No | No | Yes |
33
+ | SLA | No | No | No | No | Yes |
34
+
35
+ ## Activation workflow (implementation)
36
+
37
+ ### 1. License key format
38
+ ```
39
+ VIB3-{TIER}-{UUID}-{CHECKSUM}
40
+
41
+ Examples:
42
+ VIB3-INDIE-a1b2c3d4-e5f6g7h8-XXXX
43
+ VIB3-STUDIO-b2c3d4e5-f6g7h8i9-YYYY
44
+ VIB3-PRO-c3d4e5f6-g7h8i9j0-ZZZZ
45
+ ```
46
+
47
+ ### 2. Activation flow
48
+ ```
49
+ ┌─────────────────────────────────────────────────────────────────┐
50
+ │ LICENSE ACTIVATION │
51
+ └─────────────────────────────────────────────────────────────────┘
52
+
53
+ User CLI/UI License Server
54
+ │ │ │
55
+ │ 1. Enter license key │ │
56
+ │───────────────────────>│ │
57
+ │ │ 2. Validate key format │
58
+ │ │───────────────────────────>│
59
+ │ │ │
60
+ │ │ 3. Return signed token │
61
+ │ │<───────────────────────────│
62
+ │ │ │
63
+ │ │ 4. Store token locally │
64
+ │ │ (encrypted, machine-bound)│
65
+ │ │ │
66
+ │ 5. Activation success │ │
67
+ │<───────────────────────│ │
68
+ ```
69
+
70
+ ### 3. CLI activation commands
71
+ ```bash
72
+ # Activate a license
73
+ vib3 license activate VIB3-INDIE-a1b2c3d4-e5f6g7h8-XXXX
74
+
75
+ # Check license status
76
+ vib3 license status
77
+
78
+ # Deactivate (for moving to new machine)
79
+ vib3 license deactivate
80
+
81
+ # Refresh license token (manual heartbeat)
82
+ vib3 license refresh
83
+ ```
84
+
85
+ ### 4. Programmatic activation
86
+ ```javascript
87
+ import { LicenseManager } from '@vib3code/sdk/license';
88
+
89
+ const license = new LicenseManager();
90
+
91
+ // Activate
92
+ const result = await license.activate('VIB3-INDIE-...');
93
+ if (result.success) {
94
+ console.log('Tier:', result.tier);
95
+ console.log('Expires:', result.expiresAt);
96
+ }
97
+
98
+ // Check status
99
+ const status = license.getStatus();
100
+ // { tier: 'indie', valid: true, expiresAt: '2026-02-23', features: [...] }
101
+
102
+ // Feature gating
103
+ if (license.hasFeature('lottie-export')) {
104
+ await exportToLottie(scene);
105
+ }
106
+ ```
107
+
108
+ ## License token schema
109
+ ```json
110
+ {
111
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
112
+ "type": "object",
113
+ "properties": {
114
+ "version": { "type": "integer", "const": 1 },
115
+ "licenseKey": { "type": "string", "pattern": "^VIB3-[A-Z]+-[a-f0-9-]+$" },
116
+ "tier": { "enum": ["community", "indie", "studio", "pro", "enterprise", "oem"] },
117
+ "machineId": { "type": "string" },
118
+ "issuedAt": { "type": "string", "format": "date-time" },
119
+ "expiresAt": { "type": "string", "format": "date-time" },
120
+ "features": {
121
+ "type": "array",
122
+ "items": { "type": "string" }
123
+ },
124
+ "signature": { "type": "string" }
125
+ },
126
+ "required": ["version", "licenseKey", "tier", "machineId", "issuedAt", "expiresAt", "signature"]
127
+ }
128
+ ```
129
+
130
+ ## Offline validation
131
+
132
+ ### Grace period rules
133
+ - **Initial grace period:** 7 days without network connection
134
+ - **Refresh interval:** Token refresh attempted every 24 hours when online
135
+ - **Expiration warning:** 3 days before token expiration
136
+ - **Hard expiration:** After grace period, features downgrade to Community tier
137
+
138
+ ### Offline validation flow
139
+ ```javascript
140
+ // Pseudocode for offline validation
141
+ function validateOffline(token) {
142
+ // 1. Verify signature with embedded public key
143
+ if (!verifySignature(token, PUBLIC_KEY)) {
144
+ return { valid: false, reason: 'invalid_signature' };
145
+ }
146
+
147
+ // 2. Check expiration with grace period
148
+ const now = Date.now();
149
+ const expires = new Date(token.expiresAt).getTime();
150
+ const gracePeriod = 7 * 24 * 60 * 60 * 1000; // 7 days
151
+
152
+ if (now > expires + gracePeriod) {
153
+ return { valid: false, reason: 'expired', gracePeriodExceeded: true };
154
+ }
155
+
156
+ // 3. Verify machine binding
157
+ if (token.machineId !== getMachineId()) {
158
+ return { valid: false, reason: 'machine_mismatch' };
159
+ }
160
+
161
+ return {
162
+ valid: true,
163
+ tier: token.tier,
164
+ features: token.features,
165
+ gracePeriodActive: now > expires
166
+ };
167
+ }
168
+ ```
169
+
170
+ ## Feature gating implementation
171
+
172
+ ### Runtime feature checks
173
+ ```javascript
174
+ // src/license/FeatureGate.js
175
+ export class FeatureGate {
176
+ constructor(licenseManager) {
177
+ this.license = licenseManager;
178
+ }
179
+
180
+ // Check if feature is available
181
+ can(feature) {
182
+ const status = this.license.getStatus();
183
+ if (!status.valid) return false;
184
+ return status.features.includes(feature);
185
+ }
186
+
187
+ // Gate a function call
188
+ guard(feature, fn) {
189
+ if (!this.can(feature)) {
190
+ throw new FeatureNotAvailableError(feature, this.license.getStatus().tier);
191
+ }
192
+ return fn();
193
+ }
194
+
195
+ // Async gate
196
+ async guardAsync(feature, fn) {
197
+ if (!this.can(feature)) {
198
+ throw new FeatureNotAvailableError(feature, this.license.getStatus().tier);
199
+ }
200
+ return await fn();
201
+ }
202
+ }
203
+
204
+ // Usage in export pipeline
205
+ const gate = new FeatureGate(licenseManager);
206
+
207
+ async function exportScene(scene, format) {
208
+ switch (format) {
209
+ case 'svg':
210
+ // Community: 3/day limit
211
+ if (gate.can('unlimited-svg')) {
212
+ return await exportSVG(scene);
213
+ } else {
214
+ return await exportSVGWithLimit(scene, 3);
215
+ }
216
+
217
+ case 'lottie':
218
+ return await gate.guardAsync('lottie-export', () => exportLottie(scene));
219
+
220
+ case 'css':
221
+ return await gate.guardAsync('css-export', () => exportCSS(scene));
222
+ }
223
+ }
224
+ ```
225
+
226
+ ## Watermark implementation (Community tier)
227
+
228
+ For Community tier exports, a subtle watermark is applied:
229
+ ```javascript
230
+ function applyWatermark(svg) {
231
+ const watermark = `
232
+ <g id="vib3-watermark" opacity="0.3" transform="translate(10, ${height - 20})">
233
+ <text font-size="10" fill="#666">Created with VIB3+ Community</text>
234
+ </g>
235
+ `;
236
+ return svg.replace('</svg>', `${watermark}</svg>`);
237
+ }
238
+ ```
239
+
240
+ ## Telemetry (opt-in)
241
+
242
+ Anonymous usage telemetry can be enabled to help improve the SDK:
243
+ ```javascript
244
+ // Telemetry is opt-in and respects license tier
245
+ const telemetryConfig = {
246
+ enabled: userConsent && license.tier !== 'enterprise',
247
+ events: ['render_frame', 'export_complete', 'geometry_change'],
248
+ excludeFields: ['custom_shader_source', 'scene_data']
249
+ };
250
+ ```
251
+
252
+ ## Migration path
253
+
254
+ ### Upgrading tiers
255
+ - Seamless upgrade via CLI or dashboard
256
+ - Existing exports retain their tier watermark status
257
+ - No re-export required for previously exported assets
258
+
259
+ ### Downgrading tiers
260
+ - Features revert to lower tier limits
261
+ - Existing high-tier exports continue to work
262
+ - New exports subject to new tier limits
263
+
264
+ ## Implementation status
265
+
266
+ | Component | Status | Location |
267
+ |-----------|--------|----------|
268
+ | License key format | Defined | This document |
269
+ | Token schema | Defined | This document |
270
+ | CLI commands | TODO | `src/cli/license.js` |
271
+ | LicenseManager | TODO | `src/license/LicenseManager.js` |
272
+ | FeatureGate | TODO | `src/license/FeatureGate.js` |
273
+ | Offline validation | TODO | `src/license/OfflineValidator.js` |
274
+ | Server endpoints | TODO | External service |
275
+ | Dashboard | TODO | External service |