@vosjs/cli 0.20.0 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -495,7 +495,7 @@ async function cmdCheck(argv) {
495
495
  return result.ok ? EXIT_OK : EXIT_ERROR;
496
496
  }
497
497
  async function delegate(argv, viaAlias = false) {
498
- const { run } = await import("./run-ZIMJOQRN.js");
498
+ const { run } = await import("./run-IRE2RO5J.js");
499
499
  if (viaAlias && argv[0]) {
500
500
  process.stderr.write(
501
501
  `note: "vos voila ${argv[0]}" is now "vos ${argv[0]}".
package/dist/index.d.ts CHANGED
@@ -285,24 +285,6 @@ interface MotionTemplate {
285
285
  at: MotionAnchor;
286
286
  }
287
287
 
288
- /**
289
- * Reuse: re-time a previous cut onto a NEW recording of the same
290
- * script. The recorder's `meta.steps` say when each actions.json step ran
291
- * in BOTH takes, so the old timeline maps onto the new one piecewise —
292
- * matched step edges are the control points, and any source time in
293
- * between interpolates. Explicit `anchor`s on camera spans resolve
294
- * directly against the new steps and win over the map.
295
- *
296
- * Report, never guess: every span that
297
- * could not re-anchor cleanly is NAMED in `flagged` with the reason in
298
- * words — a vanished step, a skipped selector, a span clamped or dropped
299
- * at the new take's edge. The agent fixes actions.json and re-runs; the
300
- * verb never silently invents a cut.
301
- *
302
- * Pure functions, no I/O — reuse.test.ts drives them with synthetic
303
- * step timelines; the browser gate is smoke-recut.ts.
304
- */
305
-
306
288
  interface ReuseReport {
307
289
  /** spans re-timed through an explicit anchor. */
308
290
  anchored: number;
package/dist/index.js CHANGED
@@ -30,7 +30,7 @@ import {
30
30
  validateActions,
31
31
  waitForPageDone,
32
32
  writeSyncState
33
- } from "./chunk-ZONOZZZY.js";
33
+ } from "./chunk-CRZTGWF3.js";
34
34
  import {
35
35
  BrowserUnavailableError,
36
36
  configDuration,
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  run
4
- } from "./chunk-ZONOZZZY.js";
4
+ } from "./chunk-CRZTGWF3.js";
5
5
  import "./chunk-NHKHTIDR.js";
6
6
  export {
7
7
  run
8
8
  };
9
- //# sourceMappingURL=run-ZIMJOQRN.js.map
9
+ //# sourceMappingURL=run-IRE2RO5J.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vosjs/cli",
3
- "version": "0.20.0",
3
+ "version": "0.22.0",
4
4
  "description": "The vos CLI: record the real product from a scripted browser flow, auto-zoom from the cursor track, cut as data in doc.json, render deterministic video and stills, deliver a release's media per destination spec, and sync with vos.so. One binary, every verb, MIT.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -48,14 +48,14 @@
48
48
  "dependencies": {
49
49
  "mediabunny": "^1.55.7",
50
50
  "playwright": "^1.49.0",
51
- "@vosjs/core": "^0.23.6",
52
51
  "@vosjs/editor": "^1.3.1",
52
+ "@vosjs/elements": "^0.8.1",
53
+ "@vosjs/core": "^0.23.6",
53
54
  "@vosjs/render-core": "^0.2.4",
54
55
  "@vosjs/shared": "^0.4.1",
55
- "@vosjs/elements": "^0.8.1",
56
- "@vosjs/studio-core": "^0.11.0",
57
- "@vosjs/timeline": "^0.4.1",
58
- "@vosjs/tween": "^0.8.2"
56
+ "@vosjs/studio-core": "^0.13.0",
57
+ "@vosjs/tween": "^0.8.2",
58
+ "@vosjs/timeline": "^0.4.1"
59
59
  },
60
60
  "devDependencies": {
61
61
  "@types/node": "^22",
@@ -45,8 +45,8 @@
45
45
  "hold": {
46
46
  "type": "number",
47
47
  "minimum": 0,
48
- "maximum": 10,
49
- "description": "freeze on this segment's last frame for these OUTPUT seconds (the beat before a cut, the ground for the end card)"
48
+ "maximum": 30,
49
+ "description": "LEGACY spelling of a freeze at this segment's end, read into `freeze` on every path; write `freeze` instead"
50
50
  }
51
51
  },
52
52
  "additionalProperties": true
@@ -55,6 +55,9 @@
55
55
  "speed": {
56
56
  "$ref": "#/definitions/speed"
57
57
  },
58
+ "freeze": {
59
+ "$ref": "#/definitions/freeze"
60
+ },
58
61
  "zoom": {
59
62
  "type": "array",
60
63
  "description": "Zoom regions (SOURCE time, footage-anchored, non-overlapping). The camera ramps in around `in`, holds until `out`, ramps out — or pans straight to the next span when the gap is short. Planner-made spans have source:'auto' (replaced on re-plan); set source:'manual' on any span you add or edit so it survives.",
@@ -1283,6 +1286,56 @@
1283
1286
  },
1284
1287
  "additionalProperties": true
1285
1288
  },
1289
+ "freeze": {
1290
+ "type": "array",
1291
+ "description": "Freezes (SOURCE moments, footage-anchored): the footage frozen on the frame just before `at` for `seconds` of output, anywhere in the take (a pause on a state while a caption reads, a beat before a cut, the rest a poster ends on). The retime primitive beside `speed`: a speed span is a source range with a rate, a freeze a source point with a length. A freeze whose frame is trimmed away has no effect and comes back when the trim does. The still every still-taking surface takes (the thumbnail, a poster's render, the stills export's first moment) is where the LAST freeze begins. Absent = none. The output ending past the footage needs no freeze: the card holds its last frame under the clips that outlast it.",
1292
+ "items": {
1293
+ "type": "object",
1294
+ "required": ["id", "at", "seconds"],
1295
+ "properties": {
1296
+ "id": {
1297
+ "type": "string",
1298
+ "description": "stable identity (f0, f1, …)"
1299
+ },
1300
+ "at": {
1301
+ "type": "number",
1302
+ "minimum": 0,
1303
+ "description": "SOURCE seconds: the frame just before this moment freezes"
1304
+ },
1305
+ "seconds": {
1306
+ "type": "number",
1307
+ "minimum": 0.25,
1308
+ "maximum": 30,
1309
+ "description": "OUTPUT seconds the frame holds"
1310
+ },
1311
+ "anchor": {
1312
+ "type": "object",
1313
+ "required": ["step"],
1314
+ "additionalProperties": false,
1315
+ "properties": {
1316
+ "step": {
1317
+ "type": ["string", "integer"],
1318
+ "description": "the actions.json step: its `id` when it has one, else its record-time index (meta.steps)"
1319
+ },
1320
+ "at": {
1321
+ "enum": ["start", "end"],
1322
+ "description": "which edge of the step the freeze's `at` is measured from (default start)"
1323
+ },
1324
+ "offset": {
1325
+ "type": "number",
1326
+ "description": "seconds from that edge to the freeze's `at` (negative = before it)"
1327
+ }
1328
+ },
1329
+ "description": "re-record tie to a step (vos plan --reuse resolves it against the new take's steps and it wins over the step map); `at` stays the truth"
1330
+ },
1331
+ "from": {
1332
+ "type": "string",
1333
+ "description": "the template (a vos id, or 'endcard') that placed it, the clips' `from`: a re-apply replaces it, a loop drops it"
1334
+ }
1335
+ },
1336
+ "additionalProperties": false
1337
+ }
1338
+ },
1286
1339
  "speed": {
1287
1340
  "type": "array",
1288
1341
  "description": "Speed-change spans (SOURCE time, footage-anchored, non-overlapping). Absent = all 1×. The planner proposes source:'auto' spans for typing passages, scroll runs and idle gaps (ids s0…); set source:'manual' on spans you add or edit so they survive a re-plan (absent source also counts as manual).",