@cueframe/kernel 0.0.1 → 0.1.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/testing/conversationStoreContract.d.ts +1 -1
- package/dist/_members/authoring/providers/resourceApi.d.ts +1 -1
- package/dist/_members/authoring/transpileComponent.d.ts +1 -1
- package/dist/_members/cloud-import/CloudImportService.d.ts +35 -0
- package/dist/_members/cloud-import/ImportProvider.d.ts +73 -0
- package/dist/_members/cloud-import/MediaItemPreprocessor.d.ts +27 -0
- package/dist/_members/cloud-import/chunk-XKO6ZSWI.js +162 -0
- package/dist/_members/cloud-import/chunk-XKO6ZSWI.js.map +1 -0
- package/dist/_members/cloud-import/cloudConfig.d.ts +23 -0
- package/dist/_members/cloud-import/index.d.ts +9 -0
- package/dist/_members/cloud-import/index.js +241 -0
- package/dist/_members/cloud-import/index.js.map +1 -0
- package/dist/_members/cloud-import/multipartUpload.d.ts +12 -0
- package/dist/_members/cloud-import/multipartUpload.js +7 -0
- package/dist/_members/cloud-import/multipartUpload.js.map +1 -0
- package/dist/_members/composition/ops/compositionOps.d.ts +1 -1
- package/dist/_members/composition/ops/types.d.ts +1 -1
- package/dist/_members/composition/timeline/placement.d.ts +1 -1
- package/dist/_members/composition/validators/composition.d.ts +1 -1
- package/dist/_members/composition-ops/index.d.ts +1 -1
- package/dist/_members/composition-ops/opRecorder.d.ts +1 -1
- package/dist/_members/convex-api/api.d.ts +5 -0
- package/dist/_members/convex-api/dataModel.d.ts +6 -0
- package/dist/_members/core/render/exportSettings.d.ts +1 -1
- package/dist/_members/mcp/curation.d.ts +1 -1
- package/dist/_members/plane/conformance.d.ts +1 -1
- package/dist/_members/render-harness/localRender.d.ts +1 -1
- package/dist/animate.js +828 -79187
- package/dist/authoring/build-tools.js +8 -11
- package/dist/authoring/context.js +5 -5
- package/dist/authoring/models.js +1 -2
- package/dist/authoring/prompts.js +1 -1
- package/dist/authoring/tools.js +7 -7
- package/dist/authoring/transpileComponent.js +3 -2220
- package/dist/authoring.js +27 -29
- package/dist/brand-derivation.js +1 -1
- package/dist/chunk-6IU2UQI5.js +107 -0
- package/dist/{chunk-N67PDTKQ.js → chunk-ABL557OT.js} +1 -1
- package/dist/{chunk-DSNG6WLU.js → chunk-AYVJXDLB.js} +1 -4
- package/dist/{chunk-G3PBH53P.js → chunk-COYMZ76S.js} +1 -1
- package/dist/chunk-DSMLHYJ4.js +82 -0
- package/dist/{chunk-BRKJKB33.js → chunk-FYZVH3MC.js} +1 -1
- package/dist/{chunk-MVEE6HEC.js → chunk-GA23TRNR.js} +5 -7
- package/dist/{chunk-OIRUO5P7.js → chunk-GEA7E2FL.js} +1 -1
- package/dist/chunk-HCCBDJLW.js +68 -0
- package/dist/{chunk-QLAQHR3L.js → chunk-IBYQG46O.js} +1 -1
- package/dist/chunk-JQMPHKLU.js +126 -0
- package/dist/{chunk-ELLSET2N.js → chunk-LM4WDUQJ.js} +3 -6
- package/dist/{chunk-UEI3NLNK.js → chunk-MHOQTPOB.js} +1 -4
- package/dist/{chunk-ATAF24QG.js → chunk-MXFAADCQ.js} +1 -1
- package/dist/{chunk-TULRCY6U.js → chunk-NFEGPWGS.js} +1 -1
- package/dist/{chunk-MC5DLSEV.js → chunk-ODL7GQJG.js} +14 -14
- package/dist/{chunk-WZTTZHNR.js → chunk-OLFOPQCA.js} +12 -9
- package/dist/{chunk-P43IE4WB.js → chunk-P727GZVO.js} +2 -4
- package/dist/{chunk-S3P5BFFL.js → chunk-PMY24FUD.js} +2 -4
- package/dist/chunk-RF7U3SCL.js +606 -0
- package/dist/{chunk-JD77Y2WM.js → chunk-SW336CJP.js} +1 -4
- package/dist/{chunk-M3I5LMAB.js → chunk-UY4SWJVE.js} +1 -1
- package/dist/{chunk-52AHXNKM.js → chunk-VOO5FQSS.js} +5 -5
- package/dist/{chunk-NV4I6GJV.js → chunk-XWKZB5U5.js} +4 -4
- package/dist/{chunk-6QJ3V3VS.js → chunk-YX2GSJK7.js} +1 -1
- package/dist/{chunk-5I7VDCAC.js → chunk-ZB3C3HM7.js} +1 -1
- package/dist/chunk-ZT7MHRQU.js +104 -0
- package/dist/cloud-import/multipart.d.ts +1 -0
- package/dist/cloud-import/multipart.js +8 -0
- package/dist/cloud-import.d.ts +1 -0
- package/dist/cloud-import.js +234 -0
- package/dist/compose/renderer.js +18 -21
- package/dist/compose.js +18 -21
- package/dist/composition/graphics-plan.js +3 -3
- package/dist/composition/ops.js +4 -4
- package/dist/composition/primitive-catalog.js +1 -1
- package/dist/composition/projection.js +3 -3
- package/dist/composition/validators.js +2 -2
- package/dist/composition-ops.js +12 -12
- package/dist/composition.js +5 -5
- package/dist/{context-CEAKQ5T7.js → context-OKX3HHFS.js} +5 -5
- package/dist/convex-api/dataModel.d.ts +1 -0
- package/dist/convex-api/dataModel.js +0 -0
- package/dist/convex-api.d.ts +1 -0
- package/dist/convex-api.js +8 -0
- package/dist/core/render.js +2 -2
- package/dist/core.js +2 -2
- package/dist/mcp/adapter.js +1 -5
- package/dist/mcp/server.js +1 -2
- package/dist/mcp.js +2 -95
- package/dist/media-model/media-kind.js +9 -98
- package/dist/nle-export/xml.js +5 -22799
- package/dist/nle-export.js +18 -21
- package/dist/primitives/backgrounds.js +2 -3
- package/dist/primitives/captions.js +4 -243
- package/dist/primitives/effects.js +2 -3
- package/dist/primitives/hero-text.js +2 -3
- package/dist/primitives/layouts.js +2 -3
- package/dist/primitives/lib/index.js +8 -10
- package/dist/primitives/lib/preview.js +1 -2
- package/dist/primitives/lib/schema.js +1 -2
- package/dist/primitives/lib/text/fitText.js +1 -2
- package/dist/primitives/lib.js +8 -10
- package/dist/primitives/scenes.js +1 -2
- package/dist/primitives/text.js +2 -3
- package/dist/primitives/ui-blocks.js +4 -5
- package/dist/primitives.js +19 -21
- package/package.json +123 -13
- package/dist/TextureLoader-UQOFUSAP.js +0 -422
- package/dist/VideoTexture-AQWSPIJG.js +0 -62
- package/dist/chunk-7GISRVON.js +0 -14176
- package/dist/chunk-DIBOJJMU.js +0 -16838
- package/dist/chunk-EAUSEGB7.js +0 -420
- package/dist/chunk-FUWJOVVK.js +0 -3633
- package/dist/chunk-G75E7YA4.js +0 -11883
- package/dist/chunk-JCZQT7K3.js +0 -3266
- package/dist/chunk-KF5ETMKB.js +0 -544
- package/dist/chunk-NDKERSXY.js +0 -1296
- package/dist/chunk-V43Y7IE4.js +0 -3621
- package/dist/chunk-VIVQHIGZ.js +0 -4319
- package/dist/chunk-YA3OR2KK.js +0 -249
- package/dist/hls-HD4C5G6W.js +0 -33000
- package/dist/token-RGFIT24D.js +0 -69
- package/dist/token-util-GPLSGYVO.js +0 -5
- package/dist/vision_bundle-5Y376MAR.js +0 -4084
- package/dist/{chunk-6CMVBTTP.js → chunk-YIOY2XEO.js} +4 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/ImportProvider.tsx","../src/CloudImportService.ts","../src/MediaItemPreprocessor.ts","../src/cloudConfig.ts","../src/index.ts"],"sourcesContent":["/**\n * ImportProvider — single mount at app root.\n *\n * Initializes the CloudImportService, wires auth callbacks, and provides\n * the useImport() hook to child components. Wraps children in Uppy's\n * UppyContextProvider so headless hooks (useDropzone, useUppyState, etc.)\n * work anywhere in the tree.\n *\n * The import dialog UI is injected via `dialogSlot` to avoid circular\n * dependency between @cueframe/cloud-import and @cueframe/pro.\n */\nimport { createContext, useContext, useState, useEffect, useCallback, useRef, type ReactNode } from 'react';\nimport { UppyContextProvider } from '@uppy/react';\nimport type Uppy from '@uppy/core';\nimport { cloudImportService } from './CloudImportService';\nimport type { CloudUploadResult } from './CloudImportService';\n\ninterface ImportContextValue {\n openModal: () => void;\n closeModal: () => void;\n isOpen: boolean;\n uppy: Uppy;\n /**\n * Can this lane actually take an upload right now?\n *\n * A cloud import needs an identity: `getUploadMeta` mints an org-scoped\n * upload token, so with none the modal opens onto a request that can only\n * fail. This is DATA because the provider is now a fixture of the tree — it\n * mounts for the life of the desktop process, signed in or not, so its\n * PRESENCE stopped being the answer to this question (it was, back when the\n * whole cloud stack mounted only inside a confirmed auth handshake).\n */\n available: boolean;\n}\n\nconst ImportContext = createContext<ImportContextValue | null>(null);\n\nexport interface ImportProviderProps {\n children: ReactNode;\n /** Whether this lane can take an upload — see `ImportContextValue.available`.\n * Required, with no default: the one thing a caller must not forget is the\n * fact that decides whether a control is offered at all. */\n available: boolean;\n /** React element to render the import dialog (e.g. <ImportDialog />) */\n dialogSlot?: ReactNode;\n uploadSigningUrl: string;\n /** Called before opening the modal — returns upload metadata (token, userId, etc). */\n getUploadMeta?: () => Promise<Record<string, string>>;\n /** Pre-create a mediaItem — called by the preprocessor plugin before upload starts. */\n createMediaItem?: (file: { name: string; size: number; mimeType: string }) => Promise<string>;\n onUploadComplete?: (results: CloudUploadResult[]) => void;\n onError?: (error: Error) => void;\n}\n\nexport function ImportProvider({\n children,\n available,\n dialogSlot,\n uploadSigningUrl,\n getUploadMeta,\n createMediaItem,\n onUploadComplete,\n onError,\n}: ImportProviderProps) {\n const [isOpen, setIsOpen] = useState(false);\n\n // Stable refs for callbacks — avoids re-subscribing Uppy events\n const onCompleteRef = useRef(onUploadComplete);\n const onErrorRef = useRef(onError);\n onCompleteRef.current = onUploadComplete;\n onErrorRef.current = onError;\n\n // Initialize service once\n const [uppy] = useState(() => cloudImportService.init({ uploadSigningUrl }));\n\n useEffect(() => {\n const handleComplete = (result: { successful?: any[] }) => {\n const successful = result?.successful ?? [];\n if (successful.length > 0 && onCompleteRef.current) {\n onCompleteRef.current(\n successful.map((file: any) => ({\n uploadURL: file.response?.uploadURL ?? '',\n fileName: file.name ?? 'unknown',\n fileSize: file.size ?? 0,\n })),\n );\n }\n };\n\n const handleError = (error: unknown) => {\n onErrorRef.current?.(error instanceof Error ? error : new Error(String(error)));\n };\n\n uppy.on('complete', handleComplete);\n uppy.on('error', handleError);\n\n return () => {\n uppy.off('complete', handleComplete);\n uppy.off('error', handleError);\n };\n }, [uppy]);\n\n // Sync createMediaItem into the preprocessor plugin\n useEffect(() => {\n try {\n const preprocessor = cloudImportService.getPreprocessor();\n preprocessor.setCreateFn(createMediaItem ?? null);\n } catch {\n // Service not initialized yet — will be set on next render\n }\n }, [createMediaItem]);\n\n const openModal = useCallback(async () => {\n if (getUploadMeta) {\n try {\n const meta = await getUploadMeta();\n cloudImportService.setMeta(meta);\n } catch (err) {\n console.error('[Import] Failed to get upload metadata:', err);\n return;\n }\n }\n setIsOpen(true);\n }, [getUploadMeta]);\n\n const closeModal = useCallback(() => {\n setIsOpen(false);\n }, []);\n\n return (\n <ImportContext value={{ openModal, closeModal, isOpen, uppy, available }}>\n <UppyContextProvider uppy={uppy}>\n {children}\n {dialogSlot}\n </UppyContextProvider>\n </ImportContext>\n );\n}\n\n/** Hook to access the import modal and Uppy instance. Must be used inside <ImportProvider>. */\nexport function useImport(): ImportContextValue {\n const ctx = useContext(ImportContext);\n if (!ctx) throw new Error('useImport must be used within <ImportProvider>');\n return ctx;\n}\n\n/**\n * The context WHEN THE LANE CAN BE USED, and `null` otherwise — for surfaces\n * that offer the cloud modal only where it works and fall back where it does\n * not (the pro ImportButton, which drops to the local file picker).\n *\n * It used to answer presence alone, and presence used to be the same fact:\n * the provider mounted only inside a confirmed auth handshake. It mounts for\n * the life of the desktop process now (Task 11 — a provider that appears and\n * disappears re-parents the app), so presence would offer a cloud modal to a\n * signed-out user whose upload-token request can only fail: a control that\n * looks alive and silently does nothing.\n *\n * Still ONE fact, read from the tree rather than mirrored: the alternative —\n * a caller re-deriving `isDesktop && cloudEnabled && signedIn` — is the drift\n * class that crashed the desktop (\"useImport must be used within\n * <ImportProvider>\") whenever the two copies disagreed.\n */\nexport function useImportIfAvailable(): ImportContextValue | null {\n const ctx = useContext(ImportContext);\n return ctx?.available ? ctx : null;\n}\n","/**\n * Singleton Uppy service for imports (local + cloud).\n *\n * Uses @uppy/aws-s3 for multipart uploads directly to R2 via the\n * upload-signing CF Worker. Replaces the old TUS-based upload path.\n *\n * Owns the Uppy instance lifecycle (headless — no Dashboard plugin).\n * React integration is handled by ImportProvider (single mount at app root).\n * MediaItem pre-creation is handled by MediaItemPreprocessor (Uppy plugin).\n */\nimport Uppy from '@uppy/core';\nimport AwsS3 from '@uppy/aws-s3';\nimport { MediaItemPreprocessor } from './MediaItemPreprocessor';\ninterface CloudImportConfig {\n uploadSigningUrl: string;\n}\n\nexport interface CloudUploadResult {\n uploadURL: string;\n fileName: string;\n fileSize: number;\n}\n\nclass CloudImportService {\n private uppy: Uppy | null = null;\n private config: CloudImportConfig | null = null;\n\n /** Lazy-init: create Uppy + plugins on first use. */\n init(config: CloudImportConfig): Uppy {\n if (this.uppy) return this.uppy;\n\n this.config = config;\n\n const signingUrl = this.config.uploadSigningUrl.replace(/\\/$/, '');\n\n // @ts-expect-error — Uppy v5 Body generic makes restrictions type collapse to never\n this.uppy = new Uppy({\n id: 'cloud-import',\n restrictions: {\n allowedFileTypes: ['video/*', 'audio/*'],\n },\n })\n .use(AwsS3, {\n // Upload-signing Worker implements the S3 multipart endpoints at /s3/multipart/*\n endpoint: signingUrl,\n shouldUseMultipart: true,\n // Cap concurrent multipart part uploads. Unbounded concurrency\n // saturates the browser network stack and the signing Worker on\n // large files; 3 keeps throughput high without melting either.\n limit: 3,\n // Exponential-ish backoff for failed part/signing requests. Uppy\n // retries the same operation on each delay — keeps transient\n // network blips from failing an entire upload.\n retryDelays: [1000, 3000, 5000, 10000],\n })\n .use(MediaItemPreprocessor as any);\n\n return this.uppy;\n }\n\n /** Get the Uppy instance (must call init() first). */\n getUppy(): Uppy {\n if (!this.uppy) throw new Error('CloudImportService not initialized — call init() first');\n return this.uppy;\n }\n\n /** Get the MediaItemPreprocessor plugin. */\n getPreprocessor(): MediaItemPreprocessor {\n return this.getUppy().getPlugin(MediaItemPreprocessor.pluginId) as unknown as MediaItemPreprocessor;\n }\n\n /** Update upload metadata (uploadToken, userId, projectId). */\n setMeta(meta: Record<string, string>): void {\n this.uppy?.setMeta(meta);\n\n // Update AwsS3 plugin headers with the auth token.\n // headers must be a static Record — functions are not supported in @uppy/aws-s3 v5.\n if (meta.uploadToken) {\n const plugin = this.uppy?.getPlugin('AwsS3Multipart');\n if (plugin) {\n plugin.setOptions({ headers: { 'uppy-auth-token': meta.uploadToken } });\n }\n }\n }\n}\n\n/** Module-level singleton. */\nexport const cloudImportService = new CloudImportService();\n","/**\n * Uppy preprocessor plugin that pre-creates a mediaItem in the backend\n * before the upload starts. This guarantees convexMediaItemId is in the\n * upload metadata before the first byte goes out — no race condition.\n *\n * The actual creation function is injected via setCreateFn() so the plugin\n * stays decoupled from Convex/auth concerns.\n */\nimport { BasePlugin } from '@uppy/core';\nimport type { Uppy, Meta } from '@uppy/core';\n\ntype CreateMediaItemFn = (file: {\n name: string;\n size: number;\n mimeType: string;\n}) => Promise<string>;\n\nexport class MediaItemPreprocessor extends BasePlugin<Record<string, never>, Meta, Record<string, never>> {\n static pluginId = 'MediaItemPreprocessor';\n\n private createFn: CreateMediaItemFn | null = null;\n private preprocessBound: (fileIDs: string[], uploadID: string) => Promise<void>;\n\n constructor(uppy: Uppy, opts?: Record<string, never>) {\n super(uppy, opts ?? {});\n this.id = MediaItemPreprocessor.pluginId;\n this.type = 'preprocessor';\n this.preprocessBound = this.preprocess.bind(this);\n }\n\n /** Inject the creation function (called from ImportProvider). */\n setCreateFn(fn: CreateMediaItemFn | null): void {\n this.createFn = fn;\n }\n\n install(): void {\n this.uppy.addPreProcessor(this.preprocessBound);\n }\n\n uninstall(): void {\n this.uppy.removePreProcessor(this.preprocessBound);\n }\n\n private async preprocess(fileIDs: string[]): Promise<void> {\n if (!this.createFn) return;\n\n for (const fileID of fileIDs) {\n const file = this.uppy.getFile(fileID);\n if (!file) continue;\n\n // Skip if already has a mediaItemId (e.g. retry)\n if ((file.meta as Record<string, unknown>).convexMediaItemId) continue;\n\n this.uppy.emit('preprocess-progress', file, {\n mode: 'indeterminate' as const,\n message: 'Preparing upload…',\n });\n\n try {\n const mediaItemId = await this.createFn({\n name: file.name ?? 'unknown',\n size: file.size ?? 0,\n mimeType: file.type ?? 'video/mp4',\n });\n this.uppy.setFileMeta(fileID, { convexMediaItemId: mediaItemId });\n } catch (err) {\n this.uppy.log(`[MediaItemPreprocessor] Failed for ${fileID}: ${err}`, 'error');\n }\n\n this.uppy.emit('preprocess-complete', file);\n }\n }\n}\n","/**\n * Single source of truth for cloud endpoint resolution.\n *\n * One input (convexUrl) → deterministic output (all cloud endpoints).\n * No fallback chains, no env var reading, no defaults.\n */\n\nexport type CloudEnvironment = 'dev' | 'staging' | 'production';\n\nexport interface CloudEndpoints {\n convexUrl: string;\n uploadSigningUrl: string;\n}\n\nexport const ENVIRONMENTS: Record<CloudEnvironment, CloudEndpoints> = {\n dev: {\n convexUrl: 'https://api-dev.cueframe.ai',\n uploadSigningUrl: 'http://localhost:8787',\n },\n staging: {\n convexUrl: 'https://api-dev.cueframe.ai',\n uploadSigningUrl: 'https://upload-signing.cueframelabs.workers.dev',\n },\n production: {\n convexUrl: 'https://api.cueframe.ai',\n uploadSigningUrl: 'https://upload.cueframe.ai',\n },\n};\n\n/** Detect environment from a Convex deployment URL.\n *\n * Convex exposes two domains per deployment: queries (`data*`) and HTTP\n * actions (`api*`). Callers pass either form depending on which client\n * they own, so detection has to recognize both:\n * prod → api.cueframe.ai | data.cueframe.ai\n * staging → api-dev.cueframe.ai | data-dev.cueframe.ai\n */\nexport function detectEnvironment(convexUrl?: string): CloudEnvironment {\n if (!convexUrl) return 'dev';\n // staging first — its hostnames are substrings of prod's, so checking\n // prod first would mis-classify (e.g. data-dev.cueframe.ai contains\n // data.cueframe.ai).\n if (/\\b(api-dev|data-dev)\\.cueframe\\.ai/.test(convexUrl)) return 'staging';\n if (/\\b(api|data)\\.cueframe\\.ai/.test(convexUrl)) return 'production';\n // RAW deployment hostnames — env files frequently carry the\n // *.convex.cloud/site form instead of the custom domains, and falling\n // through to 'dev' silently pointed real deployments at the localhost\n // signing worker (found by the desktop-lane staging test: enhance uploads\n // died on http://localhost:8787 while Convex itself was on staging).\n if (/\\boceanic-dogfish-357\\.convex\\.(cloud|site)/.test(convexUrl)) return 'staging';\n if (/\\bpolished-hawk-150\\.convex\\.(cloud|site)/.test(convexUrl)) return 'production';\n return 'dev';\n}\n\n/** Resolve all cloud endpoints from a Convex URL. */\nexport function getEndpoints(convexUrl: string): CloudEndpoints {\n const env = detectEnvironment(convexUrl);\n return ENVIRONMENTS[env];\n}\n\n// NO `getEnvironmentEndpoints` AND NO `ENV_STORAGE_KEY`.\n//\n// They served a desktop Settings control that let a user pick dev / staging /\n// production at runtime. Nothing downstream could honour it: the Convex socket\n// is built from `VITE_CONVEX_URL` and its bearer is minted by that same\n// deployment (`desktopAuthClient`), so a switched environment would present a\n// credential the deployment never issued. The one entry that read the key fed\n// the result to a shell composed with `authGate={false}`, which dropped it\n// before it reached anything at all.\n//\n// The environment is a BUILD fact, and `getEndpoints(convexUrl)` above is the\n// one way to ask what it implies. `CloudEnhancementSettings` displays it.\n","export { ImportProvider, useImport, useImportIfAvailable } from './ImportProvider';\nexport type { ImportProviderProps } from './ImportProvider';\n\nexport { cloudImportService } from './CloudImportService';\nexport type { CloudUploadResult } from './CloudImportService';\n\nexport { ENVIRONMENTS, detectEnvironment, getEndpoints } from './cloudConfig';\nexport type { CloudEnvironment, CloudEndpoints } from './cloudConfig';\n\nexport { multipartUpload } from './multipartUpload';\nexport type { MultipartUploadOptions, MultipartUploadResult } from './multipartUpload';\n\n// Re-export Uppy React hooks for use in custom UI components\nexport {\n useDropzone,\n useUppyState,\n useUppyEvent,\n} from '@uppy/react';\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface MultipartUploadOptions {
|
|
2
|
+
file: File;
|
|
3
|
+
signingUrl: string;
|
|
4
|
+
token: string;
|
|
5
|
+
metadata?: Record<string, string>;
|
|
6
|
+
onProgress?: (fraction: number) => void;
|
|
7
|
+
}
|
|
8
|
+
export interface MultipartUploadResult {
|
|
9
|
+
location: string;
|
|
10
|
+
mediaItemId: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function multipartUpload(opts: MultipartUploadOptions): Promise<MultipartUploadResult>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* All operations are side-effect-free: no persistence, no logging. Only
|
|
5
5
|
* state mutations via set/get on the wire-shape Composition.
|
|
6
6
|
*
|
|
7
|
-
* Mirrors the desktop store's v2 ops (
|
|
7
|
+
* Mirrors the desktop store's v2 ops (apps/studio/src/store/compositionStore/
|
|
8
8
|
* compositionOps.ts). The OSS module drops desktop-only concerns
|
|
9
9
|
* (corrections, transcriptDoc) — those live on the desktop envelope.
|
|
10
10
|
*/
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Composition types — v2 wire-shape.
|
|
3
3
|
*
|
|
4
4
|
* The OSS shared composition module mirrors the desktop store's v2
|
|
5
|
-
* shape (
|
|
5
|
+
* shape (apps/studio/src/store/compositionStore/types.ts) minus desktop-only
|
|
6
6
|
* envelope concerns (corrections, transcriptDoc, isLoaded).
|
|
7
7
|
*
|
|
8
8
|
* Used by:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WHERE A SOURCE GOES.
|
|
3
3
|
*
|
|
4
|
-
* Hoisted from `
|
|
4
|
+
* Hoisted from `apps/studio/src/components/Timeline/fabric/placement.ts` (2026-08-23)
|
|
5
5
|
* for the reason the module's own header predicted and the repo rule requires:
|
|
6
6
|
* the cloud director writes compositions too, so a placement rule that lives in
|
|
7
7
|
* the desktop is a rule the cloud does not have. This is now the single home.
|
|
@@ -2320,7 +2320,7 @@ export declare const TimelineClip: z.ZodObject<{
|
|
|
2320
2320
|
* does not select its audio, so every ripple, move and trim silently desyncs
|
|
2321
2321
|
* sound from picture and the user finds out at playback. Every editor this
|
|
2322
2322
|
* repo has been measured against carries the same field; ours had none
|
|
2323
|
-
* (`grep linkGroup` returned nothing across `
|
|
2323
|
+
* (`grep linkGroup` returned nothing across `apps/studio/src` and
|
|
2324
2324
|
* `packages/composition/src` on 2026-08-23).
|
|
2325
2325
|
*
|
|
2326
2326
|
* Membership is the ONLY thing stored. What a link implies — expand the
|
|
@@ -4888,7 +4888,7 @@ export declare function applyOp(composition: Composition, op: CompositionOp): Co
|
|
|
4888
4888
|
*
|
|
4889
4889
|
* So: `HeadlessStore` here is a STRUCTURAL contract (`CompositionOps` + a
|
|
4890
4890
|
* `getState`), not a concrete class — `@cueframe/authoring`'s `CompositionStore`
|
|
4891
|
-
* and the desktop store satisfy it, and `LocalExecutor` (
|
|
4891
|
+
* and the desktop store satisfy it, and `LocalExecutor` (apps/studio/src/llm) folds
|
|
4892
4892
|
* a validated batch through it op-by-op. Writing a second switch for that lane
|
|
4893
4893
|
* is what "one vocabulary" exists to prevent: it would drift silently the first
|
|
4894
4894
|
* time an op is added here and forgotten there.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* recordingStore so it has exactly one home and two consumers:
|
|
4
4
|
*
|
|
5
5
|
* - `createRecordingStore` (compose bench/eval): wraps the headless store.
|
|
6
|
-
* - the EDITOR's compositionOps delegate (
|
|
6
|
+
* - the EDITOR's compositionOps delegate (apps/studio/src/store): wraps the
|
|
7
7
|
* zustand-backed op surface, so every user gesture records the same wire
|
|
8
8
|
* op an agent would send — the P0.5 "editor writes are ops" seam.
|
|
9
9
|
*
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { api as GeneratedApi } from "./api.generated.js";
|
|
2
|
+
/** The client-facing function-reference proxy. Runtime-identical to the
|
|
3
|
+
* backend's generated `api` (which IS `anyApi`); typed by the vendored
|
|
4
|
+
* declarations with the internal.* surface stripped. */
|
|
5
|
+
export declare const api: typeof GeneratedApi;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { GenericId } from "convex/values";
|
|
2
|
+
import type { SystemTableNames } from "convex/server";
|
|
3
|
+
/** Table NAMES only — the vendored surface deliberately omits document
|
|
4
|
+
* shapes (Doc/DataModel). Public consumers use exclusively `Id<...>`. */
|
|
5
|
+
export type TableNames = "agentMessages" | "agentThreads" | "apiAuditLog" | "billingPlanState" | "brandKits" | "briefs" | "checkpoints" | "clips" | "clipSuggestionRuns" | "componentVersions" | "composeJobs" | "compositionEvents" | "compositionRuns" | "compositions" | "compositionVersions" | "contextFiles" | "conversations" | "corrections" | "critics" | "dashboardInsights" | "directorProfiles" | "directorWorkflows" | "enrichmentCandidates" | "exports" | "idempotencyKeys" | "installedComponents" | "jobs" | "markers" | "mediaItems" | "mediaUnderstanding" | "overlays" | "pricingPolicy" | "processingEvents" | "projects" | "providerStates" | "renderJobs" | "resourceQueryCache" | "resourceRateBuckets" | "restorePoints" | "runs" | "searchQueries" | "sessions" | "sessionTokens" | "settings" | "socialAccounts" | "socialInsights" | "socialMediaItems" | "templateEmbeddings" | "templates" | "timelineClips" | "tracks" | "transcripts" | "uploadTokens" | "usageEvents" | "userSettings" | "videoChunkEmbeddings" | "webhookDeliveries" | "webhookProjectUpdateDebounce" | "webhooks" | "x402Payments";
|
|
6
|
+
export type Id<TableName extends TableNames | SystemTableNames> = GenericId<TableName>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Export settings types and constants shared between desktop and cloud render paths.
|
|
3
|
-
* Extracted from
|
|
3
|
+
* Extracted from apps/studio/src/store/exportStore.ts — pure functions, no store deps.
|
|
4
4
|
*/
|
|
5
5
|
import type { CaptionStyle } from './types.js';
|
|
6
6
|
export type ExportQuality = 'maximum' | 'social' | 'web' | 'potato' | 'source';
|
|
@@ -52,7 +52,7 @@ export interface CuratedTool {
|
|
|
52
52
|
* SSOT; this npm-shipped package can go stale, so it only controls listing):
|
|
53
53
|
* 'expert' hides the tool from the public listing unless the expert layer is
|
|
54
54
|
* on. Default 'stable'. Drift-gated against the server map in
|
|
55
|
-
* the
|
|
55
|
+
* the backend's capabilities drift test.
|
|
56
56
|
*/
|
|
57
57
|
maturity?: 'stable' | 'expert';
|
|
58
58
|
/**
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* THE LANE CONFORMANCE TABLE — one set of facts, executed by both lanes.
|
|
3
3
|
*
|
|
4
4
|
* WHY THIS FILE EXISTS. `preview_frame` is served twice: by the desktop plane
|
|
5
|
-
* (`
|
|
5
|
+
* (`apps/studio/src/plane/handlers.ts`, drawing through the webview) and by the
|
|
6
6
|
* cloud route (`the `/v1/evidence` routes`, rendering through
|
|
7
7
|
* Modal). Nothing made them agree. The only mechanism was review discipline —
|
|
8
8
|
* comments like *"ALLOWED_KEYS TRACKS THAT SCHEMA … Add server-side keys here in
|
|
@@ -157,7 +157,7 @@ export interface RenderComponentAlphaOpts {
|
|
|
157
157
|
* Bake an owned `.cueframe` component to an ALPHA (transparent) video via the
|
|
158
158
|
* LOCAL Remotion bundle — the "trusted pixels" a cloud render later composites
|
|
159
159
|
* (Task 2.6b) WITHOUT running the component's code in the shared render. Mirrors
|
|
160
|
-
* the proven
|
|
160
|
+
* the proven apps/studio/scripts/spike-alpha renderMedia settings. Requires an
|
|
161
161
|
* installed Chrome via REMOTION_CHROME_EXECUTABLE. Output → the `.cueframe/` cache
|
|
162
162
|
* (an R2-upload step for the cloud path is the 2.6b follow-up).
|
|
163
163
|
*/
|