@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,450 @@
1
+ import { z } from "zod"
2
+
3
+ import {
4
+ type OperationContract,
5
+ type OperationLifecycleKind,
6
+ type OperationPolicy,
7
+ } from "./contracts.js"
8
+ import { utf8ByteLength } from "./json-utf8.js"
9
+
10
+ const MAX_PATH_CHARACTERS = 4_096
11
+ const MAX_PROMPT_BYTES = 32 * 1024
12
+ const MAX_GENERATED_IMAGE_BYTES = 64 * 1024 * 1024
13
+ const MAX_VECTOR_INPUT_BYTES = 16 * 1024 * 1024
14
+ const MAX_VECTOR_OUTPUT_BYTES = 2_000_000
15
+ const MAX_DIAGRAM_ARTIFACT_BYTES = 64 * 1024 * 1024
16
+
17
+ const BoundedPathSchema = z.string()
18
+ .min(1)
19
+ .max(MAX_PATH_CHARACTERS)
20
+ .refine(value => !value.includes("\0"), "Paths must not contain NUL bytes.")
21
+
22
+ const Sha256Schema = z.string().regex(/^[a-f0-9]{64}$/u)
23
+ const BoundedVersionStringSchema = z.string().min(1).max(256)
24
+ const NonnegativeSafeIntegerSchema = z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER)
25
+ const PositiveSafeIntegerSchema = z.number().int().positive().max(Number.MAX_SAFE_INTEGER)
26
+
27
+ function schemaWithReadonlyOutput<Output>(
28
+ schema: z.ZodType,
29
+ ): z.ZodType<Output> {
30
+ return schema as z.ZodType<Output>
31
+ }
32
+
33
+ export type SlopcameraImageModel = string
34
+
35
+ export interface SlopcameraDiagramCheckInput {
36
+ readonly path: string
37
+ }
38
+
39
+ export interface SlopcameraDiagramRenderInput extends SlopcameraDiagramCheckInput {
40
+ readonly outDirectory?: string
41
+ readonly scale?: number
42
+ }
43
+
44
+ export interface SlopcameraImageVectorizeInput {
45
+ readonly alphaCutoff?: number
46
+ readonly duotone?: readonly [string, string]
47
+ readonly inputPath: string
48
+ readonly outputPath: string
49
+ readonly timeoutMs?: number
50
+ }
51
+
52
+ export interface SlopcameraImageGenerateInput {
53
+ readonly model: SlopcameraImageModel
54
+ readonly outputPath: string
55
+ readonly prompt: string
56
+ }
57
+
58
+ export interface SlopcameraLintFinding {
59
+ readonly code: string
60
+ readonly message: string
61
+ readonly shapeIds: readonly string[]
62
+ }
63
+
64
+ export interface SlopcameraDiagramCheckOutput {
65
+ readonly configPath: null
66
+ readonly findings: readonly SlopcameraLintFinding[]
67
+ }
68
+
69
+ export interface SlopcameraRenderArtifacts {
70
+ readonly darkPng: string
71
+ readonly darkSvg: string
72
+ readonly lightPng: string
73
+ readonly lightSvg: string
74
+ readonly spec: string
75
+ readonly tldr: string
76
+ }
77
+
78
+ export interface SlopcameraDiagramRenderOutput {
79
+ readonly artifacts: SlopcameraRenderArtifacts
80
+ readonly configPath: null
81
+ readonly findings: readonly SlopcameraLintFinding[]
82
+ }
83
+
84
+ export interface SlopcameraVectorizeQualityReceipt {
85
+ readonly alphaRmse: number
86
+ readonly colorRmse: number
87
+ readonly outsideAlphaRatio: number
88
+ readonly sampleHeight: number
89
+ readonly sampleWidth: number
90
+ readonly supportRecall: number
91
+ }
92
+
93
+ export interface SlopcameraVectorizeProvenance {
94
+ readonly arch: string
95
+ readonly platform: string
96
+ readonly sharp: string
97
+ readonly sharpVersions: Readonly<Record<string, string>>
98
+ readonly vips: string
99
+ readonly vtracerSha256: string
100
+ readonly vtracerSource: "official-release" | "override"
101
+ readonly vtracerVersion: string
102
+ }
103
+
104
+ export interface SlopcameraVectorizeReceipt {
105
+ readonly alphaCutoff: number
106
+ readonly bytes: number
107
+ readonly candidatesEvaluated: number
108
+ readonly format: string
109
+ readonly height: number
110
+ readonly inputBytes: number
111
+ readonly outputMode: "color" | "duotone"
112
+ readonly pathCount: number
113
+ readonly profile: "balanced" | "detailed" | "photo"
114
+ readonly provenance: SlopcameraVectorizeProvenance
115
+ readonly quality: SlopcameraVectorizeQualityReceipt
116
+ readonly receiptVersion: 1
117
+ readonly representation: "color-paths" | "alpha-mask"
118
+ readonly sourceSha256: string
119
+ readonly svgSha256: string
120
+ readonly width: number
121
+ }
122
+
123
+ export interface SlopcameraImageVectorizeOutput {
124
+ readonly outputPath: string
125
+ readonly receipt: SlopcameraVectorizeReceipt
126
+ }
127
+
128
+ export interface SlopcameraImageGenerateOutput {
129
+ readonly bytes: number
130
+ readonly mediaType: "image/jpeg" | "image/png" | "image/webp"
131
+ readonly model: SlopcameraImageModel
132
+ readonly outputPath: string
133
+ readonly provider: "vercel-ai-gateway"
134
+ readonly requestId: string
135
+ readonly sha256: string
136
+ readonly warnings: readonly string[]
137
+ }
138
+
139
+ export const SlopcameraImageModelSchema = z.string()
140
+ .min(3)
141
+ .max(256)
142
+ .regex(/^[a-z0-9][a-z0-9._-]*\/[a-z0-9][a-z0-9._:-]*$/iu) satisfies z.ZodType<SlopcameraImageModel>
143
+
144
+ export const SlopcameraDiagramCheckInputSchema = z.strictObject({
145
+ path: BoundedPathSchema,
146
+ }) satisfies z.ZodType<SlopcameraDiagramCheckInput>
147
+
148
+ export const SlopcameraDiagramRenderInputSchema = schemaWithReadonlyOutput<
149
+ SlopcameraDiagramRenderInput
150
+ >(z.strictObject({
151
+ outDirectory: BoundedPathSchema.optional(),
152
+ path: BoundedPathSchema,
153
+ scale: z.number().finite().positive().max(4).optional(),
154
+ }))
155
+
156
+ export const SlopcameraImageVectorizeInputSchema = schemaWithReadonlyOutput<
157
+ SlopcameraImageVectorizeInput
158
+ >(z.strictObject({
159
+ alphaCutoff: z.number().int().min(1).max(64).optional(),
160
+ duotone: z.tuple([
161
+ z.string().regex(/^#[a-f0-9]{3}(?:[a-f0-9]{3})?$/iu),
162
+ z.string().regex(/^#[a-f0-9]{3}(?:[a-f0-9]{3})?$/iu),
163
+ ]).optional(),
164
+ inputPath: BoundedPathSchema,
165
+ outputPath: BoundedPathSchema.refine(
166
+ value => value.toLowerCase().endsWith(".svg"),
167
+ "Vector output paths must end in .svg.",
168
+ ),
169
+ timeoutMs: z.number().int().min(1).max(300_000).optional(),
170
+ }))
171
+
172
+ const PromptSchema = z.string().superRefine((value, context) => {
173
+ if (utf8ByteLength(value, MAX_PROMPT_BYTES) === undefined) {
174
+ context.addIssue({
175
+ code: "custom",
176
+ message: `Prompts must contain at most ${String(MAX_PROMPT_BYTES)} UTF-8 bytes.`,
177
+ })
178
+ return
179
+ }
180
+ if (value.trim().length === 0) {
181
+ context.addIssue({ code: "custom", message: "Prompts must not be blank." })
182
+ return
183
+ }
184
+ if (/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/u.test(value)) {
185
+ context.addIssue({
186
+ code: "custom",
187
+ message: "Prompts must not contain control characters.",
188
+ })
189
+ }
190
+ })
191
+
192
+ export const SlopcameraImageGenerateInputSchema = schemaWithReadonlyOutput<
193
+ SlopcameraImageGenerateInput
194
+ >(z.strictObject({
195
+ model: SlopcameraImageModelSchema,
196
+ outputPath: BoundedPathSchema.refine(
197
+ value => /\.(?:jpe?g|png|webp)$/iu.test(value),
198
+ "Generated image output paths must end in .png, .jpg, .jpeg, or .webp.",
199
+ ),
200
+ prompt: PromptSchema,
201
+ }))
202
+
203
+ export const SlopcameraLintFindingSchema = z.strictObject({
204
+ code: z.string().min(1).max(160),
205
+ message: z.string().min(1).max(4_096),
206
+ shapeIds: z.array(z.string().min(1).max(256)).max(4_096),
207
+ }) satisfies z.ZodType<SlopcameraLintFinding>
208
+
209
+ export const SlopcameraDiagramCheckOutputSchema = z.strictObject({
210
+ configPath: z.null(),
211
+ findings: z.array(SlopcameraLintFindingSchema).max(4_096),
212
+ }) satisfies z.ZodType<SlopcameraDiagramCheckOutput>
213
+
214
+ export const SlopcameraRenderArtifactsSchema = z.strictObject({
215
+ darkPng: BoundedPathSchema,
216
+ darkSvg: BoundedPathSchema,
217
+ lightPng: BoundedPathSchema,
218
+ lightSvg: BoundedPathSchema,
219
+ spec: BoundedPathSchema,
220
+ tldr: BoundedPathSchema,
221
+ }) satisfies z.ZodType<SlopcameraRenderArtifacts>
222
+
223
+ export const SlopcameraDiagramRenderOutputSchema = z.strictObject({
224
+ artifacts: SlopcameraRenderArtifactsSchema,
225
+ configPath: z.null(),
226
+ findings: z.array(SlopcameraLintFindingSchema).max(4_096),
227
+ }) satisfies z.ZodType<SlopcameraDiagramRenderOutput>
228
+
229
+ export const SlopcameraVectorizeQualityReceiptSchema = z.strictObject({
230
+ alphaRmse: z.number().finite().nonnegative(),
231
+ colorRmse: z.number().finite().nonnegative(),
232
+ outsideAlphaRatio: z.number().finite().min(0).max(1),
233
+ sampleHeight: PositiveSafeIntegerSchema,
234
+ sampleWidth: PositiveSafeIntegerSchema,
235
+ supportRecall: z.number().finite().min(0).max(1),
236
+ }) satisfies z.ZodType<SlopcameraVectorizeQualityReceipt>
237
+
238
+ export const SlopcameraVectorizeProvenanceSchema = z.strictObject({
239
+ arch: BoundedVersionStringSchema,
240
+ platform: BoundedVersionStringSchema,
241
+ sharp: BoundedVersionStringSchema,
242
+ sharpVersions: z.record(
243
+ z.string().min(1).max(128),
244
+ BoundedVersionStringSchema,
245
+ ),
246
+ vips: BoundedVersionStringSchema,
247
+ vtracerSha256: Sha256Schema,
248
+ vtracerSource: z.enum(["official-release", "override"]),
249
+ vtracerVersion: BoundedVersionStringSchema,
250
+ }) satisfies z.ZodType<SlopcameraVectorizeProvenance>
251
+
252
+ export const SlopcameraVectorizeReceiptSchema = z.strictObject({
253
+ alphaCutoff: z.number().int().min(1).max(64),
254
+ bytes: NonnegativeSafeIntegerSchema.max(MAX_VECTOR_OUTPUT_BYTES),
255
+ candidatesEvaluated: PositiveSafeIntegerSchema,
256
+ format: z.string().min(1).max(80),
257
+ height: PositiveSafeIntegerSchema.max(4_096),
258
+ inputBytes: PositiveSafeIntegerSchema.max(MAX_VECTOR_INPUT_BYTES),
259
+ outputMode: z.enum(["color", "duotone"]),
260
+ pathCount: NonnegativeSafeIntegerSchema.max(12_000),
261
+ profile: z.enum(["balanced", "detailed", "photo"]),
262
+ provenance: SlopcameraVectorizeProvenanceSchema,
263
+ quality: SlopcameraVectorizeQualityReceiptSchema,
264
+ receiptVersion: z.literal(1),
265
+ representation: z.enum(["color-paths", "alpha-mask"]),
266
+ sourceSha256: Sha256Schema,
267
+ svgSha256: Sha256Schema,
268
+ width: PositiveSafeIntegerSchema.max(4_096),
269
+ }) satisfies z.ZodType<SlopcameraVectorizeReceipt>
270
+
271
+ export const SlopcameraImageVectorizeOutputSchema = z.strictObject({
272
+ outputPath: BoundedPathSchema,
273
+ receipt: SlopcameraVectorizeReceiptSchema,
274
+ }) satisfies z.ZodType<SlopcameraImageVectorizeOutput>
275
+
276
+ export const SlopcameraImageGenerateOutputSchema = z.strictObject({
277
+ bytes: PositiveSafeIntegerSchema.max(MAX_GENERATED_IMAGE_BYTES),
278
+ mediaType: z.enum(["image/jpeg", "image/png", "image/webp"]),
279
+ model: SlopcameraImageModelSchema,
280
+ outputPath: BoundedPathSchema,
281
+ provider: z.literal("vercel-ai-gateway"),
282
+ requestId: z.string()
283
+ .min(1)
284
+ .max(256)
285
+ .refine(
286
+ value => !/[\u0000-\u001f\u007f]/u.test(value),
287
+ "Request ids must not contain control characters.",
288
+ ),
289
+ sha256: Sha256Schema,
290
+ warnings: z.array(z.string().min(1).max(256)).max(100),
291
+ }) satisfies z.ZodType<SlopcameraImageGenerateOutput>
292
+
293
+ export interface PortableSlopcameraOperationInputMap {
294
+ readonly "slopcamera.diagram.check": SlopcameraDiagramCheckInput
295
+ readonly "slopcamera.diagram.render": SlopcameraDiagramRenderInput
296
+ readonly "slopcamera.image.generate": SlopcameraImageGenerateInput
297
+ readonly "slopcamera.image.vectorize": SlopcameraImageVectorizeInput
298
+ }
299
+
300
+ export interface PortableSlopcameraOperationResultMap {
301
+ readonly "slopcamera.diagram.check": SlopcameraDiagramCheckOutput
302
+ readonly "slopcamera.diagram.render": SlopcameraDiagramRenderOutput
303
+ readonly "slopcamera.image.generate": SlopcameraImageGenerateOutput
304
+ readonly "slopcamera.image.vectorize": SlopcameraImageVectorizeOutput
305
+ }
306
+
307
+ export const PORTABLE_SLOPCAMERA_OPERATION_KINDS = Object.freeze([
308
+ "slopcamera.diagram.check",
309
+ "slopcamera.diagram.render",
310
+ "slopcamera.image.generate",
311
+ "slopcamera.image.vectorize",
312
+ ] as const)
313
+ export type PortableSlopcameraOperationKind =
314
+ typeof PORTABLE_SLOPCAMERA_OPERATION_KINDS[number]
315
+
316
+ export interface PortableSlopcameraOperationContract<
317
+ Kind extends PortableSlopcameraOperationKind,
318
+ > extends OperationContract<
319
+ PortableSlopcameraOperationInputMap[Kind],
320
+ PortableSlopcameraOperationResultMap[Kind]
321
+ > {
322
+ readonly inputSchema: z.ZodType<PortableSlopcameraOperationInputMap[Kind]>
323
+ readonly kind: Kind
324
+ readonly lifecycle: OperationLifecycleKind
325
+ readonly outputSchema: z.ZodType<PortableSlopcameraOperationResultMap[Kind]>
326
+ readonly policy: OperationPolicy
327
+ readonly version: 2
328
+ }
329
+
330
+ function freezePolicy(policy: OperationPolicy): OperationPolicy {
331
+ const preparation = Object.freeze([...policy.preparation])
332
+ const resources = Object.freeze(policy.resources.map(claim => Object.freeze({ ...claim })))
333
+ return Object.freeze({ ...policy, preparation, resources })
334
+ }
335
+
336
+ function portableContract<Kind extends PortableSlopcameraOperationKind>(
337
+ contract: PortableSlopcameraOperationContract<Kind>,
338
+ ): PortableSlopcameraOperationContract<Kind> {
339
+ return Object.freeze({ ...contract, policy: freezePolicy(contract.policy) })
340
+ }
341
+
342
+ export const PORTABLE_SLOPCAMERA_OPERATION_CONTRACTS = Object.freeze({
343
+ "slopcamera.diagram.check": portableContract({
344
+ inputSchema: SlopcameraDiagramCheckInputSchema,
345
+ inputSchemaId: "slopcamera.operation.diagram.check.input/v2",
346
+ kind: "slopcamera.diagram.check",
347
+ lifecycle: "pure",
348
+ outputSchema: SlopcameraDiagramCheckOutputSchema,
349
+ outputSchemaId: "slopcamera.operation.diagram.check.output/v2",
350
+ policy: {
351
+ cache: "content-addressed",
352
+ cancellable: false,
353
+ effect: "local-read",
354
+ maxDurationMs: 30_000,
355
+ maxFanOut: 0,
356
+ maxInputBytes: 4_096,
357
+ maxOutputBytes: 256 * 1024,
358
+ preparation: ["local-media"],
359
+ resources: [
360
+ { amount: 1, resource: "cpu" },
361
+ { amount: 1, resource: "local-io" },
362
+ ],
363
+ resume: "deterministic",
364
+ },
365
+ version: 2,
366
+ }),
367
+ "slopcamera.diagram.render": portableContract({
368
+ inputSchema: SlopcameraDiagramRenderInputSchema,
369
+ inputSchemaId: "slopcamera.operation.diagram.render.input/v2",
370
+ kind: "slopcamera.diagram.render",
371
+ lifecycle: "local-artifact",
372
+ outputSchema: SlopcameraDiagramRenderOutputSchema,
373
+ outputSchemaId: "slopcamera.operation.diagram.render.output/v2",
374
+ policy: {
375
+ cache: "none",
376
+ cancellable: false,
377
+ effect: "local-derived-write",
378
+ maxDurationMs: 120_000,
379
+ maxFanOut: 5,
380
+ maxInputBytes: 8_192,
381
+ maxOutputBytes: 5 * MAX_DIAGRAM_ARTIFACT_BYTES,
382
+ preparation: ["local-media"],
383
+ resources: [
384
+ { amount: 1, resource: "cpu" },
385
+ { amount: 1, resource: "local-io" },
386
+ ],
387
+ resume: "ambiguous-after-dispatch",
388
+ },
389
+ version: 2,
390
+ }),
391
+ "slopcamera.image.generate": portableContract({
392
+ inputSchema: SlopcameraImageGenerateInputSchema,
393
+ inputSchemaId: "slopcamera.operation.image.generate.input/v2",
394
+ kind: "slopcamera.image.generate",
395
+ lifecycle: "paid-dispatch",
396
+ outputSchema: SlopcameraImageGenerateOutputSchema,
397
+ outputSchemaId: "slopcamera.operation.image.generate.output/v2",
398
+ policy: {
399
+ cache: "exact-run",
400
+ cancellable: false,
401
+ effect: "paid-cloud",
402
+ maxDurationMs: 120_000,
403
+ maxFanOut: 1,
404
+ maxInputBytes: 16 * 1024,
405
+ maxOutputBytes: MAX_GENERATED_IMAGE_BYTES,
406
+ preparation: ["provider-options"],
407
+ resources: [
408
+ { amount: 1, resource: "local-io" },
409
+ { amount: 1, resource: "network" },
410
+ { amount: 1, resource: "paid-call" },
411
+ ],
412
+ resume: "ambiguous-after-dispatch",
413
+ },
414
+ version: 2,
415
+ }),
416
+ "slopcamera.image.vectorize": portableContract({
417
+ inputSchema: SlopcameraImageVectorizeInputSchema,
418
+ inputSchemaId: "slopcamera.operation.image.vectorize.input/v2",
419
+ kind: "slopcamera.image.vectorize",
420
+ lifecycle: "local-artifact",
421
+ outputSchema: SlopcameraImageVectorizeOutputSchema,
422
+ outputSchemaId: "slopcamera.operation.image.vectorize.output/v2",
423
+ policy: {
424
+ cache: "none",
425
+ cancellable: false,
426
+ effect: "local-derived-write",
427
+ maxDurationMs: 300_000,
428
+ maxFanOut: 1,
429
+ maxInputBytes: MAX_VECTOR_INPUT_BYTES,
430
+ maxOutputBytes: MAX_VECTOR_OUTPUT_BYTES,
431
+ preparation: ["local-media"],
432
+ resources: [
433
+ { amount: 1, resource: "cpu" },
434
+ { amount: 1, resource: "local-io" },
435
+ ],
436
+ resume: "ambiguous-after-dispatch",
437
+ },
438
+ version: 2,
439
+ }),
440
+ }) satisfies {
441
+ readonly [Kind in PortableSlopcameraOperationKind]: PortableSlopcameraOperationContract<Kind>
442
+ }
443
+
444
+ export function isPortableSlopcameraOperationKind(
445
+ value: string,
446
+ ): value is PortableSlopcameraOperationKind {
447
+ return PORTABLE_SLOPCAMERA_OPERATION_KINDS.includes(
448
+ value as PortableSlopcameraOperationKind,
449
+ )
450
+ }