stillmade-sdk 0.1.16 → 0.1.18
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 +3 -3
- package/DESKTOP_CAPABILITIES.md +17 -7
- package/SDK.md +19 -8
- package/blocks/screen-recorder/package.js +1 -0
- package/blocks/screen-recorder/versions/1.0.0/package.js +223 -0
- package/examples/camera-recorder.stillmade.json +4 -5
- package/examples/microphone-recorder.stillmade.json +4 -5
- package/examples/screen-recorder.stillmade.json +4 -5
- package/package.json +1 -1
- package/packages/block-cli/dev-host/assets/host.js +101 -18
- package/packages/block-cli/dev-server.js +1 -1
- package/packages/block-platform/block-starters.js +3 -3
- package/packages/block-platform/flow-agent-pages.js +1 -1
- package/packages/block-platform/flow-inspection.js +4 -1
- package/packages/block-platform/plain-descriptions.js +1 -0
- package/packages/block-sdk/desktop-example.js +2 -2
- package/packages/block-sdk/first-party-identities.js +1 -0
- package/packages/block-sdk/first-party-packages.js +2 -1
- package/packages/block-sdk/view-bridge.js +1 -1
|
@@ -147,6 +147,6 @@ async function serveHost(res,path){
|
|
|
147
147
|
policies||=JSON.parse(await readFile(join(HOST_FILES,'policies.json'),'utf8'));
|
|
148
148
|
Object.assign(headers,{'Content-Security-Policy':policies.blockUiSandbox,'X-Frame-Options':'SAMEORIGIN','Permissions-Policy':'camera=(), microphone=(), geolocation=()'});
|
|
149
149
|
}
|
|
150
|
-
if(name==='index.html')Object.assign(headers,{'Content-Security-Policy':policies?.devHost||"default-src 'self'; img-src 'self' data: blob:; media-src 'self' blob: data:; style-src 'self' 'unsafe-inline'; font-src 'self' data:; connect-src 'self'
|
|
150
|
+
if(name==='index.html')Object.assign(headers,{'Content-Security-Policy':policies?.devHost||"default-src 'self'; img-src 'self' data: blob:; media-src 'self' blob: data:; style-src 'self' 'unsafe-inline'; font-src 'self' data:; connect-src 'self' data: blob:; worker-src 'self' blob:; frame-src 'self' blob:; object-src 'none'; base-uri 'none'"});
|
|
151
151
|
return end(res,200,typeOf(name),bytes,headers);
|
|
152
152
|
}
|
|
@@ -38,9 +38,9 @@ const definitions=[
|
|
|
38
38
|
['editor-transform','Timeline → Editor proposal','Propose changes to clips, then apply them through Editor undo.',quieterClips],
|
|
39
39
|
['captions','Text → Caption proposal','Add timed captions through the shared timeline contract.',captionFromText],
|
|
40
40
|
['stateful','Stateful Block','Keep an independent counter for each placement in a project.',numberedTakes],
|
|
41
|
-
['screen-recording','Screen recorder','Record
|
|
42
|
-
['camera-recording','Camera recorder','
|
|
43
|
-
['microphone-recording','Microphone recorder','Record
|
|
41
|
+
['screen-recording','Screen recorder','Record a screen or window you choose, in your browser or the desktop app.',screenRecorder],
|
|
42
|
+
['camera-recording','Camera recorder','Record your camera, in your browser or the desktop app.',cameraRecorder],
|
|
43
|
+
['microphone-recording','Microphone recorder','Record your microphone, in your browser or the desktop app.',microphoneRecorder],
|
|
44
44
|
];
|
|
45
45
|
export const BLOCK_STARTERS=Object.freeze(definitions.map(([id,name,description,source])=>({id,name,description,runtime:source.manifest.runtime})));
|
|
46
46
|
export function newBlockFromStarter(starter,id){
|
|
@@ -7,7 +7,7 @@ export const flowHistorySummary=(entry,placementId)=>({...entry,...projectFlowRe
|
|
|
7
7
|
const safePreview=value=>value?redactProjectFlowMediaAddresses(value):null;
|
|
8
8
|
export const flowInputSummary=input=>({key:input.key,label:input.label,state:input.state,materialized:input.materialized,source:input.source,sourcePlacementId:input.sourcePlacementId,sourceObservation:input.sourceObservation||null,explicit:input.explicit,reason:input.reason,selectionReason:input.selectionReason,valuePolicy:input.valuePolicy,pinned:input.pinned===true,pinRunId:input.pinRunId||null,canPinVersion:input.canPinVersion===true,pinChoices:input.pinChoices?.map(choice=>({runId:choice.runId,resultId:choice.pinSource.resultId||null,label:choice.label,preview:safePreview(choice.preview)}))||[],preview:safePreview(input.preview),candidates:input.candidates.slice(0,3),candidateCount:input.candidateCount,candidateRevision:input.candidateRevision,candidatesOmitted:(input.candidatesOmitted||0)+Math.max(0,input.candidates.length-3)});
|
|
9
9
|
export const flowOutputSummary=output=>({key:output.key,state:output.state,observation:output.observation||null,availabilityReason:output.availabilityReason||null,preview:safePreview(output.preview)});
|
|
10
|
-
export const flowPlacementSummary=item=>({id:item.id,name:item.label,state:item.state,condition:item.condition||null,retainedLoopRuns:safeWorkflowLoopSummaries(item.retainedLoopRuns),localMediaInputs:item.localMediaInputs||[],inputs:item.inputs.slice(0,8).map(flowInputSummary),inputsTotal:item.inputs.length,inputsOffset:0,inputsLimit:8,inputsNextOffset:item.inputs.length>8?8:null,outputs:item.outputs.slice(0,8).map(flowOutputSummary),outputsTotal:item.outputs.length,outputsOffset:0,outputsLimit:8,outputsNextOffset:item.outputs.length>8?8:null,unusedResults:item.unusedResults?.slice(0,3).map(candidate=>({candidateId:candidate.candidateId,kind:candidate.kind,...(candidate.kind==='loop'?{loopRunId:candidate.loopRunId,loopReceiptDigest:candidate.loopReceiptDigest,loopStartPlacementId:candidate.loopStartPlacementId,iteration:candidate.iteration,historical:true,verification:candidate.verification}:{}),...(candidate.selection?{selection:candidate.selection}:{}),runId:candidate.runId,at:candidate.at,reason:candidate.reason,outputDigest:candidate.outputDigest,inputsCount:candidate.inputsCount,outputsCount:candidate.outputsCount,applied:false}))||[],unusedResultsRevision:item.unusedResultsRevision,unusedResultsCount:item.unusedResultsCount,unusedResultsNextOffset:(item.unusedResultsCount||0)>3?3:null,usedInputs:item.usedInputs?.slice(0,8)||null,history:(item.history||[]).slice(0,3).map(entry=>flowHistorySummary(entry,item.id)),historyTotal:(item.history||[]).length,historyOffset:0,historyLimit:3,historyNextOffset:(item.history||[]).length>3?3:null,historyComplete:item.historyComplete===true&&(item.history||[]).length<=3,retainedHistoryComplete:item.historyComplete===true,activity:item.activity});
|
|
10
|
+
export const flowPlacementSummary=item=>({id:item.id,name:item.label,...(item.step?{step:item.step}:{}),state:item.state,condition:item.condition||null,retainedLoopRuns:safeWorkflowLoopSummaries(item.retainedLoopRuns),localMediaInputs:item.localMediaInputs||[],inputs:item.inputs.slice(0,8).map(flowInputSummary),inputsTotal:item.inputs.length,inputsOffset:0,inputsLimit:8,inputsNextOffset:item.inputs.length>8?8:null,outputs:item.outputs.slice(0,8).map(flowOutputSummary),outputsTotal:item.outputs.length,outputsOffset:0,outputsLimit:8,outputsNextOffset:item.outputs.length>8?8:null,unusedResults:item.unusedResults?.slice(0,3).map(candidate=>({candidateId:candidate.candidateId,kind:candidate.kind,...(candidate.kind==='loop'?{loopRunId:candidate.loopRunId,loopReceiptDigest:candidate.loopReceiptDigest,loopStartPlacementId:candidate.loopStartPlacementId,iteration:candidate.iteration,historical:true,verification:candidate.verification}:{}),...(candidate.selection?{selection:candidate.selection}:{}),runId:candidate.runId,at:candidate.at,reason:candidate.reason,outputDigest:candidate.outputDigest,inputsCount:candidate.inputsCount,outputsCount:candidate.outputsCount,applied:false}))||[],unusedResultsRevision:item.unusedResultsRevision,unusedResultsCount:item.unusedResultsCount,unusedResultsNextOffset:(item.unusedResultsCount||0)>3?3:null,usedInputs:item.usedInputs?.slice(0,8)||null,history:(item.history||[]).slice(0,3).map(entry=>flowHistorySummary(entry,item.id)),historyTotal:(item.history||[]).length,historyOffset:0,historyLimit:3,historyNextOffset:(item.history||[]).length>3?3:null,historyComplete:item.historyComplete===true&&(item.history||[]).length<=3,retainedHistoryComplete:item.historyComplete===true,activity:item.activity});
|
|
11
11
|
|
|
12
12
|
export function readFlowAgentPage(flow,{operation,placementId,kind,offset,limit,revision},{projectId,currentRevision,focusedId}={}){
|
|
13
13
|
if(revision!==currentRevision)throw new Error('The project Flow changed. Inspect Flow again before paging.');
|
|
@@ -148,6 +148,9 @@ export function inspectProjectFlow(type,canvas={nodes:[],edges:[]},{projectId=nu
|
|
|
148
148
|
const archivedByStage=new Map();
|
|
149
149
|
for(const entry of canvas.workflowArchive||[])if(entry.step?.id&&entry.node?.data?.blockLastRun){if(!archivedByStage.has(entry.step.id))archivedByStage.set(entry.step.id,[]);archivedByStage.get(entry.step.id).push(entry);}
|
|
150
150
|
const manifestFor=(stage,node)=>node?.data?.blockPackage?.manifest||(packageForStage(type,stage,[...BUILTIN_BLOCKS,...catalog])?.manifest);
|
|
151
|
+
// The Step (job) a Block sits in, by the name the person sees (October 19, 2026: Chat read
|
|
152
|
+
// Block names only and told a tester her "Upload sermon" Step did not exist).
|
|
153
|
+
const stepOf=new Map((type.groups||[]).filter(group=>typeof group?.label==='string'&&group.label&&Array.isArray(group.stages)).flatMap(group=>group.stages.map(id=>[id,group.label])));
|
|
151
154
|
const placements=audit.stages.map(row=>{
|
|
152
155
|
const stage=type.stages.find(item=>item.id===row.id),node=nodes.get(stageNodeId(stage)),manifest=manifestFor(stage,node);
|
|
153
156
|
const outputs=Object.entries(manifest?.outputs||{}).map(([key,port])=>{
|
|
@@ -254,7 +257,7 @@ export function inspectProjectFlow(type,canvas={nodes:[],edges:[]},{projectId=nu
|
|
|
254
257
|
const appliedActivity=last?.manualSelection?{applied:true,at:last.at||null,runId:null,...(selectedManually?{selection:selectedManually}:{})}:last?{applied:true,at:last.at||null,runId:last.executionRunId||last.semanticRunId||last.segmentRunId||last.runId||null,skipped:last.skipped===true&&!last.failureRecovery,execution:executionEvidence(last,{conditional:!!stage.condition,outputs:node?.data?.blockOutputs||{}})}:null;
|
|
255
258
|
const condition=stage.condition?{inputKey:stage.condition.input,inputLabel:manifest?.inputs?.[stage.condition.input]?.description||stage.condition.input,path:stage.condition.path.slice(0,8),operator:stage.condition.operator,outcome:last?(last.skipped===true&&!last.failureRecovery?'skipped':'ran'):'unknown'}:null;
|
|
256
259
|
const latestFailure=(node?.data?.blockFailedAttempts||[]).slice(-1)[0],failureIsLatest=typeof latestFailure?.runId==='string'&&Number.isFinite(Date.parse(latestFailure.at))&&(!last?.at||latestFailure.at>last.at)&&!failureRecovered(latestFailure),failedActivity=failureIsLatest?{runId:latestFailure.runId.slice(0,160),at:latestFailure.at,code:failureCode(latestFailure),durationMs:Number.isSafeInteger(latestFailure.diagnostic?.durationMs)?Math.max(0,Math.min(86400000,latestFailure.diagnostic.durationMs)):null,...Object.fromEntries(['attempt','batchIndex','batchCount'].filter(key=>failedCounter(latestFailure[key])).map(key=>[key,latestFailure[key]]))}:null;
|
|
257
|
-
return {id:row.id,nodeId:stageNodeId(stage),label:row.label,blockId:stage.blockId,version:stage.version,...(manifest?.permissions?.capabilities?.includes('connection.execute')?{connector:true}:{}),transformation:String(manifest?.description||'').slice(0,500),enabled:stage.enabled!==false,state:node?.data?.blockPrivacy?'restricted':active?'working':row.paused?'paused':node?.data?.blockStale||last&&last.digest!==node?.data?.blockDigest?'needs-updating':failureIsLatest?(failureCode(latestFailure)==='EXECUTION_FAILED'?'failed':'needs-recovery'):last?.skipped===true&&!last?.failureRecovery&&stage.condition?'skipped':last?'finished':row.state==='broken'||row.state==='needs-user-input'?'needs-choice':'waiting',...(condition?{condition}:{}),inputs:inputs.map(input=>({...input,valueType:manifest?.inputs?.[input.key]?.type||row.requirements.find(requirement=>requirement.key===input.key)?.requirement?.type||null})),outputs,unusedResults,unusedResultsRevision,unusedResultsCount,unusedResultsOffset,unusedResultsLimit,unusedResultsNextOffset,...(retainedPage?.candidateId?{inspectedRetainedResult}:{}),usedInputs,activity:active?{...(appliedActivity||{}),active,activeRuns,activeRunsOmitted:Math.max(0,(runsByPlacement.get(row.id)||[]).length-activeRuns.length)}:failedActivity?{...(appliedActivity||{}),failedAttempt:failedActivity}:appliedActivity,history:recentHistory,historyComplete,retainedLoopRuns:retainedWorkflowLoopSummaries(canvas,row.id)};
|
|
260
|
+
return {id:row.id,nodeId:stageNodeId(stage),label:row.label,...(stepOf.has(row.id)?{step:stepOf.get(row.id)}:{}),blockId:stage.blockId,version:stage.version,...(manifest?.permissions?.capabilities?.includes('connection.execute')?{connector:true}:{}),transformation:String(manifest?.description||'').slice(0,500),enabled:stage.enabled!==false,state:node?.data?.blockPrivacy?'restricted':active?'working':row.paused?'paused':node?.data?.blockStale||last&&last.digest!==node?.data?.blockDigest?'needs-updating':failureIsLatest?(failureCode(latestFailure)==='EXECUTION_FAILED'?'failed':'needs-recovery'):last?.skipped===true&&!last?.failureRecovery&&stage.condition?'skipped':last?'finished':row.state==='broken'||row.state==='needs-user-input'?'needs-choice':'waiting',...(condition?{condition}:{}),inputs:inputs.map(input=>({...input,valueType:manifest?.inputs?.[input.key]?.type||row.requirements.find(requirement=>requirement.key===input.key)?.requirement?.type||null})),outputs,unusedResults,unusedResultsRevision,unusedResultsCount,unusedResultsOffset,unusedResultsLimit,unusedResultsNextOffset,...(retainedPage?.candidateId?{inspectedRetainedResult}:{}),usedInputs,activity:active?{...(appliedActivity||{}),active,activeRuns,activeRunsOmitted:Math.max(0,(runsByPlacement.get(row.id)||[]).length-activeRuns.length)}:failedActivity?{...(appliedActivity||{}),failedAttempt:failedActivity}:appliedActivity,history:recentHistory,historyComplete,retainedLoopRuns:retainedWorkflowLoopSummaries(canvas,row.id)};
|
|
258
261
|
});
|
|
259
262
|
if(retainedResultPage){const placement=placements.find(item=>item.id===retainedResultPage.placementId);if(!placement||placement.unusedResultsRevision!==retainedResultPage.revision||retainedResultPage.operation==='list'&&retainedResultPage.offset>placement.unusedResultsCount||retainedResultPage.candidateId&&!placement.inspectedRetainedResult)throw new Error('This retained result list or exact candidate changed. Inspect Result again.');}
|
|
260
263
|
if(receiptInputPage){const entry=placements.find(item=>item.id===receiptInputPage.placementId)?.history?.find(item=>projectFlowRunReceiptIdentity(item)===receiptInputPage.receiptId);if(!entry||entry.inputsRevision!==receiptInputPage.revision||!entry.inputs||receiptInputPage.offset>entry.inputsCount)throw new Error('This retained receipt or its captured inputs changed. Inspect the run again.');}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
// immutable, so the plain wording for first-party Blocks lives here, by Block id.
|
|
4
4
|
// A Block whose own description is already plain needs no entry.
|
|
5
5
|
export const PLAIN_BLOCK_DESCRIPTIONS=Object.freeze({
|
|
6
|
+
'stillmade.screen-recorder':'Record your screen or a window, keep it on your device, cut out the parts you do not want, and pass it on.',
|
|
6
7
|
'sm.script':'Write and edit a script with AI. Set a length, add notes, and go back to earlier versions.',
|
|
7
8
|
'sm.shot-plan':'Turn a script into a list of timed shots, then edit what each shot shows and how long it lasts.',
|
|
8
9
|
'sm.blueprint':'Plan your video’s scenes, characters and look in one place, and lock the parts you want to keep.',
|
|
@@ -6,9 +6,9 @@ function recorder(kind,name){
|
|
|
6
6
|
const mediaType=kind==='microphone'?'audio':'video';
|
|
7
7
|
const media=mediaType==='audio'?sampleAudio:sampleVideo;
|
|
8
8
|
return {
|
|
9
|
-
manifest:{schemaVersion:1,sdkVersion:'0.1.0',id:`example.${kind}-recorder`,version:'1.0.0',name,description:`Record ${kind==='screen'?'a screen or window you choose':kind==='camera'?'your camera':'your microphone'} in StillMade desktop and pass the saved media to your workflow.`,kind:'task',runtime:'javascript',license:'MIT',provenance:EXAMPLE_PROVENANCE,platforms:{phone:{supported:false,reason:'Recording
|
|
9
|
+
manifest:{schemaVersion:1,sdkVersion:'0.1.0',id:`example.${kind}-recorder`,version:'1.0.0',name,description:`Record ${kind==='screen'?'a screen or window you choose':kind==='camera'?'your camera':'your microphone'} in StillMade or the StillMade desktop app and pass the saved media to your workflow.`,kind:'task',runtime:'javascript',license:'MIT',provenance:EXAMPLE_PROVENANCE,platforms:{phone:{supported:false,reason:'Recording needs a desktop browser or the StillMade desktop app.'},browser:{supported:true},desktop:{supported:true}},inputs:{media:{type:mediaType,primary:true}},outputs:{media:{type:mediaType,primary:true}},permissions:{project:[],desktop:[`${kind}.capture`]},ui:[]},
|
|
10
10
|
code:'return {media: input.media};',
|
|
11
|
-
view:{html:`<section><h2>${name}</h2><p>Record in the desktop app. You choose when recording starts and stops.</p><div><button id="start" type="button">Start recording</button><button id="stop" type="button" disabled>Stop and use recording</button><button id="cancel" type="button" disabled>Cancel</button></div><p id="status" role="status">Ready to record. Device access requires your permission.</p></section>`,css:'section { padding: 1.5rem; } h2 { font-style: italic; font-weight: 400; } div { display: flex; flex-wrap: wrap; gap: .6rem; } button { border: 1px solid var(--border-tok); border-radius: 999px; padding: .7rem 1rem; background: var(--bg-elev-1); color: var(--fg); } button:disabled { opacity: .5; } p { color: var(--fg-muted); }',javascript:`
|
|
11
|
+
view:{html:`<section><h2>${name}</h2><p>Record here in your browser or in the desktop app. You choose when recording starts and stops.</p><div><button id="start" type="button">Start recording</button><button id="stop" type="button" disabled>Stop and use recording</button><button id="cancel" type="button" disabled>Cancel</button></div><p id="status" role="status">Ready to record. Device access requires your permission.</p></section>`,css:'section { padding: 1.5rem; } h2 { font-style: italic; font-weight: 400; } div { display: flex; flex-wrap: wrap; gap: .6rem; } button { border: 1px solid var(--border-tok); border-radius: 999px; padding: .7rem 1rem; background: var(--bg-elev-1); color: var(--fg); } button:disabled { opacity: .5; } p { color: var(--fg-muted); }',javascript:`
|
|
12
12
|
const start=document.getElementById('start');
|
|
13
13
|
const stop=document.getElementById('stop');
|
|
14
14
|
const cancel=document.getElementById('cancel');
|
|
@@ -185,6 +185,7 @@ export const FIRST_PARTY_SDK_IDENTITIES=Object.freeze(new Set([
|
|
|
185
185
|
"stillmade.release-visuals@1.0.0",
|
|
186
186
|
"stillmade.release-visuals@1.0.1",
|
|
187
187
|
"stillmade.release-visuals@1.0.2",
|
|
188
|
+
"stillmade.screen-recorder@1.0.0",
|
|
188
189
|
"stillmade.short-form-finish@1.0.0",
|
|
189
190
|
"stillmade.short-form-finish@1.0.1",
|
|
190
191
|
"stillmade.short-form-finish@1.0.2",
|
|
@@ -2,6 +2,7 @@ import shortFormFinishV100 from '../../blocks/short-form-finish/versions/1.0.0/p
|
|
|
2
2
|
import shortFormFinishV101 from '../../blocks/short-form-finish/versions/1.0.1/package.js';
|
|
3
3
|
import shortFormFinishV102 from '../../blocks/short-form-finish/versions/1.0.2/package.js';
|
|
4
4
|
import shortFormFinish from '../../blocks/short-form-finish/package.js';
|
|
5
|
+
import screenRecorder from '../../blocks/screen-recorder/package.js';
|
|
5
6
|
import occasionStoryV100 from '../../blocks/occasion-story/versions/1.0.0/package.js';
|
|
6
7
|
import releaseVisualsV100 from '../../blocks/release-visuals/versions/1.0.0/package.js';
|
|
7
8
|
import occasionStoryV101 from '../../blocks/occasion-story/versions/1.0.1/package.js';
|
|
@@ -189,5 +190,5 @@ import pickPhotos from '../../blocks/native/sm.pick-photos/versions/1.0.0/packag
|
|
|
189
190
|
// Exact, independently executable first-party releases. Host workspaces do not
|
|
190
191
|
// belong here. Changing implementation requires a new immutable version.
|
|
191
192
|
const freeze=value=>{if(value&&typeof value==='object'&&!Object.isFrozen(value)){Object.values(value).forEach(freeze);Object.freeze(value);}return value;};
|
|
192
|
-
export const FIRST_PARTY_SDK_PACKAGES = Object.freeze([freeze(productAdVariants),freeze(pickPhotos),freeze(photoNotes),freeze(youtubePublication),freeze(stockSearch),freeze(exportVideoV210),freeze(exportVideo),freeze(exportAudio),freeze(motionGraphics),freeze(audioScore),freeze(shortFormFinish),freeze(shortFormFinishV102),freeze(shortFormFinishV101),freeze(shortFormFinishV100),freeze(occasionStory),freeze(occasionStoryV101),freeze(occasionStoryV100),freeze(releaseVisuals),freeze(releaseVisualsV101),freeze(releaseVisualsV100),freeze(photoReelComposer),freeze(photoReelComposerV101),freeze(photoReelComposerV100),freeze(importMediaV202),freeze(importMediaV201),freeze(editorV2212),freeze(editorV2211),freeze(editorV2210),freeze(editorV229),freeze(editorV228),freeze(panelStripV241),freeze(panelStripV240),freeze(panelStripV237),freeze(panelStripV236),freeze(boardEditorV2210),freeze(boardEditorV229),freeze(animatedSceneV238),freeze(animatedSceneV237),freeze(pipelineV225),freeze(pipelineV224),freeze(blueprintV219),freeze(blueprintV218),freeze(videoAssetsV214),freeze(videoAssetsV213),freeze(chatV203),freeze(chatV202),freeze(chatV201),freeze(shotPlanV221),freeze(shotPlanV220),freeze(shotPlanV213),freeze(shotPlanV212),freeze(voiceoverV216),freeze(voiceoverV215),freeze(voiceoverV214),freeze(voiceoverV213),freeze(scriptV215),freeze(scriptV214),freeze(scriptV213),freeze(roughCutV202),freeze(roughCutV201),freeze(finalEditV202),freeze(finalEditV201),freeze(editAssistantV202),freeze(editAssistantV201),freeze(gradeV202),freeze(gradeV201),freeze(transitionV202),freeze(transitionV201),freeze(qualityAuditV102),freeze(qualityAuditV101),freeze(compareV202),freeze(compareV201),freeze(compare),freeze(grade),freeze(transition),freeze(exportTimeline),freeze(captions),freeze(importMedia),freeze(generateImageV210),freeze(generateImage),freeze(thumbnailV201),freeze(thumbnail),freeze(writeSummary),freeze(automationWhen),freeze(automationNewItems),freeze(automationAiDecide),freeze(automationContinueIf),freeze(connectApp),freeze(automationContactFields),freeze(automationAiWrite),freeze(automationMetaCreative),freeze(voiceover),freeze(voiceoverV210),freeze(voiceoverV211),freeze(voiceoverV212),freeze(script),freeze(scriptV210),freeze(scriptV211),freeze(scriptV212),freeze(generateVideoV201),freeze(generateVideo),freeze(chat),freeze(characterV201),freeze(character),freeze(locationV201),freeze(location),freeze(styleV201),freeze(style),freeze(researchV202),freeze(researchV201),freeze(research),freeze(imageEditorV201),freeze(imageEditor),freeze(describeMediaV201),freeze(describeMedia),freeze(videoAssets),freeze(videoAssetsV210),freeze(videoAssetsV211),freeze(videoAssetsV212),freeze(roughCut),freeze(finalEdit),freeze(editAssistant),freeze(transcribeV201),freeze(transcribe),freeze(blueprint),freeze(blueprintV210),freeze(blueprintV211),freeze(blueprintV212),freeze(blueprintV213),freeze(blueprintV214),freeze(blueprintV215),freeze(blueprintV216),freeze(blueprintV217),freeze(shotPlan),freeze(shotPlanV210),freeze(shotPlanV211),freeze(boardEditor),freeze(boardEditorV210),freeze(boardEditorV220),freeze(boardEditorV221),freeze(boardEditorV222),freeze(boardEditorV223),freeze(boardEditorV224),freeze(boardEditorV225),freeze(boardEditorV226),freeze(boardEditorV227),freeze(boardEditorV228),freeze(panelStripV200),freeze(panelStrip),freeze(panelStripV220),freeze(panelStripV230),freeze(panelStripV231),freeze(panelStripV232),freeze(panelStripV233),freeze(panelStripV234),freeze(panelStripV235),freeze(animatedSceneV200),freeze(animatedScene),freeze(animatedSceneV220),freeze(animatedSceneV230),freeze(animatedSceneV231),freeze(animatedSceneV232),freeze(animatedSceneV233),freeze(animatedSceneV234),freeze(animatedSceneV235),freeze(animatedSceneV236),freeze(editor),freeze(editorV210),freeze(editorV220),freeze(editorV221),freeze(editorV222),freeze(editorV223),freeze(editorV224),freeze(editorV225),freeze(editorV226),freeze(editorV227),freeze(pipelineV200),freeze(pipeline),freeze(pipelineV220),freeze(pipelineV221),freeze(pipelineV223),freeze(pipelineV222),freeze(shotPlanAssistant),freeze(animatedSceneAssistant),freeze(blueprintAssistant),freeze(whiteboardAssistant),freeze(qualityAudit)]);
|
|
193
|
+
export const FIRST_PARTY_SDK_PACKAGES = Object.freeze([freeze(productAdVariants),freeze(pickPhotos),freeze(photoNotes),freeze(youtubePublication),freeze(stockSearch),freeze(exportVideoV210),freeze(exportVideo),freeze(exportAudio),freeze(motionGraphics),freeze(audioScore),freeze(shortFormFinish),freeze(screenRecorder),freeze(shortFormFinishV102),freeze(shortFormFinishV101),freeze(shortFormFinishV100),freeze(occasionStory),freeze(occasionStoryV101),freeze(occasionStoryV100),freeze(releaseVisuals),freeze(releaseVisualsV101),freeze(releaseVisualsV100),freeze(photoReelComposer),freeze(photoReelComposerV101),freeze(photoReelComposerV100),freeze(importMediaV202),freeze(importMediaV201),freeze(editorV2212),freeze(editorV2211),freeze(editorV2210),freeze(editorV229),freeze(editorV228),freeze(panelStripV241),freeze(panelStripV240),freeze(panelStripV237),freeze(panelStripV236),freeze(boardEditorV2210),freeze(boardEditorV229),freeze(animatedSceneV238),freeze(animatedSceneV237),freeze(pipelineV225),freeze(pipelineV224),freeze(blueprintV219),freeze(blueprintV218),freeze(videoAssetsV214),freeze(videoAssetsV213),freeze(chatV203),freeze(chatV202),freeze(chatV201),freeze(shotPlanV221),freeze(shotPlanV220),freeze(shotPlanV213),freeze(shotPlanV212),freeze(voiceoverV216),freeze(voiceoverV215),freeze(voiceoverV214),freeze(voiceoverV213),freeze(scriptV215),freeze(scriptV214),freeze(scriptV213),freeze(roughCutV202),freeze(roughCutV201),freeze(finalEditV202),freeze(finalEditV201),freeze(editAssistantV202),freeze(editAssistantV201),freeze(gradeV202),freeze(gradeV201),freeze(transitionV202),freeze(transitionV201),freeze(qualityAuditV102),freeze(qualityAuditV101),freeze(compareV202),freeze(compareV201),freeze(compare),freeze(grade),freeze(transition),freeze(exportTimeline),freeze(captions),freeze(importMedia),freeze(generateImageV210),freeze(generateImage),freeze(thumbnailV201),freeze(thumbnail),freeze(writeSummary),freeze(automationWhen),freeze(automationNewItems),freeze(automationAiDecide),freeze(automationContinueIf),freeze(connectApp),freeze(automationContactFields),freeze(automationAiWrite),freeze(automationMetaCreative),freeze(voiceover),freeze(voiceoverV210),freeze(voiceoverV211),freeze(voiceoverV212),freeze(script),freeze(scriptV210),freeze(scriptV211),freeze(scriptV212),freeze(generateVideoV201),freeze(generateVideo),freeze(chat),freeze(characterV201),freeze(character),freeze(locationV201),freeze(location),freeze(styleV201),freeze(style),freeze(researchV202),freeze(researchV201),freeze(research),freeze(imageEditorV201),freeze(imageEditor),freeze(describeMediaV201),freeze(describeMedia),freeze(videoAssets),freeze(videoAssetsV210),freeze(videoAssetsV211),freeze(videoAssetsV212),freeze(roughCut),freeze(finalEdit),freeze(editAssistant),freeze(transcribeV201),freeze(transcribe),freeze(blueprint),freeze(blueprintV210),freeze(blueprintV211),freeze(blueprintV212),freeze(blueprintV213),freeze(blueprintV214),freeze(blueprintV215),freeze(blueprintV216),freeze(blueprintV217),freeze(shotPlan),freeze(shotPlanV210),freeze(shotPlanV211),freeze(boardEditor),freeze(boardEditorV210),freeze(boardEditorV220),freeze(boardEditorV221),freeze(boardEditorV222),freeze(boardEditorV223),freeze(boardEditorV224),freeze(boardEditorV225),freeze(boardEditorV226),freeze(boardEditorV227),freeze(boardEditorV228),freeze(panelStripV200),freeze(panelStrip),freeze(panelStripV220),freeze(panelStripV230),freeze(panelStripV231),freeze(panelStripV232),freeze(panelStripV233),freeze(panelStripV234),freeze(panelStripV235),freeze(animatedSceneV200),freeze(animatedScene),freeze(animatedSceneV220),freeze(animatedSceneV230),freeze(animatedSceneV231),freeze(animatedSceneV232),freeze(animatedSceneV233),freeze(animatedSceneV234),freeze(animatedSceneV235),freeze(animatedSceneV236),freeze(editor),freeze(editorV210),freeze(editorV220),freeze(editorV221),freeze(editorV222),freeze(editorV223),freeze(editorV224),freeze(editorV225),freeze(editorV226),freeze(editorV227),freeze(pipelineV200),freeze(pipeline),freeze(pipelineV220),freeze(pipelineV221),freeze(pipelineV223),freeze(pipelineV222),freeze(shotPlanAssistant),freeze(animatedSceneAssistant),freeze(blueprintAssistant),freeze(whiteboardAssistant),freeze(qualityAudit)]);
|
|
193
194
|
export const firstPartySdkPackage = manifest => FIRST_PARTY_SDK_PACKAGES.find(pkg => pkg.manifest.id === manifest?.id && pkg.manifest.version === manifest?.version);
|
|
@@ -40,7 +40,7 @@ export const VIEW_BRIDGE=Object.freeze([
|
|
|
40
40
|
{name:'onSharedWorkRefresh',group:'Connected work',signature:'onSharedWorkRefresh(callback: () => void): () => void',summary:'Called when shared work changes elsewhere; read it again.',where:saved},
|
|
41
41
|
{name:'previewSharedWorkMedia',group:'Connected work',signature:'previewSharedWorkMedia(contributionId: string): Promise<{url: string; kind: "image" | "video" | "audio"}>',summary:'A display copy of media attached to a shared work contribution.',where:saved},
|
|
42
42
|
{name:'releaseSharedWorkMedia',group:'Connected work',signature:'releaseSharedWorkMedia(url: string): void',summary:'Frees a URL previewSharedWorkMedia returned.',where:saved},
|
|
43
|
-
{name:'desktop',group:'Connected work',signature:'desktop(operation: string, args?: Record<string, unknown>): Promise<Record<string, unknown>>',summary:'Runs a declared desktop permission
|
|
43
|
+
{name:'desktop',group:'Connected work',signature:'desktop(operation: string, args?: Record<string, unknown>): Promise<Record<string, unknown>>',summary:'Runs a declared desktop permission after the person grants it. Recording (record.start, record.stop, record.cancel, record.status) and cutting a recording (record.cut) work in browsers and in StillMade Desktop; clipboard, media.pick, notifications, keep-awake and native tools need StillMade Desktop.',where:`${all} for recording; ${desktop} for the rest`},
|
|
44
44
|
]);
|
|
45
45
|
export const VIEW_BRIDGE_MEMBERS=Object.freeze(VIEW_BRIDGE.map(member=>member.name));
|
|
46
46
|
|