mta-mcp 3.15.0 → 3.15.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
CHANGED
|
@@ -2893,7 +2893,7 @@ init_smartAgentMatcher();
|
|
|
2893
2893
|
async function getCompactStandards(args) {
|
|
2894
2894
|
const logger4 = new ConsoleLogger();
|
|
2895
2895
|
const manager = new StandardsManager();
|
|
2896
|
-
const mode = args.mode
|
|
2896
|
+
const mode = normalizeMode(args.mode);
|
|
2897
2897
|
try {
|
|
2898
2898
|
let context = detectContext(args, logger4);
|
|
2899
2899
|
if (args.projectPath && fs12.existsSync(args.projectPath)) {
|
|
@@ -2905,16 +2905,16 @@ async function getCompactStandards(args) {
|
|
|
2905
2905
|
imports: context.imports,
|
|
2906
2906
|
scenario: args.scenario || context.scenario
|
|
2907
2907
|
});
|
|
2908
|
-
|
|
2908
|
+
const responseContent = {};
|
|
2909
2909
|
switch (mode) {
|
|
2910
2910
|
case "summary":
|
|
2911
|
-
responseContent
|
|
2911
|
+
Object.assign(responseContent, buildSummaryResponse(standardUris, manager));
|
|
2912
2912
|
break;
|
|
2913
2913
|
case "key-rules":
|
|
2914
|
-
responseContent
|
|
2914
|
+
Object.assign(responseContent, buildKeyRulesResponse(standardUris, context, manager));
|
|
2915
2915
|
break;
|
|
2916
2916
|
case "full":
|
|
2917
|
-
responseContent
|
|
2917
|
+
Object.assign(responseContent, buildFullResponse(standardUris, manager));
|
|
2918
2918
|
break;
|
|
2919
2919
|
}
|
|
2920
2920
|
if (args.projectPath && context.userConfiguredAgents) {
|
|
@@ -2942,6 +2942,12 @@ async function getCompactStandards(args) {
|
|
|
2942
2942
|
};
|
|
2943
2943
|
}
|
|
2944
2944
|
}
|
|
2945
|
+
function normalizeMode(mode) {
|
|
2946
|
+
if (mode === "summary" || mode === "key-rules" || mode === "full") {
|
|
2947
|
+
return mode;
|
|
2948
|
+
}
|
|
2949
|
+
return "key-rules";
|
|
2950
|
+
}
|
|
2945
2951
|
async function analyzeProject2(projectPath, logger4) {
|
|
2946
2952
|
var _a, _b;
|
|
2947
2953
|
const result = {
|
|
@@ -3330,7 +3336,12 @@ function getFlutterDesignRestorationKeyRules() {
|
|
|
3330
3336
|
### \u6570\u636E\u4F7F\u7528\u4F18\u5148\u7EA7
|
|
3331
3337
|
- \u9996\u8F6E\u4EE3\u7801\u751F\u6210: \`compact.restorationContract\` + \`compact.tree\`
|
|
3332
3338
|
- \u5C40\u90E8\u6837\u5F0F/\u56FE\u6807\u8BCA\u65AD: \u518D\u8865\u8BFB \`measure\` \u6216 \`style\`
|
|
3333
|
-
- \u53EA\u8981 contract \u4E0E\u73B0\u6709\u4E1A\u52A1\u7EC4\u4EF6\u51B2\u7A81\uFF0C\u4F18\u5148\u4FDD\u8BC1\u8BBE\u8BA1\u7A3F\u7ED3\u6784\u4E00\u81F4\uFF0C\u518D\u51B3\u5B9A\u662F\u5426\u590D\u7528\u7EC4\u4EF6
|
|
3339
|
+
- \u53EA\u8981 contract \u4E0E\u73B0\u6709\u4E1A\u52A1\u7EC4\u4EF6\u51B2\u7A81\uFF0C\u4F18\u5148\u4FDD\u8BC1\u8BBE\u8BA1\u7A3F\u7ED3\u6784\u4E00\u81F4\uFF0C\u518D\u51B3\u5B9A\u662F\u5426\u590D\u7528\u7EC4\u4EF6`,
|
|
3340
|
+
`### SVG / \u8D44\u6E90\u56DE\u5F52\u68C0\u67E5
|
|
3341
|
+
- \u5982\u679C \`iconSvgMeta.colorStrategy=preserve\`\uFF0C\u6216 SVG \u81EA\u5E26 \`fill-opacity\` / \u6E10\u53D8 / \u591A\u8272\u8DEF\u5F84\uFF0C**\u7981\u6B62**\u518D\u52A0 \`ColorFilter\`
|
|
3342
|
+
- \u65E7\u9875\u9762\u7684\u540C\u540D\u7BAD\u5934/\u56FE\u6807\u8D44\u6E90\u9ED8\u8BA4\u4E0D\u53EF\u4FE1\uFF1B\u5C40\u90E8\u56FE\u6807\u504F\u5DEE\u4F18\u5148\u4ECE\u5F53\u524D\u753B\u677F\u91CD\u65B0\u5BFC\u51FA\uFF0C\u4E0D\u76F4\u63A5\u590D\u7528\u5168\u5C40\u8D44\u4EA7
|
|
3343
|
+
- 16\xD716 \u901A\u5E38\u662F\u70B9\u51FB\u69FD\u4F4D\u800C\u975E\u56FE\u5F62\u771F\u5B9E\u5C3A\u5BF8\uFF1B\u5F53 compact/measure \u7ED9\u51FA \`containerSize\` \u4E0E \`contentSize\` \u65F6\uFF0C\u5FC5\u987B\u5206\u79BB\u5360\u4F4D\u4E0E\u6E32\u67D3
|
|
3344
|
+
- Sketch \u7684 \`Image\` \u56FE\u5C42\u5FC5\u987B\u5BFC\u51FA PNG + \`Image.asset\`\uFF0C\u4E0D\u8981\u4F2A\u88C5\u6210 SVG \u7528 \`SvgPicture\``
|
|
3334
3345
|
];
|
|
3335
3346
|
}
|
|
3336
3347
|
function isDesignRestorationScenario(scenario, imports) {
|
|
@@ -5495,6 +5506,59 @@ function ensureWorkspaceConfig(workspacePath) {
|
|
|
5495
5506
|
|
|
5496
5507
|
// src/tools/queryTroubleshootingCases.ts
|
|
5497
5508
|
var logger2 = createLogger("QueryTroubleshootingCases");
|
|
5509
|
+
var KEYWORD_ALIAS_MAP = {
|
|
5510
|
+
svg: ["\u77E2\u91CF", "svgpicture", "svgpicture.asset"],
|
|
5511
|
+
color: ["\u989C\u8272", "\u8272\u503C", "\u53D1\u7070", "\u53D1\u6D45", "\u53D8\u6DE1"],
|
|
5512
|
+
colorfilter: ["color filter", "\u4E8C\u6B21\u67D3\u8272", "\u67D3\u8272"],
|
|
5513
|
+
opacity: ["\u900F\u660E\u5EA6", "fill-opacity", "alpha"],
|
|
5514
|
+
viewbox: ["view box", "\u89C6\u53E3"],
|
|
5515
|
+
icon: ["\u56FE\u6807", "badge", "flag"],
|
|
5516
|
+
chevron: ["arrow", "\u7BAD\u5934"],
|
|
5517
|
+
bitmap: ["\u4F4D\u56FE", "png", "image.asset"],
|
|
5518
|
+
layout: ["\u5E03\u5C40", "spacing", "\u95F4\u8DDD", "\u504F\u79FB"],
|
|
5519
|
+
sketch: ["\u8BBE\u8BA1\u7A3F", "\u8FD8\u539F", "measure", "restoration"]
|
|
5520
|
+
};
|
|
5521
|
+
function normalizeKeyword(value) {
|
|
5522
|
+
return value.trim().toLowerCase();
|
|
5523
|
+
}
|
|
5524
|
+
function expandKeywords(keywords) {
|
|
5525
|
+
const expanded = /* @__PURE__ */ new Set();
|
|
5526
|
+
for (const keyword of keywords) {
|
|
5527
|
+
const normalized = normalizeKeyword(keyword);
|
|
5528
|
+
if (!normalized) continue;
|
|
5529
|
+
expanded.add(normalized);
|
|
5530
|
+
for (const [canonical, aliases] of Object.entries(KEYWORD_ALIAS_MAP)) {
|
|
5531
|
+
if (canonical === normalized || aliases.some((alias) => normalized.includes(alias) || alias.includes(normalized))) {
|
|
5532
|
+
expanded.add(canonical);
|
|
5533
|
+
for (const alias of aliases) {
|
|
5534
|
+
expanded.add(alias);
|
|
5535
|
+
}
|
|
5536
|
+
}
|
|
5537
|
+
}
|
|
5538
|
+
}
|
|
5539
|
+
return [...expanded];
|
|
5540
|
+
}
|
|
5541
|
+
function inferImplicitTags(id, title, problemType, content) {
|
|
5542
|
+
const source = `${id} ${title} ${problemType} ${content}`.toLowerCase();
|
|
5543
|
+
const inferred = /* @__PURE__ */ new Set();
|
|
5544
|
+
for (const [canonical, aliases] of Object.entries(KEYWORD_ALIAS_MAP)) {
|
|
5545
|
+
const candidates = [canonical, ...aliases];
|
|
5546
|
+
if (candidates.some((candidate) => source.includes(candidate))) {
|
|
5547
|
+
inferred.add(canonical);
|
|
5548
|
+
}
|
|
5549
|
+
}
|
|
5550
|
+
if (source.includes("sketch") || source.includes("\u8BBE\u8BA1\u7A3F") || source.includes("\u8FD8\u539F")) {
|
|
5551
|
+
inferred.add("sketch");
|
|
5552
|
+
}
|
|
5553
|
+
return [...inferred];
|
|
5554
|
+
}
|
|
5555
|
+
function extractErrorKeywords(errorMessage) {
|
|
5556
|
+
if (!(errorMessage == null ? void 0 : errorMessage.trim())) {
|
|
5557
|
+
return [];
|
|
5558
|
+
}
|
|
5559
|
+
const rawMatches = errorMessage.toLowerCase().match(/colorfilter|fill-opacity|viewbox|svgpicture(?:\.asset)?|image\.asset|bitmap|chevron|arrow|opacity|颜色|透明度|箭头|图标|位图|设计稿|还原|间距|布局|发灰|发浅|模糊|复用|旧资源|png|svg|icon/g) || [];
|
|
5560
|
+
return expandKeywords([...new Set(rawMatches)]);
|
|
5561
|
+
}
|
|
5498
5562
|
function extractCaseMetadata(filePath, framework) {
|
|
5499
5563
|
try {
|
|
5500
5564
|
const content = fs18.readFileSync(filePath, "utf-8");
|
|
@@ -5531,6 +5595,7 @@ function extractCaseMetadata(filePath, framework) {
|
|
|
5531
5595
|
timeSaved = timeSavedMatch[1] || `${timeSavedMatch[2]}\u8F6E\u5BF9\u8BDD`;
|
|
5532
5596
|
}
|
|
5533
5597
|
const id = path17.basename(filePath, ".md");
|
|
5598
|
+
tags = [.../* @__PURE__ */ new Set([...tags, ...inferImplicitTags(id, title, problemType || "", content)])];
|
|
5534
5599
|
return {
|
|
5535
5600
|
id,
|
|
5536
5601
|
framework,
|
|
@@ -5548,10 +5613,14 @@ function extractCaseMetadata(filePath, framework) {
|
|
|
5548
5613
|
}
|
|
5549
5614
|
function calculateMatchScore(caseData, keywords, errorMessage) {
|
|
5550
5615
|
let score = 0;
|
|
5616
|
+
const expandedKeywords = expandKeywords(keywords);
|
|
5617
|
+
const idLower = caseData.id.toLowerCase();
|
|
5551
5618
|
const titleLower = caseData.title.toLowerCase();
|
|
5552
5619
|
const problemTypeLower = caseData.problemType.toLowerCase();
|
|
5553
5620
|
const tagsLower = caseData.tags.map((t) => t.toLowerCase());
|
|
5554
|
-
|
|
5621
|
+
const caseContent = fs18.readFileSync(caseData.filePath, "utf-8").toLowerCase();
|
|
5622
|
+
const searchableText = `${idLower} ${titleLower} ${problemTypeLower} ${tagsLower.join(" ")} ${caseContent}`;
|
|
5623
|
+
for (const keyword of expandedKeywords) {
|
|
5555
5624
|
const kw = keyword.toLowerCase();
|
|
5556
5625
|
if (tagsLower.includes(kw)) {
|
|
5557
5626
|
score += 20;
|
|
@@ -5559,26 +5628,29 @@ function calculateMatchScore(caseData, keywords, errorMessage) {
|
|
|
5559
5628
|
score += 10;
|
|
5560
5629
|
}
|
|
5561
5630
|
}
|
|
5562
|
-
for (const keyword of
|
|
5631
|
+
for (const keyword of expandedKeywords) {
|
|
5563
5632
|
const kw = keyword.toLowerCase();
|
|
5564
|
-
if (titleLower.includes(kw)) {
|
|
5633
|
+
if (titleLower.includes(kw) || idLower.includes(kw)) {
|
|
5565
5634
|
score += 15;
|
|
5566
5635
|
}
|
|
5567
5636
|
}
|
|
5568
|
-
for (const keyword of
|
|
5637
|
+
for (const keyword of expandedKeywords) {
|
|
5569
5638
|
const kw = keyword.toLowerCase();
|
|
5570
5639
|
if (problemTypeLower.includes(kw)) {
|
|
5571
5640
|
score += 8;
|
|
5572
5641
|
}
|
|
5573
5642
|
}
|
|
5643
|
+
for (const keyword of expandedKeywords) {
|
|
5644
|
+
const kw = keyword.toLowerCase();
|
|
5645
|
+
if (searchableText.includes(kw)) {
|
|
5646
|
+
score += 6;
|
|
5647
|
+
}
|
|
5648
|
+
}
|
|
5574
5649
|
if (errorMessage && errorMessage.trim()) {
|
|
5575
|
-
const
|
|
5576
|
-
const caseContent = fs18.readFileSync(caseData.filePath, "utf-8").toLowerCase();
|
|
5577
|
-
const errorKeywords = errorLower.match(/\b[\u4e00-\u9fa5a-z]{4,}\b/g) || [];
|
|
5578
|
-
const uniqueKeywords = [...new Set(errorKeywords)];
|
|
5650
|
+
const uniqueKeywords = extractErrorKeywords(errorMessage);
|
|
5579
5651
|
let matches = 0;
|
|
5580
5652
|
for (const kw of uniqueKeywords.slice(0, 10)) {
|
|
5581
|
-
if (
|
|
5653
|
+
if (searchableText.includes(kw)) {
|
|
5582
5654
|
matches++;
|
|
5583
5655
|
}
|
|
5584
5656
|
}
|
|
@@ -5586,8 +5658,8 @@ function calculateMatchScore(caseData, keywords, errorMessage) {
|
|
|
5586
5658
|
score += Math.floor(matches / uniqueKeywords.length * 30);
|
|
5587
5659
|
}
|
|
5588
5660
|
}
|
|
5589
|
-
for (const keyword of
|
|
5590
|
-
if (caseData.tags.includes(keyword)) {
|
|
5661
|
+
for (const keyword of expandedKeywords) {
|
|
5662
|
+
if (caseData.tags.map((tag) => tag.toLowerCase()).includes(keyword.toLowerCase())) {
|
|
5591
5663
|
score += 15;
|
|
5592
5664
|
}
|
|
5593
5665
|
}
|
|
@@ -6219,9 +6291,12 @@ var OUTPUT_GUIDE = {
|
|
|
6219
6291
|
"- **isIcon=true**: \u5DF2\u901A\u8FC7 5 \u7279\u5F81\u8BC4\u5206\u8BC6\u522B\u4E3A\u56FE\u6807\uFF0C\u5E94\u5BFC\u51FA SVG \u800C\u975E\u7528 Icons.xxx",
|
|
6220
6292
|
"- **iconSvgMarkup**: \u63D2\u4EF6\u73B0\u5DF2\u76F4\u63A5\u8FD4\u56DE\u4ECE Sketch \u5BFC\u51FA\u7684\u771F\u5B9E SVG \u5B57\u7B26\u4E32\uFF0C\u4E0D\u518D\u53EA\u731C\u6D4B\u6587\u4EF6\u540D",
|
|
6221
6293
|
"- **iconSvgMeta.colorStrategy**: preserve=\u4FDD\u6301\u539F\u8272\uFF08\u591A\u8272/\u6E10\u53D8/\u5185\u5D4C\u4F4D\u56FE\uFF09\uFF0Ctint=\u5355\u8272\u56FE\u6807\u53EF\u7528 colorFilter",
|
|
6294
|
+
"- **\u5173\u952E\u89C4\u5219**: \u5F53 colorStrategy=preserve\uFF0C\u6216 SVG \u672C\u8EAB\u5E26 fill/fill-opacity/\u6E10\u53D8\u65F6\uFF0C**\u7981\u6B62**\u518D\u5957 ColorFilter\uFF0C\u5426\u5219\u4F1A\u51FA\u73B0\u989C\u8272\u53D1\u7070\u3001\u900F\u660E\u5EA6\u88AB\u4E8C\u6B21\u5904\u7406\u7684\u95EE\u9898",
|
|
6222
6295
|
"- **flutterSvgCode**: \u53EF\u76F4\u63A5\u7C98\u8D34\u7684 SvgPicture.string(...) \u4EE3\u7801\uFF1B\u53EA\u6709\u5355\u8272\u56FE\u6807\u624D\u4F1A\u81EA\u52A8\u9644\u5E26 ColorFilter",
|
|
6223
6296
|
"- **iconContentBounds**: \u56FE\u6807\u5185\u5BB9\u5B9E\u9645\u8FB9\u754C\uFF08vs \u5BB9\u5668\u5C3A\u5BF8\uFF09\uFF0C\u7528\u4E8E SizedBox \u7EA6\u675F",
|
|
6224
6297
|
"- **iconExportPath/iconSvgFileName**: \u82E5\u9700\u8981\u843D\u76D8\u8D44\u6E90\uFF0C\u4F7F\u7528\u63D2\u4EF6\u5EFA\u8BAE\u6587\u4EF6\u540D\u4FDD\u5B58\u5230 assets/icons/",
|
|
6298
|
+
"- **\u9875\u9762\u5C40\u90E8\u4FEE\u590D\u89C4\u5219**: \u82E5\u95EE\u9898\u53EA\u51FA\u5728\u67D0\u4E2A chevron/flag/badge/icon\uFF0C\u4F18\u5148\u91CD\u65B0\u9009\u4E2D\u8BE5\u56FE\u5C42\u6267\u884C cmd=svg \u6216\u5C40\u90E8\u5BFC\u51FA\uFF1B\u4E0D\u8981\u76F4\u63A5\u590D\u7528\u5176\u5B83\u9875\u9762\u7684\u540C\u540D\u5168\u5C40\u8D44\u4EA7",
|
|
6299
|
+
"- **\u8D44\u6E90\u590D\u7528\u6821\u9A8C**: \u65E7\u8D44\u4EA7\u5728\u590D\u7528\u524D\uFF0C\u5FC5\u987B\u6838\u5BF9 viewBox\u3001containerSize/contentSize\u3001fill-opacity \u548C\u5F53\u524D\u9875\u9762\u56FE\u5C42\u6765\u6E90\u662F\u5426\u4E00\u81F4",
|
|
6225
6300
|
"- \u8986\u76D6\u4FEE\u6B63: \u56DB\u8FB9\u8DDD\u22642pt \u6216\u5BBD\u9AD8\u2265\u7236\u5BB9\u566888% \u7684 ShapePath \u662F\u80CC\u666F\u5C42\uFF0C\u5DF2\u81EA\u52A8\u6392\u9664",
|
|
6226
6301
|
"",
|
|
6227
6302
|
"### ShapePath \u8BED\u4E49\uFF08v3.0.6 \u66F4\u65B0\uFF09",
|
|
@@ -6337,7 +6412,14 @@ var OUTPUT_GUIDE = {
|
|
|
6337
6412
|
"- **ch**: \u5B50\u5143\u7D20\u6570\u7EC4\uFF08\u9012\u5F52\uFF09",
|
|
6338
6413
|
"",
|
|
6339
6414
|
"### \u4F7F\u7528\u65B9\u5F0F",
|
|
6340
|
-
"\u5148\u8BFB\u53D6 restorationContract.blockOrder/bodyCopyLedger/hardRules \u9501\u5B9A\u7ED3\u6784\uFF0C\u518D\u7528 tree \u4E2D\u7684 flutter* \u5B57\u6BB5\u586B\u5145\u6837\u5F0F\u548C\u5E03\u5C40\u7EC6\u8282\u3002"
|
|
6415
|
+
"\u5148\u8BFB\u53D6 restorationContract.blockOrder/bodyCopyLedger/hardRules \u9501\u5B9A\u7ED3\u6784\uFF0C\u518D\u7528 tree \u4E2D\u7684 flutter* \u5B57\u6BB5\u586B\u5145\u6837\u5F0F\u548C\u5E03\u5C40\u7EC6\u8282\u3002",
|
|
6416
|
+
"",
|
|
6417
|
+
"### \u8FD8\u539F\u540E\u5F3A\u5236\u590D\u67E5\u6E05\u5355",
|
|
6418
|
+
"- \u56FE\u6807\u662F\u5426\u8BEF\u7528\u65E7\u9875\u9762\u8D44\u4EA7\uFF1A\u540C\u540D\u7BAD\u5934/\u56FE\u6807\u9ED8\u8BA4\u4E0D\u53EF\u4FE1\uFF0C\u5148\u6838\u5BF9\u6765\u6E90\u56FE\u5C42",
|
|
6419
|
+
"- SVG \u662F\u5426\u8BEF\u52A0 ColorFilter\uFF1A\u4FDD\u7559\u539F\u8272\u7684 SVG \u4E0D\u5F97\u4E8C\u6B21\u67D3\u8272",
|
|
6420
|
+
"- \u56FE\u6807\u662F\u5426\u7528\u9519\u5C3A\u5BF8\uFF1A16x16 \u69FD\u4F4D\u4E0D\u7B49\u4E8E 16x16 \u56FE\u5F62\uFF0C\u6309 xs/cs \u5206\u79BB\u5360\u4F4D\u4E0E\u6E32\u67D3",
|
|
6421
|
+
"- Bitmap \u662F\u5426\u8BEF\u5F53 SVG\uFF1ASketch Image \u56FE\u5C42\u5FC5\u987B\u5BFC\u51FA PNG + Image.asset",
|
|
6422
|
+
"- \u9875\u9762\u9AA8\u67B6\u662F\u5426\u88AB\u4E1A\u52A1\u7EC4\u4EF6\u6539\u5199\uFF1A\u6807\u9898\u3001\u9876\u90E8\u5165\u53E3\u3001\u641C\u7D22\u5757\u548C\u5E95\u5BFC\u987A\u5E8F\u5FC5\u987B\u56DE\u770B restorationContract"
|
|
6341
6423
|
].join("\n")
|
|
6342
6424
|
};
|
|
6343
6425
|
function findFirst(paths) {
|
|
@@ -6427,7 +6509,14 @@ async function sketchMeasure(args) {
|
|
|
6427
6509
|
scriptPath: tempScriptPath,
|
|
6428
6510
|
scriptLength: fullScript.length,
|
|
6429
6511
|
pluginInstall: installStatus,
|
|
6430
|
-
instruction: "\u5C06 loaderScript \u4F20\u5165 mcp_sketch_run_code({ code: loaderScript }) \u6267\u884C\u3002\u8BBE\u8BA1\u7A3F\u8FD8\u539F\u9996\u8F6E\u4F18\u5148\u4F7F\u7528 cmd=compact\uFF1B\u53EA\u6709\u5F53 compact contract \u4E0D\u8DB3\u4EE5\u89E3\u91CA\u5C40\u90E8\u5E03\u5C40\u6216\u6837\u5F0F\u65F6\uFF0C\u518D\u8865\u7528 measure/style\u3002\u8BF7\u5148\u5728 Sketch \u4E2D\u9009\u4E2D\u76EE\u6807\u753B\u677F/\u56FE\u5C42\u3002",
|
|
6512
|
+
instruction: "\u5C06 loaderScript \u4F20\u5165 mcp_sketch_run_code({ code: loaderScript }) \u6267\u884C\u3002\u8BBE\u8BA1\u7A3F\u8FD8\u539F\u9996\u8F6E\u4F18\u5148\u4F7F\u7528 cmd=compact\uFF1B\u53EA\u6709\u5F53 compact contract \u4E0D\u8DB3\u4EE5\u89E3\u91CA\u5C40\u90E8\u5E03\u5C40\u6216\u6837\u5F0F\u65F6\uFF0C\u518D\u8865\u7528 measure/style\u3002\u82E5\u504F\u5DEE\u96C6\u4E2D\u5728\u5355\u4E2A icon/svg/bitmap\uFF0C\u8BF7\u91CD\u65B0\u9009\u4E2D\u8BE5\u56FE\u5C42\u6267\u884C svg \u6216\u5C40\u90E8\u5BFC\u51FA\uFF0C\u5E76\u590D\u67E5 colorStrategy\u3001viewBox\u3001containerSize/contentSize\uFF0C\u907F\u514D\u590D\u7528\u65E7\u9875\u9762\u8D44\u4EA7\u3002\u8BF7\u5148\u5728 Sketch \u4E2D\u9009\u4E2D\u76EE\u6807\u753B\u677F/\u56FE\u5C42\u3002",
|
|
6513
|
+
restoreChecklist: [
|
|
6514
|
+
"\u5148\u6309 restorationContract \u9501\u5B9A\u9875\u9762\u9AA8\u67B6\uFF0C\u518D\u5904\u7406\u5C40\u90E8\u6837\u5F0F",
|
|
6515
|
+
"\u5355\u4E2A\u56FE\u6807\u504F\u5DEE\u4F18\u5148\u5C40\u90E8\u91CD\u5BFC\u51FA\uFF0C\u4E0D\u590D\u7528\u5176\u5B83\u9875\u9762\u65E7\u8D44\u4EA7",
|
|
6516
|
+
"preserve \u6A21\u5F0F SVG \u7981\u6B62\u8FFD\u52A0 ColorFilter",
|
|
6517
|
+
"16x16 \u69FD\u4F4D\u4E0E 6x8/12x12 \u56FE\u5F62\u8981\u5206\u5F00\u5904\u7406",
|
|
6518
|
+
"Sketch Image \u56FE\u5C42\u5BFC\u51FA PNG\uFF0C\u4E0D\u8981\u4F2A\u88C5\u6210 SVG \u4F7F\u7528"
|
|
6519
|
+
],
|
|
6431
6520
|
outputGuide: OUTPUT_GUIDE[cmd] || OUTPUT_GUIDE["measure"],
|
|
6432
6521
|
loaderScript
|
|
6433
6522
|
}, null, 2)
|
|
@@ -6444,6 +6533,20 @@ function wrapAsContent(data) {
|
|
|
6444
6533
|
}]
|
|
6445
6534
|
};
|
|
6446
6535
|
}
|
|
6536
|
+
function extractTroubleshootingKeywords(problemText) {
|
|
6537
|
+
const extractedKeywords = [];
|
|
6538
|
+
const keywordPatterns = [
|
|
6539
|
+
/\b(shadow|阴影|透出|transparency|clip|裁剪|layout|布局|spacing|间距|offset|偏移|animation|动画|color|颜色|colorfilter|fill-opacity|opacity|alpha|border|边框|svg|svgpicture|bitmap|png|icon|图标|chevron|arrow|箭头|input|输入|button|按钮|table|表格|form|表单|style|样式|viewbox|view box|design|设计稿|restore|restoration|还原)\b/gi,
|
|
6540
|
+
/(发灰|发浅|模糊|颜色不对|旧资源|复用|不居中|不对齐|尺寸不对|图标过大|图标过粗)/g
|
|
6541
|
+
];
|
|
6542
|
+
for (const pattern of keywordPatterns) {
|
|
6543
|
+
const matches = problemText.match(pattern);
|
|
6544
|
+
if (matches) {
|
|
6545
|
+
extractedKeywords.push(...matches.map((m) => m.toLowerCase()));
|
|
6546
|
+
}
|
|
6547
|
+
}
|
|
6548
|
+
return [...new Set(extractedKeywords)];
|
|
6549
|
+
}
|
|
6447
6550
|
var skillDefinitions = [
|
|
6448
6551
|
// ==================== 规范获取类 ====================
|
|
6449
6552
|
{
|
|
@@ -6711,17 +6814,7 @@ var skillDefinitions = [
|
|
|
6711
6814
|
detectedFramework = "react";
|
|
6712
6815
|
}
|
|
6713
6816
|
}
|
|
6714
|
-
const
|
|
6715
|
-
const keywordPatterns = [
|
|
6716
|
-
/\b(shadow|阴影|透出|transparency|clip|裁剪|layout|布局|animation|动画|color|颜色|border|边框|svg|icon|图标|input|输入|button|按钮|table|表格|form|表单|style|样式)\b/gi
|
|
6717
|
-
];
|
|
6718
|
-
for (const pattern of keywordPatterns) {
|
|
6719
|
-
const matches = problemText.match(pattern);
|
|
6720
|
-
if (matches) {
|
|
6721
|
-
extractedKeywords.push(...matches.map((m) => m.toLowerCase()));
|
|
6722
|
-
}
|
|
6723
|
-
}
|
|
6724
|
-
const uniqueKeywords = [...new Set(extractedKeywords)];
|
|
6817
|
+
const uniqueKeywords = extractTroubleshootingKeywords(problemText);
|
|
6725
6818
|
return wrapAsContent(await queryTroubleshootingCases({
|
|
6726
6819
|
framework: detectedFramework,
|
|
6727
6820
|
keywords: uniqueKeywords.length > 0 ? uniqueKeywords : void 0,
|