@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.
- package/LICENSE +21 -0
- package/NOTICE.md +60 -0
- package/PRIVACY.md +46 -0
- package/README.md +311 -0
- package/SECURITY.md +21 -0
- package/apps/desktop/README.md +966 -0
- package/apps/desktop/analysis/protocol.ts +223 -0
- package/apps/desktop/application/capability-binding.ts +594 -0
- package/apps/desktop/application/context.ts +97 -0
- package/apps/desktop/application/creative-iteration.ts +1385 -0
- package/apps/desktop/application/default-registry.ts +146 -0
- package/apps/desktop/application/directing-contract.ts +218 -0
- package/apps/desktop/application/directing-plan.ts +178 -0
- package/apps/desktop/application/errors.ts +18 -0
- package/apps/desktop/application/gateway-port.ts +867 -0
- package/apps/desktop/application/html-overlay-browser-runtime.ts +687 -0
- package/apps/desktop/application/html-overlay-integrity.ts +337 -0
- package/apps/desktop/application/html-overlay-renderer.ts +45 -0
- package/apps/desktop/application/index.ts +13 -0
- package/apps/desktop/application/operation-completion-checkpoint.ts +333 -0
- package/apps/desktop/application/operation-effects.ts +94 -0
- package/apps/desktop/application/operation.ts +224 -0
- package/apps/desktop/application/operations/analysis/faces.ts +244 -0
- package/apps/desktop/application/operations/analysis/music.ts +248 -0
- package/apps/desktop/application/operations/analysis/project-auto-zooms.ts +302 -0
- package/apps/desktop/application/operations/analysis/project-inactivity.ts +381 -0
- package/apps/desktop/application/operations/analysis/scenes.ts +272 -0
- package/apps/desktop/application/operations/analysis/shared.ts +202 -0
- package/apps/desktop/application/operations/derive/edit-batch.ts +967 -0
- package/apps/desktop/application/operations/derive/follow-faces.ts +454 -0
- package/apps/desktop/application/operations/edit/bind-candidate-revision.ts +91 -0
- package/apps/desktop/application/operations/edit/create-candidate-revision.ts +377 -0
- package/apps/desktop/application/operations/edit/create-revision.ts +255 -0
- package/apps/desktop/application/operations/edit/freeze-revision.ts +182 -0
- package/apps/desktop/application/operations/gateway/image.ts +41 -0
- package/apps/desktop/application/operations/gateway/index.ts +17 -0
- package/apps/desktop/application/operations/gateway/shared.ts +122 -0
- package/apps/desktop/application/operations/gateway/speech.ts +41 -0
- package/apps/desktop/application/operations/gateway/transcription.ts +42 -0
- package/apps/desktop/application/operations/gateway/video.ts +41 -0
- package/apps/desktop/application/operations/index.ts +31 -0
- package/apps/desktop/application/operations/iteration/create-candidate.ts +240 -0
- package/apps/desktop/application/operations/iteration/create-matrix.ts +117 -0
- package/apps/desktop/application/operations/iteration/select.ts +155 -0
- package/apps/desktop/application/operations/iteration/shared.ts +250 -0
- package/apps/desktop/application/operations/media/audio-effects.ts +376 -0
- package/apps/desktop/application/operations/media/binding.ts +79 -0
- package/apps/desktop/application/operations/media/capabilities.ts +112 -0
- package/apps/desktop/application/operations/media/color-grade.ts +343 -0
- package/apps/desktop/application/operations/media/html-overlay.ts +802 -0
- package/apps/desktop/application/operations/media/index.ts +8 -0
- package/apps/desktop/application/operations/media/ingest.ts +303 -0
- package/apps/desktop/application/operations/media/overlay.ts +729 -0
- package/apps/desktop/application/operations/media/shared.ts +845 -0
- package/apps/desktop/application/operations/media/transform-platform.ts +120 -0
- package/apps/desktop/application/operations/project/commit-edits.ts +2054 -0
- package/apps/desktop/application/operations/project/promote-selection.ts +495 -0
- package/apps/desktop/application/operations/project/snapshot.ts +95 -0
- package/apps/desktop/application/operations/recording/index.ts +5 -0
- package/apps/desktop/application/operations/recording/pause.ts +34 -0
- package/apps/desktop/application/operations/recording/resume.ts +34 -0
- package/apps/desktop/application/operations/recording/shared.ts +199 -0
- package/apps/desktop/application/operations/recording/start.ts +169 -0
- package/apps/desktop/application/operations/recording/stop.ts +34 -0
- package/apps/desktop/application/operations/render/bind-candidate-output.ts +324 -0
- package/apps/desktop/application/operations/render/materialize-selection.ts +322 -0
- package/apps/desktop/application/operations/render/project-caption-plan.ts +287 -0
- package/apps/desktop/application/operations/render/project-plan.ts +939 -0
- package/apps/desktop/application/operations/render/project-spatial-receipt.ts +70 -0
- package/apps/desktop/application/operations/render/project.ts +1922 -0
- package/apps/desktop/application/operations/shared.ts +67 -0
- package/apps/desktop/application/operations/slopcamera-portable.ts +1188 -0
- package/apps/desktop/application/operations/slopcamera-visuals.ts +784 -0
- package/apps/desktop/application/operations/spatial-project.ts +209 -0
- package/apps/desktop/application/operations/spatial-render.ts +415 -0
- package/apps/desktop/application/operations/spatial-scene.ts +97 -0
- package/apps/desktop/application/operations/studio.ts +143 -0
- package/apps/desktop/application/output-publication-lease.ts +163 -0
- package/apps/desktop/application/project-publication-lease.ts +233 -0
- package/apps/desktop/application/project-store.ts +196 -0
- package/apps/desktop/application/receipts.ts +533 -0
- package/apps/desktop/application/registry.ts +182 -0
- package/apps/desktop/application/spatial-assets.ts +675 -0
- package/apps/desktop/application/spatial-compositor-cadence.ts +23 -0
- package/apps/desktop/application/spatial-project-authority.ts +35 -0
- package/apps/desktop/application/spatial-project-lease.ts +126 -0
- package/apps/desktop/application/spatial-project-render-preparation.ts +225 -0
- package/apps/desktop/application/spatial-project-store.ts +286 -0
- package/apps/desktop/application/spatial-render-projection.ts +201 -0
- package/apps/desktop/application/spatial-render.ts +677 -0
- package/apps/desktop/application/spatial-spz.ts +44 -0
- package/apps/desktop/application/spatial-world-import.ts +135 -0
- package/apps/desktop/application/spatial-world-provenance.ts +46 -0
- package/apps/desktop/application/studio-port.ts +58 -0
- package/apps/desktop/application/verified-receipt-reconciliation.ts +1574 -0
- package/apps/desktop/capture/protocol.ts +689 -0
- package/apps/desktop/cli/analyzer.ts +406 -0
- package/apps/desktop/cli/args.ts +3181 -0
- package/apps/desktop/cli/asset-ingest.ts +747 -0
- package/apps/desktop/cli/atomic-render-effects.ts +210 -0
- package/apps/desktop/cli/atomic-render-platform.ts +205 -0
- package/apps/desktop/cli/atomic-render.ts +50 -0
- package/apps/desktop/cli/audio-analysis.ts +252 -0
- package/apps/desktop/cli/bounded-map.ts +39 -0
- package/apps/desktop/cli/bundle-service.ts +256 -0
- package/apps/desktop/cli/capabilities.ts +212 -0
- package/apps/desktop/cli/capture-bundle.ts +1117 -0
- package/apps/desktop/cli/command-host-resources.ts +251 -0
- package/apps/desktop/cli/commands.ts +6836 -0
- package/apps/desktop/cli/directing-blob.ts +291 -0
- package/apps/desktop/cli/directing-media.ts +517 -0
- package/apps/desktop/cli/directing-quote.ts +89 -0
- package/apps/desktop/cli/directing-service.ts +288 -0
- package/apps/desktop/cli/emoji-assets.ts +538 -0
- package/apps/desktop/cli/errors.ts +29 -0
- package/apps/desktop/cli/face-analysis-service.ts +940 -0
- package/apps/desktop/cli/filter-script.ts +76 -0
- package/apps/desktop/cli/gateway-application-port.ts +1142 -0
- package/apps/desktop/cli/gateway-credential.ts +81 -0
- package/apps/desktop/cli/gateway-media-artifacts.ts +723 -0
- package/apps/desktop/cli/gateway-media-catalog.ts +922 -0
- package/apps/desktop/cli/gateway-media-service.ts +3106 -0
- package/apps/desktop/cli/gateway-media-signature.ts +122 -0
- package/apps/desktop/cli/gateway-provider-options.ts +562 -0
- package/apps/desktop/cli/gateway-scene-provider.ts +391 -0
- package/apps/desktop/cli/help.ts +501 -0
- package/apps/desktop/cli/html-overlay-gpu.ts +97 -0
- package/apps/desktop/cli/html-overlay-renderer.ts +2478 -0
- package/apps/desktop/cli/io.ts +290 -0
- package/apps/desktop/cli/main.ts +123 -0
- package/apps/desktop/cli/media-effects-service.ts +885 -0
- package/apps/desktop/cli/media-ingest-model.ts +364 -0
- package/apps/desktop/cli/media-ingest-platform.ts +227 -0
- package/apps/desktop/cli/media-ingest-program.ts +200 -0
- package/apps/desktop/cli/media-ingest.ts +30 -0
- package/apps/desktop/cli/music-analysis-service.ts +434 -0
- package/apps/desktop/cli/mutation-lock.ts +530 -0
- package/apps/desktop/cli/native-assets.d.ts +12 -0
- package/apps/desktop/cli/native-media-runtime.macos.ts +7 -0
- package/apps/desktop/cli/overlay-playback.ts +177 -0
- package/apps/desktop/cli/paths.ts +265 -0
- package/apps/desktop/cli/portable-surface.ts +242 -0
- package/apps/desktop/cli/project-camera-receipt.ts +112 -0
- package/apps/desktop/cli/project-face-camera.ts +394 -0
- package/apps/desktop/cli/project-inactivity-service.ts +552 -0
- package/apps/desktop/cli/project-media-integrity.ts +121 -0
- package/apps/desktop/cli/project-renderer.ts +1526 -0
- package/apps/desktop/cli/project-service.ts +519 -0
- package/apps/desktop/cli/project-state-transaction.ts +520 -0
- package/apps/desktop/cli/query-limits.ts +1 -0
- package/apps/desktop/cli/recording-controller.ts +1567 -0
- package/apps/desktop/cli/recording-daemon.ts +931 -0
- package/apps/desktop/cli/recording-ref.ts +56 -0
- package/apps/desktop/cli/renamed-environment.ts +6 -0
- package/apps/desktop/cli/renderer.ts +1439 -0
- package/apps/desktop/cli/run-cli-test-helper.ts +60 -0
- package/apps/desktop/cli/scene-analysis-service.ts +879 -0
- package/apps/desktop/cli/spatial-compositor-verifier.ts +213 -0
- package/apps/desktop/cli/spatial-project-service.ts +90 -0
- package/apps/desktop/cli/spatial-scene-service.ts +105 -0
- package/apps/desktop/cli/spatial-world-service.ts +39 -0
- package/apps/desktop/cli/speech-analysis-service.ts +682 -0
- package/apps/desktop/cli/studio-assemble.ts +58 -0
- package/apps/desktop/cli/studio-command.ts +60 -0
- package/apps/desktop/cli/studio-custody.ts +60 -0
- package/apps/desktop/cli/studio-encode.ts +216 -0
- package/apps/desktop/cli/studio-exr.ts +52 -0
- package/apps/desktop/cli/studio-files.ts +179 -0
- package/apps/desktop/cli/studio-output-validation.ts +162 -0
- package/apps/desktop/cli/studio-process.ts +145 -0
- package/apps/desktop/cli/studio-runtime.ts +77 -0
- package/apps/desktop/cli/studio-scaffold.ts +70 -0
- package/apps/desktop/cli/studio-service.ts +301 -0
- package/apps/desktop/cli/studio-spatial-asset.ts +248 -0
- package/apps/desktop/cli/studio-template-names.ts +3 -0
- package/apps/desktop/cli/studio-workflow.ts +19 -0
- package/apps/desktop/cli/time.ts +25 -0
- package/apps/desktop/cli/workflow-code.ts +584 -0
- package/apps/desktop/cli/workflow-runs.ts +576 -0
- package/apps/desktop/code/advanced.ts +139 -0
- package/apps/desktop/code/application-node-planner.ts +1288 -0
- package/apps/desktop/code/compiler.ts +329 -0
- package/apps/desktop/code/contracts.ts +13 -0
- package/apps/desktop/code/creative-recipes.ts +94 -0
- package/apps/desktop/code/define-workflow.ts +115 -0
- package/apps/desktop/code/editing.ts +284 -0
- package/apps/desktop/code/file-candidate-provenance.ts +420 -0
- package/apps/desktop/code/file-candidate.ts +69 -0
- package/apps/desktop/code/graph-builder.ts +10 -0
- package/apps/desktop/code/host-resource-policy.ts +55 -0
- package/apps/desktop/code/plan-contracts.ts +159 -0
- package/apps/desktop/code/planning.ts +361 -0
- package/apps/desktop/code/public.ts +134 -0
- package/apps/desktop/code/reference-projection.ts +62 -0
- package/apps/desktop/code/run-contracts.ts +466 -0
- package/apps/desktop/code/run-store.ts +2478 -0
- package/apps/desktop/code/runtime-identity.ts +328 -0
- package/apps/desktop/code/scheduler.ts +3067 -0
- package/apps/desktop/code/semantic-builder.ts +1436 -0
- package/apps/desktop/code/source-bundle.ts +1641 -0
- package/apps/desktop/code/source-typecheck.ts +211 -0
- package/apps/desktop/code/testing.ts +79 -0
- package/apps/desktop/code/worker-client.ts +1675 -0
- package/apps/desktop/code/worker-effects.ts +141 -0
- package/apps/desktop/code/worker-entry.ts +435 -0
- package/apps/desktop/code/worker-lease-guardian.ts +179 -0
- package/apps/desktop/code/worker-process-identity.ts +484 -0
- package/apps/desktop/code/worker-protocol.ts +211 -0
- package/apps/desktop/code/workflow-effects.ts +132 -0
- package/apps/desktop/contracts/analysis.ts +949 -0
- package/apps/desktop/contracts/edit.ts +576 -0
- package/apps/desktop/contracts/index.ts +9 -0
- package/apps/desktop/contracts/media-effects.ts +139 -0
- package/apps/desktop/contracts/project-render.ts +644 -0
- package/apps/desktop/contracts/project.ts +740 -0
- package/apps/desktop/contracts/recording.ts +1434 -0
- package/apps/desktop/contracts/render.ts +334 -0
- package/apps/desktop/contracts/runtime.ts +155 -0
- package/apps/desktop/contracts/spatial-compositor.ts +58 -0
- package/apps/desktop/contracts/spatial-project.ts +159 -0
- package/apps/desktop/contracts/spatial-world.ts +48 -0
- package/apps/desktop/contracts/video-effects.ts +120 -0
- package/apps/desktop/core/alignment-apply.ts +400 -0
- package/apps/desktop/core/audio-alignment.ts +466 -0
- package/apps/desktop/core/auto-zoom.ts +209 -0
- package/apps/desktop/core/canonical-json.ts +14 -0
- package/apps/desktop/core/emoji.ts +210 -0
- package/apps/desktop/core/events.ts +409 -0
- package/apps/desktop/core/face-framing.ts +533 -0
- package/apps/desktop/core/face-tracks.ts +326 -0
- package/apps/desktop/core/inactivity.ts +137 -0
- package/apps/desktop/core/index.ts +30 -0
- package/apps/desktop/core/intervals.ts +123 -0
- package/apps/desktop/core/montage.ts +236 -0
- package/apps/desktop/core/music-analysis.ts +518 -0
- package/apps/desktop/core/plan.ts +244 -0
- package/apps/desktop/core/project-auto-zoom.ts +75 -0
- package/apps/desktop/core/project-camera-spatial.ts +676 -0
- package/apps/desktop/core/project-camera.ts +403 -0
- package/apps/desktop/core/project-captions.ts +888 -0
- package/apps/desktop/core/project-inactivity.ts +125 -0
- package/apps/desktop/core/project-metadata.ts +927 -0
- package/apps/desktop/core/project-plan.ts +375 -0
- package/apps/desktop/core/project-render-plan.ts +303 -0
- package/apps/desktop/core/project-time.ts +469 -0
- package/apps/desktop/core/render-plan.ts +442 -0
- package/apps/desktop/core/scene-cache.ts +174 -0
- package/apps/desktop/core/scene-sampling.ts +448 -0
- package/apps/desktop/core/spatial-compositor.ts +22 -0
- package/apps/desktop/core/spatial-durability.ts +99 -0
- package/apps/desktop/core/spatial-project.ts +169 -0
- package/apps/desktop/core/spatial-shot-clock.ts +32 -0
- package/apps/desktop/core/speech-analysis.ts +333 -0
- package/apps/desktop/core/storage.ts +970 -0
- package/apps/desktop/core/time-map.ts +91 -0
- package/apps/desktop/core/time.ts +61 -0
- package/apps/desktop/core/video-effects.ts +660 -0
- package/apps/desktop/dist/cli/NebulaSans-Bold-26se8aek.otf +0 -0
- package/apps/desktop/dist/cli/NebulaSans-Bold-bcz7y08t.woff2 +0 -0
- package/apps/desktop/dist/cli/NebulaSans-Book-5ax05zvn.woff2 +0 -0
- package/apps/desktop/dist/cli/NebulaSans-Book-8cenzchw.otf +0 -0
- package/apps/desktop/dist/cli/main.js +5086 -0
- package/apps/desktop/html-overlay/catalog.ts +171 -0
- package/apps/desktop/html-overlay/contracts.ts +372 -0
- package/apps/desktop/html-overlay/execution-profile.ts +77 -0
- package/apps/desktop/html-overlay/index.ts +98 -0
- package/apps/desktop/html-overlay/libraries.ts +263 -0
- package/apps/desktop/html-overlay/random.ts +49 -0
- package/apps/desktop/html-overlay/runtime.ts +813 -0
- package/apps/desktop/html-overlay/scaffolds.ts +792 -0
- package/apps/desktop/html-overlay/spark-runtime.ts +88 -0
- package/apps/desktop/html-overlay/spatial-splat-runtime.ts +60 -0
- package/apps/desktop/html-overlay/spatial.ts +720 -0
- package/apps/desktop/studio/assets/README.md +39 -0
- package/apps/desktop/studio/assets/contracts.ts +129 -0
- package/apps/desktop/studio/assets/network.ts +64 -0
- package/apps/desktop/studio/assets/poly-haven.ts +148 -0
- package/apps/desktop/studio/drivers/blender_driver.py +466 -0
- package/apps/desktop/studio/drivers/cadquery_driver.py +176 -0
- package/apps/desktop/studio/education/driver.py +308 -0
- package/apps/desktop/studio/education/lesson.py +180 -0
- package/apps/desktop/studio/education/toolkit.py +249 -0
- package/apps/desktop/workflows/chaptered-demo.ts +48 -0
- package/apps/desktop/workflows/creative-iteration.ts +107 -0
- package/apps/desktop/workflows/creative-selection.ts +92 -0
- package/apps/desktop/workflows/fragments.ts +486 -0
- package/apps/desktop/workflows/index.ts +93 -0
- package/apps/desktop/workflows/polished-screen-demo.ts +128 -0
- package/apps/desktop/workflows/scene-direction.ts +12 -0
- package/apps/desktop/workflows/social-variants.ts +75 -0
- package/apps/desktop/workflows/talking-head-cleanup.ts +53 -0
- package/dist/NebulaSans-Bold-26se8aek.otf +0 -0
- package/dist/NebulaSans-Bold-bcz7y08t.woff2 +0 -0
- package/dist/NebulaSans-Book-5ax05zvn.woff2 +0 -0
- package/dist/NebulaSans-Book-8cenzchw.otf +0 -0
- package/dist/cli.js +479 -0
- package/dist/code/advanced.js +270 -0
- package/dist/code/index.js +2240 -0
- package/dist/generate.js +24 -0
- package/dist/host-resources.js +26 -0
- package/dist/index-42zsesc1.js +2257 -0
- package/dist/index-7308egqr.js +48 -0
- package/dist/index-8txs6fkn.js +712 -0
- package/dist/index-mcy8z0br.js +192 -0
- package/dist/index-p63wavx0.js +2029 -0
- package/dist/index-r7gdhmsp.js +424 -0
- package/dist/index-sh6xbav6.js +1219 -0
- package/dist/index-z1w83f81.js +4 -0
- package/dist/index-z7239b4h.js +2363 -0
- package/dist/index-zfeg9hmw.js +2013 -0
- package/dist/index.js +241 -0
- package/dist/operations.js +29 -0
- package/dist/skill-install-dh0ntqba.js +10 -0
- package/dist/vectorize/worker.js +142 -0
- package/dist/workflow.js +16 -0
- package/docs/README.md +38 -0
- package/docs/studio.md +215 -0
- package/examples/studio/blender/README.md +26 -0
- package/examples/studio/blender/character.py +152 -0
- package/examples/studio/blender/cloth.py +101 -0
- package/examples/studio/blender/color_chart.py +29 -0
- package/examples/studio/blender/fluid.py +78 -0
- package/examples/studio/blender/import_model.py +74 -0
- package/examples/studio/blender/product.py +53 -0
- package/examples/studio/blender/shaded_street.py +481 -0
- package/examples/studio/blender/studio_scene.py +147 -0
- package/examples/studio/cadquery/README.md +13 -0
- package/examples/studio/cadquery/bracket.py +36 -0
- package/examples/studio/cadquery/import_step.py +12 -0
- package/examples/studio/education/README.md +46 -0
- package/examples/studio/education/lesson.json +99 -0
- package/examples/studio/education/scene.py +7 -0
- package/examples/studio/hybrid-scene.ts +96 -0
- package/examples/studio/native-workflow.ts +14 -0
- package/examples/studio/vgpu/README.md +64 -0
- package/examples/studio/vgpu/heat-field.mjs +290 -0
- package/package.json +304 -0
- package/packages/scene/src/index.ts +1 -0
- package/packages/scene/src/scene.ts +215 -0
- package/schema/diagram.schema.json +334 -0
- package/skills/slopcamera/SKILL.md +45 -0
- package/skills/slopcamera/agents/openai.yaml +4 -0
- package/skills/slopcamera/references/customization.md +77 -0
- package/skills/slopcamera/references/diagrams.md +153 -0
- package/skills/slopcamera/references/directed-scenes.md +42 -0
- package/skills/slopcamera/references/directing-video.md +18 -0
- package/skills/slopcamera/references/educational-video.md +26 -0
- package/skills/slopcamera/references/gateway-media.md +134 -0
- package/skills/slopcamera/references/install.md +62 -0
- package/skills/slopcamera/references/native-studio.md +31 -0
- package/skills/slopcamera/references/reference-led-3d.md +140 -0
- package/skills/slopcamera/references/rubber-stamp-examples/poster-example-1.jpg +0 -0
- package/skills/slopcamera/references/rubber-stamp-examples/poster-example-2.jpg +0 -0
- package/skills/slopcamera/references/rubber-stamp-examples/stamp-style-1.png +0 -0
- package/skills/slopcamera/references/rubber-stamp-examples/stamp-style-2.png +0 -0
- package/skills/slopcamera/references/rubber-stamp-field-notes.md +144 -0
- package/skills/slopcamera/references/vectorization.md +29 -0
- package/skills/slopcamera/references/video-projects.md +187 -0
- package/skills/slopcamera/references/visual-communication.md +120 -0
- package/skills/slopcamera/references/workflows-sdk.md +45 -0
- package/skills/slopcamera/scripts/compose-rubber-stamp-field-note.ts +229 -0
- package/src/artifacts.ts +106 -0
- package/src/assets/fonts/nebula-sans/LICENSE.txt +96 -0
- package/src/assets/fonts/nebula-sans/NebulaSans-Bold.otf +0 -0
- package/src/assets/fonts/nebula-sans/NebulaSans-Bold.woff2 +0 -0
- package/src/assets/fonts/nebula-sans/NebulaSans-Book.otf +0 -0
- package/src/assets/fonts/nebula-sans/NebulaSans-Book.woff2 +0 -0
- package/src/assets/fonts/nebula-sans/PROVENANCE.md +21 -0
- package/src/assets.d.ts +9 -0
- package/src/cli.ts +601 -0
- package/src/cloud-errors.ts +26 -0
- package/src/code/advanced.ts +10 -0
- package/src/code/boundary.ts +21 -0
- package/src/code/canonical-json.ts +129 -0
- package/src/code/compiler.ts +953 -0
- package/src/code/contracts.ts +576 -0
- package/src/code/define-workflow.ts +334 -0
- package/src/code/errors.ts +41 -0
- package/src/code/graph-builder.ts +945 -0
- package/src/code/index.ts +121 -0
- package/src/code/json-snapshot.ts +899 -0
- package/src/code/json-utf8.ts +88 -0
- package/src/code/portable-builder.ts +136 -0
- package/src/code/projection.ts +378 -0
- package/src/code/public-operations.ts +450 -0
- package/src/code/runtime.ts +580 -0
- package/src/code/sha256.ts +36 -0
- package/src/config.ts +180 -0
- package/src/desktop.ts +253 -0
- package/src/fs.ts +10 -0
- package/src/generate.ts +704 -0
- package/src/host-resource-posix.ts +161 -0
- package/src/host-resources.ts +1749 -0
- package/src/icons.ts +58 -0
- package/src/index.ts +200 -0
- package/src/label-layout.ts +130 -0
- package/src/layout.ts +413 -0
- package/src/lint.ts +127 -0
- package/src/mcp/boundary.ts +354 -0
- package/src/mcp/index.ts +33 -0
- package/src/mcp/server.ts +272 -0
- package/src/mcp/tools.ts +963 -0
- package/src/mcp/types.ts +71 -0
- package/src/operations.ts +775 -0
- package/src/parse.ts +861 -0
- package/src/process-environment.ts +17 -0
- package/src/render.ts +437 -0
- package/src/skill-install.ts +49 -0
- package/src/spatial-scene/authoring.ts +27 -0
- package/src/spatial-scene/camera-track.ts +83 -0
- package/src/spatial-scene/contracts.ts +277 -0
- package/src/spatial-scene/evaluate.ts +145 -0
- package/src/spatial-scene/gltf.ts +558 -0
- package/src/spatial-scene/identity.ts +260 -0
- package/src/spatial-scene/index.ts +10 -0
- package/src/spatial-scene/inspect.ts +68 -0
- package/src/spatial-scene/math.ts +280 -0
- package/src/spatial-scene/patch.ts +131 -0
- package/src/spatial-scene/time.ts +53 -0
- package/src/studio/contracts.ts +129 -0
- package/src/studio/index.ts +2 -0
- package/src/studio/plan.ts +156 -0
- package/src/studio/shared.ts +41 -0
- package/src/theme.ts +68 -0
- package/src/tldr.ts +474 -0
- package/src/types.ts +212 -0
- package/src/vectorize/archive.ts +101 -0
- package/src/vectorize/command.ts +797 -0
- package/src/vectorize/index.ts +27 -0
- package/src/vectorize/limits.ts +61 -0
- package/src/vectorize/metrics.ts +351 -0
- package/src/vectorize/pixels.ts +323 -0
- package/src/vectorize/supervisor.ts +339 -0
- package/src/vectorize/svg.ts +188 -0
- package/src/vectorize/tool.ts +542 -0
- package/src/vectorize/types.ts +113 -0
- package/src/vectorize/vectorize.ts +634 -0
- package/src/vectorize/worker-protocol.ts +40 -0
- package/src/vectorize/worker.ts +209 -0
- package/src/version.ts +1 -0
- 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>>
|