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,399 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Motion presets — ready-made animations for the shapes people actually ask for.
|
|
3
|
+
*
|
|
4
|
+
* WHY PRESETS AT ALL. The seek contract (see `motion.ts`) makes ANY animation
|
|
5
|
+
* renderable, but the quality of the output then depends entirely on the model
|
|
6
|
+
* writing good motion code, and a small local model writes a title card that
|
|
7
|
+
* looks like a slide. These are the answer: four scene templates that are known
|
|
8
|
+
* to look right, are animated as a PURE FUNCTION OF TIME (`seek(t)` — no rAF, no
|
|
9
|
+
* timers), and take the user's real data.
|
|
10
|
+
*
|
|
11
|
+
* Two rules every template here follows, and both are load-bearing:
|
|
12
|
+
*
|
|
13
|
+
* 1. NOTHING IS FETCHED. No CDN font, no chart library, no image URL. A render
|
|
14
|
+
* must work on a machine with no network, and a chart library would make the
|
|
15
|
+
* output depend on whatever version loaded that day.
|
|
16
|
+
* 2. `seek(t)` is deterministic — computed from `t` and nothing else (not
|
|
17
|
+
* `Date.now()`, not a counter), so frame 120 is frame 120 on a fast machine
|
|
18
|
+
* and on a slow one.
|
|
19
|
+
*
|
|
20
|
+
* Templates receive the user's text verbatim, so every interpolation is escaped:
|
|
21
|
+
* an `<` in a company name must not become markup.
|
|
22
|
+
*/
|
|
23
|
+
export const MOTION_PRESETS = ['title-card', 'bar-race', 'line-reveal', 'code-walkthrough'];
|
|
24
|
+
export function isMotionPreset(name) {
|
|
25
|
+
return typeof name === 'string' && MOTION_PRESETS.includes(name);
|
|
26
|
+
}
|
|
27
|
+
/** Presets that cannot do anything sensible without the caller's data. */
|
|
28
|
+
const DATA_PRESETS = ['bar-race', 'line-reveal', 'code-walkthrough'];
|
|
29
|
+
export function presetNeedsData(preset) {
|
|
30
|
+
return DATA_PRESETS.includes(preset);
|
|
31
|
+
}
|
|
32
|
+
// ─── Text + data handling ──────────────────────────────────────────────────
|
|
33
|
+
export function escapeHtml(value) {
|
|
34
|
+
return String(value ?? '')
|
|
35
|
+
.replace(/&/g, '&')
|
|
36
|
+
.replace(/</g, '<')
|
|
37
|
+
.replace(/>/g, '>')
|
|
38
|
+
.replace(/"/g, '"')
|
|
39
|
+
.replace(/'/g, ''');
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Parse the caller's data into labelled points. Accepts the shapes a model
|
|
43
|
+
* actually produces: a JSON array of numbers, of `{label, value}`, of `[label,
|
|
44
|
+
* value]` pairs, a `{series}`/`{data}`/`{points}` wrapper, or CSV (header or
|
|
45
|
+
* not) with the label first. Returns an empty list rather than throwing — the
|
|
46
|
+
* caller decides what an unusable payload means.
|
|
47
|
+
*/
|
|
48
|
+
export function parseMotionData(raw) {
|
|
49
|
+
if (raw === undefined || raw === null || raw === '')
|
|
50
|
+
return [];
|
|
51
|
+
if (typeof raw === 'string') {
|
|
52
|
+
const text = raw.trim();
|
|
53
|
+
if (!text)
|
|
54
|
+
return [];
|
|
55
|
+
if (text.startsWith('[') || text.startsWith('{')) {
|
|
56
|
+
try {
|
|
57
|
+
return parseMotionData(JSON.parse(text));
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return parseCsv(text);
|
|
64
|
+
}
|
|
65
|
+
if (Array.isArray(raw)) {
|
|
66
|
+
const first = raw[0];
|
|
67
|
+
if (typeof first === 'number' || typeof first === 'string') {
|
|
68
|
+
// A bare series: the index is the label.
|
|
69
|
+
return raw
|
|
70
|
+
.map((entry, index) => ({ label: String(index + 1), value: toNumber(entry) }))
|
|
71
|
+
.filter((point) => Number.isFinite(point.value));
|
|
72
|
+
}
|
|
73
|
+
return raw
|
|
74
|
+
.map((entry, index) => {
|
|
75
|
+
if (Array.isArray(entry))
|
|
76
|
+
return { label: String(entry[0] ?? index + 1), value: toNumber(entry[1]) };
|
|
77
|
+
if (entry && typeof entry === 'object') {
|
|
78
|
+
const row = entry;
|
|
79
|
+
const label = row.label ?? row.name ?? row.x ?? row.key ?? row.category ?? String(index + 1);
|
|
80
|
+
// `value` may be spelled the domain's way (count, revenue, qty…): the
|
|
81
|
+
// first numeric field that is not the label wins.
|
|
82
|
+
const value = row.value ?? row.y ?? row.count ?? row.total ?? row.revenue ?? row.qty ?? firstNumeric(row);
|
|
83
|
+
return { label: String(label), value: toNumber(value) };
|
|
84
|
+
}
|
|
85
|
+
return { label: String(index + 1), value: toNumber(entry) };
|
|
86
|
+
})
|
|
87
|
+
.filter((point) => Number.isFinite(point.value));
|
|
88
|
+
}
|
|
89
|
+
if (typeof raw === 'object') {
|
|
90
|
+
const wrapper = raw;
|
|
91
|
+
for (const key of ['series', 'data', 'points', 'values', 'rows']) {
|
|
92
|
+
if (Array.isArray(wrapper[key]))
|
|
93
|
+
return parseMotionData(wrapper[key]);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return [];
|
|
97
|
+
}
|
|
98
|
+
function firstNumeric(row) {
|
|
99
|
+
for (const value of Object.values(row)) {
|
|
100
|
+
const n = toNumber(value);
|
|
101
|
+
if (Number.isFinite(n) && typeof value !== 'string')
|
|
102
|
+
return n;
|
|
103
|
+
if (Number.isFinite(n) && String(value).trim() !== '' && /^-?\d+(\.\d+)?$/.test(String(value).trim()))
|
|
104
|
+
return n;
|
|
105
|
+
}
|
|
106
|
+
return Number.NaN;
|
|
107
|
+
}
|
|
108
|
+
function toNumber(value) {
|
|
109
|
+
if (typeof value === 'number')
|
|
110
|
+
return value;
|
|
111
|
+
const n = Number(String(value ?? '').replace(/[$,%\s]/g, '').replace(/,/g, ''));
|
|
112
|
+
return Number.isFinite(n) ? n : Number.NaN;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Split one CSV line, honouring quoted cells.
|
|
116
|
+
*
|
|
117
|
+
* A spreadsheet export quotes any cell containing the delimiter, so
|
|
118
|
+
* `Alpha,"$1,200"` is TWO cells and a naive split reads the value as `$1` — a
|
|
119
|
+
* chart that quietly shows 1 instead of 1,200, which is worse than refusing the
|
|
120
|
+
* data. `""` inside a quoted cell is an escaped quote.
|
|
121
|
+
*/
|
|
122
|
+
function splitCsvLine(line) {
|
|
123
|
+
const cells = [];
|
|
124
|
+
let current = '';
|
|
125
|
+
let quoted = false;
|
|
126
|
+
for (let i = 0; i < line.length; i += 1) {
|
|
127
|
+
const ch = line[i];
|
|
128
|
+
if (quoted) {
|
|
129
|
+
if (ch === '"') {
|
|
130
|
+
if (line[i + 1] === '"') {
|
|
131
|
+
current += '"';
|
|
132
|
+
i += 1;
|
|
133
|
+
}
|
|
134
|
+
else
|
|
135
|
+
quoted = false;
|
|
136
|
+
}
|
|
137
|
+
else
|
|
138
|
+
current += ch;
|
|
139
|
+
}
|
|
140
|
+
else if (ch === '"') {
|
|
141
|
+
quoted = true;
|
|
142
|
+
}
|
|
143
|
+
else if (ch === ',' || ch === ';' || ch === '\t') {
|
|
144
|
+
cells.push(current.trim());
|
|
145
|
+
current = '';
|
|
146
|
+
}
|
|
147
|
+
else
|
|
148
|
+
current += ch;
|
|
149
|
+
}
|
|
150
|
+
cells.push(current.trim());
|
|
151
|
+
return cells;
|
|
152
|
+
}
|
|
153
|
+
function parseCsv(text) {
|
|
154
|
+
const rows = text
|
|
155
|
+
.split(/\r?\n/)
|
|
156
|
+
.map((line) => line.trim())
|
|
157
|
+
.filter((line) => line.length > 0)
|
|
158
|
+
.map(splitCsvLine);
|
|
159
|
+
if (rows.length === 0)
|
|
160
|
+
return [];
|
|
161
|
+
// A header row is detected rather than assumed: it is a row whose second cell
|
|
162
|
+
// is not a number.
|
|
163
|
+
const hasHeader = rows.length > 1 && !Number.isFinite(toNumber(rows[0][1] ?? '')) && rows[0].length > 1;
|
|
164
|
+
const body = hasHeader ? rows.slice(1) : rows;
|
|
165
|
+
return body
|
|
166
|
+
.map((cells, index) => {
|
|
167
|
+
const label = cells.length > 1 ? cells[0] : String(index + 1);
|
|
168
|
+
const value = cells.length > 1 ? cells[1] : cells[0];
|
|
169
|
+
return { label: label || String(index + 1), value: toNumber(value) };
|
|
170
|
+
})
|
|
171
|
+
.filter((point) => Number.isFinite(point.value));
|
|
172
|
+
}
|
|
173
|
+
function theme(params, opts) {
|
|
174
|
+
return {
|
|
175
|
+
accent: params.accent || '#4f9cf9',
|
|
176
|
+
background: params.background || '#0b1020',
|
|
177
|
+
foreground: params.foreground || '#f5f7fb',
|
|
178
|
+
muted: 'rgba(245,247,251,0.62)',
|
|
179
|
+
width: opts.width,
|
|
180
|
+
height: opts.height,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* The page shell: theme, centring, and the timeline helpers every preset uses.
|
|
185
|
+
* `seek(t)` is expected to be defined by the scene body, which is why the shell
|
|
186
|
+
* also exposes `ease`/`win` there — one implementation of "how motion feels".
|
|
187
|
+
*/
|
|
188
|
+
function shell(t, opts, body, script) {
|
|
189
|
+
return `<!DOCTYPE html>
|
|
190
|
+
<html><head><meta charset="utf-8">
|
|
191
|
+
<style>
|
|
192
|
+
* { box-sizing: border-box; margin: 0; padding: 0; }
|
|
193
|
+
html, body { width: ${t.width}px; height: ${t.height}px; overflow: hidden; background: ${t.background}; }
|
|
194
|
+
body {
|
|
195
|
+
font-family: ${'"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'};
|
|
196
|
+
color: ${t.foreground};
|
|
197
|
+
-webkit-font-smoothing: antialiased;
|
|
198
|
+
}
|
|
199
|
+
.stage { position: relative; width: ${t.width}px; height: ${t.height}px; padding: ${Math.round(t.height * 0.08)}px; }
|
|
200
|
+
.accent { color: ${t.accent}; }
|
|
201
|
+
</style></head>
|
|
202
|
+
<body><div class="stage">${body}</div>
|
|
203
|
+
<script>
|
|
204
|
+
(function () {
|
|
205
|
+
var D = ${opts.durationMs};
|
|
206
|
+
// A pure easing + window helper pair: every scene is a function of t, so the
|
|
207
|
+
// same t always paints the same frame.
|
|
208
|
+
function ease(p) { return p <= 0 ? 0 : p >= 1 ? 1 : 1 - Math.pow(1 - p, 3); }
|
|
209
|
+
function win(t, from, span) { return ease(span <= 0 ? 1 : (t - from) / span); }
|
|
210
|
+
function clamp01(p) { return p <= 0 ? 0 : p >= 1 ? 1 : p; }
|
|
211
|
+
window.__motion = { duration: D, seek: function (t) { __seek(clamp01(t / D), t); } };
|
|
212
|
+
function __seek(p, t) {
|
|
213
|
+
${script}
|
|
214
|
+
}
|
|
215
|
+
})();
|
|
216
|
+
</script>
|
|
217
|
+
</body></html>`;
|
|
218
|
+
}
|
|
219
|
+
// ─── Preset: title card ────────────────────────────────────────────────────
|
|
220
|
+
function titleCard(params, opts) {
|
|
221
|
+
const t = theme(params, opts);
|
|
222
|
+
const title = escapeHtml(params.title || 'Untitled');
|
|
223
|
+
const subtitle = escapeHtml(params.subtitle || '');
|
|
224
|
+
const kicker = escapeHtml(params.kicker || '');
|
|
225
|
+
const body = `
|
|
226
|
+
<div style="position:absolute;left:${Math.round(t.width * 0.08)}px;top:50%;transform:translateY(-50%);max-width:${Math.round(t.width * 0.84)}px">
|
|
227
|
+
${kicker ? `<div id="kicker" style="font-size:${Math.round(t.height * 0.035)}px;letter-spacing:0.18em;text-transform:uppercase;color:${t.accent};opacity:0">${kicker}</div>` : ''}
|
|
228
|
+
<div id="title" style="font-size:${Math.round(t.height * 0.115)}px;font-weight:800;line-height:1.06;letter-spacing:-0.02em;opacity:0">${title}</div>
|
|
229
|
+
<div id="rule" style="height:6px;border-radius:3px;background:${t.accent};width:0;margin:${Math.round(t.height * 0.045)}px 0"></div>
|
|
230
|
+
${subtitle ? `<div id="subtitle" style="font-size:${Math.round(t.height * 0.05)}px;color:${t.muted};opacity:0">${subtitle}</div>` : ''}
|
|
231
|
+
</div>`;
|
|
232
|
+
const script = ` var D = window.__motion.duration;
|
|
233
|
+
var kicker = document.getElementById('kicker');
|
|
234
|
+
var title = document.getElementById('title');
|
|
235
|
+
var rule = document.getElementById('rule');
|
|
236
|
+
var subtitle = document.getElementById('subtitle');
|
|
237
|
+
if (kicker) { kicker.style.opacity = win(t, 0, D * 0.16); kicker.style.transform = 'translateY(' + (1 - win(t, 0, D * 0.16)) * 18 + 'px)'; }
|
|
238
|
+
var tp = win(t, D * 0.08, D * 0.34);
|
|
239
|
+
title.style.opacity = tp;
|
|
240
|
+
title.style.transform = 'translateY(' + (1 - tp) * 26 + 'px)';
|
|
241
|
+
rule.style.width = (win(t, D * 0.3, D * 0.3) * 100) + '%';
|
|
242
|
+
if (subtitle) { subtitle.style.opacity = win(t, D * 0.5, D * 0.3); subtitle.style.transform = 'translateY(' + (1 - win(t, D * 0.5, D * 0.3)) * 14 + 'px)'; }`;
|
|
243
|
+
return shell(t, opts, body, script);
|
|
244
|
+
}
|
|
245
|
+
// ─── Preset: bar race ──────────────────────────────────────────────────────
|
|
246
|
+
function barRace(params, opts) {
|
|
247
|
+
const t = theme(params, opts);
|
|
248
|
+
const points = parseMotionData(params.data)
|
|
249
|
+
.sort((a, b) => b.value - a.value)
|
|
250
|
+
.slice(0, 10);
|
|
251
|
+
const max = points.reduce((m, p) => Math.max(m, Math.abs(p.value)), 0) || 1;
|
|
252
|
+
const decimals = Number.isFinite(params.decimals) ? Number(params.decimals) : 0;
|
|
253
|
+
const unit = escapeHtml(params.unit || '');
|
|
254
|
+
const title = escapeHtml(params.title || '');
|
|
255
|
+
const rowHeight = Math.min(72, Math.max(28, Math.floor((t.height * 0.74) / Math.max(1, points.length))));
|
|
256
|
+
const bars = points
|
|
257
|
+
.map((p, i) => `
|
|
258
|
+
<div class="row" data-i="${i}" style="display:flex;align-items:center;gap:${Math.round(t.width * 0.014)}px;height:${rowHeight}px;opacity:0">
|
|
259
|
+
<div class="lbl" style="width:${Math.round(t.width * 0.22)}px;font-size:${Math.round(rowHeight * 0.42)}px;color:${t.muted};white-space:nowrap;overflow:hidden;text-overflow:ellipsis">${escapeHtml(p.label)}</div>
|
|
260
|
+
<div style="flex:1;position:relative;height:${Math.round(rowHeight * 0.62)}px;background:rgba(255,255,255,0.06);border-radius:${Math.round(rowHeight * 0.3)}px">
|
|
261
|
+
<div class="bar" data-i="${i}" style="position:absolute;inset:0 auto 0 0;width:0;border-radius:${Math.round(rowHeight * 0.3)}px;background:linear-gradient(90deg, ${t.accent}, ${t.accent}aa)"></div>
|
|
262
|
+
</div>
|
|
263
|
+
<div class="val" data-i="${i}" style="width:${Math.round(t.width * 0.16)}px;text-align:right;font-variant-numeric:tabular-nums;font-size:${Math.round(rowHeight * 0.46)}px;font-weight:700">0</div>
|
|
264
|
+
</div>`)
|
|
265
|
+
.join('');
|
|
266
|
+
const body = `
|
|
267
|
+
${title ? `<div style="font-size:${Math.round(t.height * 0.055)}px;font-weight:700;margin-bottom:${Math.round(t.height * 0.03)}px">${title}</div>` : ''}
|
|
268
|
+
<div>${bars}</div>`;
|
|
269
|
+
const values = points.map((p) => Math.abs(p.value));
|
|
270
|
+
const script = ` var D = window.__motion.duration;
|
|
271
|
+
var max = ${max};
|
|
272
|
+
var values = ${JSON.stringify(values)};
|
|
273
|
+
var decimals = ${decimals};
|
|
274
|
+
var unit = ${JSON.stringify(params.unit || '')};
|
|
275
|
+
var rows = document.querySelectorAll('.row');
|
|
276
|
+
var stagger = (D * 0.5) / Math.max(1, rows.length);
|
|
277
|
+
for (var i = 0; i < rows.length; i++) {
|
|
278
|
+
var start = i * stagger;
|
|
279
|
+
var grow = win(t, start, D * 0.4);
|
|
280
|
+
var row = rows[i];
|
|
281
|
+
row.style.opacity = win(t, start, D * 0.14);
|
|
282
|
+
var bar = row.querySelector('.bar');
|
|
283
|
+
bar.style.width = (grow * (values[i] / max) * 100) + '%';
|
|
284
|
+
var val = row.querySelector('.val');
|
|
285
|
+
val.textContent = (values[i] * grow).toFixed(decimals) + unit;
|
|
286
|
+
}`;
|
|
287
|
+
return shell(t, opts, body, script);
|
|
288
|
+
}
|
|
289
|
+
// ─── Preset: line reveal ───────────────────────────────────────────────────
|
|
290
|
+
function lineReveal(params, opts) {
|
|
291
|
+
const t = theme(params, opts);
|
|
292
|
+
const points = parseMotionData(params.data).slice(0, 400);
|
|
293
|
+
const decimals = Number.isFinite(params.decimals) ? Number(params.decimals) : 1;
|
|
294
|
+
const padX = Math.round(t.width * 0.1);
|
|
295
|
+
const padY = Math.round(t.height * 0.16);
|
|
296
|
+
const plotW = t.width - padX * 2;
|
|
297
|
+
const plotH = t.height - padY * 2;
|
|
298
|
+
const values = points.map((p) => p.value);
|
|
299
|
+
const min = values.length ? Math.min(...values) : 0;
|
|
300
|
+
const max = values.length ? Math.max(...values) : 1;
|
|
301
|
+
const span = max - min || 1;
|
|
302
|
+
const coords = points.map((p, i) => {
|
|
303
|
+
const x = padX + (points.length <= 1 ? plotW : (i / (points.length - 1)) * plotW);
|
|
304
|
+
const y = padY + plotH - ((p.value - min) / span) * plotH;
|
|
305
|
+
return { x: Math.round(x), y: Math.round(y), label: p.label, value: p.value };
|
|
306
|
+
});
|
|
307
|
+
// Segment length is computed here rather than measured in the DOM: the dash
|
|
308
|
+
// animation then cannot depend on when layout settled.
|
|
309
|
+
let length = 0;
|
|
310
|
+
for (let i = 1; i < coords.length; i += 1) {
|
|
311
|
+
length += Math.hypot(coords[i].x - coords[i - 1].x, coords[i].y - coords[i - 1].y);
|
|
312
|
+
}
|
|
313
|
+
const path = coords.map((c, i) => `${i === 0 ? 'M' : 'L'}${c.x} ${c.y}`).join(' ');
|
|
314
|
+
const area = coords.length > 1 ? `${path} L${coords[coords.length - 1].x} ${padY + plotH} L${coords[0].x} ${padY + plotH} Z` : '';
|
|
315
|
+
const last = coords[coords.length - 1] ?? { x: padX, y: padY, label: '', value: 0 };
|
|
316
|
+
const title = escapeHtml(params.title || '');
|
|
317
|
+
const unit = escapeHtml(params.unit || '');
|
|
318
|
+
const body = `
|
|
319
|
+
${title ? `<div style="position:absolute;left:${padX}px;top:${Math.round(padY * 0.4)}px;font-size:${Math.round(t.height * 0.05)}px;font-weight:700">${title}</div>` : ''}
|
|
320
|
+
<svg width="${t.width}" height="${t.height}" style="position:absolute;inset:0">
|
|
321
|
+
${[0, 0.25, 0.5, 0.75, 1]
|
|
322
|
+
.map((g) => `<line x1="${padX}" y1="${Math.round(padY + plotH * g)}" x2="${padX + plotW}" y2="${Math.round(padY + plotH * g)}" stroke="rgba(255,255,255,0.08)" stroke-width="1"/>`)
|
|
323
|
+
.join('')}
|
|
324
|
+
${area ? `<path id="area" d="${area}" fill="${t.accent}" opacity="0"/>` : ''}
|
|
325
|
+
<path id="line" d="${path}" fill="none" stroke="${t.accent}" stroke-width="${Math.max(3, Math.round(t.height * 0.007))}" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="${length}" stroke-dashoffset="${length}"/>
|
|
326
|
+
<circle id="dot" cx="${last.x}" cy="${last.y}" r="${Math.max(5, Math.round(t.height * 0.011))}" fill="${t.foreground}" opacity="0"/>
|
|
327
|
+
</svg>
|
|
328
|
+
<div id="tip" style="position:absolute;left:${Math.min(last.x + 18, t.width - Math.round(t.width * 0.26))}px;top:${Math.max(8, last.y - Math.round(t.height * 0.09))}px;opacity:0;background:${t.accent};color:${t.background};padding:${Math.round(t.height * 0.014)}px ${Math.round(t.height * 0.022)}px;border-radius:${Math.round(t.height * 0.012)}px;font-weight:700;font-size:${Math.round(t.height * 0.038)}px;font-variant-numeric:tabular-nums">—</div>`;
|
|
329
|
+
const script = ` var D = window.__motion.duration;
|
|
330
|
+
var len = ${Math.round(length)};
|
|
331
|
+
var draw = win(t, D * 0.08, D * 0.62);
|
|
332
|
+
var line = document.getElementById('line');
|
|
333
|
+
if (line) line.setAttribute('stroke-dashoffset', String(len * (1 - draw)));
|
|
334
|
+
var area = document.getElementById('area');
|
|
335
|
+
if (area) area.setAttribute('opacity', String(win(t, D * 0.45, D * 0.4) * 0.16));
|
|
336
|
+
var dot = document.getElementById('dot');
|
|
337
|
+
if (dot) dot.setAttribute('opacity', String(win(t, D * 0.62, D * 0.12)));
|
|
338
|
+
var tip = document.getElementById('tip');
|
|
339
|
+
if (tip) {
|
|
340
|
+
var tipIn = win(t, D * 0.68, D * 0.16);
|
|
341
|
+
tip.style.opacity = String(tipIn);
|
|
342
|
+
tip.style.transform = 'translateY(' + ((1 - tipIn) * 10) + 'px)';
|
|
343
|
+
tip.textContent = (${JSON.stringify(last.value)} * tipIn).toFixed(${decimals}) + ${JSON.stringify(params.unit || '')};
|
|
344
|
+
}`;
|
|
345
|
+
return shell(t, opts, body, script);
|
|
346
|
+
}
|
|
347
|
+
// ─── Preset: code walkthrough ──────────────────────────────────────────────
|
|
348
|
+
function codeWalkthrough(params, opts) {
|
|
349
|
+
const t = theme(params, opts);
|
|
350
|
+
const raw = typeof params.data === 'string' ? params.data : Array.isArray(params.data) ? params.data.join('\n') : String(params.data ?? '');
|
|
351
|
+
const lines = raw.split(/\r?\n/).slice(0, 40);
|
|
352
|
+
const title = escapeHtml(params.title || '');
|
|
353
|
+
const fontSize = Math.min(26, Math.max(14, Math.floor((t.height * 0.72) / Math.max(1, lines.length) / 1.5)));
|
|
354
|
+
const lineHeight = Math.round(fontSize * 1.6);
|
|
355
|
+
const top = Math.round(t.height * 0.18);
|
|
356
|
+
const body = `
|
|
357
|
+
${title ? `<div style="position:absolute;left:${Math.round(t.width * 0.06)}px;top:${Math.round(t.height * 0.05)}px;font-size:${Math.round(t.height * 0.045)}px;font-weight:700">${title}</div>` : ''}
|
|
358
|
+
<div style="position:absolute;left:${Math.round(t.width * 0.06)}px;top:${top}px;right:${Math.round(t.width * 0.06)}px">
|
|
359
|
+
<div id="codebox" style="position:relative;background:rgba(255,255,255,0.04);border:1px solid rgba(255,255,255,0.08);border-radius:${Math.round(t.height * 0.02)}px;padding:${Math.round(fontSize * 0.9)}px ${Math.round(fontSize * 1.2)}px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:${fontSize}px;line-height:${lineHeight}px">
|
|
360
|
+
<div id="hl" style="position:absolute;left:${Math.round(fontSize * 0.5)}px;right:${Math.round(fontSize * 0.5)}px;top:0;height:${lineHeight}px;background:${t.accent}22;border-left:3px solid ${t.accent};border-radius:6px;opacity:0"></div>
|
|
361
|
+
${lines
|
|
362
|
+
.map((line, i) => `<div class="ln" data-i="${i}" style="position:relative;white-space:pre;opacity:0;color:${line.trimStart().startsWith('//') || line.trimStart().startsWith('#') ? t.muted : t.foreground}">${escapeHtml(line) || ' '}</div>`)
|
|
363
|
+
.join('')}
|
|
364
|
+
</div>
|
|
365
|
+
</div>`;
|
|
366
|
+
const script = ` var D = window.__motion.duration;
|
|
367
|
+
var count = ${lines.length};
|
|
368
|
+
var lineHeight = ${lineHeight};
|
|
369
|
+
var lines = document.querySelectorAll('.ln');
|
|
370
|
+
var per = (D * 0.7) / Math.max(1, count);
|
|
371
|
+
for (var i = 0; i < lines.length; i++) {
|
|
372
|
+
var start = D * 0.08 + i * per;
|
|
373
|
+
var shown = win(t, start, per * 0.8);
|
|
374
|
+
lines[i].style.opacity = String(shown);
|
|
375
|
+
lines[i].style.transform = 'translateX(' + ((1 - shown) * 8) + 'px)';
|
|
376
|
+
}
|
|
377
|
+
var idx = Math.min(count - 1, Math.max(0, Math.floor((t - D * 0.08) / Math.max(1, per))));
|
|
378
|
+
var hl = document.getElementById('hl');
|
|
379
|
+
if (hl) {
|
|
380
|
+
hl.style.top = (${Math.round(fontSize * 0.9)} + idx * lineHeight) + 'px';
|
|
381
|
+
hl.style.opacity = String(win(t, D * 0.08, D * 0.1));
|
|
382
|
+
}`;
|
|
383
|
+
return shell(t, opts, body, script);
|
|
384
|
+
}
|
|
385
|
+
// ─── Entry point ───────────────────────────────────────────────────────────
|
|
386
|
+
/** The HTML for a preset. An unknown name falls back to a title card. */
|
|
387
|
+
export function presetHtml(preset, params, opts) {
|
|
388
|
+
switch (preset) {
|
|
389
|
+
case 'bar-race':
|
|
390
|
+
return barRace(params, opts);
|
|
391
|
+
case 'line-reveal':
|
|
392
|
+
return lineReveal(params, opts);
|
|
393
|
+
case 'code-walkthrough':
|
|
394
|
+
return codeWalkthrough(params, opts);
|
|
395
|
+
default:
|
|
396
|
+
return titleCard(params, opts);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
//# sourceMappingURL=motion-presets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"motion-presets.js","sourceRoot":"","sources":["../../../src/tools/modality/motion-presets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `motion_render` tool's behaviour, kept out of the registry so it can be
|
|
3
|
+
* called (and tested) directly — the same split `browser.ts` uses.
|
|
4
|
+
*
|
|
5
|
+
* Three things this layer owns, none of which belong in the renderer:
|
|
6
|
+
*
|
|
7
|
+
* - SOURCE RESOLUTION: raw HTML, an HTML file, or a preset plus the caller's
|
|
8
|
+
* data. A data-driven preset with no usable data is refused with the shapes
|
|
9
|
+
* that WOULD work, rather than rendered as an empty chart.
|
|
10
|
+
* - HISTORY: every render keeps its source and settings, so `revise` re-renders
|
|
11
|
+
* the stored source instead of re-inventing it (that is the difference
|
|
12
|
+
* between a re-edit and a second opinion).
|
|
13
|
+
* - HONEST REPORTING: frames, duration, size, the seek mechanism that was found
|
|
14
|
+
* and every warning — a render that could not be seeked or could not take its
|
|
15
|
+
* narration says so instead of returning a path and nothing else.
|
|
16
|
+
*/
|
|
17
|
+
import type { ToolContext } from '../registry.js';
|
|
18
|
+
import { type MotionCaption, type MotionFormat } from './motion.js';
|
|
19
|
+
export interface MotionToolArgs {
|
|
20
|
+
action?: 'render' | 'revise' | 'list' | 'presets';
|
|
21
|
+
html?: string;
|
|
22
|
+
html_path?: string;
|
|
23
|
+
preset?: string;
|
|
24
|
+
params?: Record<string, unknown>;
|
|
25
|
+
data?: unknown;
|
|
26
|
+
data_path?: string;
|
|
27
|
+
source_id?: string;
|
|
28
|
+
fps?: number;
|
|
29
|
+
duration_ms?: number;
|
|
30
|
+
width?: number;
|
|
31
|
+
height?: number;
|
|
32
|
+
aspect_ratio?: string;
|
|
33
|
+
format?: MotionFormat;
|
|
34
|
+
crf?: number;
|
|
35
|
+
narration?: string;
|
|
36
|
+
voice?: string;
|
|
37
|
+
captions?: MotionCaption[];
|
|
38
|
+
burn_captions?: boolean;
|
|
39
|
+
out_name?: string;
|
|
40
|
+
title?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface MotionToolResult {
|
|
43
|
+
text: string;
|
|
44
|
+
/** The rendered video, for the caller to register as an artifact + deliver. */
|
|
45
|
+
media?: {
|
|
46
|
+
path: string;
|
|
47
|
+
mime: string;
|
|
48
|
+
title: string;
|
|
49
|
+
};
|
|
50
|
+
/** Generated captions, when there were any. */
|
|
51
|
+
sidecar?: {
|
|
52
|
+
path: string;
|
|
53
|
+
mime: string;
|
|
54
|
+
title: string;
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Run one `motion_render` call. Returns text plus, on a successful render, the
|
|
59
|
+
* media the registry should register and deliver.
|
|
60
|
+
*/
|
|
61
|
+
export declare function runMotionTool(args: MotionToolArgs, ctx?: ToolContext): Promise<MotionToolResult>;
|
|
62
|
+
//# sourceMappingURL=motion-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"motion-tool.d.ts","sourceRoot":"","sources":["../../../src/tools/modality/motion-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,YAAY,EAWlB,MAAM,aAAa,CAAC;AAUrB,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,+CAA+C;IAC/C,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACzD;AA8DD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0JtG"}
|