@cueframe/kernel 0.1.4 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_members/account-model/validators/contextFile.d.ts +3 -21
- package/dist/_members/account-model/validators/conversation.d.ts +12 -42
- package/dist/_members/account-model/validators/dashboardInsight.d.ts +3 -17
- package/dist/_members/account-model/validators/sessionToken.d.ts +10 -36
- package/dist/_members/account-model/validators/uploadToken.d.ts +11 -21
- package/dist/_members/account-model/validators/userSettings.d.ts +3 -13
- package/dist/_members/account-model/validators/workingComposition.d.ts +3 -19
- package/dist/_members/authoring/capabilities.d.ts +0 -9
- package/dist/_members/authoring/index.d.ts +1 -1
- package/dist/_members/authoring/models/defaultModels.d.ts +12 -0
- package/dist/_members/authoring/models/modelFactory.d.ts +1 -0
- package/dist/_members/authoring/motion/materializeMotionPresetOps.d.ts +1 -7
- package/dist/_members/authoring/types.d.ts +0 -1
- package/dist/_members/component-runtime/assetServer.d.ts +18 -0
- package/dist/_members/component-runtime/assetServer.d.ts.map +1 -0
- package/dist/_members/component-runtime/bake.d.ts +12 -0
- package/dist/_members/component-runtime/bake.d.ts.map +1 -0
- package/dist/_members/component-runtime/browserFirewall.d.ts +21 -0
- package/dist/_members/component-runtime/browserFirewall.d.ts.map +1 -0
- package/dist/_members/component-runtime/browserIdentity.d.ts +14 -0
- package/dist/_members/component-runtime/browserIdentity.d.ts.map +1 -0
- package/dist/_members/component-runtime/browserOptions.d.ts +8 -0
- package/dist/_members/component-runtime/browserOptions.d.ts.map +1 -0
- package/dist/_members/component-runtime/canonicalIdentity.d.ts +14 -0
- package/dist/_members/component-runtime/canonicalIdentity.d.ts.map +1 -0
- package/dist/_members/component-runtime/contracts.d.ts +443 -0
- package/dist/_members/component-runtime/contracts.d.ts.map +1 -0
- package/dist/_members/component-runtime/determinism.d.ts +18 -0
- package/dist/_members/component-runtime/determinism.d.ts.map +1 -0
- package/dist/_members/component-runtime/fixtures/webgpuTiledRefraction.d.ts +9 -0
- package/dist/_members/component-runtime/fixtures/webgpuTiledRefraction.d.ts.map +1 -0
- package/dist/_members/component-runtime/identity.d.ts +16 -0
- package/dist/_members/component-runtime/identity.d.ts.map +1 -0
- package/dist/_members/component-runtime/importPolicy.d.ts +3 -0
- package/dist/_members/component-runtime/importPolicy.d.ts.map +1 -0
- package/dist/_members/component-runtime/index.d.ts +11 -0
- package/dist/_members/component-runtime/index.d.ts.map +1 -0
- package/dist/_members/component-runtime/outputVerifier.d.ts +29 -0
- package/dist/_members/component-runtime/outputVerifier.d.ts.map +1 -0
- package/dist/_members/{render-harness/localRender.d.ts → component-runtime/render.d.ts} +22 -15
- package/dist/_members/component-runtime/render.d.ts.map +1 -0
- package/dist/_members/component-runtime/sourceWorkspace.d.ts +10 -0
- package/dist/_members/component-runtime/sourceWorkspace.d.ts.map +1 -0
- package/dist/_members/compose/index.d.ts +0 -5
- package/dist/_members/composition/graphics-plan/schemas.d.ts +299 -1309
- package/dist/_members/composition/primitive-catalog/index.d.ts +2 -2
- package/dist/_members/composition/primitive-catalog/projection.d.ts +0 -14
- package/dist/_members/composition/reframe/index.d.ts +56 -528
- package/dist/_members/composition/validators/brandKit.d.ts +247 -1208
- package/dist/_members/composition/validators/composePlan.d.ts +106 -818
- package/dist/_members/composition/validators/composition.d.ts +1338 -5856
- package/dist/_members/composition/validators/font.d.ts +35 -91
- package/dist/_members/composition/validators/project.d.ts +15 -46
- package/dist/_members/composition/validators/registry.d.ts +53 -135
- package/dist/_members/composition/validators/render.d.ts +803 -7273
- package/dist/_members/composition/validators/session.d.ts +38 -76
- package/dist/_members/composition/validators/webhook.d.ts +23 -50
- package/dist/_members/composition-ops/alphaLayers.d.ts +3 -2
- package/dist/_members/composition-ops/index.d.ts +409 -4309
- package/dist/_members/core/render/compositionAudioAndDepth.d.ts +6 -0
- package/dist/_members/core/render/compositionRender.d.ts +3 -4
- package/dist/_members/core/render/compositionValidation.d.ts +4 -0
- package/dist/_members/core/render/index.d.ts +2 -2
- package/dist/_members/core/render/types.d.ts +16 -8
- package/dist/_members/director/ai-sdk/messages.d.ts +67 -217
- package/dist/_members/director/domain/chat.d.ts +70 -293
- package/dist/_members/director/testing/contract.d.ts +11 -11
- package/dist/_members/errors/registry.d.ts +189 -3
- package/dist/_members/foundation/primitives/index.d.ts +1 -1
- package/dist/_members/mcp/adapter.d.ts +3 -0
- package/dist/_members/mcp/burnedNames.d.ts +0 -1
- package/dist/_members/mcp/core.d.ts +6 -3
- package/dist/_members/mcp/curation.d.ts +3 -38
- package/dist/_members/mcp/curationTypes.d.ts +34 -0
- package/dist/_members/mcp/generated/harness.d.ts +1 -1
- package/dist/_members/mcp/generated/operations.d.ts +10 -0
- package/dist/_members/mcp/main.d.ts +1 -0
- package/dist/_members/mcp/mediaContextFormat.d.ts +4 -0
- package/dist/_members/mcp/prompts.d.ts +1 -1
- package/dist/_members/mcp/query.d.ts +4 -0
- package/dist/_members/mcp/resources.d.ts +1 -1
- package/dist/_members/mcp/server.d.ts +1 -2
- package/dist/_members/mcp/wireSchema.d.ts +13 -0
- package/dist/_members/media-model/api.d.ts +114 -662
- package/dist/_members/media-model/generation.d.ts +141 -228
- package/dist/_members/plane/contract.d.ts +16 -19
- package/dist/_members/primitives/backgrounds/animated-bar-chart/config.d.ts +3 -27
- package/dist/_members/primitives/backgrounds/animated-line-chart/config.d.ts +2 -26
- package/dist/_members/primitives/backgrounds/dither-gradient-bg/config.d.ts +1 -17
- package/dist/_members/primitives/backgrounds/dynamic-grid/config.d.ts +6 -14
- package/dist/_members/primitives/backgrounds/ecosystem-constellation/config.d.ts +1 -11
- package/dist/_members/primitives/backgrounds/infinite-marquee/config.d.ts +1 -21
- package/dist/_members/primitives/backgrounds/mesh-gradient-bg/config.d.ts +2 -12
- package/dist/_members/primitives/backgrounds/perspective-marquee/config.d.ts +2 -26
- package/dist/_members/primitives/backgrounds/silk-flow-bg/config.d.ts +2 -22
- package/dist/_members/primitives/backgrounds/vector-field/config.d.ts +1 -17
- package/dist/_members/primitives/backgrounds/volumetric-rays/config.d.ts +1 -19
- package/dist/_members/primitives/effects/blur/config.d.ts +5 -14
- package/dist/_members/primitives/effects/color-grade/config.d.ts +10 -18
- package/dist/_members/primitives/effects/grain/config.d.ts +9 -12
- package/dist/_members/primitives/effects/parallax/config.d.ts +8 -12
- package/dist/_members/primitives/effects/particles/config.d.ts +9 -20
- package/dist/_members/primitives/effects/pulsing-indicator/config.d.ts +1 -13
- package/dist/_members/primitives/effects/spotlight-card/config.d.ts +1 -25
- package/dist/_members/primitives/effects/spring-pop-in/config.d.ts +1 -15
- package/dist/_members/primitives/effects/success-confetti/config.d.ts +2 -26
- package/dist/_members/primitives/effects/vignette/config.d.ts +5 -12
- package/dist/_members/primitives/hero-text/config.d.ts +9 -24
- package/dist/_members/primitives/layouts/chat-to-preview-layout/config.d.ts +1 -11
- package/dist/_members/primitives/layouts/infinite-bento-pan/config.d.ts +1 -9
- package/dist/_members/primitives/layouts/letterbox/config.d.ts +1 -9
- package/dist/_members/primitives/layouts/photo-grid/config.d.ts +2 -12
- package/dist/_members/primitives/layouts/picture-in-picture/config.d.ts +7 -12
- package/dist/_members/primitives/layouts/split-screen/config.d.ts +1 -7
- package/dist/_members/primitives/layouts/staggered-bento-grid/config.d.ts +3 -51
- package/dist/_members/primitives/lib/schema.d.ts +1 -1
- package/dist/_members/primitives/scenes/changelog-bite/config.d.ts +7 -24
- package/dist/_members/primitives/scenes/hero-device-assemble/config.d.ts +5 -14
- package/dist/_members/primitives/scenes/landing-code-showcase/config.d.ts +1 -7
- package/dist/_members/primitives/scenes/live-code-compilation/config.d.ts +1 -7
- package/dist/_members/primitives/scenes/pricing-tier-focus/config.d.ts +2 -12
- package/dist/_members/primitives/scenes/product-launch-trailer/config.d.ts +1 -19
- package/dist/_members/primitives/scenes/terminal-to-browser-deploy/config.d.ts +1 -11
- package/dist/_members/primitives/text/blur-reveal/config.d.ts +1 -17
- package/dist/_members/primitives/text/cinematic-title/config.d.ts +13 -73
- package/dist/_members/primitives/text/inline-highlight/config.d.ts +1 -21
- package/dist/_members/primitives/text/karaoke/config.d.ts +10 -93
- package/dist/_members/primitives/text/kinetic-type/config.d.ts +14 -49
- package/dist/_members/primitives/text/lower-third/config.d.ts +8 -70
- package/dist/_members/primitives/text/marker-highlight/config.d.ts +1 -23
- package/dist/_members/primitives/text/masked-slide-reveal/config.d.ts +1 -17
- package/dist/_members/primitives/text/matrix-decode/config.d.ts +1 -19
- package/dist/_members/primitives/text/quote-card/config.d.ts +1 -11
- package/dist/_members/primitives/text/rgb-glitch-text/config.d.ts +1 -23
- package/dist/_members/primitives/text/shimmer-sweep/config.d.ts +1 -17
- package/dist/_members/primitives/text/slot-machine-roll/config.d.ts +1 -17
- package/dist/_members/primitives/text/staggered-fade-up/config.d.ts +2 -24
- package/dist/_members/primitives/text/stat-counter/config.d.ts +6 -20
- package/dist/_members/primitives/text/strikethrough-replace/config.d.ts +1 -19
- package/dist/_members/primitives/text/text-effect/config.d.ts +10 -15
- package/dist/_members/primitives/text/text-fade-replace/config.d.ts +1 -17
- package/dist/_members/primitives/text/token-stream/config.d.ts +1 -11
- package/dist/_members/primitives/text/tracking-in/config.d.ts +1 -19
- package/dist/_members/primitives/text/typewriter/config.d.ts +1 -21
- package/dist/_members/primitives/transitions/chromatic-aberration-wipe/config.d.ts +5 -8
- package/dist/_members/primitives/transitions/code-diff-wipe/config.d.ts +1 -21
- package/dist/_members/primitives/transitions/directional-wipe/config.d.ts +7 -6
- package/dist/_members/primitives/transitions/frosted-glass-wipe/config.d.ts +1 -5
- package/dist/_members/primitives/transitions/glitch-cut/config.d.ts +1 -7
- package/dist/_members/primitives/transitions/grid-pixelate-wipe/config.d.ts +6 -12
- package/dist/_members/primitives/transitions/ink-wipe/config.d.ts +7 -8
- package/dist/_members/primitives/transitions/kinetic-type-mask/config.d.ts +1 -7
- package/dist/_members/primitives/transitions/light-leak/config.d.ts +1 -7
- package/dist/_members/primitives/transitions/luma-matte/config.d.ts +6 -6
- package/dist/_members/primitives/transitions/morph/config.d.ts +5 -6
- package/dist/_members/primitives/transitions/spatial-push/config.d.ts +7 -6
- package/dist/_members/primitives/transitions/swipe-transition-wipe/config.d.ts +5 -10
- package/dist/_members/primitives/transitions/zoom-through/config.d.ts +2 -30
- package/dist/_members/primitives/transitions/zoom-through-transition/config.d.ts +1 -13
- package/dist/_members/primitives/ui-blocks/ai-generate-overlay/config.d.ts +1 -29
- package/dist/_members/primitives/ui-blocks/ai-generation-canvas/config.d.ts +1 -11
- package/dist/_members/primitives/ui-blocks/badge-pop/config.d.ts +8 -16
- package/dist/_members/primitives/ui-blocks/before-after-slider/config.d.ts +1 -11
- package/dist/_members/primitives/ui-blocks/benchmark-bars/config.d.ts +3 -73
- package/dist/_members/primitives/ui-blocks/bounding-box-selector/config.d.ts +1 -15
- package/dist/_members/primitives/ui-blocks/browser-flow/config.d.ts +1 -7
- package/dist/_members/primitives/ui-blocks/brush-stroke-simulator/config.d.ts +1 -21
- package/dist/_members/primitives/ui-blocks/chat-exchange/config.d.ts +1 -15
- package/dist/_members/primitives/ui-blocks/code-accordion/config.d.ts +2 -26
- package/dist/_members/primitives/ui-blocks/context-meter/config.d.ts +1 -13
- package/dist/_members/primitives/ui-blocks/cursor-flow/config.d.ts +2 -66
- package/dist/_members/primitives/ui-blocks/dashboard-populate/config.d.ts +1 -9
- package/dist/_members/primitives/ui-blocks/data-flow-pipes/config.d.ts +3 -97
- package/dist/_members/primitives/ui-blocks/device-mockup-zoom/config.d.ts +5 -14
- package/dist/_members/primitives/ui-blocks/drag-and-drop-flow/config.d.ts +1 -13
- package/dist/_members/primitives/ui-blocks/eval-scorecard/config.d.ts +2 -36
- package/dist/_members/primitives/ui-blocks/glass-code-block/config.d.ts +1 -23
- package/dist/_members/primitives/ui-blocks/image-expand-to-fullscreen/config.d.ts +3 -113
- package/dist/_members/primitives/ui-blocks/metric-gauge/config.d.ts +2 -34
- package/dist/_members/primitives/ui-blocks/morphing-modal/config.d.ts +3 -113
- package/dist/_members/primitives/ui-blocks/pipeline-journey/config.d.ts +1 -9
- package/dist/_members/primitives/ui-blocks/progress-steps/config.d.ts +6 -37
- package/dist/_members/primitives/ui-blocks/reasoning-trace/config.d.ts +2 -12
- package/dist/_members/primitives/ui-blocks/simulated-cursor/config.d.ts +2 -54
- package/dist/_members/primitives/ui-blocks/terminal-simulator/config.d.ts +9 -48
- package/dist/_members/primitives/ui-blocks/toast-notification/config.d.ts +7 -20
- package/dist/_members/primitives/ui-blocks/tool-call-stack/config.d.ts +2 -42
- package/dist/_members/primitives/ui-blocks/tool-menu-slide-in/config.d.ts +1 -19
- package/dist/_members/primitives/ui-blocks/visual-docs-snippet/config.d.ts +3 -71
- package/dist/_members/primitives/ui-blocks/voice-waveform/config.d.ts +5 -14
- package/dist/_members/primitives/workspace.d.ts +1 -5
- package/dist/_members/render-harness/cardAssetAdmission.d.ts +3 -0
- package/dist/_members/render-harness/cardAssetAdmission.d.ts.map +1 -0
- package/dist/_members/render-harness/cardRender.d.ts.map +1 -1
- package/dist/_members/render-harness/index.d.ts +1 -5
- package/dist/_members/render-harness/index.d.ts.map +1 -1
- package/dist/_members/render-harness/materializeSources.d.ts.map +1 -1
- package/dist/_members/render-harness/remotion-runtime.d.ts +20 -0
- package/dist/_members/render-harness/renderInputAssets.d.ts +2 -1
- package/dist/_members/render-harness/renderInputAssets.d.ts.map +1 -1
- package/dist/_members/render-harness/resolveAssets.d.ts.map +1 -1
- package/dist/authoring/build-tools.js +8 -8
- package/dist/authoring/context.js +5 -5
- package/dist/authoring/models.js +3 -1
- package/dist/authoring/resource-routing.js +1 -1
- package/dist/authoring/resources.js +1 -1
- package/dist/authoring/tools.js +7 -7
- package/dist/authoring.js +15 -31
- package/dist/chunk-2PGLNTB7.js +132 -0
- package/dist/{chunk-R5BMJ2NX.js → chunk-4FOOBSEE.js} +33 -2
- package/dist/{chunk-YXEZ75MB.js → chunk-4JRUGT2Y.js} +43 -108
- package/dist/{chunk-FMODQD5P.js → chunk-4ZE564YF.js} +16 -9
- package/dist/chunk-5OTQ7M43.js +718 -0
- package/dist/{chunk-O7GNE4BQ.js → chunk-6ID2J64H.js} +4 -4
- package/dist/{chunk-RXCEPCAQ.js → chunk-6XI57FZZ.js} +280 -191
- package/dist/{chunk-2SNY75AR.js → chunk-7KEUL3FI.js} +4 -2
- package/dist/{chunk-WTT3GGCA.js → chunk-AD5HWBCE.js} +1 -1
- package/dist/{chunk-JY26PIRP.js → chunk-C5SEPOWD.js} +163 -171
- package/dist/chunk-CGHTMZNC.js +6 -0
- package/dist/chunk-DHKQ47Q6.js +57 -0
- package/dist/{chunk-3PM6VICZ.js → chunk-DQKSCHFC.js} +4 -4
- package/dist/{chunk-D6S3ZKIY.js → chunk-EEXCDFY5.js} +1 -1
- package/dist/{chunk-ZT7MHRQU.js → chunk-GCQ7Z7S7.js} +15 -5
- package/dist/{chunk-ZBRPF6GV.js → chunk-GEGRJKKO.js} +1 -1
- package/dist/{chunk-JRIPQ7DN.js → chunk-IBMJ33EL.js} +3 -3
- package/dist/{chunk-JTVFIN6H.js → chunk-IHFREGFA.js} +10 -4
- package/dist/chunk-IJ7PVJTK.js +114 -0
- package/dist/{chunk-6ABIXGLO.js → chunk-KKEY5MIW.js} +8 -8
- package/dist/chunk-KU376ELE.js +392 -0
- package/dist/{chunk-7TQCR7AB.js → chunk-LNBVTDFR.js} +1 -1
- package/dist/chunk-LQUWKBST.js +195 -0
- package/dist/chunk-M2TLRXEO.js +41 -0
- package/dist/{chunk-7V3F5HO4.js → chunk-NOEBAV2G.js} +58 -2
- package/dist/{chunk-RQ2G4DXI.js → chunk-QBKDEO7J.js} +1502 -1314
- package/dist/chunk-RFXR7ATW.js +244 -0
- package/dist/{chunk-MCBUX5XV.js → chunk-SLN5UKLT.js} +2 -2
- package/dist/{chunk-GH27OS5S.js → chunk-VCBLGZQQ.js} +19 -4
- package/dist/{chunk-TLVPDT4R.js → chunk-XHUYWVYK.js} +1 -1
- package/dist/{chunk-D2EGO543.js → chunk-XVBOSPZI.js} +15 -17
- package/dist/{chunk-YE3F4LNJ.js → chunk-Y3QGYASW.js} +18 -18
- package/dist/{chunk-LSP4HN5N.js → chunk-ZCAQHNPI.js} +1 -1
- package/dist/{chunk-PJ4R4N4Q.js → chunk-ZN6P3KOJ.js} +70 -93
- package/dist/chunk-ZZRBKGDA.js +109 -0
- package/dist/component-runtime/browserOptions.d.ts +1 -0
- package/dist/component-runtime/browserOptions.js +7 -0
- package/dist/component-runtime/contracts.d.ts +1 -0
- package/dist/component-runtime/contracts.js +49 -0
- package/dist/component-runtime/identity/browser.d.ts +1 -0
- package/dist/component-runtime/identity/browser.js +35 -0
- package/dist/component-runtime/identity.d.ts +1 -0
- package/dist/component-runtime/identity.js +21 -0
- package/dist/component-runtime/importPolicy.d.ts +1 -0
- package/dist/component-runtime/importPolicy.js +10 -0
- package/dist/component-runtime/render.d.ts +1 -0
- package/dist/component-runtime/render.js +34 -0
- package/dist/component-runtime.d.ts +1 -0
- package/dist/component-runtime.js +132 -0
- package/dist/compose.js +17 -31
- package/dist/composition/graphics-plan.js +1 -1
- package/dist/composition/ops.js +4 -4
- package/dist/composition/primitive-catalog.js +1 -3
- package/dist/composition/projection.js +2 -2
- package/dist/composition/timeline.js +2 -2
- package/dist/composition/validators.js +2 -2
- package/dist/composition-ops.js +23 -17
- package/dist/composition.js +15 -15
- package/dist/{context-XWNT6QZH.js → context-4GSDBFT3.js} +5 -5
- package/dist/core/render.js +8 -8
- package/dist/core/select.js +2 -2
- package/dist/core.js +6 -6
- package/dist/director/ai-sdk.js +3 -3
- package/dist/director/domain.js +2 -2
- package/dist/director.js +3 -3
- package/dist/errors.js +1 -1
- package/dist/mcp/adapter.js +22 -29
- package/dist/mcp/core.js +1 -1
- package/dist/mcp/curation.js +1 -1
- package/dist/mcp/executor.js +1 -1
- package/dist/mcp/server.js +4 -6
- package/dist/mcp/wire-schema.d.ts +1 -0
- package/dist/mcp/wire-schema.js +37 -0
- package/dist/mcp.js +6 -29
- package/dist/nle-export.js +16 -25
- package/dist/plane/conformance.js +1 -1
- package/dist/plane/contract.js +7 -0
- package/dist/plane.js +1 -1
- package/dist/primitives/backgrounds.js +2 -2
- package/dist/primitives/captions.js +3 -3
- package/dist/primitives/effects.js +2 -2
- package/dist/primitives/layouts.js +2 -2
- package/dist/primitives/lib/index.js +8 -8
- package/dist/primitives/lib/schema.js +1 -1
- package/dist/primitives/lib.js +8 -8
- package/dist/primitives/text.js +2 -2
- package/dist/primitives/ui-blocks.js +2 -2
- package/dist/primitives.js +18 -18
- package/dist/render-harness/cardAssetAdmission.d.ts +1 -0
- package/dist/render-harness/cardAssetAdmission.js +8 -0
- package/dist/render-harness/renderInputAssets.d.ts +1 -0
- package/dist/render-harness/renderInputAssets.js +17 -0
- package/dist/render-harness.js +44 -574
- package/package.json +71 -34
- package/dist/_members/authoring/transpileComponent.d.ts +0 -6
- package/dist/_members/authoring/transpileHelper.d.ts +0 -8
- package/dist/_members/compose/CompositionRenderer.d.ts +0 -6
- package/dist/_members/compose/sceneToRenderInput.d.ts +0 -25
- package/dist/_members/compose/schema.d.ts +0 -30
- package/dist/_members/compose/tokenResolver.d.ts +0 -17
- package/dist/_members/render-harness/browserOptions.d.ts +0 -11
- package/dist/_members/render-harness/browserOptions.d.ts.map +0 -1
- package/dist/_members/render-harness/contractRender.d.ts +0 -27
- package/dist/_members/render-harness/contractRender.d.ts.map +0 -1
- package/dist/_members/render-harness/localRender.d.ts.map +0 -1
- package/dist/_members/render-harness/sandboxGlobalSpecs.d.ts +0 -9
- package/dist/_members/render-harness/sandboxGlobalSpecs.d.ts.map +0 -1
- package/dist/authoring/transpileComponent.d.ts +0 -1
- package/dist/authoring/transpileComponent.js +0 -31
- package/dist/authoring/transpileHelper.d.ts +0 -1
- package/dist/authoring/transpileHelper.js +0 -9
- package/dist/chunk-MHOQTPOB.js +0 -124
- package/dist/chunk-QSDFTYKV.js +0 -85
- package/dist/chunk-RHVLQNYF.js +0 -20
- package/dist/chunk-V24L35GM.js +0 -61
- package/dist/compose/renderer.d.ts +0 -1
- package/dist/compose/renderer.js +0 -170
- package/dist/render-harness/sandboxGlobalSpecs.d.ts +0 -1
- package/dist/render-harness/sandboxGlobalSpecs.js +0 -13
- package/dist/{chunk-THJAY7QS.js → chunk-BKHGL4MB.js} +4 -4
- package/dist/{chunk-XATRRDVG.js → chunk-G5BFI32U.js} +3 -3
- package/dist/{chunk-23HFEKV7.js → chunk-QISFYLBB.js} +4 -4
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
import {
|
|
2
|
+
renderComponentAlpha
|
|
3
|
+
} from "./chunk-5OTQ7M43.js";
|
|
4
|
+
import {
|
|
5
|
+
findWorkspace
|
|
6
|
+
} from "./chunk-WB2VFDQZ.js";
|
|
7
|
+
import {
|
|
8
|
+
componentArtifactId,
|
|
9
|
+
componentBundleId,
|
|
10
|
+
componentRenderKey,
|
|
11
|
+
sha256Hex,
|
|
12
|
+
sourceVersionId
|
|
13
|
+
} from "./chunk-M2TLRXEO.js";
|
|
14
|
+
import {
|
|
15
|
+
assertComponentImportsAllowed
|
|
16
|
+
} from "./chunk-2PGLNTB7.js";
|
|
17
|
+
import {
|
|
18
|
+
ComponentBakeJobV2,
|
|
19
|
+
ComponentBakeRequestV2,
|
|
20
|
+
ComponentRenderReceiptV2,
|
|
21
|
+
ComponentRenderRequestV2,
|
|
22
|
+
ComponentRuntimeError,
|
|
23
|
+
ComponentSourceV2,
|
|
24
|
+
assertGraphicsReceiptMatches
|
|
25
|
+
} from "./chunk-LQUWKBST.js";
|
|
26
|
+
|
|
27
|
+
// ../execution/component-runtime/src/sourceWorkspace.ts
|
|
28
|
+
import { mkdirSync, writeFileSync } from "fs";
|
|
29
|
+
import { join } from "path";
|
|
30
|
+
function materializeComponentSource(workspaceRoot, input) {
|
|
31
|
+
const source = ComponentSourceV2.parse(input);
|
|
32
|
+
assertComponentImportsAllowed(source.tsxSource);
|
|
33
|
+
mkdirSync(workspaceRoot, { recursive: true });
|
|
34
|
+
writeFileSync(join(workspaceRoot, "cueframe.json"), '{"componentsDir":"cueframe/components"}\n', {
|
|
35
|
+
flag: "wx"
|
|
36
|
+
});
|
|
37
|
+
const dir = join(workspaceRoot, "cueframe", "components", source.componentId);
|
|
38
|
+
mkdirSync(dir, { recursive: true });
|
|
39
|
+
writeFileSync(join(dir, "index.tsx"), source.tsxSource, { flag: "wx" });
|
|
40
|
+
writeFileSync(join(dir, "component-source-v2.json"), `${JSON.stringify(source)}
|
|
41
|
+
`, { flag: "wx" });
|
|
42
|
+
const workspace = findWorkspace(workspaceRoot);
|
|
43
|
+
if (!workspace) throw new Error("Materialized component workspace could not be opened.");
|
|
44
|
+
return {
|
|
45
|
+
workspace,
|
|
46
|
+
source,
|
|
47
|
+
sourceVersionId: sourceVersionId(source),
|
|
48
|
+
componentDir: dir
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// ../execution/component-runtime/src/assetServer.ts
|
|
53
|
+
import { createHash, randomBytes } from "crypto";
|
|
54
|
+
import { createReadStream, realpathSync, statSync } from "fs";
|
|
55
|
+
import { createServer } from "http";
|
|
56
|
+
var sha256File = async (path) => await new Promise((resolve, reject) => {
|
|
57
|
+
const hash = createHash("sha256");
|
|
58
|
+
const stream = createReadStream(path);
|
|
59
|
+
stream.on("data", (chunk) => hash.update(chunk));
|
|
60
|
+
stream.once("error", reject);
|
|
61
|
+
stream.once("end", () => resolve(hash.digest("hex")));
|
|
62
|
+
});
|
|
63
|
+
function sendStatus(response, status) {
|
|
64
|
+
response.statusCode = status;
|
|
65
|
+
response.setHeader("Cache-Control", "no-store");
|
|
66
|
+
response.end();
|
|
67
|
+
}
|
|
68
|
+
function parseSingleRange(value, size) {
|
|
69
|
+
if (!value) return null;
|
|
70
|
+
const match = /^bytes=(\d*)-(\d*)$/.exec(value);
|
|
71
|
+
if (!match || match[1] === "" && match[2] === "") return "invalid";
|
|
72
|
+
let start;
|
|
73
|
+
let end;
|
|
74
|
+
if (match[1] === "") {
|
|
75
|
+
const suffix = Number(match[2]);
|
|
76
|
+
if (!Number.isSafeInteger(suffix) || suffix <= 0) return "invalid";
|
|
77
|
+
start = Math.max(0, size - suffix);
|
|
78
|
+
end = size - 1;
|
|
79
|
+
} else {
|
|
80
|
+
start = Number(match[1]);
|
|
81
|
+
end = match[2] === "" ? size - 1 : Number(match[2]);
|
|
82
|
+
}
|
|
83
|
+
if (!Number.isSafeInteger(start) || !Number.isSafeInteger(end) || start < 0 || start > end || start >= size) {
|
|
84
|
+
return "invalid";
|
|
85
|
+
}
|
|
86
|
+
return [start, Math.min(end, size - 1)];
|
|
87
|
+
}
|
|
88
|
+
async function startComponentAssetServer(args) {
|
|
89
|
+
const assetNames = Object.keys(args.assets).sort();
|
|
90
|
+
if (assetNames.length !== Object.keys(args.files).length || assetNames.some((name) => !Object.hasOwn(args.files, name))) {
|
|
91
|
+
throw new ComponentRuntimeError("component_asset_unavailable", "Component asset inputs and localized files must have identical keys.");
|
|
92
|
+
}
|
|
93
|
+
const sealed = await Promise.all(assetNames.map(async (name) => {
|
|
94
|
+
const path = realpathSync(args.files[name].path);
|
|
95
|
+
const stat = statSync(path);
|
|
96
|
+
if (!stat.isFile() || stat.size <= 0) {
|
|
97
|
+
throw new ComponentRuntimeError("component_asset_unavailable", `Component asset ${JSON.stringify(name)} is not a readable file.`);
|
|
98
|
+
}
|
|
99
|
+
return [name, { path, size: stat.size, binding: { ...args.assets[name], contentSha256: await sha256File(path) } }];
|
|
100
|
+
}));
|
|
101
|
+
const byName = new Map(sealed);
|
|
102
|
+
const token = randomBytes(32).toString("hex");
|
|
103
|
+
let expectedHost = null;
|
|
104
|
+
const server = createServer((request, response) => {
|
|
105
|
+
if (expectedHost === null || request.headers.host !== expectedHost) return sendStatus(response, 421);
|
|
106
|
+
response.setHeader("Access-Control-Allow-Origin", "*");
|
|
107
|
+
response.setHeader("Accept-Ranges", "bytes");
|
|
108
|
+
response.setHeader("X-Content-Type-Options", "nosniff");
|
|
109
|
+
if (request.method !== "GET" && request.method !== "HEAD") return sendStatus(response, 405);
|
|
110
|
+
const parsed = new URL(request.url ?? "/", "http://127.0.0.1");
|
|
111
|
+
const prefix = `/v2/${token}/`;
|
|
112
|
+
if (!parsed.pathname.startsWith(prefix) || parsed.search || parsed.hash) return sendStatus(response, 404);
|
|
113
|
+
let name;
|
|
114
|
+
try {
|
|
115
|
+
name = decodeURIComponent(parsed.pathname.slice(prefix.length));
|
|
116
|
+
} catch {
|
|
117
|
+
return sendStatus(response, 404);
|
|
118
|
+
}
|
|
119
|
+
if (!name || name.includes("/") || name.includes("\\")) return sendStatus(response, 404);
|
|
120
|
+
const row = byName.get(name);
|
|
121
|
+
if (!row) return sendStatus(response, 404);
|
|
122
|
+
const range = parseSingleRange(request.headers.range, row.size);
|
|
123
|
+
if (range === "invalid") {
|
|
124
|
+
response.setHeader("Content-Range", `bytes */${row.size}`);
|
|
125
|
+
return sendStatus(response, 416);
|
|
126
|
+
}
|
|
127
|
+
const [start, end] = range ?? [0, row.size - 1];
|
|
128
|
+
response.statusCode = range ? 206 : 200;
|
|
129
|
+
response.setHeader("Content-Type", row.binding.mimeType);
|
|
130
|
+
response.setHeader("Content-Length", String(end - start + 1));
|
|
131
|
+
if (range) response.setHeader("Content-Range", `bytes ${start}-${end}/${row.size}`);
|
|
132
|
+
if (request.method === "HEAD") return response.end();
|
|
133
|
+
const stream = createReadStream(row.path, { start, end });
|
|
134
|
+
stream.once("error", () => response.destroy());
|
|
135
|
+
stream.pipe(response);
|
|
136
|
+
});
|
|
137
|
+
await new Promise((resolve, reject) => {
|
|
138
|
+
server.once("error", reject);
|
|
139
|
+
server.listen(0, "127.0.0.1", () => resolve());
|
|
140
|
+
});
|
|
141
|
+
const address = server.address();
|
|
142
|
+
if (!address || typeof address === "string") {
|
|
143
|
+
server.close();
|
|
144
|
+
throw new ComponentRuntimeError("component_asset_unavailable", "Component asset server failed to bind a loopback port.");
|
|
145
|
+
}
|
|
146
|
+
expectedHost = `127.0.0.1:${address.port}`;
|
|
147
|
+
const origin = `http://127.0.0.1:${address.port}`;
|
|
148
|
+
const bindings = Object.fromEntries(sealed.map(([name, row]) => [name, row.binding]));
|
|
149
|
+
const runtimeAssets = Object.fromEntries(sealed.map(([name, row]) => [name, {
|
|
150
|
+
...row.binding,
|
|
151
|
+
handle: `${origin}/v2/${token}/${encodeURIComponent(name)}`
|
|
152
|
+
}]));
|
|
153
|
+
return {
|
|
154
|
+
origin,
|
|
155
|
+
bindings,
|
|
156
|
+
runtimeAssets,
|
|
157
|
+
close: async () => await new Promise((resolve, reject) => {
|
|
158
|
+
server.closeAllConnections?.();
|
|
159
|
+
server.close((error) => error ? reject(error) : resolve());
|
|
160
|
+
})
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// ../execution/component-runtime/src/outputVerifier.ts
|
|
165
|
+
import { execFileSync } from "child_process";
|
|
166
|
+
import { dirname, join as join2 } from "path";
|
|
167
|
+
import { existsSync, statSync as statSync2 } from "fs";
|
|
168
|
+
var OPAQUE_ALPHA_FRACTION = 0.98;
|
|
169
|
+
function parseAlphaOpaqueFractions(ffmpegOutput) {
|
|
170
|
+
const fractions = [];
|
|
171
|
+
for (const match of ffmpegOutput.matchAll(/lavfi\.signalstats\.YAVG=([\d.]+)/g)) {
|
|
172
|
+
const value = Number(match[1]);
|
|
173
|
+
if (Number.isFinite(value)) fractions.push(Math.min(1, Math.max(0, value / 255)));
|
|
174
|
+
}
|
|
175
|
+
return fractions;
|
|
176
|
+
}
|
|
177
|
+
function bakeOpacityContradictsPolicy(alphaPolicy, opaqueFractions) {
|
|
178
|
+
return alphaPolicy === "requires-transparency" && opaqueFractions.length > 0 && opaqueFractions.every((fraction) => fraction >= OPAQUE_ALPHA_FRACTION);
|
|
179
|
+
}
|
|
180
|
+
function rational(value) {
|
|
181
|
+
if (!value) return Number.NaN;
|
|
182
|
+
const [numerator, denominator = "1"] = value.split("/");
|
|
183
|
+
return Number(numerator) / Number(denominator);
|
|
184
|
+
}
|
|
185
|
+
function assertComponentOutputProbe(probe, expected) {
|
|
186
|
+
const stream = probe.streams?.[0];
|
|
187
|
+
const expectedCodec = expected.codec === "vp9" ? "vp9" : "prores";
|
|
188
|
+
const frames = Number(stream?.nb_read_frames);
|
|
189
|
+
const fps = rational(stream?.avg_frame_rate);
|
|
190
|
+
const duration = Number(probe.format?.duration);
|
|
191
|
+
const expectedDuration = expected.durationInFrames / expected.fps;
|
|
192
|
+
const hasAlpha = expected.codec === "vp9" ? stream?.tags?.alpha_mode === "1" : Boolean(stream?.pix_fmt?.startsWith("yuva"));
|
|
193
|
+
if (stream?.codec_name !== expectedCodec || stream.width !== expected.width || stream.height !== expected.height || frames !== expected.durationInFrames || !Number.isFinite(fps) || Math.abs(fps - expected.fps) > 1e-3 || !Number.isFinite(duration) || Math.abs(duration - expectedDuration) > Math.max(0.05, 1 / expected.fps) || !hasAlpha) {
|
|
194
|
+
throw new ComponentRuntimeError(
|
|
195
|
+
"component_output_invalid",
|
|
196
|
+
"Rendered component artifact failed codec, alpha, dimensions, frame-count, FPS, or duration verification."
|
|
197
|
+
);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
function verifyComponentOutput(options) {
|
|
201
|
+
const size = statSync2(options.path).size;
|
|
202
|
+
if (size <= 0 || size > (options.maxBytes ?? 1073741824)) {
|
|
203
|
+
throw new ComponentRuntimeError("component_output_invalid", "Rendered component artifact has an invalid size.");
|
|
204
|
+
}
|
|
205
|
+
const bundledProbe = join2(dirname(process.execPath), process.platform === "win32" ? "ffprobe.exe" : "ffprobe");
|
|
206
|
+
const ffprobeExecutable = options.ffprobeExecutable ?? process.env.COMPONENT_FFPROBE_EXECUTABLE ?? (existsSync(bundledProbe) ? bundledProbe : "ffprobe");
|
|
207
|
+
let probe;
|
|
208
|
+
try {
|
|
209
|
+
probe = JSON.parse(execFileSync(ffprobeExecutable, [
|
|
210
|
+
"-v",
|
|
211
|
+
"error",
|
|
212
|
+
"-count_frames",
|
|
213
|
+
"-select_streams",
|
|
214
|
+
"v:0",
|
|
215
|
+
"-show_entries",
|
|
216
|
+
"stream=codec_name,width,height,avg_frame_rate,nb_read_frames,pix_fmt:stream_tags=alpha_mode:format=duration",
|
|
217
|
+
"-of",
|
|
218
|
+
"json",
|
|
219
|
+
options.path
|
|
220
|
+
], { encoding: "utf8", timeout: 3e4, maxBuffer: 2e6 }));
|
|
221
|
+
} catch (error) {
|
|
222
|
+
throw new ComponentRuntimeError("component_output_invalid", "Rendered component artifact could not be probed.", { cause: error });
|
|
223
|
+
}
|
|
224
|
+
assertComponentOutputProbe(probe, options.expected);
|
|
225
|
+
if (options.expected.source.manifest.alphaPolicy === "requires-transparency") {
|
|
226
|
+
const bundledFfmpeg = join2(dirname(process.execPath), process.platform === "win32" ? "ffmpeg.exe" : "ffmpeg");
|
|
227
|
+
const ffmpegExecutable = options.ffmpegExecutable ?? process.env.COMPONENT_FFMPEG_EXECUTABLE ?? (existsSync(bundledFfmpeg) ? bundledFfmpeg : "ffmpeg");
|
|
228
|
+
const durationSec = Math.max(0.05, options.expected.durationInFrames / options.expected.fps);
|
|
229
|
+
let fractions;
|
|
230
|
+
try {
|
|
231
|
+
const output = execFileSync(ffmpegExecutable, [
|
|
232
|
+
"-hide_banner",
|
|
233
|
+
"-loglevel",
|
|
234
|
+
"error",
|
|
235
|
+
...options.expected.codec === "vp9" ? ["-c:v", "libvpx-vp9"] : [],
|
|
236
|
+
"-i",
|
|
237
|
+
options.path,
|
|
238
|
+
"-vf",
|
|
239
|
+
`format=yuva420p,alphaextract,fps=5/${durationSec},signalstats,metadata=print:file=-`,
|
|
240
|
+
"-an",
|
|
241
|
+
"-f",
|
|
242
|
+
"null",
|
|
243
|
+
"-"
|
|
244
|
+
], { encoding: "utf8", timeout: 3e4, maxBuffer: 2e6 });
|
|
245
|
+
fractions = parseAlphaOpaqueFractions(output);
|
|
246
|
+
} catch (error) {
|
|
247
|
+
throw new ComponentRuntimeError("component_output_invalid", "Rendered component alpha policy could not be verified.", { cause: error });
|
|
248
|
+
}
|
|
249
|
+
if (fractions.length === 0) {
|
|
250
|
+
throw new ComponentRuntimeError("component_output_invalid", "Rendered component alpha policy produced no samples.");
|
|
251
|
+
}
|
|
252
|
+
if (bakeOpacityContradictsPolicy(options.expected.source.manifest.alphaPolicy, fractions)) {
|
|
253
|
+
throw new ComponentRuntimeError("component_output_invalid", "Rendered component is opaque but its manifest requires transparency.");
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// ../execution/component-runtime/src/bake.ts
|
|
259
|
+
import { constants, copyFileSync, mkdirSync as mkdirSync2, readFileSync, statSync as statSync3 } from "fs";
|
|
260
|
+
import { dirname as dirname2 } from "path";
|
|
261
|
+
function assertAssetBindingsMatch(request) {
|
|
262
|
+
const declared = request.source.manifest.assets;
|
|
263
|
+
for (const [name, declaration] of Object.entries(declared)) {
|
|
264
|
+
const binding = request.assets[name];
|
|
265
|
+
if (!binding) {
|
|
266
|
+
if (declaration.required) {
|
|
267
|
+
throw new ComponentRuntimeError(
|
|
268
|
+
"component_asset_unavailable",
|
|
269
|
+
`Required component asset ${JSON.stringify(name)} is missing.`
|
|
270
|
+
);
|
|
271
|
+
}
|
|
272
|
+
continue;
|
|
273
|
+
}
|
|
274
|
+
if (binding.kind !== declaration.kind) {
|
|
275
|
+
throw new ComponentRuntimeError(
|
|
276
|
+
"component_asset_integrity_failed",
|
|
277
|
+
`Component asset ${JSON.stringify(name)} has kind ${binding.kind}; expected ${declaration.kind}.`
|
|
278
|
+
);
|
|
279
|
+
}
|
|
280
|
+
if (declaration.mimeTypes && !declaration.mimeTypes.includes(binding.mimeType)) {
|
|
281
|
+
throw new ComponentRuntimeError(
|
|
282
|
+
"component_asset_integrity_failed",
|
|
283
|
+
`Component asset ${JSON.stringify(name)} has an undeclared MIME type.`
|
|
284
|
+
);
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
for (const name of Object.keys(request.assets)) {
|
|
288
|
+
if (!Object.hasOwn(declared, name)) {
|
|
289
|
+
throw new ComponentRuntimeError(
|
|
290
|
+
"component_asset_undeclared",
|
|
291
|
+
`Component asset ${JSON.stringify(name)} was not declared by the source manifest.`
|
|
292
|
+
);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
async function bakeComponentAlphaV2(options) {
|
|
297
|
+
const job = ComponentBakeJobV2.parse(options.job);
|
|
298
|
+
const assetServer = await startComponentAssetServer({ assets: job.assets, files: job.assetFiles });
|
|
299
|
+
try {
|
|
300
|
+
const { assetFiles: _assetFiles, ...unsealedRequest } = job;
|
|
301
|
+
const request = ComponentBakeRequestV2.parse({
|
|
302
|
+
...unsealedRequest,
|
|
303
|
+
assets: assetServer.bindings
|
|
304
|
+
});
|
|
305
|
+
assertAssetBindingsMatch(request);
|
|
306
|
+
const materialized = materializeComponentSource(options.workspaceRoot, request.source);
|
|
307
|
+
const bundleId = componentBundleId({
|
|
308
|
+
sourceVersionId: materialized.sourceVersionId,
|
|
309
|
+
runtimeDigest: request.runtimeDigest,
|
|
310
|
+
dependencyLockDigest: request.dependencyLockDigest
|
|
311
|
+
});
|
|
312
|
+
const renderRequest = ComponentRenderRequestV2.parse({
|
|
313
|
+
version: 2,
|
|
314
|
+
bundleId,
|
|
315
|
+
params: request.params,
|
|
316
|
+
assets: request.assets,
|
|
317
|
+
width: request.width,
|
|
318
|
+
height: request.height,
|
|
319
|
+
fps: request.fps,
|
|
320
|
+
durationInFrames: request.durationInFrames,
|
|
321
|
+
alpha: true,
|
|
322
|
+
graphics: request.source.manifest.graphics,
|
|
323
|
+
seed: request.seed
|
|
324
|
+
});
|
|
325
|
+
const renderKey = componentRenderKey(renderRequest);
|
|
326
|
+
const rendered = await renderComponentAlpha({
|
|
327
|
+
ws: materialized.workspace,
|
|
328
|
+
id: request.source.componentId,
|
|
329
|
+
params: request.params,
|
|
330
|
+
assets: assetServer.runtimeAssets,
|
|
331
|
+
allowedAssetOrigins: /* @__PURE__ */ new Set([assetServer.origin]),
|
|
332
|
+
seed: request.seed,
|
|
333
|
+
graphics: request.source.manifest.graphics,
|
|
334
|
+
codec: request.codec,
|
|
335
|
+
width: request.width,
|
|
336
|
+
height: request.height,
|
|
337
|
+
fps: request.fps,
|
|
338
|
+
durationInFrames: request.durationInFrames,
|
|
339
|
+
renderEntryRoot: options.renderEntryRoot
|
|
340
|
+
});
|
|
341
|
+
verifyComponentOutput({
|
|
342
|
+
path: rendered.videoPath,
|
|
343
|
+
expected: request,
|
|
344
|
+
ffprobeExecutable: options.ffprobeExecutable,
|
|
345
|
+
ffmpegExecutable: options.ffmpegExecutable
|
|
346
|
+
});
|
|
347
|
+
mkdirSync2(dirname2(options.outputPath), { recursive: true });
|
|
348
|
+
copyFileSync(rendered.videoPath, options.outputPath, constants.COPYFILE_EXCL);
|
|
349
|
+
const output = readFileSync(options.outputPath);
|
|
350
|
+
const outputSha256 = sha256Hex(output);
|
|
351
|
+
const receiptWithoutArtifact = {
|
|
352
|
+
version: 2,
|
|
353
|
+
renderKey,
|
|
354
|
+
bundleId,
|
|
355
|
+
sourceVersionId: materialized.sourceVersionId,
|
|
356
|
+
runtimeDigest: request.runtimeDigest,
|
|
357
|
+
outputSha256,
|
|
358
|
+
outputBytes: statSync3(options.outputPath).size,
|
|
359
|
+
codec: request.codec,
|
|
360
|
+
width: request.width,
|
|
361
|
+
height: request.height,
|
|
362
|
+
fps: request.fps,
|
|
363
|
+
durationInFrames: request.durationInFrames,
|
|
364
|
+
alpha: true,
|
|
365
|
+
requestedGraphics: request.source.manifest.graphics,
|
|
366
|
+
actualGraphics: rendered.actualGraphics
|
|
367
|
+
};
|
|
368
|
+
const receipt = ComponentRenderReceiptV2.parse({
|
|
369
|
+
...receiptWithoutArtifact,
|
|
370
|
+
artifactId: componentArtifactId({ outputSha256, receipt: receiptWithoutArtifact })
|
|
371
|
+
});
|
|
372
|
+
assertGraphicsReceiptMatches(renderRequest, receipt);
|
|
373
|
+
return receipt;
|
|
374
|
+
} finally {
|
|
375
|
+
await assetServer.close();
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
function sourceIdentityForBake(request) {
|
|
379
|
+
return sourceVersionId(ComponentBakeRequestV2.parse(request).source);
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
export {
|
|
383
|
+
materializeComponentSource,
|
|
384
|
+
startComponentAssetServer,
|
|
385
|
+
parseAlphaOpaqueFractions,
|
|
386
|
+
bakeOpacityContradictsPolicy,
|
|
387
|
+
assertComponentOutputProbe,
|
|
388
|
+
verifyComponentOutput,
|
|
389
|
+
assertAssetBindingsMatch,
|
|
390
|
+
bakeComponentAlphaV2,
|
|
391
|
+
sourceIdentityForBake
|
|
392
|
+
};
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
// ../execution/component-runtime/src/contracts.ts
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
var COMPONENT_SOURCE_VERSION = 2;
|
|
4
|
+
var COMPONENT_BUNDLE_VERSION = 2;
|
|
5
|
+
var COMPONENT_RECEIPT_VERSION = 2;
|
|
6
|
+
var ComponentAssetKind = z.enum(["image", "video", "audio", "data"]);
|
|
7
|
+
var ComponentAssetDeclarationV2 = z.object({
|
|
8
|
+
kind: ComponentAssetKind,
|
|
9
|
+
required: z.boolean(),
|
|
10
|
+
mimeTypes: z.array(z.string().min(1)).min(1).optional()
|
|
11
|
+
}).strict();
|
|
12
|
+
var ComponentGraphicsRequirementV2 = z.object({
|
|
13
|
+
api: z.enum(["canvas2d", "webgpu"]),
|
|
14
|
+
required: z.literal(true),
|
|
15
|
+
accelerationPreference: z.enum(["hardware-preferred", "software-allowed"])
|
|
16
|
+
}).strict();
|
|
17
|
+
var ComponentManifestV2 = z.object({
|
|
18
|
+
version: z.literal(COMPONENT_SOURCE_VERSION),
|
|
19
|
+
assets: z.record(z.string().min(1), ComponentAssetDeclarationV2),
|
|
20
|
+
graphics: ComponentGraphicsRequirementV2,
|
|
21
|
+
alphaPolicy: z.enum(["requires-transparency", "allows-opaque"])
|
|
22
|
+
}).strict();
|
|
23
|
+
var CANVAS2D_COMPONENT_MANIFEST_V2 = Object.freeze({
|
|
24
|
+
version: COMPONENT_SOURCE_VERSION,
|
|
25
|
+
assets: Object.freeze({}),
|
|
26
|
+
graphics: Object.freeze({
|
|
27
|
+
api: "canvas2d",
|
|
28
|
+
required: true,
|
|
29
|
+
accelerationPreference: "software-allowed"
|
|
30
|
+
}),
|
|
31
|
+
alphaPolicy: "requires-transparency"
|
|
32
|
+
});
|
|
33
|
+
var ComponentSourceV2 = z.object({
|
|
34
|
+
version: z.literal(COMPONENT_SOURCE_VERSION),
|
|
35
|
+
componentId: z.string().min(1).max(128).regex(/^[a-z0-9][a-z0-9._-]*$/),
|
|
36
|
+
tsxSource: z.string().min(1),
|
|
37
|
+
manifest: ComponentManifestV2
|
|
38
|
+
}).strict();
|
|
39
|
+
var ComponentAssetBindingV2 = z.object({
|
|
40
|
+
handle: z.string().min(1).max(256),
|
|
41
|
+
kind: ComponentAssetKind,
|
|
42
|
+
mimeType: z.string().min(1),
|
|
43
|
+
contentSha256: z.string().regex(/^[a-f0-9]{64}$/),
|
|
44
|
+
width: z.number().int().positive().optional(),
|
|
45
|
+
height: z.number().int().positive().optional(),
|
|
46
|
+
durationSec: z.number().positive().optional()
|
|
47
|
+
}).strict();
|
|
48
|
+
var ComponentAssetInputV2 = z.object({
|
|
49
|
+
handle: z.string().min(1).max(256),
|
|
50
|
+
kind: ComponentAssetKind,
|
|
51
|
+
mimeType: z.string().min(1),
|
|
52
|
+
width: z.number().int().positive().optional(),
|
|
53
|
+
height: z.number().int().positive().optional(),
|
|
54
|
+
durationSec: z.number().positive().optional()
|
|
55
|
+
}).strict();
|
|
56
|
+
var ComponentAssetFileV2 = z.object({
|
|
57
|
+
path: z.string().min(1)
|
|
58
|
+
}).strict();
|
|
59
|
+
var ComponentBundleV2 = z.object({
|
|
60
|
+
version: z.literal(COMPONENT_BUNDLE_VERSION),
|
|
61
|
+
bundleId: z.string().regex(/^[a-f0-9]{64}$/),
|
|
62
|
+
sourceVersionId: z.string().regex(/^[a-f0-9]{64}$/),
|
|
63
|
+
runtimeDigest: z.string().min(1),
|
|
64
|
+
dependencyLockDigest: z.string().regex(/^[a-f0-9]{64}$/),
|
|
65
|
+
entrypoint: z.string().min(1),
|
|
66
|
+
manifest: ComponentManifestV2
|
|
67
|
+
}).strict();
|
|
68
|
+
var ComponentRenderRequestV2 = z.object({
|
|
69
|
+
version: z.literal(COMPONENT_RECEIPT_VERSION),
|
|
70
|
+
bundleId: z.string().regex(/^[a-f0-9]{64}$/),
|
|
71
|
+
params: z.record(z.string(), z.unknown()),
|
|
72
|
+
assets: z.record(z.string().min(1), ComponentAssetBindingV2),
|
|
73
|
+
width: z.number().int().positive(),
|
|
74
|
+
height: z.number().int().positive(),
|
|
75
|
+
fps: z.number().positive(),
|
|
76
|
+
durationInFrames: z.number().int().positive(),
|
|
77
|
+
alpha: z.boolean(),
|
|
78
|
+
graphics: ComponentGraphicsRequirementV2,
|
|
79
|
+
seed: z.string().min(1)
|
|
80
|
+
}).strict();
|
|
81
|
+
var ComponentBakeRequestV2 = z.object({
|
|
82
|
+
version: z.literal(COMPONENT_RECEIPT_VERSION),
|
|
83
|
+
source: ComponentSourceV2,
|
|
84
|
+
params: z.record(z.string(), z.unknown()),
|
|
85
|
+
assets: z.record(z.string().min(1), ComponentAssetBindingV2),
|
|
86
|
+
width: z.number().int().positive(),
|
|
87
|
+
height: z.number().int().positive(),
|
|
88
|
+
fps: z.number().positive(),
|
|
89
|
+
durationInFrames: z.number().int().positive(),
|
|
90
|
+
codec: z.enum(["vp9", "prores"]),
|
|
91
|
+
runtimeDigest: z.string().min(1),
|
|
92
|
+
dependencyLockDigest: z.string().regex(/^[a-f0-9]{64}$/),
|
|
93
|
+
seed: z.string().min(1)
|
|
94
|
+
}).strict();
|
|
95
|
+
var ComponentBakeJobV2 = z.object({
|
|
96
|
+
version: z.literal(COMPONENT_RECEIPT_VERSION),
|
|
97
|
+
source: ComponentSourceV2,
|
|
98
|
+
params: z.record(z.string(), z.unknown()),
|
|
99
|
+
assets: z.record(z.string().min(1), ComponentAssetInputV2),
|
|
100
|
+
assetFiles: z.record(z.string().min(1), ComponentAssetFileV2),
|
|
101
|
+
width: z.number().int().positive(),
|
|
102
|
+
height: z.number().int().positive(),
|
|
103
|
+
fps: z.number().positive(),
|
|
104
|
+
durationInFrames: z.number().int().positive(),
|
|
105
|
+
codec: z.enum(["vp9", "prores"]),
|
|
106
|
+
runtimeDigest: z.string().min(1),
|
|
107
|
+
dependencyLockDigest: z.string().regex(/^[a-f0-9]{64}$/),
|
|
108
|
+
seed: z.string().min(1)
|
|
109
|
+
}).strict();
|
|
110
|
+
var ComponentGraphicsActualV2 = z.object({
|
|
111
|
+
api: z.enum(["canvas2d", "webgpu"]),
|
|
112
|
+
acceleration: z.enum(["hardware", "software"]),
|
|
113
|
+
adapterName: z.string().min(1).optional(),
|
|
114
|
+
deviceLost: z.literal(false)
|
|
115
|
+
}).strict();
|
|
116
|
+
var ComponentRenderReceiptV2 = z.object({
|
|
117
|
+
version: z.literal(COMPONENT_RECEIPT_VERSION),
|
|
118
|
+
artifactId: z.string().regex(/^[a-f0-9]{64}$/),
|
|
119
|
+
renderKey: z.string().regex(/^[a-f0-9]{64}$/),
|
|
120
|
+
bundleId: z.string().regex(/^[a-f0-9]{64}$/),
|
|
121
|
+
sourceVersionId: z.string().regex(/^[a-f0-9]{64}$/),
|
|
122
|
+
runtimeDigest: z.string().min(1),
|
|
123
|
+
outputSha256: z.string().regex(/^[a-f0-9]{64}$/),
|
|
124
|
+
outputBytes: z.number().int().positive(),
|
|
125
|
+
codec: z.enum(["png", "vp9", "prores"]),
|
|
126
|
+
width: z.number().int().positive(),
|
|
127
|
+
height: z.number().int().positive(),
|
|
128
|
+
fps: z.number().positive(),
|
|
129
|
+
durationInFrames: z.number().int().positive(),
|
|
130
|
+
alpha: z.boolean(),
|
|
131
|
+
requestedGraphics: ComponentGraphicsRequirementV2,
|
|
132
|
+
actualGraphics: ComponentGraphicsActualV2
|
|
133
|
+
}).strict();
|
|
134
|
+
var COMPONENT_RUNTIME_ERROR_CODES = [
|
|
135
|
+
"invalid_component_source",
|
|
136
|
+
"unsupported_runtime_version",
|
|
137
|
+
"component_does_not_compile",
|
|
138
|
+
"component_runtime_error",
|
|
139
|
+
"component_deadline_exceeded",
|
|
140
|
+
"component_resource_exhausted",
|
|
141
|
+
"component_asset_undeclared",
|
|
142
|
+
"component_asset_unavailable",
|
|
143
|
+
"component_asset_integrity_failed",
|
|
144
|
+
"component_network_denied",
|
|
145
|
+
"component_import_denied",
|
|
146
|
+
"component_graphics_unavailable",
|
|
147
|
+
"component_graphics_mismatch",
|
|
148
|
+
"component_device_lost",
|
|
149
|
+
"component_output_invalid",
|
|
150
|
+
"component_conflict"
|
|
151
|
+
];
|
|
152
|
+
var ComponentRuntimeErrorCode = z.enum(COMPONENT_RUNTIME_ERROR_CODES);
|
|
153
|
+
var ComponentRuntimeError = class extends Error {
|
|
154
|
+
code;
|
|
155
|
+
retryable;
|
|
156
|
+
constructor(code, message, options) {
|
|
157
|
+
super(message, options?.cause === void 0 ? void 0 : { cause: options.cause });
|
|
158
|
+
this.name = "ComponentRuntimeError";
|
|
159
|
+
this.code = code;
|
|
160
|
+
this.retryable = options?.retryable ?? false;
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
function assertGraphicsReceiptMatches(request, receipt) {
|
|
164
|
+
if (receipt.requestedGraphics.api !== request.graphics.api || receipt.requestedGraphics.required !== request.graphics.required || receipt.requestedGraphics.accelerationPreference !== request.graphics.accelerationPreference) {
|
|
165
|
+
throw new ComponentRuntimeError("component_graphics_mismatch", "Graphics receipt does not match the render request.");
|
|
166
|
+
}
|
|
167
|
+
if (receipt.actualGraphics.api !== request.graphics.api || receipt.actualGraphics.deviceLost) {
|
|
168
|
+
throw new ComponentRuntimeError("component_graphics_mismatch", "Rendered graphics backend does not satisfy the component requirement.");
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export {
|
|
173
|
+
COMPONENT_SOURCE_VERSION,
|
|
174
|
+
COMPONENT_BUNDLE_VERSION,
|
|
175
|
+
COMPONENT_RECEIPT_VERSION,
|
|
176
|
+
ComponentAssetKind,
|
|
177
|
+
ComponentAssetDeclarationV2,
|
|
178
|
+
ComponentGraphicsRequirementV2,
|
|
179
|
+
ComponentManifestV2,
|
|
180
|
+
CANVAS2D_COMPONENT_MANIFEST_V2,
|
|
181
|
+
ComponentSourceV2,
|
|
182
|
+
ComponentAssetBindingV2,
|
|
183
|
+
ComponentAssetInputV2,
|
|
184
|
+
ComponentAssetFileV2,
|
|
185
|
+
ComponentBundleV2,
|
|
186
|
+
ComponentRenderRequestV2,
|
|
187
|
+
ComponentBakeRequestV2,
|
|
188
|
+
ComponentBakeJobV2,
|
|
189
|
+
ComponentGraphicsActualV2,
|
|
190
|
+
ComponentRenderReceiptV2,
|
|
191
|
+
COMPONENT_RUNTIME_ERROR_CODES,
|
|
192
|
+
ComponentRuntimeErrorCode,
|
|
193
|
+
ComponentRuntimeError,
|
|
194
|
+
assertGraphicsReceiptMatches
|
|
195
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import {
|
|
2
|
+
componentArtifactIdentity,
|
|
3
|
+
componentBundleIdentity,
|
|
4
|
+
componentRenderIdentity,
|
|
5
|
+
sourceVersionIdentity
|
|
6
|
+
} from "./chunk-DHKQ47Q6.js";
|
|
7
|
+
|
|
8
|
+
// ../execution/component-runtime/src/identity.ts
|
|
9
|
+
import { createHash } from "crypto";
|
|
10
|
+
function sha256Hex(value) {
|
|
11
|
+
return createHash("sha256").update(value).digest("hex");
|
|
12
|
+
}
|
|
13
|
+
function sourceVersionId(source) {
|
|
14
|
+
return sha256Hex(sourceVersionIdentity(source));
|
|
15
|
+
}
|
|
16
|
+
function componentBundleId(input) {
|
|
17
|
+
return sha256Hex(componentBundleIdentity(input));
|
|
18
|
+
}
|
|
19
|
+
function componentRenderKey(request) {
|
|
20
|
+
return sha256Hex(componentRenderIdentity(request));
|
|
21
|
+
}
|
|
22
|
+
function componentArtifactId(input) {
|
|
23
|
+
return sha256Hex(componentArtifactIdentity(input));
|
|
24
|
+
}
|
|
25
|
+
function bundleIdentityFields(bundle) {
|
|
26
|
+
return {
|
|
27
|
+
bundleId: bundle.bundleId,
|
|
28
|
+
sourceVersionId: bundle.sourceVersionId,
|
|
29
|
+
runtimeDigest: bundle.runtimeDigest,
|
|
30
|
+
dependencyLockDigest: bundle.dependencyLockDigest
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export {
|
|
35
|
+
sha256Hex,
|
|
36
|
+
sourceVersionId,
|
|
37
|
+
componentBundleId,
|
|
38
|
+
componentRenderKey,
|
|
39
|
+
componentArtifactId,
|
|
40
|
+
bundleIdentityFields
|
|
41
|
+
};
|