@hraness/slopcamera 3.2.7 → 3.3.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 (188) hide show
  1. package/NOTICE.md +1 -7
  2. package/PRIVACY.md +16 -7
  3. package/README.md +65 -20
  4. package/apps/desktop/README.md +14 -130
  5. package/apps/desktop/application/context.ts +6 -9
  6. package/apps/desktop/application/default-registry.ts +26 -10
  7. package/apps/desktop/application/operation.ts +14 -5
  8. package/apps/desktop/application/operations/index.ts +4 -1
  9. package/apps/desktop/application/operations/spatial-behavior.ts +151 -0
  10. package/apps/desktop/application/operations/spatial-direction.ts +222 -0
  11. package/apps/desktop/application/operations/spatial-rendered-audit.ts +174 -0
  12. package/apps/desktop/application/operations/spatial-review.ts +194 -0
  13. package/apps/desktop/application/operations/spatial-scene.ts +25 -1
  14. package/apps/desktop/application/registry.ts +2 -2
  15. package/apps/desktop/application/spatial-asset-admission.ts +201 -0
  16. package/apps/desktop/application/spatial-assets.ts +160 -31
  17. package/apps/desktop/application/spatial-render.ts +217 -20
  18. package/apps/desktop/application/spatial-rendered-audit.ts +273 -0
  19. package/apps/desktop/application/spatial-review.ts +361 -0
  20. package/apps/desktop/application/spatial-spz.ts +48 -3
  21. package/apps/desktop/application/spatial-world-import.ts +26 -5
  22. package/apps/desktop/application/spatial-world-metadata.ts +105 -0
  23. package/apps/desktop/cli/args.ts +528 -97
  24. package/apps/desktop/cli/capability-manifest.ts +374 -0
  25. package/apps/desktop/cli/cinema-renderer.ts +608 -0
  26. package/apps/desktop/cli/command-host-resources.ts +31 -2
  27. package/apps/desktop/cli/commands.ts +1215 -70
  28. package/apps/desktop/cli/gateway-review-provider.ts +334 -0
  29. package/apps/desktop/cli/help.ts +183 -23
  30. package/apps/desktop/cli/html-scene.ts +139 -28
  31. package/apps/desktop/cli/io.ts +2 -1
  32. package/apps/desktop/cli/main.ts +26 -50
  33. package/apps/desktop/cli/menubar.ts +244 -0
  34. package/apps/desktop/cli/music-analysis-service.ts +61 -0
  35. package/apps/desktop/cli/portable-surface.ts +18 -5
  36. package/apps/desktop/cli/spatial-asset-service.ts +124 -0
  37. package/apps/desktop/cli/spatial-design-service.ts +237 -0
  38. package/apps/desktop/cli/spatial-generate-service.ts +370 -0
  39. package/apps/desktop/cli/spatial-scene-service.ts +268 -4
  40. package/apps/desktop/cli/workflow-code.ts +1 -1
  41. package/apps/desktop/code/application-node-planner.ts +0 -47
  42. package/apps/desktop/code/host-source-layout.ts +46 -0
  43. package/apps/desktop/code/public.ts +0 -1
  44. package/apps/desktop/code/runtime-identity.ts +50 -8
  45. package/apps/desktop/code/semantic-builder.ts +24 -43
  46. package/apps/desktop/code/source-bundle.ts +23 -6
  47. package/apps/desktop/code/source-typecheck.ts +131 -43
  48. package/apps/desktop/code/worker-client.ts +14 -2
  49. package/apps/desktop/contracts/cinema.ts +736 -0
  50. package/apps/desktop/contracts/index.ts +1 -0
  51. package/apps/desktop/contracts/spatial-asset.ts +16 -0
  52. package/apps/desktop/contracts/spatial-world.ts +26 -3
  53. package/apps/desktop/core/cinema-plan.ts +1320 -0
  54. package/apps/desktop/core/index.ts +1 -0
  55. package/apps/desktop/core/music-analysis.ts +124 -1
  56. package/apps/desktop/core/storage.ts +75 -0
  57. package/apps/desktop/dist/cli/main.js +737 -291
  58. package/apps/desktop/html-overlay/audio-reactivity.ts +127 -0
  59. package/apps/desktop/html-overlay/index.ts +9 -0
  60. package/apps/desktop/html-overlay/runtime.ts +2 -0
  61. package/apps/desktop/html-overlay/scene.ts +29 -0
  62. package/apps/desktop/html-overlay/spatial.ts +619 -57
  63. package/apps/desktop/workflows/cinematic-world.ts +127 -0
  64. package/apps/desktop/workflows/index.ts +6 -0
  65. package/dist/cli.js +32 -434
  66. package/dist/code/advanced.js +1 -269
  67. package/dist/code/index.js +16 -2239
  68. package/dist/generate.js +1 -23
  69. package/dist/host-resources.js +1 -25
  70. package/dist/index-0bbesn4m.js +35 -0
  71. package/dist/index-296qhpf2.js +3 -0
  72. package/dist/index-3cxf2c58.js +3 -0
  73. package/dist/index-77fjfg9f.js +3 -0
  74. package/dist/index-80a36bc0.js +3 -0
  75. package/dist/index-a3vvs3rf.js +3 -0
  76. package/dist/index-b3geqczn.js +5 -0
  77. package/dist/index-cgpkyjqa.js +3 -0
  78. package/dist/index-f0ptv8dm.js +7 -0
  79. package/dist/index-grk47tgs.js +3 -0
  80. package/dist/index-qry58nj2.js +10 -0
  81. package/dist/index.js +1 -240
  82. package/dist/operations.js +1 -28
  83. package/dist/skill-install-gx7afxsd.js +2 -0
  84. package/dist/vectorize/worker.js +1 -141
  85. package/dist/workflow.js +1 -15
  86. package/docs/README.md +5 -1
  87. package/docs/studio.md +1 -1
  88. package/package.json +11 -24
  89. package/skills/slopcamera/SKILL.md +14 -1
  90. package/skills/slopcamera/references/diagrams.md +5 -14
  91. package/skills/slopcamera/references/directed-scenes.md +22 -2
  92. package/skills/slopcamera/references/gateway-media.md +15 -1
  93. package/skills/slopcamera/references/image-galleries.md +166 -0
  94. package/skills/slopcamera/references/install.md +2 -2
  95. package/skills/slopcamera/references/music-video.md +23 -3
  96. package/skills/slopcamera/references/parametric-design.md +14 -0
  97. package/skills/slopcamera/references/reference-led-3d.md +1 -1
  98. package/skills/slopcamera/references/scene-building.md +32 -0
  99. package/skills/slopcamera/references/social-collage-banners.md +204 -0
  100. package/skills/slopcamera/references/support.md +25 -0
  101. package/skills/slopcamera/references/web-media-excerpts.md +120 -0
  102. package/skills/slopcamera/references/workflows-sdk.md +3 -3
  103. package/skills/slopcamera/scripts/compose-social-collage-banner.ts +728 -0
  104. package/src/capability-manifest.ts +361 -0
  105. package/src/cli.ts +250 -102
  106. package/src/code/canonical-json.ts +9 -0
  107. package/src/generate.ts +2 -2
  108. package/src/icon.ts +1111 -0
  109. package/src/image-gallery.ts +1049 -0
  110. package/src/index.ts +11 -23
  111. package/src/mcp/boundary.ts +11 -11
  112. package/src/mcp/index.ts +3 -0
  113. package/src/mcp/server.ts +2 -1
  114. package/src/mcp/tools.ts +1642 -130
  115. package/src/mcp/types.ts +19 -0
  116. package/src/operations.ts +412 -0
  117. package/src/portable-capability-manifest.ts +67 -0
  118. package/src/scene-gallery.ts +184 -0
  119. package/src/spatial-scene/asset-admission.ts +183 -0
  120. package/src/spatial-scene/audit-rendered.ts +692 -0
  121. package/src/spatial-scene/audit.ts +617 -0
  122. package/src/spatial-scene/behavior-audit.ts +252 -0
  123. package/src/spatial-scene/behavior-bake.ts +233 -0
  124. package/src/spatial-scene/behavior-fns.ts +585 -0
  125. package/src/spatial-scene/behavior-gallery.ts +109 -0
  126. package/src/spatial-scene/behavior-stdlib.ts +323 -0
  127. package/src/spatial-scene/behavior-trace.ts +325 -0
  128. package/src/spatial-scene/behavior.ts +618 -0
  129. package/src/spatial-scene/build.ts +632 -0
  130. package/src/spatial-scene/camera-rig.ts +125 -0
  131. package/src/spatial-scene/camera-track.ts +4 -2
  132. package/src/spatial-scene/character.ts +124 -0
  133. package/src/spatial-scene/contracts.ts +75 -7
  134. package/src/spatial-scene/design-templates.ts +351 -0
  135. package/src/spatial-scene/design.ts +327 -0
  136. package/src/spatial-scene/direction-compile.ts +584 -0
  137. package/src/spatial-scene/direction.ts +122 -0
  138. package/src/spatial-scene/effects.ts +149 -0
  139. package/src/spatial-scene/evaluate.ts +109 -29
  140. package/src/spatial-scene/gallery.ts +277 -0
  141. package/src/spatial-scene/generate.ts +239 -0
  142. package/src/spatial-scene/geometry-native.ts +165 -0
  143. package/src/spatial-scene/geometry.ts +1216 -0
  144. package/src/spatial-scene/gltf.ts +600 -77
  145. package/src/spatial-scene/identity.ts +55 -2
  146. package/src/spatial-scene/index.ts +36 -0
  147. package/src/spatial-scene/inspect.ts +35 -6
  148. package/src/spatial-scene/material-lighting.ts +609 -0
  149. package/src/spatial-scene/math.ts +21 -4
  150. package/src/spatial-scene/motion-evidence.ts +88 -0
  151. package/src/spatial-scene/parametric.ts +765 -0
  152. package/src/spatial-scene/particle-preparation.ts +183 -0
  153. package/src/spatial-scene/particle.ts +195 -0
  154. package/src/spatial-scene/patch.ts +109 -15
  155. package/src/spatial-scene/performance.ts +1613 -0
  156. package/src/spatial-scene/probe.ts +137 -0
  157. package/src/spatial-scene/recipe-pack.ts +86 -0
  158. package/src/spatial-scene/render-effects.ts +240 -0
  159. package/src/spatial-scene/review.ts +639 -0
  160. package/src/spatial-scene/simulation-bake.ts +206 -0
  161. package/src/spatial-scene/simulation.ts +187 -0
  162. package/src/spatial-scene/solve.ts +366 -0
  163. package/src/spatial-scene/temporal-audit.ts +354 -0
  164. package/src/support-completion.ts +16 -0
  165. package/src/support.ts +42 -0
  166. package/src/version.ts +1 -1
  167. package/apps/desktop/application/operations/recording/index.ts +0 -5
  168. package/apps/desktop/application/operations/recording/pause.ts +0 -34
  169. package/apps/desktop/application/operations/recording/resume.ts +0 -34
  170. package/apps/desktop/application/operations/recording/shared.ts +0 -199
  171. package/apps/desktop/application/operations/recording/start.ts +0 -169
  172. package/apps/desktop/application/operations/recording/stop.ts +0 -34
  173. package/apps/desktop/capture/protocol.ts +0 -689
  174. package/apps/desktop/cli/capture-bundle.ts +0 -1117
  175. package/apps/desktop/cli/recording-controller.ts +0 -1567
  176. package/apps/desktop/cli/recording-daemon.ts +0 -931
  177. package/dist/index-42zsesc1.js +0 -2257
  178. package/dist/index-7308egqr.js +0 -48
  179. package/dist/index-8txs6fkn.js +0 -712
  180. package/dist/index-mcy8z0br.js +0 -192
  181. package/dist/index-p63wavx0.js +0 -2029
  182. package/dist/index-r7gdhmsp.js +0 -424
  183. package/dist/index-rvghzt7b.js +0 -2013
  184. package/dist/index-sh6xbav6.js +0 -1219
  185. package/dist/index-z1w83f81.js +0 -4
  186. package/dist/index-z7239b4h.js +0 -2363
  187. package/dist/skill-install-dh0ntqba.js +0 -10
  188. package/src/desktop.ts +0 -253
package/NOTICE.md CHANGED
@@ -3,18 +3,12 @@
3
3
  Slopcamera is an independent project and is not affiliated with or endorsed by
4
4
  tldraw, Inc.
5
5
 
6
- The runtime package does not include the tldraw SDK or tldraw Offline. It writes
6
+ The runtime package does not include the tldraw SDK. It writes
7
7
  the documented `.tldr` JSON interchange format so that users can import a
8
8
  diagram into compatible tldraw software. The development test suite optionally
9
9
  uses the upstream `tldraw` package to check compatibility; that package remains
10
10
  under the [tldraw license](https://tldraw.dev/community/license).
11
11
 
12
- The optional `slopcamera canvas install` command downloads an unmodified installer
13
- from the official
14
- [`tldraw/tldraw-offline`](https://github.com/tldraw/tldraw-offline) GitHub
15
- release and verifies the SHA-256 digest published by GitHub. tldraw Offline is
16
- not open source and remains subject to its own terms.
17
-
18
12
  tldraw and its associated marks are trademarks of tldraw, Inc.
19
13
 
20
14
  Raster output uses
package/PRIVACY.md CHANGED
@@ -5,12 +5,11 @@ operator owns or is authorized to record, import, edit, analyze, and publish.
5
5
  This document describes the data it can capture, the local execution boundary,
6
6
  and the selected media that can leave the machine.
7
7
 
8
- On macOS, Slopcamera can request permission to record selected displays, system
9
- audio, a selected camera, and a selected microphone. When interaction metadata
10
- is enabled, it can record cursor positions, clicks, key activity, focused-input
11
- bounds, display topology, and changed window snapshots. Typed-text collection
12
- is separately opt-in. Slopcamera suppresses secure fields even when typed-text
13
- collection is enabled.
8
+ Slopcamera imports finished recording bundles that can contain display video,
9
+ system audio, camera and microphone tracks, and interaction metadata such as
10
+ cursor positions, clicks, key activity, focused-input bounds, display topology,
11
+ and window snapshots. It reads that evidence locally and never records new
12
+ input itself.
14
13
 
15
14
  Slopcamera can also read caller-selected local media and project files, invoke
16
15
  bounded local browser and media subprocesses, analyze faces locally without
@@ -23,10 +22,20 @@ than sandboxed input.
23
22
  Generation and model-backed media analysis can send an explicit prompt and
24
23
  caller-selected media to Vercel AI Gateway. Local media upload requires the
25
24
  matching command acknowledgement. Local vectorization, face detection,
26
- ordinary media editing, diagram rendering, and capture remain local. Slopcamera does
25
+ ordinary media editing, and diagram rendering remain local. Slopcamera does
27
26
  not provide an account service and does not upload a project to a Slopcamera
28
27
  service.
29
28
 
29
+ Optional support notices are local. After useful command-line work, the
30
+ `slopcamera` executable can print a short discovery notice to stderr and, on
31
+ request, an optional support offer that names the shared Hraness support page.
32
+ Opening that page and any payment are explicit human choices in a browser. The notice preferences,
33
+ throttles, and last presentation are stored only in local JSON files under
34
+ `$XDG_STATE_HOME/hraness/support` (by default `~/.local/state/hraness/support`),
35
+ shared with other Hraness tools for the same user. No email address, task
36
+ output, or project data is collected or sent, and
37
+ `HRANESS_SUPPORT_AUDIENCE=off` disables the notices.
38
+
30
39
  Use Slopcamera only on devices, accounts, displays, conversations, and media that you
31
40
  are entitled and permitted to capture or process. Obtain any consent required
32
41
  by law, contract, workplace policy, or platform rules. Do not use Slopcamera to
package/README.md CHANGED
@@ -33,15 +33,14 @@ project database.
33
33
 
34
34
  ## Install Slopcamera
35
35
 
36
- The source tree prepares v3.2.7 with a compact interactive CLI introduction.
37
- The install below stays on the verified v3.2.6 release until publication completes.
36
+ Slopcamera v3.2.8 adds optional support in the CLI, agent skill, native menu, and public footer.
38
37
 
39
38
  Install [Bun 1.3.14 or newer](https://bun.sh), then install the verified
40
- [Slopcamera v3.2.6 release](https://github.com/hraness/slopcamera/releases/tag/v3.2.6)
39
+ [Slopcamera v3.2.8 release](https://github.com/hraness/slopcamera/releases/tag/v3.2.8)
41
40
  from its canonical archive:
42
41
 
43
42
  ```sh
44
- bun add --global https://github.com/hraness/slopcamera/releases/download/v3.2.6/hraness-slopcamera-3.2.6.tgz
43
+ bun add --global https://github.com/hraness/slopcamera/releases/download/v3.2.8/hraness-slopcamera-3.2.8.tgz
45
44
  slopcamera skill install --target agents
46
45
  ```
47
46
 
@@ -77,6 +76,15 @@ Native engines install separately. The [source-install guide](docs/how-to/use-cu
77
76
  explains workspace placement and durable-run identity; the
78
77
  [capability reference](docs/reference/capabilities.md) names runtime requirements.
79
78
 
79
+ Slopcamera is a CLI. On macOS, an optional unbundled menu-bar companion can show
80
+ the files in the agent outputs directory; `slopcamera menubar` runs a prebuilt
81
+ companion directly and does not install or launch an application bundle. The
82
+ companion is a thin product binary over the shared
83
+ [desktop-foundation](https://github.com/hraness/desktop-foundation) crate, pinned
84
+ by immutable tag. Build it explicitly with
85
+ `cargo build --release --manifest-path desktop/menubar/Cargo.toml`
86
+ when working from source.
87
+
80
88
  <details>
81
89
  <summary>Historical Atet release evidence</summary>
82
90
 
@@ -126,10 +134,30 @@ GPU path. Spark admits saved splat worlds for local camera direction.
126
134
  > mount the product diagram on a screen in the scene, and show me contact frames
127
135
  > before rendering the video.
128
136
 
129
- The portable GLB profile has a defined geometry and material subset. Saved splats
137
+ The portable GLB profile has a defined geometry and material subset; the
138
+ additive rigged profile admits bounded skins and morph targets. Saved splats
130
139
  capture appearance; they do not establish collision geometry or editable native
131
140
  meshes. See [Directed scenes](docs/spatial-scenes.md).
132
141
 
142
+ Current source adds the cinematic planning loop: a `slopcamera.spatial-direction`
143
+ document describes beats, actions, camera coverage, and look intents, compiles
144
+ into proposed performance/camera/cinema/material-lighting/shot documents, and
145
+ fans out into bounded galleries per axis. Declared effects bind into renders,
146
+ and a temporal audit samples evidence at explicit times — all deterministic,
147
+ all reviewable before anything is selected.
148
+
149
+ ```sh
150
+ slopcamera scene direction check direction.json --scene world.json --json
151
+ slopcamera scene direction gallery direction.json --scene world.json --axis camera --output gallery.json --json
152
+ slopcamera workflows plan cinematic-world --input pack-input.json --json
153
+ ```
154
+
155
+ The `cinematic-world` workflow consumes one inert recipe pack — a bounded,
156
+ content-addressed JSON document an agent can author — and stops before
157
+ selection. Registration and selection stay explicit `scene project` operations.
158
+ See [Direct a cinematic world](docs/how-to/direct-cinematic-worlds.md) and the
159
+ [extension architecture](docs/extension-architecture.md).
160
+
133
161
  ### Film native worlds and educational animation
134
162
 
135
163
  The current source build can direct Blender for detailed sets, materials,
@@ -183,19 +211,18 @@ uploading local references requires the matching explicit acknowledgement.
183
211
 
184
212
  ### Edit footage and deliver finished videos
185
213
 
186
- Record a screen, camera, microphone, and system audio on macOS, or import existing
187
- footage. Remove pauses and filler words, align sound, reframe speakers, zoom into
188
- screen actions, and add captions, graphics, color, and audio treatment. Preview
189
- candidates before selecting a result, then export clean and captioned versions
190
- in 16:9, 9:16, 1:1, and 4:5 from the same edit.
214
+ Import existing footage or recording bundles. Remove pauses and filler words,
215
+ align sound, reframe speakers, zoom into screen actions, and add captions,
216
+ graphics, color, and audio treatment. Preview candidates before selecting a
217
+ result, then export clean and captioned versions in 16:9, 9:16, 1:1, and 4:5
218
+ from the same edit.
191
219
 
192
220
  > Edit my product demo: cut the pauses, zoom into each important click, keep the
193
221
  > speaker framed, add captions and `logo.svg`, and show a preview before export.
194
222
 
195
- Recording requires the corresponding macOS permissions. Input-event capture can
196
- include clicks, cursor movement, key activity, and focused-input information;
197
- typed-text capture is separately opt-in and secure fields are suppressed. Read
198
- [`PRIVACY.md`](PRIVACY.md) before recording sensitive material.
223
+ Recording bundles can carry clicks, cursor movement, key activity, and
224
+ focused-input information. Read [`PRIVACY.md`](PRIVACY.md) before editing
225
+ sensitive material.
199
226
 
200
227
  Start with [Edit a video](docs/how-to/edit-video.md) or inspect a reusable recipe:
201
228
 
@@ -234,8 +261,8 @@ declarative graphs, approvals, and resuming work.
234
261
 
235
262
  ## Important limitations
236
263
 
237
- - **Runtime support varies.** The CLI uses Bun on macOS, Linux, and Windows;
238
- capture is macOS-specific. Media, browser, GPU, and native studio profiles
264
+ - **Runtime support varies.** The CLI uses Bun on macOS, Linux, and Windows.
265
+ Media, browser, GPU, and native studio profiles
239
266
  have additional requirements. Use the capability reference and `slopcamera doctor`.
240
267
  - **Interchange preserves a supported subset.** Native rigs and simulations do
241
268
  not become editable Three scenes by exporting a GLB. An image or video on a
@@ -247,8 +274,9 @@ declarative graphs, approvals, and resuming work.
247
274
  - **Trusted code is not sandboxed.** Native Python and caller-authored Bun
248
275
  workflows run with the current user's access. Hashes and receipts identify
249
276
  observed inputs and outputs; they do not make arbitrary code hermetic.
250
- - **MCP is a subset.** Its fixed tools check and render diagrams, vectorize
251
- images, and generate images. It does not expose every local CLI operation.
277
+ - **MCP is a subset.** Its fixed tools check and render diagrams, plan and audit
278
+ scenes, and run the bounded portable operations. It does not expose every
279
+ local CLI operation and never mutates project state.
252
280
 
253
281
  ## Design and trust
254
282
 
@@ -272,9 +300,9 @@ See [Architecture](docs/architecture.md), [`SECURITY.md`](SECURITY.md),
272
300
  ## Documentation
273
301
 
274
302
  - **Learn:** [Your first diagram](docs/tutorials/first-diagram.md) · [Your first native film](docs/tutorials/first-native-film.md).
275
- - **Make a result:** [Edit video](docs/how-to/edit-video.md) · [Generate media](docs/how-to/generate-media.md) · [Run workflows](docs/how-to/run-workflows.md) · [Educational video](docs/how-to/educational-video.md).
303
+ - **Make a result:** [Edit video](docs/how-to/edit-video.md) · [Generate media](docs/how-to/generate-media.md) · [Run workflows](docs/how-to/run-workflows.md) · [Educational video](docs/how-to/educational-video.md) · [Direct a cinematic world](docs/how-to/direct-cinematic-worlds.md).
276
304
  - **Look up support:** [Capabilities and release availability](docs/reference/capabilities.md) · [SDK entrypoints](docs/reference/sdk.md) · [Creative tools](docs/html-overlay-creative-toolkit.md).
277
- - **Understand the system:** [Architecture](docs/architecture.md) · [Native studio](docs/studio.md) · [Directed scenes](docs/spatial-scenes.md).
305
+ - **Understand the system:** [Architecture](docs/architecture.md) · [Native studio](docs/studio.md) · [Directed scenes](docs/spatial-scenes.md) · [Extension architecture](docs/extension-architecture.md).
278
306
 
279
307
  The [documentation index](docs/README.md) connects these paths.
280
308
 
@@ -320,3 +348,20 @@ changing a package or runtime boundary. Report vulnerabilities through
320
348
  ## License
321
349
 
322
350
  [MIT](LICENSE), with third-party notices in [`NOTICE`](NOTICE).
351
+
352
+ ## Optional support
353
+
354
+ All features remain available without payment. `slopcamera support` opens no browser
355
+ and shows an optional way to support continued development. Agents can read
356
+ `slopcamera support protocol --json` at closeout and request `support offer --json`
357
+ once after useful work. A quiet result needs no mention. Unknown callers, including
358
+ PTYs, receive separately throttled stderr discovery without changing task stdout or
359
+ claiming an invitation. Imported CLI functions and SDK/MCP workflows stay quiet.
360
+
361
+ Acknowledge with `support shown <id>` only after a persistent human-visible invitation
362
+ has been emitted. In final-only hosts, include it once in the final answer without
363
+ an acknowledgment; the unacknowledged offer expires after ten minutes and does not
364
+ consume the weekly shown cooldown. `support dismiss` opts out across the local suite;
365
+ `support snooze` pauses for 30 days. `HRANESS_SUPPORT_AUDIENCE=off` disables ambient
366
+ notices and claimed offers. Payment is an explicit human choice on the shared support
367
+ page; Slopcamera has no product-updates mailing list or account-status lookup.
@@ -1,10 +1,10 @@
1
- # Slopcamera desktop and CLI
1
+ # Slopcamera local host and CLI
2
2
 
3
- Slopcamera captures synchronized raw inputs into repository-local bundles, combines independent camera and audio takes on one typed project clock, then applies non-destructive edits through the `slopcamera` CLI. The CLI is the product surface for agents. The macOS window remains only start, pause, resume, stop, and input status.
3
+ Slopcamera reads finished recording bundles from repository-local directories, combines independent camera and audio takes on one typed project clock, then applies non-destructive edits through the `slopcamera` CLI. The CLI is the product surface for agents. An optional unbundled `slopcamera menubar` companion surfaces the agent outputs directory in the macOS menu bar; it carries no capture or editing authority.
4
4
 
5
5
  ## Recording bundles
6
6
 
7
- The default root is `artifacts/slopcamera/recordings/`, resolved from the Slopcamera checkout. `artifacts/` is gitignored and excluded from Vercel uploads. Slopcamera never falls back to an external data directory.
7
+ The default root is `artifacts/slopcamera/recordings/`, resolved from the Slopcamera checkout. `artifacts/` is gitignored and excluded from Vercel uploads. Slopcamera never falls back to an external data directory. Bundles are produced outside this CLI and arrive as finished, immutable directories.
8
8
 
9
9
  ```text
10
10
  rec_<id>/
@@ -25,9 +25,9 @@ rec_<id>/
25
25
  └── renders/
26
26
  ```
27
27
 
28
- Each connected display is recorded independently. System audio, microphone audio, and webcam video remain independently addressable logical tracks even when a native container carries multiple streams. Pause finalizes the current synchronized segment; resume opens another. Finalized media and event streams are immutable.
28
+ Each display occupies its own track. System audio, microphone audio, and webcam video remain independently addressable logical tracks even when a native container carries multiple streams. Each synchronized segment is immutable once finalized.
29
29
 
30
- Cursor, click, key activity, focused-input bounds, window geometry, display topology, and lifecycle metadata use integer source-time microseconds plus native monotonic timestamps. Typed-text capture is disabled by default. Secure fields are always redacted.
30
+ Cursor, click, key activity, focused-input bounds, window geometry, display topology, and lifecycle metadata use integer source-time microseconds plus native monotonic timestamps.
31
31
 
32
32
  ## Multi-asset projects
33
33
 
@@ -62,16 +62,8 @@ changes instead of detaching from the pixels they annotate.
62
62
  Run commands from the repository root:
63
63
 
64
64
  ```sh
65
- # Capture and inspect one synchronized recording.
65
+ # Inspect an existing recording bundle and render it.
66
66
  slopcamera doctor
67
- slopcamera record start
68
- slopcamera record start \
69
- --display <display-id> \
70
- --camera-device <camera-id> \
71
- --microphone-device <microphone-id>
72
- slopcamera record pause
73
- slopcamera record resume
74
- slopcamera record stop
75
67
  slopcamera recordings list --json
76
68
  slopcamera inspect <recording>
77
69
  slopcamera events <recording> --kind click --around 12.5s --jsonl
@@ -137,13 +129,6 @@ slopcamera project render plan <project> --json
137
129
  slopcamera project render run <project> --output renders/final.mp4
138
130
  ```
139
131
 
140
- `record start` defaults to every connected display, system audio, the default
141
- camera, and the default microphone. `doctor --json` exposes the exact selectable
142
- IDs. Repeat `--display` for a bounded display subset, or pass
143
- `--camera-device`/`--microphone-device` to pin a device instead of following the
144
- system default. Duplicate IDs, unavailable IDs, and selections above the
145
- 16-display capture bound fail before media starts.
146
-
147
132
  Read commands default to a bounded text summary and accept `--json`; event queries also accept `--jsonl`. Mutations write atomically and return a normalized plan hash. Camera mutation receipts additionally return the created move ID, keyframe count, bounded face selection when applicable, and exact `camera show`/`camera remove` next commands.
148
133
 
149
134
  ### Agent code mode
@@ -486,9 +471,9 @@ workflow outputs, or inspect the persisted evidence with
486
471
  remain an explicit local `slopcamera analyze scenes ... --execute
487
472
  --allow-cloud-upload` action.
488
473
 
489
- The scheduler runs dependency-ready nodes concurrently while obeying the stricter of `--jobs`, the four-worker hard cap, and host resource pools for FFmpeg, Vision, local I/O, paid calls, output publication, project publication, and capture. Parallel analyses bind an append-only project edit basis, so one sibling may publish while another is paused without authorizing structural or prior-evidence drift. Mutable edits join into one ordered recoverable project transaction. Rendering first freezes the complete project and edit documents into an immutable geometry-bound revision, resolves an exact tool, media, and recording-metadata-bound plan, and publishes video plus receipt through an output-specific lease and durable precommit. Landscape, square, and portrait branches therefore remain independent.
474
+ The scheduler runs dependency-ready nodes concurrently while obeying the stricter of `--jobs`, the four-worker hard cap, and host resource pools for FFmpeg, Vision, local I/O, paid calls, output publication, and project publication. Parallel analyses bind an append-only project edit basis, so one sibling may publish while another is paused without authorizing structural or prior-evidence drift. Mutable edits join into one ordered recoverable project transaction. Rendering first freezes the complete project and edit documents into an immutable geometry-bound revision, resolves an exact tool, media, and recording-metadata-bound plan, and publishes video plus receipt through an output-specific lease and durable precommit. Landscape, square, and portrait branches therefore remain independent.
490
475
 
491
- Every run is durable under `artifacts/slopcamera/private/workflow-runs/<run-id>/`. Inspect it with `runs list` and `runs show`; use `runs resume`, `runs approve`, or `runs cancel` when the bounded summary provides that next action. A normal resume reconstructs unfinished host operations from the persisted graph without evaluating the workflow bundle. Exact canonical analysis orphans and output-only render commits are adopted only through their run-bound recovery evidence. An interrupted arbitrary compute callback becomes `ambiguous-code` and requires an exact node-specific replay acknowledgement. Attached cancellation first aborts that callback's real signal, then force-retires an uncooperative worker after a bounded grace period. A paid request uses an exact request ID and durable dispatch journal; an unknown post-dispatch outcome is never submitted again automatically. Live recording actions reconcile against the same controller used by the desktop app and are never automatically replayed.
476
+ Every run is durable under `artifacts/slopcamera/private/workflow-runs/<run-id>/`. Inspect it with `runs list` and `runs show`; use `runs resume`, `runs approve`, or `runs cancel` when the bounded summary provides that next action. A normal resume reconstructs unfinished host operations from the persisted graph without evaluating the workflow bundle. Exact canonical analysis orphans and output-only render commits are adopted only through their run-bound recovery evidence. An interrupted arbitrary compute callback becomes `ambiguous-code` and requires an exact node-specific replay acknowledgement. Attached cancellation first aborts that callback's real signal, then force-retires an uncooperative worker after a bounded grace period. A paid request uses an exact request ID and durable dispatch journal; an unknown post-dispatch outcome is never submitted again automatically. Live recording actions reconcile against the same controller used by the local host and are never automatically replayed.
492
477
 
493
478
  Custom code mode is trusted code, not a sandbox. Module top-level code and explicitly replayed compute callbacks run as the current user and can use ambient filesystem, process and network authority. Slopcamera keeps its own credentials and privileged handles out of the worker, but it cannot contain malicious repository code. Review custom source before `code check`, `code plan`, or `code run`.
494
479
 
@@ -733,7 +718,7 @@ the moved tree closed a second time before cleanup. Normal teardown
733
718
  rechecks the complete runtime manifest and every direct child, then
734
719
  atomically changes its held active lease to a released marker before removing
735
720
  validated children; that marker is unlinked last, so an interrupted cleanup is
736
- recoverable even while the desktop process remains alive. These gates prevent
721
+ recoverable even while the local host process remains alive. These gates prevent
737
722
  deletion from colliding with a new render container or a swapped peer subtree.
738
723
  The signed snapshot is prepared once per render request and shared by every
739
724
  frame in that sequence; callers should submit a complete loop or overlay range
@@ -822,7 +807,7 @@ For a normalized video-layer layout, face following records the declared output
822
807
 
823
808
  ## Development
824
809
 
825
- Use Bun 1.3.14. Portable checks do not compile native capture:
810
+ Use Bun 1.3.14. Portable checks do not compile native helpers:
826
811
 
827
812
  ```sh
828
813
  bun test apps/desktop
@@ -834,16 +819,11 @@ bun run test:html-overlay
834
819
  bun run benchmark:code-concurrency
835
820
  ```
836
821
 
837
- Native capture targets Apple Silicon macOS 15 or newer. It uses ScreenCaptureKit for every display and system audio, plus AVFoundation for independent webcam and microphone files.
822
+ The optional Rust menu-bar companion lives under `desktop/` at the repository root and builds with Cargo:
838
823
 
839
824
  ```sh
840
- bun x native doctor --manifest apps/desktop/app.zon --strict
841
- bun run apps/desktop/capture/build.ts
842
- bun run apps/desktop/analysis/build.ts
843
- bun run dev:desktop
844
- bun run build:desktop:macos
845
- bun run package:desktop:macos
846
- bun run verify:html-overlay:macos
825
+ cargo build --manifest-path desktop/menubar/Cargo.toml
826
+ slopcamera menubar
847
827
  ```
848
828
 
849
829
  `test:html-overlay` is portable and leaves the real-browser tests registered as
@@ -867,100 +847,4 @@ The compiled smoke copies the executable away from the checkout and proves
867
847
  diagram initialization/rendering plus PNG-to-SVG vectorization without
868
848
  `node_modules`.
869
849
 
870
- Screen recording, microphone, camera, Input Monitoring, and Accessibility are separate macOS permissions. A missing optional source becomes a typed diagnostic; strict-input mode fails before recording begins. Packaged local builds are ad hoc signed evidence until a release workflow adds Developer ID signing, notarization, and updates.
871
-
872
- ### Real capture hardware smoke
873
-
874
- The real hardware smoke is deliberately outside portable and ordinary macOS
875
- checks. Without the exact confirmation below it is registered as skipped and
876
- does not build or probe the helper, inspect permissions, or create artifact
877
- directories:
878
-
879
- ```sh
880
- SLOPCAMERA_CAPTURE_HARDWARE_CONFIRM=record-local-displays-and-selected-inputs \
881
- bun run test:capture:hardware:macos
882
- ```
883
-
884
- The default profile records every connected display twice, with a pause between
885
- the two immutable segments. It leaves system audio, camera, microphone, and
886
- typed text disabled. Enable selected inputs explicitly:
887
-
888
- ```sh
889
- SLOPCAMERA_CAPTURE_HARDWARE_CONFIRM=record-local-displays-and-selected-inputs \
890
- SLOPCAMERA_CAPTURE_HARDWARE_SYSTEM_AUDIO=true \
891
- SLOPCAMERA_CAPTURE_HARDWARE_CAMERA=true \
892
- SLOPCAMERA_CAPTURE_HARDWARE_MICROPHONE=true \
893
- SLOPCAMERA_CAPTURE_HARDWARE_MIN_DISPLAYS=2 \
894
- bun run test:capture:hardware:macos
895
- ```
896
-
897
- Add `SLOPCAMERA_CAPTURE_HARDWARE_INTERACTIONS=true` for the owned interaction
898
- fixture. The fixture activates its nonce-titled window, performs one fixed
899
- public → secure → public exercise against its own fields, and remains open with
900
- neutral focus until capture stops. It can post only the built-in `a`, `s`, and
901
- `b` canaries to its own PID at verified coordinates inside its focused window;
902
- it accepts no arbitrary text, key, coordinate, or target from the caller. Do
903
- not type, click, or switch applications until the command exits because doing
904
- so can disturb focus or fixture timing. The fixture-PID event tap excludes
905
- clicks and keys delivered to other applications from the exact evidence gate.
906
- The profile binds the fixture's native-clock receipt to exact ordered click/key
907
- pairs, display identity, fixture process identity, public and secure focus
908
- transitions, and one native `focused` window transition. With the default
909
- typed-text opt-out, the stopped bundle must contain no `typing.input` event and
910
- no key cadence from the secure phase.
911
-
912
- Set `SLOPCAMERA_CAPTURE_HARDWARE_TYPED_TEXT=true` together with the interaction
913
- profile to verify explicit typed-text capture. That profile accepts exactly the
914
- public `a` and `b` canaries in metadata; a native focus-identity allowlist binds
915
- text persistence to the fixture's nonce-derived field ID, PID, window ID, and
916
- nonce title. Text from any other input remains unpersisted, and the secure `s`
917
- canary must remain absent. Failed typed-text evidence is deleted regardless of
918
- the artifact retention setting. Typed-text hardware verification is
919
- unavailable without the owned fixture.
920
-
921
- Before capture, the smoke performs the helper's read-only strict probe. Screen
922
- Recording, Input Monitoring, Accessibility, and window metadata must already be
923
- authorized; each selected optional input must also be authorized and present.
924
- An explicitly requested run fails before `start` when a prerequisite is
925
- missing, so it cannot open a surprise permission prompt. Grant permissions by
926
- running Slopcamera interactively first. Strict capture also creates and disables
927
- the listen-only input event tap before starting any media recorder, then waits
928
- for the tap's run-loop thread to confirm that it is enabled. Metadata writes
929
- display, focus, window, and cursor boundary snapshots only after that handshake
930
- and before a recorder can emit its first sample. At pause or stop, the
931
- user-visible clock freezes, every recorder drains, all metadata pollers are
932
- cancelled and joined on one serial queue, and metadata takes a final boundary
933
- snapshot; finalization latency therefore does not become blank footage.
934
- Tap creation or activation failure aborts the strict segment instead of
935
- silently losing clicks and keys. Window focus comes from the frontmost
936
- application's actual Accessibility-focused window matched back to its
937
- positioned Core Graphics record, not the first enumerated window owned by that
938
- process.
939
-
940
- The smoke writes to a unique directory below
941
- `artifacts/slopcamera/recordings/.hardware-smoke/`, verifies that Git ignores the
942
- directory, drives the real start/pause/resume/stop controller, probes every
943
- finalized media stream with FFprobe, and validates verified `capture-sync-v1`
944
- sample-clock measurements in the manifest. Controller-lifecycle and
945
- container-length checks are supplemental diagnostics, not substitutes for
946
- sample timing. It also re-hashes every physical media file, streams and
947
- re-hashes every event file through the production event parser, checks its
948
- declared record count and time interval, and requires real cursor, display
949
- topology, positioned-window, focus, and exact pause/resume lifecycle events.
950
- For both active segments, opening lifecycle and environment snapshots must
951
- precede the earliest retained sample across every selected display, system
952
- audio, camera, and microphone stream, while a closing cursor and lifecycle
953
- marker must follow the latest retained sample across that same complete
954
- envelope.
955
- Any native dropped-event diagnostic fails the run. Typed-text opt-out and any
956
- observed secure-focus interval are checked directly against the parsed input
957
- events.
958
-
959
- Failed evidence is retained by default and its absolute path is printed. Set
960
- `SLOPCAMERA_CAPTURE_HARDWARE_KEEP_ARTIFACTS=never` to remove every run or `always`
961
- to keep successful runs too. Optional-input values must be exactly `true` or
962
- `false`; the minimum-display value is bounded from 1 through 16.
963
-
964
- ## Direct
965
-
966
- `bun run direct:slopcamera` opens the deterministic recorder and project-evidence lab without native capture, FFmpeg, whisper.cpp, Python, or cloud calls. It exposes compact fixtures for multi-angle placement, alignment, music, scene boundaries/descriptions, speech fillers, synchronized edits, and all overlay kinds. Permission, analyzer, and project worlds are fixture evidence, not claims about live native execution. `bun run verify:slopcamera:direct` drives every declared browser scenario and writes agent-readable evidence.
850
+ Screen recording, microphone, camera, Input Monitoring, and Accessibility are separate macOS permissions. A missing optional source becomes a typed diagnostic; strict-input mode fails before recording begins. Slopcamera ships as a CLI with an unbundled menu-bar companion; it does not produce, install, sign, or notarize a desktop application.
@@ -1,8 +1,10 @@
1
1
  import type { HostResourceLease } from "@hraness/slopcamera/host-resources";
2
2
 
3
+ import type { SpatialReviewProvider } from "../../../src/spatial-scene/review";
3
4
  import type { ApplicationStudioAuthorization, ApplicationStudioPort } from "./studio-port";
4
5
  import type { ApplicationGatewayPort } from "./gateway-port";
5
6
  import type { HtmlOverlayRenderer } from "./html-overlay-renderer";
7
+ import type { ApplicationSpatialReviewAuthorization } from "./spatial-review";
6
8
 
7
9
  export interface ApplicationPaths {
8
10
  readonly artifactRoot: string;
@@ -52,14 +54,6 @@ export interface ApplicationCapability {
52
54
  readonly version?: string;
53
55
  }
54
56
 
55
- export interface ApplicationRecordingController {
56
- execute(
57
- action: "pause" | "resume" | "start" | "stop",
58
- options?: unknown,
59
- ): Promise<unknown>;
60
- status(): Promise<unknown>;
61
- }
62
-
63
57
  export interface ApplicationClock {
64
58
  readonly now: () => Date;
65
59
  readonly timestampMilliseconds: () => number;
@@ -87,11 +81,14 @@ export interface ApplicationContext {
87
81
  readonly gatewayPort?: ApplicationGatewayPort;
88
82
  readonly studioPort?: ApplicationStudioPort;
89
83
  readonly studioAuthorization?: ApplicationStudioAuthorization;
84
+ /** Bounded beauty-frame critique seam; absent means scene.review fails closed. */
85
+ readonly spatialReviewProvider?: SpatialReviewProvider;
86
+ /** Invocation-scoped cloud-upload consent envelope for scene.review. */
87
+ readonly spatialReviewAuthorization?: ApplicationSpatialReviewAuthorization;
90
88
  readonly hostResourceLease?: ApplicationHostResourceLease;
91
89
  readonly htmlOverlayRenderer?: HtmlOverlayRenderer;
92
90
  /** Per-user host state shared by repository worktrees for mutation leases. */
93
91
  readonly machineStateRoot?: string;
94
92
  readonly paths: ApplicationPaths;
95
- readonly recordingController?: ApplicationRecordingController;
96
93
  readonly runner: ApplicationProcessRunner;
97
94
  }
@@ -39,18 +39,26 @@ import {
39
39
  projectRenderOperationDefinitionV3,
40
40
  projectRenderOperationDefinitionV4,
41
41
  projectSnapshotOperationDefinition,
42
- recordingPauseOperationDefinition,
43
- recordingResumeOperationDefinition,
44
- recordingStartOperationDefinition,
45
- recordingStartOperationDefinitionV1,
46
- recordingStopOperationDefinition,
47
42
  slopcameraDiagramCheckOperationDefinition,
48
43
  slopcameraDiagramRenderOperationDefinition,
49
44
  slopcameraImageVectorizeOperationDefinition,
50
45
  spatialInspectOperationDefinition,
51
46
  spatialPatchOperationDefinition,
52
47
  spatialEvaluateOperationDefinition,
48
+ spatialAuditOperationDefinition,
49
+ spatialDirectionCheckOperationDefinition,
50
+ spatialDirectionCompileOperationDefinition,
51
+ spatialDirectionGalleryOperationDefinition,
52
+ spatialEffectsCheckOperationDefinition,
53
+ spatialEffectsPlanOperationDefinition,
54
+ spatialBehaviorCheckOperationDefinition,
55
+ spatialBehaviorBakeOperationDefinition,
56
+ spatialBehaviorGalleryOperationDefinition,
57
+ spatialBehaviorAuditOperationDefinition,
58
+ spatialTemporalAuditOperationDefinition,
53
59
  spatialRenderOperationDefinition,
60
+ spatialRenderedAuditOperationDefinition,
61
+ spatialReviewOperationDefinition,
54
62
  studioRunOperationDefinition,
55
63
  spatialProjectSnapshotOperationDefinition,
56
64
  spatialProjectMigrateOperationDefinition,
@@ -80,7 +88,20 @@ export function createApplicationOperationRegistry(
80
88
  registry.register(spatialInspectOperationDefinition);
81
89
  registry.register(spatialPatchOperationDefinition);
82
90
  registry.register(spatialEvaluateOperationDefinition);
91
+ registry.register(spatialAuditOperationDefinition);
92
+ registry.register(spatialDirectionCheckOperationDefinition);
93
+ registry.register(spatialDirectionCompileOperationDefinition);
94
+ registry.register(spatialDirectionGalleryOperationDefinition);
95
+ registry.register(spatialEffectsCheckOperationDefinition);
96
+ registry.register(spatialEffectsPlanOperationDefinition);
97
+ registry.register(spatialBehaviorCheckOperationDefinition);
98
+ registry.register(spatialBehaviorBakeOperationDefinition);
99
+ registry.register(spatialBehaviorGalleryOperationDefinition);
100
+ registry.register(spatialBehaviorAuditOperationDefinition);
101
+ registry.register(spatialTemporalAuditOperationDefinition);
83
102
  registry.register(spatialRenderOperationDefinition);
103
+ registry.register(spatialRenderedAuditOperationDefinition);
104
+ registry.register(spatialReviewOperationDefinition);
84
105
  registry.register(studioRunOperationDefinition);
85
106
  registry.register(spatialProjectSnapshotOperationDefinition);
86
107
  registry.register(spatialProjectMigrateOperationDefinition);
@@ -131,11 +152,6 @@ export function createApplicationOperationRegistry(
131
152
  registry.register(projectRenderOperationDefinitionV3);
132
153
  registry.register(projectRenderOperationDefinitionV4);
133
154
  registry.register(materializeVariantSelectionOperationDefinition);
134
- registry.register(recordingStartOperationDefinitionV1);
135
- registry.register(recordingStartOperationDefinition);
136
- registry.register(recordingPauseOperationDefinition);
137
- registry.register(recordingResumeOperationDefinition);
138
- registry.register(recordingStopOperationDefinition);
139
155
  registry.register(slopcameraDiagramCheckOperationDefinition);
140
156
  registry.register(slopcameraDiagramRenderOperationDefinition);
141
157
  registry.register(slopcameraImageVectorizeOperationDefinition);
@@ -4,13 +4,26 @@ import type { z } from "zod";
4
4
 
5
5
  import type { ApplicationContext } from "./context";
6
6
 
7
- export const SLOPCAMERA_APPLICATION_TOOL_VERSION = "slopcamera-3.2.7" as const;
7
+ export const SLOPCAMERA_APPLICATION_TOOL_VERSION = "slopcamera-3.3.1" as const;
8
8
 
9
9
  export const OPERATION_KINDS = [
10
+ "scene.audit",
10
11
  "scene.inspect",
11
12
  "scene.patch",
12
13
  "scene.evaluate",
13
14
  "scene.render",
15
+ "scene.render-audit",
16
+ "scene.review",
17
+ "scene.direction.check",
18
+ "scene.direction.compile",
19
+ "scene.direction.gallery",
20
+ "scene.effects.check",
21
+ "scene.effects.plan",
22
+ "scene.behavior.check",
23
+ "scene.behavior.bake",
24
+ "scene.behavior.gallery",
25
+ "scene.behavior.audit",
26
+ "scene.temporal-audit",
14
27
  "slopcamera.studio.run",
15
28
  "spatial.project.snapshot",
16
29
  "spatial.project.migrate",
@@ -50,10 +63,6 @@ export const OPERATION_KINDS = [
50
63
  "gateway.video",
51
64
  "gateway.speech",
52
65
  "gateway.transcription",
53
- "recording.start",
54
- "recording.pause",
55
- "recording.resume",
56
- "recording.stop",
57
66
  "slopcamera.diagram.check",
58
67
  "slopcamera.diagram.render",
59
68
  "slopcamera.image.vectorize",
@@ -18,14 +18,17 @@ export * from "./iteration/select";
18
18
  export * from "./project/commit-edits";
19
19
  export * from "./project/promote-selection";
20
20
  export * from "./project/snapshot";
21
- export * from "./recording";
22
21
  export * from "./render/bind-candidate-output";
23
22
  export * from "./render/project-plan";
24
23
  export * from "./render/project";
25
24
  export * from "./render/materialize-selection";
26
25
  export * from "./slopcamera-visuals";
26
+ export * from "./spatial-behavior";
27
+ export * from "./spatial-direction";
27
28
  export * from "./spatial-scene";
28
29
  export * from "./spatial-project";
29
30
  export * from "./spatial-render";
31
+ export * from "./spatial-rendered-audit";
32
+ export * from "./spatial-review";
30
33
 
31
34
  export * from "./studio";