@pinepaper.studio/mcp-server 1.6.17 → 1.6.19
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.de.md +1 -1
- package/README.es.md +1 -1
- package/README.fr.md +1 -1
- package/README.hi.md +1 -1
- package/README.ja.md +1 -1
- package/README.ko.md +1 -1
- package/README.md +189 -10
- package/README.pt-BR.md +1 -1
- package/README.zh-CN.md +1 -1
- package/dist/agent/export-manager.js +2 -2
- package/dist/agent/session-manager.d.ts +8 -0
- package/dist/agent/session-manager.d.ts.map +1 -1
- package/dist/agent/session-manager.js +17 -2
- package/dist/agent/session-manager.js.map +1 -1
- package/dist/assets/asset-manager.d.ts +28 -1
- package/dist/assets/asset-manager.d.ts.map +1 -1
- package/dist/assets/asset-manager.js +65 -25
- package/dist/assets/asset-manager.js.map +1 -1
- package/dist/assets/index.d.ts +1 -3
- package/dist/assets/index.d.ts.map +1 -1
- package/dist/assets/index.js +1 -3
- package/dist/assets/index.js.map +1 -1
- package/dist/assets/repositories/iconify.js +1 -1
- package/dist/assets/repositories/iconify.js.map +1 -1
- package/dist/assets/repositories/openclipart.js +1 -1
- package/dist/assets/repositories/openclipart.js.map +1 -1
- package/dist/assets/repositories/svgrepo.js +2 -2
- package/dist/assets/repositories/svgrepo.js.map +1 -1
- package/dist/assets/types.d.ts +2 -2
- package/dist/assets/types.d.ts.map +1 -1
- package/dist/browser/puppeteer-controller.d.ts +86 -1
- package/dist/browser/puppeteer-controller.d.ts.map +1 -1
- package/dist/browser/puppeteer-controller.js +274 -6
- package/dist/browser/puppeteer-controller.js.map +1 -1
- package/dist/build-info.json +2 -2
- package/dist/cli.js +4 -2
- package/dist/cli.js.map +1 -1
- package/dist/design/design-systems.d.ts +2 -0
- package/dist/design/design-systems.d.ts.map +1 -1
- package/dist/design/design-systems.js +2 -0
- package/dist/design/design-systems.js.map +1 -1
- package/dist/execution/canvas-state.d.ts.map +1 -1
- package/dist/execution/canvas-state.js +19 -43
- package/dist/execution/canvas-state.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +94 -16
- package/dist/index.js.map +1 -1
- package/dist/ontology/design-graph.js +2 -2
- package/dist/ontology/design-graph.js.map +1 -1
- package/dist/ontology/ontology-validator.d.ts.map +1 -1
- package/dist/ontology/ontology-validator.js +9 -5
- package/dist/ontology/ontology-validator.js.map +1 -1
- package/dist/ontology/upstream-vocabulary.d.ts +2 -2
- package/dist/ontology/upstream-vocabulary.js +2 -2
- package/dist/ontology/validator.js +1 -1
- package/dist/ontology/validator.js.map +1 -1
- package/dist/tools/compact-descriptions.d.ts.map +1 -1
- package/dist/tools/compact-descriptions.js +15 -14
- package/dist/tools/compact-descriptions.js.map +1 -1
- package/dist/tools/definitions.d.ts +1 -1
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +556 -157
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/engine-lists.d.ts +35 -0
- package/dist/tools/engine-lists.d.ts.map +1 -0
- package/dist/tools/engine-lists.js +186 -0
- package/dist/tools/engine-lists.js.map +1 -0
- package/dist/tools/engine-methods.d.ts.map +1 -1
- package/dist/tools/engine-methods.js +18 -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 +66 -9
- package/dist/tools/engine-surface.js.map +1 -1
- package/dist/tools/handlers/brand-intake.d.ts +95 -0
- package/dist/tools/handlers/brand-intake.d.ts.map +1 -0
- package/dist/tools/handlers/brand-intake.js +242 -0
- package/dist/tools/handlers/brand-intake.js.map +1 -0
- package/dist/tools/handlers/camera.js +8 -8
- package/dist/tools/handlers/camera.js.map +1 -1
- package/dist/tools/handlers/export.d.ts.map +1 -1
- package/dist/tools/handlers/export.js +77 -5
- package/dist/tools/handlers/export.js.map +1 -1
- package/dist/tools/handlers/font.js +10 -10
- package/dist/tools/handlers/font.js.map +1 -1
- package/dist/tools/handlers/generate.d.ts +12 -12
- package/dist/tools/handlers/maps.d.ts.map +1 -1
- package/dist/tools/handlers/maps.js +23 -3
- package/dist/tools/handlers/maps.js.map +1 -1
- package/dist/tools/handlers.d.ts +44 -11
- package/dist/tools/handlers.d.ts.map +1 -1
- package/dist/tools/handlers.js +462 -43
- package/dist/tools/handlers.js.map +1 -1
- package/dist/tools/minimal-descriptions.d.ts.map +1 -1
- package/dist/tools/minimal-descriptions.js +36 -29
- package/dist/tools/minimal-descriptions.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/toolkits.d.ts.map +1 -1
- package/dist/tools/toolkits.js +5 -0
- package/dist/tools/toolkits.js.map +1 -1
- package/dist/types/code-generator.d.ts +96 -4
- package/dist/types/code-generator.d.ts.map +1 -1
- package/dist/types/code-generator.js +1265 -277
- package/dist/types/code-generator.js.map +1 -1
- package/dist/types/schemas.d.ts +4181 -1757
- package/dist/types/schemas.d.ts.map +1 -1
- package/dist/types/schemas.js +378 -84
- package/dist/types/schemas.js.map +1 -1
- package/dist/utils/mcp-log.d.ts +16 -0
- package/dist/utils/mcp-log.d.ts.map +1 -0
- package/dist/utils/mcp-log.js +10 -0
- package/dist/utils/mcp-log.js.map +1 -0
- package/dist/utils/progress.d.ts +28 -0
- package/dist/utils/progress.d.ts.map +1 -0
- package/dist/utils/progress.js +24 -0
- package/dist/utils/progress.js.map +1 -0
- package/dist/vendor/design/design-style.js +1 -1
- package/manifest.json +22 -2
- package/package.json +7 -4
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP logging (notifications/message): events the agent's HOST should see
|
|
3
|
+
* but that belong in no single tool result, such as a browser session lost
|
|
4
|
+
* and relaunched between calls.
|
|
5
|
+
*
|
|
6
|
+
* Before this, the server declared no logging capability and every such event
|
|
7
|
+
* went to console.error, which an MCP client never shows. The server registers
|
|
8
|
+
* itself here at start; the SDK applies the client's logging/setLevel filter.
|
|
9
|
+
* With no server registered (tests, CLI), this is a no-op.
|
|
10
|
+
*/
|
|
11
|
+
import type { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
12
|
+
type Level = 'debug' | 'info' | 'notice' | 'warning' | 'error';
|
|
13
|
+
export declare function setLogServer(s: Server | null): void;
|
|
14
|
+
export declare function mcpLog(level: Level, data: string | Record<string, unknown>): void;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=mcp-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-log.d.ts","sourceRoot":"","sources":["../../src/utils/mcp-log.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAExE,KAAK,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAI/D,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAEnD;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAGjF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
let server = null;
|
|
2
|
+
export function setLogServer(s) {
|
|
3
|
+
server = s;
|
|
4
|
+
}
|
|
5
|
+
export function mcpLog(level, data) {
|
|
6
|
+
if (!server)
|
|
7
|
+
return;
|
|
8
|
+
server.sendLoggingMessage({ level, logger: 'pinepaper', data }).catch(() => { });
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=mcp-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-log.js","sourceRoot":"","sources":["../../src/utils/mcp-log.ts"],"names":[],"mappings":"AAcA,IAAI,MAAM,GAAkB,IAAI,CAAC;AAEjC,MAAM,UAAU,YAAY,CAAC,CAAgB;IAC3C,MAAM,GAAG,CAAC,CAAC;AACb,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAY,EAAE,IAAsC;IACzE,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,MAAM,CAAC,kBAAkB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAwC,CAAC,CAAC,CAAC;AACxH,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP progress for a running tool call (notifications/progress).
|
|
3
|
+
*
|
|
4
|
+
* `progress` is elapsed seconds: it must increase with every notification,
|
|
5
|
+
* and a time base is the one quantity that always does. What the work is
|
|
6
|
+
* actually doing goes in `message`. For a video export that is the studio's
|
|
7
|
+
* own percentage, read through `status`.
|
|
8
|
+
*/
|
|
9
|
+
export interface ProgressNotifier {
|
|
10
|
+
progressToken: string | number;
|
|
11
|
+
send: (n: {
|
|
12
|
+
method: 'notifications/progress';
|
|
13
|
+
params: {
|
|
14
|
+
progressToken: string | number;
|
|
15
|
+
progress: number;
|
|
16
|
+
message: string;
|
|
17
|
+
};
|
|
18
|
+
}) => Promise<void>;
|
|
19
|
+
intervalMs: number;
|
|
20
|
+
label: string;
|
|
21
|
+
status?: () => Promise<{
|
|
22
|
+
percent: number;
|
|
23
|
+
} | null>;
|
|
24
|
+
now?: () => number;
|
|
25
|
+
}
|
|
26
|
+
/** Start reporting; returns stop(). */
|
|
27
|
+
export declare function startProgress(p: ProgressNotifier): () => void;
|
|
28
|
+
//# sourceMappingURL=progress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/utils/progress.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC,EAAE;QAAE,MAAM,EAAE,wBAAwB,CAAC;QAAC,MAAM,EAAE;YAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChJ,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC,CAAC;IACnD,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,uCAAuC;AACvC,wBAAgB,aAAa,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,IAAI,CAkB7D"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** Start reporting; returns stop(). */
|
|
2
|
+
export function startProgress(p) {
|
|
3
|
+
const now = p.now ?? Date.now;
|
|
4
|
+
const started = now();
|
|
5
|
+
let last = 0;
|
|
6
|
+
let stopped = false;
|
|
7
|
+
const tick = async () => {
|
|
8
|
+
const progress = Math.max(last + 1, Math.round((now() - started) / 1000));
|
|
9
|
+
last = progress;
|
|
10
|
+
let message = `${p.label}: working (${progress} s)`;
|
|
11
|
+
try {
|
|
12
|
+
const s = p.status ? await p.status() : null;
|
|
13
|
+
if (s)
|
|
14
|
+
message = `exporting: ${Math.round(s.percent)}%`;
|
|
15
|
+
}
|
|
16
|
+
catch { /* keep the elapsed message */ }
|
|
17
|
+
if (stopped)
|
|
18
|
+
return;
|
|
19
|
+
await p.send({ method: 'notifications/progress', params: { progressToken: p.progressToken, progress, message } }).catch(() => { });
|
|
20
|
+
};
|
|
21
|
+
const timer = setInterval(() => { void tick(); }, p.intervalMs);
|
|
22
|
+
return () => { stopped = true; clearInterval(timer); };
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/utils/progress.ts"],"names":[],"mappings":"AAiBA,uCAAuC;AACvC,MAAM,UAAU,aAAa,CAAC,CAAmB;IAC/C,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IAC9B,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC;IACtB,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;QACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC1E,IAAI,GAAG,QAAQ,CAAC;QAChB,IAAI,OAAO,GAAG,GAAG,CAAC,CAAC,KAAK,cAAc,QAAQ,KAAK,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7C,IAAI,CAAC;gBAAE,OAAO,GAAG,cAAc,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;QAC1D,CAAC;QAAC,MAAM,CAAC,CAAC,8BAA8B,CAAC,CAAC;QAC1C,IAAI,OAAO;YAAE,OAAO;QACpB,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,wBAAwB,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACpI,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;IAChE,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* GENERATED — DO NOT EDIT.
|
|
2
2
|
*
|
|
3
3
|
* Source: mcp-cloud/src/services/content-recipes.ts (DesignStyle union only)
|
|
4
|
-
* sha256:
|
|
4
|
+
* sha256: 5f36f68c0278045a212382ac43db12ef892556fe99df30728e1bdbbfe446f397
|
|
5
5
|
* Generator: scripts/sync-design-systems.mjs
|
|
6
6
|
*
|
|
7
7
|
* Edit the TypeScript upstream and re-run the generator. A hand edit here is
|
package/manifest.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"manifest_version": "0.3",
|
|
3
3
|
"name": "pinepaper-mcp",
|
|
4
|
-
"version": "1.6.
|
|
4
|
+
"version": "1.6.19",
|
|
5
5
|
"display_name": "PinePaper",
|
|
6
6
|
"icon": "icon.png",
|
|
7
7
|
"description": "Create animated graphics with AI using PinePaper Studio",
|
|
@@ -154,7 +154,7 @@
|
|
|
154
154
|
},
|
|
155
155
|
{
|
|
156
156
|
"name": "pinepaper_search_assets",
|
|
157
|
-
"description": "Search for SVG assets from open repositories (
|
|
157
|
+
"description": "Search for SVG assets from open repositories (Iconify, Font Awesome)"
|
|
158
158
|
},
|
|
159
159
|
{
|
|
160
160
|
"name": "pinepaper_import_asset",
|
|
@@ -628,6 +628,26 @@
|
|
|
628
628
|
"name": "pinepaper_export_scene",
|
|
629
629
|
"description": "Export scene definition as JSON."
|
|
630
630
|
},
|
|
631
|
+
{
|
|
632
|
+
"name": "pinepaper_styled_scene",
|
|
633
|
+
"description": "One composition drawn in a built-in style (cut, ink, watercolor, dither, flow, ascii) as one item that redraws every exported frame. {style, duration, id, spec}"
|
|
634
|
+
},
|
|
635
|
+
{
|
|
636
|
+
"name": "pinepaper_relight",
|
|
637
|
+
"description": "Light the 3D world with point/directional lights (post pass; PNG/PDF/MP4/WebM, ~0.4 s per 1080p frame; not saved). action: set|get|clear|list_lights."
|
|
638
|
+
},
|
|
639
|
+
{
|
|
640
|
+
"name": "pinepaper_shader_graph",
|
|
641
|
+
"description": "Pixel graphs (normals, relight, depth of field, bloom) over an item or 'scene'. action: node_types|validate|create|get|list|remove|apply."
|
|
642
|
+
},
|
|
643
|
+
{
|
|
644
|
+
"name": "pinepaper_place_on_surface",
|
|
645
|
+
"description": "Put a UI onto a screen in a photo (corner-pinned, hand stays in front), baked into the photo. {photoId, sourceId, quad?, slot?}"
|
|
646
|
+
},
|
|
647
|
+
{
|
|
648
|
+
"name": "pinepaper_import_scene",
|
|
649
|
+
"description": "Restore a scene from a full export file (replaces the scene); returns counts to compare. {path, strict?}"
|
|
650
|
+
},
|
|
631
651
|
{
|
|
632
652
|
"name": "pinepaper_browser_connect",
|
|
633
653
|
"description": "Connect to PinePaper Studio in browser"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pinepaper.studio/mcp-server",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.19",
|
|
4
4
|
"mcpName": "io.github.pinepaper/mcp-server",
|
|
5
5
|
"description": "MCP Server for PinePaper Studio - Create animated graphics with AI",
|
|
6
6
|
"type": "module",
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
"typecheck": "tsc --noEmit",
|
|
39
39
|
"check:manifest": "bun scripts/check-manifest-tools.mjs",
|
|
40
40
|
"fix:manifest": "bun scripts/check-manifest-tools.mjs --fix",
|
|
41
|
-
"prepublishOnly": "bun run check:manifest && bun run check:design && bun run check:character && bun run check:engine-methods && bun run check:engine-surface && bun run check:shape-params && bun run check:stick-vocabulary && bun run check:ontology-vocabulary && bun run build",
|
|
41
|
+
"prepublishOnly": "bun run check:manifest && bun run check:design && bun run check:character && bun run check:engine-methods && bun run check:engine-surface && bun run check:shape-params && bun run check:stick-vocabulary && bun run check:ontology-vocabulary && bun run check:engine-lists && bun run build",
|
|
42
42
|
"lint:errors": "eslint src --quiet",
|
|
43
43
|
"sync:design": "node scripts/sync-design-systems.mjs",
|
|
44
44
|
"check:design": "node scripts/sync-design-systems.mjs --check",
|
|
@@ -57,7 +57,10 @@
|
|
|
57
57
|
"sync:character": "node scripts/sync-character-modules.mjs",
|
|
58
58
|
"check:character": "node scripts/sync-character-modules.mjs --check",
|
|
59
59
|
"sync:ontology-vocabulary": "node scripts/sync-ontology-vocabulary.mjs",
|
|
60
|
-
"check:ontology-vocabulary": "node scripts/sync-ontology-vocabulary.mjs --check"
|
|
60
|
+
"check:ontology-vocabulary": "node scripts/sync-ontology-vocabulary.mjs --check",
|
|
61
|
+
"sync:engine-lists": "node scripts/sync-engine-lists.mjs",
|
|
62
|
+
"fix:engine-lists": "node scripts/sync-engine-lists.mjs",
|
|
63
|
+
"check:engine-lists": "node scripts/sync-engine-lists.mjs --check"
|
|
61
64
|
},
|
|
62
65
|
"keywords": [
|
|
63
66
|
"mcp",
|
|
@@ -112,7 +115,7 @@
|
|
|
112
115
|
"basic-ftp": "^5.3.1",
|
|
113
116
|
"body-parser": "^2.3.0",
|
|
114
117
|
"es-define-property": "npm:@socketregistry/es-define-property@^1.0.7",
|
|
115
|
-
"fast-uri": "^3.1.
|
|
118
|
+
"fast-uri": "^3.1.8",
|
|
116
119
|
"flatted": "^3.4.2",
|
|
117
120
|
"function-bind": "npm:@socketregistry/function-bind@^1.0.7",
|
|
118
121
|
"gopd": "npm:@socketregistry/gopd@^1.0.7",
|