@cueframe/kernel 0.1.3 → 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/agent/errors.d.ts +8 -0
- 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 +5 -7
- package/dist/_members/authoring/types.d.ts +1 -2
- package/dist/_members/cloud-import/CloudImportService.d.ts +3 -4
- package/dist/_members/cloud-import/ImportProvider.d.ts +3 -7
- package/dist/_members/cloud-import/cloudConfig.d.ts +0 -6
- package/dist/_members/cloud-import/index.d.ts +2 -4
- 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} +25 -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 +2 -15
- package/dist/_members/composition/projection/behind-readiness.d.ts +4 -2
- package/dist/_members/composition/reframe/index.d.ts +56 -528
- package/dist/_members/composition/validators/brandKit.d.ts +251 -1252
- package/dist/_members/composition/validators/composePlan.d.ts +106 -818
- package/dist/_members/composition/validators/composition.d.ts +1328 -5886
- package/dist/_members/composition/validators/font.d.ts +35 -91
- package/dist/_members/composition/validators/index.d.ts +1 -0
- package/dist/_members/composition/validators/opaqueId.d.ts +13 -0
- package/dist/_members/composition/validators/project.d.ts +17 -52
- package/dist/_members/composition/validators/registry.d.ts +53 -135
- package/dist/_members/composition/validators/render.d.ts +811 -7443
- package/dist/_members/composition/validators/session.d.ts +41 -99
- package/dist/_members/composition/validators/webhook.d.ts +25 -60
- package/dist/_members/composition-ops/alphaLayers.d.ts +3 -2
- package/dist/_members/composition-ops/index.d.ts +412 -4348
- 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 +10 -10
- package/dist/_members/errors/registry.d.ts +201 -3
- package/dist/_members/foundation/primitives/index.d.ts +1 -1
- package/dist/_members/mcp/adapter.d.ts +22 -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 -34
- 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 +12 -2
- 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 +123 -727
- package/dist/_members/media-model/generation.d.ts +141 -228
- package/dist/_members/media-model/index.d.ts +1 -0
- package/dist/_members/media-model/opaqueId.d.ts +10 -0
- 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 +28 -27
- package/dist/{chunk-AW57IWNW.js → chunk-4FOOBSEE.js} +53 -3
- package/dist/{chunk-KFECIHED.js → chunk-4JRUGT2Y.js} +41 -106
- package/dist/{chunk-FMODQD5P.js → chunk-4ZE564YF.js} +16 -9
- package/dist/chunk-5OTQ7M43.js +718 -0
- package/dist/{chunk-GMD33ZD7.js → chunk-6ID2J64H.js} +1 -1
- package/dist/{chunk-NQSMEUJ6.js → chunk-6XI57FZZ.js} +362 -212
- package/dist/chunk-7KEUL3FI.js +500 -0
- package/dist/{chunk-GIA2SVVB.js → chunk-AD5HWBCE.js} +9 -4
- package/dist/{chunk-DCVJWGIA.js → chunk-C5SEPOWD.js} +165 -173
- package/dist/chunk-CGHTMZNC.js +6 -0
- package/dist/chunk-DHKQ47Q6.js +57 -0
- package/dist/{chunk-RP4SXXLJ.js → chunk-DQKSCHFC.js} +1 -1
- package/dist/{chunk-TO4BFNLJ.js → chunk-EEXCDFY5.js} +1 -1
- package/dist/{chunk-ZT7MHRQU.js → chunk-GCQ7Z7S7.js} +15 -5
- package/dist/{chunk-TPA6PYN2.js → chunk-GEGRJKKO.js} +25 -10
- package/dist/chunk-HHFDHJ3I.js +392 -0
- package/dist/{chunk-ICSZF37W.js → chunk-IBMJ33EL.js} +3 -3
- package/dist/{chunk-TFGKUWHY.js → chunk-IHFREGFA.js} +24 -22
- package/dist/chunk-IJ7PVJTK.js +114 -0
- package/dist/{chunk-UQSOS726.js → chunk-KKEY5MIW.js} +8 -8
- package/dist/{chunk-ZPRBGW4Y.js → chunk-LNBVTDFR.js} +1 -1
- package/dist/chunk-LQUWKBST.js +195 -0
- package/dist/chunk-M2TLRXEO.js +41 -0
- package/dist/{chunk-SDCEJAO2.js → chunk-NOEBAV2G.js} +58 -2
- package/dist/{chunk-DL7WYISQ.js → chunk-QBKDEO7J.js} +1601 -1435
- 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-TMB5AY6Q.js → chunk-XHUYWVYK.js} +1 -1
- package/dist/{chunk-BZZTVOGG.js → chunk-XVBOSPZI.js} +15 -17
- package/dist/{chunk-HBVAZXYO.js → chunk-Y3QGYASW.js} +14 -14
- package/dist/{chunk-DWLNPNC4.js → chunk-ZCAQHNPI.js} +1 -1
- package/dist/{chunk-DJW3UGBH.js → chunk-ZN6P3KOJ.js} +90 -39
- package/dist/chunk-ZZRBKGDA.js +109 -0
- package/dist/cloud-import.js +20 -116
- 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 +16 -30
- 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 +4 -2
- package/dist/composition-ops.js +23 -17
- package/dist/composition.js +17 -15
- package/dist/{context-JLLU3MYD.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 +33 -33
- package/dist/mcp/core.js +1 -1
- package/dist/mcp/curation.js +5 -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/media-model/media-kind.js +98 -9
- package/dist/media-model.js +83 -77
- package/dist/nle-export.js +15 -24
- package/dist/plane/conformance.js +1 -1
- package/dist/plane/contract.js +7 -0
- package/dist/plane.js +1 -1
- package/dist/primitives/effects.js +1 -1
- package/dist/primitives/hero-text.js +2 -2
- package/dist/primitives/layouts.js +1 -1
- package/dist/primitives/lib/index.js +18 -18
- package/dist/primitives/lib/schema.js +1 -1
- package/dist/primitives/lib.js +18 -18
- package/dist/primitives/scenes.js +2 -2
- package/dist/primitives/text.js +2 -2
- package/dist/primitives.js +10 -10
- 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 -572
- package/package.json +69 -61
- package/dist/_members/authoring/prompts/designReviewerPrompt.d.ts +0 -2
- package/dist/_members/authoring/transpileComponent.d.ts +0 -6
- package/dist/_members/authoring/transpileHelper.d.ts +0 -8
- package/dist/_members/cloud-import/MediaItemPreprocessor.d.ts +0 -18
- package/dist/_members/cloud-import/multipartUpload.d.ts +0 -12
- 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/convex-api/api.d.ts +0 -5
- package/dist/_members/convex-api/api.generated.d.ts +0 -1444
- package/dist/_members/convex-api/dataModel.d.ts +0 -6
- 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-6IU2UQI5.js +0 -107
- package/dist/chunk-EP2Y6M2J.js +0 -64
- package/dist/chunk-MHOQTPOB.js +0 -124
- package/dist/chunk-RHVLQNYF.js +0 -20
- package/dist/chunk-TXSFYUZH.js +0 -85
- package/dist/chunk-V24L35GM.js +0 -61
- package/dist/chunk-WZH57M53.js +0 -494
- package/dist/cloud-import/multipart.d.ts +0 -1
- package/dist/cloud-import/multipart.js +0 -8
- package/dist/compose/renderer.d.ts +0 -1
- package/dist/compose/renderer.js +0 -170
- package/dist/convex-api/dataModel.d.ts +0 -1
- package/dist/convex-api/dataModel.js +0 -0
- package/dist/convex-api.d.ts +0 -1
- package/dist/convex-api.js +0 -8
- package/dist/render-harness/sandboxGlobalSpecs.d.ts +0 -1
- package/dist/render-harness/sandboxGlobalSpecs.js +0 -13
- package/dist/{chunk-SAMQUUO5.js → chunk-BIBYZJL3.js} +3 -3
- package/dist/{chunk-23HFEKV7.js → chunk-QISFYLBB.js} +4 -4
- package/dist/{chunk-DYZE7JZA.js → chunk-TMIBBD5E.js} +3 -3
|
@@ -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
|
+
};
|
|
@@ -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,
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
COMPOSE_PLANNER_TOOLS,
|
|
3
3
|
COMPOSE_ROLE_TOOLS,
|
|
4
4
|
dispatchComposeRoleTool
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-XVBOSPZI.js";
|
|
6
6
|
|
|
7
7
|
// ../authoring/src/agent/buildTools.ts
|
|
8
8
|
import { tool } from "ai";
|
|
@@ -135,6 +135,22 @@ var buildPlannerTools = (p) => {
|
|
|
135
135
|
|
|
136
136
|
// ../authoring/src/agent/errors.ts
|
|
137
137
|
import { APICallError, TypeValidationError } from "ai";
|
|
138
|
+
var BODY_EXCERPT = 200;
|
|
139
|
+
function providerMessage(responseBody) {
|
|
140
|
+
if (!responseBody) return void 0;
|
|
141
|
+
try {
|
|
142
|
+
const body = JSON.parse(responseBody);
|
|
143
|
+
const msg = body?.error?.message ?? body?.message;
|
|
144
|
+
return msg == null ? void 0 : String(msg);
|
|
145
|
+
} catch {
|
|
146
|
+
return void 0;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
function bodyExcerpt(responseBody) {
|
|
150
|
+
const trimmed = responseBody?.trim();
|
|
151
|
+
if (!trimmed) return void 0;
|
|
152
|
+
return trimmed.replace(/\s+/g, " ").slice(0, BODY_EXCERPT);
|
|
153
|
+
}
|
|
138
154
|
function extractProviderError(err) {
|
|
139
155
|
if (APICallError.isInstance(err)) {
|
|
140
156
|
const status = err.statusCode;
|
|
@@ -144,17 +160,16 @@ function extractProviderError(err) {
|
|
|
144
160
|
if (status === 429) {
|
|
145
161
|
return "API rate limit or quota exceeded. Try again later.";
|
|
146
162
|
}
|
|
163
|
+
const detail = providerMessage(err.responseBody);
|
|
147
164
|
if (status === 413 || status === 400) {
|
|
148
|
-
if (
|
|
149
|
-
try {
|
|
150
|
-
const body = JSON.parse(err.responseBody);
|
|
151
|
-
const msg = body?.error?.message ?? body?.message;
|
|
152
|
-
if (msg) return String(msg).slice(0, 200);
|
|
153
|
-
} catch {
|
|
154
|
-
}
|
|
155
|
-
}
|
|
165
|
+
if (detail) return detail.slice(0, 200);
|
|
156
166
|
}
|
|
157
|
-
|
|
167
|
+
const where = status === void 0 ? "" : ` (HTTP ${status})`;
|
|
168
|
+
const evidence = detail ?? bodyExcerpt(err.responseBody);
|
|
169
|
+
return (evidence ? `${err.message}${where}: ${evidence}` : `${err.message}${where}`).slice(
|
|
170
|
+
0,
|
|
171
|
+
300
|
|
172
|
+
);
|
|
158
173
|
}
|
|
159
174
|
if (TypeValidationError.isInstance(err)) {
|
|
160
175
|
return "Invalid response from AI provider. The provider may be misconfigured or unavailable.";
|
|
@@ -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-WZH57M53.js";
|
|
7
7
|
|
|
8
8
|
// ../composition/src/ops/compositionOps.shared.ts
|
|
9
9
|
function findOrCreateTrackByKind(composition, kind) {
|