stillmade-sdk 0.0.0-stage → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +170 -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 +11478 -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
package/AGENTS.md
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Building StillMade Blocks in this folder
|
|
2
|
+
|
|
3
|
+
This folder is the StillMade Block SDK. Read this file before writing code; it is the same contract StillMade's own AI and importers follow. Scaffold with `node packages/block-cli/cli.js create my-block javascript`, then iterate with `validate my-block` and `test my-block`, check admission with `pack my-block /tmp/my-block.stillmade-block --original`, and finish with `ready my-block`, the same readiness check StillMade runs before a release. `SDK.md` is the complete reference and `PASTE_TO_LLM.md` the detailed authoring guide.
|
|
4
|
+
|
|
5
|
+
Contract `stillmade.block-builder@1.0.0`. Humans, coding agents, imported source, GitHub repositories and generated code all adapt to the Block platform; anything that becomes a StillMade Block obeys this contract.
|
|
6
|
+
|
|
7
|
+
## Source of truth
|
|
8
|
+
|
|
9
|
+
Treat the current SDK (`stillmade.block.json` manifest, `packages/block-sdk` contracts, validators, examples and published docs) as the source of truth. Before writing code, read the manifest contract, at least two working first-party Blocks closest to the request, the runtime you will use, the typed port and resolver contracts, and the shared-interface contract when you need a custom view. Do not invent runtimes, operations, permissions, ports, host services or bridge calls. If the documentation and the validator disagree, the validator wins and the mismatch should be reported.
|
|
10
|
+
|
|
11
|
+
## Define the capability first
|
|
12
|
+
|
|
13
|
+
Translate the request into an explicit capability contract before implementation: what the Block does; each input with its type, meaning and whether it is required (prefer optional settings with safe defaults over extra required questions); each output with its type and meaning; persistent state; project context it reads; permissions; UI; long-running behavior; expected failures; cancellation; determinism; and whether it needs hosted models, media, desktop tools or shared editing. Keep the public interface as small and general as possible and keep implementation details out of it.
|
|
14
|
+
|
|
15
|
+
## Blocks compose
|
|
16
|
+
|
|
17
|
+
A Block is not a mini-app. Its outputs become other Blocks' inputs and its inputs come from other Blocks, project context or the user. Use the typed port system: shared StillMade types (`image`, `video`, `audio`, `asset`, `script`, `shot[]`, ...), a `semantic` meaning on every port, `required` and a short `description`. Mark exactly one primary input and one primary output so Project Type Steps connect automatically, and use `kind: "task"`: a `workspace` Block owns a project document and is never connected automatically. Inputs marked `context` read the project and cannot receive a connection from another Step. Output reusable StillMade values: media references (`{kind,assetId,versionId,url}`) and structured production values with `schemaVersion: 1`, preserving provenance, versions and relationships downstream Blocks need. Never make ordinary users wire JSON, copy IDs, understand internal paths or translate one Block's output into another: `createUniversalResolver()` (the same engine as the Project Type composer) resolves inputs from compatible upstream outputs, permitted project context and, for optional non-context inputs, `StillMade.requestFromUser`.
|
|
18
|
+
|
|
19
|
+
## Use platform primitives
|
|
20
|
+
|
|
21
|
+
Prefer, in order: an SDK capability; a documented host capability (the hosted operations are text.generate, audio.speech, audio.transcribe, audio.music, audio.sfx, image.generate, video.generate, image.describe, media.analyze, web.fetch, web.research, timeline.propose, workspace.propose, connection.execute; connected third-party apps go through `connection.execute`); an approved dependency the SDK already bundles; small Block-local code. Do not duplicate what StillMade provides. A Block never contains its own asset system, file picker, authentication, project-context system, input resolver, Block connection system, credit system, secrets store, permission system, progress system, multiplayer system, persistence system, model-provider abstraction or execution protocol.
|
|
22
|
+
|
|
23
|
+
## No hidden workarounds
|
|
24
|
+
|
|
25
|
+
Never make a Block look functional through hard-coded local paths, developer-machine dependencies, undocumented environment variables, admin or database access, hidden core modifications, direct database writes, fake or mocked production results, hand-prepared test assets that hide incompatibilities, credentials in code, or assumptions about one user's machine. The finished Block must work through the same interfaces available to any installed Block; `permissions.network`, `permissions.filesystem` and `permissions.secrets` must be empty arrays.
|
|
26
|
+
|
|
27
|
+
## Interface
|
|
28
|
+
|
|
29
|
+
If the capability needs UI, use the Block UI SDK: generated `manifest.ui` controls first; a sandboxed custom view (`view.html`/`view.css`/`view.js`) only when the core interaction genuinely needs one. Expose the capability, not the implementation: meaningful controls, sensible defaults, preview, direct manipulation, progress, clear errors and visible outputs. Do not show raw JSON, internal IDs, filesystem details, provider terminology or developer settings unless the Block is itself a developer tool. Follow the host appearance (Light, Dark and White) and the mobile layout contract: one interface for every screen size that fits a 320 CSS-pixel phone without horizontal scrolling.
|
|
30
|
+
|
|
31
|
+
## Shared editing
|
|
32
|
+
|
|
33
|
+
Projects are multiplayer. A custom view subscribes through `StillMade.onShared(callback)` and publishes every editable field: give static controls a unique `id` and `data-stillmade-share="field"` (the host owns their synchronization), use `StillMade.bindShared(field, elementId)` for controls created dynamically, and `StillMade.updateShared(values, before, options)` for structured values; private variables and DOM values are not shared. Mark a truly device-only control (playback, hover, device selection) with `data-stillmade-local`. Observe shared outputs as well as state, honor `canEdit` in every mutating callback (read-only participants cannot write), never run, click or call a paid integration in response to a remote update, and preserve conflicting drafts. Shared background work uses `sharedWork` with the `work.shared` permission.
|
|
34
|
+
|
|
35
|
+
## External services
|
|
36
|
+
|
|
37
|
+
Reach external services only through StillMade's hosted operations, the connections service (`connection.execute`), or, in a module Block, `stillmade.net.fetch` to origins declared in `permissions.network` (with the key each needs) and `stillmade.connections.call` to adapters or catalog apps in `permissions.connections`; never put keys in code, inputs or headers: StillMade adds each person's own key on its servers. The host owns the model and provider choice, BYOK keys, StillMade credits, spending consent, authorization, token refresh, rate limits, retries and provider errors; a Block never receives a secret and never names a provider unless it must. Treat provider unavailability, timeout, cancellation and partial failure as typed outcomes the Block reports, not crashes. Generated images, video, voices, music and sound effects come from hosted operations or the `media.generate` action, paid with the user's StillMade credits at StillMade's prices; for structured model output declare a `json` output with `capability.schema` instead of parsing prose. When a Block needs npm libraries, WebAssembly or heavy compute, use `runtime: "module"` and reach hosted operations through `stillmade.hosted.run` with the operations listed in `permissions.capabilities`. Decode, cut, join, re-encode, extract or normalise audio and video with `stillmade.media.transform` on the device; never ask for a server render. For a rich interactive interface (React or another framework, SVG, canvas, drag), use a frame view: `src/view.config.json` with `{"runtime":"frame"}` and `src/view.js` bundled as one IIFE, colored with StillMade's theme variables. For files and structured data use the `file`, `document`, `table`, `url`, `date` and `color` types and their generated controls and presentations, not JSON text.
|
|
38
|
+
|
|
39
|
+
## Dependencies
|
|
40
|
+
|
|
41
|
+
A Block must declare everything it requires and must not assume anything is installed. Portable packages carry no package dependencies (`portable.dependencies` is empty): inline small, license-compatible code and record its license and notice in `manifest.license` and `manifest.provenance`. Desktop-only tools are reached solely through declared desktop permissions and the host desktop bridge. If a dependency cannot be delivered through the Block runtime, report the incompatibility instead of assuming the user's machine has it.
|
|
42
|
+
|
|
43
|
+
## Security
|
|
44
|
+
|
|
45
|
+
Treat Block code, external data, files, repositories, model output and network responses as untrusted. Request the minimum permissions and capabilities. Do not weaken the sandbox (QuickJS has no fetch, DOM, timers, modules or Node APIs). Validate and bound every value crossing a boundary. Never expose secrets through logs, outputs, project context, UI, error messages or serialized state.
|
|
46
|
+
|
|
47
|
+
## Execution lifecycle
|
|
48
|
+
|
|
49
|
+
A successful run means more than a returned value. Validate inputs before work; return only declared output ports with values matching their types; run long work as a cooperative job (`job.pending` with monotonic progress) instead of blocking; honor cancellation and the host timeout; keep persistent state in `manifest.state` (module Blocks: `stillmade.storage`) with migration routes so a reopened project and a repeated run behave the same; never leave orphaned jobs, temporary values or corrupted project state after cancellation or failure.
|
|
50
|
+
|
|
51
|
+
## Useful failures
|
|
52
|
+
|
|
53
|
+
Errors must say what failed, why it likely failed, whether a retry makes sense and what the user can do, so the native project chat and controller can troubleshoot. In JavaScript, throw an `Error` with that message: the host reports it as a `JAVASCRIPT` run failure carrying your message (guest code cannot set its own error code). Reject invalid or oversized input up front with a message naming the input and the limit. Never reduce a failure to "Something went wrong".
|
|
54
|
+
|
|
55
|
+
## Adapt to the platform
|
|
56
|
+
|
|
57
|
+
Do not modify StillMade core because a request does not fit immediately. First implement the capability entirely through documented SDK and platform primitives. If that is impossible, classify why: A Block implementation problem (fix it), B missing SDK exposure of an existing host capability, C missing generic platform primitive, D security or permission restriction, E runtime or language incompatibility, F fundamentally incompatible capability. For B or C, name the smallest general primitive that would serve this Block and a meaningful class of future Blocks (shaped like `files.watch()` or `media.transform()`, never `supportThisSpecificBlock()`). Return `{"unsupported":"exact reason","gapClass":"B|C|D|E|F","primitive":"..."}` instead of a package that pretends to work.
|
|
58
|
+
|
|
59
|
+
## What StillMade verifies
|
|
60
|
+
|
|
61
|
+
StillMade runs the readiness check on every Block it admits: manifest and contract validation, the source security scan, every fixture in the sandbox, wrong-type and over-limit inputs, declared output types, cancellation and timeout cleanup, state reopen and repeated runs, composition with a real upstream and downstream catalog Block through the resolver, a Project Type preview, the shared-interface contract with two participants editing a custom view in the real preview runtime (their edits must converge and a read-only participant must not write), and phone and desktop layout. Design for all of them and include normal and edge-case fixtures (1 to 50; stateful Blocks also declare `expectedState`). Test materially different inputs within the declared capability, and document limitations instead of overclaiming generality. Two of these checks need StillMade itself: two-participant shared editing and the phone and desktop UI profile run in StillMade's preview runtime when the Block is imported or released, so `ready` in the downloaded SDK reports them as not verified rather than passed.
|
|
62
|
+
|
|
63
|
+
## Project Types
|
|
64
|
+
|
|
65
|
+
A Project Type is an ordered production workflow. Each Step's primary output must be a compatible input for the next Step, secondary values come from permitted project context, and every member Block obeys this contract. Install Blocks into a realistic Project Type: project chat must understand each Step, inputs must resolve intuitively, outputs and execution state must be visible, failures must be diagnosable, and the user must be able to continue through the workflow.
|
|
66
|
+
|
|
67
|
+
## Readiness report
|
|
68
|
+
|
|
69
|
+
Finish with a Block Readiness Report: capability, contract (inputs, outputs, permissions, dependencies), platform APIs used, tests actually performed and their results, the composition test (upstream, Block, downstream), known limitations, unsupported requirements and any platform gap with its smallest general primitive. Choose exactly one status: PRODUCTION READY (every applicable check passed), READY WITH DOCUMENTED LIMITATIONS (works reliably within stated boundaries), BLOCKED BY PLATFORM CAPABILITY (needs a missing generic primitive) or FAILED. Never label a Block production ready to satisfy a request, and never claim a check ran when it did not.
|
|
70
|
+
|
|
71
|
+
## Definition of done
|
|
72
|
+
|
|
73
|
+
A Block is done only when every applicable item holds. Passing a compile, one unit test, a rendered UI or one happy-path sample is not done.
|
|
74
|
+
|
|
75
|
+
- DOD-01 Installs through the normal Block mechanism
|
|
76
|
+
- DOD-02 Manifest and contracts validate
|
|
77
|
+
- DOD-03 Runs through the normal runtime
|
|
78
|
+
- DOD-04 Required permissions are declared
|
|
79
|
+
- DOD-05 Required dependencies are reproducible
|
|
80
|
+
- DOD-06 Real inputs work
|
|
81
|
+
- DOD-07 Invalid inputs fail correctly
|
|
82
|
+
- DOD-08 Outputs conform to their declared types
|
|
83
|
+
- DOD-09 Outputs are usable by compatible downstream Blocks
|
|
84
|
+
- DOD-10 Universal resolver integration works
|
|
85
|
+
- DOD-11 Applicable project context works
|
|
86
|
+
- DOD-12 Applicable persistence works
|
|
87
|
+
- DOD-13 Applicable multiplayer behavior works
|
|
88
|
+
- DOD-14 Cancellation and failure cleanup work
|
|
89
|
+
- DOD-15 UI works in relevant states and screen sizes
|
|
90
|
+
- DOD-16 No hidden developer setup is required
|
|
91
|
+
- DOD-17 Security boundaries remain intact
|
|
92
|
+
- DOD-18 Relevant integration tests pass
|
|
93
|
+
- DOD-19 Works after application restart or project reopen
|
|
94
|
+
- DOD-20 A realistic Project Type execution succeeds when applicable
|
|
95
|
+
|
|
96
|
+
## Platform gap classes
|
|
97
|
+
|
|
98
|
+
- A: Block implementation problem
|
|
99
|
+
- B: Missing SDK exposure of an existing host capability
|
|
100
|
+
- C: Missing generic platform primitive
|
|
101
|
+
- D: Security or permission restriction
|
|
102
|
+
- E: Runtime or language incompatibility
|
|
103
|
+
- F: Fundamentally incompatible capability
|
package/AGENT_CONTROL.md
ADDED
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
# JSON assistant access
|
|
2
|
+
|
|
3
|
+
StillMade assistants use host-owned JSON tools rather than pixels or DOM selectors.
|
|
4
|
+
Every Block using the shared playground automatically exposes its manifest inputs
|
|
5
|
+
and outputs to an explicitly connected tab. New Blocks need no special MCP tool
|
|
6
|
+
name or duplicated UI implementation. Use meaningful port names and declared types,
|
|
7
|
+
requirements, defaults, context sources and UI choices.
|
|
8
|
+
|
|
9
|
+
New import admission now reports two separate hard constraints before a Block can
|
|
10
|
+
become usable. **API and integration availability** rejects executable ambient
|
|
11
|
+
network/key access and retained source dependencies that are not mapped to one
|
|
12
|
+
exact supported host capability. A supported capability remains review-required:
|
|
13
|
+
the host must still prove the current account connection, settings, quote, run
|
|
14
|
+
budget and output. Retained JavaScript, TypeScript, Python, Ruby, Go, Rust, Java,
|
|
15
|
+
Kotlin, Swift, PHP, shell and endpoint configuration are inspected for common
|
|
16
|
+
network clients, credential names and known provider endpoints; unknown clients
|
|
17
|
+
remain unavailable rather than being treated as local code. **Chat and MCP JSON
|
|
18
|
+
control** verifies that every ordinary
|
|
19
|
+
input—including an optional one—has a safe JSON or permission-checked media
|
|
20
|
+
transport, that inputs and outputs explain their purpose, and that generic
|
|
21
|
+
`json`/`object` values and their arrays declare a bounded field schema. Generic
|
|
22
|
+
structured outputs also require a schema before the resolver may match them. An optional approval, file
|
|
23
|
+
bundle, or other UI-only value cannot bypass this gate merely because the Block
|
|
24
|
+
has a default path. These checks apply to new creation/import admission, not
|
|
25
|
+
retroactively to immutable installed releases.
|
|
26
|
+
|
|
27
|
+
Admission also reports the **Input/output resolver contract** separately. Every
|
|
28
|
+
input must declare its physical type, exact semantic meaning, required/optional
|
|
29
|
+
status and description; every output must declare its type, meaning and
|
|
30
|
+
description. This is resolver metadata, not evidence that any arbitrary ports can
|
|
31
|
+
connect: workflow composition still validates the exact meanings, schemas,
|
|
32
|
+
versioned adapter pin and adapter permissions for each proposed edge.
|
|
33
|
+
|
|
34
|
+
Code is therefore not the control manual. The pinned manifest is: Block and port
|
|
35
|
+
descriptions explain intent, types and schemas define accepted JSON, UI choices
|
|
36
|
+
provide enums, permissions identify host-owned context/media, and fixtures prove
|
|
37
|
+
the same runtime contract. Both native chat and MCP consume this one contract, so
|
|
38
|
+
authors do not teach each model a separate sequence or duplicate their visual UI.
|
|
39
|
+
The admission result materializes that contract as a compact
|
|
40
|
+
`block-agent-json/1` manual: Block identity/runtime, every input's type, semantic,
|
|
41
|
+
required/default status, description, transport, limits and bounded choices,
|
|
42
|
+
described outputs, and the host action IDs for inspection, JSON edits, media
|
|
43
|
+
selection, execution review and receipts. Models consume this declared playbook;
|
|
44
|
+
they do not infer a workflow from package code or memorize a custom UI. Schema
|
|
45
|
+
and choice material has a shared aggregate budget in both admission manuals and
|
|
46
|
+
live pages; `schemaPartial`, `optionsPartial`, counts and page metadata make every
|
|
47
|
+
omission explicit so large contracts cannot break the heartbeat or masquerade as
|
|
48
|
+
complete context.
|
|
49
|
+
|
|
50
|
+
`inspectAgentBlock(content, values, {offset, limit, locked})` returns bounded
|
|
51
|
+
metadata: Block ID/version, purpose, declared output ports, input presence and
|
|
52
|
+
locks, missing required inputs, supported devices, permission scopes, and the
|
|
53
|
+
state and execution contract. Live adapters also expose their current actions
|
|
54
|
+
and output presence through `inspectAgentPorts`. Text contents, URLs, bytes and credentials are omitted.
|
|
55
|
+
`false` and `0` are present. Empty strings/lists and missing/invalid values are
|
|
56
|
+
different. Media presence never establishes access, successful loading or payment.
|
|
57
|
+
The host's input validator and sandbox admission remain authoritative.
|
|
58
|
+
|
|
59
|
+
The shared preview adapter supports reviewed `set_input` for text, number, integer
|
|
60
|
+
boolean, primitive-list and JSON ports. Context and upstream values stay locked. Edits use the same
|
|
61
|
+
change handler and invalidate the old result. They are preview changes, not proof
|
|
62
|
+
of a saved production project. Media selection uses offered opaque choices and the host media broker, including
|
|
63
|
+
ordered lists of up to 16 items. Local recipe/JavaScript previews expose a reviewed
|
|
64
|
+
run action with cancellation and real skipped/failure outcomes. Install, publish
|
|
65
|
+
and paid execution are not generic input actions and must not be faked through
|
|
66
|
+
JavaScript or a network request.
|
|
67
|
+
|
|
68
|
+
## Additional workspace actions
|
|
69
|
+
|
|
70
|
+
Native workspaces must own typed adapters for their own behavior. Trusted host
|
|
71
|
+
registration supplies `inspect()` with a revision and explicit actions containing
|
|
72
|
+
`id`, `label`, JSON `parameters`, `effect`, `parse(args)` and `run(args)`. The
|
|
73
|
+
registry is first-party integration code and is never passed to sandboxed packages.
|
|
74
|
+
Package text cannot register callbacks, choose a lower approval tier, or bypass
|
|
75
|
+
host permissions. Existing app function names are not an external action API.
|
|
76
|
+
|
|
77
|
+
Actions may additionally declare `locate(args)`, returning the currently mounted
|
|
78
|
+
DOM element that visually owns that exact action. The host uses it only to place
|
|
79
|
+
the labeled MCP activity cursor when application begins; review starts on the
|
|
80
|
+
host approval card. It grants no DOM automation, is never serialized to MCP, and
|
|
81
|
+
must return `null` when the exact target is unavailable. Without it the host
|
|
82
|
+
points at the registered workspace or review card rather than inventing a
|
|
83
|
+
selector.
|
|
84
|
+
|
|
85
|
+
An adapter must expose copied metadata only, invalidate its revision when relevant
|
|
86
|
+
source/inputs/permissions change, reject stale targets again immediately before
|
|
87
|
+
execution, use existing storage acknowledgement, and retain sandbox, paid-budget,
|
|
88
|
+
permission and cancellation behavior. Return what actually happened: navigation
|
|
89
|
+
requested, preview updated, or saved with a durable revision. Unavailable actions
|
|
90
|
+
stay unavailable. Never advertise a whole workspace as supported because its
|
|
91
|
+
metadata can be inspected.
|
|
92
|
+
|
|
93
|
+
MCP clients use `get_agent_guide`, discover `list_app_sessions`, inspect the
|
|
94
|
+
selected tab, then request one supported action with its exact revision and a
|
|
95
|
+
stable request UUID. The user reviews it in the app. Read `get_app_action` before
|
|
96
|
+
continuing. An uncertain dispatch cannot be retried with a fresh ID.
|
|
97
|
+
|
|
98
|
+
SDK source exports are updated. Prebuilt ZIPs and generated SDK downloads must be
|
|
99
|
+
regenerated through the existing packaging process when a build is authorized.
|
|
100
|
+
|
|
101
|
+
## Source API
|
|
102
|
+
|
|
103
|
+
Import `inspectAgentBlock`, `inspectAgentPorts`, `inspectAgentDocument`,
|
|
104
|
+
`agentInputChoices` and `parseAgentInput` from the SDK entry point.
|
|
105
|
+
`inspectAgentDocument(state, {limit:40, maxDepth:3})` supplies bounded nested
|
|
106
|
+
presence paths; omitted children are explicit, and text/media contents stay out.
|
|
107
|
+
`agentInputChoices(manifest, locked)` describes supported editable ports and UI
|
|
108
|
+
choices. `parseAgentInput(manifest, {field, value}, {locked, busy, disabled})` checks
|
|
109
|
+
types, numeric limits, choices and size before returning a copied value. This
|
|
110
|
+
helper does not grant permission, save a change, or authorize execution.
|
|
111
|
+
|
|
112
|
+
Trusted native modules can use `defineNativeAgentAdapter` and
|
|
113
|
+
`bindNativeAgentActions` with exact Block pins. Mounted React modules can use
|
|
114
|
+
`useNativeAgentControls` from `native-agent-react.jsx`; this separate React entry
|
|
115
|
+
requires the trusted host provider and is not a sandbox API. `available` must be a
|
|
116
|
+
function, and handlers must preserve host checks and report real outcomes. A
|
|
117
|
+
mounted module may also provide `handoff()`, returning its current local draft
|
|
118
|
+
controls. During an explicit manual pause the host combines that document with
|
|
119
|
+
the versioned workspace state, bounds and redacts it, and returns it only when the
|
|
120
|
+
surface revision changed. It is context for continuing the collaboration, not a
|
|
121
|
+
credential, media-byte, authorization, persistence, or authorship channel.
|
|
122
|
+
Use stable, meaningful field names and include every local draft value named in
|
|
123
|
+
the hook's `dependencies`; Voiceover's `script`, `speed`, `voiceId`, `source` and
|
|
124
|
+
selected take IDs are one example. If a mounted module omits `handoff`, the SDK
|
|
125
|
+
returns its exact current dependency vector as ordinal `native-control-signals`.
|
|
126
|
+
That fallback prevents a changed control revision from silently returning stale
|
|
127
|
+
persisted state, but named fields remain the optimized manual for small models.
|
|
128
|
+
|
|
129
|
+
`pause_app_context` stores the exact visible revision baseline and blocks new app
|
|
130
|
+
actions. `resume_app_context` does not clear that pause until the tab publishes a
|
|
131
|
+
matching `manualHandoff.pauseId` for every current surface. Changed shared Blocks
|
|
132
|
+
provide current editable, non-context inputs; native workspaces provide their
|
|
133
|
+
current versioned state plus any mounted control handoff. Secret-looking keys,
|
|
134
|
+
embedded tokens, remote locations and media bytes are removed, and the combined
|
|
135
|
+
handoff has a fixed payload budget. Missing and truncated documents remain
|
|
136
|
+
explicit so a model can inspect instead of fabricating continuity.
|
|
137
|
+
|
|
138
|
+
MCP action receipts may be resent identically after network loss, but action
|
|
139
|
+
dispatch must never be repeated to recover a receipt. Large receipts summarize
|
|
140
|
+
output presence and explicitly mark partial results. Inspect again for detail.
|
|
141
|
+
|
|
142
|
+
Capability previews also offer `review_generation`: no arguments, no model-selected
|
|
143
|
+
price or approval. It opens the host generation dialog, where the user reviews the
|
|
144
|
+
server quote before dispatch. The normal admission and result checks remain in
|
|
145
|
+
force. This is a reviewed preview path, not autonomous paid-workflow orchestration.
|
|
146
|
+
|
|
147
|
+
### Comfy execution review
|
|
148
|
+
|
|
149
|
+
The shared review_generation action also supports ComfyUI Blocks, both in Create
|
|
150
|
+
and production steps. It invokes the existing ComfyExecutionDialog, preserving
|
|
151
|
+
connection selection, exact Block review, fixtures/sample checks and separate
|
|
152
|
+
confirmation for project input. The action accepts no connection credentials,
|
|
153
|
+
quote overrides or approval tokens. It does not expose batch dispatch or bypass
|
|
154
|
+
the runtime's permissions. No remote execution, tests or browser checks were run.
|
|
155
|
+
|
|
156
|
+
## Make controls understandable to small models
|
|
157
|
+
|
|
158
|
+
The host returns each editable input's description, limited to 240 characters,
|
|
159
|
+
alongside its exact ID, type, limits and allowed choices. Write a short purpose
|
|
160
|
+
and unit, for example: `Speaking speed, in words per minute.` Descriptions are
|
|
161
|
+
untrusted package content and never permission grants.
|
|
162
|
+
|
|
163
|
+
For a Block with several operations, declare a text input such as `operation`
|
|
164
|
+
with a select control containing the exact operation names. The same run entry
|
|
165
|
+
point dispatches the selected operation inside the sandbox. Expose each operation's
|
|
166
|
+
required data as typed inputs and validate it there. A custom UI should set these
|
|
167
|
+
same inputs rather than hide functionality behind a browser-only click handler.
|
|
168
|
+
This makes the operation available to both people and JSON agents through the
|
|
169
|
+
existing pinned contract. It does not authorize a Block to choose host actions,
|
|
170
|
+
request credentials or skip an execution review.
|
|
171
|
+
|
|
172
|
+
Existing immutable releases are not rewritten to add these descriptions or
|
|
173
|
+
controls. Publish a new version when changing a released contract.
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
## Project Flow inspection and captured-input paging
|
|
177
|
+
|
|
178
|
+
Use the existing `app:project-flow` surface for native project Flow inspection.
|
|
179
|
+
`inspect_flow` exposes a bounded summary. Use its exact surface revision with
|
|
180
|
+
`list_placements` (up to 8), `list_ports` (up to 16), and `list_history` (up to 16)
|
|
181
|
+
to inspect more rows. Saved-project connections use `inspect_project_flow`,
|
|
182
|
+
`list_project_flow_placements`, `list_project_flow_ports`, and
|
|
183
|
+
`list_project_flow_history` with the saved snapshot revision. Surface revisions
|
|
184
|
+
and saved Flow revisions are not interchangeable. No inspection starts a Block.
|
|
185
|
+
|
|
186
|
+
Retained history includes exact `receiptId` / `targetKey`, `inputsCount`,
|
|
187
|
+
`inputsRevision`, `inputsNextOffset`, and `inputsRetainedComplete`. Several
|
|
188
|
+
batch items or attempts can share a run ID; target the receipt ID, not that run
|
|
189
|
+
ID alone. Native `list_run_inputs` and external `list_project_flow_run_inputs`
|
|
190
|
+
read the same captured-input projection, with arguments:
|
|
191
|
+
|
|
192
|
+
```json
|
|
193
|
+
{"placementId":"receiving-step","receiptId":"<16-hex receipt ID>","revision":"<16-hex inputsRevision>","offset":16,"limit":16}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
The external tool additionally requires `projectId`. This revision identifies
|
|
197
|
+
the captured-input evidence, not the surface/Flow snapshot. Each page contains
|
|
198
|
+
at most 16 named input identities and the next offset. Current project access,
|
|
199
|
+
the exact retained receipt and its evidence revision must still agree. Reject
|
|
200
|
+
stale pages and inspect again; do not substitute current source choices.
|
|
201
|
+
`retainedComplete:false` remains incomplete at the final retained page. Missing
|
|
202
|
+
older records, lost preview inputs and omitted nested collection identities
|
|
203
|
+
cannot be inferred from the page. No raw input values, automatic recovery,
|
|
204
|
+
generation, spending or project changes are authorized by these reads.
|
|
205
|
+
|
|
206
|
+
### Saved shared tasks
|
|
207
|
+
|
|
208
|
+
Use `inspect_project_tasks` with the current project read grant to inspect an exact task or bounded task pages without navigation. `control_project_task` requires a separately selected project-control grant plus read access, the exact requester/task/instruction/control revisions and a requestId. Only pause, takeover, cancel and resume are supported. Resume queues revalidation, never a spending or action approval. Identical request replay returns the original receipt and current task without repeating effects. Native task buttons retain the same coordinator rules and their existing UI; do not invent a native surface action from the external tool name.
|
|
209
|
+
|
|
210
|
+
### Retained result inspection
|
|
211
|
+
|
|
212
|
+
Retained unselected results have a separate read-only inventory. The Result tab
|
|
213
|
+
shows eight candidates at a time. Use native `list_retained_results` or external
|
|
214
|
+
`list_project_flow_retained_results` with `{placementId, revision:
|
|
215
|
+
unusedResultsRevision, offset, limit}` (plus `projectId` externally); list pages
|
|
216
|
+
contain at most eight candidates. Only records still retained for the current
|
|
217
|
+
Block package are included: unused single results, unselected connected results,
|
|
218
|
+
and batch records explicitly marked unused after a source change. The ordinary
|
|
219
|
+
batch picker is separate. `historyComplete:false` means evicted history is not
|
|
220
|
+
recoverable through this inventory, even at its final page.
|
|
221
|
+
|
|
222
|
+
Each candidate has an exact `candidateId`, `outputDigest`, run/item/attempt
|
|
223
|
+
metadata, and captured-input/output counts and cursors. Native
|
|
224
|
+
`inspect_retained_result` and external `inspect_project_flow_retained_result`
|
|
225
|
+
accept `{placementId, revision: unusedResultsRevision, candidateId, section,
|
|
226
|
+
offset, limit}`. Sections `inputs` and `outputs` page at most 16 identities or
|
|
227
|
+
previews. Sections `text` and `collection` also require `outputKey` and the exact
|
|
228
|
+
preview `path`; text requires its returned `identity` and permits at most 4,000
|
|
229
|
+
characters, collections at most 16 members. Reuse the exact candidate and list
|
|
230
|
+
revision on every page. Changes anywhere in retained records, package or preview
|
|
231
|
+
restrictions invalidate that revision. Inspect fresh state after a conflict.
|
|
232
|
+
Current project read access is rechecked after saved reads; native/UI caches
|
|
233
|
+
reset when the authorized reader changes. External/native results redact media
|
|
234
|
+
addresses. Sensitivity and prior preview restrictions still apply; a restricted
|
|
235
|
+
candidate cannot become inspectable through a later page. Captured inputs remain
|
|
236
|
+
bounded metadata and may be incomplete; nested structured previews disclose
|
|
237
|
+
omitted fields rather than claiming a complete document. These reads never
|
|
238
|
+
select a candidate, restore media, dispatch work, or substitute current output
|
|
239
|
+
for a retained value.
|
|
240
|
+
|
|
241
|
+
## Ordered targets for controls that run several Blocks
|
|
242
|
+
|
|
243
|
+
A host control that executes multiple placements exposes `executionTargets` on
|
|
244
|
+
its native inspection snapshot, keyed by the offered action ID. Each value is
|
|
245
|
+
`{contractVersion:1, partial:false, steps:[{placementId,blockId,version}]}`.
|
|
246
|
+
Steps list the runner's actual ordered targets and exact saved releases. Do not
|
|
247
|
+
infer this list from labels, output types or a general “ready” flag. A missing,
|
|
248
|
+
truncated or unresolved target list uses `partial:true`; fallback branches whose
|
|
249
|
+
exact runtime target is unresolved cannot be advertised as complete.
|
|
250
|
+
|
|
251
|
+
The controller checks every target's current contribution/version in the retained
|
|
252
|
+
workflow plan, checks dependency order, and requires ready materialized outputs
|
|
253
|
+
for incoming producers outside that run. A producer inside the same run may
|
|
254
|
+
materialize its output before the consumer runs; the normal executor still
|
|
255
|
+
validates the actual handoff. Inspection metadata is not execution authority.
|
|
256
|
+
Task fences, live revisions, source validation, sandbox admission, reviews,
|
|
257
|
+
aggregate budgets and output receipts remain with their existing host controls.
|
|
258
|
+
This batch target contract does not itself prove scalar setting agreement,
|
|
259
|
+
artifact quality, fallback execution or final goal completion.
|
|
260
|
+
|
|
261
|
+
For whole-goal batch proposals, the backend also compares planned non-context
|
|
262
|
+
scalar inputs against the current saved `blockInputs` or declared defaults.
|
|
263
|
+
Expected values must be valid scalar task hypotheses tied to the current owner
|
|
264
|
+
instructions and exact Block release. A matching UI snapshot is insufficient;
|
|
265
|
+
the authenticated task-fenced readback is checked before a proposal is returned,
|
|
266
|
+
including after controller recovery changes the proposed action. This readback
|
|
267
|
+
stores no plan, applies no edit, approves no expense and starts no Block.
|
|
268
|
+
Connected input ports remain under exact source/handoff admission. Media and
|
|
269
|
+
structured-input goal expectations require their separate typed contracts and
|
|
270
|
+
inspection; scalar agreement does not establish them or result quality.
|
|
271
|
+
|
|
272
|
+
## Typed goal-input hypotheses
|
|
273
|
+
|
|
274
|
+
`agent-data-plan/1` complements scalar input plans with exact non-secret media
|
|
275
|
+
and document expectations. Rows bind placement, Block ID/version, field, owner
|
|
276
|
+
goal quote, reason and a SHA-256 `valueDigest`. A changed expectation needs its
|
|
277
|
+
exact `previousDigest` and a `revisionReason`; identical revision replays are
|
|
278
|
+
idempotent. The task retains these hypotheses only while the instruction fence
|
|
279
|
+
and canonical Block source remain current.
|
|
280
|
+
|
|
281
|
+
The generic native `read_input_identity` control reads the current field through
|
|
282
|
+
its declared contract. Media digests include ordered kind/asset/version identities
|
|
283
|
+
and exclude refreshed URLs and labels. Structured values and pixel images bind
|
|
284
|
+
the entire validated value. Context, secrets and approval inputs are excluded.
|
|
285
|
+
Pending supported typed setters and media selections acquire hypotheses before
|
|
286
|
+
review; they do not become evidence of applied inputs.
|
|
287
|
+
|
|
288
|
+
Before proposing a whole-goal batch or sequential Block run, the backend compares retained/proposed
|
|
289
|
+
hypotheses with actual saved unconnected inputs and rejects unavailable or changed
|
|
290
|
+
values. Connected inputs continue through the saved graph and runtime handoff
|
|
291
|
+
checks. This guard covers whole-goal batch and sequential Block proposals, not every
|
|
292
|
+
explicitly scoped single-Block task. Identity agreement proves neither semantic goal alignment,
|
|
293
|
+
media rights, execution approval, spending authority nor output quality.
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# Browser application bundles — experimental source contract
|
|
2
|
+
|
|
3
|
+
This is an additive source and execution-evidence contract under development.
|
|
4
|
+
The exact reviewed Method Draw package has a private desktop install, editing
|
|
5
|
+
and SVG export path. This does not admit arbitrary browser applications or
|
|
6
|
+
make this runtime available through portable archives. Other repositories
|
|
7
|
+
still require their own review and working acceptance evidence.
|
|
8
|
+
|
|
9
|
+
The intended profile preserves a real built application's HTML, JavaScript,
|
|
10
|
+
CSS, fonts, images and optional single-thread WebAssembly, plus a small
|
|
11
|
+
Block-owned adapter. Original styling is the default. It does not rebuild the
|
|
12
|
+
application UI using StillMade controls. The shared host supplies navigation,
|
|
13
|
+
identity, storage authority, permissions and execution; application-specific
|
|
14
|
+
behavior remains in the bundle and its independently versioned adapter.
|
|
15
|
+
|
|
16
|
+
## Bundle identity and resources
|
|
17
|
+
|
|
18
|
+
`defineBrowserApplication` validates a detached `desktop-browser-application/1`
|
|
19
|
+
bundle. Every asset has a canonical relative path, MIME type, decoded byte count,
|
|
20
|
+
SHA-256 and canonical base64 payload. Entry HTML and adapter JavaScript must be
|
|
21
|
+
present. The contract rejects URL paths, path traversal, file/directory collisions,
|
|
22
|
+
case collisions, unsupported file metadata, invalid encoding and changed bytes.
|
|
23
|
+
`encodeBrowserApplicationFiles` accepts already-read regular-file bytes;
|
|
24
|
+
filesystem importers remain responsible for rejecting links and escaping paths.
|
|
25
|
+
|
|
26
|
+
Limits are explicit and independent of the older portable archive format. A
|
|
27
|
+
bundle can contain at most 2,048 assets, 64 MiB per asset and 128 MiB total decoded
|
|
28
|
+
bytes. Input, state and output messages remain bounded separately. Successful
|
|
29
|
+
validation proves byte integrity and schema conformance, not code safety, license
|
|
30
|
+
permission, dependency closure, build success or application behavior.
|
|
31
|
+
|
|
32
|
+
The first profile declares no ambient networking, workers, native services or
|
|
33
|
+
paid integration access. Single-thread WASM is an explicit requirement, not an
|
|
34
|
+
automatic permission. Arbitrary development servers, native Node modules,
|
|
35
|
+
service workers, threaded WASM and full-stack backends need distinct profiles
|
|
36
|
+
and verified host capabilities. Existing SDK restrictions are not removed.
|
|
37
|
+
|
|
38
|
+
Inspect compiled dependencies as well as asset extensions. For example, a
|
|
39
|
+
checked-in editor bundle may contain base64 WebAssembly or dynamically create
|
|
40
|
+
workers without shipping any `.wasm` file. The current asset/declaration check
|
|
41
|
+
does not prove those paths are absent. Admission must record which paths are
|
|
42
|
+
needed, and the selected runtime must enforce its CSP, target and resource
|
|
43
|
+
policy when code executes. A dead or explicitly unavailable feature is different
|
|
44
|
+
from a verified fallback. The current development Linux worker rejects declared
|
|
45
|
+
WASM and blocks worker creation; it does not establish general WASM support.
|
|
46
|
+
|
|
47
|
+
## Adapter lifecycle and completion
|
|
48
|
+
|
|
49
|
+
An adapter needs to receive meaningful typed inputs, restore host-scoped editable
|
|
50
|
+
state, checkpoint changes, export the actual result, cancel and dispose. Use
|
|
51
|
+
original application APIs and controls. Keep autosave separate from explicit
|
|
52
|
+
completion; mounting a UI or retaining the original input is not evidence of
|
|
53
|
+
the requested transformation.
|
|
54
|
+
|
|
55
|
+
`prepareBrowserApplicationMount` binds a mount request to the exact package,
|
|
56
|
+
bundle, input and state revision. A mount acknowledgement carries no outputs and
|
|
57
|
+
cannot pass execution validation.
|
|
58
|
+
|
|
59
|
+
`prepareBrowserApplicationExecution` additionally binds the named declared
|
|
60
|
+
operation. Interactive applications require an explicitly interactive host;
|
|
61
|
+
headless execution needs an implemented operation. The trusted host must issue
|
|
62
|
+
the completion receipt only after the actual operation, output checks and
|
|
63
|
+
current permission/state checks. `validateBrowserApplicationExecutionResult`
|
|
64
|
+
and the saved-record validator check those bindings; their result explicitly
|
|
65
|
+
keeps `independentlyVerified:false`. Arbitrary callers can fabricate JSON, so
|
|
66
|
+
these pure helpers do not authenticate evidence or authorize adoption.
|
|
67
|
+
|
|
68
|
+
`runBrowserApplication` requires an explicitly supplied trusted executor. It
|
|
69
|
+
never falls back to evaluating source in the host or treating a mounted page as
|
|
70
|
+
success. Cancellation and timeout signal the executor; actual process/resource
|
|
71
|
+
termination is the executor's responsibility and needs independent verification.
|
|
72
|
+
|
|
73
|
+
## Guest registration
|
|
74
|
+
|
|
75
|
+
`installBrowserApplicationGuest({target,operations,messageBytes})` is the
|
|
76
|
+
framework-neutral lifecycle dispatcher for a trusted bootstrap. It installs only
|
|
77
|
+
`target.stillmadeApplication.register(adapter)` and returns a separate controller
|
|
78
|
+
to that bootstrap. It does not install a runtime or grant host access.
|
|
79
|
+
|
|
80
|
+
The Block-owned adapter registers exactly these four methods once:
|
|
81
|
+
|
|
82
|
+
| Method | Adapter result |
|
|
83
|
+
| --- | --- |
|
|
84
|
+
| `mount({inputs,state,signal})` | Restore the original UI and return exactly `{mounted:true}`. |
|
|
85
|
+
| `serialize({signal})` | Return the versioned editable document as plain JSON. This is a snapshot, not output completion. |
|
|
86
|
+
| `execute({operation,inputs,stateRevision,signal})` | Run a declared operation and return its raw typed output map; the dispatcher adds the `{outputs}` envelope. |
|
|
87
|
+
| `dispose()` | Release adapter-owned resources. Return values are discarded. |
|
|
88
|
+
|
|
89
|
+
Use closures or explicitly bound functions when application methods depend on
|
|
90
|
+
their original receiver. The controller enforces mounting before serialization
|
|
91
|
+
or execution, one active call, exact mounted inputs, declared operation names,
|
|
92
|
+
bounded plain JSON, and rejection of guest receipt fields. Cancellation discards
|
|
93
|
+
late results and leaves the guest usable only for disposal. Disposal itself is
|
|
94
|
+
cooperative; a hung application must be terminated by the trusted host.
|
|
95
|
+
|
|
96
|
+
The dispatcher is self-contained for inclusion in a reviewed bootstrap. Its
|
|
97
|
+
JavaScript object checks are correctness checks inside an untrusted realm, not
|
|
98
|
+
security boundaries. The host must revalidate every message, own checkpoint
|
|
99
|
+
identity and UI-event sequencing, issue receipts, check current permissions,
|
|
100
|
+
persist revisions and enforce resource limits outside the guest. No account
|
|
101
|
+
token, filesystem access, native proxy or generic network function is exposed.
|
|
102
|
+
|
|
103
|
+
## Runtime gates still required
|
|
104
|
+
|
|
105
|
+
- Serve only exact verified bundle assets. Keep application sessions isolated
|
|
106
|
+
from host origin, cookies, local files, native IPC, credentials and one another.
|
|
107
|
+
- Enforce navigation, external request and device denial. A sandboxed iframe,
|
|
108
|
+
request interceptor or CSP alone does not establish complete egress denial.
|
|
109
|
+
- Keep the host responsive under infinite JavaScript/WASM loops and memory
|
|
110
|
+
pressure. Resource and cancellation enforcement must live outside the guest.
|
|
111
|
+
- Scope persistence to account/project/placement and exact source. Shared state
|
|
112
|
+
needs permission checks, revision conflicts, recovery and flush-on-completion;
|
|
113
|
+
origin-global `localStorage` cannot establish that contract.
|
|
114
|
+
- Build in a disposable secret-free worker with pinned dependencies, bounded
|
|
115
|
+
resources and no unrestricted network during source execution. Preserve
|
|
116
|
+
licenses, binary assets and exact output identities.
|
|
117
|
+
- Run original UI operations and compare upstream/adapted exports. Then prove
|
|
118
|
+
a real producer → application → consumer chain, save/reopen, two placements,
|
|
119
|
+
cancellation, revocation, stale-result rejection and adversarial isolation.
|
|
120
|
+
|
|
121
|
+
Method Draw is being used to study the first complete static editor route.
|
|
122
|
+
Its remote fonts, global localStorage and SVG import behavior require explicit
|
|
123
|
+
adaptation; an original-page baseline is not a completed Block integration.
|
|
124
|
+
|
|
125
|
+
## Reproduce the reviewed package outside the repository
|
|
126
|
+
|
|
127
|
+
The downloadable SDK zip includes `packages/block-sdk/browser-application.js`
|
|
128
|
+
and `browser-application-execution.js`. The Method Draw source folder contains
|
|
129
|
+
its own pinned upstream bytes, adapter, source hashes and package builder. With
|
|
130
|
+
Node.js 22 or later, extract the SDK zip, place the complete Method Draw folder
|
|
131
|
+
at `blocks/repository/methoddraw` inside the extracted directory, and run:
|
|
132
|
+
|
|
133
|
+
```sh
|
|
134
|
+
node --input-type=module -e 'import {buildMethodDrawPackage} from "./blocks/repository/methoddraw/build-package.mjs"; import {digest} from "./packages/block-sdk/contracts.js"; const source=await buildMethodDrawPackage(); console.log(await digest(source));'
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
For the reviewed source and SDK 0.1.0 archive the digest is
|
|
138
|
+
`084ed75a82a66011344bcb609a12de018ccb4e20b828fabc2afef60399c5f6eb`.
|
|
139
|
+
This reproduces source packaging only. It does not execute the editor, grant
|
|
140
|
+
private installation, or show that a different GitHub repository is eligible.
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Browser application artifact references
|
|
2
|
+
|
|
3
|
+
`packages/block-sdk/browser-application-artifacts.js` defines immutable source and draft references, with verification when a trusted host loads their bytes. These are additive contracts. They do not install the browser application runtime, implement storage or grant access. Generic package admission and execution remain unavailable for `browser-application`.
|
|
4
|
+
|
|
5
|
+
An experimental host can represent source with the small descriptor below. Existing saved-project validation must be explicitly extended before it accepts this form. The full application remains an immutable, separately stored artifact; hydrated source is ephemeral and should not be copied back into the saved project or collaboration operations.
|
|
6
|
+
|
|
7
|
+
```js
|
|
8
|
+
const {descriptor, bytes} = await createBrowserApplicationSourceArtifact(source, {
|
|
9
|
+
entityId: exactSourceEntityId,
|
|
10
|
+
});
|
|
11
|
+
// descriptor = {
|
|
12
|
+
// manifest,
|
|
13
|
+
// sourceRef: {
|
|
14
|
+
// schemaVersion: 1, storage: 'block-source-v1', entityId,
|
|
15
|
+
// version, digest, byteLength,
|
|
16
|
+
// },
|
|
17
|
+
// }
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
`bytes` is a `Uint8Array` containing `stableStringify(source)` encoded as UTF-8. Its SHA-256 equals the existing SDK `digest(source)`; `sourceRef.digest` always identifies the full source, including the application assets and optional fixtures. The version must equal the manifest version. No URL, bucket key, alternate storage type or floating `latest` reference is accepted. Store exactly these bytes, without reformatting JSON. Creation fully validates the application bundle and every asset. `defineBrowserApplicationSourceDescriptor` validates and freezes a detached descriptor without downloading source.
|
|
21
|
+
|
|
22
|
+
```js
|
|
23
|
+
const source = await hydrateBrowserApplicationSource(descriptor, {
|
|
24
|
+
authorize, fetchBytes, signal, timeoutMs: 30_000,
|
|
25
|
+
});
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The host supplies both callbacks; neither callback is available to guest application code:
|
|
29
|
+
|
|
30
|
+
```ts
|
|
31
|
+
authorize(binding, {signal, phase}) => true | false | Promise<boolean>
|
|
32
|
+
fetchBytes(reference, {signal, maxBytes})
|
|
33
|
+
=> Uint8Array | AsyncIterable<Uint8Array> | Promise<either>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
`authorize` runs before fetching and after all validation. Only literal `true` grants access. For source, its binding is `{kind: 'source', descriptor}`. The trusted host must check the current actor, accessible entity, exact published or retained version, digest, licensing, team scope and revocation, as applicable. It must resolve storage keys itself from this authorized identity. Every hydration repeats these checks; there is no cache. A returned source grants no continuing permission to execute later: execution must check access again at its own acceptance boundary.
|
|
37
|
+
|
|
38
|
+
The helper verifies the declared byte count, strict UTF-8, canonical JSON, full-source SHA-256, exact manifest equality, full browser application contract and every bundled asset. It rejects malformed JSON, duplicate/prototype keys, BOMs, extra descriptor fields and corruption. Returned descriptors and hydrated values are detached and deeply frozen. The original inline source is unchanged.
|
|
39
|
+
|
|
40
|
+
## Project application draft state
|
|
41
|
+
|
|
42
|
+
The host assigns the artifact identity and revision. Scope comes from an authenticated project placement, never from guest claims.
|
|
43
|
+
|
|
44
|
+
```js
|
|
45
|
+
const {draft, bytes} = await createBrowserApplicationStateArtifact(state, {
|
|
46
|
+
scope: {projectId, placementId},
|
|
47
|
+
packageDigest, revision, id,
|
|
48
|
+
});
|
|
49
|
+
// draft = {
|
|
50
|
+
// schemaVersion: 1, packageDigest, revision,
|
|
51
|
+
// stateRef: {
|
|
52
|
+
// storage: 'project-application-state-v1', id, sha256,
|
|
53
|
+
// byteLength, mime: 'application/json',
|
|
54
|
+
// },
|
|
55
|
+
// }
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The exact canonical artifact payload is `{schemaVersion: 1, id, scope: {projectId, placementId}, packageDigest, revision, state}`. Its SHA-256 equals the SDK digest of that full payload. State must be a plain JSON object. The opaque identifiers accept 1–128 ASCII letters, digits, dots, underscores and hyphens, starting with a letter or digit; reserved prototype names and `latest` are rejected. Revisions are bounded nonempty strings. `defineBrowserApplicationDraft` validates and freezes the small reference without loading state.
|
|
59
|
+
|
|
60
|
+
```js
|
|
61
|
+
const state = await hydrateBrowserApplicationState(draft, {
|
|
62
|
+
scope: {projectId, placementId},
|
|
63
|
+
authorize, fetchBytes, signal,
|
|
64
|
+
});
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
State authorization receives `{kind: 'state', scope, draft}` with the same two phases. Hydration verifies byte length/hash and every binding inside the stored payload: project, placement, package digest, revision and artifact identity. It returns only frozen state. A missing, corrupted, stale, revoked or cancelled load does not mutate the saved reference; the caller should preserve the recoverable draft and report the failure.
|
|
68
|
+
|
|
69
|
+
## Bounds and host responsibilities
|
|
70
|
+
|
|
71
|
+
| Boundary | Limit |
|
|
72
|
+
| --- | --- |
|
|
73
|
+
| Encoded source artifact | 180 MiB |
|
|
74
|
+
| Source descriptor | 64 KiB |
|
|
75
|
+
| Complete encoded state artifact, including its envelope | 4 MiB |
|
|
76
|
+
| Draft descriptor | 4 KiB |
|
|
77
|
+
| Hydration timeout | 30 seconds default, 120 seconds maximum |
|
|
78
|
+
|
|
79
|
+
The existing bundle limits still apply: at most 2,048 regular-file assets, 64 MiB per asset and 128 MiB decoded in aggregate. The guest's 4 MiB message cap remains separate. Existing inline package, custom-view, Step-state and collaboration limits are unchanged; a guest state near its message cap may exceed the artifact cap once its envelope is encoded.
|
|
80
|
+
|
|
81
|
+
Prefer an asynchronous byte stream for large source reads. The helper rejects excess bytes before retaining the excess chunk, limits streams to 65,536 chunks, and attempts to close a failed iterator. A buffered callback must enforce `maxBytes` before allocating/downloading the entire response; checking an already allocated response cannot prevent that allocation. The host must propagate the supplied signal to its underlying I/O. Abort and timeout reject pending callbacks even if those callbacks ignore cancellation, and late results are discarded. Timers and JSON/asset verification are cooperative bounds, not CPU or process isolation.
|
|
82
|
+
|
|
83
|
+
The host still owns immutable writes, authoritative project/package/placement checks, atomic revision acceptance, permission checks at storage and execution boundaries, quotas, retention, export/backup, deletion and garbage collection. This helper supplies no actor authentication, database transaction, encryption, worker containment, durable state route or execution receipt. It does not make an application production-ready.
|
|
84
|
+
|
|
85
|
+
Focused tests include the real pinned Method Draw package: its multi-megabyte original source becomes a descriptor below 8 KiB, hydrates byte-equivalently, and remains rejected by ordinary package admission. Other tests cover exact state size boundaries, stream overflow, cancellation, timeout, authorization revocation, wrong identities, manifest/assets corruption and malformed JSON. Run `npx vitest run packages/block-sdk/browser-application-artifacts.test.js` without network or paid services.
|
package/CLAUDE.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Read AGENTS.md before building: it is the StillMade Block builder contract for this SDK folder.
|