stillmade-sdk 0.1.41 → 0.1.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.stillmade/sdk-baseline.json +19 -21
- package/AGENTS.md +17 -12
- package/FRAME_VIEWS.md +113 -0
- package/INTERFACE_DESIGN.md +67 -22
- package/MOBILE_UI.md +4 -2
- package/MODULES.md +152 -6
- package/PASTE_TO_LLM.md +42 -32
- package/README.md +3 -2
- package/SDK.md +1028 -563
- package/UI_AESTHETIC.md +30 -3
- package/blocks/generate/package.js +1 -0
- package/blocks/generate/versions/1.0.0/package.js +463 -0
- package/docs/build/audio-to-editor.md +36 -0
- package/docs/build/block-builder-contract.md +150 -0
- package/docs/build/comfyui.md +227 -0
- package/docs/build/concepts.md +40 -0
- package/docs/build/context.md +159 -0
- package/docs/build/cookbook.md +57 -0
- package/docs/build/custom-interface.md +617 -0
- package/docs/build/data-types.md +83 -0
- package/docs/build/frame-views.md +259 -0
- package/docs/build/generate-media.md +59 -0
- package/docs/build/github-applications.md +314 -0
- package/docs/build/hosted-images.md +214 -0
- package/docs/build/hosted-music.md +39 -0
- package/docs/build/hosted-speech.md +157 -0
- package/docs/build/hosted-text.md +246 -0
- package/docs/build/image-description.md +49 -0
- package/docs/build/interface-design.md +343 -0
- package/docs/build/javascript.md +63 -0
- package/docs/build/local-preview.md +61 -0
- package/docs/build/media-analysis.md +27 -0
- package/docs/build/media.md +400 -0
- package/docs/build/mobile-ui.md +106 -0
- package/docs/build/modules.md +487 -0
- package/docs/build/original-blocks.md +70 -0
- package/docs/build/outside-apis.md +128 -0
- package/docs/build/production-context-templates.md +12 -0
- package/docs/build/project-storage.md +94 -0
- package/docs/build/quickstart.md +48 -0
- package/docs/build/recipes.md +103 -0
- package/docs/build/script-handoff.md +45 -0
- package/docs/build/script-writer.md +34 -0
- package/docs/build/state.md +223 -0
- package/docs/build/testing.md +112 -0
- package/docs/build/timeline-edits.md +116 -0
- package/docs/build/timeline-proposals.md +76 -0
- package/docs/build/transcription.md +59 -0
- package/docs/build/triggers.md +59 -0
- package/docs/build/tutorial.md +52 -0
- package/docs/build/typescript.md +34 -0
- package/docs/build/video-generation.md +61 -0
- package/docs/build/web-reading.md +37 -0
- package/docs/build/with-your-ai.md +27 -0
- package/docs/changelog.md +9 -0
- package/docs/creators.md +21 -0
- package/docs/distribute/discovery.md +43 -0
- package/docs/distribute/imports.md +58 -0
- package/docs/distribute/publishing.md +29 -0
- package/docs/distribute/sdk-versions.md +36 -0
- package/docs/distribute/selling.md +14 -0
- package/docs/distribute/teams.md +60 -0
- package/docs/distribute/versioning.md +28 -0
- package/docs/examples.md +23 -0
- package/docs/gallery.md +26 -0
- package/docs/index.md +50 -0
- package/docs/native-mcp.md +307 -0
- package/docs/project-types/automation.md +43 -0
- package/docs/project-types/batches.md +50 -0
- package/docs/project-types/build.md +42 -0
- package/docs/project-types/completion.md +15 -0
- package/docs/project-types/conditions.md +21 -0
- package/docs/project-types/hosted-review.md +115 -0
- package/docs/project-types/onboarding.md +75 -0
- package/docs/project-types/running.md +309 -0
- package/docs/project-types/testing.md +72 -0
- package/docs/reference/application-artifacts.md +87 -0
- package/docs/reference/authoring-guide.md +134 -0
- package/docs/reference/browser-applications.md +267 -0
- package/docs/reference/capabilities.md +45 -0
- package/docs/reference/cli.md +71 -0
- package/docs/reference/connection-api.md +59 -0
- package/docs/reference/cooperative-jobs.md +13 -0
- package/docs/reference/desktop-capabilities.md +172 -0
- package/docs/reference/desktop-execution.md +77 -0
- package/docs/reference/errors.md +233 -0
- package/docs/reference/execution.md +800 -0
- package/docs/reference/first-party-blocks.md +40 -0
- package/docs/reference/generation-models.md +59 -0
- package/docs/reference/limits.md +306 -0
- package/docs/reference/manifest-kinds-controls.md +36 -0
- package/docs/reference/manifest.md +181 -0
- package/docs/reference/operations.md +36 -0
- package/docs/reference/package-jobs.md +35 -0
- package/docs/reference/parity.md +55 -0
- package/docs/reference/permissions.md +86 -0
- package/docs/reference/ports.md +26 -0
- package/docs/reference/types.md +268 -0
- package/docs/reference/universal-resolver.md +303 -0
- package/docs/reference/view-bridge.md +60 -0
- package/docs/reference/view-rules.md +15 -0
- package/docs/reference/workspace-sync.md +25 -0
- package/docs/sdk.md +34 -0
- package/docs/tools/block-remix.md +211 -0
- package/docs/tools/llm.md +2213 -0
- package/docs/tools/repository-adaptation.md +613 -0
- package/examples/check-clip.stillmade.json +8 -1
- package/examples/clean-text.stillmade.json +4 -0
- package/examples/custom-interface.stillmade.json +4 -0
- package/examples/describe-image.stillmade.json +4 -0
- package/examples/foley-cue.stillmade.json +4 -0
- package/examples/generate-image.stillmade.json +4 -0
- package/examples/generate-video.stillmade.json +10 -2
- package/examples/module-word-stats/stillmade.block.json +4 -0
- package/examples/narrate-script.stillmade.json +4 -0
- package/examples/numbered-takes.stillmade.json +4 -0
- package/examples/research-topic.stillmade.json +9 -1
- package/examples/score-a-scene.stillmade.json +4 -0
- package/examples/script-draft.stillmade.json +4 -0
- package/examples/summarize-page.stillmade.json +4 -0
- package/examples/text-workflow.stillmade.json +7 -32
- package/examples/thicken-lines.stillmade.json +4 -0
- package/examples/timeline-polish.stillmade.json +15 -3
- package/examples/transcribe-audio.stillmade.json +15 -3
- package/examples/word-count.stillmade.json +4 -0
- package/package.json +1 -1
- package/packages/block-cli/cli.js +13 -6
- package/packages/block-cli/dev-host/assets/host.js +81 -38
- package/packages/block-cli/dev-host/assets/index.css +1 -1
- package/packages/block-cli/format.js +1 -1
- package/packages/block-cli/ready-gate.js +4 -0
- package/packages/block-cli/templates.js +37 -19
- package/packages/block-cli/type-packages.js +119 -0
- package/packages/block-platform/block-readiness.js +8 -1
- package/packages/block-platform/canvas.js +2 -1
- package/packages/block-platform/catalog.js +27 -48
- package/packages/block-platform/native-host-inventory.js +0 -226
- package/packages/block-platform/plain-descriptions.js +1 -25
- package/packages/block-platform/project-type-starters.js +13 -53
- package/packages/block-platform/script-handoff.js +2 -4
- package/packages/block-platform/type-workspace.js +2 -0
- package/packages/block-sdk/appearance.js +3 -1
- package/packages/block-sdk/audio-generation-example.js +2 -2
- package/packages/block-sdk/block-tier.js +1 -1
- package/packages/block-sdk/builder-contract.js +13 -11
- package/packages/block-sdk/capabilities.js +1 -1
- package/packages/block-sdk/capability-example.js +1 -1
- package/packages/block-sdk/contracts.js +6 -2
- package/packages/block-sdk/examples.js +3 -3
- package/packages/block-sdk/first-party-identities.js +1 -84
- package/packages/block-sdk/first-party-packages.js +3 -85
- package/packages/block-sdk/generation-catalog.js +15 -3
- package/packages/block-sdk/image-description-example.js +1 -1
- package/packages/block-sdk/image-generation-example.js +1 -1
- package/packages/block-sdk/index.d.ts +2 -1
- package/packages/block-sdk/media-analysis-example.js +2 -2
- package/packages/block-sdk/mock-host.js +7 -1
- package/packages/block-sdk/module-example.js +1 -1
- package/packages/block-sdk/module-host-calls.js +35 -10
- package/packages/block-sdk/module-hosted.js +15 -2
- package/packages/block-sdk/module-media-access.js +71 -0
- package/packages/block-sdk/module-node.js +1 -1
- package/packages/block-sdk/portable-media-actions.js +1 -1
- package/packages/block-sdk/runtime.js +1 -1
- package/packages/block-sdk/speech-example.js +1 -1
- package/packages/block-sdk/state-example.js +1 -1
- package/packages/block-sdk/timeline-proposal-example.js +1 -1
- package/packages/block-sdk/transcription-example.js +1 -1
- package/packages/block-sdk/trigger-examples.js +2 -2
- package/packages/block-sdk/video-generation-example.js +1 -1
- package/packages/block-sdk/view-bridge.js +4 -1
- package/packages/block-sdk/view-design.js +44 -15
- package/packages/block-sdk/web-example.js +2 -2
- package/packages/design-system/block-kit.css +53 -12
- package/packages/design-system/block-kit.html +3 -2
- package/blocks/mcp-motion-planner/versions/1.1.0/package.js +0 -97
- package/blocks/motion-designer/versions/1.0.1/package.js +0 -173318
- package/blocks/motion-designer/versions/1.0.2/package.js +0 -173318
- package/blocks/motion-frame-review/versions/1.1.1/package.js +0 -465
- package/blocks/motion-frame-review/versions/1.1.2/package.snapshot.js +0 -572
- package/blocks/narration/package.js +0 -1
- package/blocks/narration/versions/1.0.0/package.js +0 -221
- package/blocks/narration/versions/1.0.1/package.js +0 -221
- package/blocks/native/sm.animated-scene/versions/2.0.0/package.js +0 -475
- package/blocks/native/sm.animated-scene/versions/2.1.0/package.js +0 -498
- package/blocks/native/sm.animated-scene/versions/2.2.0/package.js +0 -524
- package/blocks/native/sm.animated-scene/versions/2.3.0/package.js +0 -618
- package/blocks/native/sm.animated-scene/versions/2.3.1/package.js +0 -618
- package/blocks/native/sm.animated-scene/versions/2.3.2/package.js +0 -723
- package/blocks/native/sm.animated-scene/versions/2.3.3/package.js +0 -723
- package/blocks/native/sm.animated-scene/versions/2.3.4/package.js +0 -676
- package/blocks/native/sm.animated-scene/versions/2.3.5/package.js +0 -693
- package/blocks/native/sm.animated-scene/versions/2.3.6/package.js +0 -700
- package/blocks/native/sm.animated-scene/versions/2.3.7/package.js +0 -747
- package/blocks/native/sm.animated-scene/versions/2.3.8/package.js +0 -769
- package/blocks/native/sm.animated-scene/versions/2.3.9/package.js +0 -769
- package/blocks/native/sm.animated-scene-assistant/versions/1.0.0/package.js +0 -183
- package/blocks/native/sm.blueprint/versions/2.0.0/package.js +0 -358
- package/blocks/native/sm.blueprint/versions/2.1.0/package.js +0 -358
- package/blocks/native/sm.blueprint/versions/2.1.1/package.js +0 -358
- package/blocks/native/sm.blueprint/versions/2.1.2/package.js +0 -358
- package/blocks/native/sm.blueprint/versions/2.1.3/package.js +0 -381
- package/blocks/native/sm.blueprint/versions/2.1.4/package.js +0 -381
- package/blocks/native/sm.blueprint/versions/2.1.5/package.js +0 -339
- package/blocks/native/sm.blueprint/versions/2.1.6/package.js +0 -356
- package/blocks/native/sm.blueprint/versions/2.1.7/package.js +0 -363
- package/blocks/native/sm.blueprint/versions/2.1.8/package.js +0 -410
- package/blocks/native/sm.blueprint/versions/2.1.9/package.js +0 -422
- package/blocks/native/sm.blueprint-assistant/versions/1.0.0/package.js +0 -172
- package/blocks/native/sm.chat/versions/2.0.0/package.js +0 -144
- package/blocks/native/sm.chat/versions/2.0.1/package.js +0 -97
- package/blocks/native/sm.chat/versions/2.0.2/package.js +0 -100
- package/blocks/native/sm.chat/versions/2.0.3/package.js +0 -100
- package/blocks/native/sm.continue-if/versions/1.0.0/package.js +0 -168
- package/blocks/native/sm.describe-media/versions/2.0.0/package.js +0 -153
- package/blocks/native/sm.describe-media/versions/2.0.1/package.js +0 -156
- package/blocks/native/sm.describe-media/versions/2.1.0/package.js +0 -140
- package/blocks/native/sm.image-editor/versions/2.0.0/package.js +0 -183
- package/blocks/native/sm.image-editor/versions/2.0.1/package.js +0 -190
- package/blocks/native/sm.new-items/versions/1.0.0/package.js +0 -191
- package/blocks/native/sm.pick-photos/versions/1.0.0/package.js +0 -334
- package/blocks/native/sm.quality-audit/versions/1.0.0/package.js +0 -192
- package/blocks/native/sm.quality-audit/versions/1.0.1/package.js +0 -192
- package/blocks/native/sm.quality-audit/versions/1.0.2/package.js +0 -195
- package/blocks/native/sm.research/versions/2.0.0/package.js +0 -175
- package/blocks/native/sm.research/versions/2.0.1/package.js +0 -184
- package/blocks/native/sm.research/versions/2.0.2/package.js +0 -187
- package/blocks/native/sm.script/versions/2.0.0/package.js +0 -144
- package/blocks/native/sm.script/versions/2.1.0/package.js +0 -144
- package/blocks/native/sm.script/versions/2.1.1/package.js +0 -144
- package/blocks/native/sm.script/versions/2.1.2/package.js +0 -105
- package/blocks/native/sm.script/versions/2.1.3/package.js +0 -152
- package/blocks/native/sm.script/versions/2.1.4/package.js +0 -156
- package/blocks/native/sm.script/versions/2.1.5/package.js +0 -156
- package/blocks/native/sm.shot-plan/versions/2.0.0/package.js +0 -301
- package/blocks/native/sm.shot-plan/versions/2.1.0/package.js +0 -528
- package/blocks/native/sm.shot-plan/versions/2.1.1/package.js +0 -528
- package/blocks/native/sm.shot-plan/versions/2.1.2/package.js +0 -528
- package/blocks/native/sm.shot-plan/versions/2.1.3/package.js +0 -536
- package/blocks/native/sm.shot-plan/versions/2.2.0/package.js +0 -800
- package/blocks/native/sm.shot-plan/versions/2.2.1/package.js +0 -920
- package/blocks/native/sm.shot-plan-assistant/versions/1.0.0/package.js +0 -173
- package/blocks/native/sm.stock-search/versions/2.0.0/package.js +0 -174
- package/blocks/native/sm.thumbnail/versions/2.0.0/package.js +0 -137
- package/blocks/native/sm.thumbnail/versions/2.0.1/package.js +0 -140
- package/blocks/native/sm.transcribe/versions/2.0.0/package.js +0 -163
- package/blocks/native/sm.transcribe/versions/2.0.1/package.js +0 -168
- package/blocks/native/sm.whiteboard-assistant/versions/1.0.0/package.js +0 -175
- package/blocks/native/sm.youtube/versions/2.0.0/package.js +0 -217
- package/blocks/occasion-story/package.js +0 -1
- package/blocks/occasion-story/versions/1.0.0/package.js +0 -1658
- package/blocks/occasion-story/versions/1.0.1/package.js +0 -1699
- package/blocks/occasion-story/versions/1.0.2/package.js +0 -1682
- package/blocks/photo-reel-composer/versions/1.0.0/package.js +0 -3043
- package/blocks/photo-reel-composer/versions/1.0.1/package.js +0 -3026
- package/blocks/photo-reel-composer/versions/1.0.2/package.js +0 -4149
- package/blocks/product-ad-variants/versions/1.0.0/package.js +0 -2911
- package/blocks/product-launch-director/versions/1.0.0/package.js +0 -103
- package/blocks/release-visuals/package.js +0 -1
- package/blocks/release-visuals/versions/1.0.0/package.js +0 -1492
- package/blocks/release-visuals/versions/1.0.1/package.js +0 -1517
- package/blocks/release-visuals/versions/1.0.2/package.js +0 -1500
- package/blocks/screen-recorder/package.js +0 -1
- package/blocks/screen-recorder/versions/1.0.0/package.js +0 -223
- package/blocks/screen-recorder/versions/1.0.1/package.js +0 -223
- package/blocks/short-form-finish/package.js +0 -1
- package/blocks/short-form-finish/versions/1.0.0/package.js +0 -1043
- package/blocks/short-form-finish/versions/1.0.1/package.js +0 -1043
- package/blocks/short-form-finish/versions/1.0.2/package.js +0 -1043
- package/blocks/short-form-finish/versions/1.0.3/package.js +0 -1026
- package/examples/saas-product-launch-reviewed-source.stillmade.json +0 -383
- package/examples/saas-product-launch.stillmade.json +0 -304
- package/packages/block-platform/dealer-inventory-video-project-type.js +0 -38
- package/packages/block-platform/first-revenue-project-types.js +0 -46
- package/packages/block-platform/fixture-starters.js +0 -13
- package/packages/block-platform/launch-project-source.js +0 -10
- package/packages/block-platform/launch-project.js +0 -30
- package/packages/block-platform/motion-project-types.js +0 -55
- package/packages/block-platform/motion-starters.js +0 -14
- package/packages/block-platform/product-ad-variants-project-type.js +0 -30
- package/packages/block-platform/product-launch-updated.js +0 -90
- package/packages/block-platform/revenue-review-project-types.js +0 -36
- package/packages/block-platform/revenue-review-starters.js +0 -13
- package/packages/block-platform/script-writer.js +0 -29
- package/packages/block-platform/website-source-block.js +0 -14
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Review hosted Project Types
|
|
2
|
+
|
|
3
|
+
A Project Type can include reviewed `text.generate`, `audio.speech`, and
|
|
4
|
+
`image.generate` Blocks alongside local recipe/JavaScript Blocks and StillMade
|
|
5
|
+
workspaces. Import checks two separate things: whether every embedded package is
|
|
6
|
+
safe and reviewed, and which parts of the connected workflow have actually run.
|
|
7
|
+
Passing independent Block fixtures does not prove their connected production flow.
|
|
8
|
+
|
|
9
|
+
### Prepare portable source
|
|
10
|
+
|
|
11
|
+
The source contains ordinary pinned packages and connections. It never contains
|
|
12
|
+
account receipts, chosen payment methods, API keys or provider approval. For
|
|
13
|
+
example, run this from the extracted SDK directory to create a script-to-speech
|
|
14
|
+
Project Type using the included complete Block examples:
|
|
15
|
+
|
|
16
|
+
```js
|
|
17
|
+
import {writeFile} from 'node:fs/promises';
|
|
18
|
+
import {textGenerate} from './packages/block-sdk/capability-example.js';
|
|
19
|
+
import {audioSpeech} from './packages/block-sdk/speech-example.js';
|
|
20
|
+
|
|
21
|
+
const type = {
|
|
22
|
+
schemaVersion: 1,
|
|
23
|
+
id: 'creator.script-and-speech',
|
|
24
|
+
version: '1.0.0',
|
|
25
|
+
name: 'Script and speech',
|
|
26
|
+
description: 'Draft a short narration script and turn it into reviewed speech.',
|
|
27
|
+
license: 'MIT',
|
|
28
|
+
stages: [
|
|
29
|
+
{id: 'draft', blockId: textGenerate.manifest.id, version: '1.0.0', label: 'Draft narration'},
|
|
30
|
+
{id: 'voice', blockId: audioSpeech.manifest.id, version: '1.0.0', label: 'Narrate script'}
|
|
31
|
+
],
|
|
32
|
+
packages: [textGenerate, audioSpeech],
|
|
33
|
+
connections: [
|
|
34
|
+
{from: {stage: 'draft', port: 'script'}, to: {stage: 'voice', port: 'script'}}
|
|
35
|
+
]
|
|
36
|
+
};
|
|
37
|
+
await writeFile('script-and-speech.stillmade.json', JSON.stringify(type, null, 2), {flag: 'wx'});
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
This writes source only. It has not generated narration or speech. The offline
|
|
41
|
+
validator checks its structure, versions and typed connections. Local fixture
|
|
42
|
+
checks still execute in isolation; hosted fixture expectations require an account
|
|
43
|
+
review in StillMade. Source packaging does not install a package or authorize a
|
|
44
|
+
provider call.
|
|
45
|
+
|
|
46
|
+
### Review in StillMade
|
|
47
|
+
|
|
48
|
+
Open **Import package** and select the JSON or ZIP. Review each hosted Block with
|
|
49
|
+
the model, payment method, voice or image quality selected in the host controls.
|
|
50
|
+
An exact saved import review can be shown and accepted without new generation.
|
|
51
|
+
Running a new review still requires its displayed quote and explicit confirmation
|
|
52
|
+
for the fixtures and separate sample. Review actual text, audio or images before
|
|
53
|
+
accepting the evidence. Source, account or selection changes invalidate reuse.
|
|
54
|
+
|
|
55
|
+
Every embedded hosted package needs a matching review, including packages used
|
|
56
|
+
only by disabled Steps or currently unused packages. Repeated placements of an
|
|
57
|
+
unchanged package share one package review. They do not share a production run:
|
|
58
|
+
each placement's actual connected input still requires its own execution approval.
|
|
59
|
+
|
|
60
|
+
After package reviews, StillMade runs the local checks and the portions of the
|
|
61
|
+
sample flow that can execute locally. An enabled hosted Step is marked unexecuted;
|
|
62
|
+
its dependent Steps wait for its real output. They never receive the hosted
|
|
63
|
+
Block's independent fixture sample as a substitute. Missing independent context,
|
|
64
|
+
invalid connections and failing local code still prevent import. A genuinely
|
|
65
|
+
disabled Step or a valid conditional bypass keeps its ordinary workflow behavior.
|
|
66
|
+
|
|
67
|
+
The report distinguishes `passed` (package admission) from `workflowComplete`
|
|
68
|
+
(all enabled connected Steps completed). **Confirm Import** installs the reviewed
|
|
69
|
+
source, and the report continues to show any required workflow rehearsal. A new
|
|
70
|
+
release or another account's installation rechecks the receipts and current
|
|
71
|
+
source. ComfyUI-containing Project Types use their separate connection-bound
|
|
72
|
+
review map, described below.
|
|
73
|
+
Unattended hosted automation and a single complete hosted-workflow execution proof
|
|
74
|
+
remain separate work; an import report must not claim either one.
|
|
75
|
+
|
|
76
|
+
### Host review envelope
|
|
77
|
+
|
|
78
|
+
The authenticated host passes `typeCapabilityReviews` alongside `content` to
|
|
79
|
+
`POST /api/blocks/imports/review` and `/api/blocks/imports`, and alongside the
|
|
80
|
+
normal release/install fields to `/api/blocks/releases` and `/api/blocks/install`.
|
|
81
|
+
It is a plain object with exactly the distinct embedded hosted package digests:
|
|
82
|
+
|
|
83
|
+
```js
|
|
84
|
+
const typeCapabilityReviews = {
|
|
85
|
+
[exactPackageDigest]: {
|
|
86
|
+
receiptId: verifiedReview.receiptId,
|
|
87
|
+
selection: verifiedReview.selection
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Use the SDK `digest(package)` on the entire exact package. The map has at most
|
|
93
|
+
100 entries and is at most 64 KiB as JSON. Each entry contains only `receiptId`
|
|
94
|
+
and the existing exact host `selection`. Unknown/missing digests, another
|
|
95
|
+
account's receipts, changed source, expired receipts or invalid retained media
|
|
96
|
+
are rejected. The server rechecks before writing the import, release or install;
|
|
97
|
+
these checks never generate output or charge again. They do not extend a review's
|
|
98
|
+
one-hour standalone import expiry. Project-only expired evidence cannot be used.
|
|
99
|
+
|
|
100
|
+
The server returns the sanitized map in the account review report, outside the
|
|
101
|
+
portable source. A host may use `verifyHostedProjectTypePackages` from
|
|
102
|
+
`packages/block-platform/hosted-type-reviews.js` with its trusted authenticated
|
|
103
|
+
receipt verifier to obtain the opaque `verifiedHostedPackages` option for
|
|
104
|
+
`testProjectType` and `previewProjectType`. Guest JSON cannot construct this
|
|
105
|
+
in-memory proof. The helper itself does not authenticate receipts; ordinary Block
|
|
106
|
+
authors should use StillMade's review UI.
|
|
107
|
+
|
|
108
|
+
### Retained samples and setup
|
|
109
|
+
|
|
110
|
+
Saved imports, releases and hosted installations retain their reviewed sample
|
|
111
|
+
media through account-bound server reports. Installed review metadata stores
|
|
112
|
+
no extra source copy and grants no release access. Removing team access still stops new private source downloads.
|
|
113
|
+
Retaining a historical sample does not extend its import-approval expiry. Legacy
|
|
114
|
+
installations without a saved report are not retroactively assigned a receipt.
|
|
115
|
+
The current storage and encrypted BYOK vault are reused.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Project defaults and onboarding
|
|
2
|
+
|
|
3
|
+
### Typed shared inputs
|
|
4
|
+
|
|
5
|
+
The optional `projectInputs` array declares up to 32 shared input contracts using
|
|
6
|
+
`key`, `type`, `semantic`, `required` and `description`, plus the usual optional
|
|
7
|
+
schema, accepted meanings, source policy, default, sensitivity, freshness,
|
|
8
|
+
cardinality, batching and numeric limits. Keys are unique lowercase identifiers
|
|
9
|
+
up to 64 characters. For example:
|
|
10
|
+
|
|
11
|
+
```json
|
|
12
|
+
{"projectInputs":[{"key":"brand_tone","type":"text","semantic":"brand_tone","required":true,"description":"How the brand should sound","sources":["default","user"],"default":"Clear and friendly"}]}
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Defaults must validate against their contracts and permit the `default` source.
|
|
16
|
+
Credential-sensitive defaults are rejected. New projects initialize these values
|
|
17
|
+
in typed context with Project Type provenance; matching Block inputs must allow
|
|
18
|
+
`project` sources. Existing values are never overwritten by initialization.
|
|
19
|
+
Other equally ranked ready project values take precedence over these fallback
|
|
20
|
+
records unless a source preference explicitly selects the default. The composer
|
|
21
|
+
and connected preview use the defaults too; explicit sample values,
|
|
22
|
+
settings and connections remain authoritative. Freshness limits produce expiring
|
|
23
|
+
context values. These contracts grant no permissions or execution authority.
|
|
24
|
+
|
|
25
|
+
Native controls can inspect or replace the declarations. The visual setup editor
|
|
26
|
+
can add shared information from project-capable Block requirements, preserving
|
|
27
|
+
their types, meanings and schemas, then edit descriptions, required flags and
|
|
28
|
+
defaults. Advanced contract editing handles custom declarations and complex
|
|
29
|
+
values. Edits stay local until Apply shared inputs; validation is shared with
|
|
30
|
+
native edits. Missing values do not create an upfront questionnaire. The next
|
|
31
|
+
local recipe/JavaScript Block can request a uniquely matching shared input through
|
|
32
|
+
the existing reviewed-answer flow. The declaration controls user/Chat sources;
|
|
33
|
+
both its contract and the consuming Block's contract must accept the answer.
|
|
34
|
+
Saved answers carry workflow provenance and source revisions, and permitted
|
|
35
|
+
Blocks can reuse them. Ambiguous declarations are not chosen automatically.
|
|
36
|
+
The existing saved-answer editor can update reviewed shared answers and newly
|
|
37
|
+
initialized defaults against an unchanged declaration and a current permitted
|
|
38
|
+
consumer. Edits require the current revision, remove default fallback priority,
|
|
39
|
+
and mark dependent results stale. Credential-sensitive and dependency-derived
|
|
40
|
+
records are not exposed in this editor. Older unsigned defaults are preserved
|
|
41
|
+
without being silently enrolled in editing. Richer value pickers and hosted-Block
|
|
42
|
+
collection remain unfinished.
|
|
43
|
+
Existing releases are not rewritten.
|
|
44
|
+
|
|
45
|
+
Connected previews accept shared sample answers at `context.sharedInputs`, keyed
|
|
46
|
+
by the declared shared-input key. The preview form uses the existing typed-answer
|
|
47
|
+
dialogs; complex values can use the sample context JSON. Samples must satisfy
|
|
48
|
+
their declarations and permit user answers; credential-sensitive samples are
|
|
49
|
+
rejected. They replace matching template defaults only in the preview registry,
|
|
50
|
+
and matching consumers must still allow project sources. Explicit Step inputs
|
|
51
|
+
and connected results retain precedence. Sample answers are never saved into the
|
|
52
|
+
Project Type or a real project. Existing sample digests and server rehearsal
|
|
53
|
+
replay include the whole context, so shared samples follow the same verification
|
|
54
|
+
path. This does not simulate trusted connections or allow missing hosted results.
|
|
55
|
+
|
|
56
|
+
A Project Type can declare project defaults and up to eight setup questions. These are optional additions to the schema-1 Project Type contract; they do not replace protected Chat, configure provider credentials or start production work.
|
|
57
|
+
|
|
58
|
+
```json
|
|
59
|
+
{
|
|
60
|
+
"defaults": {"aspectRatio": "9:16", "brief": "Create a short product launch video."},
|
|
61
|
+
"onboarding": [
|
|
62
|
+
{"id": "product", "label": "What is the product?", "type": "text", "required": true},
|
|
63
|
+
{"id": "audience", "label": "Who is it for?", "type": "textarea"},
|
|
64
|
+
{"id": "tone", "label": "Tone", "type": "select", "options": ["Clear and direct", "Playful"], "default": "Clear and direct"}
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Merge these fields into an existing valid Project Type with `schemaVersion`, `id`, `version`, `name`, `description` and its enabled `stages`. This fragment is not a standalone package.
|
|
70
|
+
|
|
71
|
+
`defaults.aspectRatio` accepts `16:9`, `9:16` or `1:1`; `defaults.brief` is at most 4,000 characters. Question IDs are unique lowercase identifiers up to 40 characters. Labels are at most 120 characters. Text and textarea answers are at most 1,000 characters. A select question declares 2–12 unique options of at most 120 characters; its default must match an option. `required` is optional and boolean.
|
|
72
|
+
|
|
73
|
+
The Project Type Builder exposes these fields under **Project defaults & starting questions**. Using the Project Type opens one project setup dialog. The host records the chosen project name and format, and retains the brief plus labeled answers in the existing project's production context (`bible.extraInfo`). Script Writer receives this brief. Answers are project data, not edits to a marketplace release or its version identity; they are not published or sent to acquisition analytics. Read Blueprint/project context only through the permissions already documented by the SDK.
|
|
74
|
+
|
|
75
|
+
The empty Project Type starter is an editable draft. Add an enabled Block before validation, runtime execution, or publication; empty drafts are never installable releases.
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
# Run connected steps
|
|
2
|
+
|
|
3
|
+
### Inspect a specific run
|
|
4
|
+
|
|
5
|
+
In a project's Flow view, select a live run to see its captured input connections,
|
|
6
|
+
or select a historical attempt to inspect its saved evidence. Current connections
|
|
7
|
+
remain a separate planned view. Missing captured input records are shown as
|
|
8
|
+
unavailable; the host does not reconstruct them from today's source choices.
|
|
9
|
+
|
|
10
|
+
**Ask chat about this run** captures the selected receipt, including batch item,
|
|
11
|
+
attempt and loop pass when recorded. The native controller resolves that receipt
|
|
12
|
+
again through authorized saved-project inspection. Unsaved or evicted receipts
|
|
13
|
+
are unavailable to that saved-project read; another attempt is never substituted.
|
|
14
|
+
Legacy run-only targets are accepted only when exactly one receipt matches.
|
|
15
|
+
|
|
16
|
+
Host integrations use `projectFlowRunReceiptIdentity(record)` from
|
|
17
|
+
`packages/block-platform/flow-inspection.js` for the bounded
|
|
18
|
+
`receipt:<placementId>:<identity>` conversation scope. This is a locator, not an
|
|
19
|
+
access grant. Resolve it within the authorized project's placement history and
|
|
20
|
+
require exactly one match. Inspect/read operations neither run a Block nor change
|
|
21
|
+
its source. Existing retained-history limits still apply.
|
|
22
|
+
|
|
23
|
+
### Failure and recovery evidence
|
|
24
|
+
|
|
25
|
+
Flow distinguishes `EXECUTION_FAILED` from `RESULT_DELIVERY_FAILED` (a result
|
|
26
|
+
returned, but delivery to the project was interrupted) and `RESULT_SAVE_FAILED` (a result
|
|
27
|
+
returned, but project saving was not confirmed). The latter states show **Needs
|
|
28
|
+
recovery** rather than implying that generation produced nothing. Recovery must
|
|
29
|
+
use the supported request/result controls before a new paid run is considered.
|
|
30
|
+
|
|
31
|
+
The original failed-attempt record remains in history. If a matching provider
|
|
32
|
+
result or exact run/input/item receipt is later retained, its history entry gains
|
|
33
|
+
`recovered: true` and the current failure warning clears. This does not mean a
|
|
34
|
+
retained result was selected. Diagnostics contain bounded codes and duration;
|
|
35
|
+
raw provider messages, prompts and media addresses are excluded.
|
|
36
|
+
|
|
37
|
+
### Run connected Steps
|
|
38
|
+
|
|
39
|
+
Inside a Project Type, **Run connected steps** runs the selected recipe or isolated
|
|
40
|
+
JavaScript Step and the following supported connected Steps in workflow order.
|
|
41
|
+
The host captures the exact Project Type, package versions, current settings,
|
|
42
|
+
conditions and connections. Every input comes from current project data, supplied
|
|
43
|
+
values, declared context, or an actual upstream output. Production runs never
|
|
44
|
+
prefill missing values from package test fixtures.
|
|
45
|
+
|
|
46
|
+
A connected run stops before a manual workspace, a Block requiring separate
|
|
47
|
+
runtime approval, or an unconnected Step. The UI shows the ordered sequence and
|
|
48
|
+
stopping point; it does not ask users to wire a graph. ComfyUI, hosted workspaces
|
|
49
|
+
and generation are not silently dispatched as part of this local sequence. They
|
|
50
|
+
retain their own execution and confirmation paths.
|
|
51
|
+
|
|
52
|
+
The shared host helper is `packages/block-platform/segment-runner.js`:
|
|
53
|
+
|
|
54
|
+
```js
|
|
55
|
+
const plan = await planSegment(projectType, canvas, startingStepId);
|
|
56
|
+
const result = await runSegment(plan, {
|
|
57
|
+
source: selectedSource, // stable source/version identity, when applicable
|
|
58
|
+
inputs: { [startingStepId]: currentInputs },
|
|
59
|
+
externalInputs: currentInputsFromOutsideTheSegment,
|
|
60
|
+
resolveContext: (step, source) => scopedContextFor(step, source),
|
|
61
|
+
execute: (pkg, input, { signal, check }) => runInTrustedHost(pkg, input, { signal, check }),
|
|
62
|
+
check: () => verifyCurrentSourceSettingsPermissions(),
|
|
63
|
+
onStep: record => retainCompletedResult(record),
|
|
64
|
+
signal,
|
|
65
|
+
});
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Custom durable hosts can opt into stateful sandboxed segments with
|
|
69
|
+
`planSegment(type, canvas, startingStepId, {background: true})`. Then call
|
|
70
|
+
`runSegment(plan, {background: true, states, ...options})`, where `states` supplies
|
|
71
|
+
`{version, value}` for **every** stateful Step ID. Background plans pin code,
|
|
72
|
+
settings and connections independently of current memory. The runner never
|
|
73
|
+
mutates the supplied memory. Keep the starting memory snapshot with the job;
|
|
74
|
+
resuming `previousResults` verifies it and refuses changed inputs or memory.
|
|
75
|
+
Persist returned states only in the same transaction as the completed workflow
|
|
76
|
+
results. A failed later Step can retain earlier provisional results, but those
|
|
77
|
+
results must not advance shared memory prematurely. This mode does not authorize
|
|
78
|
+
hosted APIs or ComfyUI. StillMade's scheduled multi-Block service uses this mode with shared Canvas
|
|
79
|
+
editing enabled. It pins the job's starting states, retains provisional
|
|
80
|
+
checkpoints after failures, and commits all memory changes with the completed
|
|
81
|
+
workflow. Selecting a retained result does not apply its memory a second time.
|
|
82
|
+
|
|
83
|
+
This helper is a host orchestration API, not a capability exposed to guest code.
|
|
84
|
+
The host owns permissions, quarantine checks, media decoding/storage and durable
|
|
85
|
+
adoption. `externalInputs` is keyed by target Step ID then port name, and may only
|
|
86
|
+
fill declared connections from outside the segment. Internal connections always
|
|
87
|
+
use outputs produced earlier in the current run. Context access follows each
|
|
88
|
+
Block's own declarations. A false condition uses the existing typed bypass rule.
|
|
89
|
+
Missing inputs, incompatible roles or stale package/settings pins stop execution.
|
|
90
|
+
Pinned safe connection conversions run in the host before each receiving Block.
|
|
91
|
+
They recheck actual media kinds and authorized current context; a failed
|
|
92
|
+
conversion retains completed upstream results and stops before the receiving
|
|
93
|
+
Step. They do not add a provider call or silently select replacement media.
|
|
94
|
+
|
|
95
|
+
For an explicit batch selection, a trusted host can set `overridePrimary: true`
|
|
96
|
+
with its already-authorized media `source`. This replaces only the first Step's
|
|
97
|
+
primary input; it must match that input's type and role. Do not put this
|
|
98
|
+
receiver-typed source into `externalInputs` as though it were a raw upstream shot
|
|
99
|
+
or scene. Ordinary connected runs leave the option `false`. The host records
|
|
100
|
+
`primaryInputOverride` when a connection was bypassed, and must preserve that
|
|
101
|
+
choice when validating retained results. This option grants no asset access:
|
|
102
|
+
the host still validates ownership, selection, permissions and source freshness.
|
|
103
|
+
|
|
104
|
+
The immutable plan has `workflowDigest`, `planDigest`, `startStepId`, ordered
|
|
105
|
+
`steps`, `nextStageId`, and `stopReason`. `result.steps` contains one record per
|
|
106
|
+
completed placement: `stepId`, `packageDigest`, `inputDigest`, `outputs`, `skipped`,
|
|
107
|
+
`at`, and optional host `mediaReceipts`. Identical Blocks at two positions retain
|
|
108
|
+
separate records. On failure, `error.partialResult` retains completed records;
|
|
109
|
+
later Steps are not reported as completed. A host can supply `previousResults`
|
|
110
|
+
only as an ordered prefix whose source, input and package digests still match.
|
|
111
|
+
Cancellation or failure cannot turn a stale partial result into a new success.
|
|
112
|
+
|
|
113
|
+
## Project handoffs and Flow inspection
|
|
114
|
+
|
|
115
|
+
Saved shared tasks use `PROJECT_FLOW_OPERATIONS.inspectTasks` (`inspect_project_tasks`, `projects:read`) and `controlTask` (`control_project_task`, separately granted `projects:control` plus `projects:read`). These do not require navigation or a live tab. Inspection returns bounded current task pages or one exact `taskId`. Control accepts pause/takeover/cancel/resume with exact requesterId, taskRevision, instructionRevision, controlEpoch and a unique requestId; current project and connection authority are checked in the transaction. Identical replay returns its original receipt plus current task state without reapplying. Resume queues the existing revalidation process and never approves dispatch, spending or edits; takeover preserves requester/payer. Accepted provider work may still finish after pause/cancel. Native task controls share the coordinator through their existing UI, so their registry `nativeAction` is null. Native and external controls both require the complete observed fence; older native payloads fail with `PROJECT_AI_REFRESH_REQUIRED` instead of changing newer task intent. See [saved task control details](/docs/native-mcp.md#saved-project-task-controls).
|
|
116
|
+
|
|
117
|
+
`recover_project_capability_request` retrieves one actor-owned project request under `projects:read` + `runs:read` and the existing current edit-access requirement. It verifies retained source/media and an unchanged request ledger before returning bounded, redacted stored outputs with `applied:false` and `selectionChanged:false`. It does not poll a provider, execute, settle, save or select a result. Truncated output envelopes are excerpts. Applying a retained result remains a separate reviewed native recovery action.
|
|
118
|
+
|
|
119
|
+
The in-app Project Type Builder accepts pinned built-in stages and embedded recipe
|
|
120
|
+
packages in an optional `packages` array. Each stage uses `{id,blockId,version,label}`;
|
|
121
|
+
connections use `{from:{stage,port},to:{stage,port}}`. Duplicate dependencies,
|
|
122
|
+
missing versions, incompatible ports, duplicate input producers, cycles, and root
|
|
123
|
+
chat overrides are rejected. Embedded recipe fixture tests must pass before launch
|
|
124
|
+
or release.
|
|
125
|
+
|
|
126
|
+
Executable custom types combine embedded SDK processing Blocks with the existing
|
|
127
|
+
production workspaces: Voiceover, Script Writer, Shots, Blueprint, Canvas,
|
|
128
|
+
Image Panels, White Board Motion, animated assets, Editor and Export. The
|
|
129
|
+
workspace adapter selects the existing production screen for each placement.
|
|
130
|
+
Legacy component adapters remain available to saved types; they do not become
|
|
131
|
+
separate workspace listings. Custom JavaScript, recipes and reviewed ComfyUI
|
|
132
|
+
packages open in their own Step workspace. Run them explicitly; navigation never
|
|
133
|
+
triggers paid generation or automatic reruns.
|
|
134
|
+
|
|
135
|
+
Connections use declared SDK ports or an implemented host port adapter. Canvas
|
|
136
|
+
and Editor workspaces share persistent project documents; listing a port does
|
|
137
|
+
not invent an executable conversion. The builder validates supported handoffs
|
|
138
|
+
and explains when a host port or conversion is not implemented. Script Writer's
|
|
139
|
+
script-to-Voiceover handoff uses the existing narration document. Starting Chat
|
|
140
|
+
remains protected before the configurable flow.
|
|
141
|
+
|
|
142
|
+
### Project Flow inspection contract
|
|
143
|
+
|
|
144
|
+
The SDK exports `ProjectFlowTarget`, `projectFlowTarget()` and
|
|
145
|
+
`projectFlowSnapshot()` from `@stillmade/block-sdk`. Targets use stable project,
|
|
146
|
+
placement, input/output, run, attempt and repeated-item IDs; display names and
|
|
147
|
+
screen positions are not target identity. A target may name the `planned`,
|
|
148
|
+
`active_run` or `historical_run` perspective. The snapshot validator checks its
|
|
149
|
+
contract version, definition identity, unique placement IDs, receiving edges,
|
|
150
|
+
completeness flag and documented size bounds. External `inspect_project_flow`
|
|
151
|
+
reads also return a host-computed `snapshotCursor`; use that exact cursor when
|
|
152
|
+
reviewing or applying a saved-project source or result-pin change.
|
|
153
|
+
`redactProjectFlowMediaAddresses()` recursively removes media address fields
|
|
154
|
+
from preview projections before they cross into chat or another client surface.
|
|
155
|
+
When present, a placement's optional `condition` summary contains its input key
|
|
156
|
+
and safe label, bounded field path, supported operator, and the last applied
|
|
157
|
+
outcome (`unknown`, `ran`, or `skipped`). It deliberately omits the comparison
|
|
158
|
+
value. A current skipped conditional output and its receiving input use the
|
|
159
|
+
`skipped` state with no materialized value; this is distinct from a missing
|
|
160
|
+
result. Historical skipped attempts retain a `skipped` history status.
|
|
161
|
+
Saved activity and history may include a bounded `execution` summary: execution
|
|
162
|
+
kind, whether output was captured or omitted by a conditional skip, and a capped
|
|
163
|
+
media-receipt count. It contains no provider run IDs or playable URLs and does
|
|
164
|
+
not establish provider activity for an attempt without a saved Block receipt.
|
|
165
|
+
|
|
166
|
+
`PROJECT_FLOW_OPERATIONS` maps the shared operation IDs to the native action
|
|
167
|
+
and external tool names. `updateAffected` maps to the existing native
|
|
168
|
+
`update_affected_steps` action; it runs eligible live-workspace Steps, with a
|
|
169
|
+
whole-update budget and separate exact generation review for hosted execution, and has
|
|
170
|
+
no saved-project external tool. `useCompletedResults` maps to the native
|
|
171
|
+
`use_completed_results` action; it adopts retained connected-workflow outputs
|
|
172
|
+
in the live workspace after the host revalidates their receipts, without
|
|
173
|
+
dispatching generation, and has no saved-project external tool. These SDK helpers validate a data shape and map
|
|
174
|
+
operation names; they do not grant access to a project, authorize a mutation,
|
|
175
|
+
or dispatch a Block. Hosts resolve every ID and filter
|
|
176
|
+
labels, previews, candidates and history against current permissions. The
|
|
177
|
+
current saved-project operations are `inspect_project_flow`,
|
|
178
|
+
`list_project_flow_placements`, `list_project_flow_ports`,
|
|
179
|
+
`list_project_flow_history`, `list_project_flow_run_inputs`,
|
|
180
|
+
`read_project_flow_text`, `recover_project_media`,
|
|
181
|
+
`diagnose_project_flow`, `preview_project_flow_source`,
|
|
182
|
+
`change_project_flow_source`, `preview_project_flow_pin`,
|
|
183
|
+
`pin_project_flow_result` and `clear_project_flow_pin`; write operations require
|
|
184
|
+
the current `projects:write` grant and exact preview revisions. They never run
|
|
185
|
+
a Block. Reruns, retries and costly review remain separate authorized actions.
|
|
186
|
+
|
|
187
|
+
Native `list_placements`, `list_ports` and `list_history` use the same bounded
|
|
188
|
+
projection as those three saved-project page tools. Each requires the exact
|
|
189
|
+
`revision` from its own preceding inspection: native surface revisions and
|
|
190
|
+
saved-project revisions are different and cannot be interchanged. A placement
|
|
191
|
+
page accepts at most 8 rows; ports and retained history accept at most 16.
|
|
192
|
+
Later pages of `inspect_project_flow` also require `expectedRevision`.
|
|
193
|
+
Membership and project ownership are checked again after saved reads.
|
|
194
|
+
|
|
195
|
+
For example, after `inspect_project_flow({projectId})` returns `revision`, read
|
|
196
|
+
`list_project_flow_history({projectId, placementId, revision, offset:0, limit:8})`
|
|
197
|
+
and continue with the returned `nextOffset`. Each entry includes a `receiptId`
|
|
198
|
+
and `targetKey` identifying the exact attempt/item, plus recorded input evidence.
|
|
199
|
+
Use `targetKey` for chat receipt targeting; several entries may share `runId`.
|
|
200
|
+
`historyComplete:false` distinguishes incomplete retained history from the end
|
|
201
|
+
of a page. `retainedHistoryComplete:false` still applies at the last page; this
|
|
202
|
+
operation cannot recover evicted records or missing historical input evidence.
|
|
203
|
+
`inputsTruncated:true` means only a bounded subset of captured input identities
|
|
204
|
+
was included. The receipt exposes `inputsCount`, `inputsRevision`,
|
|
205
|
+
`inputsNextOffset` and `inputsRetainedComplete`. Use native `list_run_inputs` or
|
|
206
|
+
external `list_project_flow_run_inputs` with `{placementId, receiptId,
|
|
207
|
+
revision: inputsRevision, offset, limit}` (plus `projectId` externally) to read
|
|
208
|
+
at most 16 named captured-input identities per page. This captured-input
|
|
209
|
+
revision is different from the surface/Flow revision. Every page rechecks the
|
|
210
|
+
exact retained receipt and current read permission; changes beyond the initial
|
|
211
|
+
64-input projection also invalidate its revision. A source's present selection
|
|
212
|
+
never replaces the recorded identity. Follow `nextOffset` until null; a final
|
|
213
|
+
page with `retainedComplete:false` still indicates missing original evidence.
|
|
214
|
+
The run capture stores at most 128 named inputs. A capture at that limit may
|
|
215
|
+
have omitted identities and is conservatively marked incomplete. Preview
|
|
216
|
+
attempts also have a 64-input cap and a byte limit. An older preview may have
|
|
217
|
+
retained fewer identities than the original run; paging cannot recover those
|
|
218
|
+
lost entries. Nested collection member identities
|
|
219
|
+
remain bounded within each input; this operation pages named inputs, not raw
|
|
220
|
+
values, full text, or the members of captured collections. The historical
|
|
221
|
+
inspector's Previous/Next inputs controls keep its map on that exact input page. None of these reads starts work, applies results, or proves media
|
|
222
|
+
playback. The native summary exposes `historyTotal` and `historyNextOffset` so
|
|
223
|
+
three displayed receipts are never reported as the whole retained history.
|
|
224
|
+
|
|
225
|
+
Retained unselected results have a separate read-only inventory. The Result tab
|
|
226
|
+
shows eight candidates at a time. Use native `list_retained_results` or external
|
|
227
|
+
`list_project_flow_retained_results` with `{placementId, revision:
|
|
228
|
+
unusedResultsRevision, offset, limit}` (plus `projectId` externally); list pages
|
|
229
|
+
contain at most eight candidates. Only records still retained for the current
|
|
230
|
+
Block package are included: unused single results, unselected connected results,
|
|
231
|
+
and batch records explicitly marked unused after a source change. The ordinary
|
|
232
|
+
batch picker is separate. `historyComplete:false` means evicted history is not
|
|
233
|
+
recoverable through this inventory, even at its final page.
|
|
234
|
+
|
|
235
|
+
Each candidate has an exact `candidateId`, `outputDigest`, run/item/attempt
|
|
236
|
+
metadata, and captured-input/output counts and cursors. Native
|
|
237
|
+
`inspect_retained_result` and external `inspect_project_flow_retained_result`
|
|
238
|
+
accept `{placementId, revision: unusedResultsRevision, candidateId, section,
|
|
239
|
+
offset, limit}`. Sections `inputs` and `outputs` page at most 16 identities or
|
|
240
|
+
previews. Sections `text` and `collection` also require `outputKey` and the exact
|
|
241
|
+
preview `path`; text requires its returned `identity` and permits at most 4,000
|
|
242
|
+
characters, collections at most 16 members. Reuse the exact candidate and list
|
|
243
|
+
revision on every page. Changes anywhere in retained records, package or preview
|
|
244
|
+
restrictions invalidate that revision. Inspect fresh state after a conflict.
|
|
245
|
+
Current project read access is rechecked after saved reads; native/UI caches
|
|
246
|
+
reset when the authorized reader changes. External/native results redact media
|
|
247
|
+
addresses. Sensitivity and prior preview restrictions still apply; a restricted
|
|
248
|
+
candidate cannot become inspectable through a later page. Captured inputs remain
|
|
249
|
+
bounded metadata and may be incomplete; nested structured previews disclose
|
|
250
|
+
omitted fields rather than claiming a complete document. These reads never
|
|
251
|
+
select a candidate, restore media, dispatch work, or substitute current output
|
|
252
|
+
for a retained value.
|
|
253
|
+
|
|
254
|
+
Mapped native Canvas outputs use the installed exact-version host port adapter. Flow can show a saved image, video or text value as `ready` with `observation.kind: "native-canvas-output"` and `runReceiptAvailable:false`. The Inspector labels that value **Available**; it does not invent a completed run, receipt or result pin. The exact selected asset/version is preserved in Result and Using. Missing values, mismatched host identities and navigation-only workspace ports remain unavailable. `ProjectFlowNativeObservation` describes this read-only origin; normal output/source paging retains its identity. Native production-workspace connections also use the exact installed host manifest and declared port handles; a newer catalog release cannot redefine an older pin. Original standalone nodes without placement/version metadata retain their historical 1.0.0 contract. Unknown, mismatched and non-host pins cannot impersonate a production workspace.
|
|
255
|
+
|
|
256
|
+
Whole-project Script retains its original narration source. Transcript uses the selected Voiceover take’s recorded transcript and word timings, independently of the editable narration draft. Older takes without stored transcript text derive it from their own timed words. A new Transcript-only run protects the original Voiceover document; changing an unrelated narration draft does not invalidate it. Original legacy receipts that also include Script remain valid with their stricter source checks. An older proposal cannot replace original reads with current documents, and a legacy result lacking derived proof must be rerun before guarded adoption. Other derived fields and arbitrary dynamic reads require separate attribution. Scoped narration and supported shot/scene collections capture their original Blueprint, Shot Plan, Animation, Panels and Board contributors, including empty originals whose later additions could change the result. They do not substitute the whole-project Script. Native asset inventories, generation records, scoped version histories and character/location/style collections can now retain their original contributor and membership proof when canonical reconstruction exactly matches the consumed value. A bounded v2 Canvas projection excludes only the exact host-dispatched producing placements while retaining their IDs/types, so saving their own output does not invalidate native collection membership. Current saved executable asset/generation members can retain their original selected-output, state and native-source evidence when exact canonical reconstruction matches the consumed collection. A producing placement’s own consumed previous output is captured separately when provable. Ambiguous, legacy, archived, private or unsupported collection members, local-only media, whole-project version metadata and noncanonical source documents remain unproven. v1 source reads stay compatible; new v2 captures require explicit server support. Media-dependent narration and arbitrary dynamic reads still require separate attribution.
|
|
257
|
+
|
|
258
|
+
Stateful host runs retain the exact starting-memory identity and resulting-state digest alongside original input/output evidence. Original native reads carry through subsequent memory transitions, connected batches, loops and checkpoint recovery. Declared initial/reset memory is distinct from legacy saved memory even when its bytes match; old receipts cannot gain proof from current documents or by removing a warning. Missing or changed state proof blocks protected workspace adoption. This is host-maintained provenance, not cryptographic attestation against rewriting an entire saved receipt. Older retained plans/checkpoints may require their existing recovery/reset path when the new memory evidence changes the plan identity.
|
|
259
|
+
|
|
260
|
+
Task-authored final Canvas adoption can bind the original native read union to the same transaction as the current task and Canvas execution checks. The host's `taskSourceReadSet` is retained in the exact save/recovery receipt, with explicit `assistantSourceReadSetVersions` capability negotiation. A lost response is recovered by reading the original commit; it does not resubmit an old proposal over newer work. Stale completed results may still be retained for review. Manual selection in saved Canvas projects now uses an acknowledged source save with the original native read union and `sourceCanvasPrecondition`, negotiated with `sourceCanvasPreconditionVersion:1`. Source roots and current execution content are checked under the same ordered transaction locks; layout-only changes are preserved. Exact request recovery distinguishes applied, not-applied and unresolved saves, including no-op selection, without replaying old work over newer selections. Servers without the capability refuse selection. Local drafts and unused-result retention remain separate. Legacy results do not gain missing original-source proof. Remaining native/background producers require separate coverage.
|
|
261
|
+
|
|
262
|
+
The saved-project inspector and compact handoff can open the exact source Block workspace through existing draft-save navigation guards. Account, project, read access, placement and matching package source are checked after drafts finish saving. The existing Editor opening suppresses automatic narration import/export for this navigation request. Previews without workspace navigation say **Inspect source Block**. Compact handoffs show required inputs needing attention even when the primary value is ready; **Using** targets the first such input.
|
|
263
|
+
|
|
264
|
+
Large Flow connection lists page 40 placements and offer **Find a Block** with direct keyboard access. Exact input links remain available after search. The map keeps its own bounded pages and selected neighborhood. Unchanged bounded scalar activity reports reuse the shared projection; new captured evidence, source changes and revoked access invalidate the relevant view.
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
External controllers can review one complete retained local connected run with `preview_project_flow_completed_results`, then select it using `use_project_flow_completed_results`. Apply requires the exact returned Flow, Canvas and candidate digests, a new request ID and the current task fence. Every selected row must have its original sealed v2 source receipt. The server validates the existing plan and original source roots, rechecks project/connection/task authority, and saves through shared Canvas operations. An acknowledged retry returns its original receipt without selecting the result again, even if the current selection has changed.
|
|
268
|
+
|
|
269
|
+
This external path supports complete recipe/JavaScript connected runs with current inputs, asset-descriptor batches with non-media outputs, and shared complete local loop receipts. All-assets, scene and selected-shots batches require the original complete inventory receipt captured and acknowledged before dispatch; it binds the original scope, ordered targets, exact plan and eight contributing workspace roots. Preview and apply check those original roots again, including workspaces that were empty when the batch started. JavaScript memory transitions require exact initial, reset or retained starting identity and resulting state with original sealed proof. Preview exposes digest-only `stateChanges`; apply saves the original outputs and memory without executing them again. Legacy/unproven or changed memory is unavailable. Hosted execution, decoded/generated media, incomplete runs and failure-recovery results still use their existing workspace review. Broad batches without original inventory proof remain unavailable; current inventory cannot be substituted for missing historical evidence. Inventory membership and each consumed item’s output or memory lineage are separate requirements. A local preview does not establish shared source proof. Preview and apply never dispatch a Block, load media, request model analysis or spend credits. A source/authority conflict keeps the retained result available for review; it does not silently rerun the workflow.
|
|
270
|
+
|
|
271
|
+
Completed local loops can retain their exact whole receipt in shared Canvas history without selecting outputs or advancing memory. A failed shared save preserves the original device checkpoint. Shared `retainedLoopRuns` summaries expose bounded run identities, pass counts and current selection for review; they do not claim revalidation. Retention is limited to four envelopes, 512 KiB per envelope and 1 MiB total per starting placement; exceeding a bound keeps device recovery and reports the limit rather than evicting old history. External selection validates the original whole loop and every consecutive pass against current sources, memory, task and authority, then uses the existing adoption path without dispatch. In the native workspace, another editor can explicitly choose a shared run without its original device checkpoint. Review validates the original complete receipt; Use rechecks its shared identity and the reviewed Canvas execution state before acknowledged selection. A newer selection or changed source requires fresh review.
|
|
272
|
+
|
|
273
|
+
Shared loop pass inspection uses the existing `list_project_flow_retained_results` and `inspect_project_flow_retained_result` operations. Initial discovery exposes bounded historical identities; explicit inspection verifies the original whole envelope before returning captured input identities and paged output/text/collection previews. It validates original evidence without requiring today's inputs to match, and does not select or execute the pass. Changed original history or revoked read access invalidates the response. Native Result review uses the same verified reader through **Inspect saved pass**.
|
|
274
|
+
|
|
275
|
+
Existing-media and host-action selections carry explicit selection metadata. Flow separates them from worker execution receipts and attempt history; a media selection identity is not a run ID. Saved selection still checks current authority and the reviewed Canvas/source state.
|
|
276
|
+
|
|
277
|
+
External connections must explicitly opt into `projects:write` alongside `projects:read` for reviewed Flow input, pin, result/memory changes and saved-media restoration. Defaults and existing connections do not gain permissions. Shared Flow reads recheck current connection authority after asynchronous work; all four Flow mutations recheck it in their write transaction, including replay. Media restoration rechecks through its existing before-write guard. Revocation, expiry, project/scope changes and suspension invalidate stale authority.
|
|
278
|
+
|
|
279
|
+
### Completed background results
|
|
280
|
+
|
|
281
|
+
In a saved Block workspace, open **Background results** beneath the result area to review already completed jobs. Editors can explicitly select a result whose original input, output and memory proof remains valid for the current project; viewers can inspect it. Selection rechecks the exact job, project, Block version, sources and shared Canvas and does not execute the Block or advance saved memory. Legacy jobs, pending validation journals and results with missing original source proof remain preview-only. Current source documents never replace missing original evidence. Connected fallback/bypass and unsupported derived sources may therefore remain unavailable for selection.
|
|
282
|
+
|
|
283
|
+
Use the **+** between project placements to add a Block. **Edit workflow** in
|
|
284
|
+
that dialog opens the ordered builder for adding, removing, disabling,
|
|
285
|
+
duplicating, replacing, reordering and configuring placements. Changes remain a
|
|
286
|
+
draft until **Save workflow**. A changed source requires a new Block version;
|
|
287
|
+
the same ID/version cannot silently acquire different code.
|
|
288
|
+
|
|
289
|
+
Removed, disabled, replaced or changed placements retain their SDK package
|
|
290
|
+
(or built-in host contract), settings, prior results and connections in
|
|
291
|
+
**Workflow history**. The old placement
|
|
292
|
+
is inactive; it is not run by autosave or future-media automation. Re-enabling
|
|
293
|
+
the same placement and source can recover its results for review, marked stale
|
|
294
|
+
until rerun. Changing a producer or its inputs also marks affected downstream
|
|
295
|
+
results stale. Each history entry offers **Download Block + SDK**. SDK packages
|
|
296
|
+
come from that retained instance; built-in downloads follow the current-client
|
|
297
|
+
source behavior described above.
|
|
298
|
+
Scoped SDK `versions` context includes retained media as inactive previous
|
|
299
|
+
versions; archived results do not become current assets or new generations.
|
|
300
|
+
|
|
301
|
+
The full definition and selected stage travel with project/session saves. A newer
|
|
302
|
+
installed type cannot replace an existing project's pinned definition.
|
|
303
|
+
Use `node packages/block-cli/cli.js create-type my-type.json`, then `test`, `preview`,
|
|
304
|
+
and `pack` on that JSON file. `preview` rehearses connected sandbox Blocks using
|
|
305
|
+
fixture inputs and actual upstream outputs. It marks hosted workspaces as requiring
|
|
306
|
+
a real project and never calls paid providers. `examples/text-workflow.stillmade.json` is a complete example.
|
|
307
|
+
The broader editor command/workspace SDK is not yet exposed to external recipes.
|
|
308
|
+
Do not invent `ctx.editor`, `ctx.sql`, `ctx.shell`, `ctx.fs` or `ctx.capabilities`
|
|
309
|
+
methods; none exists in 0.1. Keep unsupported requirements explicit.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Rehearse connected workflows
|
|
2
|
+
|
|
3
|
+
```sh
|
|
4
|
+
node packages/block-cli/cli.js preview my-type.json
|
|
5
|
+
node packages/block-cli/cli.js preview my-type.json sample-inputs.json
|
|
6
|
+
```
|
|
7
|
+
|
|
8
|
+
`sample-inputs.json` is keyed by Step ID, then input name:
|
|
9
|
+
|
|
10
|
+
```json
|
|
11
|
+
{ "first": { "text": " My sample " } }
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
`previewProjectType(type, options)` from `packages/block-platform/type-preview.js`
|
|
15
|
+
rehearses the pinned workflow without changing it. Options accept `inputs`, scoped
|
|
16
|
+
`context`, an abort `signal`, `onResult`, and a sandbox `run` implementation for
|
|
17
|
+
browser workers. The CLI uses the same isolated Node runtime as Block tests.
|
|
18
|
+
Unconnected inputs start with the Block's first fixture, then Step config and
|
|
19
|
+
custom sample values; connected values always come from actual upstream output.
|
|
20
|
+
Conditions use the production bypass rules. Inputs and outputs are validated at
|
|
21
|
+
each boundary. Offline checks share a 15-second deadline and 4 MB combined
|
|
22
|
+
sample budget. Interactive browser previews permit 64 MB of recorded data;
|
|
23
|
+
waiting for hosted consent and execution does not consume the local deadline.
|
|
24
|
+
|
|
25
|
+
The report contains a digest and per-Step results. `passed` means no executed
|
|
26
|
+
Step failed; **only `complete: true` means all enabled Steps completed**. Hosted
|
|
27
|
+
workspaces, missing context and dependent blocked Steps produce an incomplete
|
|
28
|
+
report. The same connected rehearsal also runs within type fixture validation and server
|
|
29
|
+
import admission; an executed combination that fails is rejected. Incomplete host
|
|
30
|
+
coverage is marked explicitly. This does not replace static admission checks,
|
|
31
|
+
individual fixtures, or actual host/media testing in a project. In the builder choose **Preview connected workflow**
|
|
32
|
+
to inspect per-Step inputs, outputs and failures.
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
### Interactive hosted rehearsal
|
|
36
|
+
|
|
37
|
+
In the Project Type Builder, choose **Preview connected workflow**. For included
|
|
38
|
+
hosted Blocks, complete or reuse each account-bound package review first. The
|
|
39
|
+
preview then asks for a model, payment choice, and cost confirmation for each
|
|
40
|
+
actual hosted invocation. A package review never substitutes its sample output
|
|
41
|
+
for an upstream result. Cancel at any point to stop downstream execution.
|
|
42
|
+
|
|
43
|
+
Use **Custom sample inputs** for values keyed by Step ID. Use **Sample project
|
|
44
|
+
context** for a JSON object containing the context fields requested by Blocks:
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
{"metadata":{"schemaVersion":1,"hasDialogue":true}}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Each Block receives only its declared context inputs and permissions. Context
|
|
51
|
+
samples are copied; testing cannot write through to a production project.
|
|
52
|
+
Conditions read the resolved inputs and apply the same pass-through rules used
|
|
53
|
+
in production. Changing either sample clears the displayed prior result.
|
|
54
|
+
|
|
55
|
+
Before passing hosted output downstream, StillMade re-fetches the authenticated
|
|
56
|
+
run and checks the package, input, model selection, quote, output and media
|
|
57
|
+
receipts. Generated image references can feed recipe image inputs: the browser
|
|
58
|
+
decodes the verified media without resizing it. The recipe limit remains one
|
|
59
|
+
megapixel. Arbitrary URLs in sample JSON do not authorize image decoding. Local
|
|
60
|
+
JavaScript Blocks retain reference-based image contracts.
|
|
61
|
+
|
|
62
|
+
The browser host opts into `interactive: true`, supplies `verifyHostedResult`,
|
|
63
|
+
and may supply `resolveInput` for authorized media conversion. These are trusted
|
|
64
|
+
host callbacks, never functions supplied by imported packages. Omitting the
|
|
65
|
+
verifier prevents hosted execution. Keep interactive mode off in automated
|
|
66
|
+
admission and CLI checks; enabling it does not provide provider credentials,
|
|
67
|
+
payment authorization, or a server-certified workflow receipt.
|
|
68
|
+
|
|
69
|
+
A successful sample rehearsal proves that those enabled Steps ran with those
|
|
70
|
+
inputs. It does not prove every possible project, workspace interaction, or
|
|
71
|
+
conditional branch. Manual StillMade workspaces still need their working preview
|
|
72
|
+
or a real project. Changing accounts cancels the active hosted preview.
|