@pinepaper.studio/mcp-server 1.6.28 → 1.6.29

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 (52) hide show
  1. package/README.md +27 -0
  2. package/SECURITY.md +2 -3
  3. package/dist/agent/export-manager.js +125 -125
  4. package/dist/assets/repositories/fontawesome.d.ts.map +1 -1
  5. package/dist/assets/repositories/fontawesome.js +2 -1
  6. package/dist/assets/repositories/fontawesome.js.map +1 -1
  7. package/dist/assets/repositories/iconify.d.ts.map +1 -1
  8. package/dist/assets/repositories/iconify.js +4 -3
  9. package/dist/assets/repositories/iconify.js.map +1 -1
  10. package/dist/browser/puppeteer-controller.js +38 -23
  11. package/dist/build-info.json +2 -2
  12. package/dist/cli.js +54 -54
  13. package/dist/execution/canvas-state.js +25 -25
  14. package/dist/i18n/locales/en.js +22 -22
  15. package/dist/i18n/locales/fil.js +44 -44
  16. package/dist/i18n/locales/is.js +22 -22
  17. package/dist/i18n/locales/ur.js +22 -22
  18. package/dist/index.js +5559 -5559
  19. package/dist/ontology/upstream-vocabulary.js +4 -4
  20. package/dist/tools/craft-tools.js +18 -18
  21. package/dist/tools/definitions.d.ts.map +1 -1
  22. package/dist/tools/definitions.js +2816 -2815
  23. package/dist/tools/definitions.js.map +1 -1
  24. package/dist/tools/effect-check.js +68 -68
  25. package/dist/tools/engine-methods.d.ts.map +1 -1
  26. package/dist/tools/engine-methods.js +1 -1
  27. package/dist/tools/engine-methods.js.map +1 -1
  28. package/dist/tools/handlers/font.js +22 -22
  29. package/dist/tools/handlers/generate.d.ts.map +1 -1
  30. package/dist/tools/handlers/generate.js +2 -1
  31. package/dist/tools/handlers/generate.js.map +1 -1
  32. package/dist/tools/handlers.js +16 -16
  33. package/dist/tools/lane.js +64 -64
  34. package/dist/tools/p5-compat/p5-helpers.js +341 -341
  35. package/dist/tools/timeline.js +82 -82
  36. package/dist/types/code-generator.d.ts.map +1 -1
  37. package/dist/types/code-generator.js +6616 -5859
  38. package/dist/types/code-generator.js.map +1 -1
  39. package/dist/types/schemas.d.ts +2 -0
  40. package/dist/types/schemas.d.ts.map +1 -1
  41. package/dist/types/schemas.js +2 -0
  42. package/dist/types/schemas.js.map +1 -1
  43. package/dist/utils/safe-fetch.d.ts +8 -0
  44. package/dist/utils/safe-fetch.d.ts.map +1 -1
  45. package/dist/utils/safe-fetch.js +125 -34
  46. package/dist/utils/safe-fetch.js.map +1 -1
  47. package/dist/vendor/design/device-mockup-generator.js +167 -150
  48. package/dist/vendor/design/recursive-subdivision-generator.js +107 -107
  49. package/dist/vendor/design/textile-weave-generator.js +429 -429
  50. package/dist/vendor/design/ui-kit-runtime.js +674 -674
  51. package/manifest.json +1 -1
  52. package/package.json +7 -4
package/README.md CHANGED
@@ -279,6 +279,33 @@ If you do not want an agent executing anything, `code` mode is a first-class pat
279
279
  - The npm package starts no process. Two export features use `ffprobe` and `ffmpeg`: checking a saved video against what the studio encoded, and joining the cached segments of a `perScene` export (`ffmpeg -f concat`). Only the Claude Desktop extension runs them, through a small runner it bundles that allows those two binaries alone, via `execFile` (no shell, argument lists the server writes, absolute paths). From npm, the check is skipped and said so, and a `perScene` export runs whole.
280
280
  - The server itself fetches the images, SVGs and media a tool call names by URL, and reads local files named by path. URLs that resolve to loopback, private, link-local or reserved addresses are refused, redirects included, and so are cloud metadata addresses. Local files are read only with `PINEPAPER_ALLOW_LOCAL_FILES=1`, and then only from the working directory, the export folder, and folders listed in `PINEPAPER_ASSET_DIRS` (the export folder is readable without the switch). `PINEPAPER_ALLOW_PRIVATE_NETWORK=1` allows local and LAN hosts. Metadata addresses stay refused even with it set.
281
281
 
282
+ ## What's new in 1.6.29
283
+
284
+ ### Changed
285
+
286
+ - The package installs one dependency, `zod`. The guarded fetch that protects
287
+ URL imports from reaching private and loopback addresses now runs on Node's
288
+ own `http` / `https`, with every connection still pinned to the addresses
289
+ that passed the check. `undici` is no longer installed.
290
+ - Every request the server makes, including icon search and the hosted
291
+ generation API, goes through that one guarded module.
292
+ - `package.json` names the issue tracker and homepage.
293
+
294
+ ### Fixed
295
+
296
+ - `scale`, `scaleX` and `scaleY` on `pinepaper_create_item` are applied (a
297
+ squashed circle stays squashed). Before, the studio ignored them at create.
298
+ - `pinepaper_morph_sequence` takes `hideTarget` (per state or for the whole
299
+ call): `false` keeps the reference item visible.
300
+ - `pinepaper_design_medium` ink with `keepColor` and no `color` draws its marks
301
+ in the item's own colour, not the brush default.
302
+ - Keyframes on `skewX`, `skewY` or `shear`, which the studio does not animate,
303
+ are named in `ignoredProperties`. A sheared motion is a `transform` track.
304
+ - New warnings where the result used to look right but wasn't: `x` keyed
305
+ beside `fontSize` on one text item (it drifts in export), a `bloom` image
306
+ filter (its halo stops at the image edge), and removing a look (geometry is
307
+ not restored).
308
+
282
309
  ## What's new in 1.6.28
283
310
 
284
311
  ### Changed
package/SECURITY.md CHANGED
@@ -49,10 +49,9 @@ The server's own defences, `PINEPAPER_ALLOW_CODE`, `PINEPAPER_ALLOW_LOCAL_FILES`
49
49
 
50
50
  ## Dependencies
51
51
 
52
- The package installs two runtime dependencies and nothing else:
52
+ The package installs one runtime dependency, `zod`, for tool input schemas, and nothing else.
53
53
 
54
- - `zod`, for tool input schemas;
55
- - `undici`, used only by the guarded fetch (`src/utils/safe-fetch.ts`) to pin each connection to the addresses that passed the private-network check, which closes DNS rebinding. Node's built-in `fetch` cannot be given that pinned resolver, so undici stays.
54
+ Every outbound request goes through one file, `src/utils/safe-fetch.ts`, on Node's built-in `http` / `https`. A URL a tool call names is checked against private, loopback, link-local, reserved and cloud-metadata addresses, every redirect included, and the connection is pinned to the addresses that passed (a `lookup` that returns only those), which closes DNS rebinding. Requests to the server's own configured services (the hosted API, the icon libraries) go through the same file. Up to 1.6.28 the pinning used `undici`; Node's own `http` takes the same pinned `lookup`, so it was removed.
56
55
 
57
56
  **Puppeteer is not a dependency**, not even an optional peer (it was one up to 1.6.25). It brings a browser download with an install script, shell access and a large network tree, and the browser tools are a minority of what the server does. Install it yourself to use them (`npm i puppeteer`, or `-p puppeteer` in the `npx` call; see the README). The server imports it by name only from where its own dependencies resolve, or from an absolute folder you set in `PINEPAPER_PUPPETEER_FROM`; never from its working directory, which can be an untrusted checkout. puppeteer 22 or newer is required and an older one is refused.
58
57
 
@@ -34,113 +34,113 @@ export class SmartExportManager {
34
34
  * Generate code to analyze canvas content
35
35
  */
36
36
  generateAnalysisCode() {
37
- return `
38
- (function() {
39
- const analysis = {
40
- hasAnimations: false,
41
- animationTypes: [],
42
- colorComplexity: 'simple',
43
- itemCount: 0,
44
- canvasSize: { width: 0, height: 0 },
45
- hasRelations: false,
46
- relationTypes: [],
47
- hasGradients: false,
48
- hasShadows: false,
49
- hasText: false,
50
- hasImages: false,
51
- };
37
+ return ("\n(function() {\n const analysis = {\n hasAnimations: false,\n animationTypes: [],\n colorComplexity: 'simple',\n itemCount: 0,\n canvasSize: { width: 0, height: 0 },\n hasRelations: false,\n relationTypes: [],\n hasGradients: false,\n hasShadows: false,\n hasText: false,\n hasImages: false,\n };\n\n // Get canvas size\n if (app.canvasEl) {\n analysis.canvasSize = {\n width: app.canvasEl.width,\n height: app.canvasEl.height\n };\n } else if (paper.view) {\n analysis.canvasSize = {\n width: paper.view.size.width,\n height: paper.view.size.height\n };\n }\n\n // Count items and analyze types\n const items = app.itemRegi" +
38
+ "stry ? app.itemRegistry.getAll() : [];\n analysis.itemCount = items.length;\n\n const animationSet = new Set();\n const relationSet = new Set();\n let hasGradient = false;\n let hasShadow = false;\n\n items.forEach(entry => {\n const item = entry.item;\n const data = item.data || {};\n\n // Check for text\n if (entry.type === 'text' || item.className === 'PointText') {\n analysis.hasText = true;\n }\n\n // Check for images (raster items)\n if (item.className === 'Raster') {\n analysis.hasImages = true;\n }\n\n // Check for animations ('none' is a still item, gate C5)\n if (data.animationType && data.animationType !== 'none') {\n analysis.h" +
39
+ "asAnimations = true;\n animationSet.add(data.animationType);\n }\n\n // Check for gradients\n if (item.fillColor && item.fillColor.gradient) {\n hasGradient = true;\n }\n if (item.strokeColor && item.strokeColor.gradient) {\n hasGradient = true;\n }\n\n // Check for shadows\n if (item.shadowColor || item.shadowBlur) {\n hasShadow = true;\n }\n });\n\n analysis.animationTypes = Array.from(animationSet);\n analysis.hasGradients = hasGradient;\n analysis.hasShadows = hasShadow;\n\n // Check for relations\n if (app.relationRegistry) {\n // getAll() has never existed on the registry, so this always took the\n // empty fallback and every" +
40
+ " analysis reported NO relations. getStats() is\n // the real accessor and answers both questions: associationsByType is\n // keyed by relation type, and activeItems counts the items carrying one.\n const relStats = typeof app.relationRegistry.getStats === 'function'\n ? app.relationRegistry.getStats()\n : null;\n Object.keys((relStats && relStats.associationsByType) || {}).forEach(t => relationSet.add(t));\n analysis.relationTypes = Array.from(relationSet);\n analysis.hasRelations = !!relStats && (relStats.activeItems > 0 || analysis.relationTypes.length > 0);\n\n // Relations imply animations\n if (analysis.hasRelations) {\n analysis.hasAnimations = " +
41
+ "true;\n }\n }\n\n // Determine color complexity\n if (hasGradient) {\n analysis.colorComplexity = 'gradient';\n } else if (analysis.itemCount > 20 || hasShadow) {\n analysis.colorComplexity = 'complex';\n } else {\n analysis.colorComplexity = 'simple';\n }\n\n return analysis;\n})();\n "
52
42
 
53
- // Get canvas size
54
- if (app.canvasEl) {
55
- analysis.canvasSize = {
56
- width: app.canvasEl.width,
57
- height: app.canvasEl.height
58
- };
59
- } else if (paper.view) {
60
- analysis.canvasSize = {
61
- width: paper.view.size.width,
62
- height: paper.view.size.height
63
- };
64
- }
65
43
 
66
- // Count items and analyze types
67
- const items = app.itemRegistry ? app.itemRegistry.getAll() : [];
68
- analysis.itemCount = items.length;
69
44
 
70
- const animationSet = new Set();
71
- const relationSet = new Set();
72
- let hasGradient = false;
73
- let hasShadow = false;
74
45
 
75
- items.forEach(entry => {
76
- const item = entry.item;
77
- const data = item.data || {};
78
46
 
79
- // Check for text
80
- if (entry.type === 'text' || item.className === 'PointText') {
81
- analysis.hasText = true;
82
- }
83
47
 
84
- // Check for images (raster items)
85
- if (item.className === 'Raster') {
86
- analysis.hasImages = true;
87
- }
88
48
 
89
- // Check for animations ('none' is a still item, gate C5)
90
- if (data.animationType && data.animationType !== 'none') {
91
- analysis.hasAnimations = true;
92
- animationSet.add(data.animationType);
93
- }
94
49
 
95
- // Check for gradients
96
- if (item.fillColor && item.fillColor.gradient) {
97
- hasGradient = true;
98
- }
99
- if (item.strokeColor && item.strokeColor.gradient) {
100
- hasGradient = true;
101
- }
102
50
 
103
- // Check for shadows
104
- if (item.shadowColor || item.shadowBlur) {
105
- hasShadow = true;
106
- }
107
- });
108
51
 
109
- analysis.animationTypes = Array.from(animationSet);
110
- analysis.hasGradients = hasGradient;
111
- analysis.hasShadows = hasShadow;
112
-
113
- // Check for relations
114
- if (app.relationRegistry) {
115
- // getAll() has never existed on the registry, so this always took the
116
- // empty fallback and every analysis reported NO relations. getStats() is
117
- // the real accessor and answers both questions: associationsByType is
118
- // keyed by relation type, and activeItems counts the items carrying one.
119
- const relStats = typeof app.relationRegistry.getStats === 'function'
120
- ? app.relationRegistry.getStats()
121
- : null;
122
- Object.keys((relStats && relStats.associationsByType) || {}).forEach(t => relationSet.add(t));
123
- analysis.relationTypes = Array.from(relationSet);
124
- analysis.hasRelations = !!relStats && (relStats.activeItems > 0 || analysis.relationTypes.length > 0);
125
-
126
- // Relations imply animations
127
- if (analysis.hasRelations) {
128
- analysis.hasAnimations = true;
129
- }
130
- }
131
52
 
132
- // Determine color complexity
133
- if (hasGradient) {
134
- analysis.colorComplexity = 'gradient';
135
- } else if (analysis.itemCount > 20 || hasShadow) {
136
- analysis.colorComplexity = 'complex';
137
- } else {
138
- analysis.colorComplexity = 'simple';
139
- }
140
53
 
141
- return analysis;
142
- })();
143
- `.trim();
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+
122
+
123
+
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+
132
+
133
+
134
+
135
+
136
+
137
+
138
+
139
+
140
+
141
+
142
+
143
+ ).trim();
144
144
  }
145
145
  /**
146
146
  * Recommend export format based on content analysis
@@ -372,39 +372,39 @@ export class SmartExportManager {
372
372
  */
373
373
  generateVideoExportCode(format, fps, _dimensions) {
374
374
  const mimeType = format === 'mp4' ? 'video/mp4' : 'video/webm';
375
- return `
376
- (async function() {
377
- if (!app.exportEngine) {
378
- return { success: false, error: '${format.toUpperCase()} export not available' };
379
- }
375
+ return ("\n(async function() {\n if (!app.exportEngine) {\n return { success: false, error: '" +
376
+ String(format.toUpperCase()) +
377
+ " export not available' };\n }\n\n let blob;\n if (app.exportEngine._quickExportVideo) {\n const result = await app.exportEngine._quickExportVideo('" +
378
+ String(format) +
379
+ "', { fps: " +
380
+ String(fps) +
381
+ ", duration: 5 }, false);\n blob = result && result.blob ? result.blob : null;\n } else if (app.exportEngine.videoExporter) {\n blob = await app.exportEngine.videoExporter.export({ format: '" +
382
+ String(format) +
383
+ "', fps: " +
384
+ String(fps) +
385
+ ", duration: 5 });\n }\n\n if (!blob) {\n return { success: false, error: '" +
386
+ String(format.toUpperCase()) +
387
+ " export returned no data' };\n }\n\n return new Promise((resolve) => {\n const reader = new FileReader();\n reader.onloadend = () => {\n resolve({\n success: true,\n format: '" +
388
+ String(format) +
389
+ "',\n data: reader.result,\n mimeType: '" +
390
+ String(mimeType) +
391
+ "',\n size: blob.size\n });\n };\n reader.readAsDataURL(blob);\n });\n})();\n "
380
392
 
381
- let blob;
382
- if (app.exportEngine._quickExportVideo) {
383
- const result = await app.exportEngine._quickExportVideo('${format}', { fps: ${fps}, duration: 5 }, false);
384
- blob = result && result.blob ? result.blob : null;
385
- } else if (app.exportEngine.videoExporter) {
386
- blob = await app.exportEngine.videoExporter.export({ format: '${format}', fps: ${fps}, duration: 5 });
387
- }
388
393
 
389
- if (!blob) {
390
- return { success: false, error: '${format.toUpperCase()} export returned no data' };
391
- }
392
394
 
393
- return new Promise((resolve) => {
394
- const reader = new FileReader();
395
- reader.onloadend = () => {
396
- resolve({
397
- success: true,
398
- format: '${format}',
399
- data: reader.result,
400
- mimeType: '${mimeType}',
401
- size: blob.size
402
- });
403
- };
404
- reader.readAsDataURL(blob);
405
- });
406
- })();
407
- `.trim();
395
+
396
+
397
+
398
+
399
+
400
+
401
+
402
+
403
+
404
+
405
+
406
+
407
+ ).trim();
408
408
  }
409
409
  /**
410
410
  * Generate PDF export code
@@ -1 +1 @@
1
- {"version":3,"file":"fontawesome.d.ts","sourceRoot":"","sources":["../../../src/assets/repositories/fontawesome.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAsB1E;;;;;GAKG;AACH,qBAAa,kBAAmB,YAAW,eAAe;IACxD,IAAI,SAAiB;IAErB,OAAO,CAAC,OAAO,CAAoE;IAEnF;;;OAGG;IACH,OAAO,CAAC,YAAY,CAgClB;IAEF;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA6BlE;;OAEG;IACH,OAAO,CAAC,YAAY;IAmBpB;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmChD;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;CAe3D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,eAAe,CAE1D"}
1
+ {"version":3,"file":"fontawesome.d.ts","sourceRoot":"","sources":["../../../src/assets/repositories/fontawesome.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAsB1E;;;;;GAKG;AACH,qBAAa,kBAAmB,YAAW,eAAe;IACxD,IAAI,SAAiB;IAErB,OAAO,CAAC,OAAO,CAAoE;IAEnF;;;OAGG;IACH,OAAO,CAAC,YAAY,CAgClB;IAEF;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA6BlE;;OAEG;IACH,OAAO,CAAC,YAAY;IAmBpB;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmChD;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;CAe3D;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,eAAe,CAE1D"}
@@ -4,6 +4,7 @@
4
4
  * Fetches free SVG icons from Font Awesome
5
5
  * Repository info: 2,000+ free icons (CC BY 4.0 license)
6
6
  */
7
+ import { trustedFetch } from '../../utils/safe-fetch.js';
7
8
  /**
8
9
  * Font Awesome adapter
9
10
  *
@@ -115,7 +116,7 @@ export class FontAwesomeAdapter {
115
116
  }
116
117
  const [, style, iconName] = match;
117
118
  const svgUrl = `${this.cdnBase}/${style}/${iconName}.svg`;
118
- const response = await fetch(svgUrl, {
119
+ const response = await trustedFetch(svgUrl, {
119
120
  headers: {
120
121
  'User-Agent': 'PinePaper-MCP-Server/1.2.2',
121
122
  },
@@ -1 +1 @@
1
- {"version":3,"file":"fontawesome.js","sourceRoot":"","sources":["../../../src/assets/repositories/fontawesome.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fontawesome.js","sourceRoot":"","sources":["../../../src/assets/repositories/fontawesome.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"iconify.d.ts","sourceRoot":"","sources":["../../../src/assets/repositories/iconify.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAgB,MAAM,aAAa,CAAC;AAoCxF,qBAAa,cAAe,YAAW,eAAe;IACpD,IAAI,SAAa;IAEjB,OAAO,CAAC,MAAM,CAAgC;IAE9C;;;;;OAKG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAoDlE;;;;OAIG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkChD;;;;OAIG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA6C1D;;OAEG;IACH,OAAO,CAAC,YAAY;CAqErB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,eAAe,CAEtD"}
1
+ {"version":3,"file":"iconify.d.ts","sourceRoot":"","sources":["../../../src/assets/repositories/iconify.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAgB,MAAM,aAAa,CAAC;AAoCxF,qBAAa,cAAe,YAAW,eAAe;IACpD,IAAI,SAAa;IAEjB,OAAO,CAAC,MAAM,CAAgC;IAE9C;;;;;OAKG;IACG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAoDlE;;;;OAIG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkChD;;;;OAIG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA6C1D;;OAEG;IACH,OAAO,CAAC,YAAY;CAqErB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,eAAe,CAEtD"}
@@ -4,6 +4,7 @@
4
4
  * Fetches SVG icons from iconify.design
5
5
  * Repository info: 200,000+ icons from various icon sets with different licenses
6
6
  */
7
+ import { trustedFetch } from '../../utils/safe-fetch.js';
7
8
  /**
8
9
  * Iconify adapter
9
10
  *
@@ -28,7 +29,7 @@ export class IconifyAdapter {
28
29
  try {
29
30
  // Iconify search endpoint
30
31
  const searchUrl = `${this.apiUrl}/search?query=${encodeURIComponent(query)}&limit=${limit}`;
31
- const response = await fetch(searchUrl, {
32
+ const response = await trustedFetch(searchUrl, {
32
33
  headers: {
33
34
  'User-Agent': 'PinePaper-MCP-Server/1.2.2',
34
35
  },
@@ -80,7 +81,7 @@ export class IconifyAdapter {
80
81
  .replace('_', ':'); // Replace first underscore with colon
81
82
  // Download SVG from Iconify API
82
83
  const svgUrl = `${this.apiUrl}/${iconName}.svg`;
83
- const response = await fetch(svgUrl, {
84
+ const response = await trustedFetch(svgUrl, {
84
85
  headers: {
85
86
  'User-Agent': 'PinePaper-MCP-Server/1.2.2',
86
87
  },
@@ -111,7 +112,7 @@ export class IconifyAdapter {
111
112
  const [collection] = iconName.split(':');
112
113
  // Fetch collection info
113
114
  const collectionUrl = `${this.apiUrl}/collection?prefix=${collection}`;
114
- const response = await fetch(collectionUrl, {
115
+ const response = await trustedFetch(collectionUrl, {
115
116
  headers: {
116
117
  'User-Agent': 'PinePaper-MCP-Server/1.2.2',
117
118
  },
@@ -1 +1 @@
1
- {"version":3,"file":"iconify.js","sourceRoot":"","sources":["../../../src/assets/repositories/iconify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"iconify.js","sourceRoot":"","sources":["../../../src/assets/repositories/iconify.ts"],"names":[],"mappings":"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"}
@@ -1223,13 +1223,8 @@ export class PinePaperBrowserController {
1223
1223
  }
1224
1224
  const atomic = options.atomic ?? true;
1225
1225
  // Wrap all codes in a single IIFE for batch execution
1226
- const batchCode = `
1227
- (async function() {
1228
- const _results = [];
1229
- const _itemIds = [];
1230
-
1231
- try {
1232
- ${codes.map((code, i) => `
1226
+ const batchCode = ("\n(async function() {\n const _results = [];\n const _itemIds = [];\n\n try {\n" +
1227
+ String(codes.map((code, i) => `
1233
1228
  // === Operation ${i + 1} ===
1234
1229
  try {
1235
1230
  const _result${i} = await (async () => {
@@ -1244,24 +1239,44 @@ ${codes.map((code, i) => `
1244
1239
  _results.push({ index: ${i}, success: false, step: 'operation ${i}', itemId: null, reason: (e && typeof e.message === 'string' && e.message) || 'operation ${i} threw with no message', error: (e && typeof e.message === 'string' && e.message) || 'operation ${i} threw with no message' });
1245
1240
  ${atomic ? 'throw e; // Atomic mode: stop on first error' : '// Continue despite error'}
1246
1241
  }
1247
- `).join('\n')}
1242
+ `).join('\n')) +
1243
+ "\n\n // Save history once for all operations\n if (app.historyManager) {\n app.historyManager.saveState();\n }\n\n return { success: true, itemIds: _itemIds, results: _results };\n } catch (e) {\n return {\n success: false,\n error: (e && typeof e.message === 'string' && e.message) || 'the batch threw with no message',\n itemIds: _itemIds,\n results: _results\n };\n }\n})();\n "
1248
1244
 
1249
- // Save history once for all operations
1250
- if (app.historyManager) {
1251
- app.historyManager.saveState();
1252
- }
1253
1245
 
1254
- return { success: true, itemIds: _itemIds, results: _results };
1255
- } catch (e) {
1256
- return {
1257
- success: false,
1258
- error: (e && typeof e.message === 'string' && e.message) || 'the batch threw with no message',
1259
- itemIds: _itemIds,
1260
- results: _results
1261
- };
1262
- }
1263
- })();
1264
- `.trim();
1246
+
1247
+
1248
+
1249
+
1250
+
1251
+
1252
+
1253
+
1254
+
1255
+
1256
+
1257
+
1258
+
1259
+
1260
+
1261
+
1262
+
1263
+
1264
+
1265
+
1266
+
1267
+
1268
+
1269
+
1270
+
1271
+
1272
+
1273
+
1274
+
1275
+
1276
+
1277
+
1278
+
1279
+ ).trim();
1265
1280
  try {
1266
1281
  // A string is run as a CDP Runtime.evaluate: the script's value, awaited, by value (no eval in this package).
1267
1282
  const result = await this.page.evaluate(batchCode).catch((e) => ({
@@ -1,5 +1,5 @@
1
1
  {
2
- "sha": "ec1fdb8",
2
+ "sha": "f78bc1c",
3
3
  "dirty": false,
4
- "builtAt": "2026-11-02T00:13:05.579Z"
4
+ "builtAt": "2026-11-02T01:03:23.434Z"
5
5
  }
package/dist/cli.js CHANGED
@@ -18,60 +18,60 @@ async function main() {
18
18
  if (args.includes('--help') || args.includes('-h')) {
19
19
  // Counted, not written down: "agent ~50" and "full 120+" both went stale.
20
20
  const countFor = (p) => `${getToolsForToolkit(getToolsForVerbosity('compact'), p).length} tools`;
21
- console.log(`
22
- PinePaper MCP Server v${VERSION}
23
-
24
- Create animated graphics with AI using the Model Context Protocol.
25
-
26
- USAGE:
27
- pinepaper-mcp [options]
28
-
29
- OPTIONS:
30
- --help, -h Show this help message
31
- --version, -v Show version number
32
- --mode <mode> Execution mode: 'puppeteer' or 'code'
33
- - puppeteer: Open browser and execute code (default)
34
- - code: Generate code only for manual paste
35
- --toolkit <profile> Tool visibility profile (default: core)
36
- - core: The craft tools and what they name, the agent workflow, canvas and query (${countFor('core')}); load more with pinepaper_set_toolkit {load}
37
- - full: Every tool (${countFor('full')})
38
- - agent: Every tool except the diagnostics and register_item (${countFor('agent')})
39
- - diagram: Diagram/flowchart tools
40
- - map: Map/choropleth tools
41
- - font: Font creation tools
42
- - minimal: Bare essentials
43
- --verbosity <level> Tool description detail level (default: compact)
44
- - verbose: Full descriptions (~42K tokens)
45
- - compact: Shorter descriptions (~37K tokens)
46
- - minimal: 1-line summaries (~22K tokens)
47
-
48
- ENVIRONMENT VARIABLES:
49
- PINEPAPER_TOOLKIT Tool visibility profile (same values as --toolkit)
50
- PINEPAPER_VERBOSITY Description verbosity (same values as --verbosity)
51
- PINEPAPER_EXECUTION_MODE Execution mode ('puppeteer' or 'code')
52
- PINEPAPER_SCREENSHOT_MODE Screenshot behavior ('on_request', 'always', 'never')
53
- PINEPAPER_LOCALE UI locale (e.g., 'en', 'ja', 'zh-CN')
54
-
55
- Browser connection:
56
- PINEPAPER_WAIT_UNTIL What a navigation waits for: 'load',
57
- 'domcontentloaded' (default), 'networkidle0',
58
- 'networkidle2'
59
- PINEPAPER_TIMEOUT Navigation/readiness timeout in ms (default 30000)
60
- PINEPAPER_PROXY Chrome --proxy-server value; also ignores
61
- certificate errors, for an intercepting proxy
62
- PINEPAPER_EXPORT_TIMEOUT Governor budget for an export run in ms
63
- (default 300000)
64
- PINEPAPER_GOVERNOR 'off' runs code by raw eval, giving up the
65
- governor report, error codes and seeding
66
-
67
- Legacy: PINEPAPER_TOOL_VERBOSITY (use PINEPAPER_VERBOSITY instead)
68
-
69
- DOCUMENTATION:
70
- https://pinepaper.studio/docs/mcp
71
-
72
- SUPPORT:
73
- https://github.com/pinepaper/mcp-server/issues
74
- `);
21
+ console.log(("\nPinePaper MCP Server v" +
22
+ String(VERSION) +
23
+ "\n\nCreate animated graphics with AI using the Model Context Protocol.\n\nUSAGE:\n pinepaper-mcp [options]\n\nOPTIONS:\n --help, -h Show this help message\n --version, -v Show version number\n --mode <mode> Execution mode: 'puppeteer' or 'code'\n - puppeteer: Open browser and execute code (default)\n - code: Generate code only for manual paste\n --toolkit <profile> Tool visibility profile (default: core)\n - core: The craft tools and what they name, the agent workflow, canvas and query (" +
24
+ String(countFor('core')) +
25
+ "); load more with pinepaper_set_toolkit {load}\n - full: Every tool (" +
26
+ String(countFor('full')) +
27
+ ")\n - agent: Every tool except the diagnostics and register_item (" +
28
+ String(countFor('agent')) +
29
+ ")\n - diagram: Diagram/flowchart tools\n - map: Map/choropleth tools\n - font: Font creation tools\n - minimal: Bare essentials\n --verbosity <level> Tool description detail level (default: compact)\n - verbose: Full descriptions (~42K tokens)\n - compact: Shorter descriptions (~37K tokens)\n - minimal: 1-line summaries (~22K tokens)\n\nENVIRONMENT VARIABLES:\n PINEPAPER_TOOLKIT Tool visibility profile (same values as --toolkit)\n PINEPAPER_VERBOSITY Description verbosity (same values as --ver" +
30
+ "bosity)\n PINEPAPER_EXECUTION_MODE Execution mode ('puppeteer' or 'code')\n PINEPAPER_SCREENSHOT_MODE Screenshot behavior ('on_request', 'always', 'never')\n PINEPAPER_LOCALE UI locale (e.g., 'en', 'ja', 'zh-CN')\n\n Browser connection:\n PINEPAPER_WAIT_UNTIL What a navigation waits for: 'load',\n 'domcontentloaded' (default), 'networkidle0',\n 'networkidle2'\n PINEPAPER_TIMEOUT Navigation/readiness timeout in ms (default 30000)\n PINEPAPER_PROXY Chrome --proxy-server value; also ignores\n certificate errors, for an intercepting proxy\n PINEPAPER_EXPOR" +
31
+ "T_TIMEOUT Governor budget for an export run in ms\n (default 300000)\n PINEPAPER_GOVERNOR 'off' runs code by raw eval, giving up the\n governor report, error codes and seeding\n\n Legacy: PINEPAPER_TOOL_VERBOSITY (use PINEPAPER_VERBOSITY instead)\n\nDOCUMENTATION:\n https://pinepaper.studio/docs/mcp\n\nSUPPORT:\n https://github.com/pinepaper/mcp-server/issues\n"
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+ ));
75
75
  process.exit(0);
76
76
  }
77
77
  // Handle version flag