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.
- package/.agents/skills/index.json +16 -0
- package/.agents/skills/motion/SKILL.md +27 -0
- package/README.md +56 -1
- package/dist/cli/chat.d.ts +76 -17
- package/dist/cli/chat.d.ts.map +1 -1
- package/dist/cli/chat.js +258 -118
- package/dist/cli/chat.js.map +1 -1
- package/dist/cli/doctor.d.ts +31 -2
- package/dist/cli/doctor.d.ts.map +1 -1
- package/dist/cli/doctor.js +143 -7
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/loop-executor.d.ts.map +1 -1
- package/dist/cli/loop-executor.js +4 -1
- package/dist/cli/loop-executor.js.map +1 -1
- package/dist/cli/parity.d.ts +12 -0
- package/dist/cli/parity.d.ts.map +1 -1
- package/dist/cli/parity.js +46 -1
- package/dist/cli/parity.js.map +1 -1
- package/dist/cli/tool-install-prompt.d.ts +2 -7
- package/dist/cli/tool-install-prompt.d.ts.map +1 -1
- package/dist/cli/tool-install-prompt.js +11 -28
- package/dist/cli/tool-install-prompt.js.map +1 -1
- package/dist/config/scratch-workspace.d.ts +134 -0
- package/dist/config/scratch-workspace.d.ts.map +1 -0
- package/dist/config/scratch-workspace.js +213 -0
- package/dist/config/scratch-workspace.js.map +1 -0
- package/dist/gateway/adapters.d.ts +24 -0
- package/dist/gateway/adapters.d.ts.map +1 -1
- package/dist/gateway/adapters.js +12 -0
- package/dist/gateway/adapters.js.map +1 -1
- package/dist/gateway/oversized-reply.d.ts +39 -0
- package/dist/gateway/oversized-reply.d.ts.map +1 -0
- package/dist/gateway/oversized-reply.js +54 -0
- package/dist/gateway/oversized-reply.js.map +1 -0
- package/dist/gateway/registry.d.ts +0 -10
- package/dist/gateway/registry.d.ts.map +1 -1
- package/dist/gateway/registry.js +148 -4
- package/dist/gateway/registry.js.map +1 -1
- package/dist/learning/quota-ledger.d.ts +24 -0
- package/dist/learning/quota-ledger.d.ts.map +1 -1
- package/dist/learning/quota-ledger.js +40 -0
- package/dist/learning/quota-ledger.js.map +1 -1
- package/dist/learning/runtime-dependencies.d.ts +183 -0
- package/dist/learning/runtime-dependencies.d.ts.map +1 -0
- package/dist/learning/runtime-dependencies.js +349 -0
- package/dist/learning/runtime-dependencies.js.map +1 -0
- package/dist/learning/skill-store.d.ts.map +1 -1
- package/dist/learning/skill-store.js +6 -5
- package/dist/learning/skill-store.js.map +1 -1
- package/dist/skills/bundled-skills-phase3.d.ts +14 -0
- package/dist/skills/bundled-skills-phase3.d.ts.map +1 -1
- package/dist/skills/bundled-skills-phase3.js +50 -0
- package/dist/skills/bundled-skills-phase3.js.map +1 -1
- package/dist/tools/modality/motion-presets.d.ts +62 -0
- package/dist/tools/modality/motion-presets.d.ts.map +1 -0
- package/dist/tools/modality/motion-presets.js +399 -0
- package/dist/tools/modality/motion-presets.js.map +1 -0
- package/dist/tools/modality/motion-tool.d.ts +62 -0
- package/dist/tools/modality/motion-tool.d.ts.map +1 -0
- package/dist/tools/modality/motion-tool.js +220 -0
- package/dist/tools/modality/motion-tool.js.map +1 -0
- package/dist/tools/modality/motion.d.ts +298 -0
- package/dist/tools/modality/motion.d.ts.map +1 -0
- package/dist/tools/modality/motion.js +514 -0
- package/dist/tools/modality/motion.js.map +1 -0
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +75 -0
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/tool-loop.d.ts.map +1 -1
- package/dist/tools/tool-loop.js +66 -16
- package/dist/tools/tool-loop.js.map +1 -1
- package/dist/tools/toolsets.js +2 -2
- package/dist/tools/toolsets.js.map +1 -1
- package/dist/utils/workspace-need.d.ts +84 -0
- package/dist/utils/workspace-need.d.ts.map +1 -0
- package/dist/utils/workspace-need.js +227 -0
- package/dist/utils/workspace-need.js.map +1 -0
- package/dist/web-dashboard/chat-console.d.ts +22 -0
- package/dist/web-dashboard/chat-console.d.ts.map +1 -1
- package/dist/web-dashboard/chat-console.js +65 -11
- package/dist/web-dashboard/chat-console.js.map +1 -1
- package/dist/web-dashboard/hub-data.d.ts +9 -1
- package/dist/web-dashboard/hub-data.d.ts.map +1 -1
- package/dist/web-dashboard/hub-data.js +2 -0
- package/dist/web-dashboard/hub-data.js.map +1 -1
- package/dist/web-dashboard/project-context.d.ts +1 -1
- package/dist/web-dashboard/project-context.d.ts.map +1 -1
- package/dist/web-dashboard/project-context.js +7 -1
- package/dist/web-dashboard/project-context.js.map +1 -1
- package/dist/web-dashboard/server.d.ts +33 -0
- package/dist/web-dashboard/server.d.ts.map +1 -1
- package/dist/web-dashboard/server.js +204 -21
- package/dist/web-dashboard/server.js.map +1 -1
- package/dist/web-dashboard/src/types.d.ts +46 -0
- package/dist/web-dashboard/src/types.d.ts.map +1 -1
- package/dist/web-dashboard/workspace-guard.d.ts +20 -21
- package/dist/web-dashboard/workspace-guard.d.ts.map +1 -1
- package/dist/web-dashboard/workspace-guard.js +20 -153
- package/dist/web-dashboard/workspace-guard.js.map +1 -1
- package/dist/web-dashboard/workspace-resolution.d.ts +23 -5
- package/dist/web-dashboard/workspace-resolution.d.ts.map +1 -1
- package/dist/web-dashboard/workspace-resolution.js +22 -4
- package/dist/web-dashboard/workspace-resolution.js.map +1 -1
- package/package.json +1 -1
- package/src/web-dashboard/public/assets/{index-DeSsNU94.css → index-CzRU84ET.css} +1 -1
- package/src/web-dashboard/public/assets/index-V0rIqVbg.js +236 -0
- package/src/web-dashboard/public/assets/index-V0rIqVbg.js.map +1 -0
- package/src/web-dashboard/public/index.html +2 -2
- package/src/web-dashboard/public/assets/index-Do_O67Kv.js +0 -236
- 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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACvI,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAO3E,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,MAAM,EAAE,CAAC;IACT,MAAM,EAAE,EAAE;IACV,UAAU,EAAE,EAAE;IACd,aAAa,EAAE,GAAG;IAClB,aAAa,EAAE,EAAE,GAAG,MAAM;IAC1B,iBAAiB,EAAE,KAAK;IACxB,SAAS,EAAE,KAAK;IAChB,QAAQ,EAAE,KAAK;IACf,SAAS,EAAE,KAAK;IAChB,YAAY,EAAE,KAAK;IACnB,aAAa,EAAE,GAAG;CACV,CAAC;AAEX,MAAM,QAAQ,GAAG,CAAC,GAAY,EAAE,GAAW,EAAE,GAAW,EAAE,QAAgB,EAAU,EAAE;IACpF,MAAM,CAAC,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACjF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,QAAQ,CAAC;IACzC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,CAAC,CAAC;AAEF,uEAAuE;AACvE,MAAM,aAAa,GAAG,CAAC,CAAS,EAAE,GAAW,EAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE7G;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAkE;IAIjG,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IAC1F,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IAC9F,MAAM,KAAK,GAAG,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClF,MAAM,MAAM,GAAG,6CAA6C,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzE,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;IACpI,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;IACnJ,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;IAC/J,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;IAClK,MAAM,IAAI,GAAG,aAAa,CAAC,YAAY,CAAC;IACxC,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC;AAClI,CAAC;AAUD;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,IAA8C;IAC3E,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IACrG,MAAM,SAAS,GAAG,QAAQ,CACxB,IAAI,CAAC,WAAW,EAChB,aAAa,CAAC,aAAa,EAC3B,aAAa,CAAC,aAAa,EAC3B,aAAa,CAAC,iBAAiB,CAChC,CAAC;IACF,4EAA4E;IAC5E,8DAA8D;IAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;IACpG,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;AACxE,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,GAAW;IACzD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AAC1C,CAAC;AAED,8EAA8E;AAE9E;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;CAajC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,GAAG,GAAG,WAAW,kBAAkB,WAAW,CAAC;IACrD,KAAK,MAAM,OAAO,IAAI,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,EAAE,CAAC;QACtF,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,GAAG,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,yEAAyE;IACzE,OAAO,GAAG,GAAG,KAAK,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;;;;;;;;;;;;;;;CAejC,CAAC;AAEF,8EAA8E;AAC9E,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,OAAO,yBAAyB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,kBAAkB,MAAM,CAAC;AAChF,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;;;;;QAK3B,CAAC;AAiBT;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,CAAsB;IACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChE,+EAA+E;IAC/E,6EAA6E;IAC7E,UAAU;IACV,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/D,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,eAAe,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;IAC9H,IAAI,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAEjE,+EAA+E;IAC/E,8EAA8E;IAC9E,8EAA8E;IAC9E,iBAAiB;IACjB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;IAC7F,CAAC;IACD,+EAA+E;IAC/E,8EAA8E;IAC9E,kDAAkD;IAClD,IAAI,IAAI;QAAE,OAAO,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;IAC5C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAE5D,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC1B,CAAC;SAAM,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAC3F,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IACtG,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACjB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,YAAY,CAAC,CAAwD;IACnF,OAAO,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AAC/I,CAAC;AAUD,6DAA6D;AAC7D,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC;IACxC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,MAAM,CAAC,CAAC;IACnD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC;IAC3B,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACjE,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;AAC1D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,QAAyB;IAChD,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACzE,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QACrD,WAAW,GAAG,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAWD,MAAM,cAAc,GAA2B;IAC7C,MAAM,EAAE,qBAAqB;IAC7B,KAAK,EAAE,gCAAgC;IACvC,KAAK,EAAE,4FAA4F;CACpG,CAAC;AAEF;;;;GAIG;AACH,IAAI,qBAAqB,GAA8B,IAAI,CAAC;AAE5D,iFAAiF;AACjF,MAAM,UAAU,6BAA6B,CAAC,YAAuC;IACnF,qBAAqB,GAAG,YAAY,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,IAAI,qBAAqB;QAAE,OAAO,qBAAqB,CAAC;IACxD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;AACxE,CAAC;AAmBD,IAAI,SAAS,GAA0B,IAAI,CAAC;AAE5C,qFAAqF;AACrF,MAAM,UAAU,yBAAyB,CAAC,QAA+B;IACvE,SAAS,GAAG,QAAQ,CAAC;AACvB,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,QAA2C;IACvE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,OAAO,OAAuC,CAAC;AACjD,CAAC;AAID,IAAI,OAAO,GAAwB,IAAI,CAAC;AAExC,oFAAoF;AACpF,MAAM,UAAU,uBAAuB,CAAC,MAA2B;IACjE,OAAO,GAAG,MAAM,CAAC;AACnB,CAAC;AAED,SAAS,SAAS,CAAC,IAAc;IAC/B,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7E,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;YACrC,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK;gBAAE,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACvE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC;AAwCD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAwB;IACzD,MAAM,YAAY,GAAG,kBAAkB,EAAE,CAAC;IAC1C,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;QACrB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,mCAAmC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC;IAC9H,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,2CAA2C,EAAE,CAAC;IAE3F,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5E,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;IACrH,MAAM,MAAM,GAAiB,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAEhG,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAChG,MAAM,SAAS,GAAG,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,QAAQ,GAAG,MAAM,CAAC;IAEtB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,IAAI,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACvE,IAAI,IAAI,GAA0B,IAAI,CAAC;QACvC,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC,CAAC;YACpF,6EAA6E;YAC7E,8DAA8D;YAC9D,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;YACjE,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;YAEzC,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;YAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxC,MAAM,CAAC,GAAG,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;gBACxC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,MAAM;oBAAE,QAAQ,GAAG,GAAG,CAAC;gBAC9D,MAAM,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YACtG,CAAC;YACD,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;gBACxB,QAAQ,CAAC,IAAI,CACX,gHAAgH;oBAC9G,iFAAiF,CACpF,CAAC;YACJ,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,MAAM,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,eAAe,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACjH,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,gDAAgD,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACvI,CAAC;QAED,4EAA4E;QAC5E,4EAA4E;QAC5E,6EAA6E;QAC7E,6EAA6E;QAC7E,kEAAkE;QAClE,IAAI,OAAO,GAAkB,IAAI,CAAC;QAClC,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC;YACtC,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;YACxD,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;gBACtB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,MAAM,EAAE,CAAC,CAAC;gBACjD,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,eAAe,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBACzI,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC;oBAAE,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;;oBACnE,QAAQ,CAAC,IAAI,CAAC,4BAA4B,QAAQ,CAAC,OAAO,CAAC,2DAA2D,CAAC,CAAC;YAC/H,CAAC;QACH,CAAC;QAED,+EAA+E;QAC/E,wEAAwE;QACxE,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;YACrH,IAAI,CAAC,MAAM,CAAC,EAAE;gBAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,OAAO;YACL,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,OAAO;YACb,GAAG,EAAE,OAAO;YACZ,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK;YACL,MAAM;YACN,MAAM;YACN,KAAK;YACL,IAAI,EAAE,QAAQ;YACd,QAAQ;SACT,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,qEAAqE;QACrE,IAAI,UAAU,CAAC,OAAO,CAAC;YAAE,MAAM,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1D,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;IAC7G,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAKD,IAAI,MAAM,GAAmB,IAAI,CAAC;AAElC,iFAAiF;AACjF,MAAM,UAAU,gBAAgB,CAAC,KAAqB;IACpD,MAAM,GAAG,KAAK,CAAC;AACjB,CAAC;AAED,uEAAuE;AACvE,KAAK,UAAU,eAAe,CAAC,CAM9B;IACC,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,0DAA0D,EAAE,CAAC;IACjH,IAAI,CAAC;QACH,MAAM,KAAK,GAAY,MAAM,IAAI,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC;QACpE,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,0BAA0B,MAAM,EAAE,KAAK,IAAI,8BAA8B,EAAE,EAAE,CAAC;QAC3I,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACtD,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC1G,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,4BAA4B,MAAM,CAAC,IAAI,iCAAiC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QAC5J,CAAC;QACD,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;QACjC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,0BAA0B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;IAC7G,CAAC;AACH,CAAC;AAsBD,sFAAsF;AACtF,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnF,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAU,EAAE,GAAY;IACzD,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAAwB,EAAE,GAAY;IACvE,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;IAClD,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IACxC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAChE,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAU,EAAE,GAAY;IACzD,MAAM,IAAI,GAAG,kBAAkB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAmB,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1G,MAAM,SAAS,GAAqB,EAAE,CAAC;IACvC,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC7C,IAAI,QAAQ;YAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;AAC7D,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,WAAW,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;IAC1C,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACzE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,OAAO,UAAU,KAAK,IAAI,IAAI,EAAE,CAAC;AACnC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH,OAAO,EAAE,CAAC,EAAgB,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AAMpD,OAAO,EAIL,KAAK,oBAAoB,EAC1B,MAAM,8BAA8B,CAAC;AAOtC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAMjF,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,YAAY,GAAG,UAAU,CAAC;AAElE,oEAAoE;AACpE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED;;;;GAIG;AACH,MAAM,WAAW,IAAI;IACnB,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,YAAY,CAAC;IACvB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,yBAAyB,CAAC;IACvC,2EAA2E;IAC3E,WAAW,EAAE,OAAO,CAAC;IACrB;;;;;;;;;;;;;;;;OAgBG;IACH,aAAa,EAAE,OAAO,CAAC;IACvB,qEAAqE;IACrE,GAAG,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC3D;AAED,wCAAwC;AACxC,MAAM,WAAW,WAAW;IAC1B,6EAA6E;IAC7E,aAAa,EAAE,GAAG,CAAC;IACnB,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;;;;;;;;;;;;;;OAeG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,yEAAyE;IACzE,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,4CAA4C;IAC5C,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,WAAW,EAAE,OAAO,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IACvG;;;;;;;;;;;;;OAaG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,EAAE,OAAO,gCAAgC,EAAE,kBAAkB,CAAC;IAC/E;;;;;;;;;;;;;OAaG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,EAAE,OAAO,gCAAgC,EAAE,cAAc,GAAG,IAAI,CAAC;IAC1E;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,EAAE,OAAO,0BAA0B,EAAE,QAAQ,CAAC;IACvD,kEAAkE;IAClE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,oEAAoE;IACpE,OAAO,CAAC,EAAE,OAAO,oBAAoB,EAAE,SAAS,CAAC;IACjD;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,qBAAqB,EAAE,YAAY,CAAC;IACvD;;;;;;OAMG;IACH,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACrD;;;;WAIG;QACH,SAAS,CAAC,CAAC,GAAG,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC1G,4EAA4E;QAC5E,aAAa,CAAC,CAAC,GAAG,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,GAAG,MAAM,GAAG,SAAS,CAAC;QACjF,SAAS,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;YAAE,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;YAAC,IAAI,EAAE,UAAU,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/J,sFAAsF;QACtF,MAAM,CAAC,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC;QACjD;;2EAEmE;QACnE,gBAAgB,CAAC,CAAC,KAAK,EAAE;YAAE,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;YAAC,IAAI,EAAE,UAAU,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACtJ,SAAS,EAAE;YAAE,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG;gBAAE,QAAQ,EAAE,MAAM,CAAC;gBAAC,SAAS,EAAE,MAAM,CAAA;aAAE,GAAG,IAAI,CAAA;SAAE,CAAC;KACxF,CAAC;IACF;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,OAAO,iBAAiB,EAAE,aAAa,CAAC;IACpD;;;;;;;;;;;;;OAaG;IACH,mBAAmB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,oBAAoB,CAAA;KAAE,CAAC;IACzF;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,OAAO,yBAAyB,EAAE,cAAc,EAAE,CAAC;IACrE;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,WAAW,CAAC,EAAE,OAAO,mBAAmB,EAAE,cAAc,CAAC;CAC1D;AAED,8BAA8B;AAC9B,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,oEAAoE;AACpE,MAAM,WAAW,aAAa;IAC5B,kFAAkF;IAClF,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,8DAA8D;IAC9D,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,qDAAqD;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;GAIG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,+DAA+D;AAC/D,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,CAAC;CAC1C;AAwFD,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB;;;;;;;;;iBAK5B,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;iBAahC,CAAC;AAKH,iGAAiG;AACjG,eAAO,MAAM,iBAAiB;;;;;iBAc5B,CAAC;AAEH,wEAAwE;AACxE,eAAO,MAAM,YAAY;;;iBAUvB,CAAC;AAEH,oFAAoF;AACpF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;iBASxB,CAAC;AAEH,yEAAyE;AACzE,eAAO,MAAM,eAAe;;;iBAG1B,CAAC;AAEH,kFAAkF;AAClF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;iBAgB1B,CAAC;AAEH,8EAA8E;AAC9E,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;iBAoBzB,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
|