@cueframe/kernel 0.1.4 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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-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-HHFDHJ3I.js +392 -0
- 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-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-SIAXP3ZO.js +131 -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 +69 -36
- 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,57 @@
|
|
|
1
|
+
// ../execution/component-runtime/src/canonicalIdentity.ts
|
|
2
|
+
function normalizedString(value) {
|
|
3
|
+
return value.replace(/\r\n?/g, "\n").normalize("NFC");
|
|
4
|
+
}
|
|
5
|
+
function canonicalValue(value, seen) {
|
|
6
|
+
if (value === null || typeof value === "boolean") return value;
|
|
7
|
+
if (typeof value === "string") return normalizedString(value);
|
|
8
|
+
if (typeof value === "number") {
|
|
9
|
+
if (!Number.isFinite(value)) throw new TypeError("Canonical JSON does not support non-finite numbers.");
|
|
10
|
+
return Object.is(value, -0) ? 0 : value;
|
|
11
|
+
}
|
|
12
|
+
if (typeof value !== "object") {
|
|
13
|
+
throw new TypeError(`Canonical JSON does not support ${typeof value} values.`);
|
|
14
|
+
}
|
|
15
|
+
if (seen.has(value)) throw new TypeError("Canonical JSON does not support cyclic values.");
|
|
16
|
+
seen.add(value);
|
|
17
|
+
try {
|
|
18
|
+
if (Array.isArray(value)) return value.map((item) => canonicalValue(item, seen));
|
|
19
|
+
const prototype = Object.getPrototypeOf(value);
|
|
20
|
+
if (prototype !== Object.prototype && prototype !== null) {
|
|
21
|
+
throw new TypeError("Canonical JSON only supports plain objects.");
|
|
22
|
+
}
|
|
23
|
+
const record = value;
|
|
24
|
+
const result = {};
|
|
25
|
+
for (const key of Object.keys(record).sort()) {
|
|
26
|
+
const item = record[key];
|
|
27
|
+
if (item === void 0) throw new TypeError("Canonical JSON does not support undefined values.");
|
|
28
|
+
result[normalizedString(key)] = canonicalValue(item, seen);
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
} finally {
|
|
32
|
+
seen.delete(value);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function canonicalJson(value) {
|
|
36
|
+
return JSON.stringify(canonicalValue(value, /* @__PURE__ */ new Set()));
|
|
37
|
+
}
|
|
38
|
+
function sourceVersionIdentity(source) {
|
|
39
|
+
return canonicalJson(source);
|
|
40
|
+
}
|
|
41
|
+
function componentBundleIdentity(input) {
|
|
42
|
+
return canonicalJson({ domain: "cueframe.component.bundle.v2", ...input });
|
|
43
|
+
}
|
|
44
|
+
function componentRenderIdentity(request) {
|
|
45
|
+
return canonicalJson({ domain: "cueframe.component.render.v2", request });
|
|
46
|
+
}
|
|
47
|
+
function componentArtifactIdentity(input) {
|
|
48
|
+
return canonicalJson({ domain: "cueframe.component.artifact.v2", ...input });
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export {
|
|
52
|
+
canonicalJson,
|
|
53
|
+
sourceVersionIdentity,
|
|
54
|
+
componentBundleIdentity,
|
|
55
|
+
componentRenderIdentity,
|
|
56
|
+
componentArtifactIdentity
|
|
57
|
+
};
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FitText
|
|
3
|
+
} from "./chunk-XHGZ2E77.js";
|
|
1
4
|
import {
|
|
2
5
|
ACCENT,
|
|
3
6
|
BG,
|
|
@@ -19,9 +22,6 @@ import {
|
|
|
19
22
|
TEXT_MUTED,
|
|
20
23
|
VIOLET
|
|
21
24
|
} from "./chunk-CX2IIQ4R.js";
|
|
22
|
-
import {
|
|
23
|
-
FitText
|
|
24
|
-
} from "./chunk-XHGZ2E77.js";
|
|
25
25
|
|
|
26
26
|
// ../execution/primitives/src/layouts/chat-to-preview-layout/index.tsx
|
|
27
27
|
import { Easing, interpolate, useCurrentFrame, useVideoConfig } from "remotion";
|
|
@@ -1187,7 +1187,7 @@ var config3 = {
|
|
|
1187
1187
|
// ../execution/primitives/src/layouts/photo-grid/config.ts
|
|
1188
1188
|
import { z as z4 } from "zod";
|
|
1189
1189
|
var paramsSchema4 = z4.object({
|
|
1190
|
-
images: z4.array(z4.string().url()).min(1).describe("Array of image URLs to display."),
|
|
1190
|
+
images: z4.array(z4.string().url().meta({ cueframeAsset: true })).min(1).describe("Array of image URLs to display."),
|
|
1191
1191
|
columns: z4.number().int().min(1).max(6).default(2).describe("Grid columns."),
|
|
1192
1192
|
gap: z4.number().min(0).max(40).default(8).describe("Gap between cells in pixels."),
|
|
1193
1193
|
stagger: z4.number().min(0).max(2).default(0.15).describe("Seconds between each cell's reveal. 0.1\u20130.25 reads natural.")
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
// ../authoring/src/models/defaultModels.ts
|
|
2
|
+
var DEFAULT_MODEL_IDS = {
|
|
3
|
+
anthropic: "claude-opus-5",
|
|
4
|
+
openai: "gpt-4.1",
|
|
5
|
+
ollama: "llama3.1",
|
|
6
|
+
/** Cheaper model used for fast-mode / low-effort turns. */
|
|
7
|
+
fast: "claude-haiku-4-5"
|
|
8
|
+
};
|
|
9
|
+
|
|
1
10
|
// ../authoring/src/models/modelFactory.ts
|
|
2
11
|
import { createAnthropic } from "@ai-sdk/anthropic";
|
|
3
12
|
import { createOpenAI } from "@ai-sdk/openai";
|
|
@@ -56,19 +65,19 @@ function buildModel(settings, langfuse) {
|
|
|
56
65
|
apiKey: settings.apiKey,
|
|
57
66
|
...settings.baseUrl ? { baseURL: settings.baseUrl } : {}
|
|
58
67
|
});
|
|
59
|
-
const id = settings.modelId ||
|
|
68
|
+
const id = settings.modelId || DEFAULT_MODEL_IDS.anthropic;
|
|
60
69
|
return { model: anthropic(id), providerName: "anthropic", modelId: id };
|
|
61
70
|
}
|
|
62
71
|
case "openai": {
|
|
63
72
|
if (!settings.apiKey) throw new Error("OpenAI API key not configured.");
|
|
64
73
|
const openai = createOpenAI({ apiKey: settings.apiKey });
|
|
65
|
-
const id = settings.modelId ||
|
|
74
|
+
const id = settings.modelId || DEFAULT_MODEL_IDS.openai;
|
|
66
75
|
return { model: openai(id), providerName: "openai", modelId: id };
|
|
67
76
|
}
|
|
68
77
|
case "ollama": {
|
|
69
78
|
const baseUrl = settings.baseUrl || "http://localhost:11434/v1";
|
|
70
79
|
const openai = createOpenAI({ apiKey: "ollama", baseURL: baseUrl });
|
|
71
|
-
const id = settings.modelId ||
|
|
80
|
+
const id = settings.modelId || DEFAULT_MODEL_IDS.ollama;
|
|
72
81
|
return { model: openai(id), providerName: "ollama", modelId: id };
|
|
73
82
|
}
|
|
74
83
|
case "gateway": {
|
|
@@ -79,7 +88,7 @@ function buildModel(settings, langfuse) {
|
|
|
79
88
|
baseURL: settings.gatewayUrl + "/anthropic/v1",
|
|
80
89
|
fetch: settings.requestTimeoutMs ? withRequestTimeout(baseFetch, settings.requestTimeoutMs) : langfuse ? baseFetch : void 0
|
|
81
90
|
});
|
|
82
|
-
const id = settings.modelId ||
|
|
91
|
+
const id = settings.modelId || DEFAULT_MODEL_IDS.anthropic;
|
|
83
92
|
return { model: anthropic(id), providerName: "gateway", modelId: id };
|
|
84
93
|
}
|
|
85
94
|
default:
|
|
@@ -90,13 +99,14 @@ function buildFastModel(settings, langfuse) {
|
|
|
90
99
|
return buildModel(
|
|
91
100
|
{
|
|
92
101
|
...settings,
|
|
93
|
-
modelId: settings.fastModelId ??
|
|
102
|
+
modelId: settings.fastModelId ?? DEFAULT_MODEL_IDS.fast
|
|
94
103
|
},
|
|
95
104
|
langfuse
|
|
96
105
|
);
|
|
97
106
|
}
|
|
98
107
|
|
|
99
108
|
export {
|
|
109
|
+
DEFAULT_MODEL_IDS,
|
|
100
110
|
withRequestTimeout,
|
|
101
111
|
makeLangfuseFetch,
|
|
102
112
|
buildModel,
|
|
@@ -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-SIAXP3ZO.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
|
+
};
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Composition
|
|
3
|
+
} from "./chunk-7KEUL3FI.js";
|
|
1
4
|
import {
|
|
2
5
|
expandToLinkGroup
|
|
3
6
|
} from "./chunk-KYRDKK2D.js";
|
|
4
|
-
import {
|
|
5
|
-
Composition
|
|
6
|
-
} from "./chunk-2SNY75AR.js";
|
|
7
7
|
|
|
8
8
|
// ../composition/src/ops/compositionOps.shared.ts
|
|
9
9
|
function findOrCreateTrackByKind(composition, kind) {
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
Format,
|
|
5
5
|
GraphicRole,
|
|
6
6
|
OpaqueId
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-7KEUL3FI.js";
|
|
8
8
|
|
|
9
9
|
// ../composition/src/validators/composePlan.ts
|
|
10
10
|
import { z } from "zod";
|
|
@@ -92,17 +92,23 @@ var AudioPaletteRef = z2.string().min(1);
|
|
|
92
92
|
var FontRef = z2.union([
|
|
93
93
|
z2.object({
|
|
94
94
|
kind: z2.literal("system"),
|
|
95
|
-
family: z2.string().min(1)
|
|
95
|
+
family: z2.string().min(1),
|
|
96
|
+
weight: z2.number().int().min(1).max(1e3).optional(),
|
|
97
|
+
style: z2.enum(["normal", "italic"]).optional()
|
|
96
98
|
}),
|
|
97
99
|
z2.object({
|
|
98
100
|
kind: z2.literal("web"),
|
|
99
101
|
family: z2.string().min(1),
|
|
100
|
-
url: z2.string().url().optional()
|
|
102
|
+
url: z2.string().url().optional(),
|
|
103
|
+
weight: z2.number().int().min(1).max(1e3).optional(),
|
|
104
|
+
style: z2.enum(["normal", "italic"]).optional()
|
|
101
105
|
}),
|
|
102
106
|
z2.object({
|
|
103
107
|
kind: z2.literal("uploaded"),
|
|
104
108
|
fontId: OpaqueId,
|
|
105
|
-
family: z2.string().optional()
|
|
109
|
+
family: z2.string().optional(),
|
|
110
|
+
weight: z2.number().int().min(1).max(1e3).optional(),
|
|
111
|
+
style: z2.enum(["normal", "italic"]).optional()
|
|
106
112
|
})
|
|
107
113
|
]);
|
|
108
114
|
var Colors = z2.object({
|