@koda-sl/baker-cli 0.39.29 → 0.66.2
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/README.md +1754 -7
- package/canvas/avocado-tutorial.json +89 -0
- package/canvas/hello-world-composition/index.html +83 -0
- package/canvas/hello-world-composition/meta.json +41 -0
- package/canvas/hello-world-overlay.json +37 -0
- package/canvas/phone-scroll-composition/index.html +141 -0
- package/canvas/phone-scroll-composition/meta.json +39 -0
- package/canvas/tiktok-captions-composition/index.html +126 -0
- package/canvas/tiktok-captions-composition/meta.json +46 -0
- package/canvas/video-overlay-composition/index.html +239 -0
- package/canvas/video-overlay-composition/meta.json +29 -0
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/ads/meta/creatives.js +1 -1
- package/dist/commands/canvas/catalog.d.ts +2 -0
- package/dist/commands/canvas/catalog.d.ts.map +1 -0
- package/dist/commands/canvas/catalog.js +13 -0
- package/dist/commands/canvas/catalog.js.map +1 -0
- package/dist/commands/canvas/index.d.ts +2 -0
- package/dist/commands/canvas/index.d.ts.map +1 -0
- package/dist/commands/canvas/index.js +32 -0
- package/dist/commands/canvas/index.js.map +1 -0
- package/dist/commands/canvas/inspect.d.ts +16 -0
- package/dist/commands/canvas/inspect.d.ts.map +1 -0
- package/dist/commands/canvas/inspect.js +115 -0
- package/dist/commands/canvas/inspect.js.map +1 -0
- package/dist/commands/canvas/run.d.ts +24 -0
- package/dist/commands/canvas/run.d.ts.map +1 -0
- package/dist/commands/canvas/run.js +56 -0
- package/dist/commands/canvas/run.js.map +1 -0
- package/dist/commands/canvas/scaffold-static-ad.d.ts +40 -0
- package/dist/commands/canvas/scaffold-static-ad.d.ts.map +1 -0
- package/dist/commands/canvas/scaffold-static-ad.js +265 -0
- package/dist/commands/canvas/scaffold-static-ad.js.map +1 -0
- package/dist/commands/canvas/scaffold-video.d.ts +44 -0
- package/dist/commands/canvas/scaffold-video.d.ts.map +1 -0
- package/dist/commands/canvas/scaffold-video.js +235 -0
- package/dist/commands/canvas/scaffold-video.js.map +1 -0
- package/dist/commands/canvas/validate.d.ts +8 -0
- package/dist/commands/canvas/validate.d.ts.map +1 -0
- package/dist/commands/canvas/validate.js +37 -0
- package/dist/commands/canvas/validate.js.map +1 -0
- package/dist/commands/images/find.d.ts +1 -1
- package/dist/commands/images/find.d.ts.map +1 -1
- package/dist/commands/images/find.js +12 -3
- package/dist/commands/images/find.js.map +1 -1
- package/dist/commands/images/google.d.ts +1 -1
- package/dist/commands/images/google.d.ts.map +1 -1
- package/dist/commands/images/google.js +12 -3
- package/dist/commands/images/google.js.map +1 -1
- package/dist/commands/images/stock.d.ts +1 -1
- package/dist/commands/images/stock.d.ts.map +1 -1
- package/dist/commands/images/stock.js +7 -3
- package/dist/commands/images/stock.js.map +1 -1
- package/dist/engine/client/backend-client.d.ts +50 -0
- package/dist/engine/client/backend-client.d.ts.map +1 -0
- package/dist/engine/client/backend-client.js +20 -0
- package/dist/engine/client/backend-client.js.map +1 -0
- package/dist/engine/client/env.d.ts +7 -0
- package/dist/engine/client/env.d.ts.map +1 -0
- package/dist/engine/client/env.js +18 -0
- package/dist/engine/client/env.js.map +1 -0
- package/dist/engine/client/http.d.ts +56 -0
- package/dist/engine/client/http.d.ts.map +1 -0
- package/dist/engine/client/http.js +168 -0
- package/dist/engine/client/http.js.map +1 -0
- package/dist/engine/engine/cache-key.d.ts +19 -0
- package/dist/engine/engine/cache-key.d.ts.map +1 -0
- package/dist/engine/engine/cache-key.js +33 -0
- package/dist/engine/engine/cache-key.js.map +1 -0
- package/dist/engine/engine/canonical.d.ts +14 -0
- package/dist/engine/engine/canonical.d.ts.map +1 -0
- package/dist/engine/engine/canonical.js +53 -0
- package/dist/engine/engine/canonical.js.map +1 -0
- package/dist/engine/engine/composition-hash.d.ts +14 -0
- package/dist/engine/engine/composition-hash.d.ts.map +1 -0
- package/dist/engine/engine/composition-hash.js +51 -0
- package/dist/engine/engine/composition-hash.js.map +1 -0
- package/dist/engine/engine/composition-meta.d.ts +77 -0
- package/dist/engine/engine/composition-meta.d.ts.map +1 -0
- package/dist/engine/engine/composition-meta.js +199 -0
- package/dist/engine/engine/composition-meta.js.map +1 -0
- package/dist/engine/engine/context.d.ts +16 -0
- package/dist/engine/engine/context.d.ts.map +1 -0
- package/dist/engine/engine/context.js +2 -0
- package/dist/engine/engine/context.js.map +1 -0
- package/dist/engine/engine/define.d.ts +69 -0
- package/dist/engine/engine/define.d.ts.map +1 -0
- package/dist/engine/engine/define.js +9 -0
- package/dist/engine/engine/define.js.map +1 -0
- package/dist/engine/engine/didyoumean.d.ts +2 -0
- package/dist/engine/engine/didyoumean.d.ts.map +1 -0
- package/dist/engine/engine/didyoumean.js +58 -0
- package/dist/engine/engine/didyoumean.js.map +1 -0
- package/dist/engine/engine/errors.d.ts +41 -0
- package/dist/engine/engine/errors.d.ts.map +1 -0
- package/dist/engine/engine/errors.js +45 -0
- package/dist/engine/engine/errors.js.map +1 -0
- package/dist/engine/engine/executor.d.ts +72 -0
- package/dist/engine/engine/executor.d.ts.map +1 -0
- package/dist/engine/engine/executor.js +445 -0
- package/dist/engine/engine/executor.js.map +1 -0
- package/dist/engine/engine/refs.d.ts +12 -0
- package/dist/engine/engine/refs.d.ts.map +1 -0
- package/dist/engine/engine/refs.js +48 -0
- package/dist/engine/engine/refs.js.map +1 -0
- package/dist/engine/engine/registry.d.ts +11 -0
- package/dist/engine/engine/registry.d.ts.map +1 -0
- package/dist/engine/engine/registry.js +26 -0
- package/dist/engine/engine/registry.js.map +1 -0
- package/dist/engine/engine/scheduler.d.ts +10 -0
- package/dist/engine/engine/scheduler.d.ts.map +1 -0
- package/dist/engine/engine/scheduler.js +89 -0
- package/dist/engine/engine/scheduler.js.map +1 -0
- package/dist/engine/engine/validator.d.ts +31 -0
- package/dist/engine/engine/validator.d.ts.map +1 -0
- package/dist/engine/engine/validator.js +501 -0
- package/dist/engine/engine/validator.js.map +1 -0
- package/dist/engine/index.d.ts +33 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +104 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/lib/ulid.d.ts +3 -0
- package/dist/engine/lib/ulid.d.ts.map +1 -0
- package/dist/engine/lib/ulid.js +36 -0
- package/dist/engine/lib/ulid.js.map +1 -0
- package/dist/engine/models/canvas-ad-params.test.d.ts +2 -0
- package/dist/engine/models/canvas-ad-params.test.d.ts.map +1 -0
- package/dist/engine/models/canvas-ad-params.test.js +60 -0
- package/dist/engine/models/canvas-ad-params.test.js.map +1 -0
- package/dist/engine/models/registry.d.ts +63 -0
- package/dist/engine/models/registry.d.ts.map +1 -0
- package/dist/engine/models/registry.js +432 -0
- package/dist/engine/models/registry.js.map +1 -0
- package/dist/engine/models/validateParams.d.ts +38 -0
- package/dist/engine/models/validateParams.d.ts.map +1 -0
- package/dist/engine/models/validateParams.js +166 -0
- package/dist/engine/models/validateParams.js.map +1 -0
- package/dist/engine/nodes/ingest.d.ts +113 -0
- package/dist/engine/nodes/ingest.d.ts.map +1 -0
- package/dist/engine/nodes/ingest.js +555 -0
- package/dist/engine/nodes/ingest.js.map +1 -0
- package/dist/engine/nodes/ingest.svg.test.d.ts +2 -0
- package/dist/engine/nodes/ingest.svg.test.d.ts.map +1 -0
- package/dist/engine/nodes/ingest.svg.test.js +30 -0
- package/dist/engine/nodes/ingest.svg.test.js.map +1 -0
- package/dist/engine/nodes/local/audioTimeline.d.ts +82 -0
- package/dist/engine/nodes/local/audioTimeline.d.ts.map +1 -0
- package/dist/engine/nodes/local/audioTimeline.js +97 -0
- package/dist/engine/nodes/local/audioTimeline.js.map +1 -0
- package/dist/engine/nodes/local/ffmpeg.d.ts +56 -0
- package/dist/engine/nodes/local/ffmpeg.d.ts.map +1 -0
- package/dist/engine/nodes/local/ffmpeg.js +50 -0
- package/dist/engine/nodes/local/ffmpeg.js.map +1 -0
- package/dist/engine/nodes/local/fontSpecimen.d.ts +50 -0
- package/dist/engine/nodes/local/fontSpecimen.d.ts.map +1 -0
- package/dist/engine/nodes/local/fontSpecimen.js +198 -0
- package/dist/engine/nodes/local/fontSpecimen.js.map +1 -0
- package/dist/engine/nodes/local/hyperframe-snapshot.d.ts +116 -0
- package/dist/engine/nodes/local/hyperframe-snapshot.d.ts.map +1 -0
- package/dist/engine/nodes/local/hyperframe-snapshot.js +230 -0
- package/dist/engine/nodes/local/hyperframe-snapshot.js.map +1 -0
- package/dist/engine/nodes/local/hyperframe.d.ts +123 -0
- package/dist/engine/nodes/local/hyperframe.d.ts.map +1 -0
- package/dist/engine/nodes/local/hyperframe.js +367 -0
- package/dist/engine/nodes/local/hyperframe.js.map +1 -0
- package/dist/engine/nodes/local/imagemagick.d.ts +56 -0
- package/dist/engine/nodes/local/imagemagick.d.ts.map +1 -0
- package/dist/engine/nodes/local/imagemagick.js +71 -0
- package/dist/engine/nodes/local/imagemagick.js.map +1 -0
- package/dist/engine/nodes/local/lib/assets.d.ts +20 -0
- package/dist/engine/nodes/local/lib/assets.d.ts.map +1 -0
- package/dist/engine/nodes/local/lib/assets.js +40 -0
- package/dist/engine/nodes/local/lib/assets.js.map +1 -0
- package/dist/engine/nodes/local/lib/cli-runner.d.ts +78 -0
- package/dist/engine/nodes/local/lib/cli-runner.d.ts.map +1 -0
- package/dist/engine/nodes/local/lib/cli-runner.js +254 -0
- package/dist/engine/nodes/local/lib/cli-runner.js.map +1 -0
- package/dist/engine/nodes/local/lib/ffmpeg.d.ts +23 -0
- package/dist/engine/nodes/local/lib/ffmpeg.d.ts.map +1 -0
- package/dist/engine/nodes/local/lib/ffmpeg.js +75 -0
- package/dist/engine/nodes/local/lib/ffmpeg.js.map +1 -0
- package/dist/engine/nodes/local/lib/hyperframe-errors.d.ts +2 -0
- package/dist/engine/nodes/local/lib/hyperframe-errors.d.ts.map +1 -0
- package/dist/engine/nodes/local/lib/hyperframe-errors.js +47 -0
- package/dist/engine/nodes/local/lib/hyperframe-errors.js.map +1 -0
- package/dist/engine/nodes/local/lib/templating.d.ts +22 -0
- package/dist/engine/nodes/local/lib/templating.d.ts.map +1 -0
- package/dist/engine/nodes/local/lib/templating.js +85 -0
- package/dist/engine/nodes/local/lib/templating.js.map +1 -0
- package/dist/engine/nodes/local/text.d.ts +6 -0
- package/dist/engine/nodes/local/text.d.ts.map +1 -0
- package/dist/engine/nodes/local/text.js +15 -0
- package/dist/engine/nodes/local/text.js.map +1 -0
- package/dist/engine/nodes/remote/delegate.d.ts +25 -0
- package/dist/engine/nodes/remote/delegate.d.ts.map +1 -0
- package/dist/engine/nodes/remote/delegate.js +160 -0
- package/dist/engine/nodes/remote/delegate.js.map +1 -0
- package/dist/engine/nodes/remote/dialogue.d.ts +34 -0
- package/dist/engine/nodes/remote/dialogue.d.ts.map +1 -0
- package/dist/engine/nodes/remote/dialogue.js +54 -0
- package/dist/engine/nodes/remote/dialogue.js.map +1 -0
- package/dist/engine/nodes/remote/image.d.ts +42 -0
- package/dist/engine/nodes/remote/image.d.ts.map +1 -0
- package/dist/engine/nodes/remote/image.js +43 -0
- package/dist/engine/nodes/remote/image.js.map +1 -0
- package/dist/engine/nodes/remote/imageAspectAdapt.d.ts +30 -0
- package/dist/engine/nodes/remote/imageAspectAdapt.d.ts.map +1 -0
- package/dist/engine/nodes/remote/imageAspectAdapt.js +42 -0
- package/dist/engine/nodes/remote/imageAspectAdapt.js.map +1 -0
- package/dist/engine/nodes/remote/imageBackgroundRemove.d.ts +39 -0
- package/dist/engine/nodes/remote/imageBackgroundRemove.d.ts.map +1 -0
- package/dist/engine/nodes/remote/imageBackgroundRemove.js +37 -0
- package/dist/engine/nodes/remote/imageBackgroundRemove.js.map +1 -0
- package/dist/engine/nodes/remote/imageDescribe.d.ts +29 -0
- package/dist/engine/nodes/remote/imageDescribe.d.ts.map +1 -0
- package/dist/engine/nodes/remote/imageDescribe.js +25 -0
- package/dist/engine/nodes/remote/imageDescribe.js.map +1 -0
- package/dist/engine/nodes/remote/imageReferenceSheet.d.ts +34 -0
- package/dist/engine/nodes/remote/imageReferenceSheet.d.ts.map +1 -0
- package/dist/engine/nodes/remote/imageReferenceSheet.js +38 -0
- package/dist/engine/nodes/remote/imageReferenceSheet.js.map +1 -0
- package/dist/engine/nodes/remote/imageSearch.d.ts +18 -0
- package/dist/engine/nodes/remote/imageSearch.d.ts.map +1 -0
- package/dist/engine/nodes/remote/imageSearch.js +22 -0
- package/dist/engine/nodes/remote/imageSearch.js.map +1 -0
- package/dist/engine/nodes/remote/imageSelect.d.ts +39 -0
- package/dist/engine/nodes/remote/imageSelect.d.ts.map +1 -0
- package/dist/engine/nodes/remote/imageSelect.js +45 -0
- package/dist/engine/nodes/remote/imageSelect.js.map +1 -0
- package/dist/engine/nodes/remote/music.d.ts +45 -0
- package/dist/engine/nodes/remote/music.d.ts.map +1 -0
- package/dist/engine/nodes/remote/music.js +73 -0
- package/dist/engine/nodes/remote/music.js.map +1 -0
- package/dist/engine/nodes/remote/soundEffect.d.ts +21 -0
- package/dist/engine/nodes/remote/soundEffect.d.ts.map +1 -0
- package/dist/engine/nodes/remote/soundEffect.js +41 -0
- package/dist/engine/nodes/remote/soundEffect.js.map +1 -0
- package/dist/engine/nodes/remote/textGenerate.d.ts +21 -0
- package/dist/engine/nodes/remote/textGenerate.d.ts.map +1 -0
- package/dist/engine/nodes/remote/textGenerate.js +27 -0
- package/dist/engine/nodes/remote/textGenerate.js.map +1 -0
- package/dist/engine/nodes/remote/tts.d.ts +45 -0
- package/dist/engine/nodes/remote/tts.d.ts.map +1 -0
- package/dist/engine/nodes/remote/tts.js +66 -0
- package/dist/engine/nodes/remote/tts.js.map +1 -0
- package/dist/engine/nodes/remote/video.d.ts +58 -0
- package/dist/engine/nodes/remote/video.d.ts.map +1 -0
- package/dist/engine/nodes/remote/video.js +44 -0
- package/dist/engine/nodes/remote/video.js.map +1 -0
- package/dist/engine/nodes/remote/videoBackgroundRemove.d.ts +30 -0
- package/dist/engine/nodes/remote/videoBackgroundRemove.d.ts.map +1 -0
- package/dist/engine/nodes/remote/videoBackgroundRemove.js +29 -0
- package/dist/engine/nodes/remote/videoBackgroundRemove.js.map +1 -0
- package/dist/engine/nodes/remote/videoDeconstruct.d.ts +61 -0
- package/dist/engine/nodes/remote/videoDeconstruct.d.ts.map +1 -0
- package/dist/engine/nodes/remote/videoDeconstruct.js +40 -0
- package/dist/engine/nodes/remote/videoDeconstruct.js.map +1 -0
- package/dist/engine/nodes/remote/videoLipsync.d.ts +37 -0
- package/dist/engine/nodes/remote/videoLipsync.d.ts.map +1 -0
- package/dist/engine/nodes/remote/videoLipsync.js +26 -0
- package/dist/engine/nodes/remote/videoLipsync.js.map +1 -0
- package/dist/engine/nodes/remote/videoTranscribe.d.ts +116 -0
- package/dist/engine/nodes/remote/videoTranscribe.d.ts.map +1 -0
- package/dist/engine/nodes/remote/videoTranscribe.js +123 -0
- package/dist/engine/nodes/remote/videoTranscribe.js.map +1 -0
- package/dist/engine/nodes/remote/voiceSelect.d.ts +28 -0
- package/dist/engine/nodes/remote/voiceSelect.d.ts.map +1 -0
- package/dist/engine/nodes/remote/voiceSelect.js +25 -0
- package/dist/engine/nodes/remote/voiceSelect.js.map +1 -0
- package/dist/engine/scaffold/staticAd.d.ts +44 -0
- package/dist/engine/scaffold/staticAd.d.ts.map +1 -0
- package/dist/engine/scaffold/staticAd.js +243 -0
- package/dist/engine/scaffold/staticAd.js.map +1 -0
- package/dist/engine/scaffold/video.d.ts +56 -0
- package/dist/engine/scaffold/video.d.ts.map +1 -0
- package/dist/engine/scaffold/video.js +709 -0
- package/dist/engine/scaffold/video.js.map +1 -0
- package/dist/engine/schema/canvas.d.ts +41 -0
- package/dist/engine/schema/canvas.d.ts.map +1 -0
- package/dist/engine/schema/canvas.js +67 -0
- package/dist/engine/schema/canvas.js.map +1 -0
- package/dist/engine/schema/catalog.d.ts +25 -0
- package/dist/engine/schema/catalog.d.ts.map +1 -0
- package/dist/engine/schema/catalog.js +48 -0
- package/dist/engine/schema/catalog.js.map +1 -0
- package/dist/engine/schema/primitives.d.ts +6 -0
- package/dist/engine/schema/primitives.d.ts.map +1 -0
- package/dist/engine/schema/primitives.js +4 -0
- package/dist/engine/schema/primitives.js.map +1 -0
- package/dist/engine/schema/prompts.d.ts +4 -0
- package/dist/engine/schema/prompts.d.ts.map +1 -0
- package/dist/engine/schema/prompts.js +23 -0
- package/dist/engine/schema/prompts.js.map +1 -0
- package/dist/engine/schema/refs.d.ts +113 -0
- package/dist/engine/schema/refs.d.ts.map +1 -0
- package/dist/engine/schema/refs.js +35 -0
- package/dist/engine/schema/refs.js.map +1 -0
- package/dist/engine/storage/asset-store.d.ts +48 -0
- package/dist/engine/storage/asset-store.d.ts.map +1 -0
- package/dist/engine/storage/asset-store.js +166 -0
- package/dist/engine/storage/asset-store.js.map +1 -0
- package/dist/engine/storage/cache-store.d.ts +21 -0
- package/dist/engine/storage/cache-store.d.ts.map +1 -0
- package/dist/engine/storage/cache-store.js +31 -0
- package/dist/engine/storage/cache-store.js.map +1 -0
- package/dist/engine/storage/output-writer.d.ts +18 -0
- package/dist/engine/storage/output-writer.d.ts.map +1 -0
- package/dist/engine/storage/output-writer.js +52 -0
- package/dist/engine/storage/output-writer.js.map +1 -0
- package/dist/engine/storage/sha256.d.ts +2 -0
- package/dist/engine/storage/sha256.d.ts.map +1 -0
- package/dist/engine/storage/sha256.js +7 -0
- package/dist/engine/storage/sha256.js.map +1 -0
- package/package.json +15 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/engine/client/http.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
type CacheKeyInputs = {
|
|
2
|
+
node_id: string;
|
|
3
|
+
node_version: string;
|
|
4
|
+
params: unknown;
|
|
5
|
+
input_hashes: Record<string, string | string[]>;
|
|
6
|
+
cache_salt?: string;
|
|
7
|
+
/**
|
|
8
|
+
* Extra string fields folded into the cache key alongside `params`. Used
|
|
9
|
+
* by nodes whose output depends on external content not captured by params
|
|
10
|
+
* — e.g. `hyperframe_render` adds `composition_content_sha` so editing a
|
|
11
|
+
* composition's HTML or CSS invalidates the cache automatically.
|
|
12
|
+
*
|
|
13
|
+
* Keys are sorted before hashing to keep the key stable.
|
|
14
|
+
*/
|
|
15
|
+
extras?: Record<string, string>;
|
|
16
|
+
};
|
|
17
|
+
export declare function computeCacheKey(inputs: CacheKeyInputs): string;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=cache-key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-key.d.ts","sourceRoot":"","sources":["../../../src/engine/engine/cache-key.ts"],"names":[],"mappings":"AAGA,KAAK,cAAc,GAAG;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACjC,CAAC;AAEF,wBAAgB,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA2B9D"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { sha256Hex } from "../storage/sha256.js";
|
|
2
|
+
import { canonicalize } from "./canonical.js";
|
|
3
|
+
export function computeCacheKey(inputs) {
|
|
4
|
+
// Sort the input_hashes keys explicitly — canonicalize sorts, but we also
|
|
5
|
+
// freeze the input shape so callers can pass any record without surprises.
|
|
6
|
+
const sortedInputs = {};
|
|
7
|
+
for (const key of Object.keys(inputs.input_hashes).sort()) {
|
|
8
|
+
const v = inputs.input_hashes[key];
|
|
9
|
+
if (v === undefined)
|
|
10
|
+
continue;
|
|
11
|
+
sortedInputs[key] = Array.isArray(v) ? [...v] : v;
|
|
12
|
+
}
|
|
13
|
+
let sortedExtras;
|
|
14
|
+
if (inputs.extras && Object.keys(inputs.extras).length > 0) {
|
|
15
|
+
sortedExtras = {};
|
|
16
|
+
for (const key of Object.keys(inputs.extras).sort()) {
|
|
17
|
+
const v = inputs.extras[key];
|
|
18
|
+
if (v === undefined)
|
|
19
|
+
continue;
|
|
20
|
+
sortedExtras[key] = v;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const payload = {
|
|
24
|
+
node_id: inputs.node_id,
|
|
25
|
+
node_version: inputs.node_version,
|
|
26
|
+
params: inputs.params,
|
|
27
|
+
input_hashes: sortedInputs,
|
|
28
|
+
cache_salt: inputs.cache_salt,
|
|
29
|
+
extras: sortedExtras,
|
|
30
|
+
};
|
|
31
|
+
return sha256Hex(canonicalize(payload));
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=cache-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-key.js","sourceRoot":"","sources":["../../../src/engine/engine/cache-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAmB9C,MAAM,UAAU,eAAe,CAAC,MAAsB;IACpD,0EAA0E;IAC1E,2EAA2E;IAC3E,MAAM,YAAY,GAAsC,EAAE,CAAC;IAC3D,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1D,MAAM,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK,SAAS;YAAE,SAAS;QAC9B,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,YAAgD,CAAC;IACrD,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3D,YAAY,GAAG,EAAE,CAAC;QAClB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACpD,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,KAAK,SAAS;gBAAE,SAAS;YAC9B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAG;QACd,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,YAAY,EAAE,YAAY;QAC1B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,MAAM,EAAE,YAAY;KACrB,CAAC;IACF,OAAO,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic JSON encoding for cache keys.
|
|
3
|
+
*
|
|
4
|
+
* Rules (locked — drift breaks all caches):
|
|
5
|
+
* 1. Object keys sorted alphabetically (codepoint order, locale-independent).
|
|
6
|
+
* 2. No whitespace.
|
|
7
|
+
* 3. `undefined` values and entries are dropped (not serialized as null).
|
|
8
|
+
* 4. Strings are NFC-normalized before encoding.
|
|
9
|
+
* 5. Numbers use the shortest representation (V8 default; we don't post-process).
|
|
10
|
+
* 6. `NaN` and `±Infinity` throw — explicit reject, never silently encode.
|
|
11
|
+
* 7. Arrays preserve order.
|
|
12
|
+
*/
|
|
13
|
+
export declare function canonicalize(value: unknown): string;
|
|
14
|
+
//# sourceMappingURL=canonical.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.d.ts","sourceRoot":"","sources":["../../../src/engine/engine/canonical.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAOnD"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import stableStringify from "safe-stable-stringify";
|
|
2
|
+
/**
|
|
3
|
+
* Deterministic JSON encoding for cache keys.
|
|
4
|
+
*
|
|
5
|
+
* Rules (locked — drift breaks all caches):
|
|
6
|
+
* 1. Object keys sorted alphabetically (codepoint order, locale-independent).
|
|
7
|
+
* 2. No whitespace.
|
|
8
|
+
* 3. `undefined` values and entries are dropped (not serialized as null).
|
|
9
|
+
* 4. Strings are NFC-normalized before encoding.
|
|
10
|
+
* 5. Numbers use the shortest representation (V8 default; we don't post-process).
|
|
11
|
+
* 6. `NaN` and `±Infinity` throw — explicit reject, never silently encode.
|
|
12
|
+
* 7. Arrays preserve order.
|
|
13
|
+
*/
|
|
14
|
+
export function canonicalize(value) {
|
|
15
|
+
const normalized = normalizeForCanonical(value);
|
|
16
|
+
const out = stableStringify(normalized);
|
|
17
|
+
if (out === undefined) {
|
|
18
|
+
throw new Error("canonicalize: value serialized to undefined (top-level undefined?)");
|
|
19
|
+
}
|
|
20
|
+
return out;
|
|
21
|
+
}
|
|
22
|
+
function normalizeForCanonical(value) {
|
|
23
|
+
if (value === null)
|
|
24
|
+
return null;
|
|
25
|
+
if (typeof value === "string")
|
|
26
|
+
return value.normalize("NFC");
|
|
27
|
+
if (typeof value === "number") {
|
|
28
|
+
if (!Number.isFinite(value)) {
|
|
29
|
+
throw new Error(`canonicalize: non-finite number ${value}`);
|
|
30
|
+
}
|
|
31
|
+
return value;
|
|
32
|
+
}
|
|
33
|
+
if (typeof value === "boolean")
|
|
34
|
+
return value;
|
|
35
|
+
if (typeof value === "bigint") {
|
|
36
|
+
throw new Error("canonicalize: bigint not supported");
|
|
37
|
+
}
|
|
38
|
+
if (Array.isArray(value)) {
|
|
39
|
+
return value.map(normalizeForCanonical);
|
|
40
|
+
}
|
|
41
|
+
if (typeof value === "object") {
|
|
42
|
+
const out = {};
|
|
43
|
+
for (const [k, v] of Object.entries(value)) {
|
|
44
|
+
if (v === undefined)
|
|
45
|
+
continue;
|
|
46
|
+
out[k.normalize("NFC")] = normalizeForCanonical(v);
|
|
47
|
+
}
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
// undefined, function, symbol — drop
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=canonical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical.js","sourceRoot":"","sources":["../../../src/engine/engine/canonical.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,uBAAuB,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,MAAM,UAAU,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IACxC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;IACxF,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc;IAC3C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC7D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,mCAAmC,KAAK,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,KAAK,SAAS;gBAAE,SAAS;YAC9B,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,qCAAqC;IACrC,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compute a deterministic content-addressed hash of every relevant file under
|
|
3
|
+
* `dir`. Hash layout:
|
|
4
|
+
*
|
|
5
|
+
* sha256("<rel/path>\0<file-sha256>\n<rel/path>\0<file-sha256>\n...")
|
|
6
|
+
*
|
|
7
|
+
* Entries are sorted by relative path so the result is stable regardless of
|
|
8
|
+
* filesystem-walk order. Returns a hex sha256 string.
|
|
9
|
+
*
|
|
10
|
+
* Used by the executor to fold composition content into the cache key — any
|
|
11
|
+
* edit to a tracked file invalidates the hyperframe_render cache entry.
|
|
12
|
+
*/
|
|
13
|
+
export declare function hashCompositionDir(dir: string): Promise<string>;
|
|
14
|
+
//# sourceMappingURL=composition-hash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composition-hash.d.ts","sourceRoot":"","sources":["../../../src/engine/engine/composition-hash.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKrE"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { readdir, readFile, stat } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { sha256Hex } from "../storage/sha256.js";
|
|
4
|
+
// Skip transient/build artefacts when hashing — these aren't part of the
|
|
5
|
+
// composition's source-of-truth and would either thrash the cache (.cache,
|
|
6
|
+
// node_modules) or pollute the hash with editor noise (.DS_Store, .swp).
|
|
7
|
+
const SKIP_DIRS = new Set([".cache", ".git", "node_modules", "dist", "build", ".next", ".turbo"]);
|
|
8
|
+
function isSkippedName(name) {
|
|
9
|
+
if (name.startsWith("."))
|
|
10
|
+
return true; // .DS_Store, dotfiles
|
|
11
|
+
return SKIP_DIRS.has(name);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Compute a deterministic content-addressed hash of every relevant file under
|
|
15
|
+
* `dir`. Hash layout:
|
|
16
|
+
*
|
|
17
|
+
* sha256("<rel/path>\0<file-sha256>\n<rel/path>\0<file-sha256>\n...")
|
|
18
|
+
*
|
|
19
|
+
* Entries are sorted by relative path so the result is stable regardless of
|
|
20
|
+
* filesystem-walk order. Returns a hex sha256 string.
|
|
21
|
+
*
|
|
22
|
+
* Used by the executor to fold composition content into the cache key — any
|
|
23
|
+
* edit to a tracked file invalidates the hyperframe_render cache entry.
|
|
24
|
+
*/
|
|
25
|
+
export async function hashCompositionDir(dir) {
|
|
26
|
+
const entries = await collectFiles(dir, dir);
|
|
27
|
+
entries.sort((a, b) => a.relPath.localeCompare(b.relPath));
|
|
28
|
+
const manifest = entries.map((e) => `${e.relPath}\0${e.contentSha}`).join("\n");
|
|
29
|
+
return sha256Hex(manifest);
|
|
30
|
+
}
|
|
31
|
+
async function collectFiles(root, current) {
|
|
32
|
+
const out = [];
|
|
33
|
+
const names = await readdir(current);
|
|
34
|
+
for (const name of names) {
|
|
35
|
+
if (isSkippedName(name))
|
|
36
|
+
continue;
|
|
37
|
+
const abs = path.join(current, name);
|
|
38
|
+
const s = await stat(abs);
|
|
39
|
+
if (s.isDirectory()) {
|
|
40
|
+
out.push(...(await collectFiles(root, abs)));
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
if (!s.isFile())
|
|
44
|
+
continue;
|
|
45
|
+
const bytes = await readFile(abs);
|
|
46
|
+
const relPath = path.relative(root, abs).split(path.sep).join("/");
|
|
47
|
+
out.push({ relPath, contentSha: sha256Hex(bytes) });
|
|
48
|
+
}
|
|
49
|
+
return out;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=composition-hash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composition-hash.js","sourceRoot":"","sources":["../../../src/engine/engine/composition-hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,yEAAyE;AACzE,2EAA2E;AAC3E,yEAAyE;AACzE,MAAM,SAAS,GAAwB,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEvH,SAAS,aAAa,CAAC,IAAY;IACjC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,sBAAsB;IAC7D,OAAO,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAID;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,GAAW;IAClD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChF,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,OAAe;IACvD,MAAM,GAAG,GAAgB,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,aAAa,CAAC,IAAI,CAAC;YAAE,SAAS;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACpB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YAC7C,SAAS;QACX,CAAC;QACD,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE;YAAE,SAAS;QAC1B,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnE,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const CompositionMetaSchema: z.ZodObject<{
|
|
3
|
+
id: z.ZodString;
|
|
4
|
+
title: z.ZodString;
|
|
5
|
+
description: z.ZodOptional<z.ZodString>;
|
|
6
|
+
width: z.ZodNumber;
|
|
7
|
+
height: z.ZodNumber;
|
|
8
|
+
fps: z.ZodDefault<z.ZodNumber>;
|
|
9
|
+
default_duration: z.ZodDefault<z.ZodNumber>;
|
|
10
|
+
inputs: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
11
|
+
kind: z.ZodEnum<{
|
|
12
|
+
json: "json";
|
|
13
|
+
video: "video";
|
|
14
|
+
image: "image";
|
|
15
|
+
audio: "audio";
|
|
16
|
+
}>;
|
|
17
|
+
required: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
18
|
+
staged_as: z.ZodOptional<z.ZodString>;
|
|
19
|
+
description: z.ZodOptional<z.ZodString>;
|
|
20
|
+
}, z.core.$strict>>>;
|
|
21
|
+
params: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
22
|
+
kind: z.ZodLiteral<"string">;
|
|
23
|
+
default: z.ZodOptional<z.ZodString>;
|
|
24
|
+
enum: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
25
|
+
required: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
26
|
+
description: z.ZodOptional<z.ZodString>;
|
|
27
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
28
|
+
kind: z.ZodLiteral<"integer">;
|
|
29
|
+
default: z.ZodOptional<z.ZodNumber>;
|
|
30
|
+
min: z.ZodOptional<z.ZodNumber>;
|
|
31
|
+
max: z.ZodOptional<z.ZodNumber>;
|
|
32
|
+
required: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
33
|
+
description: z.ZodOptional<z.ZodString>;
|
|
34
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
35
|
+
kind: z.ZodLiteral<"number">;
|
|
36
|
+
default: z.ZodOptional<z.ZodNumber>;
|
|
37
|
+
min: z.ZodOptional<z.ZodNumber>;
|
|
38
|
+
max: z.ZodOptional<z.ZodNumber>;
|
|
39
|
+
required: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
40
|
+
description: z.ZodOptional<z.ZodString>;
|
|
41
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
42
|
+
kind: z.ZodLiteral<"boolean">;
|
|
43
|
+
default: z.ZodOptional<z.ZodBoolean>;
|
|
44
|
+
required: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
45
|
+
description: z.ZodOptional<z.ZodString>;
|
|
46
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
47
|
+
kind: z.ZodLiteral<"color">;
|
|
48
|
+
default: z.ZodOptional<z.ZodString>;
|
|
49
|
+
required: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
50
|
+
description: z.ZodOptional<z.ZodString>;
|
|
51
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
52
|
+
kind: z.ZodLiteral<"image">;
|
|
53
|
+
default: z.ZodOptional<z.ZodString>;
|
|
54
|
+
required: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
55
|
+
description: z.ZodOptional<z.ZodString>;
|
|
56
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
57
|
+
kind: z.ZodLiteral<"json">;
|
|
58
|
+
schema: z.ZodOptional<z.ZodUnknown>;
|
|
59
|
+
default: z.ZodOptional<z.ZodUnknown>;
|
|
60
|
+
required: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
61
|
+
description: z.ZodOptional<z.ZodString>;
|
|
62
|
+
}, z.core.$strict>], "kind">>>;
|
|
63
|
+
}, z.core.$strict>;
|
|
64
|
+
export type CompositionMeta = z.infer<typeof CompositionMetaSchema>;
|
|
65
|
+
export declare function loadCompositionMeta(compositionDir: string): Promise<CompositionMeta>;
|
|
66
|
+
/**
|
|
67
|
+
* Build a Zod schema for the params declared in `meta.json`. Used to validate
|
|
68
|
+
* the canvas's `params` payload at validate-time and execute-time.
|
|
69
|
+
*
|
|
70
|
+
* Output schema is a `z.object().strict()` — unknown keys are rejected so
|
|
71
|
+
* typos surface immediately. Params with a `default` are made optional and
|
|
72
|
+
* Zod fills the default; required params without defaults must be provided.
|
|
73
|
+
*/
|
|
74
|
+
export declare function buildParamsSchema(meta: CompositionMeta): z.ZodObject;
|
|
75
|
+
/** Default filename for an input — the composition can override via `staged_as`. */
|
|
76
|
+
export declare function defaultFilenameForInput(key: string, kind: "video" | "image" | "audio" | "json"): string;
|
|
77
|
+
//# sourceMappingURL=composition-meta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composition-meta.d.ts","sourceRoot":"","sources":["../../../src/engine/engine/composition-meta.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAqGxB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAYvB,CAAC;AAEZ,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE,wBAAsB,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAoB1F;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,CAAC,CAAC,SAAS,CAMpE;AAmDD,oFAAoF;AACpF,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAKvG"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
// One source of truth per composition: meta.json.
|
|
5
|
+
//
|
|
6
|
+
// The composition declares its inputs (videos/images/audios it expects staged
|
|
7
|
+
// into the render directory) and params (everything you can pass via {{var}}).
|
|
8
|
+
// The hyperframe_render and hyperframe_snapshot nodes load this file, build a
|
|
9
|
+
// per-call Zod schema, and validate the canvas's `params` against it.
|
|
10
|
+
const InputKind = z.enum(["video", "image", "audio", "json"]);
|
|
11
|
+
const InputSpec = z
|
|
12
|
+
.object({
|
|
13
|
+
kind: InputKind,
|
|
14
|
+
required: z.boolean().optional().default(false),
|
|
15
|
+
// Filename the composition's HTML references (e.g. `input.mp4`, `logo.png`).
|
|
16
|
+
// Defaults to `<key><ext>` derived from the kind.
|
|
17
|
+
staged_as: z.string().min(1).optional(),
|
|
18
|
+
description: z.string().optional(),
|
|
19
|
+
})
|
|
20
|
+
.strict();
|
|
21
|
+
const ParamSpecBase = {
|
|
22
|
+
required: z.boolean().optional().default(false),
|
|
23
|
+
description: z.string().optional(),
|
|
24
|
+
};
|
|
25
|
+
const StringParam = z
|
|
26
|
+
.object({
|
|
27
|
+
...ParamSpecBase,
|
|
28
|
+
kind: z.literal("string"),
|
|
29
|
+
default: z.string().optional(),
|
|
30
|
+
enum: z.array(z.string()).optional(),
|
|
31
|
+
})
|
|
32
|
+
.strict();
|
|
33
|
+
const IntegerParam = z
|
|
34
|
+
.object({
|
|
35
|
+
...ParamSpecBase,
|
|
36
|
+
kind: z.literal("integer"),
|
|
37
|
+
default: z.number().int().optional(),
|
|
38
|
+
min: z.number().int().optional(),
|
|
39
|
+
max: z.number().int().optional(),
|
|
40
|
+
})
|
|
41
|
+
.strict();
|
|
42
|
+
const NumberParam = z
|
|
43
|
+
.object({
|
|
44
|
+
...ParamSpecBase,
|
|
45
|
+
kind: z.literal("number"),
|
|
46
|
+
default: z.number().optional(),
|
|
47
|
+
min: z.number().optional(),
|
|
48
|
+
max: z.number().optional(),
|
|
49
|
+
})
|
|
50
|
+
.strict();
|
|
51
|
+
const BooleanParam = z
|
|
52
|
+
.object({
|
|
53
|
+
...ParamSpecBase,
|
|
54
|
+
kind: z.literal("boolean"),
|
|
55
|
+
default: z.boolean().optional(),
|
|
56
|
+
})
|
|
57
|
+
.strict();
|
|
58
|
+
const ColorParam = z
|
|
59
|
+
.object({
|
|
60
|
+
...ParamSpecBase,
|
|
61
|
+
kind: z.literal("color"),
|
|
62
|
+
default: z.string().optional(),
|
|
63
|
+
})
|
|
64
|
+
.strict();
|
|
65
|
+
const ImageParam = z
|
|
66
|
+
.object({
|
|
67
|
+
...ParamSpecBase,
|
|
68
|
+
kind: z.literal("image"),
|
|
69
|
+
default: z.string().optional(),
|
|
70
|
+
})
|
|
71
|
+
.strict();
|
|
72
|
+
const JsonParam = z
|
|
73
|
+
.object({
|
|
74
|
+
...ParamSpecBase,
|
|
75
|
+
kind: z.literal("json"),
|
|
76
|
+
schema: z.unknown().optional(),
|
|
77
|
+
default: z.unknown().optional(),
|
|
78
|
+
})
|
|
79
|
+
.strict();
|
|
80
|
+
const ParamSpec = z.discriminatedUnion("kind", [
|
|
81
|
+
StringParam,
|
|
82
|
+
IntegerParam,
|
|
83
|
+
NumberParam,
|
|
84
|
+
BooleanParam,
|
|
85
|
+
ColorParam,
|
|
86
|
+
ImageParam,
|
|
87
|
+
JsonParam,
|
|
88
|
+
]);
|
|
89
|
+
export const CompositionMetaSchema = z
|
|
90
|
+
.object({
|
|
91
|
+
id: z.string().min(1),
|
|
92
|
+
title: z.string().min(1),
|
|
93
|
+
description: z.string().optional(),
|
|
94
|
+
width: z.number().int().positive(),
|
|
95
|
+
height: z.number().int().positive(),
|
|
96
|
+
fps: z.number().int().positive().default(30),
|
|
97
|
+
default_duration: z.number().positive().default(10),
|
|
98
|
+
inputs: z.record(z.string(), InputSpec).default({}),
|
|
99
|
+
params: z.record(z.string(), ParamSpec).default({}),
|
|
100
|
+
})
|
|
101
|
+
.strict();
|
|
102
|
+
export async function loadCompositionMeta(compositionDir) {
|
|
103
|
+
const metaPath = path.join(compositionDir, "meta.json");
|
|
104
|
+
let raw;
|
|
105
|
+
try {
|
|
106
|
+
raw = await readFile(metaPath, "utf-8");
|
|
107
|
+
}
|
|
108
|
+
catch (e) {
|
|
109
|
+
throw new Error(`composition meta: cannot read ${metaPath} (${e.message})`);
|
|
110
|
+
}
|
|
111
|
+
let parsed;
|
|
112
|
+
try {
|
|
113
|
+
parsed = JSON.parse(raw);
|
|
114
|
+
}
|
|
115
|
+
catch (e) {
|
|
116
|
+
throw new Error(`composition meta: ${metaPath} is not valid JSON (${e.message})`);
|
|
117
|
+
}
|
|
118
|
+
const result = CompositionMetaSchema.safeParse(parsed);
|
|
119
|
+
if (!result.success) {
|
|
120
|
+
const summary = result.error.issues.map((i) => `${i.path.join(".")}: ${i.message}`).join("; ");
|
|
121
|
+
throw new Error(`composition meta: ${metaPath} schema error — ${summary}`);
|
|
122
|
+
}
|
|
123
|
+
return result.data;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Build a Zod schema for the params declared in `meta.json`. Used to validate
|
|
127
|
+
* the canvas's `params` payload at validate-time and execute-time.
|
|
128
|
+
*
|
|
129
|
+
* Output schema is a `z.object().strict()` — unknown keys are rejected so
|
|
130
|
+
* typos surface immediately. Params with a `default` are made optional and
|
|
131
|
+
* Zod fills the default; required params without defaults must be provided.
|
|
132
|
+
*/
|
|
133
|
+
export function buildParamsSchema(meta) {
|
|
134
|
+
const shape = {};
|
|
135
|
+
for (const [name, spec] of Object.entries(meta.params)) {
|
|
136
|
+
shape[name] = buildParamFieldSchema(name, spec);
|
|
137
|
+
}
|
|
138
|
+
return z.object(shape).strict();
|
|
139
|
+
}
|
|
140
|
+
function buildParamFieldSchema(name, spec) {
|
|
141
|
+
switch (spec.kind) {
|
|
142
|
+
case "string": {
|
|
143
|
+
const s = spec.enum && spec.enum.length > 0 ? z.enum(spec.enum) : z.string();
|
|
144
|
+
return finalize(s, spec.default, spec.required);
|
|
145
|
+
}
|
|
146
|
+
case "integer": {
|
|
147
|
+
let s = z.number().int();
|
|
148
|
+
if (spec.min !== undefined)
|
|
149
|
+
s = s.min(spec.min);
|
|
150
|
+
if (spec.max !== undefined)
|
|
151
|
+
s = s.max(spec.max);
|
|
152
|
+
return finalize(s, spec.default, spec.required);
|
|
153
|
+
}
|
|
154
|
+
case "number": {
|
|
155
|
+
let s = z.number();
|
|
156
|
+
if (spec.min !== undefined)
|
|
157
|
+
s = s.min(spec.min);
|
|
158
|
+
if (spec.max !== undefined)
|
|
159
|
+
s = s.max(spec.max);
|
|
160
|
+
return finalize(s, spec.default, spec.required);
|
|
161
|
+
}
|
|
162
|
+
case "boolean":
|
|
163
|
+
return finalize(z.boolean(), spec.default, spec.required);
|
|
164
|
+
case "color": {
|
|
165
|
+
const s = z.string().regex(/^#(?:[0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/, {
|
|
166
|
+
message: `param "${name}": must be a 3/6/8-digit hex color (e.g. "#ff0066")`,
|
|
167
|
+
});
|
|
168
|
+
return finalize(s, spec.default, spec.required);
|
|
169
|
+
}
|
|
170
|
+
case "image":
|
|
171
|
+
// Accept a URL string or an AssetRef-shaped object — node coerces to URL
|
|
172
|
+
// string before substitution.
|
|
173
|
+
return finalize(z.union([z.string().min(1), z.record(z.string(), z.unknown())]), spec.default, spec.required);
|
|
174
|
+
case "json":
|
|
175
|
+
return finalize(z.unknown().refine((v) => v !== undefined, { message: `param "${name}" is required` }), spec.default, spec.required);
|
|
176
|
+
default: {
|
|
177
|
+
const _exhaustive = spec;
|
|
178
|
+
throw new Error(`buildParamFieldSchema: unknown kind ${_exhaustive.kind}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
function finalize(schema, dflt, required) {
|
|
183
|
+
if (dflt !== undefined)
|
|
184
|
+
return schema.optional().default(dflt);
|
|
185
|
+
if (required === false)
|
|
186
|
+
return schema.optional();
|
|
187
|
+
return schema;
|
|
188
|
+
}
|
|
189
|
+
/** Default filename for an input — the composition can override via `staged_as`. */
|
|
190
|
+
export function defaultFilenameForInput(key, kind) {
|
|
191
|
+
if (kind === "video")
|
|
192
|
+
return `${key}.mp4`;
|
|
193
|
+
if (kind === "audio")
|
|
194
|
+
return `${key}.mp3`;
|
|
195
|
+
if (kind === "json")
|
|
196
|
+
return `${key}.json`;
|
|
197
|
+
return `${key}.png`;
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=composition-meta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composition-meta.js","sourceRoot":"","sources":["../../../src/engine/engine/composition-meta.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { BackendClient } from "../client/backend-client.ts";
|
|
2
|
+
import type { AssetStore } from "../storage/asset-store.ts";
|
|
3
|
+
export type LogFn = (line: string) => void;
|
|
4
|
+
export type ExecCtx = {
|
|
5
|
+
canvasRunId: string;
|
|
6
|
+
nodeId: string;
|
|
7
|
+
nodeType: string;
|
|
8
|
+
/** Content-addressed cache key for this node execution. Remote delegation
|
|
9
|
+
* derives its idempotency key from it so backend retries never double-charge. */
|
|
10
|
+
cacheKey?: string;
|
|
11
|
+
client: BackendClient;
|
|
12
|
+
assets: AssetStore;
|
|
13
|
+
log: LogFn;
|
|
14
|
+
signal?: AbortSignal;
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/engine/engine/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE5D,MAAM,MAAM,KAAK,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAE3C,MAAM,MAAM,OAAO,GAAG;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB;qFACiF;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,EAAE,KAAK,CAAC;IACX,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/engine/engine/context.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { z } from "zod";
|
|
2
|
+
import type { AssetRef } from "../schema/refs.ts";
|
|
3
|
+
import type { ExecCtx } from "./context.ts";
|
|
4
|
+
type CostEstimate = {
|
|
5
|
+
credits: number;
|
|
6
|
+
seconds_estimate: number;
|
|
7
|
+
};
|
|
8
|
+
export type CostFn<P> = (args: {
|
|
9
|
+
params: P;
|
|
10
|
+
}) => CostEstimate;
|
|
11
|
+
export type ExecuteArgs<I, P> = {
|
|
12
|
+
inputs: I;
|
|
13
|
+
params: P;
|
|
14
|
+
ctx: ExecCtx;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Node-supplied extra validation hook. Runs after the node's static Zod
|
|
18
|
+
* schema passes — used by nodes whose param shape depends on external state
|
|
19
|
+
* (e.g. `hyperframe_render` consults the composition's meta.json).
|
|
20
|
+
* Returns issue messages keyed by the dotted param path to surface in
|
|
21
|
+
* `canvas validate` output. Empty array means OK.
|
|
22
|
+
*/
|
|
23
|
+
type ValidateExtraIssue = {
|
|
24
|
+
path: string;
|
|
25
|
+
message: string;
|
|
26
|
+
};
|
|
27
|
+
export type ValidateExtraFn = (args: {
|
|
28
|
+
rawParams: unknown;
|
|
29
|
+
rawInputs: unknown;
|
|
30
|
+
}) => Promise<ValidateExtraIssue[]> | ValidateExtraIssue[];
|
|
31
|
+
/**
|
|
32
|
+
* Node-supplied cache-key extras hook. Returns extra fields the executor
|
|
33
|
+
* folds into the cache key alongside `params` — used by nodes whose output
|
|
34
|
+
* depends on external content (e.g. composition directory contents).
|
|
35
|
+
*/
|
|
36
|
+
export type CacheKeyExtrasFn = (args: {
|
|
37
|
+
params: unknown;
|
|
38
|
+
}) => Promise<Record<string, string>>;
|
|
39
|
+
/**
|
|
40
|
+
* Per-output asset-kind declaration. Either a static map (most nodes — each
|
|
41
|
+
* named output produces a fixed kind) or a function of params (e.g. the
|
|
42
|
+
* `ingest` node, whose output kind is decided by `params.expect`).
|
|
43
|
+
*
|
|
44
|
+
* Validators and the dashboard read this to type the output port statically
|
|
45
|
+
* without running the node. Remote nodes also use it at runtime so the
|
|
46
|
+
* delegate ingestor knows how to wrap returned bytes.
|
|
47
|
+
*/
|
|
48
|
+
export type OutputKindsSpec<P> = Record<string, AssetRef["kind"]> | ((params: P) => Record<string, AssetRef["kind"]>);
|
|
49
|
+
export declare function resolveOutputKinds<P>(spec: OutputKindsSpec<P> | undefined, params: P): Record<string, AssetRef["kind"]>;
|
|
50
|
+
export type NodeDefinition<I = unknown, P = unknown, O = unknown> = {
|
|
51
|
+
id: string;
|
|
52
|
+
version: string;
|
|
53
|
+
category: string;
|
|
54
|
+
summary: string;
|
|
55
|
+
when_to_use?: string;
|
|
56
|
+
inputs: z.ZodType<I>;
|
|
57
|
+
params: z.ZodType<P>;
|
|
58
|
+
outputs: z.ZodType<O>;
|
|
59
|
+
/** "local" runs in-process; "remote" delegates to Convex via ctx.client */
|
|
60
|
+
location: "local" | "remote";
|
|
61
|
+
cost?: CostFn<P>;
|
|
62
|
+
validateExtra?: ValidateExtraFn;
|
|
63
|
+
cacheKeyExtras?: CacheKeyExtrasFn;
|
|
64
|
+
outputKinds?: OutputKindsSpec<P>;
|
|
65
|
+
execute: (args: ExecuteArgs<I, P>) => Promise<O>;
|
|
66
|
+
};
|
|
67
|
+
export declare function defineNode<I, P, O>(def: NodeDefinition<I, P, O>): NodeDefinition<I, P, O>;
|
|
68
|
+
export {};
|
|
69
|
+
//# sourceMappingURL=define.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../../../src/engine/engine/define.ts"],"names":[],"mappings":"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"}
|