@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.
Files changed (189) hide show
  1. package/dist/.nodetool-build-stamp +1 -1
  2. package/dist/apify/assets.d.ts.map +1 -1
  3. package/dist/apify/assets.js +4 -0
  4. package/dist/apify/assets.js.map +1 -1
  5. package/dist/capabilities/agent-activity.js +1 -1
  6. package/dist/capabilities/assets.d.ts.map +1 -1
  7. package/dist/capabilities/assets.js +40 -10
  8. package/dist/capabilities/assets.js.map +1 -1
  9. package/dist/capabilities/collections.d.ts +4 -6
  10. package/dist/capabilities/collections.d.ts.map +1 -1
  11. package/dist/capabilities/collections.js +16 -11
  12. package/dist/capabilities/collections.js.map +1 -1
  13. package/dist/capabilities/derive-shot.d.ts +45 -0
  14. package/dist/capabilities/derive-shot.d.ts.map +1 -0
  15. package/dist/capabilities/derive-shot.js +82 -0
  16. package/dist/capabilities/derive-shot.js.map +1 -0
  17. package/dist/capabilities/documents.d.ts +2 -1
  18. package/dist/capabilities/documents.d.ts.map +1 -1
  19. package/dist/capabilities/documents.js +12 -6
  20. package/dist/capabilities/documents.js.map +1 -1
  21. package/dist/capabilities/email.d.ts +2 -1
  22. package/dist/capabilities/email.d.ts.map +1 -1
  23. package/dist/capabilities/email.js +5 -3
  24. package/dist/capabilities/email.js.map +1 -1
  25. package/dist/capabilities/game-asset-browser.d.ts +11 -0
  26. package/dist/capabilities/game-asset-browser.d.ts.map +1 -0
  27. package/dist/capabilities/game-asset-browser.js +152 -0
  28. package/dist/capabilities/game-asset-browser.js.map +1 -0
  29. package/dist/capabilities/game.d.ts +30 -0
  30. package/dist/capabilities/game.d.ts.map +1 -1
  31. package/dist/capabilities/game.js +215 -137
  32. package/dist/capabilities/game.js.map +1 -1
  33. package/dist/capabilities/game.specs.d.ts +2 -0
  34. package/dist/capabilities/game.specs.d.ts.map +1 -1
  35. package/dist/capabilities/game.specs.js +20 -5
  36. package/dist/capabilities/game.specs.js.map +1 -1
  37. package/dist/capabilities/game3d.d.ts.map +1 -1
  38. package/dist/capabilities/game3d.js +4 -3
  39. package/dist/capabilities/game3d.js.map +1 -1
  40. package/dist/capabilities/generations.d.ts.map +1 -1
  41. package/dist/capabilities/generations.js +7 -21
  42. package/dist/capabilities/generations.js.map +1 -1
  43. package/dist/capabilities/lazy-tool-core.d.ts +23 -0
  44. package/dist/capabilities/lazy-tool-core.d.ts.map +1 -0
  45. package/dist/capabilities/lazy-tool-core.js +56 -0
  46. package/dist/capabilities/lazy-tool-core.js.map +1 -0
  47. package/dist/capabilities/lazy-tool.d.ts +2 -21
  48. package/dist/capabilities/lazy-tool.d.ts.map +1 -1
  49. package/dist/capabilities/lazy-tool.js +3 -55
  50. package/dist/capabilities/lazy-tool.js.map +1 -1
  51. package/dist/capabilities/legacy-tools.js +1 -1
  52. package/dist/capabilities/legacy-tools.js.map +1 -1
  53. package/dist/capabilities/media.d.ts.map +1 -1
  54. package/dist/capabilities/media.js +13 -1
  55. package/dist/capabilities/media.js.map +1 -1
  56. package/dist/capabilities/media.specs.d.ts.map +1 -1
  57. package/dist/capabilities/media.specs.js +17 -0
  58. package/dist/capabilities/media.specs.js.map +1 -1
  59. package/dist/capabilities/metadata.d.ts +62 -0
  60. package/dist/capabilities/metadata.d.ts.map +1 -0
  61. package/dist/capabilities/metadata.js +114 -0
  62. package/dist/capabilities/metadata.js.map +1 -0
  63. package/dist/capabilities/model3d.d.ts.map +1 -1
  64. package/dist/capabilities/model3d.js +4 -0
  65. package/dist/capabilities/model3d.js.map +1 -1
  66. package/dist/capabilities/registry.d.ts +4 -19
  67. package/dist/capabilities/registry.d.ts.map +1 -1
  68. package/dist/capabilities/registry.js +48 -117
  69. package/dist/capabilities/registry.js.map +1 -1
  70. package/dist/capabilities/run-agent.js +1 -1
  71. package/dist/capabilities/settings.d.ts.map +1 -1
  72. package/dist/capabilities/settings.js +4 -2
  73. package/dist/capabilities/settings.js.map +1 -1
  74. package/dist/capabilities/storyboards.d.ts +11 -1
  75. package/dist/capabilities/storyboards.d.ts.map +1 -1
  76. package/dist/capabilities/storyboards.js +466 -4
  77. package/dist/capabilities/storyboards.js.map +1 -1
  78. package/dist/capabilities/storyboards.specs.d.ts +6 -0
  79. package/dist/capabilities/storyboards.specs.d.ts.map +1 -1
  80. package/dist/capabilities/storyboards.specs.js +131 -2
  81. package/dist/capabilities/storyboards.specs.js.map +1 -1
  82. package/dist/capabilities/threads.js +1 -1
  83. package/dist/capabilities/threads.js.map +1 -1
  84. package/dist/capabilities/timeline-bridge.d.ts +9 -0
  85. package/dist/capabilities/timeline-bridge.d.ts.map +1 -1
  86. package/dist/capabilities/timeline-bridge.js +60 -68
  87. package/dist/capabilities/timeline-bridge.js.map +1 -1
  88. package/dist/capabilities/timeline-operations.d.ts +52 -0
  89. package/dist/capabilities/timeline-operations.d.ts.map +1 -0
  90. package/dist/capabilities/timeline-operations.js +413 -0
  91. package/dist/capabilities/timeline-operations.js.map +1 -0
  92. package/dist/capabilities/timelines.d.ts +3 -38
  93. package/dist/capabilities/timelines.d.ts.map +1 -1
  94. package/dist/capabilities/timelines.js +30 -413
  95. package/dist/capabilities/timelines.js.map +1 -1
  96. package/dist/capabilities/timelines.specs.d.ts.map +1 -1
  97. package/dist/capabilities/timelines.specs.js +5 -1
  98. package/dist/capabilities/timelines.specs.js.map +1 -1
  99. package/dist/capabilities/web.d.ts.map +1 -1
  100. package/dist/capabilities/web.js +4 -0
  101. package/dist/capabilities/web.js.map +1 -1
  102. package/dist/capabilities/workflows.d.ts +3 -1
  103. package/dist/capabilities/workflows.d.ts.map +1 -1
  104. package/dist/capabilities/workflows.js +192 -14
  105. package/dist/capabilities/workflows.js.map +1 -1
  106. package/dist/capabilities/workflows.specs.d.ts +2 -0
  107. package/dist/capabilities/workflows.specs.d.ts.map +1 -1
  108. package/dist/capabilities/workflows.specs.js +65 -1
  109. package/dist/capabilities/workflows.specs.js.map +1 -1
  110. package/dist/codeact/sandbox-packages.d.ts +0 -7
  111. package/dist/codeact/sandbox-packages.d.ts.map +1 -1
  112. package/dist/codeact/sandbox-packages.js +1 -10
  113. package/dist/codeact/sandbox-packages.js.map +1 -1
  114. package/dist/evals/surfaces/game.d.ts +8 -2
  115. package/dist/evals/surfaces/game.d.ts.map +1 -1
  116. package/dist/evals/surfaces/game.js +460 -2
  117. package/dist/evals/surfaces/game.js.map +1 -1
  118. package/dist/game-authoring.d.ts +4895 -59
  119. package/dist/game-authoring.d.ts.map +1 -1
  120. package/dist/game-build.d.ts +3 -0
  121. package/dist/game-build.d.ts.map +1 -0
  122. package/dist/game-build.js +3 -0
  123. package/dist/game-build.js.map +1 -0
  124. package/dist/game-examples.d.ts +1355 -2
  125. package/dist/game-examples.d.ts.map +1 -1
  126. package/dist/generation-cancel.d.ts +31 -0
  127. package/dist/generation-cancel.d.ts.map +1 -0
  128. package/dist/generation-cancel.js +28 -0
  129. package/dist/generation-cancel.js.map +1 -0
  130. package/dist/host-access-gate.d.ts +29 -0
  131. package/dist/host-access-gate.d.ts.map +1 -0
  132. package/dist/host-access-gate.js +39 -0
  133. package/dist/host-access-gate.js.map +1 -0
  134. package/dist/host-modules/dispatcher.d.ts +7 -1
  135. package/dist/host-modules/dispatcher.d.ts.map +1 -1
  136. package/dist/host-modules/dispatcher.js +13 -2
  137. package/dist/host-modules/dispatcher.js.map +1 -1
  138. package/dist/host-modules/docx.d.ts.map +1 -1
  139. package/dist/host-modules/docx.js +2 -2
  140. package/dist/host-modules/docx.js.map +1 -1
  141. package/dist/host-modules/epub.d.ts.map +1 -1
  142. package/dist/host-modules/epub.js +2 -2
  143. package/dist/host-modules/epub.js.map +1 -1
  144. package/dist/host-modules/fabric.d.ts.map +1 -1
  145. package/dist/host-modules/fabric.js +1 -1
  146. package/dist/host-modules/fabric.js.map +1 -1
  147. package/dist/host-modules/limits.d.ts +10 -8
  148. package/dist/host-modules/limits.d.ts.map +1 -1
  149. package/dist/host-modules/limits.js +14 -9
  150. package/dist/host-modules/limits.js.map +1 -1
  151. package/dist/host-modules/mammoth.d.ts.map +1 -1
  152. package/dist/host-modules/mammoth.js +2 -2
  153. package/dist/host-modules/mammoth.js.map +1 -1
  154. package/dist/host-modules/ocr.d.ts.map +1 -1
  155. package/dist/host-modules/ocr.js +1 -1
  156. package/dist/host-modules/ocr.js.map +1 -1
  157. package/dist/host-modules/pdf.d.ts.map +1 -1
  158. package/dist/host-modules/pdf.js +2 -2
  159. package/dist/host-modules/pdf.js.map +1 -1
  160. package/dist/host-modules/pdflib.d.ts.map +1 -1
  161. package/dist/host-modules/pdflib.js +2 -2
  162. package/dist/host-modules/pdflib.js.map +1 -1
  163. package/dist/host-modules/pptx.d.ts.map +1 -1
  164. package/dist/host-modules/pptx.js +2 -2
  165. package/dist/host-modules/pptx.js.map +1 -1
  166. package/dist/host-modules/pptxgen.d.ts.map +1 -1
  167. package/dist/host-modules/pptxgen.js +2 -2
  168. package/dist/host-modules/pptxgen.js.map +1 -1
  169. package/dist/host-modules/tfjs.d.ts.map +1 -1
  170. package/dist/host-modules/tfjs.js +4 -4
  171. package/dist/host-modules/tfjs.js.map +1 -1
  172. package/dist/host-modules/xlsx.d.ts.map +1 -1
  173. package/dist/host-modules/xlsx.js +2 -2
  174. package/dist/host-modules/xlsx.js.map +1 -1
  175. package/dist/index.d.ts +3 -0
  176. package/dist/index.d.ts.map +1 -1
  177. package/dist/index.js +4 -0
  178. package/dist/index.js.map +1 -1
  179. package/dist/js-sandbox.d.ts +7 -1
  180. package/dist/js-sandbox.d.ts.map +1 -1
  181. package/dist/js-sandbox.js +20 -4
  182. package/dist/js-sandbox.js.map +1 -1
  183. package/dist/timeline-code-bake.js +2 -2
  184. package/dist/timeline-code-bake.js.map +1 -1
  185. package/dist/tools/builtin-tools.d.ts +4 -3
  186. package/dist/tools/builtin-tools.d.ts.map +1 -1
  187. package/dist/tools/builtin-tools.js +11 -3
  188. package/dist/tools/builtin-tools.js.map +1 -1
  189. 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
- import type { CapabilityExport, CapabilityModule, CapabilityRun } from "./types.js";
23
- import { type MediaEditRequest } from "@nodetool-ai/timeline";
24
- type ToolError = {
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":"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"}
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 { z } from "zod";
21
- import { applyTimelineTrackOp } from "@nodetool-ai/timeline/ops";
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
- return normalizeAuthoredDocument(raw);
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
- const { document, settings } = documentToStore(raw);
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 durationMs = documentDurationMs(document);
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(timelineId, expectedUpdatedAt, { ...document, clips }, {
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(timelineId, expectedUpdatedAt, { ...document, mediaTracks: next }, { ops: [{ tool: "track_object", input: { clip_id: clip.id, track_id: trackId } }] });
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;