@pinepaper.studio/mcp-server 1.6.28 → 1.6.30
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/README.md +79 -0
- package/SECURITY.md +2 -3
- package/dist/agent/export-manager.js +125 -125
- package/dist/assets/repositories/fontawesome.d.ts.map +1 -1
- package/dist/assets/repositories/fontawesome.js +2 -1
- package/dist/assets/repositories/fontawesome.js.map +1 -1
- package/dist/assets/repositories/iconify.d.ts.map +1 -1
- package/dist/assets/repositories/iconify.js +4 -3
- package/dist/assets/repositories/iconify.js.map +1 -1
- package/dist/browser/puppeteer-controller.d.ts +40 -0
- package/dist/browser/puppeteer-controller.d.ts.map +1 -1
- package/dist/browser/puppeteer-controller.js +176 -24
- package/dist/browser/puppeteer-controller.js.map +1 -1
- package/dist/build-info.json +2 -2
- package/dist/cli.js +54 -54
- package/dist/execution/canvas-state.js +25 -25
- package/dist/i18n/locales/en.js +22 -22
- package/dist/i18n/locales/fil.js +44 -44
- package/dist/i18n/locales/is.js +22 -22
- package/dist/i18n/locales/ur.js +22 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5574 -5568
- package/dist/index.js.map +1 -1
- package/dist/ontology/upstream-vocabulary.d.ts +2 -2
- package/dist/ontology/upstream-vocabulary.js +6 -6
- package/dist/ontology/vocabulary.d.ts.map +1 -1
- package/dist/ontology/vocabulary.js +2 -0
- package/dist/ontology/vocabulary.js.map +1 -1
- package/dist/tools/craft-tools.js +18 -18
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +2832 -2823
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/effect-check.d.ts +1 -1
- package/dist/tools/effect-check.d.ts.map +1 -1
- package/dist/tools/effect-check.js +68 -68
- package/dist/tools/effect-check.js.map +1 -1
- package/dist/tools/engine-lists.d.ts +3 -3
- package/dist/tools/engine-lists.js +3 -3
- package/dist/tools/engine-methods.d.ts.map +1 -1
- package/dist/tools/engine-methods.js +4 -1
- package/dist/tools/engine-methods.js.map +1 -1
- package/dist/tools/engine-surface.d.ts +1 -1
- package/dist/tools/engine-surface.d.ts.map +1 -1
- package/dist/tools/engine-surface.js +19 -4
- package/dist/tools/engine-surface.js.map +1 -1
- package/dist/tools/handlers/font.js +22 -22
- package/dist/tools/handlers/generate.d.ts +2 -2
- package/dist/tools/handlers/generate.d.ts.map +1 -1
- package/dist/tools/handlers/generate.js +5 -4
- package/dist/tools/handlers/generate.js.map +1 -1
- package/dist/tools/handlers.d.ts.map +1 -1
- package/dist/tools/handlers.js +57 -18
- package/dist/tools/handlers.js.map +1 -1
- package/dist/tools/lane.d.ts +8 -2
- package/dist/tools/lane.d.ts.map +1 -1
- package/dist/tools/lane.js +86 -67
- package/dist/tools/lane.js.map +1 -1
- package/dist/tools/p5-compat/p5-helpers.d.ts +6 -17
- package/dist/tools/p5-compat/p5-helpers.d.ts.map +1 -1
- package/dist/tools/p5-compat/p5-helpers.js +349 -342
- package/dist/tools/p5-compat/p5-helpers.js.map +1 -1
- package/dist/tools/shape-params.d.ts +2 -2
- package/dist/tools/shape-params.d.ts.map +1 -1
- package/dist/tools/shape-params.js +5 -2
- package/dist/tools/shape-params.js.map +1 -1
- package/dist/tools/stick-vocabulary.d.ts +1 -1
- package/dist/tools/stick-vocabulary.js +1 -1
- package/dist/tools/timeline.js +82 -82
- package/dist/types/code-generator.d.ts.map +1 -1
- package/dist/types/code-generator.js +6646 -5853
- package/dist/types/code-generator.js.map +1 -1
- package/dist/types/schemas.d.ts +13 -0
- package/dist/types/schemas.d.ts.map +1 -1
- package/dist/types/schemas.js +6 -0
- package/dist/types/schemas.js.map +1 -1
- package/dist/utils/safe-fetch.d.ts +8 -0
- package/dist/utils/safe-fetch.d.ts.map +1 -1
- package/dist/utils/safe-fetch.js +125 -34
- package/dist/utils/safe-fetch.js.map +1 -1
- package/dist/vendor/design/device-mockup-generator.js +167 -150
- package/dist/vendor/design/recursive-subdivision-generator.js +107 -107
- package/dist/vendor/design/textile-weave-generator.js +429 -429
- package/dist/vendor/design/ui-kit-runtime.js +674 -674
- package/manifest.json +1 -1
- package/package.json +7 -4
package/README.md
CHANGED
|
@@ -279,6 +279,84 @@ 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.30
|
|
283
|
+
|
|
284
|
+
### Changed
|
|
285
|
+
|
|
286
|
+
- An idle server pauses the studio page after 30 s with no tool call
|
|
287
|
+
(`PINEPAPER_IDLE_PAUSE_SECONDS`, `0` to turn it off), and the next call
|
|
288
|
+
resumes it. A 400-item scene's live preview used about half a core to one
|
|
289
|
+
and a half cores with nobody watching; paused, it uses almost none. Exports
|
|
290
|
+
come out identical either way.
|
|
291
|
+
- Replies are much smaller for an agent editing a scene. JSON results are sent
|
|
292
|
+
compact; `pinepaper_lint_scene { only: "edit" }` returns just the ops that
|
|
293
|
+
change the scene, lists a group bound by a name pattern once instead of once
|
|
294
|
+
per member, and includes a custom relation's source only with
|
|
295
|
+
`withSource: true`; a batch reply leaves out entries that only repeat what you
|
|
296
|
+
sent (`verbose: true` lists every op); and the `edit` toolkit's batch
|
|
297
|
+
description covers editing, not building. One edit pass over a 20-dot scene
|
|
298
|
+
went from 44 KB to 15 KB.
|
|
299
|
+
- New relation `on_event_step_active`, for next and previous arrows: an event
|
|
300
|
+
moves the active member of an `exclusive_group` forward or back by `delta`
|
|
301
|
+
(default +1), wrapping at the ends unless `wrap: false`.
|
|
302
|
+
- `pinepaper_lint_scene` lists only the custom relations the scene uses, and
|
|
303
|
+
names the rest in `registeredUnused` (one registered before a
|
|
304
|
+
`pinepaper_clear_canvas` no longer shows up as part of the scene).
|
|
305
|
+
|
|
306
|
+
- Housekeeping for supply-chain scanners, with no change in behaviour: the
|
|
307
|
+
hosted-API client's request helper is named for what it is, three long text
|
|
308
|
+
constants are typed as plain strings, and the p5 drawing generator checks
|
|
309
|
+
`PINEPAPER_ALLOW_CODE` itself as well as the tool handler.
|
|
310
|
+
|
|
311
|
+
### Fixed
|
|
312
|
+
|
|
313
|
+
- A very large batch (more than about 200 creates) now waits until every op has
|
|
314
|
+
run before it replies, and its reply lists the items it made. It used to
|
|
315
|
+
answer success immediately with no result while the work carried on, so the
|
|
316
|
+
next call could act on a half-built scene. An export sent right after it
|
|
317
|
+
could miss the background colour set in the same batch.
|
|
318
|
+
- An opaque export of a scene with no background colour (`mp4`, `webm`, or
|
|
319
|
+
`apng` with `transparent: false`) warns that the frames are filled with the
|
|
320
|
+
studio's page colour. The warning used to say black, but the current studio
|
|
321
|
+
fills them white.
|
|
322
|
+
- `skewX` and `skewY` keyframes are documented: the current studio animates
|
|
323
|
+
them (degrees, up to ±89). A `shear` key, which is not a channel on any
|
|
324
|
+
studio, is named in `ignoredProperties` with a pointer to `skewX` / `skewY`
|
|
325
|
+
instead of being accepted silently.
|
|
326
|
+
- On the current studio, scale at create, text keyed on both `x` and
|
|
327
|
+
`fontSize`, `bloom`, ink `keepColor` and removing a look are now fixed in the
|
|
328
|
+
studio itself. The 1.6.29 warnings and workarounds for them only appear on
|
|
329
|
+
an older studio that still needs them.
|
|
330
|
+
- `pinepaper_modify_item` no longer calls `scale`, `scaleX` or `scaleY`
|
|
331
|
+
ignored on the current studio.
|
|
332
|
+
|
|
333
|
+
## What's new in 1.6.29
|
|
334
|
+
|
|
335
|
+
### Changed
|
|
336
|
+
|
|
337
|
+
- The package installs one dependency, `zod`. The guarded fetch that protects
|
|
338
|
+
URL imports from reaching private and loopback addresses now runs on Node's
|
|
339
|
+
own `http` / `https`, with every connection still pinned to the addresses
|
|
340
|
+
that passed the check. `undici` is no longer installed.
|
|
341
|
+
- Every request the server makes, including icon search and the hosted
|
|
342
|
+
generation API, goes through that one guarded module.
|
|
343
|
+
- `package.json` names the issue tracker and homepage.
|
|
344
|
+
|
|
345
|
+
### Fixed
|
|
346
|
+
|
|
347
|
+
- `scale`, `scaleX` and `scaleY` on `pinepaper_create_item` are applied (a
|
|
348
|
+
squashed circle stays squashed). Before, the studio ignored them at create.
|
|
349
|
+
- `pinepaper_morph_sequence` takes `hideTarget` (per state or for the whole
|
|
350
|
+
call): `false` keeps the reference item visible.
|
|
351
|
+
- `pinepaper_design_medium` ink with `keepColor` and no `color` draws its marks
|
|
352
|
+
in the item's own colour, not the brush default.
|
|
353
|
+
- Keyframes on `skewX`, `skewY` or `shear`, which the studio does not animate,
|
|
354
|
+
are named in `ignoredProperties`. A sheared motion is a `transform` track.
|
|
355
|
+
- New warnings where the result used to look right but wasn't: `x` keyed
|
|
356
|
+
beside `fontSize` on one text item (it drifts in export), a `bloom` image
|
|
357
|
+
filter (its halo stops at the image edge), and removing a look (geometry is
|
|
358
|
+
not restored).
|
|
359
|
+
|
|
282
360
|
## What's new in 1.6.28
|
|
283
361
|
|
|
284
362
|
### Changed
|
|
@@ -2732,6 +2810,7 @@ See [CONTRIBUTING.md](CONTRIBUTING.md) for detailed guidelines.
|
|
|
2732
2810
|
|----------|-------------|---------|
|
|
2733
2811
|
| `PINEPAPER_STUDIO_URL` | PinePaper Studio URL to connect to (`/editor` is appended automatically) | `https://pinepaper.studio` |
|
|
2734
2812
|
| `PINEPAPER_HEADLESS` | Run the browser headless (set `false` to watch it work) | `true` |
|
|
2813
|
+
| `PINEPAPER_IDLE_PAUSE_SECONDS` | Seconds with no tool call before the studio page is paused, so an idle server uses almost no CPU; the next call resumes it. Exports are unaffected. `0` never pauses | `30` |
|
|
2735
2814
|
| `PINEPAPER_API_KEY` | Service-account key (`pp_sa_…`) for the cloud-backed tools (`pinepaper_generate`) | — |
|
|
2736
2815
|
| `PINEPAPER_CLOUD_URL` | The PinePaper cloud those tools call | `https://cloud.pinepaper.studio` |
|
|
2737
2816
|
| `PINEPAPER_EXECUTION_MODE` | `puppeteer` (execute in a real browser) or `code` (return generated code only) | `puppeteer` |
|
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
|
|
52
|
+
The package installs one runtime dependency, `zod`, for tool input schemas, and nothing else.
|
|
53
53
|
|
|
54
|
-
|
|
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
|
-
(
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
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
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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
|
-
(
|
|
377
|
-
if (
|
|
378
|
-
|
|
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
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
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;
|
|
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
|
|
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":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"fontawesome.js","sourceRoot":"","sources":["../../../src/assets/repositories/fontawesome.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAuBzD;;;;;GAKG;AACH,MAAM,OAAO,kBAAkB;IAC7B,IAAI,GAAG,aAAa,CAAC;IAEb,OAAO,GAAG,gEAAgE,CAAC;IAEnF;;;OAGG;IACK,YAAY,GAA6B;QAC/C,MAAM,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC;QACjF,OAAO,EAAE,CAAC,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,CAAC;QAC1E,OAAO,EAAE,CAAC,OAAO,EAAE,oBAAoB,EAAE,aAAa,CAAC;QACvD,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC;QAC7B,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;QACzB,QAAQ,EAAE,CAAC,QAAQ,EAAE,kBAAkB,CAAC;QACxC,UAAU,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC;QACtC,MAAM,EAAE,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,CAAC;QAC3C,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC5B,UAAU,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC;QACzC,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;QAC/B,OAAO,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,cAAc,CAAC;QAClD,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC;QAC3C,MAAM,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC;QAC/B,OAAO,EAAE,CAAC,OAAO,EAAE,cAAc,CAAC;QAClC,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC;QAC/B,MAAM,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,eAAe,CAAC;QAC1C,MAAM,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC;QACxC,OAAO,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC;QACrC,OAAO,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC;QACjC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;QAC1B,UAAU,EAAE,CAAC,UAAU,EAAE,kBAAkB,CAAC;QAC5C,QAAQ,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC;QACtC,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;QACzB,MAAM,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC;QAC1B,KAAK,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC;QAC3B,UAAU,EAAE,CAAC,cAAc,EAAE,YAAY,EAAE,KAAK,CAAC;QACjD,SAAS,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC;QAC7C,OAAO,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC;QACjC,OAAO,EAAE,CAAC,OAAO,CAAC;QAClB,MAAM,EAAE,CAAC,aAAa,EAAE,MAAM,CAAC;KAChC,CAAC;IAEF;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,KAAa;QACvC,MAAM,OAAO,GAAkB,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAEvC,mCAAmC;QACnC,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAClE,+BAA+B;YAC/B,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAClC,uCAAuC;gBACvC,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;oBAC7B,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK;wBAAE,MAAM;oBACnC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,+BAA+B;gBAC/B,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;oBAC7B,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK;wBAAE,MAAM;oBACnC,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;wBAClC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;oBACrD,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,IAAI,KAAK;gBAAE,MAAM;QACrC,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,QAAgB,EAAE,KAAqC;QAC1E,OAAO;YACL,EAAE,EAAE,eAAe,KAAK,IAAI,QAAQ,EAAE;YACtC,UAAU,EAAE,aAAa;YACzB,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;YAClC,WAAW,EAAE,gBAAgB,KAAK,IAAI,QAAQ,OAAO;YACrD,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,IAAI,QAAQ,MAAM;YACtD,WAAW,EAAE,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,IAAI,QAAQ,MAAM;YACvD,OAAO,EAAE;gBACP,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,kCAAkC;gBACxC,mBAAmB,EAAE,IAAI;gBACzB,gBAAgB,EAAE,IAAI;gBACtB,GAAG,EAAE,sCAAsC;aAC5C;YACD,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC;SACxB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC5B,IAAI,CAAC;YACH,8CAA8C;YAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YACxD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,iCAAiC,OAAO,EAAE,CAAC,CAAC;YAC9D,CAAC;YAED,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,KAAK,CAAC;YAClC,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,IAAI,QAAQ,MAAM,CAAC;YAE1D,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE;gBAC1C,OAAO,EAAE;oBACP,YAAY,EAAE,4BAA4B;iBAC3C;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACjE,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAElC,eAAe;YACf,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5D,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACzD,CAAC;YAED,OAAO,GAAG,CAAC;QACb,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;YAC7D,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,OAAe;QAC/B,OAAO;YACL,EAAE,EAAE,OAAO;YACX,UAAU,EAAE,IAAI,CAAC,IAAI;YACrB,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;YAC7D,OAAO,EAAE;gBACP,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,kCAAkC;gBACxC,mBAAmB,EAAE,IAAI;gBACzB,gBAAgB,EAAE,IAAI;gBACtB,GAAG,EAAE,sCAAsC;aAC5C;YACD,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;SACzB,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB;IACtC,OAAO,IAAI,kBAAkB,EAAE,CAAC;AAClC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iconify.d.ts","sourceRoot":"","sources":["../../../src/assets/repositories/iconify.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
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
|
|
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
|
|
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
|
|
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":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"iconify.js","sourceRoot":"","sources":["../../../src/assets/repositories/iconify.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,26 @@ import type { Page } from 'puppeteer';
|
|
|
12
12
|
*/
|
|
13
13
|
export type PageWaitUntil = 'load' | 'domcontentloaded' | 'networkidle0' | 'networkidle2';
|
|
14
14
|
export declare const PAGE_WAIT_UNTIL: readonly PageWaitUntil[];
|
|
15
|
+
/**
|
|
16
|
+
* FxTool's governor (GeneratedCodeRunner) does not scan code longer than this:
|
|
17
|
+
* injectLoopGuards and wrapTrailingReturn both give up and run it as written.
|
|
18
|
+
*/
|
|
19
|
+
export declare const GOVERNOR_MAX_CODE_CHARS = 400000;
|
|
20
|
+
/**
|
|
21
|
+
* Whether app.runGenerated would LOSE this code's value, so it must run
|
|
22
|
+
* ungoverned instead.
|
|
23
|
+
*
|
|
24
|
+
* Every emitter ends in a trailing `(async function () { … })();`, and the
|
|
25
|
+
* governor only hands its value back by rewriting that into `return (…)`. Past
|
|
26
|
+
* GOVERNOR_MAX_CODE_CHARS it does not rewrite, so the promise is dropped: the
|
|
27
|
+
* call answers success with no result AT ONCE while the code keeps running in
|
|
28
|
+
* the page. A 403-op batch (754 KB, ~1.9 KB per create) replied in 83 ms; the
|
|
29
|
+
* export sent next started before the batch's set_background ran, and the APNG
|
|
30
|
+
* came out on the empty page colour, intermittently, depending on who won.
|
|
31
|
+
* A batch passes the limit at about 215 creates. Running it ungoverned costs
|
|
32
|
+
* only what the governor had already given up at that size: its loop guards.
|
|
33
|
+
*/
|
|
34
|
+
export declare function governorDropsValue(code: string): boolean;
|
|
15
35
|
export interface BrowserControllerConfig {
|
|
16
36
|
/** PinePaper Studio URL (default: https://pinepaper.studio) */
|
|
17
37
|
studioUrl?: string;
|
|
@@ -250,6 +270,24 @@ export declare class PinePaperBrowserController {
|
|
|
250
270
|
* When agentMode is enabled (default), this automatically uses connectAgent().
|
|
251
271
|
*/
|
|
252
272
|
connect(): Promise<void>;
|
|
273
|
+
private activity;
|
|
274
|
+
private frozen;
|
|
275
|
+
private freezing;
|
|
276
|
+
private idleTimer;
|
|
277
|
+
private idleSession;
|
|
278
|
+
/** Milliseconds of no activity before the page is frozen; 0 = never. */
|
|
279
|
+
static idlePauseMs(): number;
|
|
280
|
+
/** Whether the page is frozen for idleness right now. */
|
|
281
|
+
get isIdlePaused(): boolean;
|
|
282
|
+
/** A tool call starts: stop the idle countdown and thaw the page if it was frozen. */
|
|
283
|
+
beginActivity(): Promise<void>;
|
|
284
|
+
/** A tool call ends: when none is left, start the idle countdown. */
|
|
285
|
+
endActivity(): void;
|
|
286
|
+
/** Start (or restart) the idle countdown, if a page is up and the pause is on. */
|
|
287
|
+
scheduleIdlePause(): void;
|
|
288
|
+
private lifecycleSession;
|
|
289
|
+
private freezeForIdle;
|
|
290
|
+
private thaw;
|
|
253
291
|
/**
|
|
254
292
|
* Disconnect and close browser
|
|
255
293
|
*/
|
|
@@ -404,6 +442,8 @@ export declare class PinePaperBrowserController {
|
|
|
404
442
|
* NOTE: MCP server ALWAYS uses agent mode with ?agent=1&mode=agent URL parameters.
|
|
405
443
|
* This uses headless browser by default for optimal performance.
|
|
406
444
|
*/
|
|
445
|
+
/** The controller if one exists, without creating it (code mode never launches a browser). */
|
|
446
|
+
export declare function peekBrowserController(): PinePaperBrowserController | null;
|
|
407
447
|
export declare function getBrowserController(config?: BrowserControllerConfig): PinePaperBrowserController;
|
|
408
448
|
/**
|
|
409
449
|
* Reset the global controller (for testing or when config needs to change).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"puppeteer-controller.d.ts","sourceRoot":"","sources":["../../src/browser/puppeteer-controller.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAW,IAAI,
|
|
1
|
+
{"version":3,"file":"puppeteer-controller.d.ts","sourceRoot":"","sources":["../../src/browser/puppeteer-controller.ts"],"names":[],"mappings":"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"}
|