@nodetool-ai/agents 0.8.2 → 0.8.3
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/.nodetool-build-stamp +1 -1
- package/dist/apify/assets.d.ts.map +1 -1
- package/dist/apify/assets.js +4 -0
- package/dist/apify/assets.js.map +1 -1
- package/dist/capabilities/agent-activity.js +1 -1
- package/dist/capabilities/assets.d.ts.map +1 -1
- package/dist/capabilities/assets.js +40 -10
- package/dist/capabilities/assets.js.map +1 -1
- package/dist/capabilities/collections.d.ts +4 -6
- package/dist/capabilities/collections.d.ts.map +1 -1
- package/dist/capabilities/collections.js +16 -11
- package/dist/capabilities/collections.js.map +1 -1
- package/dist/capabilities/derive-shot.d.ts +45 -0
- package/dist/capabilities/derive-shot.d.ts.map +1 -0
- package/dist/capabilities/derive-shot.js +82 -0
- package/dist/capabilities/derive-shot.js.map +1 -0
- package/dist/capabilities/documents.d.ts +2 -1
- package/dist/capabilities/documents.d.ts.map +1 -1
- package/dist/capabilities/documents.js +12 -6
- package/dist/capabilities/documents.js.map +1 -1
- package/dist/capabilities/email.d.ts +2 -1
- package/dist/capabilities/email.d.ts.map +1 -1
- package/dist/capabilities/email.js +5 -3
- package/dist/capabilities/email.js.map +1 -1
- package/dist/capabilities/game-asset-browser.d.ts +11 -0
- package/dist/capabilities/game-asset-browser.d.ts.map +1 -0
- package/dist/capabilities/game-asset-browser.js +152 -0
- package/dist/capabilities/game-asset-browser.js.map +1 -0
- package/dist/capabilities/game.d.ts +30 -0
- package/dist/capabilities/game.d.ts.map +1 -1
- package/dist/capabilities/game.js +215 -137
- package/dist/capabilities/game.js.map +1 -1
- package/dist/capabilities/game.specs.d.ts +2 -0
- package/dist/capabilities/game.specs.d.ts.map +1 -1
- package/dist/capabilities/game.specs.js +20 -5
- package/dist/capabilities/game.specs.js.map +1 -1
- package/dist/capabilities/game3d.d.ts.map +1 -1
- package/dist/capabilities/game3d.js +4 -3
- package/dist/capabilities/game3d.js.map +1 -1
- package/dist/capabilities/generations.d.ts.map +1 -1
- package/dist/capabilities/generations.js +7 -21
- package/dist/capabilities/generations.js.map +1 -1
- package/dist/capabilities/lazy-tool-core.d.ts +23 -0
- package/dist/capabilities/lazy-tool-core.d.ts.map +1 -0
- package/dist/capabilities/lazy-tool-core.js +56 -0
- package/dist/capabilities/lazy-tool-core.js.map +1 -0
- package/dist/capabilities/lazy-tool.d.ts +2 -21
- package/dist/capabilities/lazy-tool.d.ts.map +1 -1
- package/dist/capabilities/lazy-tool.js +3 -55
- package/dist/capabilities/lazy-tool.js.map +1 -1
- package/dist/capabilities/legacy-tools.js +1 -1
- package/dist/capabilities/legacy-tools.js.map +1 -1
- package/dist/capabilities/media.d.ts.map +1 -1
- package/dist/capabilities/media.js +13 -1
- package/dist/capabilities/media.js.map +1 -1
- package/dist/capabilities/media.specs.d.ts.map +1 -1
- package/dist/capabilities/media.specs.js +17 -0
- package/dist/capabilities/media.specs.js.map +1 -1
- package/dist/capabilities/metadata.d.ts +62 -0
- package/dist/capabilities/metadata.d.ts.map +1 -0
- package/dist/capabilities/metadata.js +114 -0
- package/dist/capabilities/metadata.js.map +1 -0
- package/dist/capabilities/model3d.d.ts.map +1 -1
- package/dist/capabilities/model3d.js +4 -0
- package/dist/capabilities/model3d.js.map +1 -1
- package/dist/capabilities/registry.d.ts +4 -19
- package/dist/capabilities/registry.d.ts.map +1 -1
- package/dist/capabilities/registry.js +48 -117
- package/dist/capabilities/registry.js.map +1 -1
- package/dist/capabilities/run-agent.js +1 -1
- package/dist/capabilities/settings.d.ts.map +1 -1
- package/dist/capabilities/settings.js +4 -2
- package/dist/capabilities/settings.js.map +1 -1
- package/dist/capabilities/storyboards.d.ts +11 -1
- package/dist/capabilities/storyboards.d.ts.map +1 -1
- package/dist/capabilities/storyboards.js +466 -4
- package/dist/capabilities/storyboards.js.map +1 -1
- package/dist/capabilities/storyboards.specs.d.ts +6 -0
- package/dist/capabilities/storyboards.specs.d.ts.map +1 -1
- package/dist/capabilities/storyboards.specs.js +131 -2
- package/dist/capabilities/storyboards.specs.js.map +1 -1
- package/dist/capabilities/threads.js +1 -1
- package/dist/capabilities/threads.js.map +1 -1
- package/dist/capabilities/timeline-bridge.d.ts +9 -0
- package/dist/capabilities/timeline-bridge.d.ts.map +1 -1
- package/dist/capabilities/timeline-bridge.js +60 -68
- package/dist/capabilities/timeline-bridge.js.map +1 -1
- package/dist/capabilities/timeline-operations.d.ts +52 -0
- package/dist/capabilities/timeline-operations.d.ts.map +1 -0
- package/dist/capabilities/timeline-operations.js +413 -0
- package/dist/capabilities/timeline-operations.js.map +1 -0
- package/dist/capabilities/timelines.d.ts +3 -38
- package/dist/capabilities/timelines.d.ts.map +1 -1
- package/dist/capabilities/timelines.js +30 -413
- package/dist/capabilities/timelines.js.map +1 -1
- package/dist/capabilities/timelines.specs.d.ts.map +1 -1
- package/dist/capabilities/timelines.specs.js +5 -1
- package/dist/capabilities/timelines.specs.js.map +1 -1
- package/dist/capabilities/web.d.ts.map +1 -1
- package/dist/capabilities/web.js +4 -0
- package/dist/capabilities/web.js.map +1 -1
- package/dist/capabilities/workflows.d.ts +3 -1
- package/dist/capabilities/workflows.d.ts.map +1 -1
- package/dist/capabilities/workflows.js +192 -14
- package/dist/capabilities/workflows.js.map +1 -1
- package/dist/capabilities/workflows.specs.d.ts +2 -0
- package/dist/capabilities/workflows.specs.d.ts.map +1 -1
- package/dist/capabilities/workflows.specs.js +65 -1
- package/dist/capabilities/workflows.specs.js.map +1 -1
- package/dist/codeact/sandbox-packages.d.ts +0 -7
- package/dist/codeact/sandbox-packages.d.ts.map +1 -1
- package/dist/codeact/sandbox-packages.js +1 -10
- package/dist/codeact/sandbox-packages.js.map +1 -1
- package/dist/evals/surfaces/game.d.ts +8 -2
- package/dist/evals/surfaces/game.d.ts.map +1 -1
- package/dist/evals/surfaces/game.js +460 -2
- package/dist/evals/surfaces/game.js.map +1 -1
- package/dist/game-authoring.d.ts +4895 -59
- package/dist/game-authoring.d.ts.map +1 -1
- package/dist/game-build.d.ts +3 -0
- package/dist/game-build.d.ts.map +1 -0
- package/dist/game-build.js +3 -0
- package/dist/game-build.js.map +1 -0
- package/dist/game-examples.d.ts +1355 -2
- package/dist/game-examples.d.ts.map +1 -1
- package/dist/generation-cancel.d.ts +31 -0
- package/dist/generation-cancel.d.ts.map +1 -0
- package/dist/generation-cancel.js +28 -0
- package/dist/generation-cancel.js.map +1 -0
- package/dist/host-access-gate.d.ts +29 -0
- package/dist/host-access-gate.d.ts.map +1 -0
- package/dist/host-access-gate.js +39 -0
- package/dist/host-access-gate.js.map +1 -0
- package/dist/host-modules/dispatcher.d.ts +7 -1
- package/dist/host-modules/dispatcher.d.ts.map +1 -1
- package/dist/host-modules/dispatcher.js +13 -2
- package/dist/host-modules/dispatcher.js.map +1 -1
- package/dist/host-modules/docx.d.ts.map +1 -1
- package/dist/host-modules/docx.js +2 -2
- package/dist/host-modules/docx.js.map +1 -1
- package/dist/host-modules/epub.d.ts.map +1 -1
- package/dist/host-modules/epub.js +2 -2
- package/dist/host-modules/epub.js.map +1 -1
- package/dist/host-modules/fabric.d.ts.map +1 -1
- package/dist/host-modules/fabric.js +1 -1
- package/dist/host-modules/fabric.js.map +1 -1
- package/dist/host-modules/limits.d.ts +10 -8
- package/dist/host-modules/limits.d.ts.map +1 -1
- package/dist/host-modules/limits.js +14 -9
- package/dist/host-modules/limits.js.map +1 -1
- package/dist/host-modules/mammoth.d.ts.map +1 -1
- package/dist/host-modules/mammoth.js +2 -2
- package/dist/host-modules/mammoth.js.map +1 -1
- package/dist/host-modules/ocr.d.ts.map +1 -1
- package/dist/host-modules/ocr.js +1 -1
- package/dist/host-modules/ocr.js.map +1 -1
- package/dist/host-modules/pdf.d.ts.map +1 -1
- package/dist/host-modules/pdf.js +2 -2
- package/dist/host-modules/pdf.js.map +1 -1
- package/dist/host-modules/pdflib.d.ts.map +1 -1
- package/dist/host-modules/pdflib.js +2 -2
- package/dist/host-modules/pdflib.js.map +1 -1
- package/dist/host-modules/pptx.d.ts.map +1 -1
- package/dist/host-modules/pptx.js +2 -2
- package/dist/host-modules/pptx.js.map +1 -1
- package/dist/host-modules/pptxgen.d.ts.map +1 -1
- package/dist/host-modules/pptxgen.js +2 -2
- package/dist/host-modules/pptxgen.js.map +1 -1
- package/dist/host-modules/tfjs.d.ts.map +1 -1
- package/dist/host-modules/tfjs.js +4 -4
- package/dist/host-modules/tfjs.js.map +1 -1
- package/dist/host-modules/xlsx.d.ts.map +1 -1
- package/dist/host-modules/xlsx.js +2 -2
- package/dist/host-modules/xlsx.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/js-sandbox.d.ts +7 -1
- package/dist/js-sandbox.d.ts.map +1 -1
- package/dist/js-sandbox.js +20 -4
- package/dist/js-sandbox.js.map +1 -1
- package/dist/timeline-code-bake.js +2 -2
- package/dist/timeline-code-bake.js.map +1 -1
- package/dist/tools/builtin-tools.d.ts +4 -3
- package/dist/tools/builtin-tools.d.ts.map +1 -1
- package/dist/tools/builtin-tools.js +11 -3
- package/dist/tools/builtin-tools.js.map +1 -1
- package/package.json +122 -41
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline-operations.js","sourceRoot":"","sources":["../../src/capabilities/timeline-operations.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,11 +19,9 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import type { TimelineDocument, TimelineSequence } from "@nodetool-ai/models";
|
|
21
21
|
import type { TimelineBridgeFinalState } from "./timeline-bridge.js";
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
type
|
|
25
|
-
error: string;
|
|
26
|
-
};
|
|
22
|
+
export { parseOps, applyOps } from "./timeline-operations.js";
|
|
23
|
+
export type { ParsedOp, OpRecord, ApplyOutcome } from "./timeline-operations.js";
|
|
24
|
+
import type { CapabilityExport, CapabilityModule } from "./types.js";
|
|
27
25
|
declare const listTimelines: CapabilityExport;
|
|
28
26
|
/**
|
|
29
27
|
* A new, empty sequence.
|
|
@@ -42,39 +40,6 @@ declare const getTimelineVersion: CapabilityExport;
|
|
|
42
40
|
declare const createTimelineVersion: CapabilityExport;
|
|
43
41
|
declare const restoreTimelineVersion: CapabilityExport;
|
|
44
42
|
declare const deleteTimelineVersion: CapabilityExport;
|
|
45
|
-
export interface ParsedOp {
|
|
46
|
-
op: string;
|
|
47
|
-
input: Record<string, unknown>;
|
|
48
|
-
}
|
|
49
|
-
/** An op is `{op, ...args}` — the arguments sit alongside the verb. */
|
|
50
|
-
export declare function parseOps(raw: unknown): ParsedOp[] | ToolError;
|
|
51
|
-
export interface OpRecord {
|
|
52
|
-
op: string;
|
|
53
|
-
ok: boolean;
|
|
54
|
-
result?: unknown;
|
|
55
|
-
error?: string;
|
|
56
|
-
}
|
|
57
|
-
export interface ApplyOutcome {
|
|
58
|
-
records: OpRecord[];
|
|
59
|
-
state: TimelineBridgeFinalState;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Run `ops` against a bridge seeded from `document`.
|
|
63
|
-
*
|
|
64
|
-
* A failing op is recorded and the script continues: stopping at the first
|
|
65
|
-
* error hides every problem behind it, and the caller wants the whole picture.
|
|
66
|
-
*
|
|
67
|
-
* `hermetic` leaves out the hooks that write outside the document: the 3D
|
|
68
|
-
* render and the new sequence a retarget creates. A code bake sets it. The
|
|
69
|
-
* bridge then uses its in-memory fallbacks for those ops.
|
|
70
|
-
*/
|
|
71
|
-
export declare function applyOps(run: CapabilityRun, sequence: TimelineSequence, document: TimelineDocument, ops: ParsedOp[], options?: {
|
|
72
|
-
hermetic?: boolean;
|
|
73
|
-
generateMediaEdit?: (request: MediaEditRequest, operationIndex: number) => Promise<{
|
|
74
|
-
generationId: string;
|
|
75
|
-
assetId: string;
|
|
76
|
-
}>;
|
|
77
|
-
}): Promise<ApplyOutcome>;
|
|
78
43
|
/**
|
|
79
44
|
* The unit ids one op's result names.
|
|
80
45
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timelines.d.ts","sourceRoot":"","sources":["../../src/capabilities/timelines.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"timelines.d.ts","sourceRoot":"","sources":["../../src/capabilities/timelines.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,12 +17,8 @@
|
|
|
17
17
|
*
|
|
18
18
|
* Design: docs/tool-class-retirement-design.md § "Migration".
|
|
19
19
|
*/
|
|
20
|
-
import {
|
|
21
|
-
|
|
22
|
-
import { STAGGER_UNITS, ANIMATED_PROPERTIES, DEFAULT_BEAT_TOLERANCE_MS } from "@nodetool-ai/timeline";
|
|
23
|
-
import { buildTimelineToolContracts } from "@nodetool-ai/protocol/api-schemas/timeline-tool-contracts.js";
|
|
24
|
-
import { resolveMoveTrackArgs, resolveDeleteTrackArgs } from "@nodetool-ai/protocol/api-schemas/timeline-tool-params.js";
|
|
25
|
-
import { parseWithTypeCoercion } from "@nodetool-ai/runtime";
|
|
20
|
+
import { parseOps, applyOps, TOOL_PREFIX, READ_ONLY_OPS, timelineModel3DBaker } from "./timeline-operations.js";
|
|
21
|
+
export { parseOps, applyOps } from "./timeline-operations.js";
|
|
26
22
|
import { listTimelinesSpec, createTimelineSpec, getTimelineSpec, listTimelineVersionsSpec, getTimelineVersionSpec, createTimelineVersionSpec, restoreTimelineVersionSpec, deleteTimelineVersionSpec, editTimelineSpec, validateTimelineSpec, setTimelineDocumentSpec, previewTimelineFrameSpec, compareTimelineFramesSpec, renderTimelineSpec, bakeAudioAnimationSpec, isolateSubjectSpec, ISOLATE_SUBJECT_MODELS, ISOLATE_SUBJECT_RESOLUTIONS, DEFAULT_ISOLATE_SUBJECT_MODEL, DEFAULT_ISOLATE_SUBJECT_RESOLUTION, DEFAULT_BAKE_ATTACK_MS, DEFAULT_BAKE_RELEASE_MS, DEFAULT_BAKE_TOLERANCE, DEFAULT_BAKE_MAX_POINTS, DEFAULT_BAKE_MAX_SECONDS, MAX_BAKE_POINTS, DEFAULT_RENDER_TIMEOUT_MS, MAX_RENDER_TIMEOUT_MS, DEFAULT_PREVIEW_COUNT, DEFAULT_COMPARE_WIDTH, MAX_PREVIEW_TIMES, MAX_PREVIEW_RANGE_COUNT, DEFAULT_VERSION_LIMIT, MAX_VERSION_LIMIT, trackObjectSpec, TRACK_OBJECT_DIRECTIONS, getTimelineCodeSpec, setTimelineCodeSpec, editTimelineCodeSpec, rebakeTimelineCodeSpec, detachTimelineCodeSpec, deleteTimelineSpec } from "./timelines.specs.js";
|
|
27
23
|
import { AUDIO_BAKED_ANIMATION_KIND, normalizeAuthoredDocument, hashSceneSubtree, mergeTimelineSource } from "@nodetool-ai/timeline";
|
|
28
24
|
import { bakeTimelineCode, bakedDocumentMatchesSaved } from "../timeline-code-bake.js";
|
|
@@ -372,400 +368,6 @@ const deleteTimelineVersion = {
|
|
|
372
368
|
// ---------------------------------------------------------------------------
|
|
373
369
|
/** Attempts to land the document write before reporting a conflict. */
|
|
374
370
|
const CAS_ATTEMPTS = 2;
|
|
375
|
-
/** Operations one call may apply, so a runaway script cannot rewrite a cut. */
|
|
376
|
-
const MAX_OPS = 60;
|
|
377
|
-
const TOOL_PREFIX = "ui_timeline_";
|
|
378
|
-
/** Browser generation without a real provider adapter remains excluded. */
|
|
379
|
-
const EXCLUDED_OPS = new Set([`${TOOL_PREFIX}generate_clip`]);
|
|
380
|
-
const READ_ONLY_OPS = new Set([`${TOOL_PREFIX}get_clip_frames`]);
|
|
381
|
-
/** `add_track`, `ui_add_track`, and `ui_timeline_add_track` all name one tool. */
|
|
382
|
-
function normalizeOpName(name) {
|
|
383
|
-
const trimmed = name.trim();
|
|
384
|
-
if (trimmed.startsWith(TOOL_PREFIX))
|
|
385
|
-
return trimmed;
|
|
386
|
-
const bare = trimmed.startsWith("ui_")
|
|
387
|
-
? trimmed.slice("ui_".length)
|
|
388
|
-
: trimmed;
|
|
389
|
-
return `${TOOL_PREFIX}${bare}`;
|
|
390
|
-
}
|
|
391
|
-
/** An op is `{op, ...args}` — the arguments sit alongside the verb. */
|
|
392
|
-
export function parseOps(raw) {
|
|
393
|
-
if (!Array.isArray(raw) || raw.length === 0) {
|
|
394
|
-
return {
|
|
395
|
-
error: 'ops must be a non-empty array, e.g. [{"op": "add_track", "type": "audio"}].'
|
|
396
|
-
};
|
|
397
|
-
}
|
|
398
|
-
if (raw.length > MAX_OPS) {
|
|
399
|
-
return {
|
|
400
|
-
error: `ops holds ${raw.length} entries; at most ${MAX_OPS} per call.`
|
|
401
|
-
};
|
|
402
|
-
}
|
|
403
|
-
const parsed = [];
|
|
404
|
-
for (const [index, entry] of raw.entries()) {
|
|
405
|
-
if (!isRecord(entry)) {
|
|
406
|
-
return { error: `ops[${index}] must be an object.` };
|
|
407
|
-
}
|
|
408
|
-
const { op, ...input } = entry;
|
|
409
|
-
if (!isString(op) || op.trim() === "") {
|
|
410
|
-
return { error: `ops[${index}] has no \`op\` name.` };
|
|
411
|
-
}
|
|
412
|
-
parsed.push({ op: normalizeOpName(op), input });
|
|
413
|
-
}
|
|
414
|
-
return parsed;
|
|
415
|
-
}
|
|
416
|
-
/**
|
|
417
|
-
* Read one of the caller's assets for `add_media_clip`.
|
|
418
|
-
*
|
|
419
|
-
* The ref a model has in hand is whatever `list_assets` printed — a bare id or
|
|
420
|
-
* an `asset://<id>.<ext>` URI — so both resolve here.
|
|
421
|
-
*/
|
|
422
|
-
async function resolveTimelineAsset(run, ref) {
|
|
423
|
-
const id = ref.startsWith("asset://")
|
|
424
|
-
? ref.slice("asset://".length).replace(/\.[A-Za-z0-9]{1,8}$/, "")
|
|
425
|
-
: ref;
|
|
426
|
-
if (!id)
|
|
427
|
-
return null;
|
|
428
|
-
const userId = run.context.userId;
|
|
429
|
-
if (!userId)
|
|
430
|
-
return null;
|
|
431
|
-
const { Asset } = await import("@nodetool-ai/models");
|
|
432
|
-
// `find` is already user-scoped: someone else's asset reads as missing.
|
|
433
|
-
const asset = await Asset.find(userId, id);
|
|
434
|
-
if (!asset)
|
|
435
|
-
return null;
|
|
436
|
-
const thumbnails = isRecord(asset.metadata)
|
|
437
|
-
? asset.metadata["thumbnails"]
|
|
438
|
-
: undefined;
|
|
439
|
-
const thumbnailAssetId = Array.isArray(thumbnails) && isString(thumbnails[0])
|
|
440
|
-
? thumbnails[0]
|
|
441
|
-
: undefined;
|
|
442
|
-
const resolved = {
|
|
443
|
-
id: asset.id,
|
|
444
|
-
name: asset.name,
|
|
445
|
-
contentType: asset.content_type
|
|
446
|
-
};
|
|
447
|
-
let duration = asset.duration;
|
|
448
|
-
if ((!isFiniteNumber(duration) || duration <= 0) &&
|
|
449
|
-
(asset.content_type.startsWith("audio/") || asset.content_type.startsWith("video/"))) {
|
|
450
|
-
try {
|
|
451
|
-
const { loadMediaRefBytes, probeVideoDurationSeconds } = await import("@nodetool-ai/runtime");
|
|
452
|
-
const bytes = await loadMediaRefBytes({ asset_id: asset.id }, run.context);
|
|
453
|
-
if (bytes) {
|
|
454
|
-
duration = await probeVideoDurationSeconds(bytes, new AbortController().signal);
|
|
455
|
-
if (isFiniteNumber(duration) && duration > 0) {
|
|
456
|
-
asset.duration = duration;
|
|
457
|
-
await asset.save();
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
catch {
|
|
462
|
-
// An explicit clip duration remains usable when the source cannot be probed.
|
|
463
|
-
}
|
|
464
|
-
}
|
|
465
|
-
if (isFiniteNumber(duration) && duration > 0) {
|
|
466
|
-
resolved.durationMs = Math.round(duration * 1000);
|
|
467
|
-
}
|
|
468
|
-
if (thumbnailAssetId)
|
|
469
|
-
resolved.thumbnailAssetId = thumbnailAssetId;
|
|
470
|
-
return resolved;
|
|
471
|
-
}
|
|
472
|
-
/**
|
|
473
|
-
* Run a custom animation's body once and return its curves.
|
|
474
|
-
*
|
|
475
|
-
* The bake is the only place that code runs — the curves are stored and every
|
|
476
|
-
* render site samples them — so it goes through `bakeCustomAnimation`, the
|
|
477
|
-
* same hermetic path `POST /api/timelines/animations/bake` uses. Imported
|
|
478
|
-
* lazily: the sandbox is a heavy dependency for a capability most calls never
|
|
479
|
-
* reach.
|
|
480
|
-
*/
|
|
481
|
-
async function bakeTimelineAnimation(run, request) {
|
|
482
|
-
const { bakeCustomAnimation } = await import("../custom-animation-bake.js");
|
|
483
|
-
const params = {
|
|
484
|
-
code: request.code,
|
|
485
|
-
role: request.role,
|
|
486
|
-
durationMs: request.durationMs,
|
|
487
|
-
clipDurationMs: request.clipDurationMs,
|
|
488
|
-
canvas: request.canvas
|
|
489
|
-
};
|
|
490
|
-
if (request.params !== undefined)
|
|
491
|
-
params.params = request.params;
|
|
492
|
-
if (request.staggerCount !== undefined) {
|
|
493
|
-
params.staggerCount = request.staggerCount;
|
|
494
|
-
}
|
|
495
|
-
const baked = await bakeCustomAnimation(run.context, params);
|
|
496
|
-
const result = { ok: baked.ok };
|
|
497
|
-
if (baked.curves !== undefined)
|
|
498
|
-
result.curves = baked.curves;
|
|
499
|
-
if (baked.mask !== undefined)
|
|
500
|
-
result.mask = baked.mask;
|
|
501
|
-
if (baked.error !== undefined)
|
|
502
|
-
result.error = baked.error;
|
|
503
|
-
return result;
|
|
504
|
-
}
|
|
505
|
-
/**
|
|
506
|
-
* The bridge hooks that write outside the document: a Blender render of a 3D
|
|
507
|
-
* clip, and the new sequence `retarget_format` creates.
|
|
508
|
-
*/
|
|
509
|
-
function writingHooks(run, sequence) {
|
|
510
|
-
return {
|
|
511
|
-
bakeModel3DClip: async (request) => {
|
|
512
|
-
const { bakeModel3DClipOnServer } = await import("./timeline-bake.js");
|
|
513
|
-
return bakeModel3DClipOnServer(run.context, request);
|
|
514
|
-
},
|
|
515
|
-
retargetFormat: async (adapted) => {
|
|
516
|
-
const { TimelineSequence } = await import("@nodetool-ai/models");
|
|
517
|
-
const derivedDocument = {
|
|
518
|
-
tracks: adapted.tracks,
|
|
519
|
-
clips: adapted.clips,
|
|
520
|
-
markers: adapted.markers
|
|
521
|
-
};
|
|
522
|
-
if (adapted.transcript !== undefined) {
|
|
523
|
-
derivedDocument.transcript = adapted.transcript;
|
|
524
|
-
}
|
|
525
|
-
if (adapted.scriptEnabled !== undefined) {
|
|
526
|
-
derivedDocument.scriptEnabled = adapted.scriptEnabled;
|
|
527
|
-
}
|
|
528
|
-
if (adapted.tempo !== undefined)
|
|
529
|
-
derivedDocument.tempo = adapted.tempo;
|
|
530
|
-
if (adapted.camera2d !== undefined)
|
|
531
|
-
derivedDocument.camera2d = adapted.camera2d;
|
|
532
|
-
if (adapted.setup !== undefined)
|
|
533
|
-
derivedDocument.setup = adapted.setup;
|
|
534
|
-
if (adapted.templateId !== undefined) {
|
|
535
|
-
derivedDocument.templateId = adapted.templateId;
|
|
536
|
-
}
|
|
537
|
-
if (adapted.mediaTracks !== undefined) {
|
|
538
|
-
derivedDocument.mediaTracks = adapted.mediaTracks;
|
|
539
|
-
}
|
|
540
|
-
const name = `${sequence.name} (${adapted.width}×${adapted.height})`;
|
|
541
|
-
const created = await TimelineSequence.create({
|
|
542
|
-
user_id: run.context.userId,
|
|
543
|
-
project_id: sequence.project_id,
|
|
544
|
-
workflow_id: sequence.workflow_id,
|
|
545
|
-
name,
|
|
546
|
-
fps: adapted.fps,
|
|
547
|
-
width: adapted.width,
|
|
548
|
-
height: adapted.height,
|
|
549
|
-
duration_ms: adapted.durationMs,
|
|
550
|
-
document: JSON.stringify(derivedDocument)
|
|
551
|
-
});
|
|
552
|
-
return { sequenceId: created.id, name };
|
|
553
|
-
}
|
|
554
|
-
};
|
|
555
|
-
}
|
|
556
|
-
/** Track-only batches need no simulated editor or external hooks. */
|
|
557
|
-
function applyTrackOps(sequence, document, ops) {
|
|
558
|
-
const contracts = buildTimelineToolContracts({
|
|
559
|
-
staggerUnits: STAGGER_UNITS,
|
|
560
|
-
animatedProperties: ANIMATED_PROPERTIES,
|
|
561
|
-
beatToleranceMs: DEFAULT_BEAT_TOLERANCE_MS
|
|
562
|
-
});
|
|
563
|
-
let state = {
|
|
564
|
-
fps: sequence.fps,
|
|
565
|
-
width: sequence.width,
|
|
566
|
-
height: sequence.height,
|
|
567
|
-
tracks: document.tracks,
|
|
568
|
-
clips: document.clips,
|
|
569
|
-
markers: document.markers,
|
|
570
|
-
mediaTracks: document.mediaTracks,
|
|
571
|
-
tempo: document.tempo,
|
|
572
|
-
playheadMs: 0,
|
|
573
|
-
selectedClipIds: []
|
|
574
|
-
};
|
|
575
|
-
const usedIds = new Set([
|
|
576
|
-
...[
|
|
577
|
-
...document.tracks,
|
|
578
|
-
...document.clips,
|
|
579
|
-
...document.markers,
|
|
580
|
-
...(document.mediaTracks ?? [])
|
|
581
|
-
].map((unit) => unit.id),
|
|
582
|
-
...document.clips.flatMap((clip) => (clip.animations ?? []).map((animation) => animation.id))
|
|
583
|
-
]);
|
|
584
|
-
let nextId = 0;
|
|
585
|
-
const newId = () => {
|
|
586
|
-
let id;
|
|
587
|
-
do {
|
|
588
|
-
id = `track_${++nextId}`;
|
|
589
|
-
} while (usedIds.has(id));
|
|
590
|
-
usedIds.add(id);
|
|
591
|
-
return id;
|
|
592
|
-
};
|
|
593
|
-
const records = [];
|
|
594
|
-
for (const entry of ops) {
|
|
595
|
-
try {
|
|
596
|
-
let op;
|
|
597
|
-
if (entry.op === "ui_timeline_add_track") {
|
|
598
|
-
const args = parseWithTypeCoercion(z.object(contracts.ui_timeline_add_track.shape), entry.input);
|
|
599
|
-
op = { op: "add_track", ...args };
|
|
600
|
-
}
|
|
601
|
-
else if (entry.op === "ui_timeline_move_track") {
|
|
602
|
-
const args = parseWithTypeCoercion(z.object(contracts.ui_timeline_move_track.shape), entry.input);
|
|
603
|
-
op = { op: "move_track", ...resolveMoveTrackArgs(args) };
|
|
604
|
-
}
|
|
605
|
-
else {
|
|
606
|
-
const args = parseWithTypeCoercion(z.object(contracts.ui_timeline_delete_track.shape), entry.input);
|
|
607
|
-
op = { op: "delete_track", ...resolveDeleteTrackArgs(args) };
|
|
608
|
-
}
|
|
609
|
-
const outcome = applyTimelineTrackOp(state, op, { newId });
|
|
610
|
-
if (outcome.error)
|
|
611
|
-
throw new Error(outcome.error);
|
|
612
|
-
state = outcome.state;
|
|
613
|
-
records.push({ op: entry.op, ok: true, result: outcome.result });
|
|
614
|
-
}
|
|
615
|
-
catch (error) {
|
|
616
|
-
records.push({
|
|
617
|
-
op: entry.op,
|
|
618
|
-
ok: false,
|
|
619
|
-
error: error instanceof Error ? error.message : String(error)
|
|
620
|
-
});
|
|
621
|
-
}
|
|
622
|
-
}
|
|
623
|
-
return {
|
|
624
|
-
records,
|
|
625
|
-
state: {
|
|
626
|
-
fps: state.fps,
|
|
627
|
-
width: state.width,
|
|
628
|
-
height: state.height,
|
|
629
|
-
durationMs: state.clips.reduce((end, clip) => Math.max(end, clip.startMs + clip.durationMs), 0),
|
|
630
|
-
playheadMs: state.playheadMs,
|
|
631
|
-
tracks: state.tracks.map(({ id, name, type, index }) => ({
|
|
632
|
-
id,
|
|
633
|
-
name,
|
|
634
|
-
type,
|
|
635
|
-
index
|
|
636
|
-
})),
|
|
637
|
-
clips: state.clips.map((clip) => ({
|
|
638
|
-
id: clip.id,
|
|
639
|
-
name: clip.name,
|
|
640
|
-
trackId: clip.trackId,
|
|
641
|
-
mediaType: clip.mediaType,
|
|
642
|
-
startMs: clip.startMs,
|
|
643
|
-
durationMs: clip.durationMs,
|
|
644
|
-
prompt: clip.prompt,
|
|
645
|
-
animations: (clip.animations ?? []).map(({ role, preset }) => ({
|
|
646
|
-
role,
|
|
647
|
-
preset
|
|
648
|
-
}))
|
|
649
|
-
})),
|
|
650
|
-
documentTracks: state.tracks,
|
|
651
|
-
documentClips: state.clips,
|
|
652
|
-
markers: state.markers,
|
|
653
|
-
mediaTracks: state.mediaTracks ?? [],
|
|
654
|
-
derivedSequences: [],
|
|
655
|
-
tempo: state.tempo,
|
|
656
|
-
camera2d: document.camera2d ?? null,
|
|
657
|
-
setup: document.setup ?? null,
|
|
658
|
-
transitionCandidates: [],
|
|
659
|
-
appliedTransitionCandidates: [],
|
|
660
|
-
toolLog: ops.map((entry) => entry.op),
|
|
661
|
-
previewTimesMs: [],
|
|
662
|
-
previewedLayerKinds: []
|
|
663
|
-
}
|
|
664
|
-
};
|
|
665
|
-
}
|
|
666
|
-
/**
|
|
667
|
-
* Run `ops` against a bridge seeded from `document`.
|
|
668
|
-
*
|
|
669
|
-
* A failing op is recorded and the script continues: stopping at the first
|
|
670
|
-
* error hides every problem behind it, and the caller wants the whole picture.
|
|
671
|
-
*
|
|
672
|
-
* `hermetic` leaves out the hooks that write outside the document: the 3D
|
|
673
|
-
* render and the new sequence a retarget creates. A code bake sets it. The
|
|
674
|
-
* bridge then uses its in-memory fallbacks for those ops.
|
|
675
|
-
*/
|
|
676
|
-
export async function applyOps(run, sequence, document, ops, options = {}) {
|
|
677
|
-
if (ops.every(({ op }) => op === "ui_timeline_add_track" || op === "ui_timeline_move_track" || op === "ui_timeline_delete_track")) {
|
|
678
|
-
return applyTrackOps(sequence, document, ops);
|
|
679
|
-
}
|
|
680
|
-
const { createTimelineToolBridge } = await import("./timeline-bridge.js");
|
|
681
|
-
let operationIndex = 0;
|
|
682
|
-
const init = {
|
|
683
|
-
sequenceId: sequence.id,
|
|
684
|
-
sequenceName: sequence.name,
|
|
685
|
-
projectId: sequence.project_id,
|
|
686
|
-
sequence: {
|
|
687
|
-
fps: sequence.fps,
|
|
688
|
-
width: sequence.width,
|
|
689
|
-
height: sequence.height,
|
|
690
|
-
tracks: document.tracks,
|
|
691
|
-
clips: document.clips,
|
|
692
|
-
markers: document.markers,
|
|
693
|
-
transcript: document.transcript,
|
|
694
|
-
scriptEnabled: document.scriptEnabled,
|
|
695
|
-
templateId: document.templateId,
|
|
696
|
-
tempo: document.tempo,
|
|
697
|
-
camera2d: document.camera2d,
|
|
698
|
-
setup: document.setup,
|
|
699
|
-
mediaTracks: document.mediaTracks
|
|
700
|
-
},
|
|
701
|
-
resolveAsset: (ref) => resolveTimelineAsset(run, ref),
|
|
702
|
-
bakeAnimation: (request) => bakeTimelineAnimation(run, request),
|
|
703
|
-
loadComposition: {
|
|
704
|
-
get: async (id) => {
|
|
705
|
-
const { loadComposition } = await import("./compositions.js");
|
|
706
|
-
const found = await loadComposition(run, id);
|
|
707
|
-
return found ? found.composition : null;
|
|
708
|
-
},
|
|
709
|
-
listIds: async () => {
|
|
710
|
-
const { loadShippedCompositions, loadUserCompositions } = await import("./compositions.js");
|
|
711
|
-
const mine = await loadUserCompositions(run);
|
|
712
|
-
return [
|
|
713
|
-
...loadShippedCompositions().map((comp) => comp.id),
|
|
714
|
-
...(Array.isArray(mine) ? mine.map((comp) => comp.id) : [])
|
|
715
|
-
];
|
|
716
|
-
}
|
|
717
|
-
}
|
|
718
|
-
};
|
|
719
|
-
if (!options.hermetic) {
|
|
720
|
-
Object.assign(init, writingHooks(run, sequence));
|
|
721
|
-
const { timelineMediaEditGenerator } = await import("./timeline-media-edit.js");
|
|
722
|
-
const generate = options.generateMediaEdit ?? timelineMediaEditGenerator(run);
|
|
723
|
-
init.generateMediaEdit = (request) => generate(request, operationIndex);
|
|
724
|
-
init.getClipFrames = async (clip, frameOptions) => {
|
|
725
|
-
const current = bridge.finalState();
|
|
726
|
-
const { inspectTimelineClipFrames } = await import("./timeline-clip-frames.js");
|
|
727
|
-
return inspectTimelineClipFrames(run.context, { ...sequence.toDocument(),
|
|
728
|
-
tracks: current.documentTracks, clips: current.documentClips, markers: current.markers,
|
|
729
|
-
mediaTracks: current.mediaTracks, tempo: current.tempo, camera2d: current.camera2d,
|
|
730
|
-
id: sequence.id, projectId: sequence.project_id ?? "default", name: sequence.name,
|
|
731
|
-
fps: sequence.fps, width: sequence.width, height: sequence.height,
|
|
732
|
-
durationMs: sequence.duration_ms, createdAt: sequence.created_at, updatedAt: sequence.updated_at
|
|
733
|
-
}, clip, frameOptions);
|
|
734
|
-
};
|
|
735
|
-
}
|
|
736
|
-
const bridge = createTimelineToolBridge(init);
|
|
737
|
-
const byName = new Map(bridge.tools
|
|
738
|
-
.filter((tool) => !EXCLUDED_OPS.has(tool.name) && !(options.hermetic && (tool.name === `${TOOL_PREFIX}generatively_edit_clip` || READ_ONLY_OPS.has(tool.name))))
|
|
739
|
-
.map((tool) => [tool.name, tool]));
|
|
740
|
-
const records = [];
|
|
741
|
-
for (const [index, { op, input }] of ops.entries()) {
|
|
742
|
-
operationIndex = index;
|
|
743
|
-
const tool = byName.get(op);
|
|
744
|
-
if (!tool) {
|
|
745
|
-
const known = [...byName.keys()]
|
|
746
|
-
.map((name) => name.slice(TOOL_PREFIX.length))
|
|
747
|
-
.sort()
|
|
748
|
-
.join(", ");
|
|
749
|
-
records.push({
|
|
750
|
-
op,
|
|
751
|
-
ok: false,
|
|
752
|
-
error: `No timeline operation named "${op.slice(TOOL_PREFIX.length)}". Available: ${known}.`
|
|
753
|
-
});
|
|
754
|
-
continue;
|
|
755
|
-
}
|
|
756
|
-
try {
|
|
757
|
-
records.push({ op, ok: true, result: await tool.execute(input) });
|
|
758
|
-
}
|
|
759
|
-
catch (e) {
|
|
760
|
-
records.push({
|
|
761
|
-
op,
|
|
762
|
-
ok: false,
|
|
763
|
-
error: e instanceof Error ? e.message : String(e)
|
|
764
|
-
});
|
|
765
|
-
}
|
|
766
|
-
}
|
|
767
|
-
return { records, state: bridge.finalState() };
|
|
768
|
-
}
|
|
769
371
|
/**
|
|
770
372
|
* The keys an op names its unit under, and which list each one means.
|
|
771
373
|
*
|
|
@@ -886,6 +488,9 @@ const editTimeline = {
|
|
|
886
488
|
const { TimelineSequence, TimelineSequenceVersion } = await import("@nodetool-ai/models");
|
|
887
489
|
const { timelineMediaEditGenerator } = await import("./timeline-media-edit.js");
|
|
888
490
|
const generateMediaEdit = timelineMediaEditGenerator(run);
|
|
491
|
+
// Shared across retries, like the media edit generator: a retry re-applies
|
|
492
|
+
// every op, and a 3D bake already rendered must not render again.
|
|
493
|
+
const bakeModel3DClip = timelineModel3DBaker(run);
|
|
889
494
|
for (let attempt = 0; attempt < CAS_ATTEMPTS; attempt++) {
|
|
890
495
|
const sequence = await TimelineSequence.findById(timelineId);
|
|
891
496
|
// A sequence owned by someone else reads as missing — the rule the tRPC
|
|
@@ -894,7 +499,7 @@ const editTimeline = {
|
|
|
894
499
|
return { error: `Timeline ${timelineId} was not found.` };
|
|
895
500
|
}
|
|
896
501
|
const document = sequence.toDocument();
|
|
897
|
-
const { records, state } = await applyOps(run, sequence, document, ops, { generateMediaEdit });
|
|
502
|
+
const { records, state } = await applyOps(run, sequence, document, ops, { generateMediaEdit, bakeModel3DClip });
|
|
898
503
|
// The transcript rides along untouched — no timeline operation edits it,
|
|
899
504
|
// so the stored copy stays authoritative. Markers come back from the
|
|
900
505
|
// bridge, which seeded them and which the marker ops write to.
|
|
@@ -1134,7 +739,11 @@ const validateTimeline = {
|
|
|
1134
739
|
* whole-document write is that what was sent is what the sequence becomes.
|
|
1135
740
|
*/
|
|
1136
741
|
function documentToStore(raw) {
|
|
1137
|
-
|
|
742
|
+
const { name, id: _id, projectId: _projectId, workflowId: _workflowId, durationMs: _durationMs, createdAt: _createdAt, updatedAt: _updatedAt, ...document } = raw;
|
|
743
|
+
return {
|
|
744
|
+
...normalizeAuthoredDocument(document),
|
|
745
|
+
name: isString(name) && name.trim() ? name.trim() : undefined
|
|
746
|
+
};
|
|
1138
747
|
}
|
|
1139
748
|
/** The end of the last clip — what the sequence's stored duration means. */
|
|
1140
749
|
function documentDurationMs(document) {
|
|
@@ -1201,7 +810,11 @@ const setTimelineDocument = {
|
|
|
1201
810
|
};
|
|
1202
811
|
}
|
|
1203
812
|
}
|
|
1204
|
-
|
|
813
|
+
// `get_timeline` returns the sequence row's fields beside the document.
|
|
814
|
+
// A caller that sends that object back renames the sequence with `name`.
|
|
815
|
+
// The other row fields are owned by the row, so they are dropped rather
|
|
816
|
+
// than reported as stripped document fields.
|
|
817
|
+
const { document, settings, name } = documentToStore(raw);
|
|
1205
818
|
// Document-level fps/width/height are sequence settings, so opts win and a
|
|
1206
819
|
// document that carries them configures the sequence instead of having
|
|
1207
820
|
// them stripped with a `field_stripped` warning.
|
|
@@ -1237,16 +850,19 @@ const setTimelineDocument = {
|
|
|
1237
850
|
saveType: "manual",
|
|
1238
851
|
name: snapshotName
|
|
1239
852
|
});
|
|
1240
|
-
const
|
|
853
|
+
const fields = {
|
|
854
|
+
document: JSON.stringify(document),
|
|
855
|
+
fps,
|
|
856
|
+
width,
|
|
857
|
+
height,
|
|
858
|
+
duration_ms: documentDurationMs(document)
|
|
859
|
+
};
|
|
860
|
+
if (name !== undefined) {
|
|
861
|
+
fields.name = name;
|
|
862
|
+
}
|
|
1241
863
|
let saved;
|
|
1242
864
|
try {
|
|
1243
|
-
saved = await TimelineSequence.updateFieldsIfUnchanged(sequence.id, sequence.updated_at,
|
|
1244
|
-
document: JSON.stringify(document),
|
|
1245
|
-
fps,
|
|
1246
|
-
width,
|
|
1247
|
-
height,
|
|
1248
|
-
duration_ms: durationMs
|
|
1249
|
-
});
|
|
865
|
+
saved = await TimelineSequence.updateFieldsIfUnchanged(sequence.id, sequence.updated_at, fields);
|
|
1250
866
|
}
|
|
1251
867
|
catch (error) {
|
|
1252
868
|
// The model rejects a document without tracks/clips/markers arrays. The
|
|
@@ -1273,6 +889,7 @@ const setTimelineDocument = {
|
|
|
1273
889
|
ok: true,
|
|
1274
890
|
written: true,
|
|
1275
891
|
timeline_id: saved.id,
|
|
892
|
+
name: saved.name,
|
|
1276
893
|
updated_at: saved.updated_at,
|
|
1277
894
|
undo_version: undo.version,
|
|
1278
895
|
fps: saved.fps,
|
|
@@ -2294,7 +1911,7 @@ const isolateSubject = {
|
|
|
2294
1911
|
let expectedUpdatedAt = sequence.updated_at;
|
|
2295
1912
|
const persist = async (next) => {
|
|
2296
1913
|
const clips = document.clips.map((c) => (c.id === next.id ? next : c));
|
|
2297
|
-
const saved = await TimelineSequence.updateDocumentIfUnchanged(
|
|
1914
|
+
const saved = await TimelineSequence.updateDocumentIfUnchanged(sequence.id, expectedUpdatedAt, { ...document, clips }, {
|
|
2298
1915
|
ops: [
|
|
2299
1916
|
{
|
|
2300
1917
|
tool: `${TOOL_PREFIX}set_generated_matte`,
|
|
@@ -2416,7 +2033,7 @@ const trackObject = {
|
|
|
2416
2033
|
let expectedUpdatedAt = sequence.updated_at;
|
|
2417
2034
|
let mediaTracks = document.mediaTracks ?? [];
|
|
2418
2035
|
const persist = async (next) => {
|
|
2419
|
-
const saved = await TimelineSequence.updateDocumentIfUnchanged(
|
|
2036
|
+
const saved = await TimelineSequence.updateDocumentIfUnchanged(sequence.id, expectedUpdatedAt, { ...document, mediaTracks: next }, { ops: [{ tool: "track_object", input: { clip_id: clip.id, track_id: trackId } }] });
|
|
2420
2037
|
if (!saved)
|
|
2421
2038
|
return false;
|
|
2422
2039
|
mediaTracks = next;
|