agentvfx 0.3.4 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/LICENSE +201 -171
  2. package/README.md +5 -13
  3. package/package.json +2 -2
  4. package/skills/agentvfx/LICENSE +201 -171
  5. package/skills/agentvfx/NOTICE +8 -2
  6. package/skills/agentvfx/SKILL.md +3 -3
  7. package/skills/agentvfx/engine/core/constants.mjs +1 -1
  8. package/skills/agentvfx/engine/core/mark.mjs +6 -9
  9. package/skills/agentvfx/engine/core/palettes.mjs +1 -1
  10. package/skills/agentvfx/engine/core/schedule.mjs +1 -1
  11. package/skills/agentvfx/engine/core/templates.mjs +1 -1
  12. package/skills/agentvfx/engine/core/validate.mjs +3 -3
  13. package/skills/agentvfx/engine/node/board.mjs +1 -1
  14. package/skills/agentvfx/engine/node/encode.mjs +1 -1
  15. package/skills/agentvfx/engine/node/eye.mjs +1 -1
  16. package/skills/agentvfx/engine/node/footage.mjs +1 -1
  17. package/skills/agentvfx/engine/node/frame-worker.mjs +1 -1
  18. package/skills/agentvfx/engine/node/job.mjs +1 -1
  19. package/skills/agentvfx/engine/node/render.mjs +1 -1
  20. package/skills/agentvfx/engine/node/stage-capture.mjs +1 -1
  21. package/skills/agentvfx/engine/node/stage-serve.mjs +1 -1
  22. package/skills/agentvfx/engine/web/init.js +1 -1
  23. package/skills/agentvfx/engine/web/prelude.mjs +1 -1
  24. package/skills/agentvfx/engine/web/render.mjs +2 -2
  25. package/skills/agentvfx/engine/web/text.mjs +1 -1
  26. package/skills/agentvfx/references/template-format.md +2 -2
  27. package/skills/agentvfx/runtime/agentvfx.js +1 -1
  28. package/skills/agentvfx/scripts/export-web.mjs +7 -5
  29. package/skills/agentvfx/scripts/make-beat.mjs +1 -1
  30. package/skills/agentvfx/scripts/vfx.mjs +1 -1
  31. package/skills/agentvfx/templates/_test/feedback-counter/fx.json +1 -1
  32. package/skills/agentvfx/templates/_test/gradient/fx.json +1 -1
  33. package/skills/agentvfx/templates/_test/identity/fx.json +1 -1
  34. package/skills/agentvfx/templates/_test/strobe/fx.json +1 -1
  35. package/skills/agentvfx/templates/_test/text-probe/fx.json +1 -1
  36. package/skills/agentvfx/templates/brutal/_src/boot-log/def.mjs +1 -1
  37. package/skills/agentvfx/templates/brutal/_src/halftone-field/def.mjs +1 -1
  38. package/skills/agentvfx/templates/brutal/_src/hud-deck/def.mjs +1 -1
  39. package/skills/agentvfx/templates/brutal/boot-log/fx.json +1 -1
  40. package/skills/agentvfx/templates/brutal/collage/fx.json +1 -1
  41. package/skills/agentvfx/templates/brutal/collage/layout.mjs +1 -1
  42. package/skills/agentvfx/templates/brutal/halftone-field/fx.json +1 -1
  43. package/skills/agentvfx/templates/brutal/hud-deck/fx.json +1 -1
  44. package/skills/agentvfx/templates/brutal/lattice/fx.json +1 -1
  45. package/skills/agentvfx/templates/glitch/block-glitch/fx.json +1 -1
  46. package/skills/agentvfx/templates/glitch/pixel-sort/fx.json +1 -1
  47. package/skills/agentvfx/templates/glitch/rgb-split/fx.json +1 -1
  48. package/skills/agentvfx/templates/glitch/vhs/fx.json +1 -1
  49. package/skills/agentvfx/templates/impact/impact-1bit/fx.json +1 -1
  50. package/skills/agentvfx/templates/impact/impact-invert/fx.json +1 -1
  51. package/skills/agentvfx/templates/impact/punch-shake/fx.json +1 -1
  52. package/skills/agentvfx/templates/impact/rgb-hit/fx.json +1 -1
  53. package/skills/agentvfx/templates/impact/signal-cut/fx.json +1 -1
  54. package/skills/agentvfx/templates/impact/speedline-burst/fx.json +1 -1
  55. package/skills/agentvfx/templates/impact/strobe-burst/fx.json +1 -1
  56. package/skills/agentvfx/templates/light/anamorphic-streak/fx.json +1 -1
  57. package/skills/agentvfx/templates/light/bloom-glow/fx.json +1 -1
  58. package/skills/agentvfx/templates/light/god-rays/fx.json +1 -1
  59. package/skills/agentvfx/templates/light/lens-flare/fx.json +1 -1
  60. package/skills/agentvfx/templates/light/light-leak/fx.json +1 -1
  61. package/skills/agentvfx/templates/light/light-stage/fx.json +1 -1
  62. package/skills/agentvfx/templates/light/light-sweep/fx.json +1 -1
  63. package/skills/agentvfx/templates/light/neon-saber/fx.json +1 -1
  64. package/skills/agentvfx/templates/psychedelic/echo-flow/fx.json +1 -1
  65. package/skills/agentvfx/templates/psychedelic/hologram-scan/fx.json +1 -1
  66. package/skills/agentvfx/templates/psychedelic/kaleido-fold/fx.json +1 -1
  67. package/skills/agentvfx/templates/psychedelic/mosh-melt/fx.json +1 -1
  68. package/skills/agentvfx/templates/psychedelic/sacred/fx.json +1 -1
  69. package/skills/agentvfx/templates/psychedelic/tidal-bands/fx.json +1 -1
  70. package/skills/agentvfx/templates/scope/goniometer/fx.json +1 -1
  71. package/skills/agentvfx/templates/scope/scope-polar/fx.json +1 -1
  72. package/skills/agentvfx/templates/scope/scope-triggered/fx.json +1 -1
  73. package/skills/agentvfx/templates/scope/spectrogram-scroll/fx.json +1 -1
  74. package/skills/agentvfx/templates/scope/xy-phosphor/fx.json +1 -1
  75. package/skills/agentvfx/templates/spectrum/_src/bars-linear/fx.src.json +1 -1
  76. package/skills/agentvfx/templates/spectrum/_src/bars-mirror/fx.src.json +1 -1
  77. package/skills/agentvfx/templates/spectrum/_src/bass-circle/fx.src.json +1 -1
  78. package/skills/agentvfx/templates/spectrum/_src/label-bars/fx.src.json +1 -1
  79. package/skills/agentvfx/templates/spectrum/_src/spectrum-particles/fx.src.json +1 -1
  80. package/skills/agentvfx/templates/spectrum/_src/spectrum-radial/fx.src.json +1 -1
  81. package/skills/agentvfx/templates/spectrum/_src/waveform-line/fx.src.json +1 -1
  82. package/skills/agentvfx/templates/spectrum/bars-linear/fx.json +1 -1
  83. package/skills/agentvfx/templates/spectrum/bars-mirror/fx.json +1 -1
  84. package/skills/agentvfx/templates/spectrum/bass-circle/fx.json +1 -1
  85. package/skills/agentvfx/templates/spectrum/label-bars/fx.json +1 -1
  86. package/skills/agentvfx/templates/spectrum/spectrum-particles/fx.json +1 -1
  87. package/skills/agentvfx/templates/spectrum/spectrum-radial/fx.json +1 -1
  88. package/skills/agentvfx/templates/spectrum/waveform-line/fx.json +1 -1
  89. package/skills/agentvfx/test/concept-collage.test.mjs +1 -1
  90. package/skills/agentvfx/test/concept-lattice.test.mjs +1 -1
  91. package/skills/agentvfx/test/concept-signal-cut.test.mjs +1 -1
  92. package/skills/agentvfx/test/credit.test.mjs +13 -1
  93. package/skills/agentvfx/test/scope.test.mjs +1 -1
  94. package/skills/agentvfx/test/web.test.mjs +8 -5
@@ -347,7 +347,7 @@
347
347
  "id": "label-bars",
348
348
  "family": "spectrum",
349
349
  "input": "either",
350
- "spdx": "LicenseRef-agentvfx",
350
+ "spdx": "Apache-2.0",
351
351
  "flash": "none",
352
352
  "fps": 30,
353
353
  "palette": true,
@@ -400,7 +400,7 @@
400
400
  "id": "spectrum-particles",
401
401
  "family": "spectrum",
402
402
  "input": "either",
403
- "spdx": "LicenseRef-agentvfx",
403
+ "spdx": "Apache-2.0",
404
404
  "flash": "none",
405
405
  "fps": 30,
406
406
  "palette": true,
@@ -428,7 +428,7 @@
428
428
  "id": "spectrum-radial",
429
429
  "family": "spectrum",
430
430
  "input": "either",
431
- "spdx": "LicenseRef-agentvfx",
431
+ "spdx": "Apache-2.0",
432
432
  "flash": "possible",
433
433
  "fps": 30,
434
434
  "palette": true,
@@ -292,7 +292,7 @@
292
292
  "id": "waveform-line",
293
293
  "family": "spectrum",
294
294
  "input": "either",
295
- "spdx": "LicenseRef-agentvfx",
295
+ "spdx": "Apache-2.0",
296
296
  "flash": "none",
297
297
  "fps": 30,
298
298
  "palette": true,
@@ -44,7 +44,7 @@ test("collage validates, ships 4 presets incl. release 0.06 and 0.12, and a demo
44
44
  const rel = (p) => ({ ...Object.fromEntries(tpl.fx.INPUTS.map((i) => [i.NAME, i.DEFAULT])), ...presets[p] }).release;
45
45
  const values = Object.keys(presets).map(rel);
46
46
  assert.ok(values.includes(0.06) && values.includes(0.12), `release values ${values}`);
47
- assert.equal(tpl.fx.X_AGENTVFX.spdx, "LicenseRef-agentvfx");
47
+ assert.equal(tpl.fx.X_AGENTVFX.spdx, "Apache-2.0");
48
48
  assert.ok(tpl.fx.X_AGENTVFX.safeSubstitute);
49
49
  for (const d of readdirSync(tpl.dir).filter((f) => f.startsWith("demo-"))) assert.equal(validateScore(JSON.parse(readFileSync(path.join(tpl.dir, d), "utf8")), lib).ok, true);
50
50
  });
@@ -41,7 +41,7 @@ test("lattice validates: every preset and demo, 4 s demos with the shared music"
41
41
  assert.equal(demo.input.audio, MUSIC);
42
42
  assert.ok(existsSync(path.join(ROOT, demo.input.video)));
43
43
  }
44
- assert.equal(tpl.fx.X_AGENTVFX.spdx, "LicenseRef-agentvfx");
44
+ assert.equal(tpl.fx.X_AGENTVFX.spdx, "Apache-2.0");
45
45
  assert.ok(tpl.fx.X_AGENTVFX.safeSubstitute);
46
46
  });
47
47
 
@@ -54,7 +54,7 @@ test("signal-cut is declared: family, 3+ presets, strobe class with a safe subst
54
54
  assert.ok(tpl, "signal-cut is in the library");
55
55
  const x = tpl.fx.X_AGENTVFX;
56
56
  assert.equal(x.input, "footage");
57
- assert.equal(x.spdx, "LicenseRef-agentvfx");
57
+ assert.equal(x.spdx, "Apache-2.0");
58
58
  assert.ok(Object.keys(x.presets).length >= 3);
59
59
  assert.equal(x.flash, "strobe");
60
60
  assert.equal(x.safeSubstitute.params.fieldCut, 0);
@@ -1,4 +1,4 @@
1
- // Attribution is a licence condition for published output, so every render carries the credit line: CREDIT.txt next
1
+ // Every render carries the credit line (appreciated, not required): CREDIT.txt next
2
2
  // to the film, the MP4 description tag of every film written (the safe variant too), and the gate report the agent
3
3
  // reads before reporting.
4
4
  import { test } from "node:test";
@@ -40,3 +40,15 @@ test("every render writes CREDIT.txt, tags each film with the credit and reports
40
40
  rmSync(dir, { recursive: true, force: true });
41
41
  }
42
42
  });
43
+
44
+ test("licence metadata says Apache-2.0 and the old licence id is gone", async () => {
45
+ const { SPDX_ALLOWED } = await import("../engine/core/validate.mjs");
46
+ const { creditText } = await import("../engine/core/mark.mjs");
47
+ const { readFileSync } = await import("node:fs");
48
+ const repo = new URL("../../../", import.meta.url);
49
+ assert.ok(!SPDX_ALLOWED.includes("LicenseRef-agentvfx"));
50
+ assert.match(creditText(), /Apache-2\.0/u);
51
+ assert.doesNotMatch(creditText(), /requires a credit|PolyForm/u);
52
+ assert.equal(JSON.parse(readFileSync(new URL("package.json", repo), "utf8")).license, "Apache-2.0");
53
+ assert.equal(JSON.parse(readFileSync(new URL(".claude-plugin/plugin.json", repo), "utf8")).license, "Apache-2.0");
54
+ });
@@ -90,7 +90,7 @@ test("all five templates are valid, licensed, 60 fps, 3+ presets, honest flash a
90
90
  const x = t.fx.X_AGENTVFX;
91
91
  assert.equal(x.family, "scope");
92
92
  assert.equal(x.fps, 60);
93
- assert.equal(x.spdx, "LicenseRef-agentvfx");
93
+ assert.equal(x.spdx, "Apache-2.0");
94
94
  assert.ok(Object.keys(x.presets).length >= 3, `${id} presets`);
95
95
  for (const p of PRESETS) assert.ok(x.presets[p], `${id} lacks the ${p} preset`);
96
96
  assert.ok(Array.isArray(x.text) && x.text.length >= 20, `${id} should label its panels with engine text`);
@@ -258,7 +258,7 @@ test("export-web bundles templates whose shader credits carry links, keeping the
258
258
  }
259
259
  });
260
260
 
261
- test("export-web writes the LICENSE next to the bundle and keeps the licence notice in the runtime", () => {
261
+ test("export-web writes LICENSE and NOTICE next to the bundle and keeps the licence notice in the runtime", () => {
262
262
  const dir = mkdtempSync(path.join(tmpdir(), "agentvfx-export-"));
263
263
  try {
264
264
  const result = runExport(["test-gradient", "--out", dir]);
@@ -266,11 +266,14 @@ test("export-web writes the LICENSE next to the bundle and keeps the licence not
266
266
  assertNoExternalUrl(dir);
267
267
  const license = readFileSync(path.join(dir, "LICENSE"), "utf8");
268
268
  assert.equal(license, readFileSync(path.join(root, "LICENSE"), "utf8"), "LICENSE is copied verbatim");
269
- assert.match(license, /^Required Notice: Copyright \(c\) 2026 Woojin Go \(https:\/\/github\.com\/wjgoarxiv\/agentvfx\)$/mu);
269
+ assert.match(license, /Apache License\s+Version 2\.0, January 2004/u);
270
+ const notice = readFileSync(path.join(dir, "NOTICE"), "utf8");
271
+ assert.equal(notice, readFileSync(path.join(root, "NOTICE"), "utf8"), "NOTICE is copied verbatim");
272
+ assert.match(notice, /^Copyright 2026 Woojin Go/mu);
270
273
  const runtime = readFileSync(path.join(dir, "agentvfx.js"), "utf8");
271
- assert.match(runtime, /^\/\/ agentvfx licence: the full terms are in the LICENSE file in this folder/mu);
272
- assert.match(runtime, /^\/\/ Required Notice: Copyright \(c\) 2026 Woojin Go \(github\.com\/wjgoarxiv\/agentvfx\)$/mu);
273
- assert.match(readFileSync(path.join(dir, "demo.html"), "utf8"), /Required Notice: Copyright \(c\) 2026 Woojin Go/u);
274
+ assert.match(runtime, /^\/\/ agentvfx is licensed under the Apache License 2\.0; see LICENSE and NOTICE in this folder/mu);
275
+ assert.match(runtime, /^\/\/ Copyright 2026 Woojin Go \(github\.com\/wjgoarxiv\/agentvfx\)$/mu);
276
+ assert.match(readFileSync(path.join(dir, "demo.html"), "utf8"), /Copyright 2026 Woojin Go/u);
274
277
  } finally {
275
278
  rmSync(dir, { recursive: true, force: true });
276
279
  }