agent-nuvira 3.5.6 → 3.5.7

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 (110) hide show
  1. package/.agents/skills/index.json +16 -0
  2. package/.agents/skills/motion/SKILL.md +27 -0
  3. package/README.md +56 -1
  4. package/dist/cli/chat.d.ts +76 -17
  5. package/dist/cli/chat.d.ts.map +1 -1
  6. package/dist/cli/chat.js +258 -118
  7. package/dist/cli/chat.js.map +1 -1
  8. package/dist/cli/doctor.d.ts +31 -2
  9. package/dist/cli/doctor.d.ts.map +1 -1
  10. package/dist/cli/doctor.js +143 -7
  11. package/dist/cli/doctor.js.map +1 -1
  12. package/dist/cli/loop-executor.d.ts.map +1 -1
  13. package/dist/cli/loop-executor.js +4 -1
  14. package/dist/cli/loop-executor.js.map +1 -1
  15. package/dist/cli/parity.d.ts +12 -0
  16. package/dist/cli/parity.d.ts.map +1 -1
  17. package/dist/cli/parity.js +46 -1
  18. package/dist/cli/parity.js.map +1 -1
  19. package/dist/cli/tool-install-prompt.d.ts +2 -7
  20. package/dist/cli/tool-install-prompt.d.ts.map +1 -1
  21. package/dist/cli/tool-install-prompt.js +11 -28
  22. package/dist/cli/tool-install-prompt.js.map +1 -1
  23. package/dist/config/scratch-workspace.d.ts +134 -0
  24. package/dist/config/scratch-workspace.d.ts.map +1 -0
  25. package/dist/config/scratch-workspace.js +213 -0
  26. package/dist/config/scratch-workspace.js.map +1 -0
  27. package/dist/gateway/adapters.d.ts +24 -0
  28. package/dist/gateway/adapters.d.ts.map +1 -1
  29. package/dist/gateway/adapters.js +12 -0
  30. package/dist/gateway/adapters.js.map +1 -1
  31. package/dist/gateway/oversized-reply.d.ts +39 -0
  32. package/dist/gateway/oversized-reply.d.ts.map +1 -0
  33. package/dist/gateway/oversized-reply.js +54 -0
  34. package/dist/gateway/oversized-reply.js.map +1 -0
  35. package/dist/gateway/registry.d.ts +0 -10
  36. package/dist/gateway/registry.d.ts.map +1 -1
  37. package/dist/gateway/registry.js +148 -4
  38. package/dist/gateway/registry.js.map +1 -1
  39. package/dist/learning/quota-ledger.d.ts +24 -0
  40. package/dist/learning/quota-ledger.d.ts.map +1 -1
  41. package/dist/learning/quota-ledger.js +40 -0
  42. package/dist/learning/quota-ledger.js.map +1 -1
  43. package/dist/learning/runtime-dependencies.d.ts +183 -0
  44. package/dist/learning/runtime-dependencies.d.ts.map +1 -0
  45. package/dist/learning/runtime-dependencies.js +349 -0
  46. package/dist/learning/runtime-dependencies.js.map +1 -0
  47. package/dist/learning/skill-store.d.ts.map +1 -1
  48. package/dist/learning/skill-store.js +6 -5
  49. package/dist/learning/skill-store.js.map +1 -1
  50. package/dist/skills/bundled-skills-phase3.d.ts +14 -0
  51. package/dist/skills/bundled-skills-phase3.d.ts.map +1 -1
  52. package/dist/skills/bundled-skills-phase3.js +50 -0
  53. package/dist/skills/bundled-skills-phase3.js.map +1 -1
  54. package/dist/tools/modality/motion-presets.d.ts +62 -0
  55. package/dist/tools/modality/motion-presets.d.ts.map +1 -0
  56. package/dist/tools/modality/motion-presets.js +399 -0
  57. package/dist/tools/modality/motion-presets.js.map +1 -0
  58. package/dist/tools/modality/motion-tool.d.ts +62 -0
  59. package/dist/tools/modality/motion-tool.d.ts.map +1 -0
  60. package/dist/tools/modality/motion-tool.js +220 -0
  61. package/dist/tools/modality/motion-tool.js.map +1 -0
  62. package/dist/tools/modality/motion.d.ts +298 -0
  63. package/dist/tools/modality/motion.d.ts.map +1 -0
  64. package/dist/tools/modality/motion.js +514 -0
  65. package/dist/tools/modality/motion.js.map +1 -0
  66. package/dist/tools/registry.d.ts.map +1 -1
  67. package/dist/tools/registry.js +75 -0
  68. package/dist/tools/registry.js.map +1 -1
  69. package/dist/tools/tool-loop.d.ts.map +1 -1
  70. package/dist/tools/tool-loop.js +66 -16
  71. package/dist/tools/tool-loop.js.map +1 -1
  72. package/dist/tools/toolsets.js +2 -2
  73. package/dist/tools/toolsets.js.map +1 -1
  74. package/dist/utils/workspace-need.d.ts +84 -0
  75. package/dist/utils/workspace-need.d.ts.map +1 -0
  76. package/dist/utils/workspace-need.js +227 -0
  77. package/dist/utils/workspace-need.js.map +1 -0
  78. package/dist/web-dashboard/chat-console.d.ts +22 -0
  79. package/dist/web-dashboard/chat-console.d.ts.map +1 -1
  80. package/dist/web-dashboard/chat-console.js +65 -11
  81. package/dist/web-dashboard/chat-console.js.map +1 -1
  82. package/dist/web-dashboard/hub-data.d.ts +9 -1
  83. package/dist/web-dashboard/hub-data.d.ts.map +1 -1
  84. package/dist/web-dashboard/hub-data.js +2 -0
  85. package/dist/web-dashboard/hub-data.js.map +1 -1
  86. package/dist/web-dashboard/project-context.d.ts +1 -1
  87. package/dist/web-dashboard/project-context.d.ts.map +1 -1
  88. package/dist/web-dashboard/project-context.js +7 -1
  89. package/dist/web-dashboard/project-context.js.map +1 -1
  90. package/dist/web-dashboard/server.d.ts +33 -0
  91. package/dist/web-dashboard/server.d.ts.map +1 -1
  92. package/dist/web-dashboard/server.js +204 -21
  93. package/dist/web-dashboard/server.js.map +1 -1
  94. package/dist/web-dashboard/src/types.d.ts +46 -0
  95. package/dist/web-dashboard/src/types.d.ts.map +1 -1
  96. package/dist/web-dashboard/workspace-guard.d.ts +20 -21
  97. package/dist/web-dashboard/workspace-guard.d.ts.map +1 -1
  98. package/dist/web-dashboard/workspace-guard.js +20 -153
  99. package/dist/web-dashboard/workspace-guard.js.map +1 -1
  100. package/dist/web-dashboard/workspace-resolution.d.ts +23 -5
  101. package/dist/web-dashboard/workspace-resolution.d.ts.map +1 -1
  102. package/dist/web-dashboard/workspace-resolution.js +22 -4
  103. package/dist/web-dashboard/workspace-resolution.js.map +1 -1
  104. package/package.json +1 -1
  105. package/src/web-dashboard/public/assets/{index-DeSsNU94.css → index-CzRU84ET.css} +1 -1
  106. package/src/web-dashboard/public/assets/index-V0rIqVbg.js +236 -0
  107. package/src/web-dashboard/public/assets/index-V0rIqVbg.js.map +1 -0
  108. package/src/web-dashboard/public/index.html +2 -2
  109. package/src/web-dashboard/public/assets/index-Do_O67Kv.js +0 -236
  110. package/src/web-dashboard/public/assets/index-Do_O67Kv.js.map +0 -1
@@ -0,0 +1,514 @@
1
+ /**
2
+ * Motion — animation authored as CODE, rendered to a real video file.
3
+ *
4
+ * WHY IT EXISTS. "Make me a short animated explainer" is not a video-model
5
+ * request: a diffusion video model cannot label a chart with the user's own
6
+ * numbers, cannot spell a product name correctly, and gives a different take
7
+ * every run. The thing that can is an animation written as code — HTML/CSS/SVG
8
+ * plus a timeline — and the only missing half was a way to turn that code into a
9
+ * file. This module is that half: it drives a headless Chromium over the
10
+ * animation's TIMELINE (not over wall-clock time) and hands the frames to
11
+ * ffmpeg.
12
+ *
13
+ * THE CONTRACT, and it is the whole trick. An animation that only knows how to
14
+ * play in real time cannot be rendered reproducibly: a slow frame, a dropped
15
+ * rAF or a GC pause changes the output, and two runs of the same storyboard
16
+ * disagree. So the page is asked to be SEEKABLE:
17
+ *
18
+ * - `window.__motion = { seek(tMs) }` — set that state for time `t`. The
19
+ * preferred hook, and the only one that is exact.
20
+ * - a `requestAnimationFrame` loop is stepped by the injected runner at the
21
+ * same `tMs` (see `MOTION_INIT_SCRIPT`), so rAF-driven animation is
22
+ * deterministic even without the hook.
23
+ * - Web Animations (CSS animations/transitions, `element.animate`) are
24
+ * paused and moved to `currentTime = tMs`.
25
+ *
26
+ * Frames are captured at `t = i * 1000/fps`, so the same input produces the same
27
+ * frames, the same duration and the same file — which is what makes a re-edit
28
+ * ("scene 3, again, with the new number") meaningful.
29
+ *
30
+ * Everything expensive is gated on tools the user may not have: chromium
31
+ * (playwright, opt-in exactly as `browser.ts` treats it) and `ffmpeg`. A missing
32
+ * one is reported by name WITH the command that installs it, and never as a
33
+ * half-written video file.
34
+ */
35
+ import { spawn } from 'node:child_process';
36
+ import { copyFileSync, existsSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, rmSync, statSync, writeFileSync } from 'node:fs';
37
+ import { tmpdir } from 'node:os';
38
+ import { basename, join } from 'node:path';
39
+ import { envBuff } from '../../config/paths.js';
40
+ import { isBrowserAvailable } from './browser.js';
41
+ import { artifactsDir, binaryOnPath, safeArtifactName } from './shared.js';
42
+ export const MOTION_LIMITS = {
43
+ minFps: 1,
44
+ maxFps: 60,
45
+ defaultFps: 30,
46
+ minDurationMs: 200,
47
+ maxDurationMs: 10 * 60_000,
48
+ defaultDurationMs: 8_000,
49
+ maxFrames: 6_000,
50
+ maxWidth: 3_840,
51
+ maxHeight: 2_160,
52
+ defaultWidth: 1_280,
53
+ defaultHeight: 720,
54
+ };
55
+ const clampInt = (raw, min, max, fallback) => {
56
+ const n = typeof raw === 'number' ? raw : Number.parseInt(String(raw ?? ''), 10);
57
+ if (!Number.isFinite(n))
58
+ return fallback;
59
+ return Math.min(max, Math.max(min, Math.round(n)));
60
+ };
61
+ /** Even, because H.264's chroma subsampling rejects odd dimensions. */
62
+ const evenDimension = (n, max) => Math.min(max, Math.max(64, Math.round(n / 2) * 2));
63
+ /**
64
+ * The frame size: an aspect ratio names the SHAPE, a width/height names the
65
+ * size, and both may be given (`16:9` at `width: 1920`). Whichever side the
66
+ * caller pinned sets the scale and the ratio sets the other; nothing pinned
67
+ * means a landscape default.
68
+ */
69
+ export function resolveFrameSize(raw) {
70
+ const width = clampInt(raw.width, 64, MOTION_LIMITS.maxWidth, MOTION_LIMITS.defaultWidth);
71
+ const height = clampInt(raw.height, 64, MOTION_LIMITS.maxHeight, MOTION_LIMITS.defaultHeight);
72
+ const ratio = typeof raw.aspect_ratio === 'string' ? raw.aspect_ratio.trim() : '';
73
+ const parsed = /^(\d+(?:\.\d+)?)\s*[:/x]\s*(\d+(?:\.\d+)?)$/.exec(ratio);
74
+ if (!parsed)
75
+ return { width: evenDimension(width, MOTION_LIMITS.maxWidth), height: evenDimension(height, MOTION_LIMITS.maxHeight) };
76
+ const rw = Number(parsed[1]);
77
+ const rh = Number(parsed[2]);
78
+ if (!(rw > 0) || !(rh > 0))
79
+ return { width: evenDimension(width, MOTION_LIMITS.maxWidth), height: evenDimension(height, MOTION_LIMITS.maxHeight) };
80
+ if (raw.width !== undefined)
81
+ return { width: evenDimension(width, MOTION_LIMITS.maxWidth), height: evenDimension((width * rh) / rw, MOTION_LIMITS.maxHeight) };
82
+ if (raw.height !== undefined)
83
+ return { width: evenDimension((height * rw) / rh, MOTION_LIMITS.maxWidth), height: evenDimension(height, MOTION_LIMITS.maxHeight) };
84
+ const base = MOTION_LIMITS.defaultWidth;
85
+ return { width: evenDimension(base, MOTION_LIMITS.maxWidth), height: evenDimension((base * rh) / rw, MOTION_LIMITS.maxHeight) };
86
+ }
87
+ /**
88
+ * How many frames a render is made of, and the fps it is played at.
89
+ *
90
+ * Frame `i` shows the animation at `t = i * 1000/fps`, so a 30fps 8s clip is 240
91
+ * frames covering 0 → 7.967s: the last frame is the START of the last frame's
92
+ * interval, which is what a video player expects (the duration comes from the
93
+ * frame count, not from the timeline's last timestamp).
94
+ */
95
+ export function buildFramePlan(opts) {
96
+ const fps = clampInt(opts.fps, MOTION_LIMITS.minFps, MOTION_LIMITS.maxFps, MOTION_LIMITS.defaultFps);
97
+ const requested = clampInt(opts.duration_ms, MOTION_LIMITS.minDurationMs, MOTION_LIMITS.maxDurationMs, MOTION_LIMITS.defaultDurationMs);
98
+ // The frame cap is a resource guard (6,000 PNGs at 1080p is a lot of disk):
99
+ // the duration is trimmed rather than rendered out of memory.
100
+ const frames = Math.max(1, Math.min(MOTION_LIMITS.maxFrames, Math.round((requested / 1000) * fps)));
101
+ return { fps, durationMs: Math.round((frames / fps) * 1000), frames };
102
+ }
103
+ /** The timeline position a frame is captured at (ms). */
104
+ export function frameTimestampMs(index, fps) {
105
+ return Math.round((index * 1000) / fps);
106
+ }
107
+ // ─── The page side of the contract ─────────────────────────────────────────
108
+ /**
109
+ * Runs BEFORE the page's own scripts.
110
+ *
111
+ * Two jobs. (1) `window.__motionRunner` steps any `requestAnimationFrame` loop
112
+ * at a caller-chosen time instead of at the wall clock, so a rAF-driven
113
+ * animation is as reproducible as one using the seek hook. (2) It is the ONLY
114
+ * thing here that touches the page: a page that defines
115
+ * `window.__motion.seek(tMs)` keeps full control of its own determinism.
116
+ *
117
+ * rAF callbacks are queued rather than run immediately — that is what makes them
118
+ * steppable — and each is handed the same `tMs` a browser would have handed it.
119
+ */
120
+ export const MOTION_INIT_SCRIPT = `
121
+ (() => {
122
+ const queued = [];
123
+ window.requestAnimationFrame = (cb) => { queued.push(cb); return queued.length; };
124
+ window.cancelAnimationFrame = () => {};
125
+ window.__motionRunner = {
126
+ step(t) {
127
+ const due = queued.splice(0, queued.length);
128
+ for (const cb of due) { try { cb(t); } catch (e) { /* one bad frame must not stop the render */ } }
129
+ },
130
+ pending() { return queued.length; },
131
+ };
132
+ })();
133
+ `;
134
+ /**
135
+ * Put the runner in the DOCUMENT, first in script order.
136
+ *
137
+ * Not `page.addInitScript`: that runs per new DOCUMENT, and `page.setContent`
138
+ * (which this renderer uses, so an animation need not be a file on disk) writes
139
+ * into the existing one — MEASURED against a real chromium, the runner was simply
140
+ * absent and a rAF animation reported `seek: none`. Injecting the script into the
141
+ * markup is also browser-agnostic, which is why it is done here rather than
142
+ * through a page-API seam.
143
+ */
144
+ export function injectRunner(html) {
145
+ const tag = `<script>${MOTION_INIT_SCRIPT}</script>`;
146
+ for (const pattern of [/<head(\s[^>]*)?>/i, /<html(\s[^>]*)?>/i, /<body(\s[^>]*)?>/i]) {
147
+ if (pattern.test(html))
148
+ return html.replace(pattern, (match) => `${match}\n${tag}`);
149
+ }
150
+ // A fragment with no html/head/body: the script still has to come first.
151
+ return `${tag}\n${html}`;
152
+ }
153
+ /**
154
+ * Move the page to `tMs` — the hook the skill documents, then the rAF runner,
155
+ * then Web Animations. Returns which mechanism answered (`hook` / `raf` /
156
+ * `waapi` / `none`), so the render can tell
157
+ * the caller when a page is NOT seekable (the one condition under which the
158
+ * output would be a wall-clock recording rather than a render).
159
+ *
160
+ * The timestamp is INLINED and the whole thing is an immediately-invoked
161
+ * expression, because `page.evaluate` treats a string as an expression rather
162
+ * than as a function to call with an argument: a `(t) => …` string is evaluated,
163
+ * its function VALUE comes back, and the page never moves. Reproduced against a
164
+ * real chromium — the render reported `seek: none` on a page that had a working
165
+ * hook — which is why this is a builder rather than a constant and a parameter.
166
+ */
167
+ export const MOTION_SEEK_SCRIPT = ` let how = 'none';
168
+ const hook = window.__motion;
169
+ if (hook && typeof hook.seek === 'function') { hook.seek(t); how = 'hook'; }
170
+ if (window.__motionRunner) {
171
+ window.__motionRunner.step(t);
172
+ // A stepped rAF loop IS a seek mechanism, so a page that animates only that
173
+ // way is not reported as unseekable.
174
+ if (how === 'none') how = 'raf';
175
+ }
176
+ if (document.getAnimations) {
177
+ const anims = document.getAnimations();
178
+ for (const a of anims) { try { a.pause(); a.currentTime = t; } catch (e) {} }
179
+ if (anims.length > 0 && how === 'none') how = 'waapi';
180
+ }
181
+ return how;
182
+ `;
183
+ /** The expression that seeks the page to `tMs`, ready for `page.evaluate`. */
184
+ export function seekScript(tMs) {
185
+ return `(() => {\n const t = ${Math.round(tMs)};\n${MOTION_SEEK_SCRIPT}})()`;
186
+ }
187
+ /**
188
+ * Wait for fonts before the first frame is taken — the same IIFE rule as
189
+ * `seekScript`: an expression, not a function value.
190
+ */
191
+ export const MOTION_READY_SCRIPT = `(() =>
192
+ new Promise((resolve) => {
193
+ const done = () => resolve(true);
194
+ if (document.fonts && document.fonts.ready) document.fonts.ready.then(done, done);
195
+ else done();
196
+ }))()`;
197
+ /**
198
+ * The ffmpeg argv for a frame sequence → video.
199
+ *
200
+ * `-start_number 1` because the capture numbers frames from 1 (`frame-00001.png`),
201
+ * `yuv420p` and even dimensions because that is what players actually play, and
202
+ * `+faststart` so an mp4 can be streamed/previewed without a full download.
203
+ */
204
+ export function buildFfmpegArgs(o) {
205
+ const crf = clampInt(o.crf, 0, 51, o.format === 'gif' ? 0 : 20);
206
+ // A GIF has no audio track to mux into — the input would make ffmpeg fail with
207
+ // a stream mapping error, so it is dropped here rather than guarded by every
208
+ // caller.
209
+ const audioPath = o.format === 'gif' ? undefined : o.audioPath;
210
+ const args = ['-y', '-hide_banner', '-loglevel', 'error', '-framerate', String(o.fps), '-start_number', '1', '-i', o.pattern];
211
+ if (audioPath)
212
+ args.push('-i', audioPath);
213
+ const burn = o.burnCaptions && o.srtPath ? o.srtPath : undefined;
214
+ // ONE `-vf` for the whole chain: ffmpeg keeps only the LAST `-vf` it is given,
215
+ // so a GIF's palette chain and a caption burn written as two flags would drop
216
+ // the palette (the subtitles would render, over the wrong colors, and nothing
217
+ // would say so).
218
+ const filters = [];
219
+ if (o.format === 'gif') {
220
+ filters.push('split[a][b];[a]palettegen=stats_mode=diff[p];[b][p]paletteuse=dither=bayer');
221
+ }
222
+ // Subtitles are burned with libass; the flag is opt-in because a build without
223
+ // libass fails here rather than producing a wrong file (the error is returned
224
+ // verbatim, so the reason is the user's to read).
225
+ if (burn)
226
+ filters.push(`subtitles=${burn}`);
227
+ if (filters.length > 0)
228
+ args.push('-vf', filters.join(','));
229
+ if (o.format === 'gif') {
230
+ args.push('-loop', '0');
231
+ }
232
+ else if (o.format === 'webm') {
233
+ args.push('-c:v', 'libvpx-vp9', '-b:v', '0', '-crf', String(crf), '-pix_fmt', 'yuv420p');
234
+ }
235
+ else {
236
+ args.push('-c:v', 'libx264', '-pix_fmt', 'yuv420p', '-crf', String(crf), '-movflags', '+faststart');
237
+ }
238
+ if (audioPath) {
239
+ args.push('-c:a', 'aac', '-shortest');
240
+ }
241
+ args.push(o.out);
242
+ return args;
243
+ }
244
+ /** The argv that attaches narration to an already-rendered video (stream copy). */
245
+ export function buildMuxArgs(o) {
246
+ return ['-y', '-hide_banner', '-loglevel', 'error', '-i', o.videoPath, '-i', o.audioPath, '-c:v', 'copy', '-c:a', 'aac', '-shortest', o.out];
247
+ }
248
+ /** `HH:MM:SS,mmm` — the only timestamp shape SRT accepts. */
249
+ export function formatSrtTime(ms) {
250
+ const total = Math.max(0, Math.round(ms));
251
+ const h = Math.floor(total / 3_600_000);
252
+ const m = Math.floor((total % 3_600_000) / 60_000);
253
+ const s = Math.floor((total % 60_000) / 1000);
254
+ const milli = total % 1000;
255
+ const pad = (n, len = 2) => String(n).padStart(len, '0');
256
+ return `${pad(h)}:${pad(m)}:${pad(s)},${pad(milli, 3)}`;
257
+ }
258
+ /**
259
+ * A caption track. `from`/`to` are what the caller asked for, and overlapping or
260
+ * inverted cues are repaired rather than emitted (a file a player rejects is
261
+ * worse than no captions at all).
262
+ */
263
+ export function buildSrt(captions) {
264
+ let previousEnd = 0;
265
+ const lines = [];
266
+ captions.forEach((cue, index) => {
267
+ const from = Math.max(previousEnd, Math.max(0, Math.round(cue.from_ms)));
268
+ const to = Math.max(from + 1, Math.round(cue.to_ms));
269
+ previousEnd = to;
270
+ lines.push(String(index + 1), `${formatSrtTime(from)} --> ${formatSrtTime(to)}`, cue.text.trim(), '');
271
+ });
272
+ return lines.join('\n');
273
+ }
274
+ const FFMPEG_INSTALL = {
275
+ darwin: 'brew install ffmpeg',
276
+ linux: 'sudo apt-get install -y ffmpeg',
277
+ win32: 'winget install Gyan.FFmpeg --silent --accept-package-agreements --accept-source-agreements',
278
+ };
279
+ /**
280
+ * Is this machine able to render? Answering with NAMES and the fix, because
281
+ * "motion render failed" leaves a user with nothing to do, and the two missing
282
+ * pieces have different installations.
283
+ */
284
+ let _availabilityOverride = null;
285
+ /** Test seam: answer availability without depending on what this machine has. */
286
+ export function setMotionAvailabilityForTests(availability) {
287
+ _availabilityOverride = availability;
288
+ }
289
+ export function motionAvailability() {
290
+ if (_availabilityOverride)
291
+ return _availabilityOverride;
292
+ const missing = [];
293
+ const hints = [];
294
+ if (!isBrowserAvailable()) {
295
+ missing.push('chromium (playwright)');
296
+ hints.push('npm install -D playwright && npx playwright install chromium');
297
+ }
298
+ if (!binaryOnPath('ffmpeg')) {
299
+ missing.push('ffmpeg');
300
+ hints.push(FFMPEG_INSTALL[process.platform] ?? FFMPEG_INSTALL.linux);
301
+ }
302
+ return { ok: missing.length === 0, missing, hint: hints.join(' ; ') };
303
+ }
304
+ let _launcher = null;
305
+ /** Test seam: replace `chromium.launch()` so the pipeline runs without a browser. */
306
+ export function setMotionLauncherForTests(launcher) {
307
+ _launcher = launcher;
308
+ }
309
+ async function launchChromium(viewport) {
310
+ const { chromium } = await import('playwright');
311
+ const browser = await chromium.launch({ headless: true });
312
+ return browser;
313
+ }
314
+ let _ffmpeg = null;
315
+ /** Test seam: replace the real ffmpeg invocation (recording argv, faking files). */
316
+ export function setFfmpegRunnerForTests(runner) {
317
+ _ffmpeg = runner;
318
+ }
319
+ function runFfmpeg(args) {
320
+ if (_ffmpeg)
321
+ return _ffmpeg(args);
322
+ return new Promise((resolve) => {
323
+ const child = spawn('ffmpeg', args, { stdio: ['ignore', 'ignore', 'pipe'] });
324
+ let stderr = '';
325
+ child.stderr?.on('data', (d) => {
326
+ if (stderr.length < 4_000)
327
+ stderr += d.toString('utf-8');
328
+ });
329
+ child.on('error', (err) => resolve({ code: -1, stderr: String(err) }));
330
+ child.on('close', (code) => resolve({ code: code ?? -1, stderr }));
331
+ });
332
+ }
333
+ /**
334
+ * Render a seekable HTML animation to a video file.
335
+ *
336
+ * Order matters: the frames are captured first (so a page that cannot be seeked
337
+ * is reported before anything is encoded), the encode lands in the artifact dir
338
+ * only once it succeeded (a failed render leaves no file behind), and narration
339
+ * is muxed onto the finished video by stream copy.
340
+ */
341
+ export async function renderMotion(req) {
342
+ const availability = motionAvailability();
343
+ if (!availability.ok) {
344
+ return { ok: false, error: `motion: cannot render — missing ${availability.missing.join(', ')}.`, hint: availability.hint };
345
+ }
346
+ const html = String(req.html ?? '');
347
+ if (!html.trim())
348
+ return { ok: false, error: 'motion: nothing to render (empty source).' };
349
+ const plan = buildFramePlan({ fps: req.fps, duration_ms: req.duration_ms });
350
+ const { width, height } = resolveFrameSize({ width: req.width, height: req.height, aspect_ratio: req.aspect_ratio });
351
+ const format = req.format === 'gif' || req.format === 'webm' ? req.format : 'mp4';
352
+ const workDir = mkdtempSync(join(tmpdir(), 'nuvira-motion-'));
353
+ const outDir = artifactsDir('motion', req.cwd);
354
+ const base = req.out_name ? safeArtifactName(req.out_name, '') : safeArtifactName('motion', '');
355
+ const finalName = `${base}.${format}`;
356
+ const outPath = join(outDir, finalName);
357
+ const warnings = [];
358
+ let seekMode = 'none';
359
+ try {
360
+ const browser = await (_launcher ?? launchChromium)({ width, height });
361
+ let page = null;
362
+ try {
363
+ page = await browser.newPage({ viewport: { width, height }, deviceScaleFactor: 1 });
364
+ // The runner goes in the markup, ahead of the animation's own script: it has
365
+ // to exist before the page tries to schedule its first frame.
366
+ await page.setContent(injectRunner(html), { waitUntil: 'load' });
367
+ await page.evaluate(MOTION_READY_SCRIPT);
368
+ const clip = { x: 0, y: 0, width, height };
369
+ for (let i = 0; i < plan.frames; i += 1) {
370
+ const t = frameTimestampMs(i, plan.fps);
371
+ const how = await page.evaluate(seekScript(t));
372
+ if (typeof how === 'string' && how !== 'none')
373
+ seekMode = how;
374
+ await page.screenshot({ path: join(workDir, `frame-${String(i + 1).padStart(5, '0')}.png`), clip });
375
+ }
376
+ if (seekMode === 'none') {
377
+ warnings.push('the animation is not seekable (no window.__motion.seek, no requestAnimationFrame loop and no Web Animations), ' +
378
+ 'so this render is a still sequence — see the motion skill for the seek contract');
379
+ }
380
+ }
381
+ finally {
382
+ await page?.close().catch(() => undefined);
383
+ await browser.close().catch(() => undefined);
384
+ }
385
+ const pattern = join(workDir, 'frame-%05d.png');
386
+ const encoded = await runFfmpeg(buildFfmpegArgs({ fps: plan.fps, pattern, out: outPath, format, crf: req.crf }));
387
+ if (encoded.code !== 0 || !existsSync(outPath)) {
388
+ return { ok: false, error: `motion: ffmpeg failed to encode the frames — ${encoded.stderr.trim().split('\n').slice(-3).join(' ')}` };
389
+ }
390
+ // Captions BEFORE narration, and the order is the whole point: burning them
391
+ // in re-encodes the video from the PNG frames, so an audio track muxed onto
392
+ // the earlier encode would be silently discarded — a narrate-and-burn render
393
+ // came back as a silent video that reported no warning at all. With the burn
394
+ // first, the narration is muxed onto the FINAL file and survives.
395
+ let srtPath = null;
396
+ if (req.captions && req.captions.length > 0) {
397
+ srtPath = join(outDir, `${base}.srt`);
398
+ writeFileSync(srtPath, buildSrt(req.captions), 'utf-8');
399
+ if (req.burn_captions) {
400
+ const burned = join(workDir, `burned.${format}`);
401
+ const res = await runFfmpeg(buildFfmpegArgs({ fps: plan.fps, pattern, out: burned, format, crf: req.crf, srtPath, burnCaptions: true }));
402
+ if (res.code === 0 && existsSync(burned))
403
+ copyFileSync(burned, outPath);
404
+ else
405
+ warnings.push(`captions were written to ${basename(srtPath)} but could not be burned in (this ffmpeg may lack libass)`);
406
+ }
407
+ }
408
+ // Narration: synthesized with the SAME local engine the `speak` tool uses, and
409
+ // skipped with a stated reason rather than silently dropping the audio.
410
+ if (req.narration && req.narration.trim()) {
411
+ const voiced = await attachNarration({ videoPath: outPath, text: req.narration, voice: req.voice, format, workDir });
412
+ if (!voiced.ok)
413
+ warnings.push(voiced.reason);
414
+ }
415
+ const bytes = existsSync(outPath) ? statSync(outPath).size : 0;
416
+ return {
417
+ ok: true,
418
+ file: outPath,
419
+ srt: srtPath,
420
+ frames: plan.frames,
421
+ fps: plan.fps,
422
+ durationMs: plan.durationMs,
423
+ width,
424
+ height,
425
+ format,
426
+ bytes,
427
+ seek: seekMode,
428
+ warnings,
429
+ };
430
+ }
431
+ catch (err) {
432
+ // A crash mid-encode must not leave a file that looks like a render.
433
+ if (existsSync(outPath))
434
+ rmSync(outPath, { force: true });
435
+ return { ok: false, error: `motion: render failed — ${err instanceof Error ? err.message : String(err)}` };
436
+ }
437
+ finally {
438
+ rmSync(workDir, { recursive: true, force: true });
439
+ }
440
+ }
441
+ let _speak = null;
442
+ /** Test seam: replace speech synthesis (so the mux path is testable offline). */
443
+ export function setSpeakForTests(speak) {
444
+ _speak = speak;
445
+ }
446
+ /** Synthesize narration and attach it by stream copy. Never throws. */
447
+ async function attachNarration(o) {
448
+ if (o.format === 'gif')
449
+ return { ok: false, reason: 'narration was skipped: a GIF cannot carry an audio track' };
450
+ try {
451
+ const speak = _speak ?? (await import('./voice.js')).speak;
452
+ const spoken = await speak(o.text, o.voice ? { voice: o.voice } : undefined);
453
+ if (!spoken?.ok || !spoken.file)
454
+ return { ok: false, reason: `narration was skipped: ${spoken?.error ?? 'speech synthesis unavailable'}` };
455
+ const muxed = join(o.workDir, `narrated.${o.format}`);
456
+ const res = await runFfmpeg(buildMuxArgs({ videoPath: o.videoPath, audioPath: spoken.file, out: muxed }));
457
+ if (res.code !== 0 || !existsSync(muxed)) {
458
+ return { ok: false, reason: `narration was generated (${spoken.file}) but could not be muxed in — ${res.stderr.trim().split('\n').slice(-2).join(' ')}` };
459
+ }
460
+ copyFileSync(muxed, o.videoPath);
461
+ return { ok: true };
462
+ }
463
+ catch (err) {
464
+ return { ok: false, reason: `narration was skipped: ${err instanceof Error ? err.message : String(err)}` };
465
+ }
466
+ }
467
+ /** Where a render's source and settings are kept so it can be revised or replayed. */
468
+ export function motionHomeDir(cwd) {
469
+ const override = envBuff('MOTION_HOME');
470
+ const base = override ? override : join(cwd ?? process.cwd(), '.nuvira', 'motion');
471
+ mkdirSync(base, { recursive: true });
472
+ return base;
473
+ }
474
+ export function motionManifestPath(id, cwd) {
475
+ return join(motionHomeDir(cwd), id, 'manifest.json');
476
+ }
477
+ export function saveMotionManifest(manifest, cwd) {
478
+ const dir = join(motionHomeDir(cwd), manifest.id);
479
+ mkdirSync(dir, { recursive: true });
480
+ const file = join(dir, 'manifest.json');
481
+ writeFileSync(file, JSON.stringify(manifest, null, 2), 'utf-8');
482
+ writeFileSync(join(dir, 'source.html'), manifest.source, 'utf-8');
483
+ return file;
484
+ }
485
+ export function loadMotionManifest(id, cwd) {
486
+ const file = motionManifestPath(id, cwd);
487
+ if (!existsSync(file))
488
+ return null;
489
+ try {
490
+ return JSON.parse(readFileSync(file, 'utf-8'));
491
+ }
492
+ catch {
493
+ return null;
494
+ }
495
+ }
496
+ /** Newest first, so `list` reads like the history it is. */
497
+ export function listMotionManifests(cwd) {
498
+ const home = motionHomeDir(cwd);
499
+ const dirs = readdirSync(home, { withFileTypes: true }).filter((d) => d.isDirectory()).map((d) => d.name);
500
+ const manifests = [];
501
+ for (const id of dirs) {
502
+ const manifest = loadMotionManifest(id, cwd);
503
+ if (manifest)
504
+ manifests.push(manifest);
505
+ }
506
+ return manifests.sort((a, b) => b.createdAt - a.createdAt);
507
+ }
508
+ /** A short, filesystem-safe render id (`motion-20261015-ab12cd`). */
509
+ export function newMotionId(now = Date.now()) {
510
+ const stamp = new Date(now).toISOString().slice(0, 10).replace(/-/g, '');
511
+ const rand = Math.random().toString(36).slice(2, 8);
512
+ return `motion-${stamp}-${rand}`;
513
+ }
514
+ //# sourceMappingURL=motion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"motion.js","sourceRoot":"","sources":["../../../src/tools/modality/motion.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}