batter-pixso-mcp 0.1.0 → 0.2.1
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/dist/index.js +157 -106
- package/dist/plugin/code.js +238 -77
- package/dist/plugin/ui.html +4 -4
- package/package.json +37 -34
- package/standalone/README.txt +13 -0
- package/standalone/batter-pixso-mcp.cmd +2 -0
- package/standalone/index.js +585 -0
- package/standalone/node.exe +0 -0
- package/standalone/plugin/code.js +552 -0
- package/standalone/plugin/manifest.json +14 -0
- package/standalone/plugin/ui.html +310 -0
package/dist/index.js
CHANGED
|
@@ -25,32 +25,27 @@ var init_config = __esm({
|
|
|
25
25
|
/** 产物图片保留时长,默认 7 天 */
|
|
26
26
|
assetTtlMs: Number(process.env.ASSET_TTL_DAYS ?? 7) * 24 * 60 * 60 * 1e3
|
|
27
27
|
};
|
|
28
|
-
VERSION = "0.1
|
|
28
|
+
VERSION = "0.2.1";
|
|
29
29
|
}
|
|
30
30
|
});
|
|
31
31
|
|
|
32
32
|
// src/assets.ts
|
|
33
|
-
import {
|
|
33
|
+
import { createHash } from "node:crypto";
|
|
34
34
|
import { mkdir, readdir, stat, unlink, writeFile } from "node:fs/promises";
|
|
35
35
|
import { tmpdir } from "node:os";
|
|
36
36
|
import { join } from "node:path";
|
|
37
|
+
function assetDir() {
|
|
38
|
+
return ASSETS_DIR;
|
|
39
|
+
}
|
|
37
40
|
async function saveAsset(bytes, format) {
|
|
38
41
|
await mkdir(ASSETS_DIR, { recursive: true });
|
|
39
42
|
const ext = EXT_BY_FORMAT[format.toUpperCase()] ?? ".bin";
|
|
40
|
-
const name = `${
|
|
43
|
+
const name = `${createHash("sha1").update(bytes).digest("hex").slice(0, 16)}${ext}`;
|
|
41
44
|
const path = join(ASSETS_DIR, name);
|
|
42
45
|
await writeFile(path, bytes);
|
|
43
46
|
log(`asset saved: ${path} (${bytes.length} bytes)`);
|
|
44
47
|
return { name, path };
|
|
45
48
|
}
|
|
46
|
-
function assetMime(name) {
|
|
47
|
-
const ext = name.slice(name.lastIndexOf(".")).toLowerCase();
|
|
48
|
-
return MIME_BY_EXT[ext] ?? "application/octet-stream";
|
|
49
|
-
}
|
|
50
|
-
function assetPath(name) {
|
|
51
|
-
if (!/^[\w.-]+$/.test(name)) throw new Error("invalid asset name");
|
|
52
|
-
return join(ASSETS_DIR, name);
|
|
53
|
-
}
|
|
54
49
|
async function cleanOldAssets(ttlMs) {
|
|
55
50
|
let removed = 0;
|
|
56
51
|
const cutoff = Date.now() - ttlMs;
|
|
@@ -74,7 +69,7 @@ async function cleanOldAssets(ttlMs) {
|
|
|
74
69
|
if (removed > 0) log(`assets cleanup: removed ${removed} expired file(s)`);
|
|
75
70
|
return removed;
|
|
76
71
|
}
|
|
77
|
-
var ASSETS_DIR, EXT_BY_FORMAT
|
|
72
|
+
var ASSETS_DIR, EXT_BY_FORMAT;
|
|
78
73
|
var init_assets = __esm({
|
|
79
74
|
"src/assets.ts"() {
|
|
80
75
|
"use strict";
|
|
@@ -85,13 +80,9 @@ var init_assets = __esm({
|
|
|
85
80
|
SVG: ".svg",
|
|
86
81
|
JPG: ".jpg",
|
|
87
82
|
JPEG: ".jpg",
|
|
88
|
-
WEBP: ".webp"
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
".png": "image/png",
|
|
92
|
-
".svg": "image/svg+xml",
|
|
93
|
-
".jpg": "image/jpeg",
|
|
94
|
-
".webp": "image/webp"
|
|
83
|
+
WEBP: ".webp",
|
|
84
|
+
PDF: ".pdf"
|
|
85
|
+
// export_image 尊重设计师导出标记,标记可能指定 PDF
|
|
95
86
|
};
|
|
96
87
|
}
|
|
97
88
|
});
|
|
@@ -891,15 +882,17 @@ AI \u5BA2\u6237\u7AEF \u2500\u2500MCP(stdio/HTTP)\u2500\u2500\u25B6 batter-pixso
|
|
|
891
882
|
| \u5DE5\u5177 | \u7528\u9014 |
|
|
892
883
|
| --- | --- |
|
|
893
884
|
| \`get_selected\` | \u8BFB\u753B\u5E03\u5F53\u524D\u9009\u4E2D\u56FE\u5C42\uFF08guid\u3001\u540D\u79F0\u3001\u7C7B\u578B\u3001\u5C3A\u5BF8\uFF09 |
|
|
894
|
-
| \`get_node_dsl\` | \u751F\u6210\u8282\u70B9\u7684\u5F00\u53D1\u5411\u7CBE\u7B80 DSL\uFF08\u7ED3\u6784 + \u6837\u5F0F + \u8D44\u6E90
|
|
895
|
-
| \`get_screenshot\` | \u5BFC\u51FA\u8282\u70B9\u622A\u56FE\uFF0C\u8FD4\u56DE\u56FE\u7247
|
|
885
|
+
| \`get_node_dsl\` | \u751F\u6210\u8282\u70B9\u7684\u5F00\u53D1\u5411\u7CBE\u7B80 DSL\uFF08\u7ED3\u6784 + \u6837\u5F0F + \u8D44\u6E90\u6587\u4EF6\u540D\uFF09\uFF0C\u8BBE\u8BA1\u8F6C\u4EE3\u7801\u7684\u6838\u5FC3\u5165\u53E3 |
|
|
886
|
+
| \`get_screenshot\` | \u5BFC\u51FA\u8282\u70B9\u622A\u56FE\uFF0C\u8FD4\u56DE\u56FE\u7247\u6587\u4EF6\u540D\uFF08\u672C\u673A\u8DEF\u5F84\u76F4\u8BFB\uFF09\uFF0C\u7528\u4E8E\u89C6\u89C9\u53C2\u7167/\u6821\u9A8C |
|
|
887
|
+
| \`export_image\` | \u6309 guid \u5BFC\u51FA\u56FE\u7247\u7D20\u6750\uFF08\u5207\u56FE\uFF09\uFF1A\u8282\u70B9\u5E26\u5BFC\u51FA\u6807\u8BB0\u65F6\u6309\u8BBE\u8BA1\u5E08\u8BBE\u7F6E\u9010\u4EFD\u5BFC\u51FA\uFF0C\u65E0\u6807\u8BB0\u6309\u53C2\u6570\u515C\u5E95 |
|
|
896
888
|
| \`list_sessions\` | \u5217\u51FA\u5168\u90E8\u63D2\u4EF6\u4F1A\u8BDD\uFF08\u591A\u6587\u4EF6\u573A\u666F\u8DEF\u7531\u7528\uFF09 |
|
|
897
889
|
|
|
898
890
|
## \u94FE\u63A5\u5373\u8F93\u5165\uFF08\u9AD8\u9891\u573A\u666F\uFF09
|
|
899
891
|
|
|
900
892
|
\u7528\u6237\u63D0\u4F9B Pixso \u94FE\u63A5\u65F6\uFF08\u5B98\u65B9 \`pixso.cn\` \u6216\u79C1\u6709\u5316\u90E8\u7F72\u5982 \`pixso.ky-tech.com.cn\`\uFF0C\u4EFB\u610F\u57DF\u540D\uFF09\uFF0C
|
|
901
|
-
\u94FE\u63A5\u672C\u8EAB\u5C31\u662F\u4EFB\u52A1\u8F93\u5165\uFF1A\u63D0\u53D6 \`item-id\` \u67E5\u8BE2\u53C2\u6570 \u2192 URL \u89E3\u7801 \u2192 \u5F97\u5230\u8282\u70B9 guid\uFF0C
|
|
893
|
+
\u94FE\u63A5\u672C\u8EAB\u5C31\u662F\u4EFB\u52A1\u8F93\u5165\uFF1A**\u5FC5\u987B**\u63D0\u53D6 \`item-id\` \u67E5\u8BE2\u53C2\u6570 \u2192 URL \u89E3\u7801 \u2192 \u5F97\u5230\u8282\u70B9 guid\uFF0C
|
|
902
894
|
\u76F4\u63A5\u8C03 \`get_node_dsl(guid)\` / \`get_screenshot(guid)\`\uFF0C\u65E0\u9700\u5148\u95EE\u7528\u6237\u9009\u4E2D\u4EC0\u4E48\u3002
|
|
895
|
+
\u4E25\u7981\u628A\u6574\u4E2A URL \u5F53 guid \u4F20\u3002
|
|
903
896
|
|
|
904
897
|
## \u591A\u6587\u4EF6\u573A\u666F
|
|
905
898
|
|
|
@@ -911,68 +904,98 @@ AI \u5BA2\u6237\u7AEF \u2500\u2500MCP(stdio/HTTP)\u2500\u2500\u25B6 batter-pixso
|
|
|
911
904
|
`;
|
|
912
905
|
DESIGN_TO_CODE = `# \u8BBE\u8BA1\u8F6C\u4EE3\u7801\u5DE5\u4F5C\u6D41
|
|
913
906
|
|
|
907
|
+
## \u3010\u786C\u6027\u89C4\u5219 \xB7 \u8FDD\u53CD\u5373\u8FD4\u5DE5\u3011
|
|
908
|
+
|
|
909
|
+
1. **\u8D44\u6E90\u662F\u672C\u673A\u6587\u4EF6\uFF0C\u6309\u9700\u53D6\u7528**\uFF1ADSL \u4E0E\u622A\u56FE\u7ED3\u679C\u4E2D\u7684 \`img\` \u5B57\u6BB5\u662F\u4EA7\u7269**\u6587\u4EF6\u540D**
|
|
910
|
+
\uFF08\u5982 \`"ab12cd34.svg"\`\uFF09\uFF0C\u5B8C\u6574\u8DEF\u5F84 = \u4EA7\u7269\u76EE\u5F55 + \u6587\u4EF6\u540D\uFF08\u76EE\u5F55\u89C1\u5DE5\u5177 description
|
|
911
|
+
\u4E2D\u7684\u5B9E\u9645\u8DEF\u5F84\uFF0C\u901A\u5E38\u4E3A \`%TEMP%\\batter-pixso-assets\`\uFF09\u3002\u4EA7\u7269\u4E0E\u670D\u52A1\u540C\u673A\uFF0C\u76F4\u63A5\u8BFB\u6587\u4EF6\u7CFB\u7EDF\uFF1A
|
|
912
|
+
- **\u622A\u56FE\u7B49\u89C6\u89C9\u53C2\u7167**\uFF1A\u7528 Read \u5DE5\u5177\u76F4\u63A5\u8BFB\u8BE5\u8DEF\u5F84\u67E5\u770B\uFF0C\u65E0\u9700\u590D\u5236\u3002
|
|
913
|
+
- **\u8981\u5199\u8FDB\u4EA4\u4ED8\u4EE3\u7801\u7684\u56FE\u6807/\u56FE\u7247**\uFF1A**\u5FC5\u987B**\u5148\u590D\u5236\u5230\u9879\u76EE\u8D44\u6E90\u76EE\u5F55
|
|
914
|
+
\uFF08PowerShell \`Copy-Item\` / \u7C7B Unix \`cp\`\uFF09\uFF0C\u518D\u4EE5\u672C\u5730\u76F8\u5BF9\u8DEF\u5F84\u5F15\u7528
|
|
915
|
+
\uFF08\`<img src>\`\u3001CSS \`background-image\` \u7B49\uFF09\u3002\u4E25\u7981\u76F4\u63A5\u5F15\u7528\u4EA7\u7269\u76EE\u5F55\u7684\u7EDD\u5BF9\u8DEF\u5F84
|
|
916
|
+
\uFF08\u4EA7\u7269\u9ED8\u8BA4 7 \u5929\u540E\u81EA\u52A8\u6E05\u626B\uFF0C\u5F15\u7528\u4F1A\u5931\u6548\uFF09\uFF1B\u4E25\u7981\u79FB\u52A8\u6216\u5220\u9664\u4EA7\u7269\u76EE\u5F55\u4E0B\u7684\u6587\u4EF6
|
|
917
|
+
\uFF08\u591A\u4F1A\u8BDD\u5171\u4EAB\uFF0C\u6E05\u626B\u7531\u670D\u52A1\u7EDF\u4E00\u8D1F\u8D23\uFF09\u3002
|
|
918
|
+
2. **Pixso \u94FE\u63A5\u5FC5\u987B\u63D0\u53D6 \`item-id\` \u5F53 guid**\uFF1A\u4EFB\u610F\u57DF\u540D\u90FD\u6709\u6548\u2014\u2014\u5B98\u65B9 \`pixso.cn\` \u6216\u79C1\u6709\u5316\u90E8\u7F72\u5982
|
|
919
|
+
\`https://pixso.ky-tech.com.cn/app/design/<\u6587\u4EF6>?item-id=1%3A2\`\uFF08\u4E5F\u53EF\u80FD\u662F \`/app/editor/\` \u8DEF\u5F84\uFF09\u3002
|
|
920
|
+
\u4ECE \`item-id\` \u67E5\u8BE2\u53C2\u6570\u63D0\u53D6 guid \u5E76 URL \u89E3\u7801\uFF08\`1%3A2\` \u2192 \`"1:2"\`\uFF09\u540E\u4F5C\u4E3A \`guid\` \u4F20\u5165\u3002
|
|
921
|
+
\u4E25\u7981\u628A\u6574\u4E2A URL \u5F53 guid \u4F20\uFF1B\u65E0\u8BBA\u57DF\u540D\u662F\u5426\u8BA4\u8BC6\uFF0C\u90FD\u6309\u6B64\u89C4\u5219\u5904\u7406\u3002
|
|
922
|
+
|
|
914
923
|
## \u63A8\u8350\u6B65\u9AA4
|
|
915
924
|
|
|
916
925
|
1. **\u786E\u8BA4\u76EE\u6807\u8282\u70B9**
|
|
917
|
-
- \u7528\u6237\
|
|
918
|
-
- \u7528\u6237\
|
|
919
|
-
|
|
920
|
-
\
|
|
921
|
-
\
|
|
926
|
+
- \u7528\u6237\u7ED9\u4E86 Pixso \u94FE\u63A5\uFF1A\u6309\u4E0A\u65B9\u786C\u6027\u89C4\u5219\u7B2C 2 \u6761\u63D0\u53D6 guid\uFF0C\u76F4\u63A5\u7EE7\u7EED\u3002
|
|
927
|
+
- \u7528\u6237\u660E\u786E\u8BF4\u4E86"\u8FD9\u4E2A/\u6211\u9009\u4E2D\u7684"\uFF1A\u8C03 \`get_selected\` \u62FF guid\uFF0C\u76F4\u63A5\u7EE7\u7EED\u3002
|
|
928
|
+
- \u5176\u4F59\u4F9D\u8D56\u5F53\u524D\u9009\u533A\u7684\u573A\u666F\uFF1A**\u4E25\u7981\u9690\u5F0F\u4F7F\u7528\u9009\u533A guid**\u2014\u2014\u8C03 \`get_selected\` \u540E
|
|
929
|
+
\u5FC5\u987B\u5148\u628A\u9009\u4E2D\u56FE\u5C42\u540D\u79F0\u62A5\u7ED9\u7528\u6237\u786E\u8BA4\uFF08"\u5F53\u524D\u9009\u4E2D\u7684\u662F\u300CXX\u300D\uFF0C\u786E\u8BA4\u5904\u7406\u5B83\u5417\uFF1F"\uFF09\uFF0C\u786E\u8BA4\u540E\u518D\u7EE7\u7EED\u3002
|
|
930
|
+
\`get_node_dsl\` / \`get_screenshot\` \u7684 guid \u7F3A\u7701\u56DE\u9000\u540C\u6837\u9002\u7528\u672C\u89C4\u5219\u3002
|
|
922
931
|
2. **\u53D6\u7ED3\u6784**\uFF1A\`get_node_dsl(guid)\` \u62FF\u7CBE\u7B80 DSL\u3002
|
|
923
|
-
3. **\u53D6\u89C6\u89C9\u53C2\u7167**\uFF1A\`get_screenshot(guid)\` \u62FF\u622A\u56FE
|
|
932
|
+
3. **\u53D6\u89C6\u89C9\u53C2\u7167**\uFF1A\`get_screenshot(guid)\` \u62FF\u622A\u56FE\u6587\u4EF6\u540D\uFF0C\u6309\u786C\u6027\u89C4\u5219\u7B2C 1 \u6761\u62FC\u8DEF\u5F84\u540E\u7528 Read \u76F4\u8BFB\uFF0C\u4E0E DSL \u5BF9\u7167\u7406\u89E3\u89C6\u89C9\u5C42\u7EA7\u3002
|
|
924
933
|
4. **\u751F\u6210\u4EE3\u7801**\uFF1A\u6309\u4E0B\u6587 DSL \u8BED\u4E49\u6620\u5C04\u5230\u76EE\u6807\u6846\u67B6\u3002
|
|
925
|
-
5. **\u6821\u9A8C**\uFF1A\u751F\u6210\u540E\
|
|
934
|
+
5. **\u6821\u9A8C**\uFF1A\u751F\u6210\u540E\u518D\u53D6\u4E00\u6B21\u622A\u56FE\u5BF9\u6BD4\uFF0C\u6709\u504F\u5DEE\u5C31\u4FEE\u6B63\u540E\u518D\u6BD4\u4E00\u8F6E\u3002
|
|
926
935
|
|
|
927
|
-
## DSL \u5B57\u6BB5\u8BED\u4E49
|
|
936
|
+
## DSL \u5B57\u6BB5\u8BED\u4E49\uFF08\u7D27\u51D1\u683C\u5F0F\uFF09
|
|
937
|
+
|
|
938
|
+
DSL \u662F\u5355\u884C\u7D27\u51D1 JSON\uFF1A\u77ED key\u3001\u4F4D\u7F6E\u6570\u7EC4\u3001\u9ED8\u8BA4\u503C\u7701\u7565\u3002\u56FE\u4F8B\uFF1A
|
|
928
939
|
|
|
929
940
|
\`\`\`jsonc
|
|
930
941
|
{
|
|
931
|
-
"id": "297:133032",
|
|
932
|
-
"name": "\u65B0\u5BA2",
|
|
933
|
-
"type": "FRAME",
|
|
934
|
-
"rect":
|
|
935
|
-
"
|
|
936
|
-
|
|
937
|
-
"
|
|
938
|
-
"
|
|
939
|
-
"
|
|
940
|
-
"
|
|
942
|
+
"id": "297:133032", // \u8282\u70B9 guid\uFF0C\u53EF\u56DE\u4F20\u4E3A guid \u53C2\u6570\u5BF9\u8BE5\u8282\u70B9\u4E0B\u94BB\u8C03\u7528
|
|
943
|
+
"name": "\u65B0\u5BA2", // \u56FE\u5C42\u540D\uFF1B\u81EA\u52A8\u547D\u540D\uFF08"Frame 3123" \u7C7B\uFF09\u5DF2\u7701\u7565
|
|
944
|
+
"type": "FRAME", // \u8282\u70B9\u7C7B\u578B\uFF1BICON/IMAGE \u4E3A\u584C\u7F29\u53F6\u5B50
|
|
945
|
+
"rect": [0, 0, 375, 200], // [x,y,w,h] \u7EDD\u5BF9\u5B9A\u4F4D\uFF1A\u6839\u8282\u70B9\u3001\u7EDD\u5BF9\u5B9A\u4F4D\u5BB9\u5668\u7684\u5B50\u8282\u70B9
|
|
946
|
+
"size": [120, 40], // [w,h]\uFF1Aauto-layout \u5B50\u8282\u70B9\uFF08x/y \u7531\u7236\u7EA7 layout \u63A8\u5BFC\uFF0C\u7701\u7565\uFF09
|
|
947
|
+
"layout": { // auto-layout \u2192 flex \u76F4\u8BD1\uFF08\u4EC5\u5BB9\u5668\u6709\uFF09
|
|
948
|
+
"dir": "row", // row | column
|
|
949
|
+
"gap": 12, // \u4E3A 0 \u65F6\u7701\u7565
|
|
950
|
+
"pad": [16, 16, 16, 16], // [\u4E0A,\u53F3,\u4E0B,\u5DE6]\uFF0C\u5168 0 \u65F6\u7701\u7565
|
|
951
|
+
"align": ["start", "center"], // [\u4E3B\u8F74,\u4EA4\u53C9\u8F74]\uFF1Astart|center|end|space-between|baseline
|
|
952
|
+
"sizing": ["hug", "fixed"] // [\u4E3B\u8F74,\u4EA4\u53C9\u8F74]\uFF1Ahug|fixed|fill
|
|
941
953
|
},
|
|
942
|
-
"text": {
|
|
943
|
-
"content": "...", "
|
|
944
|
-
"
|
|
945
|
-
"
|
|
946
|
-
"
|
|
947
|
-
{ "
|
|
954
|
+
"text": { // \u4EC5\u6587\u672C\u8282\u70B9\uFF1B\u9ED8\u8BA4\u503C\u7701\u7565\uFF1Aalign=left\u3001lh=normal\u3001weight=Regular
|
|
955
|
+
"content": "...", "size": 14, "font": "PingFang SC",
|
|
956
|
+
"weight": "Medium", "lh": "22px", "align": "center",
|
|
957
|
+
"deco": "underline", "ls": "0.5px", "link": "https://...", // \u6309\u9700
|
|
958
|
+
"segs": [ // \u4EC5\u6DF7\u6392\u6587\u672C\uFF1Abase \u4E3A\u6700\u957F\u6BB5\u6837\u5F0F\uFF0C\u6BCF\u6BB5\u53EA\u5E26\u5DEE\u5F02\u5B57\u6BB5\uFF1B
|
|
959
|
+
{ "text": "\u7406\u8D54\u4E2D\u5FC3", "weight": "Bold", "color": "p1" } // \u6570\u7EC4\u987A\u5E8F\u5373\u5B57\u7B26\u504F\u79FB\uFF08start/end \u7701\u7565\uFF09
|
|
948
960
|
]
|
|
949
961
|
},
|
|
950
|
-
"fills": ["
|
|
951
|
-
"stroke": "#e5e5e5",
|
|
952
|
-
"radius": 8,
|
|
962
|
+
"fills": ["p0", "linear-gradient(90deg, #fff 0%, #000 100%)"], // CSS \u989C\u8272/\u6E10\u53D8
|
|
963
|
+
"stroke": "1px solid #e5e5e5", // \u989C\u8272\u90E8\u5206\u4E5F\u53EF\u80FD\u662F "p0" \u8C03\u8272\u677F\u5F15\u7528
|
|
964
|
+
"radius": 8, // \u6216 [\u4E0A\u5DE6, \u4E0A\u53F3, \u4E0B\u53F3, \u4E0B\u5DE6]
|
|
953
965
|
"shadow": "0px 2px 8px rgba(0,0,0,0.1), inset 0px 1px 0px #fff", // CSS box-shadow\uFF0C\u591A\u9634\u5F71\u9017\u53F7\u62FC\u63A5
|
|
954
|
-
"blur": "4px",
|
|
955
|
-
"
|
|
966
|
+
"blur": "4px", // \u56FE\u5C42\u6A21\u7CCA \u2192 CSS filter: blur()
|
|
967
|
+
"bgBlur": "8px", // \u80CC\u666F\u6A21\u7CCA \u2192 CSS backdrop-filter
|
|
956
968
|
"constraints": { "h": "right", "v": "bottom" }, // \u7EDD\u5BF9\u5B9A\u4F4D\u5BB9\u5668\u5185\u7684\u7EA6\u675F\uFF08h: left|center|right|stretch|scale\uFF09\uFF0C\u9ED8\u8BA4 left/top \u4E0D\u8F93\u51FA
|
|
957
|
-
"opacity": 0.9,
|
|
958
|
-
"
|
|
959
|
-
"
|
|
969
|
+
"opacity": 0.9, // \u4E3A 1 \u65F6\u7701\u7565
|
|
970
|
+
"img": "ab12cd34.svg", // \u53F6\u5B50\u8D44\u6E90\u6587\u4EF6\u540D\uFF08\u53D6\u7528\u89C4\u5219\u89C1\u786C\u6027\u89C4\u5219\u7B2C 1 \u6761\uFF09
|
|
971
|
+
"palette": ["#1a73e8", "#f5222d"], // \u8C03\u8272\u677F\uFF08\u4EC5\u6839\u8282\u70B9\uFF09\uFF0C"p0"/"p1" \u4E3A\u4E0B\u6807\u5F15\u7528
|
|
972
|
+
"depth": 6, // \u6574\u68F5\u6811\u5B9E\u9645\u6700\u5927\u6DF1\u5EA6\uFF08\u4EC5\u6839\u8282\u70B9\uFF0C\u603B\u662F\u8F93\u51FA\uFF0C\u4E0E\u622A\u65AD\u65E0\u5173\uFF09
|
|
973
|
+
"more": 3, // \u4EC5\u56E0 maxDepth \u622A\u65AD\u65F6\u51FA\u73B0\uFF1A\u8BE5\u8282\u70B9\u4E0B\u8FD8\u6709 3 \u7EA7\u672A\u5C55\u5F00\uFF0C\u62FF id \u56DE\u4F20 guid \u7EE7\u7EED\u4E0B\u94BB
|
|
974
|
+
"kids": [] // \u5B50\u8282\u70B9\u9012\u5F52
|
|
960
975
|
}
|
|
961
976
|
\`\`\`
|
|
962
977
|
|
|
978
|
+
**\u6DF1\u5EA6\u63A7\u5236**\uFF1A\`get_node_dsl\` \u7684 \`maxDepth\` \u53C2\u6570\u9650\u5236\u4E0B\u63A2\u5C42\u7EA7\uFF08\u6839\u4E3A\u7B2C 0 \u5C42\uFF0C\u7F3A\u7701\u4E0D\u9650\uFF09\u3002
|
|
979
|
+
\u5927\u6811\u5206\u6BB5\u7B56\u7565\uFF1A\u5148 \`maxDepth: 0\` \u62FF\u6839\u8282\u70B9\uFF08\u542B \`depth\` \u603B\u6DF1\u5EA6\uFF09\u9884\u5224\u89C4\u6A21\uFF0C\u518D\u6309\u9700\u5BF9\u5E26 \`more\` \u6807\u8BB0\u7684\u5B50\u6811\u7528\u5176 \`id\` \u5355\u72EC\u4E0B\u94BB\u3002
|
|
980
|
+
|
|
981
|
+
**\u8C03\u8272\u677F\u89C4\u5219**\uFF1A\u540C\u4E00\u989C\u8272\uFF08\u5355\u8272\uFF0C\u542B rgba\uFF09\u51FA\u73B0 \u22652 \u6B21\u65F6\u63D0\u53D6\u5230\u6839\u8282\u70B9 \`palette\` \u6570\u7EC4\uFF0C
|
|
982
|
+
\`fills\`\u3001\`text.color\`\u3001\`segs[].color\`\u3001\`stroke\` \u4E2D\u4EE5 \`"p0"\`\u3001\`"p1"\` \u5F15\u7528\uFF08\u4E0B\u6807\u5373 palette \u4E0B\u6807\uFF09\u3002
|
|
983
|
+
\`shadow\`\u3001\`gradient\` \u7B49\u590D\u5408 CSS \u5B57\u7B26\u4E32\u5185\u90E8\u7684\u989C\u8272\u4FDD\u6301\u5B57\u9762\u503C\uFF0C\u4E0D\u67E5\u8868\u3002
|
|
984
|
+
|
|
963
985
|
## \u53F6\u5B50\u8282\u70B9\u4E0E\u56FE\u7247\u8D44\u6E90
|
|
964
986
|
|
|
965
|
-
- \`type: "ICON"\`\uFF1A\u7EAF\u77E2\u91CF\u5C0F\u8282\u70B9\uFF08icon\uFF09\uFF0C\`
|
|
966
|
-
- \`type: "IMAGE"\`\uFF1A\u56FE\u7247\u586B\u5145\u8282\u70B9\uFF0C\`
|
|
967
|
-
-
|
|
968
|
-
\uFF08\`<img src>\`\u3001CSS \`background-image\` \u7B49\uFF09\u3002\u5FC5\u987B\u5148\u7528
|
|
969
|
-
\`curl -L -o <\u672C\u5730\u8DEF\u5F84> <URL>\`\uFF08Windows \u4E5F\u53EF\u7528 \`Invoke-WebRequest\`\uFF09\u4E0B\u8F7D\u5230\u9879\u76EE\u8D44\u6E90\u76EE\u5F55\uFF0C
|
|
970
|
-
\u518D\u4EE5\u672C\u5730\u76F8\u5BF9\u8DEF\u5F84\u5F15\u7528\u3002\u76F4\u63A5\u5F15\u7528 URL \u4EC5\u9650\u4E34\u65F6\u9884\u89C8\u573A\u666F\u3002
|
|
987
|
+
- \`type: "ICON"\`\uFF1A\u7EAF\u77E2\u91CF\u5C0F\u8282\u70B9\uFF08icon\uFF09\uFF0C\`img\` \u4E3A **SVG** \u6587\u4EF6\u540D\u3002
|
|
988
|
+
- \`type: "IMAGE"\`\uFF1A\u56FE\u7247\u586B\u5145\u8282\u70B9\uFF0C\`img\` \u4E3A **PNG** \u6587\u4EF6\u540D\u3002
|
|
989
|
+
- \u6587\u4EF6\u540D\u62FC\u8DEF\u5F84\u4E0E\u53D6\u7528\u8981\u6C42\u89C1\u5F00\u5934\u786C\u6027\u89C4\u5219\u7B2C 1 \u6761\u3002
|
|
971
990
|
- \u5BB9\u5668\u81EA\u8EAB\u6709\u5BFC\u51FA\u8BBE\u7F6E\u6807\u8BB0\u65F6\u4E5F\u4F1A\u584C\u7F29\u4E3A\u53F6\u5B50\uFF08\u5C0A\u91CD\u8BBE\u8BA1\u5E08\u7684\u5BFC\u51FA\u610F\u56FE\uFF09\u3002
|
|
991
|
+
- **\u5DF2\u5E26 \`img\` \u7684\u8282\u70B9\u5728\u53D6 DSL \u65F6\u5DF2\u5B8C\u6210\u5BFC\u51FA**\uFF1A\u76F4\u63A5\u4F7F\u7528\u5176\u6587\u4EF6\u540D\uFF0C\u4E25\u7981\u5BF9\u5B83\u4EEC\u518D\u8C03 \`export_image\`\uFF08\u91CD\u590D\u5BFC\u51FA\u540C\u4E00\u4EFD\u5185\u5BB9\uFF09\u3002
|
|
992
|
+
\`export_image\` \u4EC5\u7528\u4E8E DSL \u4E2D\u672A\u584C\u7F29\u7684\u8282\u70B9\uFF08\u4E3B\u52A8\u5207\u56FE\uFF09\u3002
|
|
972
993
|
|
|
973
994
|
## \u6CE8\u610F
|
|
974
995
|
|
|
975
996
|
- DSL \u662F**\u6709\u635F\u7CBE\u7B80**\uFF1A\u7701\u7565\u4E86\u5E03\u5C14\u8FD0\u7B97\u8DEF\u5F84\u3001\u8499\u7248\u7B49\u7EAF\u8BBE\u8BA1\u7EC6\u8282\uFF0C\u89C6\u89C9\u590D\u6742\u8282\u70B9\u4EE5\u622A\u56FE\u4E3A\u51C6\u3002
|
|
997
|
+
- \u5BFC\u51FA\u7C7B\u5DE5\u5177\uFF08\`get_node_dsl\`/\`get_screenshot\`/\`export_image\`\uFF09\u5E26 15 \u5206\u949F\u7ED3\u679C\u7F13\u5B58\uFF08\u63D2\u4EF6\u4FA7 TTL\uFF09\uFF1B
|
|
998
|
+
\u8BBE\u8BA1\u7A3F\u521A\u6539\u8FC7\u4F46\u7ED3\u679C\u5BF9\u4E0D\u4E0A\u65F6\uFF0C\u52A0 \`cache: "refresh"\` \u5F3A\u5236\u5237\u65B0\u3002
|
|
976
999
|
- \u591A\u6587\u4EF6\u573A\u666F\u6240\u6709\u5DE5\u5177\u90FD\u652F\u6301 \`target\` \u53C2\u6570\uFF08sessionId/fileKey\uFF09\uFF0C\u89C1 \`batter://guides/intro\`\u3002
|
|
977
1000
|
`;
|
|
978
1001
|
GUIDES = [
|
|
@@ -985,7 +1008,7 @@ AI \u5BA2\u6237\u7AEF \u2500\u2500MCP(stdio/HTTP)\u2500\u2500\u25B6 batter-pixso
|
|
|
985
1008
|
{
|
|
986
1009
|
name: "design-to-code",
|
|
987
1010
|
uri: "batter://guides/design-to-code",
|
|
988
|
-
description: "\u8BBE\u8BA1\u8F6C\u4EE3\u7801\u5DE5\u4F5C\u6D41\uFF1A\
|
|
1011
|
+
description: "\u8BBE\u8BA1\u8F6C\u4EE3\u7801\uFF08\u6837\u5F0F\u8FD8\u539F/\u8BBE\u8BA1\u8FD8\u539F\uFF09\u5DE5\u4F5C\u6D41\uFF1A\u786C\u6027\u89C4\u5219\uFF08\u8D44\u6E90\u6309\u672C\u673A\u8DEF\u5F84\u53D6\u7528\u3001\u94FE\u63A5\u63D0\u53D6 item-id\uFF09\u3001DSL \u5B57\u6BB5\u8BED\u4E49\u3001\u89C6\u89C9\u6821\u9A8C\u3002",
|
|
989
1012
|
text: DESIGN_TO_CODE
|
|
990
1013
|
}
|
|
991
1014
|
];
|
|
@@ -993,13 +1016,14 @@ AI \u5BA2\u6237\u7AEF \u2500\u2500MCP(stdio/HTTP)\u2500\u2500\u25B6 batter-pixso
|
|
|
993
1016
|
});
|
|
994
1017
|
|
|
995
1018
|
// src/prompts.ts
|
|
996
|
-
var DESIGN_TO_CODE2, PROMPTS;
|
|
1019
|
+
var ASSET_HARD_RULE, DESIGN_TO_CODE2, PROMPTS;
|
|
997
1020
|
var init_prompts = __esm({
|
|
998
1021
|
"src/prompts.ts"() {
|
|
999
1022
|
"use strict";
|
|
1023
|
+
ASSET_HARD_RULE = `**\u4E25\u7981\u628A\u4EA7\u7269\u76EE\u5F55\u8DEF\u5F84\u5199\u8FDB\u4EA4\u4ED8\u4EE3\u7801**\uFF1ADSL \u8FD4\u56DE\u7684 \`img\` \u662F\u4EA7\u7269\u6587\u4EF6\u540D\uFF08\u5B8C\u6574\u8DEF\u5F84 = \u4EA7\u7269\u76EE\u5F55 + \u6587\u4EF6\u540D\uFF0C\u76EE\u5F55\u89C1\u5DE5\u5177 description\uFF09\u3002\u622A\u56FE\u7B49\u89C6\u89C9\u53C2\u7167\u7528 Read \u5DE5\u5177\u76F4\u8BFB\u5B8C\u6574\u8DEF\u5F84\u5373\u53EF\uFF1B\u8981\u5199\u8FDB\u4EA4\u4ED8\u4EE3\u7801\u7684\u56FE\u6807/\u56FE\u7247\u5FC5\u987B\u5148\u590D\u5236\u5230\u9879\u76EE\u8D44\u6E90\u76EE\u5F55\uFF08PowerShell \`Copy-Item\` / \u7C7B Unix \`cp\`\uFF09\uFF0C\u518D\u7528\u672C\u5730\u76F8\u5BF9\u8DEF\u5F84\u5F15\u7528\uFF08\`<img src>\`\u3001\`background-image\` \u7B49\uFF09\u3002\u4EA7\u7269\u9ED8\u8BA4 7 \u5929\u540E\u81EA\u52A8\u6E05\u626B\uFF1B\u4E25\u7981\u79FB\u52A8\u6216\u5220\u9664\u4EA7\u7269\u76EE\u5F55\u4E0B\u7684\u6587\u4EF6\u3002`;
|
|
1000
1024
|
DESIGN_TO_CODE2 = {
|
|
1001
1025
|
name: "design-to-code",
|
|
1002
|
-
description: "\u4ECE Pixso \u94FE\u63A5\u6216\u5F53\u524D\u9009\u533A\
|
|
1026
|
+
description: "\u8BBE\u8BA1\u7A3F\u8F6C\u524D\u7AEF\u4EE3\u7801\uFF08\u6837\u5F0F\u8FD8\u539F/\u8BBE\u8BA1\u8FD8\u539F/UI \u8FD8\u539F\uFF09\uFF1A\u4ECE Pixso \u94FE\u63A5\u6216\u5F53\u524D\u9009\u533A\u53D6 DSL + \u622A\u56FE \u2192 \u751F\u6210 \u2192 \u622A\u56FE\u6821\u9A8C\u3002",
|
|
1003
1027
|
arguments: [
|
|
1004
1028
|
{
|
|
1005
1029
|
name: "url",
|
|
@@ -1008,21 +1032,28 @@ var init_prompts = __esm({
|
|
|
1008
1032
|
}
|
|
1009
1033
|
],
|
|
1010
1034
|
render: (args) => {
|
|
1011
|
-
const targetLine = args.url?.trim() ? `\u76EE\u6807\u8282\u70B9\u6765\u81EA\u94FE\u63A5\uFF1A${args.url.trim()}\u3002\
|
|
1035
|
+
const targetLine = args.url?.trim() ? `\u76EE\u6807\u8282\u70B9\u6765\u81EA\u94FE\u63A5\uFF1A${args.url.trim()}\u3002\u5FC5\u987B\u4ECE\u67E5\u8BE2\u53C2\u6570 \`item-id\` \u63D0\u53D6\u8282\u70B9 guid \u5E76 URL \u89E3\u7801\uFF08\`1%3A2\` \u2192 \`"1:2"\`\uFF09\u540E\u4F5C\u4E3A guid \u4F20\u5165\uFF1B\u4E25\u7981\u628A\u6574\u4E2A URL \u5F53 guid \u4F20\u3002\u65E0\u8BBA\u57DF\u540D\u662F\u5426\u8BA4\u8BC6\uFF0C\u90FD\u6309\u6B64\u89C4\u5219\u5904\u7406\u3002` : `\u76EE\u6807\u8282\u70B9\u4E3A\u5F53\u524D\u9009\u533A\uFF1A\u8C03 \`get_selected\` \u62FF\u9009\u4E2D\u56FE\u5C42\u3002\u7981\u6B62\u9690\u5F0F\u4F7F\u7528\u5176 guid\u2014\u2014\u9664\u975E\u7528\u6237\u660E\u786E\u8BF4\u4E86"\u6211\u9009\u4E2D\u7684/\u5F53\u524D\u9009\u4E2D\u7684"\uFF0C\u5148\u628A\u9009\u4E2D\u56FE\u5C42\u540D\u79F0\u62A5\u7ED9\u7528\u6237\u786E\u8BA4\uFF08"\u5F53\u524D\u9009\u4E2D\u7684\u662F\u300CXX\u300D\uFF0C\u786E\u8BA4\u5904\u7406\u5B83\u5417\uFF1F"\uFF09\uFF0C\u786E\u8BA4\u540E\u518D\u7EE7\u7EED\u3002`;
|
|
1012
1036
|
return [
|
|
1013
1037
|
{
|
|
1014
1038
|
role: "user",
|
|
1015
1039
|
content: {
|
|
1016
1040
|
type: "text",
|
|
1017
1041
|
text: [
|
|
1018
|
-
`\u628A Pixso \u8BBE\u8BA1\u7A3F\u8FD8\u539F\u4E3A\u524D\u7AEF\u4EE3\u7801\
|
|
1042
|
+
`\u628A Pixso \u8BBE\u8BA1\u7A3F\u8FD8\u539F\u4E3A\u524D\u7AEF\u4EE3\u7801\u3002\u52A8\u624B\u524D\u5148\u8BB0\u4F4F\u4E0B\u9762\u7684\u786C\u6027\u89C4\u5219\uFF08\u8FDD\u53CD\u5373\u8FD4\u5DE5\uFF09\uFF1A`,
|
|
1043
|
+
``,
|
|
1044
|
+
`## \u3010\u786C\u6027\u89C4\u5219\u3011`,
|
|
1045
|
+
``,
|
|
1046
|
+
`1. ${ASSET_HARD_RULE}`,
|
|
1047
|
+
`2. **\u5199\u4EE3\u7801\u524D\u5FC5\u987B\u5148\u8BFB**\u8D44\u6E90 \`batter://guides/design-to-code\`\uFF0C\u4E86\u89E3 DSL \u5B57\u6BB5\u8BED\u4E49\u3001\u8D44\u6E90\u5904\u7406\u7EC6\u8282\u4E0E\u591A\u6587\u4EF6\u8DEF\u7531\uFF08\`target\` \u53C2\u6570\uFF09\uFF1B\u603B\u89C8\u89C1 \`batter://guides/intro\`\u3002`,
|
|
1019
1048
|
``,
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
`
|
|
1023
|
-
`
|
|
1024
|
-
`
|
|
1025
|
-
`
|
|
1049
|
+
`## \u6267\u884C\u6D41\u7A0B`,
|
|
1050
|
+
``,
|
|
1051
|
+
`1. \u786E\u8BA4\u76EE\u6807\u8282\u70B9\uFF1A${targetLine}`,
|
|
1052
|
+
`2. \u53D6\u6570\u636E\uFF1A\u8C03 \`get_node_dsl(guid)\` \u62FF\u7ED3\u6784\u4E0E\u6837\u5F0F DSL\uFF08\u7ED3\u6784\u5F88\u5927\u65F6\u5148\u7528 \`maxDepth: 0\` \u770B\u6839\u8282\u70B9 \`depth\` \u9884\u5224\u89C4\u6A21\uFF0C\u518D\u5206\u6BB5\u4E0B\u63A2\u2014\u2014\u622A\u65AD\u5904\u8282\u70B9\u5E26 \`more\` \u6807\u8BB0\uFF0C\u62FF\u5176 \`id\` \u56DE\u4F20 \`guid\` \u7EE7\u7EED\u4E0B\u94BB\uFF09\uFF1B\u8C03 \`get_screenshot(guid)\` \u62FF\u89C6\u89C9\u53C2\u7167\u622A\u56FE\uFF08\u8FD4\u56DE\u6587\u4EF6\u540D\uFF0CRead \u76F4\u8BFB\u672C\u5730\u8DEF\u5F84\uFF09\u3002DSL \u4E2D\u5DF2\u5E26 \`img\` \u7684\u8282\u70B9\uFF08ICON/IMAGE \u53F6\u5B50\uFF09\u5DF2\u5B8C\u6210\u5BFC\u51FA\uFF0C\u76F4\u63A5\u7528\u5176\u6587\u4EF6\u540D\uFF0C\u4E0D\u8981\u518D\u8C03 \`export_image\`\u3002`,
|
|
1053
|
+
`3. \u751F\u6210\u4EE3\u7801\uFF1Aauto-layout \u76F4\u8BD1 flex\uFF1B\u989C\u8272/\u5706\u89D2/\u9634\u5F71\u7528 DSL \u7684 CSS \u503C\uFF1B\u56FE\u7247\u4E00\u5F8B\u7528\u5DF2\u590D\u5236\u5230\u9879\u76EE\u7684\u672C\u5730\u8DEF\u5F84\u3002`,
|
|
1054
|
+
`4. \u81EA\u68C0\uFF1A\u518D\u6B21\u8C03 \`get_screenshot(guid)\`\uFF0C\u4E0E\u4EE3\u7801\u6E32\u67D3\u7ED3\u679C\u5BF9\u6BD4\uFF0C\u6709\u504F\u5DEE\u5C31\u4FEE\u6B63\u540E\u518D\u6BD4\u4E00\u8F6E\uFF08\u5BFC\u51FA\u7C7B\u5DE5\u5177\u5E26 15 \u5206\u949F\u7F13\u5B58\uFF1B\u7ED3\u679C\u7591\u4F3C\u8FC7\u671F\u65F6\u52A0 \`cache: "refresh"\` \u5F3A\u5236\u5237\u65B0\uFF09\u3002`,
|
|
1055
|
+
``,
|
|
1056
|
+
`**\u6700\u540E\u91CD\u7533**\uFF1A\u4EA4\u4ED8\u4EE3\u7801\u4E2D\u4E0D\u5141\u8BB8\u51FA\u73B0\u4EA7\u7269\u76EE\u5F55\u7684\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u5168\u90E8\u56FE\u7247\u5FC5\u987B\u662F\u5DF2\u590D\u5236\u5230\u9879\u76EE\u7684\u672C\u5730\u76F8\u5BF9\u8DEF\u5F84\u3002`
|
|
1026
1057
|
].join("\n")
|
|
1027
1058
|
}
|
|
1028
1059
|
}
|
|
@@ -1042,11 +1073,11 @@ var init_builtin = __esm({
|
|
|
1042
1073
|
BUILTIN_TOOLS = [
|
|
1043
1074
|
{
|
|
1044
1075
|
name: "list_sessions",
|
|
1045
|
-
description: "\u5217\u51FA\u5F53\u524D\u8FDE\u63A5\u5230\u672C\u670D\u52A1\u7684\u6240\u6709 Pixso \u63D2\u4EF6\u4F1A\u8BDD\uFF08sessionId\u3001\u6587\u4EF6\u3001\u9875\u9762\u3001\u5728\u7EBF\u72B6\u6001\uFF09\u3002\u6BCF\u4E2A\u8FD0\u884C\u63D2\u4EF6\u7684\u8BBE\u8BA1\u6587\u4EF6\u5BF9\u5E94\u4E00\u4E2A\u4F1A\u8BDD\u3002\u591A\u4E2A\u6587\u4EF6\u540C\u65F6\
|
|
1076
|
+
description: "\u3010\u7528\u9014\u3011\u5217\u51FA\u5F53\u524D\u8FDE\u63A5\u5230\u672C\u670D\u52A1\u7684\u6240\u6709 Pixso \u63D2\u4EF6\u4F1A\u8BDD\uFF08sessionId\u3001\u6587\u4EF6\u3001\u9875\u9762\u3001\u5728\u7EBF\u72B6\u6001\uFF09\u3002\u6BCF\u4E2A\u8FD0\u884C\u63D2\u4EF6\u7684\u8BBE\u8BA1\u6587\u4EF6\u5BF9\u5E94\u4E00\u4E2A\u4F1A\u8BDD\u3002\u3010\u547D\u4E2D\u4FE1\u53F7\u3011\u591A\u4E2A Pixso \u6587\u4EF6\u540C\u65F6\u8FD0\u884C\u63D2\u4EF6\u65F6\uFF0C\u5148\u7528\u672C\u5DE5\u5177\u786E\u8BA4\u76EE\u6807\u6587\u4EF6\uFF1B\u53EA\u6709\u4E00\u4E2A\u4F1A\u8BDD\u65F6\u65E0\u9700\u5173\u6CE8\u672C\u5DE5\u5177\u3002\u3010\u8FD4\u56DE\u3011\u4F1A\u8BDD\u5217\u8868 JSON\u3002\u628A sessionId \u6216 fileKey \u4F5C\u4E3A get_selected / get_node_dsl / get_screenshot / export_image \u7684 target \u53C2\u6570\u4F20\u5165\u5373\u8DEF\u7531\u5230\u5BF9\u5E94\u6587\u4EF6\uFF1B\u4E0D\u4F20 target \u65F6\u8DEF\u7531\u5230\u6700\u8FD1\u6D3B\u8DC3\u7684\u6587\u4EF6\u3002\u591A\u6587\u4EF6\u8DEF\u7531\u8BE6\u89C1\u8D44\u6E90 batter://guides/intro\u3002",
|
|
1046
1077
|
inputSchema: { type: "object", properties: {} },
|
|
1047
1078
|
handler: async () => {
|
|
1048
1079
|
const list = sessions.list();
|
|
1049
|
-
const text = list.length ? JSON.stringify(list
|
|
1080
|
+
const text = list.length ? JSON.stringify(list) : "\u5F53\u524D\u6CA1\u6709\u63D2\u4EF6\u8FDE\u63A5\uFF1A\u8BF7\u5728 Pixso \u5BA2\u6237\u7AEF\u4E2D\u8FD0\u884C Batter Pixso Bridge \u63D2\u4EF6\u3002";
|
|
1050
1081
|
return { content: [{ type: "text", text }] };
|
|
1051
1082
|
}
|
|
1052
1083
|
}
|
|
@@ -1189,7 +1220,7 @@ var init_commands = __esm({
|
|
|
1189
1220
|
|
|
1190
1221
|
// src/tools/plugin.ts
|
|
1191
1222
|
function jsonResult(data) {
|
|
1192
|
-
return { content: [{ type: "text", text: JSON.stringify(data
|
|
1223
|
+
return { content: [{ type: "text", text: JSON.stringify(data) }] };
|
|
1193
1224
|
}
|
|
1194
1225
|
function errorResult(err) {
|
|
1195
1226
|
return {
|
|
@@ -1207,48 +1238,83 @@ async function run(type, args, signal) {
|
|
|
1207
1238
|
return errorResult(err);
|
|
1208
1239
|
}
|
|
1209
1240
|
}
|
|
1210
|
-
var URL_RULE, TARGET_PROP, PLUGIN_TOOLS;
|
|
1241
|
+
var URL_RULE, URL_RULE_PTR, SELECT_RULE_PTR, ASSET_RULE, DSL_LEGEND, TARGET_PROP, CACHE_PROP, GUID_PROP, PLUGIN_TOOLS;
|
|
1211
1242
|
var init_plugin = __esm({
|
|
1212
1243
|
"src/tools/plugin.ts"() {
|
|
1213
1244
|
"use strict";
|
|
1245
|
+
init_assets();
|
|
1214
1246
|
init_commands();
|
|
1215
|
-
URL_RULE = '\
|
|
1247
|
+
URL_RULE = '\u2460 \u94FE\u63A5\u8F93\u5165\uFF1A\u5FC5\u987B\u4ECE item-id \u67E5\u8BE2\u53C2\u6570\u63D0\u53D6\u8282\u70B9 guid \u5E76 URL \u89E3\u7801\uFF081%3A2 \u2192 "1:2"\uFF09\uFF0C\u628A\u89E3\u7801\u503C\u4F5C\u4E3A guid \u4F20\u5165\uFF1B\u4E25\u7981\u628A\u6574\u4E2A URL \u5F53 guid \u4F20\u3002\u4EFB\u610F\u57DF\u540D\u90FD\u6709\u6548\uFF1A\u5B98\u65B9 pixso.cn \u6216\u79C1\u6709\u5316\u90E8\u7F72\uFF08\u5982 pixso.ky-tech.com.cn\uFF09\uFF0C\u683C\u5F0F\u5F62\u5982 https://<\u57DF\u540D>/app/design/<\u6587\u4EF6>?item-id=1%3A2\uFF08\u4E5F\u53EF\u80FD\u662F /app/editor/ \u8DEF\u5F84\uFF09\u3002';
|
|
1248
|
+
URL_RULE_PTR = "\u2460 \u94FE\u63A5\u8F93\u5165\uFF1A\u5FC5\u987B\u4ECE item-id \u63D0\u53D6 guid \u5E76 URL \u89E3\u7801\u540E\u4F20\u5165\uFF0C\u4E25\u7981\u4F20\u6574\u4E2A URL\uFF08\u89C4\u5219\u5168\u6587\u89C1 get_node_dsl\uFF09\u3002";
|
|
1249
|
+
SELECT_RULE_PTR = '\u2461 \u9009\u4E2D\u56DE\u9000\uFF1A\u672A\u4F20 guid \u65F6\u56DE\u9000\u5F53\u524D\u9009\u4E2D\u56FE\u5C42\uFF0C\u4F46\u4E25\u7981\u9690\u5F0F\u4F7F\u7528\u2014\u2014\u9664\u975E\u7528\u6237\u660E\u786E\u8BF4\u4E86"\u6211\u9009\u4E2D\u7684/\u5F53\u524D\u9009\u4E2D\u7684"\uFF0C\u5FC5\u987B\u5148\u8C03 get_selected \u628A\u9009\u4E2D\u56FE\u5C42\u540D\u79F0\u62A5\u7ED9\u7528\u6237\u786E\u8BA4\uFF08\u89C4\u5219\u5168\u6587\u89C1 get_selected\uFF09\u3002';
|
|
1250
|
+
ASSET_RULE = `\u2462 \u8D44\u6E90\uFF1Aimg \u662F\u4EA7\u7269\u6587\u4EF6\u540D\uFF0C\u5B8C\u6574\u672C\u5730\u8DEF\u5F84 = ${assetDir()}\\<\u6587\u4EF6\u540D>\uFF08\u672C\u673A\u6587\u4EF6\uFF0C\u76F4\u63A5\u8BFB\u6587\u4EF6\u7CFB\u7EDF\uFF09\u3002\u622A\u56FE\u7B49\u89C6\u89C9\u53C2\u7167\u7528 Read \u5DE5\u5177\u76F4\u8BFB\u8BE5\u8DEF\u5F84\uFF0C\u65E0\u9700\u590D\u5236\uFF1B\u8981\u5199\u8FDB\u4EA4\u4ED8\u4EE3\u7801\u7684\u56FE\u6807/\u56FE\u7247\u5FC5\u987B\u5148\u590D\u5236\u5230\u9879\u76EE\u8D44\u6E90\u76EE\u5F55\uFF08PowerShell: Copy-Item "<\u5B8C\u6574\u8DEF\u5F84>" "<\u9879\u76EE\u76EE\u5F55>"\uFF1B\u7C7B Unix: cp "<\u5B8C\u6574\u8DEF\u5F84>" "<\u9879\u76EE\u76EE\u5F55>"\uFF09\uFF0C\u518D\u4EE5\u672C\u5730\u76F8\u5BF9\u8DEF\u5F84\u5F15\u7528\u2014\u2014\u4E25\u7981\u76F4\u63A5\u5F15\u7528\u4EA7\u7269\u76EE\u5F55\u7684\u7EDD\u5BF9\u8DEF\u5F84\uFF08\u4EA7\u7269\u9ED8\u8BA4 7 \u5929\u540E\u81EA\u52A8\u6E05\u626B\uFF0C\u5F15\u7528\u4F1A\u5931\u6548\uFF09\uFF0C\u4E25\u7981\u79FB\u52A8\u6216\u5220\u9664\u4EA7\u7269\u76EE\u5F55\u4E0B\u7684\u6587\u4EF6\uFF08\u591A\u4F1A\u8BDD\u5171\u4EAB\uFF0C\u6E05\u626B\u7531\u670D\u52A1\u7EDF\u4E00\u8D1F\u8D23\uFF09\u3002`;
|
|
1251
|
+
DSL_LEGEND = '\u5B57\u6BB5\u56FE\u4F8B\uFF1Aid=\u8282\u70B9 guid\uFF08\u53EF\u56DE\u4F20\u4E3A guid \u53C2\u6570\u5BF9\u5B50\u8282\u70B9\u4E0B\u94BB\u8C03\u7528\uFF09\uFF1Bname=\u56FE\u5C42\u540D\uFF08\u81EA\u52A8\u547D\u540D\u5982 "Frame 3123" \u5DF2\u7701\u7565\uFF09\uFF1Btype=\u8282\u70B9\u7C7B\u578B\uFF0CICON/IMAGE \u4E3A\u584C\u7F29\u53F6\u5B50\uFF1Brect=[x,y,w,h] \u7EDD\u5BF9\u5B9A\u4F4D\uFF08\u6839\u8282\u70B9\u4E0E\u7EDD\u5BF9\u5B9A\u4F4D\u5BB9\u5668\u7684\u5B50\u8282\u70B9\uFF09\uFF1Bsize=[w,h]\uFF08auto-layout \u5B50\u8282\u70B9\uFF0Cx/y \u7531\u7236\u7EA7 layout \u63A8\u5BFC\u6545\u7701\u7565\uFF09\uFF1Blayout={dir:row|column, gap, pad:[\u4E0A,\u53F3,\u4E0B,\u5DE6], align:[\u4E3B\u8F74,\u4EA4\u53C9\u8F74](start|center|end|space-between|baseline), sizing:[\u4E3B\u8F74,\u4EA4\u53C9\u8F74](hug|fixed|fill)}\uFF1Bconstraints={h,v} \u7EDD\u5BF9\u5B9A\u4F4D\u5B50\u8282\u70B9\u7EA6\u675F\uFF08\u9ED8\u8BA4 left/top \u7701\u7565\uFF09\uFF1Btext={content, size=\u5B57\u53F7, font=\u5B57\u65CF, weight=\u5B57\u91CD, lh=\u884C\u9AD8, align=\u6C34\u5E73\u5BF9\u9F50, color, deco=underline|line-through, ls=\u5B57\u8DDD px, link, segs=\u6DF7\u6392\u5206\u6BB5}\uFF08segs \u6BCF\u6BB5\u53EA\u5E26\u4E0E base \u4E0D\u540C\u7684\u5B57\u6BB5\uFF0C\u6570\u7EC4\u987A\u5E8F\u5373\u5B57\u7B26\u504F\u79FB\uFF09\uFF1Bimg=\u8D44\u6E90\u6587\u4EF6\u540D\uFF1Bkids=\u5B50\u8282\u70B9\u6570\u7EC4\uFF1Bpalette=\u8C03\u8272\u677F\uFF08\u4EC5\u6839\u8282\u70B9\uFF09\u3002depth=\u6574\u68F5\u6811\u5B9E\u9645\u6700\u5927\u6DF1\u5EA6\uFF08\u4EC5\u6839\u8282\u70B9\uFF0C\u603B\u662F\u8F93\u51FA\uFF0C\u4E0E\u622A\u65AD\u65E0\u5173\uFF09\uFF1Bmore=\u8BE5\u8282\u70B9\u4E0B\u672A\u5C55\u5F00\u7684\u5269\u4F59\u5C42\u7EA7\u6570\uFF08\u4EC5\u56E0 maxDepth \u622A\u65AD\u65F6\u51FA\u73B0\uFF0C\u62FF id \u56DE\u4F20 guid \u53EF\u7EE7\u7EED\u4E0B\u94BB\uFF09\u3002\u7701\u7565\u89C4\u5219\uFF1A\u9ED8\u8BA4\u503C\u4E0D\u8F93\u51FA\uFF08text.align=left\u3001lh=normal\u3001weight=Regular\u3001gap=0\u3001pad \u5168 0\uFF09\u3002\u8C03\u8272\u677F\uFF1A\u51FA\u73B0\u22652 \u6B21\u7684\u5355\u8272\u63D0\u53D6\u5230\u6839\u8282\u70B9 palette \u6570\u7EC4\uFF0Cfills/text.color/stroke \u4E2D\u7684 "p0""p1" \u4E3A palette \u4E0B\u6807\u5F15\u7528\uFF1Bshadow/gradient \u7B49\u590D\u5408 CSS \u4E32\u5185\u7684\u989C\u8272\u4FDD\u6301\u5B57\u9762\u503C\uFF0C\u4E0D\u67E5\u8868\u3002';
|
|
1216
1252
|
TARGET_PROP = {
|
|
1217
1253
|
type: "string",
|
|
1218
1254
|
description: "\u76EE\u6807\u63D2\u4EF6\u4F1A\u8BDD\uFF08sessionId \u6216 fileKey\uFF09\u3002\u4EC5\u5F53\u591A\u4E2A Pixso \u6587\u4EF6\u540C\u65F6\u8FD0\u884C\u63D2\u4EF6\u65F6\u9700\u8981\u6307\u5B9A\uFF1B\u7F3A\u7701\u8DEF\u7531\u5230\u6700\u8FD1\u6D3B\u8DC3\u7684\u6587\u4EF6\u3002\u53EF\u7528 list_sessions \u67E5\u770B\u5F53\u524D\u4F1A\u8BDD\u3002"
|
|
1219
1255
|
};
|
|
1256
|
+
CACHE_PROP = {
|
|
1257
|
+
type: "string",
|
|
1258
|
+
enum: ["first", "refresh"],
|
|
1259
|
+
description: "\u7F13\u5B58\u7B56\u7565\uFF1Afirst=\u7F13\u5B58\u4F18\u5148\uFF08\u9ED8\u8BA4\uFF0C15 \u5206\u949F\u5185\u76F8\u540C\u8C03\u7528\u76F4\u63A5\u8FD4\u56DE\u7F13\u5B58\uFF09\uFF1Brefresh=\u4E0D\u8BFB\u7F13\u5B58\u3001\u5F3A\u5236\u91CD\u65B0\u6784\u5EFA/\u5BFC\u51FA\uFF0C\u7ED3\u679C\u4ECD\u5199\u5165\u7F13\u5B58\u3002\u8BBE\u8BA1\u7A3F\u521A\u4FEE\u6539\u8FC7\u4E14\u7ED3\u679C\u5BF9\u4E0D\u4E0A\u65F6\u7528 refresh\u3002"
|
|
1260
|
+
};
|
|
1261
|
+
GUID_PROP = {
|
|
1262
|
+
type: "string",
|
|
1263
|
+
description: '\u8282\u70B9 GUID\uFF08\u5982 "297:133032"\uFF09\u3002\u94FE\u63A5\u8F93\u5165\uFF1A\u4ECE item-id \u67E5\u8BE2\u53C2\u6570\u63D0\u53D6\u5E76 URL \u89E3\u7801\u540E\u4F20\u5165\uFF1B\u7F3A\u7701\u56DE\u9000\u5F53\u524D\u9009\u4E2D\u56FE\u5C42\uFF0C\u4F46\u7981\u6B62\u9690\u5F0F\u4F7F\u7528\u8BE5\u56DE\u9000\uFF08\u9009\u4E2D\u786E\u8BA4\u89C4\u5219\u89C1\u5DE5\u5177 description\uFF09\u3002'
|
|
1264
|
+
};
|
|
1220
1265
|
PLUGIN_TOOLS = [
|
|
1221
1266
|
{
|
|
1222
1267
|
name: "get_selected",
|
|
1223
|
-
description: '\u83B7\u53D6 Pixso \u753B\u5E03\u5F53\u524D\u9009\u4E2D\u7684\u56FE\u5C42\u5217\u8868\uFF08guid\u3001\u540D\u79F0\u3001\u7C7B\u578B\u3001\u5C3A\u5BF8\uFF09\uFF0C\u5B9E\u65F6\u8BFB\u53D6\u3002\
|
|
1268
|
+
description: '\u3010\u7528\u9014\u3011\u83B7\u53D6 Pixso \u753B\u5E03\u5F53\u524D\u9009\u4E2D\u7684\u56FE\u5C42\u5217\u8868\uFF08guid\u3001\u540D\u79F0\u3001\u7C7B\u578B\u3001\u5C3A\u5BF8\uFF09\uFF0C\u5B9E\u65F6\u8BFB\u53D6\u3002\u3010\u547D\u4E2D\u4FE1\u53F7\u3011\u7528\u6237\u8BF4"\u8FD9\u4E2A/\u5F53\u524D\u9009\u4E2D\u7684"\u56FE\u5C42\u3001\u7EC4\u4EF6\u6216\u5143\u7D20\u3002\u7528\u6237\u5DF2\u63D0\u4F9B Pixso \u94FE\u63A5\u65F6\u4E0D\u8981\u8C03\u672C\u5DE5\u5177\u2014\u2014\u76F4\u63A5\u4ECE\u94FE\u63A5\u63D0\u53D6 guid\uFF08\u89C4\u5219\u89C1 get_node_dsl\uFF09\u3002\u591A\u6587\u4EF6\u8DEF\u7531\u7528 list_sessions\uFF0C\u4E0D\u7528\u672C\u5DE5\u5177\u3002\u3010\u8FD4\u56DE\u3011\u9009\u4E2D\u56FE\u5C42\u5217\u8868 JSON\u3002\u3010\u786C\u6027\u89C4\u5219\u3011\u4E25\u7981\u9690\u5F0F\u4F7F\u7528\u672C\u5DE5\u5177\u8FD4\u56DE\u7684 guid\uFF1A\u4EC5\u5F53\u7528\u6237\u660E\u786E\u8BF4\u4E86"\u6211\u9009\u4E2D\u7684/\u5F53\u524D\u9009\u4E2D\u7684"\uFF0C\u62FF\u5230 guid \u624D\u53EF\u76F4\u63A5\u7EE7\u7EED\uFF1B\u5176\u4F59\u573A\u666F\u5FC5\u987B\u5148\u628A\u9009\u4E2D\u56FE\u5C42\u540D\u79F0\u62A5\u7ED9\u7528\u6237\u786E\u8BA4\uFF08"\u5F53\u524D\u9009\u4E2D\u7684\u662F\u300CXX\u300D\uFF0C\u786E\u8BA4\u5904\u7406\u5B83\u5417\uFF1F"\uFF09\uFF0C\u786E\u8BA4\u540E\u624D\u80FD\u628A guid \u4F20\u7ED9\u5176\u4ED6\u5DE5\u5177\u2014\u2014\u907F\u514D\u9009\u533A\u7406\u89E3\u9519\u800C\u767D\u505A\u3002',
|
|
1224
1269
|
inputSchema: { type: "object", properties: { target: TARGET_PROP } },
|
|
1225
1270
|
handler: (args, ctx) => run("get_selected", args, ctx?.signal)
|
|
1226
1271
|
},
|
|
1227
1272
|
{
|
|
1228
1273
|
name: "get_node_dsl",
|
|
1229
|
-
description:
|
|
1274
|
+
description: '\u3010\u7528\u9014\u3011\u751F\u6210\u8282\u70B9\u7684\u5F00\u53D1\u5411\u7D27\u51D1 DSL\uFF08\u7ED3\u6784+\u6837\u5F0F+\u8D44\u6E90\u6587\u4EF6\u540D\uFF09\uFF0C\u8BBE\u8BA1\u8F6C\u4EE3\u7801\u7684\u6838\u5FC3\u5165\u53E3\uFF0C\u4F18\u5148\u7528\u672C\u5DE5\u5177\u7406\u89E3\u8BBE\u8BA1\u7ED3\u6784\u3002\u3010\u547D\u4E2D\u4FE1\u53F7\u3011\u7528\u6237\u8981\u6C42"\u6837\u5F0F\u8FD8\u539F/\u8BBE\u8BA1\u8FD8\u539F/UI \u8FD8\u539F/\u8BBE\u8BA1\u8F6C\u4EE3\u7801/\u6839\u636E\u8BBE\u8BA1\u7A3F\u6216\u8BBE\u8BA1\u56FE\u5199\u9875\u9762\u3001\u7EC4\u4EF6"\uFF0C\u6216\u7ED9\u51FA Pixso \u94FE\u63A5\uFF08\u4EFB\u610F\u57DF\u540D\uFF09\u65F6\uFF0C\u9ED8\u8BA4\u4ECE\u672C\u5DE5\u5177\u5F00\u59CB\u3002\u7ED3\u6784\u590D\u6742\u60F3\u5148\u770B\u6574\u4F53\u6846\u67B6\u65F6\uFF1AmaxDepth \u4F20 0 \u53EA\u62FF\u6839\u8282\u70B9\uFF08depth \u5B57\u6BB5=\u6574\u6811\u5B9E\u9645\u6DF1\u5EA6\uFF09\u9884\u5224\u89C4\u6A21\uFF0C\u518D\u5BF9\u5E26 more \u6807\u8BB0\u7684\u5B50\u6811\u5206\u6BB5\u4E0B\u94BB\u3002\u3010\u8FD4\u56DE\u3011\u5355\u884C\u7D27\u51D1 JSON\u3002' + DSL_LEGEND + "\u53F6\u5B50\u584C\u7F29\u89C4\u5219\uFF1Aicon/\u7EAF\u77E2\u91CF\u5C0F\u8282\u70B9\uFF08\u226464px \u65E0\u6587\u672C\uFF09\u5BFC\u51FA SVG\u3001\u56FE\u7247\u586B\u5145\u8282\u70B9\u5BFC\u51FA PNG\u3001\u8BBE\u8BA1\u5E08\u6807\u8BB0\u6309\u5176\u8BBE\u7F6E\u5BFC\u51FA\u3002\u5DF2\u5E26 img \u7684\u8282\u70B9\u5373\u5B8C\u6210\u5BFC\u51FA\uFF0C\u76F4\u63A5\u4F7F\u7528\u5176\u6587\u4EF6\u540D\uFF0C\u65E0\u9700\u518D\u8C03 export_image\u3002DSL \u662F\u6709\u635F\u7CBE\u7B80\uFF08\u7701\u7565\u8499\u7248\u3001\u5E03\u5C14\u8FD0\u7B97\u8DEF\u5F84\u7B49\uFF09\uFF0C\u89C6\u89C9\u590D\u6742\u8282\u70B9\u914D\u5408 get_screenshot \u5BF9\u7167\u3002\u5B57\u6BB5\u8BED\u4E49\u8BE6\u89C1\u8D44\u6E90 batter://guides/design-to-code\u3002\u3010\u786C\u6027\u89C4\u5219\u3011" + URL_RULE + SELECT_RULE_PTR + ASSET_RULE,
|
|
1230
1275
|
inputSchema: {
|
|
1231
1276
|
type: "object",
|
|
1232
1277
|
properties: {
|
|
1233
|
-
guid:
|
|
1234
|
-
|
|
1235
|
-
|
|
1278
|
+
guid: GUID_PROP,
|
|
1279
|
+
maxDepth: {
|
|
1280
|
+
type: "number",
|
|
1281
|
+
description: "\u4E0B\u63A2\u5B50\u8282\u70B9\u7684\u6700\u5927\u6DF1\u5EA6\uFF08\u6839\u8282\u70B9\u4E3A\u7B2C 0 \u5C42\uFF09\uFF0C\u7F3A\u7701\u4E0D\u9650\u3002\u7B2C N \u5C42\u8282\u70B9\u82E5\u4ECD\u6709\u5B50\u8282\u70B9\u5219\u5E26 more \u5B57\u6BB5\uFF08\u5269\u4F59\u672A\u5C55\u5F00\u5C42\u7EA7\u6570\uFF09\uFF0C\u62FF\u5176 id \u56DE\u4F20 guid \u53EF\u7EE7\u7EED\u4E0B\u94BB\u3002\u4F20 0 \u53EA\u8FD4\u56DE\u6839\u8282\u70B9\uFF1A\u914D\u5408\u6839\u8282\u70B9 depth \u5B57\u6BB5\uFF08\u6574\u6811\u5B9E\u9645\u6DF1\u5EA6\uFF09\u5EC9\u4EF7\u9884\u5224\u89C4\u6A21\uFF0C\u518D\u51B3\u5B9A\u4E0B\u94BB\u7B56\u7565\u3002"
|
|
1236
1282
|
},
|
|
1283
|
+
cache: CACHE_PROP,
|
|
1237
1284
|
target: TARGET_PROP
|
|
1238
1285
|
}
|
|
1239
1286
|
},
|
|
1240
1287
|
handler: (args, ctx) => run("get_node_dsl", args, ctx?.signal)
|
|
1241
1288
|
},
|
|
1242
1289
|
{
|
|
1243
|
-
name: "
|
|
1244
|
-
description: '\
|
|
1290
|
+
name: "export_image",
|
|
1291
|
+
description: '\u3010\u7528\u9014\u3011\u6309 guid \u5BFC\u51FA\u56FE\u7247\u7D20\u6750\uFF08\u5207\u56FE\uFF09\uFF0C\u4EA7\u7269\u4F9B\u4EA4\u4ED8\u4EE3\u7801\u4F7F\u7528\u3002\u6BCF\u6B21\u53EA\u5904\u7406\u4E00\u4E2A\u8282\u70B9\uFF1B\u591A\u8282\u70B9\u573A\u666F\u9010\u4E2A\u8C03\u7528\u3002\u4EC5\u7528\u4E8E DSL \u4E2D\u672A\u584C\u7F29\u7684\u8282\u70B9\u2014\u2014get_node_dsl \u8FD4\u56DE\u91CC\u5DF2\u5E26 img \u5B57\u6BB5\u7684\u8282\u70B9\uFF08ICON/IMAGE \u53F6\u5B50\uFF09\u5728\u53D6 DSL \u65F6\u5DF2\u5B8C\u6210\u5BFC\u51FA\uFF0C\u76F4\u63A5\u4F7F\u7528\u5176 img \u6587\u4EF6\u540D\u5373\u53EF\uFF0C\u4E25\u7981\u5BF9\u8FD9\u7C7B\u8282\u70B9\u91CD\u590D\u8C03\u7528\u672C\u5DE5\u5177\u3002\u3010\u547D\u4E2D\u4FE1\u53F7\u3011\u7528\u6237\u8981"\u5207\u56FE/\u5BFC\u51FA\u56FE\u6807/\u5BFC\u51FA\u56FE\u7247\u7D20\u6750/\u628A\u67D0\u4E2A\u8282\u70B9\u5B58\u6210\u56FE\u7247"\uFF0C\u6216\u8BBE\u8BA1\u8FD8\u539F\u4E2D\u9700\u8981\u63D0\u53D6\u56FE\u7247\u8D44\u6E90\u3002\u8981\u89C6\u89C9\u53C2\u7167/\u8FD8\u539F\u5EA6\u6821\u9A8C\u7528 get_screenshot\u3002\u3010\u8FD4\u56DE\u3011{width, height, exports: [{img, format, scale?, suffix?}]}\uFF1A\u8282\u70B9\u5E26\u8BBE\u8BA1\u5E08\u5BFC\u51FA\u8BBE\u7F6E\uFF08exportSettings\uFF09\u65F6\u6309\u5176\u8BBE\u7F6E\u9010\u4EFD\u5BFC\u51FA\uFF08\u683C\u5F0F/\u500D\u7387/\u540E\u7F00\u5168\u90E8\u751F\u6548\uFF0Cformat/scale \u53C2\u6570\u65E0\u6548\uFF09\uFF1B\u65E0\u6807\u8BB0\u8282\u70B9\u6309\u53C2\u6570\u5BFC\u51FA\u5355\u4EFD\uFF08\u9ED8\u8BA4 PNG\u30012x\uFF09\u3002img \u4E3A\u4EA7\u7269\u6587\u4EF6\u540D\uFF1Bsuffix \u4E3A\u8BBE\u8BA1\u5E08\u8BBE\u7F6E\u7684\u6587\u4EF6\u540D\u540E\u7F00\uFF08\u5982 "@2x"\uFF09\uFF0C\u590D\u5236\u8FDB\u9879\u76EE\u65F6\u5EFA\u8BAE\u4FDD\u7559\u547D\u540D\u3002\u3010\u786C\u6027\u89C4\u5219\u3011' + URL_RULE_PTR + SELECT_RULE_PTR + ASSET_RULE,
|
|
1245
1292
|
inputSchema: {
|
|
1246
1293
|
type: "object",
|
|
1247
1294
|
properties: {
|
|
1248
|
-
guid:
|
|
1295
|
+
guid: GUID_PROP,
|
|
1296
|
+
format: {
|
|
1249
1297
|
type: "string",
|
|
1250
|
-
|
|
1298
|
+
enum: ["PNG", "SVG", "JPG"],
|
|
1299
|
+
description: "\u65E0\u5BFC\u51FA\u6807\u8BB0\u65F6\u7684\u515C\u5E95\u683C\u5F0F\uFF0C\u9ED8\u8BA4 PNG\u3002\u8282\u70B9\u5E26\u5BFC\u51FA\u6807\u8BB0\u65F6\u6B64\u53C2\u6570\u65E0\u6548\u3002"
|
|
1251
1300
|
},
|
|
1301
|
+
scale: {
|
|
1302
|
+
type: "number",
|
|
1303
|
+
description: "\u65E0\u5BFC\u51FA\u6807\u8BB0\u65F6\u7684\u515C\u5E95\u500D\u7387\uFF0C\u9ED8\u8BA4 2\u3002\u8282\u70B9\u5E26\u5BFC\u51FA\u6807\u8BB0\u65F6\u6B64\u53C2\u6570\u65E0\u6548\u3002"
|
|
1304
|
+
},
|
|
1305
|
+
cache: CACHE_PROP,
|
|
1306
|
+
target: TARGET_PROP
|
|
1307
|
+
}
|
|
1308
|
+
},
|
|
1309
|
+
handler: (args, ctx) => run("export_image", args, ctx?.signal)
|
|
1310
|
+
},
|
|
1311
|
+
{
|
|
1312
|
+
name: "get_screenshot",
|
|
1313
|
+
description: '\u3010\u7528\u9014\u3011\u5BFC\u51FA\u5355\u4E2A\u8282\u70B9\u7684\u622A\u56FE\uFF0C\u7528\u4E8E\u83B7\u53D6\u8BBE\u8BA1\u7684\u89C6\u89C9\u53C2\u7167\u3002\u6BCF\u6B21\u53EA\u5904\u7406\u4E00\u4E2A\u8282\u70B9\uFF1B\u591A\u8282\u70B9\u573A\u666F\u9010\u4E2A\u8C03\u7528\u3002\u8981\u5207\u56FE/\u5BFC\u51FA\u4EA4\u4ED8\u7D20\u6750\u7528 export_image\u3002\u3010\u547D\u4E2D\u4FE1\u53F7\u3011\u7528\u6237\u8BF4"\u770B\u770B\u8FD9\u4E2A\u8BBE\u8BA1\u7A3F/\u8BBE\u8BA1\u56FE\u957F\u4EC0\u4E48\u6837""\u7ED9\u6211\u622A\u56FE"\uFF0C\u6216\u8FD8\u539F\u7C7B\u4EFB\u52A1\u9700\u8981\u89C6\u89C9\u53C2\u7167\u3001\u8FD8\u539F\u5EA6\u6821\u9A8C\u3001\u6837\u5F0F\u5BF9\u6BD4\u3002\u751F\u6210\u4EE3\u7801\u540E\u53EF\u518D\u6B21\u8C03\u7528\u672C\u5DE5\u5177\u5BF9\u6BD4\u8FD8\u539F\u5EA6\uFF1B\u5EFA\u8BAE\u4E0E get_node_dsl \u914D\u5408\uFF1ADSL \u5B9A\u7ED3\u6784\uFF0C\u622A\u56FE\u6821\u9A8C\u89C6\u89C9\u3002\u3010\u8FD4\u56DE\u3011{img: \u4EA7\u7269\u6587\u4EF6\u540D, width, height, format}\u3002\u3010\u786C\u6027\u89C4\u5219\u3011' + URL_RULE_PTR + SELECT_RULE_PTR + ASSET_RULE,
|
|
1314
|
+
inputSchema: {
|
|
1315
|
+
type: "object",
|
|
1316
|
+
properties: {
|
|
1317
|
+
guid: GUID_PROP,
|
|
1252
1318
|
format: {
|
|
1253
1319
|
type: "string",
|
|
1254
1320
|
enum: ["PNG", "SVG", "JPG", "WEBP"],
|
|
@@ -1258,6 +1324,7 @@ var init_plugin = __esm({
|
|
|
1258
1324
|
type: "number",
|
|
1259
1325
|
description: "\u5BFC\u51FA\u500D\u7387\uFF0C\u9ED8\u8BA4 2\u3002"
|
|
1260
1326
|
},
|
|
1327
|
+
cache: CACHE_PROP,
|
|
1261
1328
|
target: TARGET_PROP
|
|
1262
1329
|
}
|
|
1263
1330
|
},
|
|
@@ -1310,7 +1377,7 @@ import {
|
|
|
1310
1377
|
function createMcpServer() {
|
|
1311
1378
|
const server = new McpServer(
|
|
1312
1379
|
{ name: "batter-pixso-mcp", version: VERSION },
|
|
1313
|
-
{ capabilities: { tools: {}, resources: {}, prompts: {} } }
|
|
1380
|
+
{ capabilities: { tools: {}, resources: {}, prompts: {} }, instructions: INSTRUCTIONS }
|
|
1314
1381
|
);
|
|
1315
1382
|
for (const guide of GUIDES) {
|
|
1316
1383
|
server.registerResource(
|
|
@@ -1371,6 +1438,7 @@ function createMcpServer() {
|
|
|
1371
1438
|
});
|
|
1372
1439
|
return server;
|
|
1373
1440
|
}
|
|
1441
|
+
var INSTRUCTIONS;
|
|
1374
1442
|
var init_mcp_local = __esm({
|
|
1375
1443
|
"src/mcp-local.ts"() {
|
|
1376
1444
|
"use strict";
|
|
@@ -1378,6 +1446,7 @@ var init_mcp_local = __esm({
|
|
|
1378
1446
|
init_guides();
|
|
1379
1447
|
init_prompts();
|
|
1380
1448
|
init_registry();
|
|
1449
|
+
INSTRUCTIONS = `Pixso \u8BBE\u8BA1\u7A3F\u8F6C\u4EE3\u7801\u670D\u52A1\u3002\u6309\u7528\u6237\u8F93\u5165\u8DEF\u7531\uFF1A\u2460 \u7ED9\u51FA Pixso \u94FE\u63A5\uFF08\u4EFB\u610F\u57DF\u540D\uFF0C\u542B\u79C1\u6709\u5316\u90E8\u7F72\uFF09\u2192 \u4ECE item-id \u63D0\u53D6 guid\uFF08URL \u89E3\u7801\uFF09\uFF0C\u76F4\u63A5\u8C03 get_node_dsl / get_screenshot / export_image\uFF1B\u2461 \u8BF4"\u6211\u9009\u4E2D\u7684/\u5F53\u524D\u9009\u4E2D\u7684"\u2192 get_selected \u62FF guid \u7EE7\u7EED\uFF1B\u5176\u4ED6\u4F9D\u8D56\u9009\u533A\u7684\u573A\u666F\u5148 get_selected \u518D\u5411\u7528\u6237\u62A5\u540D\u79F0\u786E\u8BA4\uFF1B\u2462 "\u6837\u5F0F\u8FD8\u539F/\u8BBE\u8BA1\u8FD8\u539F/UI \u8FD8\u539F/\u8BBE\u8BA1\u8F6C\u4EE3\u7801/\u6839\u636E\u8BBE\u8BA1\u7A3F\u5199\u9875\u9762\u6216\u7EC4\u4EF6"\u2192 get_node_dsl \u53D6\u7ED3\u6784\u6837\u5F0F + get_screenshot \u53D6\u89C6\u89C9\u53C2\u7167\uFF1B\u2463 "\u5207\u56FE/\u5BFC\u51FA\u56FE\u6807\u6216\u56FE\u7247\u7D20\u6750"\u2192 export_image\uFF08\u5C0A\u91CD\u8BBE\u8BA1\u5E08\u5BFC\u51FA\u6807\u8BB0\uFF1BDSL \u91CC\u5DF2\u5E26 img \u7684\u8282\u70B9\u76F4\u63A5\u7528\u5176\u6587\u4EF6\u540D\uFF0C\u4E0D\u8981\u91CD\u590D\u5BFC\u51FA\uFF09\uFF1B\u2464 \u7ED3\u6784\u590D\u6742/\u5148\u770B\u6574\u4F53\u6846\u67B6 \u2192 get_node_dsl \u7528 maxDepth \u5206\u6BB5\u4E0B\u63A2\uFF08\u622A\u65AD\u5904 more \u6807\u8BB0\uFF0C\u6309 id \u4E0B\u94BB\uFF09\uFF1B\u2465 \u751F\u6210\u540E\u5BF9\u6BD4\u8FD8\u539F\u5EA6 \u2192 get_screenshot \u6821\u9A8C\u5FAA\u73AF\uFF1B\u2466 \u591A\u4E2A Pixso \u6587\u4EF6\u540C\u65F6\u6253\u5F00 \u2192 list_sessions + target \u53C2\u6570\u8DEF\u7531\u3002\u8D44\u6E90\u53D6\u7528\u4E0E\u5B57\u6BB5\u8BED\u4E49\u7B49\u786C\u6027\u89C4\u5219\u89C1\u8D44\u6E90 batter://guides/intro \u4E0E batter://guides/design-to-code\uFF1B\u8BBE\u8BA1\u7A3F\u521A\u6539\u8FC7\u4F46\u7ED3\u679C\u5BF9\u4E0D\u4E0A\u65F6\uFF0C\u7ED9\u5BFC\u51FA\u7C7B\u5DE5\u5177\u52A0 cache:"refresh" \u5F3A\u5236\u5237\u65B0\u3002`;
|
|
1381
1450
|
}
|
|
1382
1451
|
});
|
|
1383
1452
|
|
|
@@ -1444,7 +1513,6 @@ var init_mcp_http = __esm({
|
|
|
1444
1513
|
});
|
|
1445
1514
|
|
|
1446
1515
|
// src/routes/plugin-api.ts
|
|
1447
|
-
import { readFile as readFile2 } from "node:fs/promises";
|
|
1448
1516
|
async function handlePluginApi(req, res, url) {
|
|
1449
1517
|
const path = url.pathname;
|
|
1450
1518
|
const session = url.searchParams.get("session");
|
|
@@ -1542,29 +1610,12 @@ async function handlePluginApi(req, res, url) {
|
|
|
1542
1610
|
try {
|
|
1543
1611
|
const buf = await readBody(req);
|
|
1544
1612
|
const saved = await saveAsset(buf, url.searchParams.get("format") ?? "PNG");
|
|
1545
|
-
sendJson(res, 201, {
|
|
1546
|
-
name: saved.name,
|
|
1547
|
-
url: `http://127.0.0.1:${config.httpPort}/assets/${saved.name}`
|
|
1548
|
-
});
|
|
1613
|
+
sendJson(res, 201, { name: saved.name });
|
|
1549
1614
|
} catch {
|
|
1550
1615
|
sendJson(res, 500, { error: "asset save failed" });
|
|
1551
1616
|
}
|
|
1552
1617
|
return true;
|
|
1553
1618
|
}
|
|
1554
|
-
const assetMatch = path.match(/^\/assets\/([\w.-]+)$/);
|
|
1555
|
-
if (req.method === "GET" && assetMatch) {
|
|
1556
|
-
try {
|
|
1557
|
-
const buf = await readFile2(assetPath(assetMatch[1]));
|
|
1558
|
-
res.writeHead(200, {
|
|
1559
|
-
"Content-Type": assetMime(assetMatch[1]),
|
|
1560
|
-
"Cache-Control": "public, max-age=31536000, immutable"
|
|
1561
|
-
});
|
|
1562
|
-
res.end(buf);
|
|
1563
|
-
} catch {
|
|
1564
|
-
sendJson(res, 404, { error: "not found" });
|
|
1565
|
-
}
|
|
1566
|
-
return true;
|
|
1567
|
-
}
|
|
1568
1619
|
return false;
|
|
1569
1620
|
}
|
|
1570
1621
|
var init_plugin_api = __esm({
|
|
@@ -1833,7 +1884,7 @@ if (major < 18) {
|
|
|
1833
1884
|
console.error(
|
|
1834
1885
|
`[batter-pixso-mcp] \u9700\u8981 Node \u2265 18\uFF08\u5F53\u524D ${process.version}\uFF09\u3002
|
|
1835
1886
|
\u7CFB\u7EDF Node \u8FC7\u65E7\u65F6\u53EF\u7528 Volta \u6307\u5B9A\u8FD0\u884C\u65F6\uFF1A
|
|
1836
|
-
MCP \u914D\u7F6E: { "command": "volta", "args": ["run", "--node", "
|
|
1887
|
+
MCP \u914D\u7F6E: { "command": "volta", "args": ["run", "--node", "24", "npx", "-y", "batter-pixso-mcp"] }`
|
|
1837
1888
|
);
|
|
1838
1889
|
process.exit(1);
|
|
1839
1890
|
}
|