@pinepaper.studio/mcp-server 1.6.19 → 1.6.20

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 (79) hide show
  1. package/README.de.md +1 -1
  2. package/README.es.md +1 -1
  3. package/README.fr.md +1 -1
  4. package/README.hi.md +1 -1
  5. package/README.ja.md +1 -1
  6. package/README.ko.md +1 -1
  7. package/README.md +86 -4
  8. package/README.pt-BR.md +1 -1
  9. package/README.zh-CN.md +1 -1
  10. package/dist/build-info.json +3 -3
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +7 -4
  13. package/dist/index.js.map +1 -1
  14. package/dist/ontology/upstream-vocabulary.d.ts +2 -2
  15. package/dist/ontology/upstream-vocabulary.js +2 -2
  16. package/dist/ontology/vocabulary.d.ts.map +1 -1
  17. package/dist/ontology/vocabulary.js +8 -0
  18. package/dist/ontology/vocabulary.js.map +1 -1
  19. package/dist/tools/choreograph.d.ts +64 -0
  20. package/dist/tools/choreograph.d.ts.map +1 -0
  21. package/dist/tools/choreograph.js +336 -0
  22. package/dist/tools/choreograph.js.map +1 -0
  23. package/dist/tools/compact-descriptions.js +1 -1
  24. package/dist/tools/definitions.d.ts +10 -1
  25. package/dist/tools/definitions.d.ts.map +1 -1
  26. package/dist/tools/definitions.js +284 -25
  27. package/dist/tools/definitions.js.map +1 -1
  28. package/dist/tools/effect-check.d.ts +26 -0
  29. package/dist/tools/effect-check.d.ts.map +1 -0
  30. package/dist/tools/effect-check.js +129 -0
  31. package/dist/tools/effect-check.js.map +1 -0
  32. package/dist/tools/effect-class.d.ts +31 -0
  33. package/dist/tools/effect-class.d.ts.map +1 -0
  34. package/dist/tools/effect-class.js +170 -0
  35. package/dist/tools/effect-class.js.map +1 -0
  36. package/dist/tools/engine-lists.d.ts +6 -6
  37. package/dist/tools/engine-lists.d.ts.map +1 -1
  38. package/dist/tools/engine-lists.js +11 -9
  39. package/dist/tools/engine-lists.js.map +1 -1
  40. package/dist/tools/engine-methods.d.ts.map +1 -1
  41. package/dist/tools/engine-methods.js +8 -0
  42. package/dist/tools/engine-methods.js.map +1 -1
  43. package/dist/tools/engine-surface.d.ts +1 -1
  44. package/dist/tools/engine-surface.d.ts.map +1 -1
  45. package/dist/tools/engine-surface.js +188 -10
  46. package/dist/tools/engine-surface.js.map +1 -1
  47. package/dist/tools/handlers/export.d.ts.map +1 -1
  48. package/dist/tools/handlers/export.js +8 -1
  49. package/dist/tools/handlers/export.js.map +1 -1
  50. package/dist/tools/handlers.d.ts +23 -0
  51. package/dist/tools/handlers.d.ts.map +1 -1
  52. package/dist/tools/handlers.js +176 -5
  53. package/dist/tools/handlers.js.map +1 -1
  54. package/dist/tools/index.d.ts +2 -2
  55. package/dist/tools/index.d.ts.map +1 -1
  56. package/dist/tools/index.js +2 -2
  57. package/dist/tools/index.js.map +1 -1
  58. package/dist/tools/minimal-descriptions.d.ts.map +1 -1
  59. package/dist/tools/minimal-descriptions.js +9 -3
  60. package/dist/tools/minimal-descriptions.js.map +1 -1
  61. package/dist/tools/shape-params.d.ts +2 -2
  62. package/dist/tools/shape-params.d.ts.map +1 -1
  63. package/dist/tools/shape-params.js +24 -2
  64. package/dist/tools/shape-params.js.map +1 -1
  65. package/dist/tools/stick-vocabulary.d.ts +1 -1
  66. package/dist/tools/stick-vocabulary.js +1 -1
  67. package/dist/tools/toolkits.d.ts.map +1 -1
  68. package/dist/tools/toolkits.js +6 -0
  69. package/dist/tools/toolkits.js.map +1 -1
  70. package/dist/types/code-generator.d.ts +35 -1
  71. package/dist/types/code-generator.d.ts.map +1 -1
  72. package/dist/types/code-generator.js +538 -24
  73. package/dist/types/code-generator.js.map +1 -1
  74. package/dist/types/schemas.d.ts +1617 -273
  75. package/dist/types/schemas.d.ts.map +1 -1
  76. package/dist/types/schemas.js +164 -2
  77. package/dist/types/schemas.js.map +1 -1
  78. package/manifest.json +25 -1
  79. package/package.json +4 -3
@@ -0,0 +1,26 @@
1
+ /**
2
+ * NO SILENT SUCCESS, the runtime half. A call classed 'mutates'
3
+ * (effect-class.ts) is fingerprinted before and after; a success that changed
4
+ * nothing measurable is FLAGGED in the result text the model reads, and a
5
+ * result that names an item not on the canvas FAILS.
6
+ *
7
+ * Flag, not fail: an idempotent call (a background set to the colour it
8
+ * already is) rightly changes nothing, and refusing it would be the mirror of
9
+ * the bug this hunts. A named item that does not exist is no such case — it
10
+ * is a contradiction (add_marker's invented 'marker_added').
11
+ *
12
+ * The fingerprint is the AUTHORED scene — items' data, un-animated style and
13
+ * placement, relations, background, canvas, map colours, placed sounds — kept
14
+ * IN THE PAGE between the two probes; only the verdict crosses the wire. It
15
+ * was the engine's full snapshot until the first live sweep: that carries the
16
+ * playhead and live transforms, so during playback every no-op looked changed.
17
+ */
18
+ export declare const EFFECT_BEFORE_JS = "(function () {\n function __ppFingerprint() {\n // AUTHORED state, not the live frame. The engine's full snapshot carries the\n // playhead and every item's CURRENT transform, so while the timeline plays\n // every call looked changed \u2014 the three misses of the first live sweep\n // (re-applied colour, same canvas size, a repeated highlight). Animated\n // values are left out; what a call can author is kept.\n const o = {};\n const playing = !!app.isPlayingKeyframes;\n const plain = function (k, v) {\n if (typeof k === 'string' && (k.charAt(0) === '_' || /^(selected|hovered|isHovered|cached|lastRender|renderTick|frame|playbackTime|time)$/.test(k))) return undefined;\n if (typeof v === 'function') return undefined;\n if (v && typeof v === 'object' && (v.data instanceof Uint8ClampedArray || (typeof ImageData !== 'undefined' && v instanceof ImageData))) return undefined;\n if (v && typeof v === 'object' && typeof v.toCSS === 'function') return v.toCSS(true);\n return v;\n };\n const S = function (v) { try { return JSON.stringify(v, plain); } catch (e) { return ''; } };\n try {\n const reg = app.itemRegistry && app.itemRegistry.getAll ? app.itemRegistry.getAll() : null;\n if (reg) {\n o.items = reg.map(function (e) {\n const it = e.item || {};\n const d = it.data || {};\n const keys = Array.isArray(d.keyframes) ? d.keyframes : [];\n const animated = {};\n keys.forEach(function (k) { Object.keys((k && k.properties) || {}).forEach(function (p) { animated[p] = 1; }); });\n const moves = keys.length || (d.animationType && d.animationType !== 'none');\n const style = {};\n ['fillColor', 'strokeColor', 'strokeWidth', 'opacity', 'fontSize', 'fontFamily', 'content', 'visible', 'blendMode'].forEach(function (p) {\n if (!animated[p] && !(p === 'fillColor' && animated.color) && it[p] !== undefined) style[p] = plain(p, it[p]);\n });\n if (!moves && it.position) style.at = [Math.round(it.position.x), Math.round(it.position.y)];\n if (!moves && it.scaling) style.scale = [Math.round(it.scaling.x * 1000), Math.round(it.scaling.y * 1000)];\n if (!moves && typeof it.rotation === 'number') style.rot = Math.round(it.rotation * 100);\n return (e.id || e.itemId) + '|' + (e.type || '') + '|' + S(d) + '|' + S(style);\n }).join('\\n');\n }\n } catch (e) {}\n try { const rr = app.relationRegistry; if (rr && rr.exportForSave) o.relations = S(rr.exportForSave()); } catch (e) {}\n try { if (app.listRenderHooks) o.renderHooks = S(app.listRenderHooks()); } catch (e) {}\n // SCENE-LEVEL STATE OUTSIDE ITEMS (sweep v2: add_filter and camera_animate\n // were real changes read as none). The camera's track is a relation on the\n // pseudo-source 'camera', which no registry item carries.\n try { if (app.filterSystem && app.filterSystem.exportForSave) o.filters = S(app.filterSystem.exportForSave()); } catch (e) {}\n try {\n // Camera keyframes live in relationRegistry._cameraAnimation.params (a\n // virtual item, no registry entry), read through getCameraAnimationParams.\n // getRelations('camera') looks in the associations and is always empty\n // for them (sweep v3: camera_animate still read as no change).\n const rr = app.relationRegistry;\n const cam = rr && rr.getCameraAnimationParams ? rr.getCameraAnimationParams() : null;\n const tilt = rr && rr.cameraTilt;\n o.camera = S([cam, tilt && tilt.serialize ? tilt.serialize() : null]);\n } catch (e) {}\n try { const c = app.config || {}; o.background = S([c.currentBackgroundMode, c.currentBackgroundGenerator, c.generatorParams, app.canvasEl && app.canvasEl.style && app.canvasEl.style.backgroundColor]); } catch (e) {}\n try { const cs = app.getCanvasSize && app.getCanvasSize(); if (cs) o.canvas = cs.width + 'x' + cs.height + (cs.unbounded ? ':unbounded' : ''); } catch (e) {}\n try {\n // The view moves on its own while a camera animation plays.\n const v = app.view || (typeof paper !== 'undefined' && paper.view);\n if (!playing && v && v.center) o.view = Math.round(v.zoom * 1000) + '@' + Math.round(v.center.x) + ',' + Math.round(v.center.y);\n } catch (e) {}\n try { if (app.mapSystem && app.mapSystem.getRegionOverrideCount) o.mapColours = app.mapSystem.getRegionOverrideCount() + ':' + S(app.mapSystem._regionColorOverrides ? Array.from(app.mapSystem._regionColorOverrides.entries()) : null); } catch (e) {}\n try { if (app._initialized && app._initialized.has('synthSounds')) o.sounds = S(app.synthSounds.list().map(function (x) { return [x.id, x.startTime, x.duration]; })); } catch (e) {}\n return o;\n}\n window.__ppEffectBefore = __ppFingerprint();\n return { ok: true };\n})();";
19
+ /** After-probe: compares against the before fingerprint; checks the named ids exist. */
20
+ export declare function effectAfterJs(ids: string[]): string;
21
+ /** The item ids a result names as made or touched (itemId, itemIds, ids). */
22
+ export declare function namedItemIds(result: unknown): string[];
23
+ /** Calls whose returned id is legitimately gone afterwards. */
24
+ export declare function idMayBeGone(tool: string, action: string | undefined): boolean;
25
+ export declare const NO_CHANGE_NOTE: (checked: string[]) => string;
26
+ //# sourceMappingURL=effect-check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-check.d.ts","sourceRoot":"","sources":["../../src/tools/effect-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAoEH,eAAO,MAAM,gBAAgB,qqJAIvB,CAAC;AAEP,wFAAwF;AACxF,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,CAkBnD;AAED,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAQtD;AAED,+DAA+D;AAC/D,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE7E;AAED,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,EAAE,WAGuC,CAAC"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * NO SILENT SUCCESS, the runtime half. A call classed 'mutates'
3
+ * (effect-class.ts) is fingerprinted before and after; a success that changed
4
+ * nothing measurable is FLAGGED in the result text the model reads, and a
5
+ * result that names an item not on the canvas FAILS.
6
+ *
7
+ * Flag, not fail: an idempotent call (a background set to the colour it
8
+ * already is) rightly changes nothing, and refusing it would be the mirror of
9
+ * the bug this hunts. A named item that does not exist is no such case — it
10
+ * is a contradiction (add_marker's invented 'marker_added').
11
+ *
12
+ * The fingerprint is the AUTHORED scene — items' data, un-animated style and
13
+ * placement, relations, background, canvas, map colours, placed sounds — kept
14
+ * IN THE PAGE between the two probes; only the verdict crosses the wire. It
15
+ * was the engine's full snapshot until the first live sweep: that carries the
16
+ * playhead and live transforms, so during playback every no-op looked changed.
17
+ */
18
+ /** In-page fingerprint, shared by both probes. */
19
+ const FINGERPRINT_JS = `function __ppFingerprint() {
20
+ // AUTHORED state, not the live frame. The engine's full snapshot carries the
21
+ // playhead and every item's CURRENT transform, so while the timeline plays
22
+ // every call looked changed — the three misses of the first live sweep
23
+ // (re-applied colour, same canvas size, a repeated highlight). Animated
24
+ // values are left out; what a call can author is kept.
25
+ const o = {};
26
+ const playing = !!app.isPlayingKeyframes;
27
+ const plain = function (k, v) {
28
+ if (typeof k === 'string' && (k.charAt(0) === '_' || /^(selected|hovered|isHovered|cached|lastRender|renderTick|frame|playbackTime|time)$/.test(k))) return undefined;
29
+ if (typeof v === 'function') return undefined;
30
+ if (v && typeof v === 'object' && (v.data instanceof Uint8ClampedArray || (typeof ImageData !== 'undefined' && v instanceof ImageData))) return undefined;
31
+ if (v && typeof v === 'object' && typeof v.toCSS === 'function') return v.toCSS(true);
32
+ return v;
33
+ };
34
+ const S = function (v) { try { return JSON.stringify(v, plain); } catch (e) { return ''; } };
35
+ try {
36
+ const reg = app.itemRegistry && app.itemRegistry.getAll ? app.itemRegistry.getAll() : null;
37
+ if (reg) {
38
+ o.items = reg.map(function (e) {
39
+ const it = e.item || {};
40
+ const d = it.data || {};
41
+ const keys = Array.isArray(d.keyframes) ? d.keyframes : [];
42
+ const animated = {};
43
+ keys.forEach(function (k) { Object.keys((k && k.properties) || {}).forEach(function (p) { animated[p] = 1; }); });
44
+ const moves = keys.length || (d.animationType && d.animationType !== 'none');
45
+ const style = {};
46
+ ['fillColor', 'strokeColor', 'strokeWidth', 'opacity', 'fontSize', 'fontFamily', 'content', 'visible', 'blendMode'].forEach(function (p) {
47
+ if (!animated[p] && !(p === 'fillColor' && animated.color) && it[p] !== undefined) style[p] = plain(p, it[p]);
48
+ });
49
+ if (!moves && it.position) style.at = [Math.round(it.position.x), Math.round(it.position.y)];
50
+ if (!moves && it.scaling) style.scale = [Math.round(it.scaling.x * 1000), Math.round(it.scaling.y * 1000)];
51
+ if (!moves && typeof it.rotation === 'number') style.rot = Math.round(it.rotation * 100);
52
+ return (e.id || e.itemId) + '|' + (e.type || '') + '|' + S(d) + '|' + S(style);
53
+ }).join('\\n');
54
+ }
55
+ } catch (e) {}
56
+ try { const rr = app.relationRegistry; if (rr && rr.exportForSave) o.relations = S(rr.exportForSave()); } catch (e) {}
57
+ try { if (app.listRenderHooks) o.renderHooks = S(app.listRenderHooks()); } catch (e) {}
58
+ // SCENE-LEVEL STATE OUTSIDE ITEMS (sweep v2: add_filter and camera_animate
59
+ // were real changes read as none). The camera's track is a relation on the
60
+ // pseudo-source 'camera', which no registry item carries.
61
+ try { if (app.filterSystem && app.filterSystem.exportForSave) o.filters = S(app.filterSystem.exportForSave()); } catch (e) {}
62
+ try {
63
+ // Camera keyframes live in relationRegistry._cameraAnimation.params (a
64
+ // virtual item, no registry entry), read through getCameraAnimationParams.
65
+ // getRelations('camera') looks in the associations and is always empty
66
+ // for them (sweep v3: camera_animate still read as no change).
67
+ const rr = app.relationRegistry;
68
+ const cam = rr && rr.getCameraAnimationParams ? rr.getCameraAnimationParams() : null;
69
+ const tilt = rr && rr.cameraTilt;
70
+ o.camera = S([cam, tilt && tilt.serialize ? tilt.serialize() : null]);
71
+ } catch (e) {}
72
+ try { const c = app.config || {}; o.background = S([c.currentBackgroundMode, c.currentBackgroundGenerator, c.generatorParams, app.canvasEl && app.canvasEl.style && app.canvasEl.style.backgroundColor]); } catch (e) {}
73
+ try { const cs = app.getCanvasSize && app.getCanvasSize(); if (cs) o.canvas = cs.width + 'x' + cs.height + (cs.unbounded ? ':unbounded' : ''); } catch (e) {}
74
+ try {
75
+ // The view moves on its own while a camera animation plays.
76
+ const v = app.view || (typeof paper !== 'undefined' && paper.view);
77
+ if (!playing && v && v.center) o.view = Math.round(v.zoom * 1000) + '@' + Math.round(v.center.x) + ',' + Math.round(v.center.y);
78
+ } catch (e) {}
79
+ try { if (app.mapSystem && app.mapSystem.getRegionOverrideCount) o.mapColours = app.mapSystem.getRegionOverrideCount() + ':' + S(app.mapSystem._regionColorOverrides ? Array.from(app.mapSystem._regionColorOverrides.entries()) : null); } catch (e) {}
80
+ try { if (app._initialized && app._initialized.has('synthSounds')) o.sounds = S(app.synthSounds.list().map(function (x) { return [x.id, x.startTime, x.duration]; })); } catch (e) {}
81
+ return o;
82
+ }`;
83
+ export const EFFECT_BEFORE_JS = `(function () {
84
+ ${FINGERPRINT_JS}
85
+ window.__ppEffectBefore = __ppFingerprint();
86
+ return { ok: true };
87
+ })();`;
88
+ /** After-probe: compares against the before fingerprint; checks the named ids exist. */
89
+ export function effectAfterJs(ids) {
90
+ return `(function () {
91
+ ${FINGERPRINT_JS}
92
+ const a = window.__ppEffectBefore || null;
93
+ const b = __ppFingerprint();
94
+ window.__ppEffectBefore = null;
95
+ const checked = Object.keys(b);
96
+ const changed = a ? checked.filter(function (k) { return a[k] !== b[k]; }) : null;
97
+ const ids = ${JSON.stringify(ids)};
98
+ const missing = ids.filter(function (id) {
99
+ try {
100
+ if (app.getItemById && app.getItemById(id)) return false;
101
+ if (app.itemRegistry && app.itemRegistry.get && app.itemRegistry.get(id)) return false;
102
+ } catch (e) {}
103
+ return true;
104
+ });
105
+ return { ok: !!a, checked: checked, changed: changed, missing: missing };
106
+ })();`;
107
+ }
108
+ /** The item ids a result names as made or touched (itemId, itemIds, ids). */
109
+ export function namedItemIds(result) {
110
+ if (!result || typeof result !== 'object')
111
+ return [];
112
+ const r = result;
113
+ const out = [];
114
+ const add = (v) => { if (typeof v === 'string' && /^item_\d+$/.test(v))
115
+ out.push(v); };
116
+ add(r.itemId);
117
+ for (const k of ['itemIds', 'ids'])
118
+ if (Array.isArray(r[k]))
119
+ r[k].forEach(add);
120
+ return [...new Set(out)].slice(0, 50);
121
+ }
122
+ /** Calls whose returned id is legitimately gone afterwards. */
123
+ export function idMayBeGone(tool, action) {
124
+ return /delete|remove|clear|ungroup|break_apart|unhighlight/.test(`${tool}:${action ?? ''}`);
125
+ }
126
+ export const NO_CHANGE_NOTE = (checked) => `⚠️ NO CHANGE: this call reported success, but nothing it could have changed did (checked: ${checked.join(', ')}). `
127
+ + 'If you expected a change, it did not happen — check the ids and arguments before building on it. '
128
+ + '(Re-applying a value an item already has is the one case where this is expected.)';
129
+ //# sourceMappingURL=effect-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-check.js","sourceRoot":"","sources":["../../src/tools/effect-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,kDAAkD;AAClD,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+DrB,CAAC;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC5B,cAAc;;;MAGZ,CAAC;AAEP,wFAAwF;AACxF,MAAM,UAAU,aAAa,CAAC,GAAa;IACzC,OAAO;IACL,cAAc;;;;;;gBAMF,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;;;;;;;;;MAS7B,CAAC;AACP,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,YAAY,CAAC,MAAe;IAC1C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACrD,MAAM,CAAC,GAAG,MAAiC,CAAC;IAC5C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAAU,EAAE,EAAE,GAAG,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACd,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAAG,CAAC,CAAC,CAAC,CAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9F,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,MAA0B;IAClE,OAAO,qDAAqD,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,MAAM,IAAI,EAAE,EAAE,CAAC,CAAC;AAC/F,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAiB,EAAE,EAAE,CAClD,6FAA6F,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK;MAClH,mGAAmG;MACnG,mFAAmF,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * NO SILENT SUCCESS, the classification half (tracker: handler-layer sweep).
3
+ *
4
+ * Every tool, and every action of an action-dispatched tool, is one of:
5
+ * - 'mutates' it exists to change the scene. A success that changed
6
+ * nothing measurable is flagged (the runtime half).
7
+ * - 'read-only' it reads; it must not change the scene.
8
+ * - 'side-effect' its effect is outside the scene: a file, playback, a sound
9
+ * heard now, UI state (selection, rulers, modes), the server.
10
+ * - 'unchecked' it changes state the scene fingerprint cannot see (the 3D
11
+ * world, physics bodies, the font studio, rig internals,
12
+ * registries of definitions), or it only sometimes changes the
13
+ * scene. Named here as a blind spot rather than guessed at,
14
+ * because a false "nothing changed" teaches a model to ignore
15
+ * the flag.
16
+ *
17
+ * The class behind D59, D37, D62 and the audioTracks drop: a handler that
18
+ * reported success for work the engine did not do.
19
+ */
20
+ export type EffectClass = 'mutates' | 'read-only' | 'side-effect' | 'unchecked';
21
+ /** Tools with no action enum and no readOnlyHint: each is named, so a new one fails the test until it is. */
22
+ export declare const TOOL_CLASS: Readonly<Record<string, EffectClass>>;
23
+ /** Whole action-dispatched tools whose state the fingerprint cannot see. */
24
+ export declare const UNCHECKED_TOOLS: ReadonlySet<string>;
25
+ /** Whole action-dispatched tools that only touch UI or session state. */
26
+ export declare const SIDE_EFFECT_TOOLS: ReadonlySet<string>;
27
+ /** Per-action exceptions to the prefix rules, `tool:action`. */
28
+ export declare const ACTION_CLASS: Readonly<Record<string, EffectClass>>;
29
+ /** The class of one call. `readOnlyHint` comes from the tool's annotations. */
30
+ export declare function effectClass(tool: string, action: string | undefined, readOnlyHint: boolean | undefined): EffectClass;
31
+ //# sourceMappingURL=effect-class.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-class.d.ts","sourceRoot":"","sources":["../../src/tools/effect-class.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,GAAG,WAAW,CAAC;AAEhF,6GAA6G;AAC7G,eAAO,MAAM,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAuE3D,CAAC;AAEH,4EAA4E;AAC5E,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,MAAM,CAK9C,CAAC;AAEH,yEAAyE;AACzE,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAGhD,CAAC;AAEH,gEAAgE;AAChE,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAsC7D,CAAC;AAKH,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,CAapH"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * NO SILENT SUCCESS, the classification half (tracker: handler-layer sweep).
3
+ *
4
+ * Every tool, and every action of an action-dispatched tool, is one of:
5
+ * - 'mutates' it exists to change the scene. A success that changed
6
+ * nothing measurable is flagged (the runtime half).
7
+ * - 'read-only' it reads; it must not change the scene.
8
+ * - 'side-effect' its effect is outside the scene: a file, playback, a sound
9
+ * heard now, UI state (selection, rulers, modes), the server.
10
+ * - 'unchecked' it changes state the scene fingerprint cannot see (the 3D
11
+ * world, physics bodies, the font studio, rig internals,
12
+ * registries of definitions), or it only sometimes changes the
13
+ * scene. Named here as a blind spot rather than guessed at,
14
+ * because a false "nothing changed" teaches a model to ignore
15
+ * the flag.
16
+ *
17
+ * The class behind D59, D37, D62 and the audioTracks drop: a handler that
18
+ * reported success for work the engine did not do.
19
+ */
20
+ /** Tools with no action enum and no readOnlyHint: each is named, so a new one fails the test until it is. */
21
+ export const TOOL_CLASS = Object.freeze({
22
+ pinepaper_set_background_color: 'mutates',
23
+ pinepaper_set_canvas_size: 'mutates',
24
+ pinepaper_clear_canvas: 'mutates',
25
+ pinepaper_refresh_page: 'side-effect',
26
+ pinepaper_create_item: 'mutates',
27
+ pinepaper_modify_item: 'mutates',
28
+ pinepaper_delete_item: 'mutates',
29
+ pinepaper_create_glossy_sphere: 'mutates',
30
+ pinepaper_create_diagonal_stripes: 'mutates',
31
+ pinepaper_import_motion_capture: 'unchecked', // rig internals
32
+ pinepaper_import_svg: 'mutates',
33
+ pinepaper_import_mermaid: 'mutates',
34
+ pinepaper_import_image: 'mutates',
35
+ pinepaper_import_asset: 'mutates',
36
+ pinepaper_batch_create: 'mutates',
37
+ pinepaper_batch_modify: 'mutates',
38
+ pinepaper_create_grid: 'mutates',
39
+ pinepaper_geometry: 'unchecked', // creates an item only when asked
40
+ pinepaper_equation_path: 'mutates',
41
+ pinepaper_beat_cuts: 'unchecked', // splits a clip only when asked
42
+ pinepaper_generate: 'unchecked', // cloud job; places when it finishes
43
+ pinepaper_generate_status: 'unchecked',
44
+ pinepaper_render_batch: 'side-effect', // exports per row
45
+ pinepaper_detect_objects: 'unchecked', // nodes only with asNodes
46
+ pinepaper_extract_object: 'mutates',
47
+ pinepaper_capture_frames: 'side-effect',
48
+ pinepaper_crop_image: 'mutates',
49
+ pinepaper_chroma_key: 'mutates',
50
+ pinepaper_shatter_image: 'mutates',
51
+ pinepaper_import_layered_character: 'mutates',
52
+ pinepaper_character: 'mutates',
53
+ pinepaper_instantiate_ontology: 'mutates',
54
+ pinepaper_add_relation: 'mutates',
55
+ pinepaper_remove_relation: 'mutates',
56
+ pinepaper_register_custom_relation: 'unchecked', // a definition, not the scene
57
+ pinepaper_execute_custom_code: 'unchecked', // may only read; has its own rollback
58
+ pinepaper_animate: 'mutates',
59
+ pinepaper_keyframe_animate: 'mutates',
60
+ pinepaper_apply_animated_mask: 'mutates',
61
+ pinepaper_apply_custom_mask: 'mutates',
62
+ pinepaper_remove_mask: 'mutates',
63
+ pinepaper_camera_animate: 'mutates',
64
+ pinepaper_create_scene: 'mutates',
65
+ pinepaper_apply_template: 'mutates',
66
+ pinepaper_create_diagram_shape: 'mutates',
67
+ pinepaper_connect: 'mutates',
68
+ pinepaper_connect_ports: 'mutates',
69
+ pinepaper_add_ports: 'mutates',
70
+ pinepaper_auto_layout: 'mutates',
71
+ pinepaper_update_connector: 'mutates',
72
+ pinepaper_remove_connector: 'mutates',
73
+ pinepaper_create_letter_collage: 'mutates',
74
+ pinepaper_animate_letter_collage: 'mutates',
75
+ pinepaper_execute_generator: 'mutates',
76
+ pinepaper_apply_effect: 'mutates',
77
+ pinepaper_add_filter: 'mutates',
78
+ pinepaper_styled_scene: 'mutates',
79
+ pinepaper_choreograph: 'mutates',
80
+ pinepaper_morph_sequence: 'mutates',
81
+ pinepaper_place_on_surface: 'mutates',
82
+ pinepaper_import_scene: 'mutates',
83
+ pinepaper_browser_connect: 'side-effect',
84
+ pinepaper_browser_disconnect: 'side-effect',
85
+ pinepaper_agent_start_job: 'side-effect', // clearing an empty canvas changes nothing, rightly
86
+ pinepaper_agent_end_job: 'side-effect',
87
+ pinepaper_agent_reset: 'side-effect',
88
+ pinepaper_agent_batch_execute: 'mutates',
89
+ pinepaper_p5_draw: 'mutates',
90
+ pinepaper_register_item: 'mutates',
91
+ pinepaper_set_toolkit: 'side-effect',
92
+ });
93
+ /** Whole action-dispatched tools whose state the fingerprint cannot see. */
94
+ export const UNCHECKED_TOOLS = new Set([
95
+ 'pinepaper_world3d', 'pinepaper_rigging', 'pinepaper_globe', 'pinepaper_physics',
96
+ 'pinepaper_font', 'pinepaper_interaction', 'pinepaper_sprite_sheet', 'pinepaper_game',
97
+ 'pinepaper_relight', 'pinepaper_shader_graph', 'pinepaper_component', 'pinepaper_comment',
98
+ 'pinepaper_template_params', 'pinepaper_design_system', 'pinepaper_motion', 'pinepaper_magic',
99
+ ]);
100
+ /** Whole action-dispatched tools that only touch UI or session state. */
101
+ export const SIDE_EFFECT_TOOLS = new Set([
102
+ 'pinepaper_selection', 'pinepaper_measurement', 'pinepaper_diagram_mode', 'pinepaper_play_timeline',
103
+ 'pinepaper_scene_playback', 'pinepaper_export_store',
104
+ ]);
105
+ /** Per-action exceptions to the prefix rules, `tool:action`. */
106
+ export const ACTION_CLASS = Object.freeze({
107
+ 'pinepaper_provenance:record': 'unchecked',
108
+ 'pinepaper_event:pulse': 'side-effect',
109
+ 'pinepaper_lasso:activate': 'side-effect',
110
+ 'pinepaper_sound:define_instrument': 'unchecked',
111
+ 'pinepaper_sound:define_percussion': 'unchecked',
112
+ 'pinepaper_sound:define_sfx': 'unchecked',
113
+ 'pinepaper_story:distill': 'read-only',
114
+ 'pinepaper_story:plan_book': 'read-only',
115
+ 'pinepaper_brand_kit:plan': 'read-only',
116
+ 'pinepaper_brand_kit:from_url': 'read-only',
117
+ 'pinepaper_brand_kit:clear': 'side-effect', // page state; the canvas keeps its colours
118
+ 'pinepaper_audio_beats:analyze': 'read-only',
119
+ 'pinepaper_compose:apply': 'mutates',
120
+ 'pinepaper_camera:state': 'read-only',
121
+ 'pinepaper_camera:fit_view': 'side-effect',
122
+ 'pinepaper_camera:stop': 'side-effect',
123
+ 'pinepaper_media:upload_video': 'mutates',
124
+ 'pinepaper_manage_scenes:save': 'side-effect',
125
+ 'pinepaper_manage_scenes:rename': 'side-effect',
126
+ 'pinepaper_manage_scenes:duplicate': 'side-effect',
127
+ 'pinepaper_manage_scenes:reorder': 'side-effect',
128
+ 'pinepaper_manage_scenes:delete': 'side-effect',
129
+ 'pinepaper_manage_scenes:import': 'side-effect',
130
+ 'pinepaper_history:get_state': 'read-only',
131
+ 'pinepaper_artboard:list_presets': 'read-only',
132
+ 'pinepaper_image_filter:analyze_palette': 'read-only',
133
+ 'pinepaper_map_regions:get_at_point': 'read-only',
134
+ 'pinepaper_map_regions:get_highlighted': 'read-only',
135
+ 'pinepaper_map_regions:select': 'side-effect',
136
+ 'pinepaper_map_regions:deselect': 'side-effect',
137
+ 'pinepaper_construction_sequence:clear': 'mutates',
138
+ 'pinepaper_original_character:bases': 'read-only',
139
+ 'pinepaper_look:grid': 'side-effect', // renders a contact sheet; the scene is left as it was
140
+ 'pinepaper_original_character:random': 'read-only', // computes a variant; draws nothing
141
+ 'pinepaper_flip:record': 'side-effect', // snapshots the before-state only
142
+ 'pinepaper_path:set_locked': 'unchecked', // a lock flag the fingerprint does not read
143
+ 'pinepaper_path:unlock_all': 'unchecked',
144
+ });
145
+ const READ_ONLY_ACTION = /^(list|get|describe|query|analyze|validate|check|resolve|catalogue|status|state|info|preview|estimate|lint|coverage|find|choose|node_types|from_text|chord_frequencies|timbre_from_path|lineage|dependents|history|version|hit_test|is_empty|source_info)(_|$)/;
146
+ const SIDE_EFFECT_ACTION = /^(play|stop|pause|resume|seek|export|render|download|show_studio|toggle_loop|jump|set_time_scale|set_progress|bind_scroll|unbind_scroll)(_|$)/;
147
+ /** The class of one call. `readOnlyHint` comes from the tool's annotations. */
148
+ export function effectClass(tool, action, readOnlyHint) {
149
+ if (action !== undefined) {
150
+ const exact = ACTION_CLASS[`${tool}:${action}`];
151
+ if (exact)
152
+ return exact;
153
+ }
154
+ if (readOnlyHint)
155
+ return 'read-only';
156
+ if (TOOL_CLASS[tool])
157
+ return TOOL_CLASS[tool];
158
+ if (UNCHECKED_TOOLS.has(tool))
159
+ return 'unchecked';
160
+ if (SIDE_EFFECT_TOOLS.has(tool))
161
+ return 'side-effect';
162
+ if (action === undefined)
163
+ return 'unchecked';
164
+ if (READ_ONLY_ACTION.test(action))
165
+ return 'read-only';
166
+ if (SIDE_EFFECT_ACTION.test(action))
167
+ return 'side-effect';
168
+ return 'mutates';
169
+ }
170
+ //# sourceMappingURL=effect-class.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effect-class.js","sourceRoot":"","sources":["../../src/tools/effect-class.ts"],"names":[],"mappings":"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"}
@@ -4,16 +4,16 @@
4
4
  * Name lists the engine owns and the tool surface must offer exactly. See
5
5
  * scripts/sync-engine-lists.mjs for why each is generated.
6
6
  *
7
- * Source: FxTool origin/main 8e4a795a5c06dcd94e21a28acd13ec217aa97449
8
- * js/core/KeyframeInterpolator.js sha256: 4c38752d86cae944
7
+ * Source: FxTool origin/main c2d922787576249eeb37b1fa8c4cb0cfec943204
8
+ * js/core/KeyframeInterpolator.js sha256: 1134ba0e2ce5d1f5
9
9
  * js/world3d/worlds.js sha256: 0e0973f7587c06e1
10
- * js/core/DesignMedia.js sha256: a371877509a5d63a
11
- * js/FilterSystem.js sha256: 276b29622e467f37
10
+ * js/core/DesignMedia.js sha256: ab07f330e4060cb7
11
+ * js/FilterSystem.js sha256: 3cfb0f9e54eb50ab
12
12
  * js/core/Provenance.js sha256: 27e4d8becfa382c8
13
13
  * js/core/StyledScene.js sha256: ea647c014de59faf
14
14
  */
15
- /** 37 names: EASING_NAMES, the keys of the engine's easing table. Keyframes, masks, relations and the camera all resolve through it. */
16
- export declare const ENGINE_EASING_NAMES: readonly ["linear", "easeIn", "easeOut", "easeInOut", "easeInCubic", "easeOutCubic", "easeInOutCubic", "bounce", "easeOutBounce", "easeInBounce", "elastic", "easeOutElastic", "easeInElastic", "easeOutBack", "easeInBack", "easeInOutBack", "spring", "springSnappy", "springPlayful", "easeInQuad", "easeOutQuad", "easeInOutQuad", "easeInSine", "easeOutSine", "easeInOutSine", "easeInQuart", "easeOutQuart", "easeInOutQuart", "easeInQuint", "easeOutQuint", "easeInOutQuint", "easeInExpo", "easeOutExpo", "easeInOutExpo", "easeInCirc", "easeOutCirc", "easeInOutCirc"];
15
+ /** 39 names: EASING_NAMES, the keys of the engine's easing table. Keyframes, masks, relations and the camera all resolve through it. */
16
+ export declare const ENGINE_EASING_NAMES: readonly ["linear", "easeIn", "easeOut", "easeInOut", "easeInCubic", "easeOutCubic", "easeInOutCubic", "bounce", "easeOutBounce", "easeInBounce", "elastic", "easeOutElastic", "easeInElastic", "easeOutBack", "easeInBack", "easeInOutBack", "spring", "springSnappy", "springPlayful", "easeInQuad", "easeOutQuad", "easeInOutQuad", "easeInSine", "easeOutSine", "easeInOutSine", "easeInQuart", "easeOutQuart", "easeInOutQuart", "easeInQuint", "easeOutQuint", "easeInOutQuint", "easeInExpo", "easeOutExpo", "easeInOutExpo", "easeInCirc", "easeOutCirc", "easeInOutCirc", "hold", "step"];
17
17
  /** 11 paths: WORLD_SCHEMA entries of kind 'color' — the world spec's colour fields. */
18
18
  export declare const WORLD3D_COLOR_PATHS: readonly ["env.zenith", "env.horizon", "env.fogColor", "env.sunColor", "env.ambient", "env.lowColor", "env.midColor", "env.highColor", "env.rockColor", "env.propColorA", "env.propColorB"];
19
19
  /** 9 media: the keys of DesignMedia MEDIA. */
@@ -1 +1 @@
1
- {"version":3,"file":"engine-lists.d.ts","sourceRoot":"","sources":["../../src/tools/engine-lists.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,wIAAwI;AACxI,eAAO,MAAM,mBAAmB,ojBAsCtB,CAAC;AAEX,uFAAuF;AACvF,eAAO,MAAM,mBAAmB,6LAYtB,CAAC;AAEX,8CAA8C;AAC9C,eAAO,MAAM,YAAY,yGAUf,CAAC;AAEX,iIAAiI;AACjI,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQ9D,CAAC;AAEH,wDAAwD;AACxD,eAAO,MAAM,YAAY,yPAqBf,CAAC;AAEX,qFAAqF;AACrF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAqB5G,CAAC;AAEH,8DAA8D;AAC9D,eAAO,MAAM,aAAa,gFAMhB,CAAC;AAEX,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB,kEAOtB,CAAC;AAEX,gEAAgE;AAChE,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOnE,CAAC;AAEH,8EAA8E;AAC9E,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqBvD,CAAC"}
1
+ {"version":3,"file":"engine-lists.d.ts","sourceRoot":"","sources":["../../src/tools/engine-lists.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,wIAAwI;AACxI,eAAO,MAAM,mBAAmB,okBAwCtB,CAAC;AAEX,uFAAuF;AACvF,eAAO,MAAM,mBAAmB,6LAYtB,CAAC;AAEX,8CAA8C;AAC9C,eAAO,MAAM,YAAY,yGAUf,CAAC;AAEX,iIAAiI;AACjI,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQ9D,CAAC;AAEH,wDAAwD;AACxD,eAAO,MAAM,YAAY,yPAqBf,CAAC;AAEX,qFAAqF;AACrF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAqB5G,CAAC;AAEH,8DAA8D;AAC9D,eAAO,MAAM,aAAa,gFAMhB,CAAC;AAEX,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB,kEAOtB,CAAC;AAEX,gEAAgE;AAChE,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAOnE,CAAC;AAEH,8EAA8E;AAC9E,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAqBvD,CAAC"}
@@ -4,15 +4,15 @@
4
4
  * Name lists the engine owns and the tool surface must offer exactly. See
5
5
  * scripts/sync-engine-lists.mjs for why each is generated.
6
6
  *
7
- * Source: FxTool origin/main 8e4a795a5c06dcd94e21a28acd13ec217aa97449
8
- * js/core/KeyframeInterpolator.js sha256: 4c38752d86cae944
7
+ * Source: FxTool origin/main c2d922787576249eeb37b1fa8c4cb0cfec943204
8
+ * js/core/KeyframeInterpolator.js sha256: 1134ba0e2ce5d1f5
9
9
  * js/world3d/worlds.js sha256: 0e0973f7587c06e1
10
- * js/core/DesignMedia.js sha256: a371877509a5d63a
11
- * js/FilterSystem.js sha256: 276b29622e467f37
10
+ * js/core/DesignMedia.js sha256: ab07f330e4060cb7
11
+ * js/FilterSystem.js sha256: 3cfb0f9e54eb50ab
12
12
  * js/core/Provenance.js sha256: 27e4d8becfa382c8
13
13
  * js/core/StyledScene.js sha256: ea647c014de59faf
14
14
  */
15
- /** 37 names: EASING_NAMES, the keys of the engine's easing table. Keyframes, masks, relations and the camera all resolve through it. */
15
+ /** 39 names: EASING_NAMES, the keys of the engine's easing table. Keyframes, masks, relations and the camera all resolve through it. */
16
16
  export const ENGINE_EASING_NAMES = [
17
17
  'linear',
18
18
  'easeIn',
@@ -51,6 +51,8 @@ export const ENGINE_EASING_NAMES = [
51
51
  'easeInCirc',
52
52
  'easeOutCirc',
53
53
  'easeInOutCirc',
54
+ 'hold',
55
+ 'step',
54
56
  ];
55
57
  /** 11 paths: WORLD_SCHEMA entries of kind 'color' — the world spec's colour fields. */
56
58
  export const WORLD3D_COLOR_PATHS = [
@@ -120,8 +122,8 @@ export const FILTER_PARAM_RANGES = Object.freeze({
120
122
  saturation: { value: [-100, 100] },
121
123
  invert: { intensity: [0, 1] },
122
124
  blur: { radius: [0, 20] },
123
- noise: { intensity: [0, 100], grainSize: [1, 4], refresh: [1, 8], seed: [0, 99999] },
124
- vignette: { intensity: [0, 1], radius: [0, 1] },
125
+ noise: { intensity: [0, 100], grainSize: [1, 4], refresh: [0, 8], seed: [0, 99999] },
126
+ vignette: { intensity: [0, 1], radius: [0, 1], falloff: [0.5, 4] },
125
127
  vintage: { intensity: [0, 1] },
126
128
  colorOverlay: { intensity: [0, 1] },
127
129
  sharpen: { intensity: [0, 100] },
@@ -169,8 +171,8 @@ export const FILTER_DOCS = Object.freeze({
169
171
  saturation: "Adjust color saturation — value -100..100, default 0",
170
172
  invert: "Invert colors — intensity 0..1, default 1",
171
173
  blur: "Apply gaussian blur — radius 0..20, default 5",
172
- noise: "Add film grain effect — intensity 0..100, default 20; monochrome (boolean), default true; grainSize 1..4; refresh 1..8; seed 0..99999, default 0",
173
- vignette: "Add vignette darkening — intensity 0..1, default 0.5; radius 0..1, default 0.5",
174
+ noise: "Add film grain effect — intensity 0..100, default 20; monochrome (boolean), default true; grainSize 1..4; refresh 0..8; seed 0..99999, default 0; blend add|multiply, default add",
175
+ vignette: "Add vignette darkening — intensity 0..1, default 0.5; radius 0..1, default 0.5; color (color); falloff 0.5..4, default 2",
174
176
  vintage: "Retro vintage look — intensity 0..1, default 1",
175
177
  colorOverlay: "Add color tint — color (color), default #ff0000; intensity 0..1, default 0.3; blendMode multiply|overlay|screen, default overlay",
176
178
  sharpen: "Increase image sharpness — intensity 0..100, default 50",
@@ -1 +1 @@
1
- {"version":3,"file":"engine-lists.js","sourceRoot":"","sources":["../../src/tools/engine-lists.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine-lists.js","sourceRoot":"","sources":["../../src/tools/engine-lists.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"engine-methods.d.ts","sourceRoot":"","sources":["../../src/tools/engine-methods.ts"],"names":[],"mappings":"AAUA;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAgOpD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EA6CpD,CAAC"}
1
+ {"version":3,"file":"engine-methods.d.ts","sourceRoot":"","sources":["../../src/tools/engine-methods.ts"],"names":[],"mappings":"AAUA;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAsOpD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EA+CpD,CAAC"}
@@ -33,6 +33,7 @@ export const REQUIRED_ENGINE_METHODS = [
33
33
  'applyDirectorShots',
34
34
  'applyHatching',
35
35
  'applyImageFilter',
36
+ 'applyLook',
36
37
  'applyMedium',
37
38
  'applyPhysicsImpulse3D',
38
39
  'applyRelationPreset',
@@ -59,6 +60,7 @@ export const REQUIRED_ENGINE_METHODS = [
59
60
  'configureWorld3D',
60
61
  'convertTextToCollage',
61
62
  'create',
63
+ 'createCharacter',
62
64
  'createCursiveText',
63
65
  'createEquationPath',
64
66
  'createEvent',
@@ -161,6 +163,7 @@ export const REQUIRED_ENGINE_METHODS = [
161
163
  'outlineStroke',
162
164
  'panWorldCamera',
163
165
  'patternFrom',
166
+ 'percussionSpec',
164
167
  'placeOnSurface',
165
168
  'placeSequence',
166
169
  'planBook',
@@ -177,6 +180,7 @@ export const REQUIRED_ENGINE_METHODS = [
177
180
  'recordLineage',
178
181
  'registerInstrument',
179
182
  'registerPercussion',
183
+ 'registerRenderHook',
180
184
  'registerSfx',
181
185
  'remakeFromReference',
182
186
  'removePhysicsBody3D',
@@ -197,6 +201,7 @@ export const REQUIRED_ENGINE_METHODS = [
197
201
  'setArtboard',
198
202
  'setCollageTreatment',
199
203
  'setComponentOverride',
204
+ 'setEmitter',
200
205
  'setFontAxes',
201
206
  'setItemConstraints',
202
207
  'setItemLocked',
@@ -212,6 +217,7 @@ export const REQUIRED_ENGINE_METHODS = [
212
217
  'setWorldMeshClip',
213
218
  'setWorldMeshInstances',
214
219
  'setWorldNavTarget',
220
+ 'sfxSpec',
215
221
  'shaderGraph.create',
216
222
  'shatterImage',
217
223
  'simplifyPath',
@@ -287,9 +293,11 @@ export const OPTIONAL_ENGINE_METHODS = [
287
293
  'relationRegistry.getStats',
288
294
  'sceneAt',
289
295
  'sceneManager.setLoop',
296
+ 'screenSpaceItems',
290
297
  'setBackgroundColor',
291
298
  'setCanvasSize',
292
299
  'setLifetime',
300
+ 'setStepTiming',
293
301
  'setUnitGridEnabled',
294
302
  'textOverflowReport',
295
303
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"engine-methods.js","sourceRoot":"","sources":["../../src/tools/engine-methods.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine-methods.js","sourceRoot":"","sources":["../../src/tools/engine-methods.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /** How a name lands on `app`. */
2
2
  export type EngineMemberKind = 'method' | 'accessor' | 'property' | 'lazy' | 'lazyHeavy' | 'bootstrap';
3
- /** 1235 names, from FxTool/js/PinePaper.js. */
3
+ /** 1413 names, from FxTool/js/PinePaper.js. */
4
4
  export declare const ENGINE_SURFACE: Readonly<Record<string, EngineMemberKind>>;
5
5
  /**
6
6
  * Subsystems that are UNDEFINED until `app.ensureHeavyModules()` has run —
@@ -1 +1 @@
1
- {"version":3,"file":"engine-surface.d.ts","sourceRoot":"","sources":["../../src/tools/engine-surface.ts"],"names":[],"mappings":"AAeA,iCAAiC;AACjC,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC;AAEvG,+CAA+C;AAC/C,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAotCpE,CAAC;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAUjD,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAU9D,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAmBrE,CAAC"}
1
+ {"version":3,"file":"engine-surface.d.ts","sourceRoot":"","sources":["../../src/tools/engine-surface.ts"],"names":[],"mappings":"AAeA,iCAAiC;AACjC,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC;AAEvG,+CAA+C;AAC/C,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAs4CpE,CAAC;AAEH;;;;;;;;GAQG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAUjD,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAU9D,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAmBrE,CAAC"}