stillmade-sdk 0.0.0-stage → 0.1.0

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