@hraness/slopcamera 3.2.4

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 (441) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE.md +60 -0
  3. package/PRIVACY.md +46 -0
  4. package/README.md +311 -0
  5. package/SECURITY.md +21 -0
  6. package/apps/desktop/README.md +966 -0
  7. package/apps/desktop/analysis/protocol.ts +223 -0
  8. package/apps/desktop/application/capability-binding.ts +594 -0
  9. package/apps/desktop/application/context.ts +97 -0
  10. package/apps/desktop/application/creative-iteration.ts +1385 -0
  11. package/apps/desktop/application/default-registry.ts +146 -0
  12. package/apps/desktop/application/directing-contract.ts +218 -0
  13. package/apps/desktop/application/directing-plan.ts +178 -0
  14. package/apps/desktop/application/errors.ts +18 -0
  15. package/apps/desktop/application/gateway-port.ts +867 -0
  16. package/apps/desktop/application/html-overlay-browser-runtime.ts +687 -0
  17. package/apps/desktop/application/html-overlay-integrity.ts +337 -0
  18. package/apps/desktop/application/html-overlay-renderer.ts +45 -0
  19. package/apps/desktop/application/index.ts +13 -0
  20. package/apps/desktop/application/operation-completion-checkpoint.ts +333 -0
  21. package/apps/desktop/application/operation-effects.ts +94 -0
  22. package/apps/desktop/application/operation.ts +224 -0
  23. package/apps/desktop/application/operations/analysis/faces.ts +244 -0
  24. package/apps/desktop/application/operations/analysis/music.ts +248 -0
  25. package/apps/desktop/application/operations/analysis/project-auto-zooms.ts +302 -0
  26. package/apps/desktop/application/operations/analysis/project-inactivity.ts +381 -0
  27. package/apps/desktop/application/operations/analysis/scenes.ts +272 -0
  28. package/apps/desktop/application/operations/analysis/shared.ts +202 -0
  29. package/apps/desktop/application/operations/derive/edit-batch.ts +967 -0
  30. package/apps/desktop/application/operations/derive/follow-faces.ts +454 -0
  31. package/apps/desktop/application/operations/edit/bind-candidate-revision.ts +91 -0
  32. package/apps/desktop/application/operations/edit/create-candidate-revision.ts +377 -0
  33. package/apps/desktop/application/operations/edit/create-revision.ts +255 -0
  34. package/apps/desktop/application/operations/edit/freeze-revision.ts +182 -0
  35. package/apps/desktop/application/operations/gateway/image.ts +41 -0
  36. package/apps/desktop/application/operations/gateway/index.ts +17 -0
  37. package/apps/desktop/application/operations/gateway/shared.ts +122 -0
  38. package/apps/desktop/application/operations/gateway/speech.ts +41 -0
  39. package/apps/desktop/application/operations/gateway/transcription.ts +42 -0
  40. package/apps/desktop/application/operations/gateway/video.ts +41 -0
  41. package/apps/desktop/application/operations/index.ts +31 -0
  42. package/apps/desktop/application/operations/iteration/create-candidate.ts +240 -0
  43. package/apps/desktop/application/operations/iteration/create-matrix.ts +117 -0
  44. package/apps/desktop/application/operations/iteration/select.ts +155 -0
  45. package/apps/desktop/application/operations/iteration/shared.ts +250 -0
  46. package/apps/desktop/application/operations/media/audio-effects.ts +376 -0
  47. package/apps/desktop/application/operations/media/binding.ts +79 -0
  48. package/apps/desktop/application/operations/media/capabilities.ts +112 -0
  49. package/apps/desktop/application/operations/media/color-grade.ts +343 -0
  50. package/apps/desktop/application/operations/media/html-overlay.ts +802 -0
  51. package/apps/desktop/application/operations/media/index.ts +8 -0
  52. package/apps/desktop/application/operations/media/ingest.ts +303 -0
  53. package/apps/desktop/application/operations/media/overlay.ts +729 -0
  54. package/apps/desktop/application/operations/media/shared.ts +845 -0
  55. package/apps/desktop/application/operations/media/transform-platform.ts +120 -0
  56. package/apps/desktop/application/operations/project/commit-edits.ts +2054 -0
  57. package/apps/desktop/application/operations/project/promote-selection.ts +495 -0
  58. package/apps/desktop/application/operations/project/snapshot.ts +95 -0
  59. package/apps/desktop/application/operations/recording/index.ts +5 -0
  60. package/apps/desktop/application/operations/recording/pause.ts +34 -0
  61. package/apps/desktop/application/operations/recording/resume.ts +34 -0
  62. package/apps/desktop/application/operations/recording/shared.ts +199 -0
  63. package/apps/desktop/application/operations/recording/start.ts +169 -0
  64. package/apps/desktop/application/operations/recording/stop.ts +34 -0
  65. package/apps/desktop/application/operations/render/bind-candidate-output.ts +324 -0
  66. package/apps/desktop/application/operations/render/materialize-selection.ts +322 -0
  67. package/apps/desktop/application/operations/render/project-caption-plan.ts +287 -0
  68. package/apps/desktop/application/operations/render/project-plan.ts +939 -0
  69. package/apps/desktop/application/operations/render/project-spatial-receipt.ts +70 -0
  70. package/apps/desktop/application/operations/render/project.ts +1922 -0
  71. package/apps/desktop/application/operations/shared.ts +67 -0
  72. package/apps/desktop/application/operations/slopcamera-portable.ts +1188 -0
  73. package/apps/desktop/application/operations/slopcamera-visuals.ts +784 -0
  74. package/apps/desktop/application/operations/spatial-project.ts +209 -0
  75. package/apps/desktop/application/operations/spatial-render.ts +415 -0
  76. package/apps/desktop/application/operations/spatial-scene.ts +97 -0
  77. package/apps/desktop/application/operations/studio.ts +143 -0
  78. package/apps/desktop/application/output-publication-lease.ts +163 -0
  79. package/apps/desktop/application/project-publication-lease.ts +233 -0
  80. package/apps/desktop/application/project-store.ts +196 -0
  81. package/apps/desktop/application/receipts.ts +533 -0
  82. package/apps/desktop/application/registry.ts +182 -0
  83. package/apps/desktop/application/spatial-assets.ts +675 -0
  84. package/apps/desktop/application/spatial-compositor-cadence.ts +23 -0
  85. package/apps/desktop/application/spatial-project-authority.ts +35 -0
  86. package/apps/desktop/application/spatial-project-lease.ts +126 -0
  87. package/apps/desktop/application/spatial-project-render-preparation.ts +225 -0
  88. package/apps/desktop/application/spatial-project-store.ts +286 -0
  89. package/apps/desktop/application/spatial-render-projection.ts +201 -0
  90. package/apps/desktop/application/spatial-render.ts +677 -0
  91. package/apps/desktop/application/spatial-spz.ts +44 -0
  92. package/apps/desktop/application/spatial-world-import.ts +135 -0
  93. package/apps/desktop/application/spatial-world-provenance.ts +46 -0
  94. package/apps/desktop/application/studio-port.ts +58 -0
  95. package/apps/desktop/application/verified-receipt-reconciliation.ts +1574 -0
  96. package/apps/desktop/capture/protocol.ts +689 -0
  97. package/apps/desktop/cli/analyzer.ts +406 -0
  98. package/apps/desktop/cli/args.ts +3181 -0
  99. package/apps/desktop/cli/asset-ingest.ts +747 -0
  100. package/apps/desktop/cli/atomic-render-effects.ts +210 -0
  101. package/apps/desktop/cli/atomic-render-platform.ts +205 -0
  102. package/apps/desktop/cli/atomic-render.ts +50 -0
  103. package/apps/desktop/cli/audio-analysis.ts +252 -0
  104. package/apps/desktop/cli/bounded-map.ts +39 -0
  105. package/apps/desktop/cli/bundle-service.ts +256 -0
  106. package/apps/desktop/cli/capabilities.ts +212 -0
  107. package/apps/desktop/cli/capture-bundle.ts +1117 -0
  108. package/apps/desktop/cli/command-host-resources.ts +251 -0
  109. package/apps/desktop/cli/commands.ts +6836 -0
  110. package/apps/desktop/cli/directing-blob.ts +291 -0
  111. package/apps/desktop/cli/directing-media.ts +517 -0
  112. package/apps/desktop/cli/directing-quote.ts +89 -0
  113. package/apps/desktop/cli/directing-service.ts +288 -0
  114. package/apps/desktop/cli/emoji-assets.ts +538 -0
  115. package/apps/desktop/cli/errors.ts +29 -0
  116. package/apps/desktop/cli/face-analysis-service.ts +940 -0
  117. package/apps/desktop/cli/filter-script.ts +76 -0
  118. package/apps/desktop/cli/gateway-application-port.ts +1142 -0
  119. package/apps/desktop/cli/gateway-credential.ts +81 -0
  120. package/apps/desktop/cli/gateway-media-artifacts.ts +723 -0
  121. package/apps/desktop/cli/gateway-media-catalog.ts +922 -0
  122. package/apps/desktop/cli/gateway-media-service.ts +3106 -0
  123. package/apps/desktop/cli/gateway-media-signature.ts +122 -0
  124. package/apps/desktop/cli/gateway-provider-options.ts +562 -0
  125. package/apps/desktop/cli/gateway-scene-provider.ts +391 -0
  126. package/apps/desktop/cli/help.ts +501 -0
  127. package/apps/desktop/cli/html-overlay-gpu.ts +97 -0
  128. package/apps/desktop/cli/html-overlay-renderer.ts +2478 -0
  129. package/apps/desktop/cli/io.ts +290 -0
  130. package/apps/desktop/cli/main.ts +123 -0
  131. package/apps/desktop/cli/media-effects-service.ts +885 -0
  132. package/apps/desktop/cli/media-ingest-model.ts +364 -0
  133. package/apps/desktop/cli/media-ingest-platform.ts +227 -0
  134. package/apps/desktop/cli/media-ingest-program.ts +200 -0
  135. package/apps/desktop/cli/media-ingest.ts +30 -0
  136. package/apps/desktop/cli/music-analysis-service.ts +434 -0
  137. package/apps/desktop/cli/mutation-lock.ts +530 -0
  138. package/apps/desktop/cli/native-assets.d.ts +12 -0
  139. package/apps/desktop/cli/native-media-runtime.macos.ts +7 -0
  140. package/apps/desktop/cli/overlay-playback.ts +177 -0
  141. package/apps/desktop/cli/paths.ts +265 -0
  142. package/apps/desktop/cli/portable-surface.ts +242 -0
  143. package/apps/desktop/cli/project-camera-receipt.ts +112 -0
  144. package/apps/desktop/cli/project-face-camera.ts +394 -0
  145. package/apps/desktop/cli/project-inactivity-service.ts +552 -0
  146. package/apps/desktop/cli/project-media-integrity.ts +121 -0
  147. package/apps/desktop/cli/project-renderer.ts +1526 -0
  148. package/apps/desktop/cli/project-service.ts +519 -0
  149. package/apps/desktop/cli/project-state-transaction.ts +520 -0
  150. package/apps/desktop/cli/query-limits.ts +1 -0
  151. package/apps/desktop/cli/recording-controller.ts +1567 -0
  152. package/apps/desktop/cli/recording-daemon.ts +931 -0
  153. package/apps/desktop/cli/recording-ref.ts +56 -0
  154. package/apps/desktop/cli/renamed-environment.ts +6 -0
  155. package/apps/desktop/cli/renderer.ts +1439 -0
  156. package/apps/desktop/cli/run-cli-test-helper.ts +60 -0
  157. package/apps/desktop/cli/scene-analysis-service.ts +879 -0
  158. package/apps/desktop/cli/spatial-compositor-verifier.ts +213 -0
  159. package/apps/desktop/cli/spatial-project-service.ts +90 -0
  160. package/apps/desktop/cli/spatial-scene-service.ts +105 -0
  161. package/apps/desktop/cli/spatial-world-service.ts +39 -0
  162. package/apps/desktop/cli/speech-analysis-service.ts +682 -0
  163. package/apps/desktop/cli/studio-assemble.ts +58 -0
  164. package/apps/desktop/cli/studio-command.ts +60 -0
  165. package/apps/desktop/cli/studio-custody.ts +60 -0
  166. package/apps/desktop/cli/studio-encode.ts +216 -0
  167. package/apps/desktop/cli/studio-exr.ts +52 -0
  168. package/apps/desktop/cli/studio-files.ts +179 -0
  169. package/apps/desktop/cli/studio-output-validation.ts +162 -0
  170. package/apps/desktop/cli/studio-process.ts +145 -0
  171. package/apps/desktop/cli/studio-runtime.ts +77 -0
  172. package/apps/desktop/cli/studio-scaffold.ts +70 -0
  173. package/apps/desktop/cli/studio-service.ts +301 -0
  174. package/apps/desktop/cli/studio-spatial-asset.ts +248 -0
  175. package/apps/desktop/cli/studio-template-names.ts +3 -0
  176. package/apps/desktop/cli/studio-workflow.ts +19 -0
  177. package/apps/desktop/cli/time.ts +25 -0
  178. package/apps/desktop/cli/workflow-code.ts +584 -0
  179. package/apps/desktop/cli/workflow-runs.ts +576 -0
  180. package/apps/desktop/code/advanced.ts +139 -0
  181. package/apps/desktop/code/application-node-planner.ts +1288 -0
  182. package/apps/desktop/code/compiler.ts +329 -0
  183. package/apps/desktop/code/contracts.ts +13 -0
  184. package/apps/desktop/code/creative-recipes.ts +94 -0
  185. package/apps/desktop/code/define-workflow.ts +115 -0
  186. package/apps/desktop/code/editing.ts +284 -0
  187. package/apps/desktop/code/file-candidate-provenance.ts +420 -0
  188. package/apps/desktop/code/file-candidate.ts +69 -0
  189. package/apps/desktop/code/graph-builder.ts +10 -0
  190. package/apps/desktop/code/host-resource-policy.ts +55 -0
  191. package/apps/desktop/code/plan-contracts.ts +159 -0
  192. package/apps/desktop/code/planning.ts +361 -0
  193. package/apps/desktop/code/public.ts +134 -0
  194. package/apps/desktop/code/reference-projection.ts +62 -0
  195. package/apps/desktop/code/run-contracts.ts +466 -0
  196. package/apps/desktop/code/run-store.ts +2478 -0
  197. package/apps/desktop/code/runtime-identity.ts +328 -0
  198. package/apps/desktop/code/scheduler.ts +3067 -0
  199. package/apps/desktop/code/semantic-builder.ts +1436 -0
  200. package/apps/desktop/code/source-bundle.ts +1641 -0
  201. package/apps/desktop/code/source-typecheck.ts +211 -0
  202. package/apps/desktop/code/testing.ts +79 -0
  203. package/apps/desktop/code/worker-client.ts +1675 -0
  204. package/apps/desktop/code/worker-effects.ts +141 -0
  205. package/apps/desktop/code/worker-entry.ts +435 -0
  206. package/apps/desktop/code/worker-lease-guardian.ts +179 -0
  207. package/apps/desktop/code/worker-process-identity.ts +484 -0
  208. package/apps/desktop/code/worker-protocol.ts +211 -0
  209. package/apps/desktop/code/workflow-effects.ts +132 -0
  210. package/apps/desktop/contracts/analysis.ts +949 -0
  211. package/apps/desktop/contracts/edit.ts +576 -0
  212. package/apps/desktop/contracts/index.ts +9 -0
  213. package/apps/desktop/contracts/media-effects.ts +139 -0
  214. package/apps/desktop/contracts/project-render.ts +644 -0
  215. package/apps/desktop/contracts/project.ts +740 -0
  216. package/apps/desktop/contracts/recording.ts +1434 -0
  217. package/apps/desktop/contracts/render.ts +334 -0
  218. package/apps/desktop/contracts/runtime.ts +155 -0
  219. package/apps/desktop/contracts/spatial-compositor.ts +58 -0
  220. package/apps/desktop/contracts/spatial-project.ts +159 -0
  221. package/apps/desktop/contracts/spatial-world.ts +48 -0
  222. package/apps/desktop/contracts/video-effects.ts +120 -0
  223. package/apps/desktop/core/alignment-apply.ts +400 -0
  224. package/apps/desktop/core/audio-alignment.ts +466 -0
  225. package/apps/desktop/core/auto-zoom.ts +209 -0
  226. package/apps/desktop/core/canonical-json.ts +14 -0
  227. package/apps/desktop/core/emoji.ts +210 -0
  228. package/apps/desktop/core/events.ts +409 -0
  229. package/apps/desktop/core/face-framing.ts +533 -0
  230. package/apps/desktop/core/face-tracks.ts +326 -0
  231. package/apps/desktop/core/inactivity.ts +137 -0
  232. package/apps/desktop/core/index.ts +30 -0
  233. package/apps/desktop/core/intervals.ts +123 -0
  234. package/apps/desktop/core/montage.ts +236 -0
  235. package/apps/desktop/core/music-analysis.ts +518 -0
  236. package/apps/desktop/core/plan.ts +244 -0
  237. package/apps/desktop/core/project-auto-zoom.ts +75 -0
  238. package/apps/desktop/core/project-camera-spatial.ts +676 -0
  239. package/apps/desktop/core/project-camera.ts +403 -0
  240. package/apps/desktop/core/project-captions.ts +888 -0
  241. package/apps/desktop/core/project-inactivity.ts +125 -0
  242. package/apps/desktop/core/project-metadata.ts +927 -0
  243. package/apps/desktop/core/project-plan.ts +375 -0
  244. package/apps/desktop/core/project-render-plan.ts +303 -0
  245. package/apps/desktop/core/project-time.ts +469 -0
  246. package/apps/desktop/core/render-plan.ts +442 -0
  247. package/apps/desktop/core/scene-cache.ts +174 -0
  248. package/apps/desktop/core/scene-sampling.ts +448 -0
  249. package/apps/desktop/core/spatial-compositor.ts +22 -0
  250. package/apps/desktop/core/spatial-durability.ts +99 -0
  251. package/apps/desktop/core/spatial-project.ts +169 -0
  252. package/apps/desktop/core/spatial-shot-clock.ts +32 -0
  253. package/apps/desktop/core/speech-analysis.ts +333 -0
  254. package/apps/desktop/core/storage.ts +970 -0
  255. package/apps/desktop/core/time-map.ts +91 -0
  256. package/apps/desktop/core/time.ts +61 -0
  257. package/apps/desktop/core/video-effects.ts +660 -0
  258. package/apps/desktop/dist/cli/NebulaSans-Bold-26se8aek.otf +0 -0
  259. package/apps/desktop/dist/cli/NebulaSans-Bold-bcz7y08t.woff2 +0 -0
  260. package/apps/desktop/dist/cli/NebulaSans-Book-5ax05zvn.woff2 +0 -0
  261. package/apps/desktop/dist/cli/NebulaSans-Book-8cenzchw.otf +0 -0
  262. package/apps/desktop/dist/cli/main.js +5086 -0
  263. package/apps/desktop/html-overlay/catalog.ts +171 -0
  264. package/apps/desktop/html-overlay/contracts.ts +372 -0
  265. package/apps/desktop/html-overlay/execution-profile.ts +77 -0
  266. package/apps/desktop/html-overlay/index.ts +98 -0
  267. package/apps/desktop/html-overlay/libraries.ts +263 -0
  268. package/apps/desktop/html-overlay/random.ts +49 -0
  269. package/apps/desktop/html-overlay/runtime.ts +813 -0
  270. package/apps/desktop/html-overlay/scaffolds.ts +792 -0
  271. package/apps/desktop/html-overlay/spark-runtime.ts +88 -0
  272. package/apps/desktop/html-overlay/spatial-splat-runtime.ts +60 -0
  273. package/apps/desktop/html-overlay/spatial.ts +720 -0
  274. package/apps/desktop/studio/assets/README.md +39 -0
  275. package/apps/desktop/studio/assets/contracts.ts +129 -0
  276. package/apps/desktop/studio/assets/network.ts +64 -0
  277. package/apps/desktop/studio/assets/poly-haven.ts +148 -0
  278. package/apps/desktop/studio/drivers/blender_driver.py +466 -0
  279. package/apps/desktop/studio/drivers/cadquery_driver.py +176 -0
  280. package/apps/desktop/studio/education/driver.py +308 -0
  281. package/apps/desktop/studio/education/lesson.py +180 -0
  282. package/apps/desktop/studio/education/toolkit.py +249 -0
  283. package/apps/desktop/workflows/chaptered-demo.ts +48 -0
  284. package/apps/desktop/workflows/creative-iteration.ts +107 -0
  285. package/apps/desktop/workflows/creative-selection.ts +92 -0
  286. package/apps/desktop/workflows/fragments.ts +486 -0
  287. package/apps/desktop/workflows/index.ts +93 -0
  288. package/apps/desktop/workflows/polished-screen-demo.ts +128 -0
  289. package/apps/desktop/workflows/scene-direction.ts +12 -0
  290. package/apps/desktop/workflows/social-variants.ts +75 -0
  291. package/apps/desktop/workflows/talking-head-cleanup.ts +53 -0
  292. package/dist/NebulaSans-Bold-26se8aek.otf +0 -0
  293. package/dist/NebulaSans-Bold-bcz7y08t.woff2 +0 -0
  294. package/dist/NebulaSans-Book-5ax05zvn.woff2 +0 -0
  295. package/dist/NebulaSans-Book-8cenzchw.otf +0 -0
  296. package/dist/cli.js +479 -0
  297. package/dist/code/advanced.js +270 -0
  298. package/dist/code/index.js +2240 -0
  299. package/dist/generate.js +24 -0
  300. package/dist/host-resources.js +26 -0
  301. package/dist/index-42zsesc1.js +2257 -0
  302. package/dist/index-7308egqr.js +48 -0
  303. package/dist/index-8txs6fkn.js +712 -0
  304. package/dist/index-mcy8z0br.js +192 -0
  305. package/dist/index-p63wavx0.js +2029 -0
  306. package/dist/index-r7gdhmsp.js +424 -0
  307. package/dist/index-sh6xbav6.js +1219 -0
  308. package/dist/index-z1w83f81.js +4 -0
  309. package/dist/index-z7239b4h.js +2363 -0
  310. package/dist/index-zfeg9hmw.js +2013 -0
  311. package/dist/index.js +241 -0
  312. package/dist/operations.js +29 -0
  313. package/dist/skill-install-dh0ntqba.js +10 -0
  314. package/dist/vectorize/worker.js +142 -0
  315. package/dist/workflow.js +16 -0
  316. package/docs/README.md +38 -0
  317. package/docs/studio.md +215 -0
  318. package/examples/studio/blender/README.md +26 -0
  319. package/examples/studio/blender/character.py +152 -0
  320. package/examples/studio/blender/cloth.py +101 -0
  321. package/examples/studio/blender/color_chart.py +29 -0
  322. package/examples/studio/blender/fluid.py +78 -0
  323. package/examples/studio/blender/import_model.py +74 -0
  324. package/examples/studio/blender/product.py +53 -0
  325. package/examples/studio/blender/shaded_street.py +481 -0
  326. package/examples/studio/blender/studio_scene.py +147 -0
  327. package/examples/studio/cadquery/README.md +13 -0
  328. package/examples/studio/cadquery/bracket.py +36 -0
  329. package/examples/studio/cadquery/import_step.py +12 -0
  330. package/examples/studio/education/README.md +46 -0
  331. package/examples/studio/education/lesson.json +99 -0
  332. package/examples/studio/education/scene.py +7 -0
  333. package/examples/studio/hybrid-scene.ts +96 -0
  334. package/examples/studio/native-workflow.ts +14 -0
  335. package/examples/studio/vgpu/README.md +64 -0
  336. package/examples/studio/vgpu/heat-field.mjs +290 -0
  337. package/package.json +304 -0
  338. package/packages/scene/src/index.ts +1 -0
  339. package/packages/scene/src/scene.ts +215 -0
  340. package/schema/diagram.schema.json +334 -0
  341. package/skills/slopcamera/SKILL.md +45 -0
  342. package/skills/slopcamera/agents/openai.yaml +4 -0
  343. package/skills/slopcamera/references/customization.md +77 -0
  344. package/skills/slopcamera/references/diagrams.md +153 -0
  345. package/skills/slopcamera/references/directed-scenes.md +42 -0
  346. package/skills/slopcamera/references/directing-video.md +18 -0
  347. package/skills/slopcamera/references/educational-video.md +26 -0
  348. package/skills/slopcamera/references/gateway-media.md +134 -0
  349. package/skills/slopcamera/references/install.md +62 -0
  350. package/skills/slopcamera/references/native-studio.md +31 -0
  351. package/skills/slopcamera/references/reference-led-3d.md +140 -0
  352. package/skills/slopcamera/references/rubber-stamp-examples/poster-example-1.jpg +0 -0
  353. package/skills/slopcamera/references/rubber-stamp-examples/poster-example-2.jpg +0 -0
  354. package/skills/slopcamera/references/rubber-stamp-examples/stamp-style-1.png +0 -0
  355. package/skills/slopcamera/references/rubber-stamp-examples/stamp-style-2.png +0 -0
  356. package/skills/slopcamera/references/rubber-stamp-field-notes.md +144 -0
  357. package/skills/slopcamera/references/vectorization.md +29 -0
  358. package/skills/slopcamera/references/video-projects.md +187 -0
  359. package/skills/slopcamera/references/visual-communication.md +120 -0
  360. package/skills/slopcamera/references/workflows-sdk.md +45 -0
  361. package/skills/slopcamera/scripts/compose-rubber-stamp-field-note.ts +229 -0
  362. package/src/artifacts.ts +106 -0
  363. package/src/assets/fonts/nebula-sans/LICENSE.txt +96 -0
  364. package/src/assets/fonts/nebula-sans/NebulaSans-Bold.otf +0 -0
  365. package/src/assets/fonts/nebula-sans/NebulaSans-Bold.woff2 +0 -0
  366. package/src/assets/fonts/nebula-sans/NebulaSans-Book.otf +0 -0
  367. package/src/assets/fonts/nebula-sans/NebulaSans-Book.woff2 +0 -0
  368. package/src/assets/fonts/nebula-sans/PROVENANCE.md +21 -0
  369. package/src/assets.d.ts +9 -0
  370. package/src/cli.ts +601 -0
  371. package/src/cloud-errors.ts +26 -0
  372. package/src/code/advanced.ts +10 -0
  373. package/src/code/boundary.ts +21 -0
  374. package/src/code/canonical-json.ts +129 -0
  375. package/src/code/compiler.ts +953 -0
  376. package/src/code/contracts.ts +576 -0
  377. package/src/code/define-workflow.ts +334 -0
  378. package/src/code/errors.ts +41 -0
  379. package/src/code/graph-builder.ts +945 -0
  380. package/src/code/index.ts +121 -0
  381. package/src/code/json-snapshot.ts +899 -0
  382. package/src/code/json-utf8.ts +88 -0
  383. package/src/code/portable-builder.ts +136 -0
  384. package/src/code/projection.ts +378 -0
  385. package/src/code/public-operations.ts +450 -0
  386. package/src/code/runtime.ts +580 -0
  387. package/src/code/sha256.ts +36 -0
  388. package/src/config.ts +180 -0
  389. package/src/desktop.ts +253 -0
  390. package/src/fs.ts +10 -0
  391. package/src/generate.ts +704 -0
  392. package/src/host-resource-posix.ts +161 -0
  393. package/src/host-resources.ts +1749 -0
  394. package/src/icons.ts +58 -0
  395. package/src/index.ts +200 -0
  396. package/src/label-layout.ts +130 -0
  397. package/src/layout.ts +413 -0
  398. package/src/lint.ts +127 -0
  399. package/src/mcp/boundary.ts +354 -0
  400. package/src/mcp/index.ts +33 -0
  401. package/src/mcp/server.ts +272 -0
  402. package/src/mcp/tools.ts +963 -0
  403. package/src/mcp/types.ts +71 -0
  404. package/src/operations.ts +775 -0
  405. package/src/parse.ts +861 -0
  406. package/src/process-environment.ts +17 -0
  407. package/src/render.ts +437 -0
  408. package/src/skill-install.ts +49 -0
  409. package/src/spatial-scene/authoring.ts +27 -0
  410. package/src/spatial-scene/camera-track.ts +83 -0
  411. package/src/spatial-scene/contracts.ts +277 -0
  412. package/src/spatial-scene/evaluate.ts +145 -0
  413. package/src/spatial-scene/gltf.ts +558 -0
  414. package/src/spatial-scene/identity.ts +260 -0
  415. package/src/spatial-scene/index.ts +10 -0
  416. package/src/spatial-scene/inspect.ts +68 -0
  417. package/src/spatial-scene/math.ts +280 -0
  418. package/src/spatial-scene/patch.ts +131 -0
  419. package/src/spatial-scene/time.ts +53 -0
  420. package/src/studio/contracts.ts +129 -0
  421. package/src/studio/index.ts +2 -0
  422. package/src/studio/plan.ts +156 -0
  423. package/src/studio/shared.ts +41 -0
  424. package/src/theme.ts +68 -0
  425. package/src/tldr.ts +474 -0
  426. package/src/types.ts +212 -0
  427. package/src/vectorize/archive.ts +101 -0
  428. package/src/vectorize/command.ts +797 -0
  429. package/src/vectorize/index.ts +27 -0
  430. package/src/vectorize/limits.ts +61 -0
  431. package/src/vectorize/metrics.ts +351 -0
  432. package/src/vectorize/pixels.ts +323 -0
  433. package/src/vectorize/supervisor.ts +339 -0
  434. package/src/vectorize/svg.ts +188 -0
  435. package/src/vectorize/tool.ts +542 -0
  436. package/src/vectorize/types.ts +113 -0
  437. package/src/vectorize/vectorize.ts +634 -0
  438. package/src/vectorize/worker-protocol.ts +40 -0
  439. package/src/vectorize/worker.ts +209 -0
  440. package/src/version.ts +1 -0
  441. package/src/workflow.ts +409 -0
@@ -0,0 +1,576 @@
1
+ import { z } from "zod"
2
+
3
+ export const WORKFLOW_GRAPH_VERSION = "slopcamera-workflow-graph-v2" as const
4
+ export const WORKFLOW_REF_VERSION = "slopcamera-workflow-ref-v1" as const
5
+ export const GRAPH_ABI = "slopcamera-workflow-graph-abi-v2" as const
6
+ export const REQUIREMENT_ENVELOPE_VERSION = "slopcamera-requirement-envelope-v2" as const
7
+ export const TRUSTED_COMPUTE_VERSION = 1 as const
8
+ export const WORKFLOW_COMPILATION_VERSION = "slopcamera-workflow-compilation-v1" as const
9
+ export const LEGACY_WORKFLOW_GRAPH_VERSION = "studio-workflow-graph-v2" as const
10
+ export const LEGACY_WORKFLOW_REF_VERSION = "studio-workflow-ref-v1" as const
11
+ export const LEGACY_GRAPH_ABI = "studio-workflow-graph-abi-v2" as const
12
+ export const LEGACY_REQUIREMENT_ENVELOPE_VERSION =
13
+ "studio-requirement-envelope-v2" as const
14
+
15
+ export const MAX_SERIALIZED_GRAPH_NODES = 4_096
16
+ export const MAX_SERIALIZED_NODE_DEPENDENCIES = 4_096
17
+ export const MAX_SERIALIZED_REF_PATH_SEGMENTS = 32
18
+ export const MAX_OPERATION_DISCOVERY_ENTRIES = 4_096
19
+ export const MAX_TRUSTED_COMPUTE_INPUT_BYTES = 2 * 1024 * 1024
20
+ export const MAX_TRUSTED_COMPUTE_OUTPUT_BYTES = 2 * 1024 * 1024
21
+ export const MAX_TRUSTED_COMPUTE_DURATION_MS = 5 * 60 * 1_000
22
+
23
+ const SAFE_IDENTIFIER_PATTERN = /^[a-z][a-z0-9]*(?:[-_.][a-z0-9]+)*$/u
24
+ const NODE_KEY_SEGMENT_PATTERN = /^[a-z][a-z0-9]*(?:[-_][a-z0-9]+)*$/u
25
+ const NODE_KEY_PATTERN = /^[a-z][a-z0-9]*(?:[-_][a-z0-9]+)*(?:\/[a-z][a-z0-9]*(?:[-_][a-z0-9]+)*)*$/u
26
+ const SCHEMA_ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._:/@-]*$/u
27
+ const OPERATION_KIND_PATTERN = /^[a-z][a-z0-9]*(?:[-_][a-z0-9]+)*(?:\.[a-z][a-z0-9]*(?:[-_][a-z0-9]+)*)+$/u
28
+ const SHA256_PATTERN = /^[a-f0-9]{64}$/u
29
+
30
+ export const WorkflowIdSchema = z.string().min(1).max(128).regex(SAFE_IDENTIFIER_PATTERN)
31
+ export const NodeKeySegmentSchema = z.string().min(1).max(64).regex(NODE_KEY_SEGMENT_PATTERN)
32
+ export const NodeKeySchema = z.string().min(1).max(255).regex(NODE_KEY_PATTERN)
33
+ export const SchemaIdSchema = z.string().min(1).max(192).regex(SCHEMA_ID_PATTERN)
34
+ export const ComputeKeySchema = z.string().min(1).max(192).regex(SCHEMA_ID_PATTERN)
35
+ export const OperationKindSchema = z.string().min(3).max(192).regex(OPERATION_KIND_PATTERN)
36
+ export const Sha256Schema = z.string().regex(SHA256_PATTERN)
37
+ export const PositiveSafeIntegerSchema = z.number().int().positive().max(Number.MAX_SAFE_INTEGER)
38
+ export const NonnegativeSafeIntegerSchema = z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER)
39
+ export const RefPathSegmentSchema = z.union([
40
+ z.string().min(1).max(128),
41
+ NonnegativeSafeIntegerSchema,
42
+ ])
43
+
44
+ export type OperationKind = z.infer<typeof OperationKindSchema>
45
+ export type JsonPrimitive = boolean | null | number | string
46
+ export type JsonValue =
47
+ | JsonPrimitive
48
+ | readonly JsonValue[]
49
+ | { readonly [key: string]: JsonValue }
50
+
51
+ const JsonObjectKeySchema = z.string().refine(
52
+ key => key !== "__proto__",
53
+ "JSON object keys must not use the reserved __proto__ name.",
54
+ )
55
+
56
+ const RESERVED_JSON_OBJECT = Symbol("reserved-json-object")
57
+
58
+ function rejectReservedJsonObjectKey(value: unknown): unknown {
59
+ return (
60
+ typeof value === "object"
61
+ && value !== null
62
+ && !Array.isArray(value)
63
+ && Object.hasOwn(value, "__proto__")
64
+ )
65
+ ? RESERVED_JSON_OBJECT
66
+ : value
67
+ }
68
+
69
+ export const JsonValueSchema: z.ZodType<JsonValue> = z.lazy(() => z.preprocess(
70
+ rejectReservedJsonObjectKey,
71
+ z.union([
72
+ z.null(),
73
+ z.boolean(),
74
+ z.number().finite(),
75
+ z.string(),
76
+ z.array(JsonValueSchema),
77
+ z.record(JsonObjectKeySchema, JsonValueSchema),
78
+ ]),
79
+ ))
80
+
81
+ export const SerializedRefV1Schema = z.strictObject({
82
+ $ref: z.strictObject({
83
+ nodeKey: NodeKeySchema,
84
+ path: z.array(RefPathSegmentSchema)
85
+ .max(MAX_SERIALIZED_REF_PATH_SEGMENTS)
86
+ .optional(),
87
+ schemaId: SchemaIdSchema,
88
+ }),
89
+ version: z.union([
90
+ z.literal(WORKFLOW_REF_VERSION),
91
+ z.literal(LEGACY_WORKFLOW_REF_VERSION),
92
+ ]),
93
+ })
94
+
95
+ export type SerializedRefV1 = z.infer<typeof SerializedRefV1Schema>
96
+
97
+ export type GraphInputValue =
98
+ | JsonPrimitive
99
+ | SerializedRefV1
100
+ | readonly GraphInputValue[]
101
+ | { readonly [key: string]: GraphInputValue }
102
+
103
+ const GraphInputObjectSchema: z.ZodType<Readonly<Record<string, GraphInputValue>>> = z.lazy(
104
+ () => z.record(JsonObjectKeySchema, GraphInputValueSchema).superRefine((value, context) => {
105
+ if (Object.hasOwn(value, "$ref")) {
106
+ context.addIssue({
107
+ code: "custom",
108
+ message: "The reserved $ref field must contain a complete versioned workflow reference.",
109
+ })
110
+ }
111
+ }),
112
+ )
113
+
114
+ export const GraphInputValueSchema: z.ZodType<GraphInputValue> = z.lazy(() => z.preprocess(
115
+ rejectReservedJsonObjectKey,
116
+ z.union([
117
+ SerializedRefV1Schema,
118
+ z.null(),
119
+ z.boolean(),
120
+ z.number().finite(),
121
+ z.string(),
122
+ z.array(GraphInputValueSchema),
123
+ GraphInputObjectSchema,
124
+ ]),
125
+ ))
126
+
127
+ export type WorkflowOutputBinding =
128
+ | SerializedRefV1
129
+ | readonly WorkflowOutputBinding[]
130
+ | { readonly [key: string]: WorkflowOutputBinding }
131
+
132
+ const WorkflowOutputObjectSchema: z.ZodType<Readonly<Record<string, WorkflowOutputBinding>>> = z.lazy(
133
+ () => z.record(JsonObjectKeySchema, WorkflowOutputBindingSchema).superRefine((value, context) => {
134
+ if (Object.hasOwn(value, "$ref")) {
135
+ context.addIssue({
136
+ code: "custom",
137
+ message: "The reserved $ref field must contain a complete versioned workflow reference.",
138
+ })
139
+ }
140
+ }),
141
+ )
142
+
143
+ export const WorkflowOutputBindingSchema: z.ZodType<WorkflowOutputBinding> = z.lazy(
144
+ () => z.preprocess(
145
+ rejectReservedJsonObjectKey,
146
+ z.union([
147
+ SerializedRefV1Schema,
148
+ z.array(WorkflowOutputBindingSchema),
149
+ WorkflowOutputObjectSchema,
150
+ ]),
151
+ ),
152
+ )
153
+
154
+ export const AuthoredOperationIdentitySchema = z.strictObject({
155
+ kind: OperationKindSchema,
156
+ version: PositiveSafeIntegerSchema,
157
+ })
158
+
159
+ export type AuthoredOperationIdentity = z.infer<typeof AuthoredOperationIdentitySchema>
160
+
161
+ export const AuthoredComputeIdentitySchema = z.strictObject({
162
+ bounds: z.strictObject({
163
+ maxDurationMs: PositiveSafeIntegerSchema.max(MAX_TRUSTED_COMPUTE_DURATION_MS),
164
+ maxInputBytes: PositiveSafeIntegerSchema.max(MAX_TRUSTED_COMPUTE_INPUT_BYTES),
165
+ maxOutputBytes: PositiveSafeIntegerSchema.max(MAX_TRUSTED_COMPUTE_OUTPUT_BYTES),
166
+ }),
167
+ key: ComputeKeySchema,
168
+ version: z.literal(TRUSTED_COMPUTE_VERSION),
169
+ })
170
+
171
+ export const AuthoredNodeExecutorSchema = z.discriminatedUnion("kind", [
172
+ z.strictObject({
173
+ kind: z.literal("operation"),
174
+ operation: AuthoredOperationIdentitySchema,
175
+ }),
176
+ z.strictObject({
177
+ compute: AuthoredComputeIdentitySchema,
178
+ kind: z.literal("compute"),
179
+ }),
180
+ ])
181
+
182
+ export type AuthoredNodeExecutor = z.infer<typeof AuthoredNodeExecutorSchema>
183
+
184
+ export const AuthoredGraphNodeV1Schema = z.strictObject({
185
+ controlDependencies: z.array(NodeKeySchema)
186
+ .max(MAX_SERIALIZED_NODE_DEPENDENCIES)
187
+ .optional(),
188
+ dependencies: z.array(NodeKeySchema).max(MAX_SERIALIZED_NODE_DEPENDENCIES),
189
+ executor: AuthoredNodeExecutorSchema,
190
+ input: GraphInputValueSchema,
191
+ inputSchemaId: SchemaIdSchema,
192
+ key: NodeKeySchema,
193
+ label: z.string().min(1).max(160).optional(),
194
+ outputSchemaId: SchemaIdSchema,
195
+ })
196
+
197
+ export type AuthoredGraphNodeV1 = z.infer<typeof AuthoredGraphNodeV1Schema>
198
+ export type AuthoredOperationGraphNodeV1 = Omit<AuthoredGraphNodeV1, "executor"> & {
199
+ readonly executor: Extract<AuthoredNodeExecutor, { readonly kind: "operation" }>
200
+ }
201
+ export type AuthoredComputeGraphNodeV1 = Omit<AuthoredGraphNodeV1, "executor"> & {
202
+ readonly executor: Extract<AuthoredNodeExecutor, { readonly kind: "compute" }>
203
+ }
204
+
205
+ export function isOperationGraphNode(
206
+ node: AuthoredGraphNodeV1,
207
+ ): node is AuthoredOperationGraphNodeV1 {
208
+ return node.executor.kind === "operation"
209
+ }
210
+
211
+ export function isComputeGraphNode(
212
+ node: AuthoredGraphNodeV1,
213
+ ): node is AuthoredComputeGraphNodeV1 {
214
+ return node.executor.kind === "compute"
215
+ }
216
+
217
+ export const WorkflowIdentitySchema = z.strictObject({
218
+ id: WorkflowIdSchema,
219
+ inputSchemaId: SchemaIdSchema,
220
+ version: PositiveSafeIntegerSchema,
221
+ })
222
+
223
+ export type WorkflowIdentity = z.infer<typeof WorkflowIdentitySchema>
224
+
225
+ export const AuthoredWorkflowGraphV1Schema = z.strictObject({
226
+ nodes: z.array(AuthoredGraphNodeV1Schema).min(1).max(MAX_SERIALIZED_GRAPH_NODES),
227
+ outputs: WorkflowOutputBindingSchema,
228
+ version: z.union([
229
+ z.literal(WORKFLOW_GRAPH_VERSION),
230
+ z.literal(LEGACY_WORKFLOW_GRAPH_VERSION),
231
+ ]),
232
+ workflow: WorkflowIdentitySchema,
233
+ })
234
+
235
+ export type AuthoredWorkflowGraphV1 = z.infer<typeof AuthoredWorkflowGraphV1Schema>
236
+
237
+ export const OPERATION_EFFECT_CLASSES = Object.freeze([
238
+ "pure",
239
+ "local-read",
240
+ "local-derived-write",
241
+ "project-mutation",
242
+ "paid-cloud",
243
+ "live-control",
244
+ ] as const)
245
+ export type OperationEffectClass = typeof OPERATION_EFFECT_CLASSES[number]
246
+
247
+ export const WORKFLOW_EFFECT_CLASSES = Object.freeze([
248
+ ...OPERATION_EFFECT_CLASSES,
249
+ "trusted-code",
250
+ ] as const)
251
+ export type WorkflowEffectClass = typeof WORKFLOW_EFFECT_CLASSES[number]
252
+
253
+ export const OPERATION_RESUME_CLASSES = Object.freeze([
254
+ "deterministic",
255
+ "verified-receipt",
256
+ "recoverable-transaction",
257
+ "ambiguous-after-dispatch",
258
+ "non-resumable-live",
259
+ ] as const)
260
+ export type OperationResumeClass = typeof OPERATION_RESUME_CLASSES[number]
261
+
262
+ export const WORKFLOW_RESUME_CLASSES = Object.freeze([
263
+ ...OPERATION_RESUME_CLASSES,
264
+ "explicit-code-replay",
265
+ ] as const)
266
+ export type WorkflowResumeClass = typeof WORKFLOW_RESUME_CLASSES[number]
267
+
268
+ export const OPERATION_PREPARATION_KINDS = Object.freeze([
269
+ "project-state",
270
+ "recording-metadata",
271
+ "screen-capture",
272
+ "camera",
273
+ "microphone",
274
+ "system-audio",
275
+ "typed-text",
276
+ "window-metadata",
277
+ "local-media",
278
+ "provider-options",
279
+ ] as const)
280
+ export type OperationPreparationKind = typeof OPERATION_PREPARATION_KINDS[number]
281
+
282
+ export const OPERATION_LIFECYCLE_KINDS = Object.freeze([
283
+ "pure",
284
+ "local-artifact",
285
+ "project-transaction",
286
+ "paid-dispatch",
287
+ "live-control",
288
+ ] as const)
289
+ export type OperationLifecycleKind = typeof OPERATION_LIFECYCLE_KINDS[number]
290
+
291
+ export const OPERATION_RESOURCE_KINDS = Object.freeze([
292
+ "cpu",
293
+ "local-io",
294
+ "ffmpeg",
295
+ "vision",
296
+ "whisper",
297
+ "network",
298
+ "paid-call",
299
+ "project-render",
300
+ "project-publication",
301
+ "output-publication",
302
+ "capture-device",
303
+ "browser",
304
+ ] as const)
305
+ export type OperationResourceKind = typeof OPERATION_RESOURCE_KINDS[number]
306
+
307
+ export const OperationResourceClaimSchema = z.strictObject({
308
+ amount: PositiveSafeIntegerSchema,
309
+ resource: z.enum(OPERATION_RESOURCE_KINDS),
310
+ })
311
+ export interface OperationResourceClaim {
312
+ readonly amount: number
313
+ readonly resource: OperationResourceKind
314
+ }
315
+
316
+ export const OperationPolicySchema = z.strictObject({
317
+ cache: z.enum(["none", "exact-run", "content-addressed"]),
318
+ cancellable: z.boolean(),
319
+ effect: z.enum(OPERATION_EFFECT_CLASSES),
320
+ maxDurationMs: PositiveSafeIntegerSchema,
321
+ maxFanOut: NonnegativeSafeIntegerSchema,
322
+ maxInputBytes: NonnegativeSafeIntegerSchema,
323
+ maxOutputBytes: NonnegativeSafeIntegerSchema,
324
+ preparation: z.array(z.enum(OPERATION_PREPARATION_KINDS))
325
+ .max(OPERATION_PREPARATION_KINDS.length),
326
+ resources: z.array(OperationResourceClaimSchema)
327
+ .max(OPERATION_RESOURCE_KINDS.length),
328
+ resume: z.enum(OPERATION_RESUME_CLASSES),
329
+ }) satisfies z.ZodType<OperationPolicy>
330
+ export interface OperationPolicy {
331
+ readonly cache: "none" | "exact-run" | "content-addressed"
332
+ readonly cancellable: boolean
333
+ readonly effect: OperationEffectClass
334
+ readonly maxDurationMs: number
335
+ readonly maxFanOut: number
336
+ readonly maxInputBytes: number
337
+ readonly maxOutputBytes: number
338
+ readonly preparation: readonly OperationPreparationKind[]
339
+ readonly resources: readonly OperationResourceClaim[]
340
+ readonly resume: OperationResumeClass
341
+ }
342
+
343
+ export const TrustedComputePolicySchema = z.strictObject({
344
+ cache: z.literal("exact-run"),
345
+ cancellable: z.literal(true),
346
+ effect: z.literal("trusted-code"),
347
+ maxDurationMs: PositiveSafeIntegerSchema.max(MAX_TRUSTED_COMPUTE_DURATION_MS),
348
+ maxFanOut: z.literal(0),
349
+ maxInputBytes: PositiveSafeIntegerSchema.max(MAX_TRUSTED_COMPUTE_INPUT_BYTES),
350
+ maxOutputBytes: PositiveSafeIntegerSchema.max(MAX_TRUSTED_COMPUTE_OUTPUT_BYTES),
351
+ preparation: z.tuple([]),
352
+ resources: z.tuple([
353
+ z.strictObject({ amount: z.literal(1), resource: z.literal("cpu") }),
354
+ ]),
355
+ resume: z.literal("explicit-code-replay"),
356
+ })
357
+ export type TrustedComputePolicy = z.infer<typeof TrustedComputePolicySchema>
358
+ export const WorkflowNodePolicySchema = z.union([
359
+ OperationPolicySchema,
360
+ TrustedComputePolicySchema,
361
+ ])
362
+ export type WorkflowNodePolicy = OperationPolicy | TrustedComputePolicy
363
+
364
+ export function trustedComputePolicy(
365
+ compute: z.infer<typeof AuthoredComputeIdentitySchema>,
366
+ ): TrustedComputePolicy {
367
+ return TrustedComputePolicySchema.parse({
368
+ cache: "exact-run",
369
+ cancellable: true,
370
+ effect: "trusted-code",
371
+ maxDurationMs: compute.bounds.maxDurationMs,
372
+ maxFanOut: 0,
373
+ maxInputBytes: compute.bounds.maxInputBytes,
374
+ maxOutputBytes: compute.bounds.maxOutputBytes,
375
+ preparation: [],
376
+ resources: [{ amount: 1, resource: "cpu" }],
377
+ resume: "explicit-code-replay",
378
+ })
379
+ }
380
+
381
+ export const OperationDiscoverySchema = z.strictObject({
382
+ inputSchemaId: SchemaIdSchema,
383
+ kind: OperationKindSchema,
384
+ lifecycle: z.enum(OPERATION_LIFECYCLE_KINDS),
385
+ outputSchemaId: SchemaIdSchema,
386
+ policy: OperationPolicySchema,
387
+ version: PositiveSafeIntegerSchema,
388
+ }) satisfies z.ZodType<OperationDiscovery>
389
+ export interface OperationDiscovery {
390
+ readonly inputSchemaId: string
391
+ readonly kind: OperationKind
392
+ readonly lifecycle: OperationLifecycleKind
393
+ readonly outputSchemaId: string
394
+ readonly policy: OperationPolicy
395
+ readonly version: number
396
+ }
397
+
398
+ export interface OperationDiscoverySource {
399
+ list(): readonly OperationDiscovery[]
400
+ }
401
+
402
+ export const WorkflowRegistryProjectionSchema = z.strictObject({
403
+ discovery: z.array(OperationDiscoverySchema).max(MAX_OPERATION_DISCOVERY_ENTRIES),
404
+ id: SchemaIdSchema,
405
+ projectionSha256: Sha256Schema,
406
+ trustedCompute: z.boolean(),
407
+ }) satisfies z.ZodType<WorkflowRegistryProjection>
408
+ export interface WorkflowRegistryProjection {
409
+ readonly discovery: readonly OperationDiscovery[]
410
+ readonly id: string
411
+ readonly projectionSha256: string
412
+ readonly trustedCompute: boolean
413
+ }
414
+
415
+ export const GraphCompilerLimitsSchema = z.strictObject({
416
+ maxDepth: PositiveSafeIntegerSchema,
417
+ maxEdges: NonnegativeSafeIntegerSchema,
418
+ maxFanOut: NonnegativeSafeIntegerSchema,
419
+ maxNodes: PositiveSafeIntegerSchema.max(MAX_SERIALIZED_GRAPH_NODES),
420
+ maxTotalOperationFanOut: NonnegativeSafeIntegerSchema,
421
+ }) satisfies z.ZodType<GraphCompilerLimits>
422
+ export interface GraphCompilerLimits {
423
+ readonly maxDepth: number
424
+ readonly maxEdges: number
425
+ readonly maxFanOut: number
426
+ readonly maxNodes: number
427
+ readonly maxTotalOperationFanOut: number
428
+ }
429
+
430
+ export const UNRESOLVED_REQUIREMENT_KINDS = Object.freeze([
431
+ "dependency-outputs",
432
+ "exact-media-hashes",
433
+ "exact-sensitive-metadata-hashes",
434
+ "prices",
435
+ "project-generations",
436
+ "render-plans",
437
+ ] as const)
438
+
439
+ export const RequirementEnvelopeBoundsSchema = z.strictObject({
440
+ depth: NonnegativeSafeIntegerSchema,
441
+ edges: NonnegativeSafeIntegerSchema,
442
+ localMediaUploadNodes: NonnegativeSafeIntegerSchema,
443
+ maxDurationMs: NonnegativeSafeIntegerSchema,
444
+ maxInputBytes: NonnegativeSafeIntegerSchema,
445
+ maxOutputBytes: NonnegativeSafeIntegerSchema,
446
+ nodes: NonnegativeSafeIntegerSchema,
447
+ paidCallClaims: NonnegativeSafeIntegerSchema,
448
+ structuralFanOut: NonnegativeSafeIntegerSchema,
449
+ totalOperationFanOut: NonnegativeSafeIntegerSchema,
450
+ })
451
+
452
+ export const RequirementEnvelopeSchema = z.strictObject({
453
+ bounds: RequirementEnvelopeBoundsSchema,
454
+ computeKeys: z.array(ComputeKeySchema).max(MAX_SERIALIZED_GRAPH_NODES),
455
+ effects: z.array(z.enum(WORKFLOW_EFFECT_CLASSES)).max(WORKFLOW_EFFECT_CLASSES.length),
456
+ operationFamilies: z.array(NodeKeySegmentSchema).max(MAX_SERIALIZED_GRAPH_NODES),
457
+ operationKinds: z.array(OperationKindSchema).max(MAX_SERIALIZED_GRAPH_NODES),
458
+ preparation: z.array(z.enum(OPERATION_PREPARATION_KINDS))
459
+ .max(OPERATION_PREPARATION_KINDS.length),
460
+ resources: z.array(OperationResourceClaimSchema).max(OPERATION_RESOURCE_KINDS.length),
461
+ resumeClasses: z.array(z.enum(WORKFLOW_RESUME_CLASSES))
462
+ .max(WORKFLOW_RESUME_CLASSES.length),
463
+ unresolved: z.array(z.enum(UNRESOLVED_REQUIREMENT_KINDS))
464
+ .max(UNRESOLVED_REQUIREMENT_KINDS.length),
465
+ version: z.union([
466
+ z.literal(REQUIREMENT_ENVELOPE_VERSION),
467
+ z.literal(LEGACY_REQUIREMENT_ENVELOPE_VERSION),
468
+ ]),
469
+ })
470
+ export type RequirementEnvelope = z.infer<typeof RequirementEnvelopeSchema>
471
+
472
+ export const CompiledWorkflowGraphSchema = z.strictObject({
473
+ compilationSha256: Sha256Schema,
474
+ envelope: RequirementEnvelopeSchema,
475
+ graph: AuthoredWorkflowGraphV1Schema,
476
+ graphSha256: Sha256Schema,
477
+ limits: GraphCompilerLimitsSchema,
478
+ projection: WorkflowRegistryProjectionSchema,
479
+ topologicalWaves: z.array(z.array(NodeKeySchema).min(1))
480
+ .max(MAX_SERIALIZED_GRAPH_NODES),
481
+ version: z.literal(WORKFLOW_COMPILATION_VERSION),
482
+ }) satisfies z.ZodType<CompiledWorkflowGraph>
483
+ export interface CompiledWorkflowGraph {
484
+ readonly compilationSha256: string
485
+ readonly envelope: RequirementEnvelope
486
+ readonly graph: AuthoredWorkflowGraphV1
487
+ readonly graphSha256: string
488
+ readonly limits: GraphCompilerLimits
489
+ readonly projection: WorkflowRegistryProjection
490
+ readonly topologicalWaves: readonly (readonly string[])[]
491
+ readonly version: typeof WORKFLOW_COMPILATION_VERSION
492
+ }
493
+
494
+ export interface OperationContract<Input, Output> {
495
+ readonly inputSchemaId: string
496
+ readonly kind: OperationKind
497
+ readonly outputSchemaId: string
498
+ readonly version: number
499
+ readonly __input?: (input: Input) => Input
500
+ readonly __output?: (output: Output) => Output
501
+ }
502
+
503
+ export const TRUSTED_COMPUTE_BRAND: unique symbol = Symbol.for(
504
+ "slopcamera.trusted-compute-definition",
505
+ ) as never
506
+ export const LEGACY_TRUSTED_COMPUTE_BRAND: unique symbol = Symbol.for(
507
+ "studio.trusted-compute-definition",
508
+ ) as never
509
+
510
+ export interface TrustedComputeDefinition<Input, Output> {
511
+ readonly [TRUSTED_COMPUTE_BRAND]: true
512
+ readonly bounds: {
513
+ readonly maxDurationMs: number
514
+ readonly maxInputBytes: number
515
+ readonly maxOutputBytes: number
516
+ }
517
+ readonly inputSchema: z.ZodType<Input>
518
+ readonly inputSchemaId: string
519
+ readonly key: string
520
+ readonly outputSchema: z.ZodType<Output>
521
+ readonly outputSchemaId: string
522
+ run(input: Input, context: {
523
+ readonly abortSignal: AbortSignal
524
+ readonly nodeKey: string
525
+ readonly replayAcknowledged: boolean
526
+ }): Output | Promise<Output>
527
+ }
528
+
529
+ export type AnyTrustedComputeDefinition = TrustedComputeDefinition<unknown, unknown>
530
+
531
+ export type OperationInputValue<Value> =
532
+ | Ref<Value>
533
+ | (
534
+ Value extends JsonPrimitive
535
+ ? Value
536
+ : Value extends readonly (infer Item)[]
537
+ ? readonly OperationInputValue<Item>[]
538
+ : Value extends object
539
+ ? { readonly [Key in keyof Value]: OperationInputValue<Value[Key]> }
540
+ : never
541
+ )
542
+
543
+ export const WORKFLOW_REF_BRAND: unique symbol = Symbol.for(
544
+ "slopcamera.workflow-ref",
545
+ ) as never
546
+
547
+ interface RefIdentity<Value> {
548
+ readonly [WORKFLOW_REF_BRAND]: () => Value
549
+ readonly serialized: SerializedRefV1
550
+ }
551
+
552
+ type RefArrayProjection<Value> =
553
+ [Value] extends [readonly (infer Item)[]]
554
+ ? { at(index: number): Ref<Item> }
555
+ : object
556
+
557
+ type RefObjectProjection<Value> =
558
+ [Value] extends [readonly unknown[]]
559
+ ? object
560
+ : [Value] extends [object]
561
+ ? { select<Key extends Extract<keyof Value, string>>(key: Key): Ref<Value[Key]> }
562
+ : object
563
+
564
+ export type Ref<Value> =
565
+ & RefIdentity<Value>
566
+ & RefArrayProjection<Value>
567
+ & RefObjectProjection<Value>
568
+
569
+ export type RefValue<Reference> = Reference extends Ref<infer Value> ? Value : never
570
+
571
+ export type WorkflowOutputValue =
572
+ | Ref<unknown>
573
+ | readonly WorkflowOutputValue[]
574
+ | { readonly [key: string]: WorkflowOutputValue }
575
+
576
+ export type OperationResourceTotals = Readonly<Record<OperationResourceKind, number>>