stillmade-sdk 0.0.0-stage → 0.1.0
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/AGENTS.md +103 -0
- package/AGENT_CONTROL.md +293 -0
- package/BROWSER_APPLICATIONS.md +140 -0
- package/BROWSER_APPLICATION_ARTIFACT_REFERENCES.md +85 -0
- package/CLAUDE.md +1 -0
- package/COOPERATIVE_GUEST_JOBS.md +11 -0
- package/DEFINE_BLOCK.md +39 -0
- package/DESKTOP_CAPABILITIES.md +85 -0
- package/DESKTOP_EXECUTION.md +75 -0
- package/FRAME_VIEWS.md +98 -0
- package/GITHUB_APPLICATIONS.md +129 -0
- package/IMAGE_DESCRIPTION.md +45 -0
- package/INTERACTION_VALUES.md +27 -0
- package/INTERFACE_DESIGN.md +85 -0
- package/IN_SESSION_PACKAGE_JOBS.md +33 -0
- package/JAVASCRIPT_RESULTS.md +118 -0
- package/LICENSE +101 -0
- package/MOBILE_UI.md +100 -0
- package/MODULES.md +168 -0
- package/NATIVE_MCP.md +276 -0
- package/PASTE_TO_LLM.md +1917 -0
- package/PORTABLE.md +606 -0
- package/REMIX.md +183 -0
- package/SDK.md +11476 -0
- package/SEMANTIC_ADAPTERS.md +85 -0
- package/TRANSCRIPTION.md +55 -0
- package/UI_AESTHETIC.md +180 -0
- package/UNIVERSAL_RESOLVER.md +301 -0
- package/WORKFLOW_APPROVALS.md +16 -0
- package/WORKFLOW_EVENTS.md +42 -0
- package/acceptance/README.md +195 -0
- package/api-index.json +885 -0
- package/blocks/connected-app/versions/1.0.0/view.js +16 -0
- package/blocks/connected-app/versions/1.2.0/task-selection.js +18 -0
- package/blocks/connected-app/versions/1.4.0/view.js +16 -0
- package/blocks/gmail/versions/1.0.0/workspace.js +6 -0
- package/blocks/mcp-motion-planner/versions/1.1.0/package.js +97 -0
- package/blocks/meta-ads/versions/1.0.0/workspace.js +20 -0
- package/blocks/meta-ads/versions/1.1.0/workspace.js +18 -0
- package/blocks/meta-ads/versions/1.2.0/workspace.js +19 -0
- package/blocks/motion-designer/versions/1.0.1/package.js +173318 -0
- package/blocks/motion-designer/versions/1.0.2/package.js +173318 -0
- package/blocks/motion-frame-review/versions/1.1.1/package.js +465 -0
- package/blocks/motion-frame-review/versions/1.1.2/package.snapshot.js +572 -0
- package/blocks/native/sm.animated-scene/versions/2.0.0/package.js +475 -0
- package/blocks/native/sm.animated-scene/versions/2.1.0/package.js +498 -0
- package/blocks/native/sm.animated-scene/versions/2.2.0/package.js +524 -0
- package/blocks/native/sm.animated-scene/versions/2.3.0/package.js +618 -0
- package/blocks/native/sm.animated-scene/versions/2.3.1/package.js +618 -0
- package/blocks/native/sm.animated-scene/versions/2.3.2/package.js +723 -0
- package/blocks/native/sm.animated-scene/versions/2.3.3/package.js +723 -0
- package/blocks/native/sm.animated-scene/versions/2.3.4/package.js +676 -0
- package/blocks/native/sm.animated-scene/versions/2.3.5/package.js +693 -0
- package/blocks/native/sm.animated-scene/versions/2.3.6/package.js +700 -0
- package/blocks/native/sm.animated-scene/versions/2.3.7/package.js +747 -0
- package/blocks/native/sm.animated-scene/versions/2.3.8/package.js +769 -0
- package/blocks/native/sm.animated-scene-assistant/versions/1.0.0/package.js +183 -0
- package/blocks/native/sm.blueprint/versions/2.0.0/package.js +358 -0
- package/blocks/native/sm.blueprint/versions/2.1.0/package.js +358 -0
- package/blocks/native/sm.blueprint/versions/2.1.1/package.js +358 -0
- package/blocks/native/sm.blueprint/versions/2.1.2/package.js +358 -0
- package/blocks/native/sm.blueprint/versions/2.1.3/package.js +381 -0
- package/blocks/native/sm.blueprint/versions/2.1.4/package.js +381 -0
- package/blocks/native/sm.blueprint/versions/2.1.5/package.js +339 -0
- package/blocks/native/sm.blueprint/versions/2.1.6/package.js +356 -0
- package/blocks/native/sm.blueprint/versions/2.1.7/package.js +363 -0
- package/blocks/native/sm.blueprint/versions/2.1.8/package.js +410 -0
- package/blocks/native/sm.blueprint/versions/2.1.9/package.js +422 -0
- package/blocks/native/sm.blueprint-assistant/versions/1.0.0/package.js +172 -0
- package/blocks/native/sm.board-editor/versions/2.0.0/package.js +386 -0
- package/blocks/native/sm.board-editor/versions/2.1.0/package.js +430 -0
- package/blocks/native/sm.board-editor/versions/2.2.0/package.js +430 -0
- package/blocks/native/sm.board-editor/versions/2.2.1/package.js +430 -0
- package/blocks/native/sm.board-editor/versions/2.2.10/package.js +551 -0
- package/blocks/native/sm.board-editor/versions/2.2.2/package.js +430 -0
- package/blocks/native/sm.board-editor/versions/2.2.3/package.js +501 -0
- package/blocks/native/sm.board-editor/versions/2.2.4/package.js +501 -0
- package/blocks/native/sm.board-editor/versions/2.2.5/package.js +501 -0
- package/blocks/native/sm.board-editor/versions/2.2.6/package.js +460 -0
- package/blocks/native/sm.board-editor/versions/2.2.7/package.js +477 -0
- package/blocks/native/sm.board-editor/versions/2.2.8/package.js +484 -0
- package/blocks/native/sm.board-editor/versions/2.2.9/package.js +531 -0
- package/blocks/native/sm.captions/versions/2.0.0/package.js +406 -0
- package/blocks/native/sm.character/versions/2.0.0/package.js +169 -0
- package/blocks/native/sm.character/versions/2.0.1/package.js +180 -0
- package/blocks/native/sm.chat/versions/2.0.0/package.js +144 -0
- package/blocks/native/sm.chat/versions/2.0.1/package.js +97 -0
- package/blocks/native/sm.chat/versions/2.0.2/package.js +100 -0
- package/blocks/native/sm.chat/versions/2.0.3/package.js +100 -0
- package/blocks/native/sm.compare/versions/2.0.0/package.js +159 -0
- package/blocks/native/sm.compare/versions/2.0.1/package.js +159 -0
- package/blocks/native/sm.compare/versions/2.0.2/package.js +296 -0
- package/blocks/native/sm.describe-media/versions/2.0.0/package.js +153 -0
- package/blocks/native/sm.describe-media/versions/2.0.1/package.js +156 -0
- package/blocks/native/sm.edit-assistant/versions/2.0.0/package.js +214 -0
- package/blocks/native/sm.edit-assistant/versions/2.0.1/package.js +214 -0
- package/blocks/native/sm.edit-assistant/versions/2.0.2/package.js +221 -0
- package/blocks/native/sm.editor/versions/2.0.0/package.js +752 -0
- package/blocks/native/sm.editor/versions/2.1.0/package.js +767 -0
- package/blocks/native/sm.editor/versions/2.2.0/package.js +987 -0
- package/blocks/native/sm.editor/versions/2.2.1/package.js +987 -0
- package/blocks/native/sm.editor/versions/2.2.10/package.js +1146 -0
- package/blocks/native/sm.editor/versions/2.2.11/package.js +1391 -0
- package/blocks/native/sm.editor/versions/2.2.12/package.js +1391 -0
- package/blocks/native/sm.editor/versions/2.2.2/package.js +1006 -0
- package/blocks/native/sm.editor/versions/2.2.3/package.js +1006 -0
- package/blocks/native/sm.editor/versions/2.2.4/package.js +1006 -0
- package/blocks/native/sm.editor/versions/2.2.5/package.js +1006 -0
- package/blocks/native/sm.editor/versions/2.2.6/package.js +1006 -0
- package/blocks/native/sm.editor/versions/2.2.7/package.js +1006 -0
- package/blocks/native/sm.editor/versions/2.2.8/package.js +1099 -0
- package/blocks/native/sm.editor/versions/2.2.9/package.js +1145 -0
- package/blocks/native/sm.export-audio/versions/2.0.0/package.js +376 -0
- package/blocks/native/sm.export-timeline/versions/2.0.0/package.js +271 -0
- package/blocks/native/sm.export-video/versions/2.0.0/package.js +376 -0
- package/blocks/native/sm.final-edit/versions/2.0.0/package.js +194 -0
- package/blocks/native/sm.final-edit/versions/2.0.1/package.js +194 -0
- package/blocks/native/sm.final-edit/versions/2.0.2/package.js +199 -0
- package/blocks/native/sm.generate-image/versions/2.0.0/package.js +130 -0
- package/blocks/native/sm.generate-video/versions/2.0.0/package.js +145 -0
- package/blocks/native/sm.generate-video/versions/2.0.1/package.js +148 -0
- package/blocks/native/sm.grade/versions/2.0.0/package.js +150 -0
- package/blocks/native/sm.grade/versions/2.0.1/package.js +150 -0
- package/blocks/native/sm.grade/versions/2.0.2/package.js +397 -0
- package/blocks/native/sm.image-editor/versions/2.0.0/package.js +183 -0
- package/blocks/native/sm.image-editor/versions/2.0.1/package.js +190 -0
- package/blocks/native/sm.import-media/versions/2.0.0/package.js +285 -0
- package/blocks/native/sm.import-media/versions/2.0.1/package.js +307 -0
- package/blocks/native/sm.import-media/versions/2.0.2/package.js +428 -0
- package/blocks/native/sm.location/versions/2.0.0/package.js +169 -0
- package/blocks/native/sm.location/versions/2.0.1/package.js +180 -0
- package/blocks/native/sm.motion-graphics/versions/2.0.0/package.js +643 -0
- package/blocks/native/sm.panel-strip/versions/2.0.0/package.js +405 -0
- package/blocks/native/sm.panel-strip/versions/2.1.0/package.js +422 -0
- package/blocks/native/sm.panel-strip/versions/2.2.0/package.js +467 -0
- package/blocks/native/sm.panel-strip/versions/2.3.0/package.js +632 -0
- package/blocks/native/sm.panel-strip/versions/2.3.1/package.js +632 -0
- package/blocks/native/sm.panel-strip/versions/2.3.2/package.js +637 -0
- package/blocks/native/sm.panel-strip/versions/2.3.3/package.js +652 -0
- package/blocks/native/sm.panel-strip/versions/2.3.4/package.js +664 -0
- package/blocks/native/sm.panel-strip/versions/2.3.5/package.js +683 -0
- package/blocks/native/sm.panel-strip/versions/2.3.6/package.js +825 -0
- package/blocks/native/sm.panel-strip/versions/2.3.7/package.js +852 -0
- package/blocks/native/sm.pipeline/versions/2.0.0/package.js +528 -0
- package/blocks/native/sm.pipeline/versions/2.1.0/package.js +545 -0
- package/blocks/native/sm.pipeline/versions/2.2.0/package.js +819 -0
- package/blocks/native/sm.pipeline/versions/2.2.1/package.js +819 -0
- package/blocks/native/sm.pipeline/versions/2.2.2/package.js +787 -0
- package/blocks/native/sm.pipeline/versions/2.2.3/package.js +834 -0
- package/blocks/native/sm.pipeline/versions/2.2.4/package.js +854 -0
- package/blocks/native/sm.pipeline/versions/2.2.5/package.js +1095 -0
- package/blocks/native/sm.quality-audit/versions/1.0.0/package.js +192 -0
- package/blocks/native/sm.quality-audit/versions/1.0.1/package.js +192 -0
- package/blocks/native/sm.quality-audit/versions/1.0.2/package.js +195 -0
- package/blocks/native/sm.research/versions/2.0.0/package.js +175 -0
- package/blocks/native/sm.research/versions/2.0.1/package.js +184 -0
- package/blocks/native/sm.research/versions/2.0.2/package.js +187 -0
- package/blocks/native/sm.rough-cut/versions/2.0.0/package.js +248 -0
- package/blocks/native/sm.rough-cut/versions/2.0.1/package.js +248 -0
- package/blocks/native/sm.rough-cut/versions/2.0.2/package.js +257 -0
- package/blocks/native/sm.score/versions/2.0.0/package.js +513 -0
- package/blocks/native/sm.script/versions/2.0.0/package.js +144 -0
- package/blocks/native/sm.script/versions/2.1.0/package.js +144 -0
- package/blocks/native/sm.script/versions/2.1.1/package.js +144 -0
- package/blocks/native/sm.script/versions/2.1.2/package.js +105 -0
- package/blocks/native/sm.script/versions/2.1.3/package.js +152 -0
- package/blocks/native/sm.script/versions/2.1.4/package.js +156 -0
- package/blocks/native/sm.shot-plan/versions/2.0.0/package.js +301 -0
- package/blocks/native/sm.shot-plan/versions/2.1.0/package.js +528 -0
- package/blocks/native/sm.shot-plan/versions/2.1.1/package.js +528 -0
- package/blocks/native/sm.shot-plan/versions/2.1.2/package.js +528 -0
- package/blocks/native/sm.shot-plan/versions/2.1.3/package.js +536 -0
- package/blocks/native/sm.shot-plan-assistant/versions/1.0.0/package.js +173 -0
- package/blocks/native/sm.stock-search/versions/2.0.0/package.js +174 -0
- package/blocks/native/sm.style/versions/2.0.0/package.js +173 -0
- package/blocks/native/sm.style/versions/2.0.1/package.js +184 -0
- package/blocks/native/sm.thumbnail/versions/2.0.0/package.js +137 -0
- package/blocks/native/sm.thumbnail/versions/2.0.1/package.js +140 -0
- package/blocks/native/sm.transcribe/versions/2.0.0/package.js +163 -0
- package/blocks/native/sm.transcribe/versions/2.0.1/package.js +168 -0
- package/blocks/native/sm.transition/versions/2.0.0/package.js +143 -0
- package/blocks/native/sm.transition/versions/2.0.1/package.js +143 -0
- package/blocks/native/sm.transition/versions/2.0.2/package.js +354 -0
- package/blocks/native/sm.video-assets/versions/2.0.0/package.js +198 -0
- package/blocks/native/sm.video-assets/versions/2.1.0/package.js +273 -0
- package/blocks/native/sm.video-assets/versions/2.1.1/package.js +273 -0
- package/blocks/native/sm.video-assets/versions/2.1.2/package.js +239 -0
- package/blocks/native/sm.video-assets/versions/2.1.3/package.js +239 -0
- package/blocks/native/sm.video-assets/versions/2.1.4/package.js +249 -0
- package/blocks/native/sm.voiceover/versions/2.0.0/package.js +137 -0
- package/blocks/native/sm.voiceover/versions/2.1.0/package.js +149 -0
- package/blocks/native/sm.voiceover/versions/2.1.1/package.js +149 -0
- package/blocks/native/sm.voiceover/versions/2.1.2/package.js +126 -0
- package/blocks/native/sm.voiceover/versions/2.1.3/package.js +126 -0
- package/blocks/native/sm.voiceover/versions/2.1.4/package.js +179 -0
- package/blocks/native/sm.whiteboard-assistant/versions/1.0.0/package.js +175 -0
- package/blocks/native/sm.youtube/versions/2.0.0/package.js +217 -0
- package/blocks/occasion-story/package.js +1 -0
- package/blocks/occasion-story/versions/1.0.0/package.js +1658 -0
- package/blocks/occasion-story/versions/1.0.1/package.js +1699 -0
- package/blocks/photo-reel-composer/versions/1.0.0/package.js +3043 -0
- package/blocks/product-ad-variants/versions/1.0.0/package.js +2911 -0
- package/blocks/product-launch-director/versions/1.0.0/package.js +103 -0
- package/blocks/release-visuals/package.js +1 -0
- package/blocks/release-visuals/versions/1.0.0/package.js +1492 -0
- package/blocks/release-visuals/versions/1.0.1/package.js +1517 -0
- package/blocks/short-form-finish/package.js +1 -0
- package/blocks/short-form-finish/versions/1.0.0/package.js +1043 -0
- package/blocks/short-form-finish/versions/1.0.1/package.js +1043 -0
- package/blocks/short-form-finish/versions/1.0.2/package.js +1043 -0
- package/examples/asset-metadata.stillmade.json +84 -0
- package/examples/camera-recorder.stillmade.json +77 -0
- package/examples/caption-from-text.stillmade.json +117 -0
- package/examples/captions.stillmade-block +0 -0
- package/examples/check-clip.stillmade.json +109 -0
- package/examples/clean-text.stillmade.json +73 -0
- package/examples/comfy-invert.stillmade.json +117 -0
- package/examples/comfy-text-to-image.stillmade.json +165 -0
- package/examples/custom-interface.stillmade.json +78 -0
- package/examples/describe-image.stillmade.json +87 -0
- package/examples/docs-only-campfire-narrator.stillmade.json +92 -0
- package/examples/docs-only-custom-ui.stillmade.json +98 -0
- package/examples/docs-only-gentle-trailer.stillmade.json +106 -0
- package/examples/docs-only-grayscale-original.stillmade.json +212 -0
- package/examples/docs-only-grayscale.stillmade.json +218 -0
- package/examples/docs-only-image-studio.stillmade.json +327 -0
- package/examples/docs-only-retained-versions.stillmade.json +183 -0
- package/examples/docs-only-storybook-cover.stillmade.json +91 -0
- package/examples/export-timeline.stillmade-block +0 -0
- package/examples/foley-cue.stillmade.json +73 -0
- package/examples/generate-image.stillmade.json +75 -0
- package/examples/generate-video.stillmade.json +75 -0
- package/examples/grayscale.stillmade.json +220 -0
- package/examples/import-media.stillmade-block +0 -0
- package/examples/javascript-cloze-quiz/README.md +9 -0
- package/examples/javascript-cloze-quiz/package.json +11 -0
- package/examples/javascript-cloze-quiz/src/run.js +22 -0
- package/examples/javascript-cloze-quiz/stillmade.block.json +75 -0
- package/examples/javascript-cloze-quiz/tests/fixtures.json +44 -0
- package/examples/javascript-invoice/README.md +9 -0
- package/examples/javascript-invoice/package.json +11 -0
- package/examples/javascript-invoice/src/run.js +16 -0
- package/examples/javascript-invoice/stillmade.block.json +90 -0
- package/examples/javascript-invoice/tests/fixtures.json +44 -0
- package/examples/microphone-recorder.stillmade.json +77 -0
- package/examples/module-action-items/README.md +9 -0
- package/examples/module-action-items/module/main.js +29 -0
- package/examples/module-action-items/package.json +11 -0
- package/examples/module-action-items/stillmade.block.json +55 -0
- package/examples/module-action-items/tests/fixtures.json +37 -0
- package/examples/module-action-items/tests/mocks.json +11 -0
- package/examples/module-audio-extract/README.md +9 -0
- package/examples/module-audio-extract/package.json +10 -0
- package/examples/module-audio-extract/src/main.js +9 -0
- package/examples/module-audio-extract/stillmade.block.json +20 -0
- package/examples/module-audio-extract/tests/fixtures.json +3 -0
- package/examples/module-brand-kit/README.md +34 -0
- package/examples/module-brand-kit/package.json +14 -0
- package/examples/module-brand-kit/src/main.js +72 -0
- package/examples/module-brand-kit/stillmade.block.json +30 -0
- package/examples/module-brand-kit/tests/fixtures.json +3 -0
- package/examples/module-csv-summary/README.md +9 -0
- package/examples/module-csv-summary/fixtures/sales.csv +6 -0
- package/examples/module-csv-summary/module/main.js +55 -0
- package/examples/module-csv-summary/package.json +11 -0
- package/examples/module-csv-summary/stillmade.block.json +56 -0
- package/examples/module-csv-summary/tests/fixtures.json +72 -0
- package/examples/module-csv-summary/tests/mocks.json +3 -0
- package/examples/module-notion-to-airtable/README.md +28 -0
- package/examples/module-notion-to-airtable/notion-pages.openapi.json +21 -0
- package/examples/module-notion-to-airtable/package.json +14 -0
- package/examples/module-notion-to-airtable/src/main.js +30 -0
- package/examples/module-notion-to-airtable/stillmade.block.json +31 -0
- package/examples/module-notion-to-airtable/tests/fixtures.json +3 -0
- package/examples/module-opencv/README.md +23 -0
- package/examples/module-opencv/package.json +17 -0
- package/examples/module-opencv/src/main.js +35 -0
- package/examples/module-opencv/stillmade.block.json +20 -0
- package/examples/module-opencv/tests/fixtures.json +3 -0
- package/examples/module-pdf-shot-list/README.md +25 -0
- package/examples/module-pdf-shot-list/package.json +18 -0
- package/examples/module-pdf-shot-list/src/main.js +89 -0
- package/examples/module-pdf-shot-list/stillmade.block.json +28 -0
- package/examples/module-pdf-shot-list/tests/fixtures.json +3 -0
- package/examples/module-silence-trimmer/README.md +23 -0
- package/examples/module-silence-trimmer/package.json +17 -0
- package/examples/module-silence-trimmer/src/main.js +18 -0
- package/examples/module-silence-trimmer/stillmade.block.json +23 -0
- package/examples/module-silence-trimmer/tests/fixtures.json +3 -0
- package/examples/module-tempo/README.md +9 -0
- package/examples/module-tempo/fixtures/click-120.wav +0 -0
- package/examples/module-tempo/module/main.js +27 -0
- package/examples/module-tempo/package.json +11 -0
- package/examples/module-tempo/stillmade.block.json +65 -0
- package/examples/module-tempo/tests/fixtures.json +29 -0
- package/examples/module-tempo/tests/mocks.json +3 -0
- package/examples/module-word-stats/module/main.js +8 -0
- package/examples/module-word-stats/stillmade.block.json +48 -0
- package/examples/module-word-stats/tests/fixtures.json +12 -0
- package/examples/narrate-script.stillmade.json +73 -0
- package/examples/numbered-takes.stillmade.json +90 -0
- package/examples/original-photo-editor/src/run.js +22 -0
- package/examples/original-photo-editor/src/view.css +1 -0
- package/examples/original-photo-editor/src/view.html +1 -0
- package/examples/original-photo-editor/src/view.js +57 -0
- package/examples/original-photo-editor/stillmade.block.json +91 -0
- package/examples/original-photo-editor/tests/fixtures.json +102 -0
- package/examples/original-photo-editor.stillmade-block +0 -0
- package/examples/portable-regexp.stillmade-block +0 -0
- package/examples/portable-regexp.stillmade.json +116 -0
- package/examples/quieter-clips.stillmade.json +104 -0
- package/examples/research-topic.stillmade.json +73 -0
- package/examples/saas-product-launch-reviewed-source.stillmade.json +383 -0
- package/examples/saas-product-launch.stillmade.json +304 -0
- package/examples/scene-shots.stillmade.json +96 -0
- package/examples/score-a-scene.stillmade.json +76 -0
- package/examples/screen-recorder.stillmade.json +77 -0
- package/examples/script-draft.stillmade.json +74 -0
- package/examples/shot-readiness.stillmade.json +94 -0
- package/examples/summarize-page.stillmade.json +73 -0
- package/examples/text-workflow.stillmade.json +126 -0
- package/examples/thicken-lines.stillmade.json +318 -0
- package/examples/timeline-mixer.stillmade.json +126 -0
- package/examples/timeline-polish.stillmade.json +101 -0
- package/examples/transcribe-audio.stillmade.json +97 -0
- package/examples/view-react-chart/README.md +16 -0
- package/examples/view-react-chart/package.json +18 -0
- package/examples/view-react-chart/src/run.js +3 -0
- package/examples/view-react-chart/src/view.config.json +1 -0
- package/examples/view-react-chart/src/view.css +12 -0
- package/examples/view-react-chart/src/view.html +1 -0
- package/examples/view-react-chart/src/view.jsx +68 -0
- package/examples/view-react-chart/stillmade.block.json +42 -0
- package/examples/view-react-chart/tests/fixtures.json +3 -0
- package/examples/word-count.stillmade.json +71 -0
- package/node_modules/@jitl/quickjs-ffi-types/LICENSE +21 -0
- package/node_modules/@jitl/quickjs-ffi-types/README.md +5 -0
- package/node_modules/@jitl/quickjs-ffi-types/dist/index.d.mts +549 -0
- package/node_modules/@jitl/quickjs-ffi-types/dist/index.d.ts +549 -0
- package/node_modules/@jitl/quickjs-ffi-types/dist/index.js +2 -0
- package/node_modules/@jitl/quickjs-ffi-types/dist/index.mjs +2 -0
- package/node_modules/@jitl/quickjs-ffi-types/package.json +36 -0
- package/node_modules/@jitl/quickjs-wasmfile-release-sync/LICENSE +47 -0
- package/node_modules/@jitl/quickjs-wasmfile-release-sync/README.md +82 -0
- package/node_modules/@jitl/quickjs-wasmfile-release-sync/dist/emscripten-module.browser.d.ts +11 -0
- package/node_modules/@jitl/quickjs-wasmfile-release-sync/dist/emscripten-module.browser.mjs +22 -0
- package/node_modules/@jitl/quickjs-wasmfile-release-sync/dist/emscripten-module.cjs +21 -0
- package/node_modules/@jitl/quickjs-wasmfile-release-sync/dist/emscripten-module.cloudflare.cjs +21 -0
- package/node_modules/@jitl/quickjs-wasmfile-release-sync/dist/emscripten-module.cloudflare.d.ts +11 -0
- package/node_modules/@jitl/quickjs-wasmfile-release-sync/dist/emscripten-module.d.ts +11 -0
- package/node_modules/@jitl/quickjs-wasmfile-release-sync/dist/emscripten-module.mjs +25 -0
- package/node_modules/@jitl/quickjs-wasmfile-release-sync/dist/emscripten-module.wasm +0 -0
- package/node_modules/@jitl/quickjs-wasmfile-release-sync/dist/ffi.d.mts +85 -0
- package/node_modules/@jitl/quickjs-wasmfile-release-sync/dist/ffi.d.ts +85 -0
- package/node_modules/@jitl/quickjs-wasmfile-release-sync/dist/ffi.js +2 -0
- package/node_modules/@jitl/quickjs-wasmfile-release-sync/dist/ffi.mjs +2 -0
- package/node_modules/@jitl/quickjs-wasmfile-release-sync/dist/index.d.mts +20 -0
- package/node_modules/@jitl/quickjs-wasmfile-release-sync/dist/index.d.ts +20 -0
- package/node_modules/@jitl/quickjs-wasmfile-release-sync/dist/index.js +2 -0
- package/node_modules/@jitl/quickjs-wasmfile-release-sync/dist/index.mjs +2 -0
- package/node_modules/@jitl/quickjs-wasmfile-release-sync/package.json +61 -0
- package/node_modules/acorn/CHANGELOG.md +998 -0
- package/node_modules/acorn/LICENSE +21 -0
- package/node_modules/acorn/README.md +309 -0
- package/node_modules/acorn/bin/acorn +4 -0
- package/node_modules/acorn/dist/acorn.d.mts +897 -0
- package/node_modules/acorn/dist/acorn.d.ts +897 -0
- package/node_modules/acorn/dist/acorn.js +6342 -0
- package/node_modules/acorn/dist/acorn.mjs +6313 -0
- package/node_modules/acorn/dist/bin.js +90 -0
- package/node_modules/acorn/package.json +50 -0
- package/node_modules/fflate/CHANGELOG.md +50 -0
- package/node_modules/fflate/LICENSE +21 -0
- package/node_modules/fflate/README.md +372 -0
- package/node_modules/fflate/esm/browser.js +1805 -0
- package/node_modules/fflate/esm/index.mjs +1827 -0
- package/node_modules/fflate/lib/index.d.ts +746 -0
- package/node_modules/fflate/lib/index.js +1819 -0
- package/node_modules/fflate/lib/node-worker.js +33 -0
- package/node_modules/fflate/lib/worker.js +11 -0
- package/node_modules/fflate/package.json +86 -0
- package/node_modules/fflate/umd/index.js +1 -0
- package/node_modules/quickjs-emscripten-core/LICENSE +21 -0
- package/node_modules/quickjs-emscripten-core/README.md +341 -0
- package/node_modules/quickjs-emscripten-core/README.template.md +70 -0
- package/node_modules/quickjs-emscripten-core/dist/chunk-TAV5CUKK.mjs +2 -0
- package/node_modules/quickjs-emscripten-core/dist/chunk-V2S4ZYJR.mjs +7 -0
- package/node_modules/quickjs-emscripten-core/dist/index.d.mts +2033 -0
- package/node_modules/quickjs-emscripten-core/dist/index.d.ts +2033 -0
- package/node_modules/quickjs-emscripten-core/dist/index.js +7 -0
- package/node_modules/quickjs-emscripten-core/dist/index.mjs +2 -0
- package/node_modules/quickjs-emscripten-core/dist/module-ES6BEMUI.mjs +2 -0
- package/node_modules/quickjs-emscripten-core/dist/module-asyncify-2EFITU5U.mjs +2 -0
- package/node_modules/quickjs-emscripten-core/package.json +49 -0
- package/package.json +25 -4
- package/packages/block-cli/cli.js +353 -0
- package/packages/block-cli/dev-host/assets/host.js +1387 -0
- package/packages/block-cli/dev-host/assets/index.css +1 -0
- package/packages/block-cli/dev-host/block-ui-sandbox.html +2 -0
- package/packages/block-cli/dev-host/fonts/HankenGrotesk-Italic-Variable.ttf +0 -0
- package/packages/block-cli/dev-host/fonts/HankenGrotesk-OFL.txt +94 -0
- package/packages/block-cli/dev-host/fonts/HankenGrotesk-Variable.ttf +0 -0
- package/packages/block-cli/dev-host/fonts/JetBrainsMono-Italic-Variable.ttf +0 -0
- package/packages/block-cli/dev-host/fonts/JetBrainsMono-OFL.txt +93 -0
- package/packages/block-cli/dev-host/fonts/JetBrainsMono-Variable.ttf +0 -0
- package/packages/block-cli/dev-host/index.html +14 -0
- package/packages/block-cli/dev-host/policies.json +4 -0
- package/packages/block-cli/dev-host/stillmade-block-view.js +19 -0
- package/packages/block-cli/dev-server.js +152 -0
- package/packages/block-cli/format.js +89 -0
- package/packages/block-cli/templates.js +260 -0
- package/packages/block-platform/affected-updates.js +38 -0
- package/packages/block-platform/automation-inputs.js +53 -0
- package/packages/block-platform/automation-result.js +56 -0
- package/packages/block-platform/automation.js +44 -0
- package/packages/block-platform/batch-inventory-sources.js +49 -0
- package/packages/block-platform/batch-semantic-values.js +7 -0
- package/packages/block-platform/batch.js +31 -0
- package/packages/block-platform/block-readiness.js +246 -0
- package/packages/block-platform/block-remix-differences.js +19 -0
- package/packages/block-platform/block-remix.js +69 -0
- package/packages/block-platform/block-starters.js +54 -0
- package/packages/block-platform/canvas-semantics.js +7 -0
- package/packages/block-platform/canvas.js +149 -0
- package/packages/block-platform/catalog.js +160 -0
- package/packages/block-platform/chat-requirements.js +42 -0
- package/packages/block-platform/collaboration.js +187 -0
- package/packages/block-platform/conditions.js +61 -0
- package/packages/block-platform/current-semantic-source.js +45 -0
- package/packages/block-platform/experimental-browser-context.js +137 -0
- package/packages/block-platform/failure-policy.js +129 -0
- package/packages/block-platform/first-revenue-project-types.js +46 -0
- package/packages/block-platform/flow-agent-pages.js +28 -0
- package/packages/block-platform/flow-inspection.js +299 -0
- package/packages/block-platform/flow-loop-retained-records.js +57 -0
- package/packages/block-platform/flow-native-output.js +19 -0
- package/packages/block-platform/flow-receipt-input-page.js +22 -0
- package/packages/block-platform/flow-retained-result-page.js +57 -0
- package/packages/block-platform/github-listing-source.js +26 -0
- package/packages/block-platform/goal-source-inputs.js +23 -0
- package/packages/block-platform/goal-source-materials.js +9 -0
- package/packages/block-platform/history.js +35 -0
- package/packages/block-platform/host-release-manifests.js +504 -0
- package/packages/block-platform/hosted-type-reviews.js +43 -0
- package/packages/block-platform/import-eligibility.js +18 -0
- package/packages/block-platform/launch-project-source.js +10 -0
- package/packages/block-platform/launch-project.js +30 -0
- package/packages/block-platform/listing-identity.js +44 -0
- package/packages/block-platform/listings.js +28 -0
- package/packages/block-platform/marketplace-selection.js +29 -0
- package/packages/block-platform/marketplace.js +20 -0
- package/packages/block-platform/motion-project-types.js +55 -0
- package/packages/block-platform/native-host-inventory.js +629 -0
- package/packages/block-platform/native-hosts.js +9 -0
- package/packages/block-platform/node-defaults.js +103 -0
- package/packages/block-platform/pinned-media-value.js +31 -0
- package/packages/block-platform/placement-state.js +35 -0
- package/packages/block-platform/preview-media.js +64 -0
- package/packages/block-platform/product-ad-variants-project-type.js +27 -0
- package/packages/block-platform/product-launch-updated.js +90 -0
- package/packages/block-platform/project-context.js +350 -0
- package/packages/block-platform/project-flow-input-override.js +37 -0
- package/packages/block-platform/project-input-samples.js +21 -0
- package/packages/block-platform/project-inputs.js +63 -0
- package/packages/block-platform/project-onboarding.js +29 -0
- package/packages/block-platform/project-outcome.js +18 -0
- package/packages/block-platform/project-start-input.js +34 -0
- package/packages/block-platform/project-type-composer.js +694 -0
- package/packages/block-platform/project-type-connection-checks.js +19 -0
- package/packages/block-platform/project-type-draft.js +23 -0
- package/packages/block-platform/project-type-events.js +15 -0
- package/packages/block-platform/project-type-loops.js +40 -0
- package/packages/block-platform/project-type-recommendations.js +316 -0
- package/packages/block-platform/project-type-rules.js +51 -0
- package/packages/block-platform/project-type-starters.js +73 -0
- package/packages/block-platform/project-types.js +91 -0
- package/packages/block-platform/release-migration-plan.js +41 -0
- package/packages/block-platform/revenue-review-project-types.js +32 -0
- package/packages/block-platform/run-input-evidence.js +33 -0
- package/packages/block-platform/script-handoff.js +46 -0
- package/packages/block-platform/script-writer.js +29 -0
- package/packages/block-platform/segment-context.js +59 -0
- package/packages/block-platform/segment-results.js +56 -0
- package/packages/block-platform/segment-runner.js +469 -0
- package/packages/block-platform/selected-asset-workspace-sources.js +53 -0
- package/packages/block-platform/semantic-adapters.js +13 -0
- package/packages/block-platform/semantic-context.js +109 -0
- package/packages/block-platform/semantic-inputs.js +82 -0
- package/packages/block-platform/semantic-results.js +136 -0
- package/packages/block-platform/stage-package.js +18 -0
- package/packages/block-platform/steps.js +144 -0
- package/packages/block-platform/type-preview.js +108 -0
- package/packages/block-platform/type-testing.js +43 -0
- package/packages/block-platform/type-workspace.js +95 -0
- package/packages/block-platform/unattended.js +5 -0
- package/packages/block-platform/universal-resolver.js +1 -0
- package/packages/block-platform/video-assets.js +13 -0
- package/packages/block-platform/voiceover-transcript.js +10 -0
- package/packages/block-platform/voiceover.js +47 -0
- package/packages/block-platform/website-source-block.js +14 -0
- package/packages/block-platform/workflow-dependency-order.js +17 -0
- package/packages/block-platform/workflow-event-context.js +31 -0
- package/packages/block-platform/workflow-loop-iteration.js +39 -0
- package/packages/block-platform/workflow-loop-provenance.js +8 -0
- package/packages/block-platform/workflow-loop-retention.js +48 -0
- package/packages/block-platform/workflow-loop-workspace-sources.js +64 -0
- package/packages/block-platform/workflow-loop.js +85 -0
- package/packages/block-platform/workspace-batch-lineage.js +20 -0
- package/packages/block-platform/workspace-canvas-source-projection.js +10 -0
- package/packages/block-platform/workspace-canvas.js +5 -0
- package/packages/block-platform/workspace-collection-outputs.js +40 -0
- package/packages/block-platform/workspace-collection-sources.js +44 -0
- package/packages/block-platform/workspace-derived-context-sources.js +24 -0
- package/packages/block-platform/workspace-input-readset.js +107 -0
- package/packages/block-platform/workspace-output-sources.js +49 -0
- package/packages/block-platform/workspace-source-precondition.js +43 -0
- package/packages/block-platform/workspace-state-sources.js +77 -0
- package/packages/block-sdk/adapter-registry.d.ts +28 -0
- package/packages/block-sdk/adapter-registry.js +119 -0
- package/packages/block-sdk/admission.js +149 -0
- package/packages/block-sdk/agent-inputs.js +49 -0
- package/packages/block-sdk/agent-inspection.js +112 -0
- package/packages/block-sdk/animated-assets-host.d.ts +25 -0
- package/packages/block-sdk/animated-assets-host.js +16 -0
- package/packages/block-sdk/appearance.js +46 -0
- package/packages/block-sdk/asset-generation-host.d.ts +4 -0
- package/packages/block-sdk/asset-generation-host.js +11 -0
- package/packages/block-sdk/audio-generation-example.js +14 -0
- package/packages/block-sdk/audio-score-host.d.ts +11 -0
- package/packages/block-sdk/audio-score-host.js +28 -0
- package/packages/block-sdk/block-storage.d.ts +8 -0
- package/packages/block-sdk/block-storage.js +13 -0
- package/packages/block-sdk/blueprint-host-services.d.ts +11 -0
- package/packages/block-sdk/blueprint-host-services.js +5 -0
- package/packages/block-sdk/blueprint-workspace-host.d.ts +13 -0
- package/packages/block-sdk/blueprint-workspace-host.js +8 -0
- package/packages/block-sdk/board-editor-host.d.ts +18 -0
- package/packages/block-sdk/board-editor-host.js +14 -0
- package/packages/block-sdk/browser-application-artifacts.d.ts +45 -0
- package/packages/block-sdk/browser-application-artifacts.js +144 -0
- package/packages/block-sdk/browser-application-execution.d.ts +40 -0
- package/packages/block-sdk/browser-application-execution.js +106 -0
- package/packages/block-sdk/browser-application-guest.d.ts +32 -0
- package/packages/block-sdk/browser-application-guest.js +126 -0
- package/packages/block-sdk/browser-application.d.ts +22 -0
- package/packages/block-sdk/browser-application.js +102 -0
- package/packages/block-sdk/builder-contract.js +133 -0
- package/packages/block-sdk/byok-payment-host.d.ts +9 -0
- package/packages/block-sdk/byok-payment-host.js +20 -0
- package/packages/block-sdk/canvas-chat-build-broker.d.ts +2 -0
- package/packages/block-sdk/canvas-chat-build-broker.js +2 -0
- package/packages/block-sdk/canvas-chat-descriptor-broker.d.ts +2 -0
- package/packages/block-sdk/canvas-chat-descriptor-broker.js +2 -0
- package/packages/block-sdk/canvas-chat-edit-broker.d.ts +2 -0
- package/packages/block-sdk/canvas-chat-edit-broker.js +2 -0
- package/packages/block-sdk/canvas-chat-host.d.ts +30 -0
- package/packages/block-sdk/canvas-chat-host.js +19 -0
- package/packages/block-sdk/canvas-generation-host.d.ts +8 -0
- package/packages/block-sdk/canvas-generation-host.js +12 -0
- package/packages/block-sdk/canvas-node-host.d.ts +7 -0
- package/packages/block-sdk/canvas-node-host.js +38 -0
- package/packages/block-sdk/canvas-timing.d.ts +2 -0
- package/packages/block-sdk/canvas-timing.js +2 -0
- package/packages/block-sdk/canvas-workspace-host.d.ts +5 -0
- package/packages/block-sdk/canvas-workspace-host.js +19 -0
- package/packages/block-sdk/capabilities.js +675 -0
- package/packages/block-sdk/capability-example.js +8 -0
- package/packages/block-sdk/cloud-storage.d.ts +33 -0
- package/packages/block-sdk/cloud-storage.js +103 -0
- package/packages/block-sdk/collaboration-admission.js +55 -0
- package/packages/block-sdk/comfyui-example.js +25 -0
- package/packages/block-sdk/comfyui-import.js +107 -0
- package/packages/block-sdk/comfyui-models.js +17 -0
- package/packages/block-sdk/comfyui.js +273 -0
- package/packages/block-sdk/configured-connection.js +17 -0
- package/packages/block-sdk/connected-app-view.js +8 -0
- package/packages/block-sdk/connected-app.js +66 -0
- package/packages/block-sdk/connection-adapters.js +173 -0
- package/packages/block-sdk/connection-client.js +16 -0
- package/packages/block-sdk/context.js +53 -0
- package/packages/block-sdk/contracts.js +329 -0
- package/packages/block-sdk/csv-table.js +32 -0
- package/packages/block-sdk/cursor-anchor.js +26 -0
- package/packages/block-sdk/data-values.d.ts +31 -0
- package/packages/block-sdk/data-values.js +92 -0
- package/packages/block-sdk/define-block.d.ts +3 -0
- package/packages/block-sdk/define-block.js +21 -0
- package/packages/block-sdk/desktop-example.js +41 -0
- package/packages/block-sdk/desktop-execution.js +109 -0
- package/packages/block-sdk/desktop-permissions.js +2 -0
- package/packages/block-sdk/desktop-tools.js +35 -0
- package/packages/block-sdk/document-drafts.d.ts +18 -0
- package/packages/block-sdk/document-drafts.js +45 -0
- package/packages/block-sdk/document-identity.d.ts +39 -0
- package/packages/block-sdk/document-identity.js +113 -0
- package/packages/block-sdk/document-operations.js +90 -0
- package/packages/block-sdk/document-store-binding.d.ts +10 -0
- package/packages/block-sdk/document-store-binding.js +74 -0
- package/packages/block-sdk/document-store.d.ts +57 -0
- package/packages/block-sdk/document-store.js +222 -0
- package/packages/block-sdk/editor-execution-host.d.ts +26 -0
- package/packages/block-sdk/editor-execution-host.js +8 -0
- package/packages/block-sdk/example-license.js +6 -0
- package/packages/block-sdk/examples.js +29 -0
- package/packages/block-sdk/export-admission.js +27 -0
- package/packages/block-sdk/export-policy.d.ts +35 -0
- package/packages/block-sdk/export-policy.js +24 -0
- package/packages/block-sdk/file-bundle.js +22 -0
- package/packages/block-sdk/first-party-packages.js +168 -0
- package/packages/block-sdk/generation-catalog.js +115 -0
- package/packages/block-sdk/guest-project-patches.js +23 -0
- package/packages/block-sdk/guest-requirements.js +30 -0
- package/packages/block-sdk/guest-results.js +19 -0
- package/packages/block-sdk/image-description-example.js +9 -0
- package/packages/block-sdk/image-generation-example.js +8 -0
- package/packages/block-sdk/index.d.ts +673 -0
- package/packages/block-sdk/index.js +166 -0
- package/packages/block-sdk/input-source-policy.js +21 -0
- package/packages/block-sdk/interaction-values.d.ts +7 -0
- package/packages/block-sdk/interaction-values.js +13 -0
- package/packages/block-sdk/interactive-requirements.js +33 -0
- package/packages/block-sdk/javascript.js +97 -0
- package/packages/block-sdk/job-continuations.js +10 -0
- package/packages/block-sdk/json-schema.js +104 -0
- package/packages/block-sdk/license-fingerprint.js +41 -0
- package/packages/block-sdk/license-texts.js +9 -0
- package/packages/block-sdk/local-admission.js +30 -0
- package/packages/block-sdk/local-edit-host.d.ts +8 -0
- package/packages/block-sdk/local-edit-host.js +7 -0
- package/packages/block-sdk/media-analysis-example.js +11 -0
- package/packages/block-sdk/media-description-host.d.ts +9 -0
- package/packages/block-sdk/media-description-host.js +19 -0
- package/packages/block-sdk/media-export-host.js +8 -0
- package/packages/block-sdk/media-import-formats.js +31 -0
- package/packages/block-sdk/media-reference-url.d.ts +2 -0
- package/packages/block-sdk/media-reference-url.js +7 -0
- package/packages/block-sdk/media-transform.d.ts +4 -0
- package/packages/block-sdk/media-transform.js +186 -0
- package/packages/block-sdk/media-upload-host.d.ts +10 -0
- package/packages/block-sdk/media-upload-host.js +6 -0
- package/packages/block-sdk/mock-host.d.ts +42 -0
- package/packages/block-sdk/mock-host.js +208 -0
- package/packages/block-sdk/mock-media.d.ts +5 -0
- package/packages/block-sdk/mock-media.js +59 -0
- package/packages/block-sdk/model-portability.js +41 -0
- package/packages/block-sdk/module-bundle.js +71 -0
- package/packages/block-sdk/module-example.js +20 -0
- package/packages/block-sdk/module-hosted.js +82 -0
- package/packages/block-sdk/module-node.js +75 -0
- package/packages/block-sdk/module-runtime.js +105 -0
- package/packages/block-sdk/module-worker.js +100 -0
- package/packages/block-sdk/native-agent-contract.d.ts +15 -0
- package/packages/block-sdk/native-agent-contract.js +32 -0
- package/packages/block-sdk/native-application-execution.js +108 -0
- package/packages/block-sdk/native-application.js +23 -0
- package/packages/block-sdk/native-host-providers.d.ts +3 -0
- package/packages/block-sdk/native-host-providers.js +19 -0
- package/packages/block-sdk/native-preview-contract.d.ts +11 -0
- package/packages/block-sdk/native-preview-contract.js +18 -0
- package/packages/block-sdk/native-workspace-contract.d.ts +20 -0
- package/packages/block-sdk/native-workspace-contract.js +108 -0
- package/packages/block-sdk/network.js +117 -0
- package/packages/block-sdk/package-jobs.js +105 -0
- package/packages/block-sdk/package-semantics.d.ts +2 -0
- package/packages/block-sdk/package-semantics.js +21 -0
- package/packages/block-sdk/package.json +39 -0
- package/packages/block-sdk/panel-crop-host.d.ts +8 -0
- package/packages/block-sdk/panel-crop-host.js +10 -0
- package/packages/block-sdk/panel-generation-host.d.ts +12 -0
- package/packages/block-sdk/panel-generation-host.js +15 -0
- package/packages/block-sdk/panel-prompt-edit-host.d.ts +9 -0
- package/packages/block-sdk/panel-prompt-edit-host.js +8 -0
- package/packages/block-sdk/panel-settings-host.d.ts +7 -0
- package/packages/block-sdk/panel-settings-host.js +8 -0
- package/packages/block-sdk/panel-workflow-host.d.ts +23 -0
- package/packages/block-sdk/panel-workflow-host.js +38 -0
- package/packages/block-sdk/pipeline-asset-host.d.ts +4 -0
- package/packages/block-sdk/pipeline-asset-host.js +4 -0
- package/packages/block-sdk/pipeline-execution-host.d.ts +19 -0
- package/packages/block-sdk/pipeline-execution-host.js +5 -0
- package/packages/block-sdk/pipeline-node-generation-host.d.ts +9 -0
- package/packages/block-sdk/pipeline-node-generation-host.js +9 -0
- package/packages/block-sdk/pipeline-runtime-host.d.ts +7 -0
- package/packages/block-sdk/pipeline-runtime-host.js +29 -0
- package/packages/block-sdk/platform-checks.js +135 -0
- package/packages/block-sdk/port-types.d.ts +8 -0
- package/packages/block-sdk/port-types.js +102 -0
- package/packages/block-sdk/portable-archive.js +47 -0
- package/packages/block-sdk/portable-github.js +43 -0
- package/packages/block-sdk/portable-media-actions.d.ts +4 -0
- package/packages/block-sdk/portable-media-actions.js +69 -0
- package/packages/block-sdk/portable-media-contracts.d.ts +15 -0
- package/packages/block-sdk/portable-media-contracts.js +96 -0
- package/packages/block-sdk/portable.js +219 -0
- package/packages/block-sdk/portable.schema.json +185 -0
- package/packages/block-sdk/presenter-build-broker.d.ts +3 -0
- package/packages/block-sdk/presenter-build-broker.js +2 -0
- package/packages/block-sdk/presenter-gap-broker.d.ts +2 -0
- package/packages/block-sdk/presenter-gap-broker.js +2 -0
- package/packages/block-sdk/presenter-host.d.ts +26 -0
- package/packages/block-sdk/presenter-host.js +13 -0
- package/packages/block-sdk/presenter-insertion-broker.d.ts +2 -0
- package/packages/block-sdk/presenter-insertion-broker.js +2 -0
- package/packages/block-sdk/presenter-placement-broker.d.ts +3 -0
- package/packages/block-sdk/presenter-placement-broker.js +2 -0
- package/packages/block-sdk/presenter-provision-broker.d.ts +2 -0
- package/packages/block-sdk/presenter-provision-broker.js +2 -0
- package/packages/block-sdk/production-context-examples.js +19 -0
- package/packages/block-sdk/project-flow-contract.js +99 -0
- package/packages/block-sdk/python-connection.js +17 -0
- package/packages/block-sdk/recipe.js +100 -0
- package/packages/block-sdk/reference-source.js +39 -0
- package/packages/block-sdk/remix-policy.d.ts +4 -0
- package/packages/block-sdk/remix-policy.js +32 -0
- package/packages/block-sdk/repository-application.d.ts +41 -0
- package/packages/block-sdk/repository-application.js +126 -0
- package/packages/block-sdk/requirement-suggestions.js +5 -0
- package/packages/block-sdk/runtime.js +74 -0
- package/packages/block-sdk/sandbox-node.js +61 -0
- package/packages/block-sdk/sandbox-node.worker.js +18 -0
- package/packages/block-sdk/schema-fields.js +60 -0
- package/packages/block-sdk/script-collaboration.d.ts +3 -0
- package/packages/block-sdk/script-collaboration.js +4 -0
- package/packages/block-sdk/script-host-services.js +8 -0
- package/packages/block-sdk/script-presentation.d.ts +13 -0
- package/packages/block-sdk/script-presentation.js +9 -0
- package/packages/block-sdk/script-project-browser.d.ts +3 -0
- package/packages/block-sdk/script-project-browser.js +5 -0
- package/packages/block-sdk/script-server-services.d.ts +3 -0
- package/packages/block-sdk/script-server-services.js +6 -0
- package/packages/block-sdk/sdk-compatibility.js +30 -0
- package/packages/block-sdk/semantic-contracts.d.ts +37 -0
- package/packages/block-sdk/semantic-contracts.js +84 -0
- package/packages/block-sdk/semantic-declarations.js +25 -0
- package/packages/block-sdk/semantic-freshness.js +7 -0
- package/packages/block-sdk/semantic-relationships.js +15 -0
- package/packages/block-sdk/semantic-schema.js +93 -0
- package/packages/block-sdk/shared-agent-controls.js +53 -0
- package/packages/block-sdk/shared-controls.js +153 -0
- package/packages/block-sdk/shared-view.js +117 -0
- package/packages/block-sdk/shared-work.js +18 -0
- package/packages/block-sdk/shot-planning-host-services.d.ts +26 -0
- package/packages/block-sdk/shot-planning-host-services.js +17 -0
- package/packages/block-sdk/shot-planning-sandbox-host.d.ts +2 -0
- package/packages/block-sdk/shot-planning-sandbox-host.js +2 -0
- package/packages/block-sdk/source-rights.js +22 -0
- package/packages/block-sdk/speech-example.js +8 -0
- package/packages/block-sdk/state-example.js +6 -0
- package/packages/block-sdk/state-migrations.js +49 -0
- package/packages/block-sdk/state.js +13 -0
- package/packages/block-sdk/testing.js +94 -0
- package/packages/block-sdk/timeline-edits.js +37 -0
- package/packages/block-sdk/timeline-example.js +14 -0
- package/packages/block-sdk/timeline-mixer.js +50 -0
- package/packages/block-sdk/timeline-proposal-example.js +7 -0
- package/packages/block-sdk/transcription-example.js +7 -0
- package/packages/block-sdk/transition-settings.js +7 -0
- package/packages/block-sdk/trigger-examples.d.ts +5 -0
- package/packages/block-sdk/trigger-examples.js +29 -0
- package/packages/block-sdk/triggers.d.ts +19 -0
- package/packages/block-sdk/triggers.js +85 -0
- package/packages/block-sdk/two-link-workflow.js +47 -0
- package/packages/block-sdk/universal-resolver.d.ts +87 -0
- package/packages/block-sdk/universal-resolver.js +134 -0
- package/packages/block-sdk/video-assets-host.d.ts +6 -0
- package/packages/block-sdk/video-assets-host.js +35 -0
- package/packages/block-sdk/video-generation-example.js +8 -0
- package/packages/block-sdk/view-bridge.d.ts +6 -0
- package/packages/block-sdk/view-bridge.js +51 -0
- package/packages/block-sdk/view-design.js +41 -0
- package/packages/block-sdk/view-renderer.js +156 -0
- package/packages/block-sdk/view-source.js +24 -0
- package/packages/block-sdk/view.js +224 -0
- package/packages/block-sdk/voiceover-host-services.d.ts +26 -0
- package/packages/block-sdk/voiceover-host-services.js +10 -0
- package/packages/block-sdk/voiceover-workspace-host.d.ts +29 -0
- package/packages/block-sdk/voiceover-workspace-host.js +8 -0
- package/packages/block-sdk/web-example.js +14 -0
- package/packages/block-sdk/workflow-approvals.d.ts +6 -0
- package/packages/block-sdk/workflow-approvals.js +15 -0
- package/packages/block-sdk/workflow-events.d.ts +13 -0
- package/packages/block-sdk/workflow-events.js +16 -0
- package/packages/block-sdk/workspace-application.d.ts +10 -0
- package/packages/block-sdk/workspace-application.js +58 -0
- package/packages/block-sdk/workspace-edits.js +5 -0
- package/packages/block-sdk/workspace-navigation.d.ts +2 -0
- package/packages/block-sdk/workspace-navigation.js +18 -0
- package/packages/block-sdk/workspace-sync.d.ts +8 -0
- package/packages/block-sdk/workspace-sync.js +47 -0
- package/packages/block-sdk/youtube-connection-host.d.ts +3 -0
- package/packages/block-sdk/youtube-connection-host.js +3 -0
- package/packages/block-sdk/youtube-host.d.ts +4 -0
- package/packages/block-sdk/youtube-host.js +6 -0
- package/packages/design-system/theme.css +259 -0
- package/portable.schema.json +185 -0
- package/README.md +0 -3
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Bounded guest-returned pending jobs
|
|
2
|
+
|
|
3
|
+
Original §53 requires Blocks to return pending jobs with automatic queued/loading/running/progress/complete/failed/cancel handling. JavaScript Blocks can now opt into `manifest.jobs={kind:'cooperative',version:1}` and return `job.pending` from their sandboxed code. This is an actual guest-returned continuation protocol consumed by the host, not merely a promise around synchronous final outputs.
|
|
4
|
+
|
|
5
|
+
The opt-in reserves input/state/job arguments. Legacy packages retain their old invocation shape. Each pending return is a strict JSON envelope; continuation data has no authority. The same pinned code and original inputs resume in the same disposable VM for up to 32 turns. CPU time remains cumulative 500 ms across VM evaluations; heap/WASM limits remain 16/32 MiB; serialized continuation, state and final outputs together are bounded by 4 MiB. The host yields between turns but never extends existing browser/Node worker deadlines. Each pending state remains private until a final valid result; cancelled or failed runs publish no intermediate output/state.
|
|
6
|
+
|
|
7
|
+
Progress contains only validated turn/unit counters. Node and browser worker transports validate ordered continuation messages separately from final results; the host job handle validates them again. Omitted progress shows a pending turn, not guessed completion. The UI labels declared continuation units separately from recipe operations. Terminal cancellation remains one-shot and stops the original worker; it cannot restart an invocation or dispatch a provider. Export archives include the runtime helper, and portable SDK documentation describes the API and bounds.
|
|
8
|
+
|
|
9
|
+
The visual authoring checkbox enables the protocol; source code defines its actual continuation behavior. Existing preview, connected and import sample surfaces share the resulting status/cancellation UI. External asynchronous jobs, arbitrary polling URLs, timers inside the guest, network permissions, provider dispatch and durable reload recovery are not introduced. Reload durability is not inferred as a requirement from §53.
|
|
10
|
+
|
|
11
|
+
Source inspection only: no tests, browser QA, verification builds, migrations or provider calls were performed. Implementation was committed locally without push or deployment. Operational/runtime acceptance remains unverified.
|
package/DEFINE_BLOCK.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Defining a semantic Block
|
|
2
|
+
|
|
3
|
+
Structured outputs may declare more fields than a consuming input needs. Static
|
|
4
|
+
compatibility checks require every expected field to have a compatible producer
|
|
5
|
+
guarantee, including nested objects and primitive arrays. Text/string aliases
|
|
6
|
+
and integer-to-number field widening are supported; optional producer fields
|
|
7
|
+
cannot satisfy required inputs. Unknown extra fields do not prove an optional
|
|
8
|
+
target field's type. Execution still validates the actual value and permissions.
|
|
9
|
+
|
|
10
|
+
`defineBlock()` builds an immutable, isolated snapshot of an ordinary SDK package.
|
|
11
|
+
It performs the existing package-admission checks and requires semantic contracts
|
|
12
|
+
on its inputs and outputs. It does not run code, fixtures, adapters or providers,
|
|
13
|
+
install anything, publish, or approve spending.
|
|
14
|
+
|
|
15
|
+
```js
|
|
16
|
+
import {defineBlock,input,output} from './packages/block-sdk/index.js';
|
|
17
|
+
|
|
18
|
+
const block=defineBlock({
|
|
19
|
+
manifest:{
|
|
20
|
+
schemaVersion:1,id:'example.subject-trimmer',version:'1.0.0',
|
|
21
|
+
sdkVersion:'0.1.0',name:'Tidy subject',description:'Trims an email subject.',
|
|
22
|
+
kind:'task',runtime:'recipe',license:'MIT',
|
|
23
|
+
inputs:{subject:input({key:'subject',type:'text',semantic:'email_subject',
|
|
24
|
+
required:true,description:'Subject to tidy'})},
|
|
25
|
+
outputs:{subject:output({key:'subject',type:'text',semantic:'email_subject'})},
|
|
26
|
+
permissions:{project:[],network:[],filesystem:[],secrets:[]}
|
|
27
|
+
},
|
|
28
|
+
recipe:{schemaVersion:1,steps:[{id:'trim',op:'text.trim',
|
|
29
|
+
args:{text:{$input:'subject'}}}],outputs:{subject:{$step:'trim'}}},
|
|
30
|
+
tests:[{name:'Trims spaces',input:{subject:' Hello '},expected:{subject:'Hello'}}]
|
|
31
|
+
});
|
|
32
|
+
const portableSource=JSON.stringify(block);
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The result uses the same package format as normal import, review and execution.
|
|
36
|
+
JavaScript implementations remain source strings executed through the existing
|
|
37
|
+
sandbox, not functions passed into the host. Passing `defineBlock()` is not proof
|
|
38
|
+
that fixtures passed or the Block works in production. Legacy packages keep their
|
|
39
|
+
existing admission path; this helper does not rewrite immutable releases.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Desktop capabilities for Blocks
|
|
2
|
+
|
|
3
|
+
The desktop host implements these capabilities on demand. Importing a Block, installing StillMade, or opening a preview does not request device permissions. The first operation displays StillMade's native consent dialog identifying the Block ID and version. An OS prompt may follow. Grants last for the mounted Block workspace, up to one hour; closing/reloading it or revoking access ends that grant. Imported UI receives neither native IPC nor grant tokens.
|
|
4
|
+
|
|
5
|
+
Declare the exact required scopes in `manifest.permissions.desktop`. Other permission families remain unchanged. Pure recipe/JavaScript execution stays sandboxed; the **Block UI bridge** requests desktop operations through the trusted host.
|
|
6
|
+
|
|
7
|
+
| Scope | UI operation | Behavior |
|
|
8
|
+
| --- | --- | --- |
|
|
9
|
+
| `screen.capture` | `record.start`, `{kind:"screen"}` | Choose a screen or window, then record it. |
|
|
10
|
+
| `cursor.track` | `cursor.track`, or `{cursor:true}` on `record.start` | Global cursor coordinates and display geometry; recordings sample at 10 Hz. Does not monitor clicks or keyboard input. |
|
|
11
|
+
| `camera.capture` | `record.start`, `{kind:"camera"}` | Camera recording after device/OS approval. |
|
|
12
|
+
| `microphone.capture` | `record.start`, `{kind:"microphone"}` | Microphone recording after device/OS approval. |
|
|
13
|
+
| `clipboard.read` | `clipboard.read` | Returns `{text}`; bounded to 100,000 characters. |
|
|
14
|
+
| `clipboard.write` | `clipboard.write`, `{text}` | Explicit permission to replace clipboard text. |
|
|
15
|
+
| `media.pick` | `media.pick` | Native picker returns `{assets}` for up to 20 selected media files; no arbitrary path access. |
|
|
16
|
+
| `notifications.show` | `notifications.show`, `{body}` | StillMade/Block-branded desktop notification; maximum one every ten seconds. |
|
|
17
|
+
| `power.keep-awake` | `power.keep-awake`, `{enabled:true}` | Prevent app suspension until disabled, revoked, closed, or expired. |
|
|
18
|
+
| `native.tools` | `tool.status` and declared `tool.*` operations | Use one exact versioned adapter for an approved installed desktop application. |
|
|
19
|
+
|
|
20
|
+
The host always checks declarations. Declaring a scope does not grant it. A browser receives a clear desktop-required error; there is no silent paid/cloud fallback.
|
|
21
|
+
|
|
22
|
+
## Approved native desktop tools
|
|
23
|
+
|
|
24
|
+
Native applications use a separate allowlisted adapter contract. The Block stays an ordinary sandboxed SDK package and must declare both `permissions.desktop:["native.tools"]` and a desktop-only platform matrix. `manifest.desktopTools` pins the exact adapter version and actions. A Block cannot supply an executable, command, path, environment variable, installer, or additional argument.
|
|
25
|
+
|
|
26
|
+
Natron adapter version 1 currently exposes `launch`, `project.import`, `project.open`, and `project.render`. Project import copies one user-selected `.ntp` file into that Block version's workspace and returns an opaque project ID. Open accepts only that opaque ID or `latest`. Render accepts a locally authorized StillMade video, bounded Reader/Writer node names, and a frame range of at most 10,001 frames. The trusted host invokes `NatronRenderer` with only the pinned project, `-i`, `-w`, host-resolved input/output paths, and the bounded range. It never accepts Natron's Python/interpreter flags or a Block-supplied path. The completed render is imported into the StillMade media library and returned as a typed video asset.
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"platforms":{"phone":{"supported":false,"reason":"Requires Natron and StillMade Desktop."},"browser":{"supported":false,"reason":"Requires Natron and StillMade Desktop."},"desktop":{"supported":true}},
|
|
31
|
+
"permissions":{"project":[],"network":[],"filesystem":[],"secrets":[],"desktop":["native.tools","media.pick"]},
|
|
32
|
+
"desktopTools":[{"id":"org.natron.Natron","adapterVersion":1,"actions":["launch","project.import","project.open","project.render"]}]
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
The mapped Natron Block uses `video` as both its primary typed input and output, with semantic `video`. This allows an explicit Project Type chain such as video producer → Natron → review/export Block. Its custom interface submits the connected original input and render settings to `StillMade.run`; the approved desktop executor invokes the renderer and returns the newly registered artifact with a bound native receipt. Source fixtures and JavaScript passthrough do not prove native execution. See [Native desktop execution](DESKTOP_EXECUTION.md) for `src/desktop.json`, offline admission, host callbacks and retained-result requirements.
|
|
37
|
+
|
|
38
|
+
## Ready-to-import recording Blocks
|
|
39
|
+
|
|
40
|
+
Download the complete [Screen recorder](/block-sdk/examples/screen-recorder.stillmade.json), [Camera recorder](/block-sdk/examples/camera-recorder.stillmade.json), or [Microphone recorder](/block-sdk/examples/microphone-recorder.stillmade.json). These packages also ship in the SDK archive. Import one through StillMade’s normal review flow, then use its preview in the desktop app. Each includes a themed interface and pure runtime fixtures that preserve the media reference. The fixtures use synthetic references; they do not exercise your device.
|
|
41
|
+
|
|
42
|
+
The interface saves recording media before sending it through the runtime. If that handoff fails, Retry uses the saved recording without recording again.
|
|
43
|
+
|
|
44
|
+
## Recording example
|
|
45
|
+
|
|
46
|
+
Manifest fragment:
|
|
47
|
+
|
|
48
|
+
```json
|
|
49
|
+
{"permissions":{"project":[],"network":[],"filesystem":[],"secrets":[],"desktop":["screen.capture","cursor.track"]}}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Inside your validated `view.javascript`, attach explicit start/stop controls:
|
|
53
|
+
|
|
54
|
+
```js
|
|
55
|
+
const start = document.getElementById('start');
|
|
56
|
+
const stop = document.getElementById('stop');
|
|
57
|
+
const status = document.getElementById('status');
|
|
58
|
+
start.addEventListener('click', async () => {
|
|
59
|
+
try {
|
|
60
|
+
await StillMade.desktop('record.start', {kind:'screen', cursor:true});
|
|
61
|
+
status.textContent = 'Recording. Press Stop when finished.';
|
|
62
|
+
} catch (error) { status.textContent = error.message; }
|
|
63
|
+
});
|
|
64
|
+
stop.addEventListener('click', async () => {
|
|
65
|
+
try {
|
|
66
|
+
const result = await StillMade.desktop('record.stop');
|
|
67
|
+
// Declare matching video and metadata inputs in the Block manifest.
|
|
68
|
+
// Your sandboxed runtime can pass these through as typed outputs.
|
|
69
|
+
await StillMade.run({video:result.asset, cursor:{samples:result.cursor, displays:result.displays}});
|
|
70
|
+
status.textContent = 'Recording saved to your local media library.';
|
|
71
|
+
} catch (error) { status.textContent = error.message; }
|
|
72
|
+
});
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
`record.stop` returns `{asset,cursor,displays,coordinates}`. `asset` is a canonical media reference with `assetId`, `versionId`, `kind`, `mime`, and a device-local `sm-media:` URL. Cursor samples contain `{x,y,time}`: global device-independent screen coordinates and milliseconds relative to recording start. Multiple monitors can have negative coordinates. These are not automatically converted into cropped-window video coordinates. Share/upload media through the existing host media flow before teammates on other devices can use it.
|
|
76
|
+
|
|
77
|
+
`record.cancel` discards an active capture. `session.close` revokes all access and cancels capture. StillMade also renders a host-owned cancel/revoke control outside the Block iframe. Screen source selection happens for every recording. No preview can bypass consent or access the native bridge directly.
|
|
78
|
+
|
|
79
|
+
Current limits: one recording per Block workspace, 30 minutes, 128 MiB, WebM output. Hitting a limit cancels the recording; callers should stop and save earlier. Camera recording is video-only; microphone recording is audio-only. Optional `{systemAudio:true}` is implemented through Windows loopback; other platforms reject it explicitly. Microphone mixing, global click/keyboard hooks, remote-control automation, arbitrary subprocesses, and folder watching are not provided by these scopes.
|
|
80
|
+
|
|
81
|
+
## Testing and installation
|
|
82
|
+
|
|
83
|
+
Test the pure typed-input/output runtime with synthetic media references and the regular SDK fixture tests. Then test the actual desktop operation interactively: allow, deny, stop, cancel, close, expired access, missing devices, source selection, and OS revocation. Passing a synthetic fixture or an Electron renderer test does **not** verify real OS permissions.
|
|
84
|
+
|
|
85
|
+
No extra native dependency, installer prompt, or blanket OS permission is introduced. macOS may require the user to enable StillMade in Screen Recording settings and restart it; StillMade cannot bypass that OS decision. Windows privacy settings may also block camera/microphone access. The grant dialog appears only when the Block requests the relevant operation.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Native desktop execution
|
|
2
|
+
|
|
3
|
+
A Block declaring `manifest.desktopTools`, `permissions.desktop: ["native.tools"]`, or a package-level `desktop` mapping requires a trusted desktop executor. Its JavaScript or recipe cannot establish that a native application ran. The generic JavaScript worker and synchronous recipe runner reject these packages with `DESKTOP_EXECUTION_REQUIRED`.
|
|
4
|
+
|
|
5
|
+
This guard applies conservatively to existing native packages too. Their immutable source, release identity and installed pins are unchanged. A legacy package without the mapping below can retain its reviewed interactive tool controls, but generic connected execution requires a new mapped release. Do not rewrite old package bytes or treat `return {video: input.video}` as a render.
|
|
6
|
+
|
|
7
|
+
## Declarative input and output mapping
|
|
8
|
+
|
|
9
|
+
The package's optional `desktop` object is stored as `src/desktop.json` in an editable SDK folder. The package must remain a stateless JavaScript or recipe package with its original sandbox rules, an approved `native.tools` declaration and desktop-only platforms. Version 1 currently supports only Natron adapter 1's `project.render` action:
|
|
10
|
+
|
|
11
|
+
```json
|
|
12
|
+
{
|
|
13
|
+
"schemaVersion": 1,
|
|
14
|
+
"tool": "org.natron.Natron",
|
|
15
|
+
"action": "project.render",
|
|
16
|
+
"arguments": {
|
|
17
|
+
"projectId": {"input": "projectId"},
|
|
18
|
+
"input": {"input": "video"},
|
|
19
|
+
"reader": {"input": "reader"},
|
|
20
|
+
"writer": {"input": "writer"},
|
|
21
|
+
"firstFrame": {"input": "firstFrame"},
|
|
22
|
+
"lastFrame": {"input": "lastFrame"}
|
|
23
|
+
},
|
|
24
|
+
"outputs": {"video": "asset"}
|
|
25
|
+
}
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Each mapped port must be declared in the manifest. `projectId`, `reader`, and `writer` are text; `video` is a video reference; frame ports are integers. All six values must be present after declared defaults and input resolution. Map every declared output to a compatible approved result field; Natron's `asset` is a video. Constants, extra arguments, commands, executable paths, environment variables and scripts are not supported. New native actions require a reviewed host adapter and a corresponding SDK argument/result contract.
|
|
29
|
+
|
|
30
|
+
The same mapping survives JSON packages, portable archives, editable source downloads, folder/ZIP imports, CLI packaging and verified GitHub SDK-folder import. A mapping alone grants no permission and does not install or launch the application.
|
|
31
|
+
|
|
32
|
+
## Trusted host execution
|
|
33
|
+
|
|
34
|
+
The custom interface calls `StillMade.run` with the connected input and render settings. The host supplies the executor to `runPackageAsync`; package code cannot install this callback:
|
|
35
|
+
|
|
36
|
+
```js
|
|
37
|
+
await runPackageAsync(pkg, inputs, {
|
|
38
|
+
signal,
|
|
39
|
+
desktop: async (pinnedPackage, validatedInput, {signal, request}) => {
|
|
40
|
+
const invocation = desktopInvocation(pinnedPackage, validatedInput);
|
|
41
|
+
// Host-owned integration: check exact-source consent, project and media
|
|
42
|
+
// ownership, saved settings, approved operation, completion and artifact.
|
|
43
|
+
const completed = await authorizedNativeHostRun(invocation, {signal});
|
|
44
|
+
const outputs = desktopOutputs(pinnedPackage, completed.result);
|
|
45
|
+
return {
|
|
46
|
+
outputs,
|
|
47
|
+
desktopReceipt: {
|
|
48
|
+
schemaVersion: 1,
|
|
49
|
+
requestId: request.requestId,
|
|
50
|
+
packageDigest: request.packageDigest,
|
|
51
|
+
inputDigest: request.inputDigest,
|
|
52
|
+
outputDigest: await digest(outputs),
|
|
53
|
+
tool: pinnedPackage.desktop.tool,
|
|
54
|
+
adapterVersion: 1,
|
|
55
|
+
action: pinnedPackage.desktop.action,
|
|
56
|
+
executionId: completed.executionId
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
`authorizedNativeHostRun` is illustrative host code, not an SDK API. It must perform the real approved native invocation, enforce cancellation and revocation, verify the output artifact and register its media identity before returning. It must not accept a receipt, output URL or claimed process success from Block code as authority. The Block cannot choose the executable, arbitrary path, credentials or permission scope.
|
|
64
|
+
|
|
65
|
+
`desktopInvocation(pkg, inputs)` returns the declared `tool`, `operation` (`tool.project.render`), bounded argument mapping and output mapping. `desktopOutputs(pkg, nativeResult)` extracts and type-checks the declared results. The SDK pins copied package bytes and validated inputs before calling the host, creates a fresh cryptographic UUID request identity, and checks receipt source/input/action/output bindings and cancellation before returning. `RunPackageResult.desktopReceipt` must be retained with outputs.
|
|
66
|
+
|
|
67
|
+
Receipt validation proves the envelope's bindings. It is not a cryptographic attestation of Natron, an independent check of stored media bytes, or permission to access another project's output. The trusted host still owns those checks. Host fixture mocks must never be described as native render proof.
|
|
68
|
+
|
|
69
|
+
## Connected execution, reuse and admission
|
|
70
|
+
|
|
71
|
+
Native Steps require an interactive connected plan and executor. They form a runtime-approval boundary in ordinary local, independent or background plans. A connected native result without its receipt is rejected even when a caller-supplied generic executor returns correctly typed passthrough output. Retained successful results must keep the receipt bound to the exact package, actual validated inputs and output. `validateDesktopExecutionRecord` checks those bindings during resume/adoption without running the application; host ownership checks remain required. Changes to input, source or output invalidate reuse.
|
|
72
|
+
|
|
73
|
+
A reviewed condition or failure policy can still skip a Step. Such a record has `skipped: true` and no native receipt: it establishes a skip or fallback, not completed native work.
|
|
74
|
+
|
|
75
|
+
Offline `validate`, `test`, `pack`, `admitLocalPackage` and `admitPackage` without a desktop executor perform source and fixture-contract checks only. Reports carry `execution: "not-run"`, `tests: 0`, `fixtureContracts`, `liveVerified: false` and `reviewRequired: true`. CLI `preview` and `testPackage` require the real executor to run; an unavailable executor never counts as a passing render. A supplied desktop executor can exercise contract fixtures, but SDK reports still do not claim independent live verification. Execute a representative authorized source through the real application, inspect the exported artifact, and verify downstream receipt and media identity before reporting integration complete.
|
package/FRAME_VIEWS.md
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Frame views: any interface code
|
|
2
|
+
|
|
3
|
+
A frame view (`"runtime": "frame"` in the view) is an interface written with
|
|
4
|
+
ordinary web code: React, Svelte, Vue or Preact bundles, SVG, canvas and
|
|
5
|
+
WebGL, pointer capture and drag, timers, loops, recursion, classes and Web
|
|
6
|
+
Workers. Use it when the reviewed subset of standard views is too small for
|
|
7
|
+
the interface you want.
|
|
8
|
+
|
|
9
|
+
## Folder layout
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
my-block/
|
|
13
|
+
stillmade.block.json
|
|
14
|
+
src/run.js or another runtime (recipe, module, capability)
|
|
15
|
+
src/view.html markup, for example <div id="root"></div>
|
|
16
|
+
src/view.css styles; use StillMade's theme variables
|
|
17
|
+
src/view.js ONE classic script: bundle with --format=iife
|
|
18
|
+
src/view.config.json {"runtime": "frame"}
|
|
19
|
+
tests/fixtures.json
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
`src/view.config.json` may also set `"appearance"` and `"files"` (assets, see
|
|
23
|
+
below). Bundle npm dependencies into `src/view.js` as an IIFE, for example:
|
|
24
|
+
|
|
25
|
+
```sh
|
|
26
|
+
esbuild src/view.jsx --bundle --format=iife --minify --jsx=automatic \
|
|
27
|
+
--define:process.env.NODE_ENV='"production"' --outfile=src/view.js
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Limits: markup and each stylesheet up to 256 KiB, `view.js` up to 4 MiB,
|
|
31
|
+
and up to 32 asset files with 8 MiB in total.
|
|
32
|
+
|
|
33
|
+
## The `StillMade` object
|
|
34
|
+
|
|
35
|
+
Frame views get the same `StillMade` object as standard views: `input` and
|
|
36
|
+
`onInput`, `run`, `useOutput`, `getShared`, `onShared`, `updateShared`,
|
|
37
|
+
`bindShared`, `connectDocument`, `previewImage`, `previewMedia`, `render`
|
|
38
|
+
and the rest of the interface bridge. In addition:
|
|
39
|
+
|
|
40
|
+
| Member | What it does |
|
|
41
|
+
| --- | --- |
|
|
42
|
+
| `StillMade.asset(path)` | A `blob:` URL for one of the view's asset files, for `<img>`, `new FontFace()` or `<video>`. |
|
|
43
|
+
| `StillMade.assetBytes(path)` | A copy of an asset file's bytes as an `ArrayBuffer`. |
|
|
44
|
+
|
|
45
|
+
Shared state works as in every view: keep each independently edited value in
|
|
46
|
+
its own field (for example `point0`, `point1`) so two people editing
|
|
47
|
+
different values never conflict.
|
|
48
|
+
|
|
49
|
+
## Theming
|
|
50
|
+
|
|
51
|
+
The theme variables from StillMade's design system are always defined:
|
|
52
|
+
`var(--bg)`, `var(--bg-elev-1)`, `var(--fg)`, `var(--fg-muted)`,
|
|
53
|
+
`var(--accent)`, `var(--border-tok)`, `var(--divider)`, `var(--r-3)` and the
|
|
54
|
+
rest. Colors written with them follow Light, Dark and White automatically.
|
|
55
|
+
Frame views are not required to use them; the appearance check reports
|
|
56
|
+
hard-coded colors as advice instead of refusing the view.
|
|
57
|
+
|
|
58
|
+
## Assets
|
|
59
|
+
|
|
60
|
+
Images, fonts, JSON, audio and video the view needs ship as files named by
|
|
61
|
+
SHA-256, like module files:
|
|
62
|
+
|
|
63
|
+
```json
|
|
64
|
+
{"runtime": "frame", "files": {"schemaVersion": 1, "files": {
|
|
65
|
+
"fonts/inter.woff2": {"sha256": "…", "bytes": 48256, "mediaType": "font/woff2"}
|
|
66
|
+
}}}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
`stillmade-block pack` fills in the digests and sizes. StillMade checks every
|
|
70
|
+
file against its SHA-256 before the view starts.
|
|
71
|
+
|
|
72
|
+
## What the frame does not allow
|
|
73
|
+
|
|
74
|
+
The view runs in an opaque-origin frame with its own policy:
|
|
75
|
+
|
|
76
|
+
- no network (`fetch`, WebSocket and remote images, fonts or scripts fail);
|
|
77
|
+
- no code from strings (`eval`, `new Function`, inline event attributes) and
|
|
78
|
+
no extra script elements;
|
|
79
|
+
- no navigation, popups, downloads, forms that submit, or dialogs;
|
|
80
|
+
- no WebAssembly on the page (run heavy computation in the Block's runtime,
|
|
81
|
+
for example a module Block, and call it with `StillMade.run`);
|
|
82
|
+
- no storage or access to StillMade's page.
|
|
83
|
+
|
|
84
|
+
Workers created from `blob:` URLs are allowed and run off the page's thread.
|
|
85
|
+
|
|
86
|
+
## Run limits
|
|
87
|
+
|
|
88
|
+
StillMade compiles the view so every function and loop checks a time budget.
|
|
89
|
+
One task may run for 250 ms; past that it is stopped with an error, and a view
|
|
90
|
+
that keeps the page busy most of the time, stops answering, or navigates its
|
|
91
|
+
frame is closed with a message. A single built-in operation that blocks for a
|
|
92
|
+
second or more (a huge sort, or a regular expression that backtracks) also closes
|
|
93
|
+
the view where the browser reports it. Move long computation into a Worker or the
|
|
94
|
+
Block's runtime.
|
|
95
|
+
|
|
96
|
+
The host enforces every permission itself: a view's code can message the host
|
|
97
|
+
directly, so a read-only viewer cannot run the Block or save outputs from any
|
|
98
|
+
view.
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# Import an application from GitHub
|
|
2
|
+
|
|
3
|
+
This guide describes the current SDK boundaries and the integration procedure.
|
|
4
|
+
It does **not** claim that every repository can already run inside StillMade.
|
|
5
|
+
The source contract, import inspector, restricted UI and reviewed native adapter
|
|
6
|
+
are implemented. An isolated application build worker and bundled React/Vue/Svelte
|
|
7
|
+
runtime are still required for arbitrary web applications.
|
|
8
|
+
|
|
9
|
+
## Preserve the requested scope
|
|
10
|
+
|
|
11
|
+
The default GitHub import intent is the complete application with its existing
|
|
12
|
+
interface. Record the immutable commit, application root and important actions
|
|
13
|
+
before adapting code. The importer must not replace that intent with one utility.
|
|
14
|
+
The separate **Extract one capability** mode explicitly authorizes narrower scope.
|
|
15
|
+
|
|
16
|
+
The in-app full-application inspection pins source and retains an inventory of
|
|
17
|
+
code, binary assets, dependency manifests, lockfiles, symlinks and submodules.
|
|
18
|
+
It returns `not-built`, including unfinished feature and runtime checks. A complete
|
|
19
|
+
file inventory is neither a complete dependency checkout nor a successful build.
|
|
20
|
+
Inspection uses public unauthenticated GitHub APIs; it does not authorize private
|
|
21
|
+
repository access, install dependencies, execute scripts or charge model credits.
|
|
22
|
+
|
|
23
|
+
Use the exported `defineRepositoryApplication` contract to record the requested
|
|
24
|
+
scope, interface, versioned route and source-backed feature ledger. Use
|
|
25
|
+
`assessRepositoryApplication` to identify missing evidence. Its highest status is
|
|
26
|
+
`evidence-complete`: supplied receipt declarations are not independent execution
|
|
27
|
+
verification. The assessor always reports `executionPerformed:false` and
|
|
28
|
+
`independentlyVerified:false`. A model cannot certify its own integration by
|
|
29
|
+
filling in that object.
|
|
30
|
+
|
|
31
|
+
## Choose an actual runtime
|
|
32
|
+
|
|
33
|
+
| Source | Current boundary |
|
|
34
|
+
| --- | --- |
|
|
35
|
+
| Existing SDK source folder/package | Import its pinned source and run normal admission. |
|
|
36
|
+
| Bounded JS or recipe capability | Adapt the real computation to the existing sandbox and provide typed contracts. This is capability scope. |
|
|
37
|
+
| Restricted HTML/JS custom view | Supported within the documented DOM and bridge restrictions. Original styling may be preserved. |
|
|
38
|
+
| React, Vue, Svelte, workers, arbitrary WASM or full frontend bundle | No general application runtime yet. Do not paste a bundle into `view.javascript`, remove security checks, or claim a static mount as acceptance. |
|
|
39
|
+
| Natron native application | An approved desktop adapter retains the original application in a separate native window and performs bounded rendering. It is not embedded web UI or a source build. See [Desktop execution](DESKTOP_EXECUTION.md). |
|
|
40
|
+
| Arbitrary native executable, Python/Node backend or full stack service | Requires an implemented, reviewed isolated runtime and capability contract. A README, wrapper or external command is insufficient. |
|
|
41
|
+
|
|
42
|
+
The separate experimental [browser application contract](BROWSER_APPLICATIONS.md)
|
|
43
|
+
preserves compiled assets and original UI code with a Block-owned lifecycle
|
|
44
|
+
adapter. The exact reviewed Method Draw source has a private desktop install,
|
|
45
|
+
editing and SVG export path. Other applications require separate source,
|
|
46
|
+
runtime and result review; package validation alone is insufficient.
|
|
47
|
+
|
|
48
|
+
## Keep the original appearance
|
|
49
|
+
|
|
50
|
+
For an eligible restricted view, place this option in `src/view.json`:
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{"appearance":"original"}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Keep the application's permitted CSS in `src/view.css`. StillMade still supplies
|
|
57
|
+
the outer workspace, focus and permission controls. Original appearance does not
|
|
58
|
+
grant extra scripting, networking, storage or navigation permissions.
|
|
59
|
+
|
|
60
|
+
To offer optional StillMade styling, include `src/view.themed.css` using the
|
|
61
|
+
documented theme tokens. The themed preview is offered only when that stylesheet
|
|
62
|
+
passes appearance checks. Omitted appearance preserves the existing package
|
|
63
|
+
behavior; published packages are not rewritten to change this preference.
|
|
64
|
+
|
|
65
|
+
## Connect meaningful inputs and outputs
|
|
66
|
+
|
|
67
|
+
Every required input needs a physical type, a precise semantic meaning, allowed
|
|
68
|
+
sources, and an explicit way to supply missing data. Do the same for output
|
|
69
|
+
meaning and representation. A video output is the actual new saved video, with
|
|
70
|
+
its own exact asset/version identity; returning the source video is not evidence
|
|
71
|
+
that an editor transformed it.
|
|
72
|
+
|
|
73
|
+
The existing `image` type also accepts bounded inline RGBA pixels as
|
|
74
|
+
`{width, height, data}`. A small editor can import those pixels and return its
|
|
75
|
+
actual composited pixels without inventing an asset ID. Respect both the image
|
|
76
|
+
contract and the complete runtime message limits. Large or referenced media
|
|
77
|
+
still needs the host's authenticated asset resolution and materialization path;
|
|
78
|
+
a guest-local data/blob URL is not a durable shared asset.
|
|
79
|
+
|
|
80
|
+
Map existing app behavior to SDK input, shared-document and output interfaces.
|
|
81
|
+
Do not recreate the application's logic in the shared host or add a special
|
|
82
|
+
Block-ID branch. Persist editable state through declared host services and keep
|
|
83
|
+
two placements separate. Input changes, revoked permission, cancellation and
|
|
84
|
+
closed workspaces must reject late completion.
|
|
85
|
+
|
|
86
|
+
Native output-producing actions use `src/desktop.json`: declarative mappings from
|
|
87
|
+
typed input ports into an approved adapter and from its actual result into output
|
|
88
|
+
ports. The trusted host produces a receipt bound to the package, invocation,
|
|
89
|
+
inputs and outputs. Neither a Block's view nor its JavaScript can supply the host
|
|
90
|
+
executor or mint accepted native evidence. Legacy native packages without this
|
|
91
|
+
mapping cannot pass a generic workflow by returning their input unchanged.
|
|
92
|
+
|
|
93
|
+
## Prove the integration
|
|
94
|
+
|
|
95
|
+
1. Establish an upstream baseline with a representative input and inspect the
|
|
96
|
+
exported bytes. Retain the original app's important behavior and interface.
|
|
97
|
+
2. Build only in a disposable isolated worker without application credentials,
|
|
98
|
+
customer mounts or unrestricted network access. Preserve licenses and exact
|
|
99
|
+
dependency/asset identities. If no suitable worker exists, report that gap.
|
|
100
|
+
3. Execute a real producer → imported application → consumer through the
|
|
101
|
+
production resolver. Fixtures, screenshots, schemas and successful process
|
|
102
|
+
exit codes alone cannot prove transformed output.
|
|
103
|
+
4. Decode exports; compare with the baseline; verify the consumer receives those
|
|
104
|
+
exact bytes. Check real playback separately from codec decoding.
|
|
105
|
+
5. Save/reopen, edit while running, cancel, revoke access, retry failures, use two
|
|
106
|
+
placements and verify stale output behavior. Exercise permission and resource
|
|
107
|
+
limits with hostile inputs.
|
|
108
|
+
6. Retain the tested package digest, source commit, runtime version, commands,
|
|
109
|
+
bounded logs, artifacts and pass/fail evidence. Install the exact artifact
|
|
110
|
+
tested. Edits require new checks and published contract changes need a new
|
|
111
|
+
version.
|
|
112
|
+
|
|
113
|
+
Keep inspection, source admission, runtime tests and production verification as
|
|
114
|
+
separate states. Native bindings validate host-issued evidence; they are not a
|
|
115
|
+
cryptographic attestation from an arbitrary caller. The trusted host is responsible
|
|
116
|
+
for process isolation and actual artifact verification.
|
|
117
|
+
|
|
118
|
+
The first local Natron acceptance rendered 24 frames of an inverted synthetic
|
|
119
|
+
video, passed the real result through a three-Step workflow, matched its decoded
|
|
120
|
+
pixels exactly to an independent native baseline, and reopened saved workflow and
|
|
121
|
+
media. The same H.264/YUV420 output also played all 24 frames in a sandboxed
|
|
122
|
+
Electron video element. ProRes decoded successfully in the native probe but did
|
|
123
|
+
not play in Chromium; choose a browser-compatible Writer codec or explicitly
|
|
124
|
+
produce a separate playback proxy. This establishes that specific macOS
|
|
125
|
+
software-rendering path. It does not
|
|
126
|
+
establish all Natron features, third-party plugins, original GUI containment,
|
|
127
|
+
product UI media routing, other operating systems, source build reproducibility,
|
|
128
|
+
or arbitrary-repository support. The repository acceptance harness and evidence
|
|
129
|
+
remain distinct from the SDK's offline tests.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
Use `runtime: "capability"` with `operation: "image.describe"` when a Block must inspect one image and return plain text. This is the portable boundary for visual analysis: the Block declares its image input, analysis instructions, output, tests, and license; StillMade owns image loading, provider credentials, model/payment selection, approval, accounting, and the retained execution record.
|
|
2
|
+
|
|
3
|
+
The downloaded SDK includes `examples/describe-image.stillmade.json` and `packages/block-sdk/image-description-example.js`.
|
|
4
|
+
|
|
5
|
+
```json
|
|
6
|
+
{
|
|
7
|
+
"manifest": {
|
|
8
|
+
"schemaVersion": 1,
|
|
9
|
+
"sdkVersion": "0.1.0",
|
|
10
|
+
"id": "example.describe-image",
|
|
11
|
+
"version": "1.0.0",
|
|
12
|
+
"name": "Describe an image",
|
|
13
|
+
"description": "Turn one owned image into concise production-ready visual notes.",
|
|
14
|
+
"kind": "task",
|
|
15
|
+
"runtime": "capability",
|
|
16
|
+
"entry": "src/capability.json",
|
|
17
|
+
"license": "MIT",
|
|
18
|
+
"inputs": {"image": {"type": "image", "primary": true}},
|
|
19
|
+
"outputs": {"description": {"type": "text", "primary": true, "role": "visual_description"}},
|
|
20
|
+
"permissions": {"project": [], "capabilities": ["image.describe"], "network": [], "filesystem": [], "secrets": []},
|
|
21
|
+
"ui": [{"control": "asset", "port": "image"}]
|
|
22
|
+
},
|
|
23
|
+
"capability": {
|
|
24
|
+
"schemaVersion": 1,
|
|
25
|
+
"operation": "image.describe",
|
|
26
|
+
"image": {"$input": "image"},
|
|
27
|
+
"instruction": "Describe only visibly supported subject matter, composition, lighting, color, texture, camera feel and visual style. Return concise production-ready plain text.",
|
|
28
|
+
"maxTokens": 700,
|
|
29
|
+
"output": "description"
|
|
30
|
+
},
|
|
31
|
+
"tests": [{
|
|
32
|
+
"name": "Blue image",
|
|
33
|
+
"input": {"image": {"width": 1, "height": 1, "data": [20, 80, 200, 255]}},
|
|
34
|
+
"expectations": {"description": {"kind": "text", "minLength": 20, "maxLength": 32768, "includes": ["blue"]}}
|
|
35
|
+
}]
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Declare exactly one `image` input (or one `image[]` input to describe or compare one to four images together, in order) and one `text` output. The descriptor contains exactly `schemaVersion`, `operation`, `image`, `instruction`, `maxTokens`, and `output`. `image.$input` names the declared image port. Instructions must contain 1–8,000 characters and `maxTokens` must be 1–4,096. Provider names, endpoints, keys, payment settings, arbitrary URLs, and executable code do not belong in the descriptor.
|
|
40
|
+
|
|
41
|
+
Fixture inputs may use bounded RGBA pixels for offline contract validation. Real runs use a persistent image reference selected through StillMade. The trusted host requires the referenced media to belong to the signed-in account, reads and bounds the stored bytes, canonicalizes the image to PNG, and sends that image through the exact approved provider request. Block code never receives credentials or storage access.
|
|
42
|
+
|
|
43
|
+
Tests describe nondeterministic text expectations: `kind:"text"`, ordered `minLength` and `maxLength`, and up to eight literal `includes` phrases. They do not contain fabricated descriptions presented as provider evidence. Offline validation and packaging inspect the contract and report that live review remains required. In StillMade, the creator runs every fixture and a separate sample, reviews the output, and confirms the import.
|
|
44
|
+
|
|
45
|
+
`prepareCapabilityInvocation` returns `{operation:"image.describe",image,instruction,maxTokens}`. The host returns the named text output through the same capability result, quote, review, project execution, cancellation, failure, and receipt flow used by other hosted Blocks. A completed text record proves the exact package, input, selection, and output passed validation; it does not prove that every sentence is factually correct, so the user reviews the description before using it downstream.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Timeline range and workflow decision inputs
|
|
2
|
+
|
|
3
|
+
Original specification §17 calls for timeline-range and approve/reject controls. Shared Create provides these automatically for scalar `timeline-range` and `approval` inputs. Connected or project-bound inputs remain read-only. These controls use ordinary typed workflow data; they never grant host authority or directly mutate a project.
|
|
4
|
+
|
|
5
|
+
The types previously admitted arbitrary `schemaVersion: 1` documents. That contract remains valid. Existing documents are displayed with their existing data editor until the user explicitly chooses the new controls. Opening controls does not change the input; applying a range or selecting a decision replaces it. The target Block must understand version 2. No conversion or defaults are injected into existing fixtures, saved settings or connected data.
|
|
6
|
+
|
|
7
|
+
## Version 2 contracts
|
|
8
|
+
|
|
9
|
+
A timeline range has exactly these fields:
|
|
10
|
+
|
|
11
|
+
```json
|
|
12
|
+
{"schemaVersion":2,"startMs":1000,"endMs":2500}
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Both times must be finite numbers in milliseconds, with `0 <= startMs <= endMs <= Number.MAX_SAFE_INTEGER`. Fractional milliseconds and equal endpoints are allowed. Equal endpoints represent a point. The upper bound is a numeric safety limit, not a claim about project duration or media availability. This value does not contain asset identifiers, select clips or apply timeline edits. Consumers validate their own project-specific applicability.
|
|
16
|
+
|
|
17
|
+
A workflow decision has exactly these fields:
|
|
18
|
+
|
|
19
|
+
```json
|
|
20
|
+
{"schemaVersion":2,"decision":"deferred"}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
The decision is `accepted`, `rejected` or `deferred`. Absence is not acceptance or deferral. The user must click a decision to supply a value. A Block may also emit such ordinary data; its provenance does not imply that a human approved it. Never use this value instead of host permission, payment, publishing, provider confirmation or project-edit approval.
|
|
24
|
+
|
|
25
|
+
The SDK exports `isTimelineRange`, `isApprovalDecision` and `TIMELINE_RANGE_MAX_MS`. TypeScript interfaces `TimelineRange` and `ApprovalDecision` describe only version 2. Generic SDK value validation preserves version 1 compatibility and strictly checks version 2; unknown versions or additional version 2 fields are rejected. The same checks apply to array elements, but this increment adds specialized controls only for scalar ports.
|
|
26
|
+
|
|
27
|
+
Implementation was reviewed from source only. No tests, browser checks, verification builds or runtime calls were performed. Regenerate SDK deliverables separately to publish updated downloadable source; archive generation includes the helper and type declaration.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Block interface design
|
|
2
|
+
|
|
3
|
+
Simplicity first: show the work and the next useful action. The app owns project navigation; a Block owns its production surface. Neither needs a second shell.
|
|
4
|
+
|
|
5
|
+
## Mandatory authoring rules — for LLMs and creators
|
|
6
|
+
|
|
7
|
+
These are requirements, not optional conventions. Authors must follow them;
|
|
8
|
+
they are not all machine-enforced. Explicit user requests may authorize the
|
|
9
|
+
named exception, but do not authorize unrelated technical UI.
|
|
10
|
+
|
|
11
|
+
- Do not add Technical result, Result details, JSON dumps, source editors,
|
|
12
|
+
manifests, debug consoles, or diagnostic panels to a production workspace
|
|
13
|
+
unless the user explicitly requests that surface or the stated task is
|
|
14
|
+
source/debug inspection. A collapsed disclosure is still an added surface.
|
|
15
|
+
- Do not nest decorative cards, bordered panels, or modal shells around the
|
|
16
|
+
same work area. Use one workspace with spacing and labels. Nested containers
|
|
17
|
+
needed for layout are fine; repeated visible framing is not.
|
|
18
|
+
- Do not duplicate the host's step navigation, counters, or workspace identity.
|
|
19
|
+
- Do not append a generic Workflow tools menu to production Blocks. Batch,
|
|
20
|
+
loop, schedule, memory, migration, and diagnostic tools are not default
|
|
21
|
+
workspace chrome; add a specific surface only when explicitly requested.
|
|
22
|
+
- Show the useful output itself, not a technical representation of the output.
|
|
23
|
+
- Keep required approvals, errors, progress, and stale-input warnings visible.
|
|
24
|
+
These are operational feedback, not optional diagnostic panels.
|
|
25
|
+
- Do not lock page scrolling or introduce sticky headers unless the task
|
|
26
|
+
explicitly needs them. A production page must keep all controls reachable.
|
|
27
|
+
The host owns page scrolling; embedded workspaces may scroll their own
|
|
28
|
+
content, but must not trap scrolling or clip controls below the viewport.
|
|
29
|
+
- Do not keep media galleries, asset inputs, or control strips sticky by default.
|
|
30
|
+
They belong to the same scrolling task surface. A fixed timeline/inspector is
|
|
31
|
+
appropriate only when the actual editing task requires that layout, with all
|
|
32
|
+
controls still reachable; it is not a default for every Block.
|
|
33
|
+
- Do not add an ambiguous settings gear for task actions. Show the immediate
|
|
34
|
+
action directly; label secondary task controls by purpose. Do not disguise
|
|
35
|
+
source, wiring, or debug controls as ordinary production settings.
|
|
36
|
+
|
|
37
|
+
For an existing Block, apply the [SDK update procedure](/block-sdk/PASTE_TO_LLM.md#updating-existing-blocks-through-the-sdk)
|
|
38
|
+
to the actual owned source and a new release/remix. These requirements do not
|
|
39
|
+
authorize rewriting published packages or silently repinning saved projects.
|
|
40
|
+
|
|
41
|
+
## Rules — implemented enforcement
|
|
42
|
+
|
|
43
|
+
These are implementation facts, not aesthetic suggestions.
|
|
44
|
+
|
|
45
|
+
- The host supplies the Project Type step bar. Production workspaces do not add another step counter or Back/Next bar.
|
|
46
|
+
- For custom views the host omits its duplicate title and outer frame border. Sandbox isolation remains enabled.
|
|
47
|
+
- The host does not append a generic Technical result disclosure to custom workspaces. Stored outputs and required approval actions are preserved.
|
|
48
|
+
- Shared form containment wraps adjacent labeled controls and keeps checkboxes compact.
|
|
49
|
+
- Admission rejects a primary textarea with 12 or more rows when no task presentation is detected. This is a narrow heuristic, not proof of a usable visual workspace: `StillMade.render` can render text cards.
|
|
50
|
+
- HTML, JavaScript, permission, and appearance validation remain separate checks. Simplicity never bypasses safety or approval.
|
|
51
|
+
|
|
52
|
+
The SDK exports `INTERFACE_DESIGN_RULES` separately from `INTERFACE_DESIGN_CONVENTIONS`. The older `INTERFACE_DESIGN_PRINCIPLES` export is a compatibility alias for conventions, not enforced guarantees.
|
|
53
|
+
|
|
54
|
+
## Conventions — design guidance
|
|
55
|
+
|
|
56
|
+
Static review warns about more than eight visible controls, ungrouped large option sets, and multiple primary headings. Warnings are not hard failures. The following guidance requires design review; it is not automatically enforced.
|
|
57
|
+
|
|
58
|
+
### Do not
|
|
59
|
+
|
|
60
|
+
- Repeat the Block name, step number, or workflow navigation in nested panels.
|
|
61
|
+
- Place a workspace in a card inside another card merely to create hierarchy.
|
|
62
|
+
- Use dialogs as permanent page layout or put a dialog inside another dialog.
|
|
63
|
+
- Give every section a border. Use spacing and short labels.
|
|
64
|
+
- Put twenty controls in the initial view, even if they wrap.
|
|
65
|
+
- Show camera, timing, patch, variant, and export settings before they are needed.
|
|
66
|
+
- Make users read a technical plan to reach the actual work.
|
|
67
|
+
- Call text scene descriptions a visual storyboard, frame review, or motion preview.
|
|
68
|
+
- Present placeholder imagery as the actual approved assets.
|
|
69
|
+
- Lead with JSON, manifests, MCP, transport details, or diagnostics.
|
|
70
|
+
- Add decorative circles around icons, emoji controls, or unlabeled icon buttons.
|
|
71
|
+
- Claim approval, rendering, or successful testing without the actual result.
|
|
72
|
+
- Hide spending approvals, failures, or stale-source warnings for neatness.
|
|
73
|
+
- Discard drafts or selections when collapsing controls or changing layout.
|
|
74
|
+
|
|
75
|
+
### Prefer
|
|
76
|
+
|
|
77
|
+
One obvious primary action, strong defaults, and the controls needed for the current decision. Group advanced adjustments behind labeled disclosures. Use recognizable line icons with accessible names, tooltips, keyboard focus, and generous hit areas; keep text when an icon is ambiguous.
|
|
78
|
+
|
|
79
|
+
Use StillMade theme tokens, typography, and spacing. Give the preview, timeline, images, or other task object the main surface. Only include source or diagnostic surfaces when authorized under the mandatory authoring rules above; do not add them automatically, even collapsed.
|
|
80
|
+
|
|
81
|
+
Motion workflows distinguish planning notes from actual frame approval. Frame Review should display the exact images being approved before Motion Designer uses them. Motion preview should display the composition, not just its layer descriptions. These are product acceptance requirements to verify, not guarantees established by static admission.
|
|
82
|
+
|
|
83
|
+
## Known coverage gap
|
|
84
|
+
|
|
85
|
+
Existing pinned Blocks can still contain excessive nested panels and text-only plans. Host containment does not redesign their interfaces. Correct those through new versioned Block releases and explicit upgrades; do not rewrite immutable releases or silently change a saved workflow's pins.
|