@officexapp/vidfarm-devcli 0.21.54 → 0.21.56

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/src/cli.js CHANGED
@@ -925,9 +925,18 @@ Local media engines & toolchain (all local, free, no account — no cloud key ne
925
925
  "create me a harness" / "update the harness for
926
926
  this format" / "give me the harness for this
927
927
  template_id" all land here
928
- harness list [--json] Bundled starting points: short-form,
929
- hooks, ugc-testimonial, explainer,
930
- product-demo, product-explainer
928
+ harness list [--json] Two shelves. BASES to copy and edit:
929
+ short-form, hooks, ugc-testimonial,
930
+ explainer, product-demo,
931
+ product-explainer. FORMAT harnesses —
932
+ complete contracts, read by name, same
933
+ shelf as vidfarm.cc/experimental:
934
+ meme-recaption, wall-text-pov-ugc,
935
+ ugc-reaction-greenscreen,
936
+ sticker-slideshow-tips,
937
+ animated-sticker-story,
938
+ google-news-to-video,
939
+ unique-product-explainers
931
940
  harness show <name|path> Print one [--dna <strand>] to print just
932
941
  one strand (viral_dna, visual_dna, …)
933
942
  harness init <name> [--out <p>] Copy one next to your work, then EDIT it
@@ -960,6 +969,20 @@ Local media engines & toolchain (all local, free, no account — no cloud key ne
960
969
  --kill-orphans Reap orphaned local serve/preview servers
961
970
  (running from a deleted package path) so their
962
971
  squatted ports are reclaimed
972
+ --version (-v) This devcli's version + the installed skill's (local)
973
+ update-check IS THIS INSTALL CURRENT? The skill and the (npm registry + vidfarm.cc)
974
+ devcli are ONE semver and must move together —
975
+ updating one alone is the usual cause of "that
976
+ command doesn't exist". Agents: run the --if-stale
977
+ form at the top of a session; it is a no-op unless
978
+ the last check is over 24h old, and --quiet prints
979
+ NOTHING when you are already current.
980
+ --if-stale [--hours 24] Only actually check if the last one is older
981
+ --quiet One line, silent when current
982
+ --skip / --unskip Record "not now" for this version / undo it
983
+ --json {devcli, skill, update_available, offline, …}
984
+ Offline is reported as offline, never as outdated.
985
+ Breaking-change notes: https://vidfarm.cc/update.md
963
986
  skills <list|add <names…>|update> Install/refresh agent skills into → GET /skill-pack/* (or the
964
987
  <root>/.agents/skills/<name> + a relative copies bundled in this repo)
965
988
  .claude/skills symlink; skills-lock.json is
@@ -1159,10 +1182,35 @@ Marketplace (paid, cloud-only — the bazaar never renders locally):
1159
1182
  (alias: dir · save-url|from-url|import-url — CLI twin of the "Save to Files" picker)
1160
1183
  gigs <sub> Your vending machines, BOTH sides (client + gigworker)
1161
1184
  machines · tasks · add-task · proofs · approve · reject · ring-bell (client, paid)
1162
- work · feed · join-feed · join · claim · submit · mine (gigworker, free — bring DOLLARPLATOON_API_KEY)
1163
- e.g. vidfarm gigs add-task --task "60s explainer for acme.com" --price 0.50 --upload-link <share url>
1185
+ earn · feed · check · join · work · claim · submit · proof · earnings (gigworker, free — bring DOLLARPLATOON_API_KEY)
1186
+ upload · mine · join-feed
1187
+ "HELP ME EARN ON VIDFARM" IS ONE COMMAND: vidfarm gigs earn. It joins the
1188
+ feed, reads who is asking for videos right now, checks every one of those
1189
+ machines for MONEY, and ranks them best-payer-first with the join command.
1190
+ 'gigs check <gig|join-url>' is the funds check on its own — run it BEFORE you
1191
+ spend an hour, because approval does not create money. 'gigs submit
1192
+ --clean-master <file>' seals the unwatermarked cut in the proof's private
1193
+ note, which the buyer cannot open until a rollup has actually paid you.
1194
+ e.g. vidfarm gigs earn
1195
+ vidfarm gigs add-task --task "60s explainer for acme.com" --price 0.50 --upload-link <share url>
1164
1196
  vidfarm gigs proofs --status pending · vidfarm gigs approve PRF_01H…
1165
- (see: vidfarm gigs help)
1197
+ (see: vidfarm gigs help · the loop: vidfarm.cc/agentic-clipper.md)
1198
+ clipper-run <sub> HOW the clipper loop runs, and WHERE each task is up to
1199
+ mode · init · start · shortlist · pick · plan · raws · cut · gate · submitted
1200
+ approve · changes · drop (the gigworker's answers)
1201
+ next · status · review (where am I / what is waiting on the human)
1202
+ Four run modes, differing only in which stages STOP for the gigworker:
1203
+ full-interactive shortlist · plan · raws · cut (best quality on a weak model)
1204
+ quick-interactive shortlist · cut (approve ONE template, then watch the cut)
1205
+ auto-batch cut (build everything, submit nothing until reviewed)
1206
+ auto-submit nothing (unattended; opt-in, in the gigworker's own words)
1207
+ The stage lives in files under ./CLIPPER, not in the context — that is what
1208
+ lets a weak model run a long task without forgetting where it was. 'gate'
1209
+ exits non-zero while a human gate is open, so a loop written as
1210
+ 'clipper-run gate <task> && gigs submit …' cannot send an unreviewed cut.
1211
+ e.g. vidfarm clipper-run mode quick-interactive
1212
+ vidfarm clipper-run next
1213
+ (see: vidfarm clipper-run help)
1166
1214
  shared <sub> <link> USE a link someone shared with you — NO account, NO API key
1167
1215
  info · ls --tree · search · grab · note · mkdir · put · get
1168
1216
  grab is the one to reach for: it finds footage by MEANING and downloads it in one step.
@@ -1302,6 +1350,19 @@ async function main() {
1302
1350
  process.stdout.write(HELP);
1303
1351
  return;
1304
1352
  }
1353
+ // `vidfarm --version` is the first line of the update runbook and of every
1354
+ // "what are you running?" support exchange, and it used to error out with
1355
+ // "Unknown option before command". Handled before dispatch so no subcommand
1356
+ // can shadow it.
1357
+ if (argv[0] === "--version" || argv[0] === "-v" || argv[0] === "version") {
1358
+ const { installedDevcliVersion, installedSkillPath, readSkillVersion } = await import("./devcli/update-check.js");
1359
+ const skillPath = installedSkillPath();
1360
+ const skillVersion = skillPath ? readSkillVersion(readFileSync(skillPath, "utf8")) : null;
1361
+ console.log(installedDevcliVersion() ?? "unknown");
1362
+ console.log(`skill ${skillVersion ?? "not installed"}${skillPath ? ` (${skillPath})` : ""}`);
1363
+ console.log("check for updates: vidfarm update-check");
1364
+ return;
1365
+ }
1305
1366
  const command = argv[0];
1306
1367
  // Opt-out crash telemetry (also covers the long-lived `serve` runtime, whose
1307
1368
  // in-process job/render captures share this client). Guarded + no-op by default.
@@ -1621,6 +1682,16 @@ async function main() {
1621
1682
  await runGigsCommand(rest);
1622
1683
  return;
1623
1684
  }
1685
+ // The RUN MODE of an agentic clipper loop — how much of the gigworker's
1686
+ // attention each task costs — plus the per-task stage that survives a
1687
+ // context reset. Local files only; no key, no network.
1688
+ case "clipper-run":
1689
+ case "clipper-mode":
1690
+ case "run-mode": {
1691
+ const { runClipperRunCommand } = await import("./devcli/clipper-run.js");
1692
+ await runClipperRunCommand(rest);
1693
+ return;
1694
+ }
1624
1695
  case "get-file":
1625
1696
  await runGetFileCommand(rest);
1626
1697
  return;
@@ -1761,6 +1832,13 @@ async function main() {
1761
1832
  case "hf":
1762
1833
  await runHyperframesPassthroughCommand(rest);
1763
1834
  return;
1835
+ case "update-check":
1836
+ case "check-update":
1837
+ case "outdated": {
1838
+ const { runUpdateCheckCommand } = await import("./devcli/update-check.js");
1839
+ await runUpdateCheckCommand(rest);
1840
+ return;
1841
+ }
1764
1842
  default:
1765
1843
  if (!command.startsWith("-")) {
1766
1844
  // Positional template id → default to booting the local editor.
@@ -12344,13 +12422,28 @@ async function runHarnessCommand(argv) {
12344
12422
  });
12345
12423
  const json = Boolean(parsed.values.json);
12346
12424
  if (!sub || sub === "list") {
12347
- const builtins = listBuiltinHarnesses();
12348
- if (json)
12349
- return printJson({ harnesses: builtins.map(({ name, path: file, video_type }) => ({ name, path: file, video_type })) });
12350
- console.log(`${DIM}Built-in harnesses copy one next to your work, then edit it:${RESET}`);
12351
- for (const entry of builtins) {
12425
+ const all = listBuiltinHarnesses();
12426
+ if (json) {
12427
+ return printJson({
12428
+ harnesses: all.map(({ name, path: file, video_type, origin, url }) => ({ name, path: file, video_type, origin, url })),
12429
+ index_url: "https://vidfarm.cc/experimental"
12430
+ });
12431
+ }
12432
+ const bases = all.filter((entry) => entry.origin === "builtin");
12433
+ const experimental = all.filter((entry) => entry.origin === "experimental");
12434
+ console.log(`${DIM}Base harnesses — copy one next to your work, then edit it:${RESET}`);
12435
+ for (const entry of bases) {
12352
12436
  console.log(` ${GREEN}${entry.name}${RESET} ${DIM}${entry.video_type ?? ""}${RESET}`);
12353
12437
  }
12438
+ if (experimental.length) {
12439
+ // The same shelf as https://vidfarm.cc/experimental, shipped in the package
12440
+ // so an agent reads a full format contract by name without a fetch.
12441
+ console.log(`\n${DIM}Format harnesses — complete contracts for ONE format. Read one before you build it:${RESET}`);
12442
+ for (const entry of experimental) {
12443
+ console.log(` ${GREEN}${entry.name}${RESET} ${DIM}${(entry.video_type ?? "").slice(0, 120)}${RESET}`);
12444
+ }
12445
+ console.log(`${DIM}vidfarm harness show <name> (also live at https://vidfarm.cc/experimental)${RESET}`);
12446
+ }
12354
12447
  console.log(`\n${DIM}vidfarm harness init <name> --out ./work/${HARNESS_FILENAME}${RESET}`);
12355
12448
  console.log(`${DIM}vidfarm harness derive <forkId> (a decomposed template → a harness)${RESET}`);
12356
12449
  console.log(`${DIM}vidfarm qa ./work --harness <name|path> (repeatable — harnesses stack)${RESET}`);