@descix/frqtl-node 0.0.0-stage → 0.6.0-p0.2

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 (218) hide show
  1. package/CLAUDE.md +87 -0
  2. package/LICENSE.md +664 -0
  3. package/README.md +84 -2
  4. package/dist/dist-manifest.json +218 -0
  5. package/dist/eyes/index.js +109 -0
  6. package/dist/fat/pkg-node/egpt_wasm.js +1277 -0
  7. package/dist/fat/pkg-node/egpt_wasm_bg.wasm +0 -0
  8. package/dist/fat/pkg-node/package.json +12 -0
  9. package/dist/frqtl/assets/vendor/chroma.mjs +64 -0
  10. package/dist/frqtl/compat/boot-node.js +34 -0
  11. package/dist/frqtl/compat/engine.js +127 -0
  12. package/dist/frqtl/compat/package-root.js +24 -0
  13. package/dist/frqtl/compat/providers/wasm-engine.js +2499 -0
  14. package/dist/frqtl/compat/providers/wasm-load-browser.js +134 -0
  15. package/dist/frqtl/compat/providers/wasm-load-node.js +59 -0
  16. package/dist/frqtl/compat/renderer/FieldBuilder.js +145 -0
  17. package/dist/frqtl/compat/renderer/Filters.js +163 -0
  18. package/dist/frqtl/compat/renderer/RenderFamily.js +84 -0
  19. package/dist/frqtl/compat/renderer/RenderMesh.js +99 -0
  20. package/dist/frqtl/compat/renderer/RenderShape.js +154 -0
  21. package/dist/frqtl/compat/renderer/camera2d-geometry.js +183 -0
  22. package/dist/frqtl/compat/renderer/captureStill-common.js +258 -0
  23. package/dist/frqtl/compat/renderer/display-slot.js +96 -0
  24. package/dist/frqtl/compat/renderer/lo-drawn-center.js +231 -0
  25. package/dist/frqtl/compat/renderer/orbit-bag.js +216 -0
  26. package/dist/frqtl/compat/renderer/providers/godrays-layer.js +213 -0
  27. package/dist/frqtl/compat/renderer/providers/index.js +22 -0
  28. package/dist/frqtl/compat/renderer/providers/p5-provider.js +861 -0
  29. package/dist/frqtl/compat/renderer/providers/three-camera-contract.js +160 -0
  30. package/dist/frqtl/compat/renderer/providers/three-camera-geometry.js +571 -0
  31. package/dist/frqtl/compat/renderer/providers/three-provider.js +2470 -0
  32. package/dist/frqtl/compat/renderer/renderCapabilities-common.js +186 -0
  33. package/dist/frqtl/compat/renderer/renderer-provider-contract.js +238 -0
  34. package/dist/frqtl/compat/renderer/unprojectStill.js +172 -0
  35. package/dist/frqtl/compat/vendor.js +196 -0
  36. package/dist/frqtl/node-entry.js +17 -0
  37. package/dist/frqtl/objects/FrqtlApp.js +2920 -0
  38. package/dist/frqtl/objects/ObjectFactory.js +296 -0
  39. package/dist/frqtl/objects/RecipeContext.js +322 -0
  40. package/dist/frqtl/objects/collectors/DataCollector.js +116 -0
  41. package/dist/frqtl/objects/constants/WallBehaviors.js +178 -0
  42. package/dist/frqtl/objects/geometry/SlabFace.js +258 -0
  43. package/dist/frqtl/objects/instruments/capture-host.js +453 -0
  44. package/dist/frqtl/objects/instruments/capture.js +710 -0
  45. package/dist/frqtl/objects/instruments/hosted-eyes.js +984 -0
  46. package/dist/frqtl/objects/kinds-entry.js +14 -0
  47. package/dist/frqtl/objects/kinds.js +190 -0
  48. package/dist/frqtl/objects/objects/Box.js +273 -0
  49. package/dist/frqtl/objects/objects/Bullet.js +155 -0
  50. package/dist/frqtl/objects/objects/CircuitGate.js +380 -0
  51. package/dist/frqtl/objects/objects/CircuitProbe.js +214 -0
  52. package/dist/frqtl/objects/objects/DirectedTunnel.js +411 -0
  53. package/dist/frqtl/objects/objects/EgptFractal.js +164 -0
  54. package/dist/frqtl/objects/objects/LightSource.js +351 -0
  55. package/dist/frqtl/objects/objects/QuantumEmitter.js +760 -0
  56. package/dist/frqtl/objects/objects/Tube.js +471 -0
  57. package/dist/frqtl/objects/objects/absorbRadiation.js +309 -0
  58. package/dist/frqtl/objects/objects/actionCompiler.js +1747 -0
  59. package/dist/frqtl/objects/objects/controlAction.js +89 -0
  60. package/dist/frqtl/objects/objects/controlBind.js +278 -0
  61. package/dist/frqtl/objects/objects/directedRedirectProgram.js +120 -0
  62. package/dist/frqtl/objects/objects/emitterProgram.js +209 -0
  63. package/dist/frqtl/objects/objects/frqtl-control-slider.js +197 -0
  64. package/dist/frqtl/objects/objects/frqtl-control-sync.js +272 -0
  65. package/dist/frqtl/objects/objects/frqtl-control-widgets.js +219 -0
  66. package/dist/frqtl/objects/objects/frqtl-control-write-queue.js +174 -0
  67. package/dist/frqtl/objects/objects/makeControlsForObject.js +820 -0
  68. package/dist/frqtl/objects/objects/makeControlsForRenderSurface.js +161 -0
  69. package/dist/frqtl/objects/objects/slitLinerScatter.js +261 -0
  70. package/dist/frqtl/objects/objects/sustainedSource.js +298 -0
  71. package/dist/frqtl/objects/objects/tagger.js +228 -0
  72. package/dist/frqtl/objects/schema/engine-scopes.js +468 -0
  73. package/dist/frqtl/objects/schema/index.js +256 -0
  74. package/dist/frqtl/objects/schema/scopes.js +457 -0
  75. package/dist/frqtl/objects/schema/validate-descriptor.js +49 -0
  76. package/dist/frqtl/objects/schema/valueNormalizer.js +366 -0
  77. package/dist/frqtl/objects/setup/_collisionMatrixLanes.js +66 -0
  78. package/dist/frqtl/objects/setup/_setupOptions.js +118 -0
  79. package/dist/frqtl/objects/setup/_worldInit.js +162 -0
  80. package/dist/frqtl/objects/setup/setupBlackbodySubstrate.js +242 -0
  81. package/dist/frqtl/objects/setup/setupCircuitBasic.js +447 -0
  82. package/dist/frqtl/objects/setup/setupCollisionMatrix.js +188 -0
  83. package/dist/frqtl/objects/setup/setupConeEmitter3D.js +250 -0
  84. package/dist/frqtl/objects/setup/setupDoubleSlit.js +326 -0
  85. package/dist/frqtl/objects/setup/setupDoubleSlit_Laser.js +229 -0
  86. package/dist/frqtl/objects/setup/setupEmpty.js +59 -0
  87. package/dist/frqtl/objects/setup/setupFxSmoke.js +209 -0
  88. package/dist/frqtl/objects/setup/setupG1Race.js +80 -0
  89. package/dist/frqtl/objects/setup/setupG2Sweep.js +89 -0
  90. package/dist/frqtl/objects/setup/setupG3Collide.js +177 -0
  91. package/dist/frqtl/objects/setup/setupLightSourceLab.js +277 -0
  92. package/dist/frqtl/objects/setup/setupOscillator.js +68 -0
  93. package/dist/frqtl/objects/setup/setupParticleWalk.js +93 -0
  94. package/dist/frqtl/objects/setup/setupParticleWalk3D.js +133 -0
  95. package/dist/frqtl/objects/setup/setupSphereEmitter3D.js +1258 -0
  96. package/dist/frqtl/objects/setup/setupTraceCircuit.js +239 -0
  97. package/dist/frqtl/objects/setup/setupTunnelLab.js +240 -0
  98. package/dist/frqtl/objects/setup/setupTunnelPointExit.js +306 -0
  99. package/dist/frqtl/objects/setup/setupWaveInterference.js +177 -0
  100. package/dist/frqtl/objects/v1-replacements.js +29 -0
  101. package/dist/frqtl/package-core.js +23 -0
  102. package/dist/frqtl/parts/CameraControls.js +643 -0
  103. package/dist/frqtl/parts/CameraPath.js +575 -0
  104. package/dist/frqtl/parts/CollisionActions.js +34 -0
  105. package/dist/frqtl/parts/CollisionTypes.js +30 -0
  106. package/dist/frqtl/parts/DetectorWall.js +496 -0
  107. package/dist/frqtl/parts/FrqtlControlOverlay.js +227 -0
  108. package/dist/frqtl/parts/FrqtlControlsPanel.js +415 -0
  109. package/dist/frqtl/parts/FrqtlVision.js +818 -0
  110. package/dist/frqtl/parts/GraphingDetectorWall.js +489 -0
  111. package/dist/frqtl/parts/LargeObject.js +405 -0
  112. package/dist/frqtl/parts/LightColor.js +255 -0
  113. package/dist/frqtl/parts/LiveChart.js +285 -0
  114. package/dist/frqtl/parts/LogicGate.js +717 -0
  115. package/dist/frqtl/parts/OvenBox.js +611 -0
  116. package/dist/frqtl/parts/PointSource.js +762 -0
  117. package/dist/frqtl/parts/Rectangle.js +200 -0
  118. package/dist/frqtl/parts/SlitLightSource.js +234 -0
  119. package/dist/frqtl/parts/SlitScreen.js +628 -0
  120. package/dist/frqtl/parts/SphereEmitter.js +946 -0
  121. package/dist/frqtl/parts/Trace.js +508 -0
  122. package/dist/frqtl/parts/Tunnel.js +1057 -0
  123. package/dist/frqtl/parts/Wall.js +1211 -0
  124. package/dist/frqtl/parts/index.js +33 -0
  125. package/dist/frqtl/scenes/absorbing-wall-3d.js +33 -0
  126. package/dist/frqtl/scenes/absorbing-wall.js +32 -0
  127. package/dist/frqtl/scenes/atomic-model.js +88 -0
  128. package/dist/frqtl/scenes/big-bang.js +46 -0
  129. package/dist/frqtl/scenes/blackbody.js +81 -0
  130. package/dist/frqtl/scenes/circuit-sat.js +127 -0
  131. package/dist/frqtl/scenes/collision-matrix-3d.js +107 -0
  132. package/dist/frqtl/scenes/counting-wall-3d.js +36 -0
  133. package/dist/frqtl/scenes/counting-wall.js +38 -0
  134. package/dist/frqtl/scenes/double-slit.js +31 -0
  135. package/dist/frqtl/scenes/dse-one-emitter.js +196 -0
  136. package/dist/frqtl/scenes/dse-one-slit.js +114 -0
  137. package/dist/frqtl/scenes/dse-photoelectric.js +70 -0
  138. package/dist/frqtl/scenes/dse-tunnel-rebuild.js +243 -0
  139. package/dist/frqtl/scenes/dse-two-emitters.js +196 -0
  140. package/dist/frqtl/scenes/dse-two-slits.js +132 -0
  141. package/dist/frqtl/scenes/empty.js +14 -0
  142. package/dist/frqtl/scenes/laser-buildup.js +49 -0
  143. package/dist/frqtl/scenes/mirror-3d.js +56 -0
  144. package/dist/frqtl/scenes/mirror-route.js +140 -0
  145. package/dist/frqtl/scenes/mirror.js +38 -0
  146. package/dist/frqtl/scenes/omni-3d.js +27 -0
  147. package/dist/frqtl/scenes/omni-source.js +22 -0
  148. package/dist/frqtl/scenes/self-interference.js +39 -0
  149. package/dist/frqtl/scenes/smoking-gun.js +122 -0
  150. package/dist/frqtl/scenes/straight-walk.js +22 -0
  151. package/dist/frqtl/scenes/sun.js +39 -0
  152. package/dist/frqtl/scenes/two-source.js +37 -0
  153. package/dist/frqtl/scenes/wave.js +26 -0
  154. package/dist/shim/bundle/frqnb.js +112 -0
  155. package/dist/shim/bundle/index.js +121 -0
  156. package/dist/shim/bundle/indexHtml.js +107 -0
  157. package/dist/shim/bundle/manifest.js +95 -0
  158. package/dist/shim/bundle/zip.js +243 -0
  159. package/dist/shim/bus.js +67 -0
  160. package/dist/shim/controls/index.js +627 -0
  161. package/dist/shim/controls/registry.js +274 -0
  162. package/dist/shim/engine/artifact-shell.js +211 -0
  163. package/dist/shim/engine/boot-phases.js +44 -0
  164. package/dist/shim/engine/engine-stack-boot.js +59 -0
  165. package/dist/shim/engine/router.js +690 -0
  166. package/dist/shim/experiment-frame/index.js +296 -0
  167. package/dist/shim/expr/ast-schema.js +369 -0
  168. package/dist/shim/field-descriptor/index.js +325 -0
  169. package/dist/shim/frame-data/index.js +224 -0
  170. package/dist/shim/index.js +67 -0
  171. package/dist/shim/notebook/canvas-guard.js +82 -0
  172. package/dist/shim/notebook/catalog.js +35 -0
  173. package/dist/shim/notebook/format.js +736 -0
  174. package/dist/shim/notebook/frqtl-setups-importmap.js +81 -0
  175. package/dist/shim/notebook/kernel.js +671 -0
  176. package/dist/shim/notebook/knob.js +150 -0
  177. package/dist/shim/notebook/module-resolver.js +260 -0
  178. package/dist/shim/notebook/notebook-knobs.js +65 -0
  179. package/dist/shim/notebook/produced-bindings.js +67 -0
  180. package/dist/shim/notebook/realm-registry.js +121 -0
  181. package/dist/shim/notebook/realm-transport.js +73 -0
  182. package/dist/shim/notebook/setup-builder.js +507 -0
  183. package/dist/shim/notebook/store.js +159 -0
  184. package/dist/shim/notebook/vendor-importmap.js +134 -0
  185. package/dist/shim/notebook/view-builder.js +189 -0
  186. package/dist/shim/notebook/view-ctx.js +100 -0
  187. package/dist/shim/notebook/view-handle.js +202 -0
  188. package/dist/shim/notebook/warmup.js +102 -0
  189. package/dist/shim/package.json +4 -0
  190. package/dist/shim/page-params/index.js +213 -0
  191. package/dist/shim/project/identity.js +112 -0
  192. package/dist/shim/project/index.js +19 -0
  193. package/dist/shim/project/link.js +402 -0
  194. package/dist/shim/project/node-specifier-hook.mjs +35 -0
  195. package/dist/shim/project/register-node.mjs +17 -0
  196. package/dist/shim/project/specifiers.js +106 -0
  197. package/dist/shim/registry/copy-gate.js +110 -0
  198. package/dist/shim/registry/exhibits.js +455 -0
  199. package/dist/shim/registry/experiments.js +215 -0
  200. package/dist/shim/registry/index.js +19 -0
  201. package/dist/shim/registry/scene-source.js +157 -0
  202. package/dist/shim/registry/walkthrough.js +804 -0
  203. package/dist/shim/render/capture-envelope.js +279 -0
  204. package/dist/shim/render/heat-colormap.js +92 -0
  205. package/dist/shim/render/render-stages.js +855 -0
  206. package/dist/shim/render/sun-look.js +33 -0
  207. package/dist/shim/render-state/apply.js +262 -0
  208. package/dist/shim/render-state/index.js +74 -0
  209. package/dist/shim/rpc/index.js +207 -0
  210. package/dist/shim/runtime/index.js +1023 -0
  211. package/dist/shim/storage/boot.js +69 -0
  212. package/dist/shim/storage/index.js +169 -0
  213. package/dist/shim/storage/local-storage-provider.js +230 -0
  214. package/dist/shim/storage/make-namespace-store.js +132 -0
  215. package/dist/shim/storage/modules.js +249 -0
  216. package/dist/shim/storage/projects.js +150 -0
  217. package/llms.txt +12 -0
  218. package/package.json +63 -4
package/README.md CHANGED
@@ -1,3 +1,85 @@
1
- # Temporary Holding Version
1
+ # @descix/frqtl-node
2
+
3
+ FRQTL for node: a discrete cellular-automata physics engine (compiled Rust → WASM). Physics comes out of
4
+ local per-pixel rules — a frame moves one pixel per tick, single occupancy, momentum — rather than force
5
+ equations. Interference, blackbody spectra and atom-like binding emerge from the automaton.
6
+
7
+ Pre-release `0.6.0-p0.2` (npm dist-tag `next`). Node ≥ 22.12.
8
+
9
+ ## Install
10
+
11
+ npm install @descix/frqtl-node@next
12
+
13
+ ## Rung 0 — the seven primitives
14
+
15
+ ```js
16
+ import { bootNode } from '@descix/frqtl-node';
17
+
18
+ const { EGPTUniverse } = await bootNode(); // the WASM engine, once per process
19
+ const u = EGPTUniverse.create({ rect: { left: 0, top: 0, w: 200, h: 200 }, seed: 42 });
20
+ u.init(0, { wavelengthScale: 1 }); // ALWAYS first
21
+ u.experimentTickFunctions.push((uni) => uni.injectFrame(uni.makeLeafFrame(20, 100, 0, null, 1, 0)));
22
+ const tick = u.doTick(); // TickData: frameData + objects
23
+ ```
24
+
25
+ `require('@descix/frqtl-node')` works from CommonJS too (nothing in the graph awaits at top level).
26
+
27
+ ## Exports
28
+
29
+ | subpath | what |
30
+ |---|---|
31
+ | `.` | the parts (`Wall`, `SphereEmitter`, `Tunnel`, `FrqtlVision`, …), `bootNode`, the engine accessors (`engine`, `engineState`), the capture contracts (`FrqtlCapture`, `RenderStages`, `FieldBuilder`, `CaptureEnvelope`) and `validateRendererProvider` |
32
+ | `./eyes` | `openHostedEyes` — a `composite` still through the REAL renderer, in a managed headless browser (pulls the pinned `playwright`) |
33
+ | `./parts`, `./parts/*` | the parts barrel; one part = one file |
34
+ | `./project` | `FRQTL_WEB_SPECIFIERS`, `libPathOf`, `importMapFor`, `linkProject`, `projectIdentity` |
35
+ | `./registry` | the walk-through rungs, the showcase roster, the experiment registry, `loadSceneSource` |
36
+ | `./kinds` | `registerKind`, `kindNamed`, `kindOf`, `registeredKinds` |
37
+ | `./register` | installs the resolve hook for a sketch's `@descix/frqtl-web/...` imports (`node --import @descix/frqtl-node/register`) |
38
+ | `./shim/controls/registry.js`, `./shim/render/sun-look.js`, `./compat/renderer/display-slot.js`, `./compat/renderer/orbit-bag.js`, `./objects/setup/_collisionMatrixLanes.js`, `./compat/engine.js` | the six non-part modules a scene may import (the rows of `FRQTL_WEB_SPECIFIERS`) |
39
+ | `./dist-manifest.json` | sha256 of every dist file |
40
+
41
+ These modules are the same files `@descix/frqtl-web` ships (one source, built twice).
42
+
43
+ ## A scene file in node
44
+
45
+ A scene is an ES module whose default export is `buildExperiment(exp)`, and it imports its parts as
46
+ `@descix/frqtl-web/parts`. In this package a project is linked by `linkProject` (`./project`), which
47
+ resolves those specifiers to this package's own copy:
48
+
49
+ ```js
50
+ import { linkProject } from '@descix/frqtl-node/project';
51
+ const dataMint = (text) => ({ url: 'data:text/javascript,' + encodeURIComponent(text) });
52
+ const { buildExperiment } = await linkProject({ files: { 'sketch.js': text }, entry: 'sketch.js', mint: dataMint });
53
+ ```
54
+
55
+ A scene file on disk imports `@descix/frqtl-web/...`; this package resolves those specifiers to its own files
56
+ through one resolve hook:
57
+
58
+ ```sh
59
+ node --import @descix/frqtl-node/register my-scene-runner.mjs
60
+ ```
61
+
62
+ (or `import '@descix/frqtl-node/register'` before the first import of a scene). Without it, node does not
63
+ know the `@descix/frqtl-web` name in a node-only install.
64
+
65
+ ## Hosted eyes
66
+
67
+ ```js
68
+ import { openHostedEyes } from '@descix/frqtl-node/eyes';
69
+ const eyes = await openHostedEyes({
70
+ sceneRecord: { seed: 42, sourceRef: 'my-scene' },
71
+ sceneSource: { kind: 'project', files: { 'sketch.js': text }, entry: 'sketch.js' },
72
+ pageUrl: '<origin>/experiments/empty/index.html' // the empty page of a served @descix/frqtl-web dist
73
+ });
74
+ await eyes.driveToTick(300);
75
+ const still = await eyes.vision.getStill('composite');
76
+ await eyes.dispose();
77
+ ```
78
+
79
+ The still's SceneRecord carries the project's identity (`projectIdentity`) as `sourceSha256`.
80
+
81
+ ## Acceptance is visual
82
+
83
+ There is no CLI. FRQTL scenes are fractal and non-linear: run a scene and look at it. A numeric score
84
+ is a design aid in your own harness, never the acceptance criterion.
2
85
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
@@ -0,0 +1,218 @@
1
+ {
2
+ "name": "@descix/frqtl-node",
3
+ "version": "0.6.0-p0.2",
4
+ "files": {
5
+ "eyes/index.js": "c74d5595ea2f778f2f63ef3ce2b6568433cef80ec21b6d66901c1d1a942dbe9a",
6
+ "fat/pkg-node/egpt_wasm.js": "5e6af1f6725c93c0e9ad7386f1785cbe639ce596a4caa19ca85729c1f2bea04d",
7
+ "fat/pkg-node/egpt_wasm_bg.wasm": "e204498ac7439c294653476c0d214345713e6170819281b27bbbcba217a5a5e9",
8
+ "fat/pkg-node/package.json": "a0c04cd40b60be10e9ddd6e1d4763fd578808321d663c6d4201530e2a4ebdba4",
9
+ "frqtl/assets/vendor/chroma.mjs": "f25f4a17d8ceedf58e278df8df83c2804b4f0cf3ff659d963da144e368f8e525",
10
+ "frqtl/compat/boot-node.js": "7cfd4645f965fa3e3d3072688b268a8aa5b8b4d727c7d842d3bad841dacd1194",
11
+ "frqtl/compat/engine.js": "a849144e80f93694290f4567fa78d09c88b277162be9f1c15ab820328690c3a4",
12
+ "frqtl/compat/package-root.js": "9ff4b6bc958c524b5084f849c811f1491a788afc99cab81cd281add02316ff83",
13
+ "frqtl/compat/providers/wasm-engine.js": "020b36623a66a6298fd1b7b7a3db549f6ab957c91526dbe99f4069e4583dd757",
14
+ "frqtl/compat/providers/wasm-load-browser.js": "990a8e22f365f3d32ee8d448965a23cc85ebf62b321ee55417e500bfd5ad7f2d",
15
+ "frqtl/compat/providers/wasm-load-node.js": "0ec1d50e204bf073caac5218b3007eff65c480a94c8d87ad567a6d80b6b6c435",
16
+ "frqtl/compat/renderer/FieldBuilder.js": "af30df8b04ee05a006882eb8cb56ff84e76142348339d039296304877770c519",
17
+ "frqtl/compat/renderer/Filters.js": "5201a33473dcfd96c8694b5ff1e297bea27195f6c7940a8e51669d07856026db",
18
+ "frqtl/compat/renderer/RenderFamily.js": "d2ab960d696efcfe5594292e0bb54a9c1fe2dd56a1b86c408ac270dcb03cf2be",
19
+ "frqtl/compat/renderer/RenderMesh.js": "3312f587f437ea03466211a669e9a8ed2276e78645ed63397f733e6827c146c6",
20
+ "frqtl/compat/renderer/RenderShape.js": "509bcad3b106b5440a918c4243dd39539f55a406ca0650e7699bbf843a3a466e",
21
+ "frqtl/compat/renderer/camera2d-geometry.js": "d34aa7737962fcbab774bff18da724aa351a47971632ad7fe052e3db0b8cdd69",
22
+ "frqtl/compat/renderer/captureStill-common.js": "42e7d59a6142f02f15485f099b296aa047980019105043c45c4b82fdbe982094",
23
+ "frqtl/compat/renderer/display-slot.js": "8a2e99836dcc2f95155f2cd8ffeb9267054e3848c2e8f2ce320ebaca22f80a9e",
24
+ "frqtl/compat/renderer/lo-drawn-center.js": "4cb2e1f32dc03b188701163a9e3f711c344f269c7886bceb27d49fe5a4194b81",
25
+ "frqtl/compat/renderer/orbit-bag.js": "b6671d3b35fcf5f79e228934a8032e729309e62b66920602f34c834f3f911681",
26
+ "frqtl/compat/renderer/providers/godrays-layer.js": "be76fb8e69c74dd9bd0fb9aa6189a816d0ed29b9f4e04b60277be375b93d606c",
27
+ "frqtl/compat/renderer/providers/index.js": "fa669158a082a0081125c81694ca79962639caf86a575ee198a815f3e13a19e7",
28
+ "frqtl/compat/renderer/providers/p5-provider.js": "16d93e087643547f778b5455c2be71f48324d9d281a2a162a201a1a71d2bb703",
29
+ "frqtl/compat/renderer/providers/three-camera-contract.js": "644c1cc5e381cd2af897e69762216f84716808eeb5948efb989f48c47696bc60",
30
+ "frqtl/compat/renderer/providers/three-camera-geometry.js": "a741f72c34005fc47fb4d53cc7ef2d2df4bfa7e8eecc9a0252b1083b3d5e301a",
31
+ "frqtl/compat/renderer/providers/three-provider.js": "08410c488dcf3290d0a950331f33d8ba6882a391308d4d4598d9cb9aa96a4c9a",
32
+ "frqtl/compat/renderer/renderCapabilities-common.js": "4e4bf31a8ab5b4b938fdbd517e30d28e9c8e90251b6fe1dbaafd575bf2d4ccf3",
33
+ "frqtl/compat/renderer/renderer-provider-contract.js": "295574c6b10ce4c335b7c9a83941f3c1723b412c21f0004501add45e533bdb5a",
34
+ "frqtl/compat/renderer/unprojectStill.js": "43c4286c124eaa238d963fe3ae5551a1c87727809d5245a129f368a117863c45",
35
+ "frqtl/compat/vendor.js": "2393ada71cdbe750d409174e1ba9b098148796efdff746b315d706a0b32e58e8",
36
+ "frqtl/node-entry.js": "a401039b4fcf53ac620edbd80985aa4448122f2e3caaeaf4d5595f5e9d512b60",
37
+ "frqtl/objects/FrqtlApp.js": "ad14659c8dd980203576f9b00e5f867ee371ef31dcacf400de5f796d11b6c700",
38
+ "frqtl/objects/ObjectFactory.js": "7ee0e0f996cce456e320b71b6b6bf07b5f8655223486ad9df3a466402f6f04f8",
39
+ "frqtl/objects/RecipeContext.js": "e1f77a2a77bcb05859ab206bfea98746ef98cdd6e1a9a74979aa39348d058f42",
40
+ "frqtl/objects/collectors/DataCollector.js": "8736d6cb77eec36ce2adcf2bc3b0d2436eeb70a73b77182ff053efdc6ca071df",
41
+ "frqtl/objects/constants/WallBehaviors.js": "8a9cbdb96eadf84f1d61d215f6921124ec5dbf9e2938c09894a0aa083ddcaea0",
42
+ "frqtl/objects/geometry/SlabFace.js": "847921b124d3bc1692e88c363c087d392a1baa7c652a3a61e381d0f8a8342e57",
43
+ "frqtl/objects/instruments/capture-host.js": "ba5001afa2d8f4e438c5eacb2a5456d903401de8584d170c0b02ff3014794edd",
44
+ "frqtl/objects/instruments/capture.js": "53a746cb51e1c83326eebaa98083861c7ee593f2bcb2317473446a1a02b59b5c",
45
+ "frqtl/objects/instruments/hosted-eyes.js": "06f19c22291e7b2e5ca48e5037a6dd551691c49b262884507bb2fba10e8fcaab",
46
+ "frqtl/objects/kinds-entry.js": "a7818357864dc900bd93350635016f938c3dca8dcb665a62df802ba5cd0b3c93",
47
+ "frqtl/objects/kinds.js": "107b166c96c93fd517f173fdbe7006d6f0b2694d5f799f7ec9d4f695313f1832",
48
+ "frqtl/objects/objects/Box.js": "0c08fa4753b78ef56d07aae3393a6268647b550ead58e409cff13eabc8b34b5d",
49
+ "frqtl/objects/objects/Bullet.js": "9192dcdf80fc0e0bd2287b75aef5375cc81c7ef4c8411d30cab54b9e88619516",
50
+ "frqtl/objects/objects/CircuitGate.js": "15a5e6d6a5d5354513c431fd0e567e30aac32ff42f2ab993010f30388a230be3",
51
+ "frqtl/objects/objects/CircuitProbe.js": "f13408324f710f55416e074d914bbd44960268dd631fa6617648d92991812b38",
52
+ "frqtl/objects/objects/DirectedTunnel.js": "0b5f7a15c67a837d4dfae30f08cac703cde077ce0b8990adc68e29be1d58a494",
53
+ "frqtl/objects/objects/EgptFractal.js": "3ae5ecbdcc08ba60ab5fe06d8f5567cb16b375b1472fdad704b6ea17c5509f1e",
54
+ "frqtl/objects/objects/LightSource.js": "4c3405b0cdba56650dbc159711e2315d2c8812f553361a6d74fb3a8b9adcbc76",
55
+ "frqtl/objects/objects/QuantumEmitter.js": "2bc4e9bed97fff109153d0c4faa08b142f04b15882ddedf0e4c2080bab43e677",
56
+ "frqtl/objects/objects/Tube.js": "570be68d1c4c93eb43373061acb7e2ca4af64766dc818d80fdfef1b835b386da",
57
+ "frqtl/objects/objects/absorbRadiation.js": "5ac21c0e0f21001a31bc55280dbae52d741af3fa40df094fe5ad45cb716767d3",
58
+ "frqtl/objects/objects/actionCompiler.js": "c6118e2ab7f8376bb26aa72e0a074d1ca1ea7bae72526623d26e08fa92d918b3",
59
+ "frqtl/objects/objects/controlAction.js": "15f07f338568ebd56e9d8320aab1c29703e07cfd5625abb409708f60cf5f648d",
60
+ "frqtl/objects/objects/controlBind.js": "0b118420dcf5538cfbb88e033fedc3351322bd1aacf815d638b5788521a2cb07",
61
+ "frqtl/objects/objects/directedRedirectProgram.js": "d07479c20c9c55259e9cd6e63816135316f254ba2566b32143abe7e529787990",
62
+ "frqtl/objects/objects/emitterProgram.js": "23accb1fecec70cfa0e828ba78a58f47bcad5fc65ca93ba54e7fa57dbf5339ec",
63
+ "frqtl/objects/objects/frqtl-control-slider.js": "3941d0197b915aab745635fd3feacd35648c2ad8ed09fb123bc0f9e27a9914fe",
64
+ "frqtl/objects/objects/frqtl-control-sync.js": "88de12d2ec1643b4afc2ef56ea8cc44e1213e4a73a0ad6876d59e988125c3789",
65
+ "frqtl/objects/objects/frqtl-control-widgets.js": "73dd1e4481af66430601a105d375749c6db0bc9d736e47bd0edea9a4f9e6871c",
66
+ "frqtl/objects/objects/frqtl-control-write-queue.js": "994d0e736f240c453fd8ab52ea6d1eed05ac27a160806037d751f4a6a6ce6295",
67
+ "frqtl/objects/objects/makeControlsForObject.js": "f565f16e6c29b931e2a4625a68fec3f49bbceee73ea0d76573dd3e33fdffe066",
68
+ "frqtl/objects/objects/makeControlsForRenderSurface.js": "0ba99a4106ad92c0fe9366d6610c31d60ebfa232b3552c05f68f9c5aa56c03a0",
69
+ "frqtl/objects/objects/slitLinerScatter.js": "9413cc7efa2132c68d7b4d5030af28d92e8d085e127d5c8e1568d0028da2fc13",
70
+ "frqtl/objects/objects/sustainedSource.js": "0c324cef1583226d090b4d1014c2576ef8237f1bad47c1511bed3c3f81e04206",
71
+ "frqtl/objects/objects/tagger.js": "e2a5ef9ae68466afb6b157ca6d7ce03a6f126d8c91c9f9d4be6dba8e928535eb",
72
+ "frqtl/objects/schema/engine-scopes.js": "1777dd3d2443df7c7d7fbcd25974bcb758606bdf3efa5c21408009167d00e3e6",
73
+ "frqtl/objects/schema/index.js": "0a128e3f64519dad2ff00b74f2d3c26e5c9758439429d3c7ac4b66fb08796740",
74
+ "frqtl/objects/schema/scopes.js": "3b9c2d4f20604d6384ec625ab5e4a38085fa9696c5e443ff66b45a8f2330c5f6",
75
+ "frqtl/objects/schema/validate-descriptor.js": "32572a7c7f5262a46d13bcd05424555151287c4438e3e081ab2f3884fd5a2f10",
76
+ "frqtl/objects/schema/valueNormalizer.js": "00dc4eb188f23964336d45de021846b63a3603c423b5444f132bf470c73c4354",
77
+ "frqtl/objects/setup/_collisionMatrixLanes.js": "e5184a9e690e677bc941cce113f2d3d5c51de41d8322515fc707f5414c7b81be",
78
+ "frqtl/objects/setup/_setupOptions.js": "bc9bff3c647418db452976b54e9f91474c59abf5acbde1d62747a11a9501cca0",
79
+ "frqtl/objects/setup/_worldInit.js": "fb9b3716f93415100581e1bd12c8170d28c1d1cbda2e5236530598b197d7fdb3",
80
+ "frqtl/objects/setup/setupBlackbodySubstrate.js": "eb69b5bd1e19a970b433beed3e68ce47fffe63c17bf6045b49ce776045e20fe3",
81
+ "frqtl/objects/setup/setupCircuitBasic.js": "8204f7d42f8dd888e6a4e1175b16a6e67b69fb2d943af6c2b40c900b905dd453",
82
+ "frqtl/objects/setup/setupCollisionMatrix.js": "5df3b6c93a5b1fc5f8c0a443c1d3e0003ef170bb39b6101e60b4f3017ec26f60",
83
+ "frqtl/objects/setup/setupConeEmitter3D.js": "284d5353857817e5821d6c3897ba15b22f32388971ae149094e1353f15f0a4d6",
84
+ "frqtl/objects/setup/setupDoubleSlit.js": "c802de116d1f0a603bbb4a7bbfbbe11aaefbeb036e1df513320bf4a9adb3519f",
85
+ "frqtl/objects/setup/setupDoubleSlit_Laser.js": "373f0b8a5087072063457b5cf9f67f43afc26a71a89d667520fde5a81cc075d7",
86
+ "frqtl/objects/setup/setupEmpty.js": "d0fc6e8661514965fa68720a714a2fe44bfbf414f92549e4c86c8bf60a4cc1d1",
87
+ "frqtl/objects/setup/setupFxSmoke.js": "52bcaea78c85349f92a8a6664c11e3d7215e2a47772f2fbd39ee2212e88b1cab",
88
+ "frqtl/objects/setup/setupG1Race.js": "431df40700a8633fae54eea98f160e7852deb3765c3b374c35c0e1af24611d31",
89
+ "frqtl/objects/setup/setupG2Sweep.js": "2d44e194a6def2f5cb3eb32db4d69b7f709894f345b77d2305047f37a5d14773",
90
+ "frqtl/objects/setup/setupG3Collide.js": "f3e9c5f0a9efc2c50d92d48b975544d40a48d03b189969217fe994df7385ae48",
91
+ "frqtl/objects/setup/setupLightSourceLab.js": "4b31ecf0d97244058883876f2577e601846d72ee244fdb210fdfcb660b0d0b53",
92
+ "frqtl/objects/setup/setupOscillator.js": "0b706b20d98088f47c351b0b84280cf5e4468504bb07517360f3999a0cf0fbfb",
93
+ "frqtl/objects/setup/setupParticleWalk.js": "38e1a939c180d1921c9b338083017505a3326936531cfae62c603b3b86c3b033",
94
+ "frqtl/objects/setup/setupParticleWalk3D.js": "df0a24aaf3d9acb474faa9f7b7a4c83446e63935d2e7e0f28185fd197097a15e",
95
+ "frqtl/objects/setup/setupSphereEmitter3D.js": "aba08f21ec1fb402a450b3e9ae8d33b91501d8556707e9b8b43e636397cf8cda",
96
+ "frqtl/objects/setup/setupTraceCircuit.js": "cc551cdfa1879289574dd93b97669387371c488b27ec6b53df2ff75ba83525f0",
97
+ "frqtl/objects/setup/setupTunnelLab.js": "6125711bde04577372ac9dd95deb521fc58ad3d97a73699df2bed5636804d25b",
98
+ "frqtl/objects/setup/setupTunnelPointExit.js": "d68c25e14b3876a04f7aca8324b647cce2ac6f9265d38b88cabba99f2d02c25d",
99
+ "frqtl/objects/setup/setupWaveInterference.js": "b74e1406580a0bd2749686f87f9eec929e3e33c2fe6a7648cdaa2a26449e4fc1",
100
+ "frqtl/objects/v1-replacements.js": "7be6910430fcfbbe39db2a60b991b9c0b3ded9a8c05295060107042cee6bc201",
101
+ "frqtl/package-core.js": "4e645a91edf27f9631dd97aeafc72b11c06a7fbfc0f435d194f4635da872f6d7",
102
+ "frqtl/parts/CameraControls.js": "22438f83b02004772586dc99009fb025cdf2680b7c23e9023207f58e4fafca13",
103
+ "frqtl/parts/CameraPath.js": "bf5d620b2789c76b5a79c092ae0a3dc802fa6ef28a05df2ed1935481d4bba636",
104
+ "frqtl/parts/CollisionActions.js": "c14c7257fa8bf2add3784dfff0e78a4098640a5a8cec4b40c7cb60ba3197f3a2",
105
+ "frqtl/parts/CollisionTypes.js": "3290b8caf557c2801d3e0a8400d7cfd0cc9cbd14ae4247707747dc109a658789",
106
+ "frqtl/parts/DetectorWall.js": "bc3abc2d1e9444e38b3ed9b6cca289ff6a906d8eecf915bb82d149943a44b009",
107
+ "frqtl/parts/FrqtlControlOverlay.js": "f862b1529265224aa96878b56b0c1c6e65683ba3fd6b517df86e17e92147f9c4",
108
+ "frqtl/parts/FrqtlControlsPanel.js": "88f512ca6436f0c9ce4bc2b6848b2c4fc7ffb5ef9ff00138e2f072385f03213d",
109
+ "frqtl/parts/FrqtlVision.js": "d4f913f92810bf33a989858616b7dee776e01edd48fbaf4b31f0606fb85ec0fd",
110
+ "frqtl/parts/GraphingDetectorWall.js": "6bff06f951459a3cd327c2eb235d159520933762be0343e1925d153fc2fe6423",
111
+ "frqtl/parts/LargeObject.js": "637ea4c4b5052b916dace520cbb6772f1f8f2e367764ea399dab2a74fff4ed65",
112
+ "frqtl/parts/LightColor.js": "8637e5a09bbad3a4fdd2034ccb44dfc1fda743e29b12b4c685a64b9e1df28daa",
113
+ "frqtl/parts/LiveChart.js": "16fc591c02064dc2a9ea99737acbacac1e3b6c8d90079bf260d58af3016ded02",
114
+ "frqtl/parts/LogicGate.js": "e21a6f030908bbcfacc9bb27e4d20cdbbb54c712034121981bdc97c6266c1d0e",
115
+ "frqtl/parts/OvenBox.js": "c72f4dad019e60a300c9c96f64caf88b89a0f6dda07b06ad4189edfd3779ca54",
116
+ "frqtl/parts/PointSource.js": "a43a6c13ea8ecadc09410ca19067a41de7164aa8a2f58547dc227a1efd4bf0b5",
117
+ "frqtl/parts/Rectangle.js": "8be4cae13135c3cb185d025dfd10d3a03b21d5627bfa92363c2faa021f751571",
118
+ "frqtl/parts/SlitLightSource.js": "86472f096a1f1aa19c6e5d39657eed0f99df117f86152c51cdf84a56342903f7",
119
+ "frqtl/parts/SlitScreen.js": "147b86b39128b245c51649f3ac66f31afae128a01e1ac30083ef252b569db75d",
120
+ "frqtl/parts/SphereEmitter.js": "4163751c331aca9b45643ce67eb7e8912ffdbdb3cbd6944e9ae38f707eb0b5ca",
121
+ "frqtl/parts/Trace.js": "63944f420b6538a88609a1f251b5f5d909ac9835f556d82f73525077ba6a6df6",
122
+ "frqtl/parts/Tunnel.js": "4f44e901bc1171bf7c2933c794a8be63702594d7a2babc05382e91c22315b363",
123
+ "frqtl/parts/Wall.js": "0a643bdaaa6b799a10ed92dda831074c2081e45742bac0f1e15ad9f9901ad22e",
124
+ "frqtl/parts/index.js": "70b8e227e09663889f4c7942d385f843d977579765723f829880fd6e9868ac53",
125
+ "frqtl/scenes/absorbing-wall-3d.js": "7e0e1e3ab1df56558c2a818fc501e54f90806fc029d8c58ed84fa0bf293717e7",
126
+ "frqtl/scenes/absorbing-wall.js": "6d5b5eae8f26af998bd41f5b8e304562dd96188f1efdc1900afecd556e92f9c0",
127
+ "frqtl/scenes/atomic-model.js": "fdbf7c96f1482ea79a3257d75ae28a9e379cbc34414df120678521fac8720007",
128
+ "frqtl/scenes/big-bang.js": "b6324009a011c34b45e5d19fdf5fae57ca11749d585f8c773032a55d6a42b7d7",
129
+ "frqtl/scenes/blackbody.js": "b516832c84800aa4ac818a9f90f52e81c1611ca39f1258d49ff1835f057c29a6",
130
+ "frqtl/scenes/circuit-sat.js": "4d6669bf3191d24134a5340ec1a28871308d005a31e89844879e59e02bd215d7",
131
+ "frqtl/scenes/collision-matrix-3d.js": "bedd47b7da995e7100040c5598e42d604db46485b875954e0b47e756644b17dd",
132
+ "frqtl/scenes/counting-wall-3d.js": "ebd09c137b7c56e429da297681db00a4d3ee7e9e5f9fabe74ae9fc4908ce4919",
133
+ "frqtl/scenes/counting-wall.js": "0ba692fc87d34eee2d3ce258473f709960b24d047a4a9543904b70986214deb4",
134
+ "frqtl/scenes/double-slit.js": "543b2385c891d64b59486362d1191ba580fcd71934dd15bf90ef1be701d9cf03",
135
+ "frqtl/scenes/dse-one-emitter.js": "706e1ec29b71ce452241ebf08bbabfa8619076bb14877d5938e846303eac38f6",
136
+ "frqtl/scenes/dse-one-slit.js": "40a0e2f72efd6b91d53ff5208d183efdc8dba0d6318ca7e327d4d231821ef7dc",
137
+ "frqtl/scenes/dse-photoelectric.js": "5e2dcc7800c8a825fd98115dd9dcfe1408d8433e94af5148b74ed576ae1633d5",
138
+ "frqtl/scenes/dse-tunnel-rebuild.js": "0a201802e74dad97b88d7bc15fcba683f395b0e77b8f53e523deecb901e1da80",
139
+ "frqtl/scenes/dse-two-emitters.js": "fa8fdebcb9777fc59e376f5890c24a5253872b52884182a3e92a5bb5d1b2128f",
140
+ "frqtl/scenes/dse-two-slits.js": "7b9c432b4fc34511adaa7f9802331ca449f8d5157441d660c8806aa59015e1b0",
141
+ "frqtl/scenes/empty.js": "90ebe0cee9f0374f564ce49c4b2bba87336c2ab64011d993402d1ff5a22857f7",
142
+ "frqtl/scenes/laser-buildup.js": "bb10c7a20b44027ed9d7b51e0e570fdd1aa7210a4e36d7d8d0ba1943b8e2c684",
143
+ "frqtl/scenes/mirror-3d.js": "c1ad185083bea8a661d6605237b97f177604ca41698c18787fe7e93ab8dc0f87",
144
+ "frqtl/scenes/mirror-route.js": "625dbe9404d25858cb38d7cc41739d51d9b83abc2d9847dfca82018f0b08a1a1",
145
+ "frqtl/scenes/mirror.js": "bcd7fa5fd02bdc760ffc3ff530dd78715fcc506d54b57169bcf4e059b6452931",
146
+ "frqtl/scenes/omni-3d.js": "5ebcc692b73196d3dc57d5fbadc117a290d5e6c0022df755ed328c2613a47a62",
147
+ "frqtl/scenes/omni-source.js": "d872a14258ffe700442216c8932a62cc28cf25ab630a5c8122b42ea0040881cd",
148
+ "frqtl/scenes/self-interference.js": "f5928322ebb475d343ec2b2c0877a4532a0c6ad050b46e07a83ccf1a498ac110",
149
+ "frqtl/scenes/smoking-gun.js": "57641d90b308e258fa646a0f2151f7c4b7ff0dd6aca831548e7fbc0bbc1109c0",
150
+ "frqtl/scenes/straight-walk.js": "ef46ff908ab6b60086adee3fb575ed674f0e015e3729afd9d7aa843683a2ee9e",
151
+ "frqtl/scenes/sun.js": "87ef0b74b4f9bc960b5fbf73a96a7f71aa0eb60122546003ae35409d9283e25b",
152
+ "frqtl/scenes/two-source.js": "914f7ba4e0d2ca67f2da126b788196653d4e061734956e43898904e42bd5f428",
153
+ "frqtl/scenes/wave.js": "ca91454ac21f81e25d3c273bc9ac2ee3b3131b75de1ac38ecac8d89b4f61c344",
154
+ "shim/bundle/frqnb.js": "a237a81eb6074412d9a21f9dd7db96c80e1a4bc4c5f2a4b22f5ae556a37f6d5e",
155
+ "shim/bundle/index.js": "6f82d9636233a6008e6d72d75df83aaef881ea711625eb24bc8841c6a2597376",
156
+ "shim/bundle/indexHtml.js": "6d3ce242c4f139b542981164fe2b1d8b1c37d9423904bc1299531f594ce4ccc6",
157
+ "shim/bundle/manifest.js": "8a7a8099a01aa46b713f178dee29bfeb8d46f4020a2f59f6a564e33be35e6c2e",
158
+ "shim/bundle/zip.js": "00f7b5fb5f36ff40a59d86758c503d9d7fb43949c1b5a4f2e7367c43d92786f9",
159
+ "shim/bus.js": "dac2eeccd8774268c51014be4c46c00b9985fdf49ebb44355aa370e949c8c5bc",
160
+ "shim/controls/index.js": "2aaf1f14b104bba8b912d68fe99068a8c544770b9eac43cdf6d992c311ec8f69",
161
+ "shim/controls/registry.js": "3df843d774968d18e012624f2aba2fb09b08ede9e21b6c1f6687d4f3e9b46d3e",
162
+ "shim/engine/artifact-shell.js": "b4c1d8bf65403caea9357fecd91172a1689baed8aad89433160d595881f16010",
163
+ "shim/engine/boot-phases.js": "c6e12e12824bcf6f1a289f46e41c898a5416c80c131594525145aae9a3eefbfa",
164
+ "shim/engine/engine-stack-boot.js": "0abf57dcff2ca2bb025c787a17875d49d54d9218ac08c78cb9c678dbb6118d08",
165
+ "shim/engine/router.js": "9ac337a9a774e5abff431c53f37fdbb6a45c29329dfc4bfbefc44bc676e98e71",
166
+ "shim/experiment-frame/index.js": "5a0219aaa225d8f808c405b08623ce85ada37d83fb4f55f983db3303e431e47f",
167
+ "shim/expr/ast-schema.js": "4f1133b887639bbd86fab976292323bf4a955cdc873ff7ca8e8a8eb3b416923f",
168
+ "shim/field-descriptor/index.js": "6647d57d1523519114adc0a5cb66335ec5121c39ab294b9c97bdfb9e5d7f61e0",
169
+ "shim/frame-data/index.js": "df6957b0b4a8e0ee0035bc970647b90089b421ae7f05911cc047d48457164be6",
170
+ "shim/index.js": "d1f7d9a0a1fea320f641e2f9ec36174f243f03aca1a84804d74b33363703c8dc",
171
+ "shim/notebook/canvas-guard.js": "b19d3a86df3835bd617c7130cde997b6f8a8a0c140f95338b733115d5947ed7b",
172
+ "shim/notebook/catalog.js": "68243a154e12bf36a76598aa554119f6e3b8b5363c8452d157c8a562b9c38dc1",
173
+ "shim/notebook/format.js": "a552b161792873252a2163cd382bec2eb86651bcbdf96bd449d1b0007a0f2560",
174
+ "shim/notebook/frqtl-setups-importmap.js": "df86defa90cb85675564e7bb269451684b5cc7679f2c6b1884c07c8272e8ff1c",
175
+ "shim/notebook/kernel.js": "65cf7e4ba12b24521143997a38cb0e7d0a8aa63f9f46868494eff7a41a887c7b",
176
+ "shim/notebook/knob.js": "f07e9ac9697c7178aa68e4b2f4300145f8e2d2dc41b64aa0afede7e2d68705b1",
177
+ "shim/notebook/module-resolver.js": "0bcf6ca4954e198dd77ce61b502cebed6d2c118926fd0d2dd0816991b8334b7a",
178
+ "shim/notebook/notebook-knobs.js": "891cd6a24ed70256ed723844918866ba162dd71f839cd06ff4d8fc92a0a17452",
179
+ "shim/notebook/produced-bindings.js": "3d46038ec541a9ff896abae4f62d25780633cdc952e4c9d0d90d917298471090",
180
+ "shim/notebook/realm-registry.js": "ffee52e7c93447c8b82bfc0784b51346686b4373766da298f50a759d3443ab6a",
181
+ "shim/notebook/realm-transport.js": "5173676a94211f85122e0581a16abba925e9c4b5900b5891911bfaec5ea02daf",
182
+ "shim/notebook/setup-builder.js": "abf8a7fed017776634d5ae3b595de7f00b32779590319cd48d95a6d9d0523a96",
183
+ "shim/notebook/store.js": "ff73cd6f2d9ffa4dc434f15edbf69c5c62360b0ced6a023fd6279f6d95ae895e",
184
+ "shim/notebook/vendor-importmap.js": "0c6578567980225593690e06fb4d32f0b50c47fe87a7467741a03846f6da68ed",
185
+ "shim/notebook/view-builder.js": "1961962be16ef526934c43193828473447f2ec9ac0144f39bc5108c327d9069a",
186
+ "shim/notebook/view-ctx.js": "6287aee366104bece827eecccf675540571d6db2b6833bff837be49eb60ce111",
187
+ "shim/notebook/view-handle.js": "fe0d1530e3311cb96bb22f5cded35b9f25a0a4ef002588f3e47d9eef8089664d",
188
+ "shim/notebook/warmup.js": "453b9e8b4969bcc704e1fbc636c3ada869ebf692651cfbf950107fd1cb662e25",
189
+ "shim/package.json": "609158e6c5fbc237939fa3ddf7faab80ab690bdc0c8d584414a885130103c4e8",
190
+ "shim/page-params/index.js": "50d410854d91e85945840ee4459045f3ca816b5f6dda4d5fb5bcac65fea5275f",
191
+ "shim/project/identity.js": "5a0dbd07bfad5c5aa6a529994a604546dbf3e6978b9529ca97ce2c57aa8e563f",
192
+ "shim/project/index.js": "316b76daf970f3dc245fdb868095fd556ebee98f113de83029cbd76dfacda7ac",
193
+ "shim/project/link.js": "f1b064052a87a4f8c46fb5fd86402971c436a24adb3c069318b68b5dc694ca5c",
194
+ "shim/project/node-specifier-hook.mjs": "8601edf762bd9cd011632bc681d0589dfc77368cda0e994125d0eb123fea89d0",
195
+ "shim/project/register-node.mjs": "9b408da7dc1b11d16237cd62caca281c823ea80173d386ad35e41ea17c34857f",
196
+ "shim/project/specifiers.js": "a7e7f3dd193783faac00d63360acff525db3af6d0abae012e90bd31c3d29b8ae",
197
+ "shim/registry/copy-gate.js": "cfbf52669c849b8837b326f2743458f1ead0720cad51a6c6d409c9bd6c7f9495",
198
+ "shim/registry/exhibits.js": "98736b6b0dd82b5c1436da28fe3bf8d2d3ee840af8f5256d00c23e296c3bca9a",
199
+ "shim/registry/experiments.js": "1d1484f144ade35ddcb94b23712df539b3b432a45130e159a6f47146de188165",
200
+ "shim/registry/index.js": "2a8e27dc83b5f7eb74b747b511ebc413a0de0dd43e27535296f504535353e2cd",
201
+ "shim/registry/scene-source.js": "1e02af7af7ee0d879554f9dc12b9aba446d7966a3ea6aa6b4b2e8b460041ab01",
202
+ "shim/registry/walkthrough.js": "de183ca9c6293fddb5b13f1f026dd18cd3dd9d66df10dc3dc323f62d7a85e6ce",
203
+ "shim/render-state/apply.js": "6b4c830c39b5f669fc1b56b90582fcea00441fd871d7a4edc8ffc37afaebf793",
204
+ "shim/render-state/index.js": "9015405ef2ea3d88bf004a0aa3bea04eb6bdb86270d68ef5622538a9bae5fa6d",
205
+ "shim/render/capture-envelope.js": "2667a355169bb124fd8117e9cbf1d630085257b9f6fa537362f12d0aa649da2d",
206
+ "shim/render/heat-colormap.js": "0eadc758179024734c45eaeffd8f5b44e7c4102b7042767a4a5b66541b3bbd7c",
207
+ "shim/render/render-stages.js": "baf674c205df7638af53e51ac77152a448fe6bf6d4ea51d58ac565556cd38da7",
208
+ "shim/render/sun-look.js": "f8f23f0853a9c22459fff866ccf59ab00332697d48fd529fca5c2e8554a2d83d",
209
+ "shim/rpc/index.js": "56af3afeed22e8d718cd2f7a8ad70db8745f54dbc139af9d71f1d73e2ca37698",
210
+ "shim/runtime/index.js": "cd728294c4693de3059f30f272f267b88b39c19a451edd30c75012e1bab755f5",
211
+ "shim/storage/boot.js": "689504e15dc075e32d08abf61c75a45b1d565c09f086b42400dae40d8186c411",
212
+ "shim/storage/index.js": "9f10a2ac220e7066493c3da0cea125ab5afb1e3d27d71fbef349f99caaeaa8b9",
213
+ "shim/storage/local-storage-provider.js": "e14894e5d33bce961e66a2816e4b5c23b8e00534398ca9635d19de117f0f150e",
214
+ "shim/storage/make-namespace-store.js": "da15fe99b19e25bd6e7f1c9e8a8852b15c43627fc0f9e2eb909503736f850a4a",
215
+ "shim/storage/modules.js": "ceee32e0ea101ae49e5b0ab63007972a3f4127e9d81bbd2cf24cdb47d491623b",
216
+ "shim/storage/projects.js": "1c7398dedbb7a67c80acbfe0dfb08ba4f069db9a7d946266c4636212834bd671"
217
+ }
218
+ }
@@ -0,0 +1,109 @@
1
+ /* Copyright 2023-2026 by Essam Abadir */
2
+
3
+ /**
4
+ * eyes.js — the HOSTED EYES entry of `@descix/frqtl-node` (`exports["./eyes"]`), node-only.
5
+ *
6
+ * Ships at `dist/eyes/index.js`. It is a SEPARATE entry from `.` for exactly one reason: it is the
7
+ * only surface in this package with a heavyweight runtime dependency.
8
+ *
9
+ * ── Why the dependency is REAL, pinned, and lives HERE ───────────────────────
10
+ *
11
+ * `composite` is the render stack's own output. A node raster backend that RE-DREW the
12
+ * scene would show an agent a different picture than the end user sees — which is the whole
13
+ * failure the hosted design exists to avoid (a god-rays shader turns a bunch of particles
14
+ * into A SUN; the renderer and its filters are part of the experiment, not decoration). So
15
+ * the eyes look through the SAME stack, in a real browser, and the browser is therefore not
16
+ * an optional extra — it is THE default stack this package ships for anyone who does not
17
+ * BYO one.
18
+ *
19
+ * That is why `playwright` is a real `dependencies` entry, PINNED to an exact version (a
20
+ * range would let a browser build drift under a published corpus, and the raster path is
21
+ * provenance — see `build.gl`), and NOT `optionalDependencies`: an optional dependency is a
22
+ * surface that sometimes exists, which is a compat fence wearing a package-manager hat.
23
+ * Keeping it off the `.` entry keeps the core install exactly as light as it
24
+ * was: a consumer who never imports `./eyes` never loads it.
25
+ *
26
+ * The BYO seam is `browserType`: pass your own Playwright browser type (or a compatible
27
+ * driver) and this entry gets out of the way. The library layer
28
+ * (`lib/frqtl/objects/instruments/hosted-eyes.js`) REQUIRES it and declares no dependency of
29
+ * its own — the dependency is declared exactly once, by the entry that ships it.
30
+ *
31
+ * The picture is the scene SOURCE plus the `renderState` you hand it — nothing else. A
32
+ * walk-through rung's look (render rows, filters, camera) lives on its registry row, not in its
33
+ * sketch: pass `effectiveRenderState(rung, mode)` as `renderState` to record the rung as the GYM
34
+ * shows it; the sketch alone records its PLAIN render.
35
+ *
36
+ * @example
37
+ * import { openHostedEyes } from '@descix/frqtl-node/eyes'; // or require() from CommonJS
38
+ * const eyes = await openHostedEyes({
39
+ * sceneRecord: { seed: 42, sourceRef: 'my-scene' },
40
+ * sceneSource: { kind: 'project', files: { 'sketch.js': buildExperimentSource }, entry: 'sketch.js' },
41
+ * pageUrl: 'http://localhost:8080/experiments/empty/index.html'
42
+ * });
43
+ * try {
44
+ * await eyes.driveToTick(300);
45
+ * const still = await eyes.vision.getStill('composite'); // the SAME normalized bag
46
+ * eyes.saveStill(still, 'out.png'); // …and the picture, in one line
47
+ * } finally { await eyes.dispose(); }
48
+ *
49
+ * `FrqtlVision` is re-exported for the encoder itself (`FrqtlVision.toPNG(still)` → PNG bytes) — the
50
+ * node half of the one-encoder-per-host pair; it is the parts barrel's own instance.
51
+ */
52
+
53
+ import { createRequire } from 'node:module';
54
+ import { FrqtlHostedEyes as HostedEyes } from '../frqtl/objects/instruments/hosted-eyes.js';
55
+ import { FrqtlVision } from '../frqtl/parts/index.js';
56
+
57
+ // The WRONG-HOST DOOR: `./eyes` DRIVES a browser from node; loaded IN a page it can only fail, so the
58
+ // wrong host gets a thrown error naming the right door, BEFORE any dependency resolves.
59
+ if (typeof document !== 'undefined') {
60
+ throw new Error(
61
+ '[frqtl-node/eyes] `@descix/frqtl-node/eyes` is a NODE-HOST surface and this is a browser.\n' +
62
+ '\n' +
63
+ 'openHostedEyes LAUNCHES a real browser (playwright) and drives a page from outside it —\n' +
64
+ 'there is nothing for it to launch from inside one.\n' +
65
+ '\n' +
66
+ 'THE RIGHT DOOR IN A PAGE is @descix/frqtl-web: import { FrqtlCapture, FrqtlVision } from\n' +
67
+ "'@descix/frqtl-web' — the in-page capture tap, already looking through THIS page's own\n" +
68
+ 'render stack. To boot a scene into the page first, use @descix/frqtl-web/boot.\n' +
69
+ '\n' +
70
+ '(FAIL-LOUD.)'
71
+ );
72
+ }
73
+
74
+ const require = createRequire(import.meta.url);
75
+ let _memoBrowserType = null;
76
+
77
+ /** The pinned playwright's chromium (resolved on first use). */
78
+ function _defaultBrowserType() {
79
+ if (_memoBrowserType) { return _memoBrowserType; }
80
+ let pw;
81
+ try { pw = require('playwright'); }
82
+ catch (e) {
83
+ throw new Error('[frqtl-node/eyes] the pinned `playwright` dependency is not installed ' +
84
+ '(' + (e && e.message) + '). It is a REAL dependency of this package, not an ' +
85
+ 'optional one: the hosted eyes look through a real browser because that is the only ' +
86
+ 'way an agent sees the real render stack\'s picture. Reinstall the package, or pass your ' +
87
+ 'own `browserType` (the BYO seam). (FAIL-LOUD.)');
88
+ }
89
+ if (!pw || !pw.chromium) {
90
+ throw new Error('[frqtl-node/eyes] `playwright` resolved but exposes no `chromium` browser type. (FAIL-LOUD.)');
91
+ }
92
+ _memoBrowserType = pw.chromium;
93
+ return _memoBrowserType;
94
+ }
95
+
96
+ /**
97
+ * openHostedEyes(opts) — HostedEyes.open with the packaged browser as the default `browserType`.
98
+ * @param {object} opts — see lib/frqtl/objects/instruments/hosted-eyes.js open()
99
+ * @returns {Promise<object>} the handle
100
+ */
101
+ export function openHostedEyes(opts) {
102
+ const bag = Object.assign({}, opts || {});
103
+ if (!bag.browserType) {
104
+ Object.defineProperty(bag, 'browserType', { get: _defaultBrowserType, enumerable: true, configurable: true });
105
+ }
106
+ return HostedEyes.open(bag);
107
+ }
108
+
109
+ export { FrqtlVision };