@nick848/sf-cli 1.0.18 → 1.0.20
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/cli/index.js +159 -45
- package/dist/cli/index.js.map +1 -1
- package/dist/index.js +159 -45
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +159 -45
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -1510,7 +1510,7 @@ async function executeWorkflow(ctx) {
|
|
|
1510
1510
|
for (const url of urls) {
|
|
1511
1511
|
lines.push(chalk9__default.default.gray(` \u{1F4CE} ${url}`));
|
|
1512
1512
|
try {
|
|
1513
|
-
const resource = await fetchAndAnalyzeReference(url, ctx);
|
|
1513
|
+
const resource = await fetchAndAnalyzeReference(url, ctx, activeSession.context || void 0);
|
|
1514
1514
|
activeSession.referenceResources.push(resource);
|
|
1515
1515
|
lines.push(chalk9__default.default.green(` \u2713 \u5DF2\u5206\u6790`));
|
|
1516
1516
|
activeSession.refinedRequirement += `
|
|
@@ -1584,23 +1584,38 @@ ${resource.analysis}`;
|
|
|
1584
1584
|
lines.push("");
|
|
1585
1585
|
lines.push(chalk9__default.default.cyan("\u2501\u2501\u2501 \u9636\u6BB5 6/9: OpenSpec \u89C4\u683C \u2501\u2501\u2501"));
|
|
1586
1586
|
lines.push("");
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
activeSession.
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1587
|
+
const loader = new LoadingIndicator("AI \u6B63\u5728\u62C6\u5206\u89C4\u683C");
|
|
1588
|
+
loader.start();
|
|
1589
|
+
try {
|
|
1590
|
+
activeSession.specItems = await generateSpecItemsWithAI(
|
|
1591
|
+
activeSession.refinedRequirement,
|
|
1592
|
+
activeSession.context,
|
|
1593
|
+
activeSession.bddScenarios,
|
|
1594
|
+
activeSession.clarificationQuestions,
|
|
1595
|
+
activeSession.referenceResources,
|
|
1596
|
+
ctx
|
|
1597
|
+
);
|
|
1598
|
+
loader.stop();
|
|
1599
|
+
} catch {
|
|
1600
|
+
loader.stop(chalk9__default.default.yellow(" \u26A0 \u4F7F\u7528\u57FA\u7840\u89C4\u683C\u62C6\u5206"));
|
|
1601
|
+
activeSession.specItems = generateSpecItems(
|
|
1602
|
+
activeSession.refinedRequirement,
|
|
1603
|
+
activeSession.context,
|
|
1604
|
+
activeSession.bddScenarios,
|
|
1605
|
+
activeSession.clarificationQuestions,
|
|
1606
|
+
activeSession.referenceResources
|
|
1607
|
+
);
|
|
1608
|
+
}
|
|
1594
1609
|
const specPath = await saveSpecFile(ctx.options.workingDirectory, activeSession);
|
|
1595
1610
|
lines.push(chalk9__default.default.green(" \u2713 \u89C4\u683C\u6587\u4EF6\u5DF2\u751F\u6210"));
|
|
1596
1611
|
lines.push(chalk9__default.default.gray(` \u8DEF\u5F84: ${specPath}`));
|
|
1597
1612
|
lines.push("");
|
|
1598
1613
|
lines.push(chalk9__default.default.cyan(" \u4EFB\u52A1\u6982\u89C8:"));
|
|
1599
|
-
for (const item of activeSession.specItems.slice(0,
|
|
1614
|
+
for (const item of activeSession.specItems.slice(0, 8)) {
|
|
1600
1615
|
const icon = item.priority === "high" ? "\u{1F534}" : item.priority === "medium" ? "\u{1F7E1}" : "\u{1F7E2}";
|
|
1601
1616
|
lines.push(chalk9__default.default.gray(` ${icon} [${item.id}] ${item.title}`));
|
|
1602
1617
|
}
|
|
1603
|
-
if (activeSession.specItems.length >
|
|
1618
|
+
if (activeSession.specItems.length > 8) {
|
|
1604
1619
|
lines.push(chalk9__default.default.gray(` ... \u5171 ${activeSession.specItems.length} \u4E2A\u4EFB\u52A1`));
|
|
1605
1620
|
}
|
|
1606
1621
|
lines.push("");
|
|
@@ -1747,13 +1762,15 @@ async function handleWorkflowInput(input, ctx) {
|
|
|
1747
1762
|
activeSession.bddScenarios = generateBDDScenarios(
|
|
1748
1763
|
activeSession.refinedRequirement,
|
|
1749
1764
|
activeSession.context,
|
|
1750
|
-
activeSession.clarificationQuestions
|
|
1765
|
+
activeSession.clarificationQuestions,
|
|
1766
|
+
activeSession.referenceResources
|
|
1751
1767
|
);
|
|
1752
1768
|
activeSession.specItems = generateSpecItems(
|
|
1753
1769
|
activeSession.refinedRequirement,
|
|
1754
1770
|
activeSession.context,
|
|
1755
1771
|
activeSession.bddScenarios,
|
|
1756
|
-
activeSession.clarificationQuestions
|
|
1772
|
+
activeSession.clarificationQuestions,
|
|
1773
|
+
activeSession.referenceResources
|
|
1757
1774
|
);
|
|
1758
1775
|
const specPath = await saveSpecFile(ctx.options.workingDirectory, activeSession);
|
|
1759
1776
|
return {
|
|
@@ -1921,7 +1938,12 @@ async function executeDevelopment(ctx, session) {
|
|
|
1921
1938
|
role: "system",
|
|
1922
1939
|
content: `\u4F60\u662F\u4E00\u4E2A\u4E13\u4E1A\u7684\u524D\u7AEF\u5F00\u53D1\u5DE5\u7A0B\u5E08\u3002\u8BF7\u6839\u636E\u9700\u6C42\u89C4\u683C\u751F\u6210\u4EE3\u7801\u5B9E\u73B0\u3002
|
|
1923
1940
|
|
|
1924
|
-
\u8981\
|
|
1941
|
+
\u26A0\uFE0F \u91CD\u8981\u89C4\u5219\uFF1A
|
|
1942
|
+
1. \u6280\u672F\u5B9E\u73B0\u5FC5\u987B\u4E25\u683C\u9075\u5FAA\u9879\u76EE\u73B0\u6709\u7684\u5F00\u53D1\u89C4\u8303
|
|
1943
|
+
2. \u53C2\u8003\u8D44\u6E90\uFF08\u5982\u679C\u6709\uFF09\u4EC5\u7528\u4E8E\u7406\u89E3\u4E1A\u52A1\u529F\u80FD\uFF0C\u4E0D\u8981\u590D\u5236\u5176\u6280\u672F\u5B9E\u73B0
|
|
1944
|
+
3. \u4F7F\u7528\u9879\u76EE\u6307\u5B9A\u7684\u6280\u672F\u6808\u548C\u6846\u67B6
|
|
1945
|
+
|
|
1946
|
+
\u4EE3\u7801\u8981\u6C42\uFF1A
|
|
1925
1947
|
1. \u751F\u6210\u5B8C\u6574\u3001\u53EF\u8FD0\u884C\u7684\u4EE3\u7801
|
|
1926
1948
|
2. \u9075\u5FAA\u9879\u76EE\u73B0\u6709\u7684\u4EE3\u7801\u98CE\u683C\u548C\u89C4\u8303
|
|
1927
1949
|
3. \u4F7F\u7528\u9879\u76EE\u6307\u5B9A\u7684\u6280\u672F\u6808
|
|
@@ -1933,8 +1955,8 @@ async function executeDevelopment(ctx, session) {
|
|
|
1933
1955
|
- \u6846\u67B6: ${session.context?.framework || "\u672A\u6307\u5B9A"}
|
|
1934
1956
|
- \u6280\u672F\u6808: ${session.context?.techStack.join(", ") || "\u672A\u6307\u5B9A"}
|
|
1935
1957
|
|
|
1936
|
-
${session.context?.devStandards ? `\u5F00\u53D1\u89C4\u8303\
|
|
1937
|
-
${session.context.devStandards.slice(0,
|
|
1958
|
+
${session.context?.devStandards ? `\u3010\u5FC5\u987B\u9075\u5FAA\u7684\u5F00\u53D1\u89C4\u8303\u3011
|
|
1959
|
+
${session.context.devStandards.slice(0, 2500)}` : ""}`
|
|
1938
1960
|
},
|
|
1939
1961
|
{
|
|
1940
1962
|
role: "user",
|
|
@@ -2274,21 +2296,26 @@ ${requirement}
|
|
|
2274
2296
|
## \u9879\u76EE\u4E0A\u4E0B\u6587
|
|
2275
2297
|
- \u6280\u672F\u6808: ${context.techStack?.join(", ") || "\u672A\u6307\u5B9A"}
|
|
2276
2298
|
- \u6846\u67B6: ${context.framework || "\u672A\u6307\u5B9A"}
|
|
2299
|
+
${context.devStandards ? `
|
|
2300
|
+
## \u9879\u76EE\u5F00\u53D1\u89C4\u8303\uFF08\u5FC5\u987B\u9075\u5FAA\uFF09
|
|
2301
|
+
${context.devStandards.slice(0, 2e3)}
|
|
2302
|
+
` : ""}
|
|
2277
2303
|
|
|
2278
2304
|
## \u6F84\u6E05\u95EE\u7B54
|
|
2279
2305
|
${questions.filter((q) => q.answered).map((q) => `- Q: ${q.question}
|
|
2280
2306
|
A: ${q.answer}`).join("\n")}
|
|
2281
2307
|
|
|
2282
|
-
## \u53C2\u8003\u8D44\u6E90\u5206\u6790
|
|
2283
|
-
${references.map((r) => `### ${r.url}
|
|
2284
|
-
${r.analysis}`).join("\n\n")}
|
|
2308
|
+
## \u53C2\u8003\u8D44\u6E90\u5206\u6790\uFF08\u4EC5\u4F5C\u4E1A\u52A1\u53C2\u8003\uFF0C\u6280\u672F\u5B9E\u73B0\u9075\u5FAA\u9879\u76EE\u89C4\u8303\uFF09
|
|
2309
|
+
${references.length > 0 ? references.map((r) => `### ${r.url}
|
|
2310
|
+
${r.analysis}`).join("\n\n") : "\u65E0"}
|
|
2285
2311
|
|
|
2286
2312
|
## \u8981\u6C42
|
|
2287
2313
|
1. \u6BCF\u4E2A\u529F\u80FD\u6A21\u5757\u751F\u6210\u4E00\u4E2A\u72EC\u7ACB\u7684 Feature
|
|
2288
2314
|
2. \u6BCF\u4E2A Feature \u5305\u542B\u591A\u4E2A\u5177\u4F53\u7684 Scenario
|
|
2289
2315
|
3. \u4F7F\u7528 Given-When-Then \u683C\u5F0F
|
|
2290
2316
|
4. \u573A\u666F\u8981\u8986\u76D6: \u6B63\u5E38\u6D41\u7A0B\u3001\u8FB9\u754C\u60C5\u51B5\u3001\u5F02\u5E38\u5904\u7406
|
|
2291
|
-
5. \u573A\u666F\u8981\u5177\u4F53\u53EF\u6D4B\u8BD5\uFF0C\
|
|
2317
|
+
5. \u573A\u666F\u8981\u5177\u4F53\u53EF\u6D4B\u8BD5\uFF0C\u805A\u7126\u4E1A\u52A1\u903B\u8F91
|
|
2318
|
+
6. \u26A0\uFE0F \u53C2\u8003\u8D44\u6E90\u4EC5\u7528\u4E8E\u7406\u89E3\u4E1A\u52A1\u529F\u80FD\uFF0C\u6280\u672F\u5B9E\u73B0\u5FC5\u987B\u9075\u5FAA\u9879\u76EE\u89C4\u8303
|
|
2292
2319
|
|
|
2293
2320
|
## \u8F93\u51FA\u683C\u5F0F (JSON)
|
|
2294
2321
|
\`\`\`json
|
|
@@ -2469,6 +2496,89 @@ function generateSpecItems(requirement, context, bddScenarios, questions, refere
|
|
|
2469
2496
|
});
|
|
2470
2497
|
return items;
|
|
2471
2498
|
}
|
|
2499
|
+
async function generateSpecItemsWithAI(requirement, context, bddScenarios, questions, references, ctx) {
|
|
2500
|
+
const prompt2 = `\u4F60\u662F\u4E00\u4E2A\u4E13\u4E1A\u7684\u9879\u76EE\u7ECF\u7406\u548C\u6280\u672F\u67B6\u6784\u5E08\u3002\u8BF7\u5C06\u4EE5\u4E0B\u9700\u6C42\u62C6\u5206\u4E3A\u7CBE\u7EC6\u5316\u7684\u5F00\u53D1\u4EFB\u52A1\u3002
|
|
2501
|
+
|
|
2502
|
+
## \u9700\u6C42\u63CF\u8FF0
|
|
2503
|
+
${requirement}
|
|
2504
|
+
|
|
2505
|
+
## \u9879\u76EE\u4E0A\u4E0B\u6587
|
|
2506
|
+
- \u6280\u672F\u6808: ${context.techStack?.join(", ") || "TypeScript"}
|
|
2507
|
+
- \u6846\u67B6: ${context.framework || "\u672A\u6307\u5B9A"}
|
|
2508
|
+
${context.devStandards ? `
|
|
2509
|
+
## \u5F00\u53D1\u89C4\u8303\uFF08\u5FC5\u987B\u9075\u5FAA\uFF09
|
|
2510
|
+
${context.devStandards.slice(0, 2e3)}
|
|
2511
|
+
` : ""}
|
|
2512
|
+
|
|
2513
|
+
## BDD \u573A\u666F\u53C2\u8003
|
|
2514
|
+
${bddScenarios.map((s) => `- Feature: ${s.feature} (${s.scenarios.length} \u4E2A\u573A\u666F)`).join("\n")}
|
|
2515
|
+
|
|
2516
|
+
## \u6F84\u6E05\u4FE1\u606F
|
|
2517
|
+
${questions.filter((q) => q.answered).map((q) => `- ${q.question}: ${q.answer}`).join("\n") || "\u65E0"}
|
|
2518
|
+
|
|
2519
|
+
## \u62C6\u5206\u8981\u6C42
|
|
2520
|
+
|
|
2521
|
+
\u8BF7\u5C06\u9700\u6C42\u62C6\u5206\u4E3A **\u7EC6\u7C92\u5EA6\u7684\u5F00\u53D1\u4EFB\u52A1**\uFF0C\u6BCF\u4E2A\u4EFB\u52A1\u5E94\u8BE5\uFF1A
|
|
2522
|
+
1. **\u5355\u4E00\u804C\u8D23** - \u4E00\u4E2A\u4EFB\u52A1\u53EA\u505A\u4E00\u4EF6\u4E8B
|
|
2523
|
+
2. **\u53EF\u72EC\u7ACB\u6D4B\u8BD5** - \u6709\u660E\u786E\u7684\u9A8C\u6536\u6807\u51C6
|
|
2524
|
+
3. **2-4\u5C0F\u65F6\u53EF\u5B8C\u6210** - \u5982\u679C\u4EFB\u52A1\u592A\u5927\uFF0C\u7EE7\u7EED\u62C6\u5206
|
|
2525
|
+
4. **\u6709\u660E\u786E\u7684\u8F93\u5165\u8F93\u51FA** - \u6E05\u695A\u77E5\u9053\u9700\u8981\u4EC0\u4E48\u3001\u4EA7\u51FA\u4EC0\u4E48
|
|
2526
|
+
|
|
2527
|
+
## \u8F93\u51FA\u683C\u5F0F (JSON)
|
|
2528
|
+
\`\`\`json
|
|
2529
|
+
[
|
|
2530
|
+
{
|
|
2531
|
+
"id": "T001",
|
|
2532
|
+
"title": "\u4EFB\u52A1\u6807\u9898\uFF08\u7B80\u77ED\u660E\u786E\uFF09",
|
|
2533
|
+
"description": "\u8BE6\u7EC6\u63CF\u8FF0\uFF1A\u8981\u505A\u4EC0\u4E48\u3001\u5982\u4F55\u505A\u3001\u9A8C\u6536\u6807\u51C6",
|
|
2534
|
+
"priority": "high",
|
|
2535
|
+
"estimatedHours": 2,
|
|
2536
|
+
"dependencies": [],
|
|
2537
|
+
"acceptanceCriteria": ["\u9A8C\u6536\u6807\u51C61", "\u9A8C\u6536\u6807\u51C62"]
|
|
2538
|
+
}
|
|
2539
|
+
]
|
|
2540
|
+
\`\`\`
|
|
2541
|
+
|
|
2542
|
+
## \u62C6\u5206\u5EFA\u8BAE
|
|
2543
|
+
\u5BF9\u4E8E\u590D\u6742\u529F\u80FD\uFF08\u5982\u7B97\u6CD5\u7C7B\uFF09\uFF0C\u5E94\u8BE5\u62C6\u5206\u4E3A\uFF1A
|
|
2544
|
+
- \u6570\u636E\u7ED3\u6784/\u6A21\u578B\u5B9A\u4E49
|
|
2545
|
+
- \u6838\u5FC3\u7B97\u6CD5\u5206\u6B65\u5B9E\u73B0\uFF08\u6BCF\u4E2A\u8BA1\u7B97\u6B65\u9AA4\u4E00\u4E2A\u4EFB\u52A1\uFF09
|
|
2546
|
+
- \u8F93\u5165\u9A8C\u8BC1
|
|
2547
|
+
- \u7ED3\u679C\u683C\u5F0F\u5316
|
|
2548
|
+
- UI \u5C55\u793A\u7EC4\u4EF6
|
|
2549
|
+
- \u96C6\u6210\u6D4B\u8BD5
|
|
2550
|
+
|
|
2551
|
+
\u8BF7\u76F4\u63A5\u8F93\u51FA JSON \u6570\u7EC4\u3002`;
|
|
2552
|
+
const loader = new LoadingIndicator("AI \u6B63\u5728\u62C6\u5206\u89C4\u683C");
|
|
2553
|
+
loader.start();
|
|
2554
|
+
try {
|
|
2555
|
+
const response = await ctx.modelService.sendMessage([
|
|
2556
|
+
{ role: "user", content: prompt2 }
|
|
2557
|
+
], {
|
|
2558
|
+
temperature: 0.3,
|
|
2559
|
+
maxTokens: 4e3,
|
|
2560
|
+
timeout: 12e4
|
|
2561
|
+
});
|
|
2562
|
+
const jsonMatch = response.content.match(/```json\s*([\s\S]*?)```/);
|
|
2563
|
+
if (jsonMatch) {
|
|
2564
|
+
const parsed = JSON.parse(jsonMatch[1].trim());
|
|
2565
|
+
loader.stop(chalk9__default.default.green(` \u2713 \u5DF2\u62C6\u5206 ${parsed.length} \u4E2A\u4EFB\u52A1`));
|
|
2566
|
+
return parsed.map((item) => ({
|
|
2567
|
+
id: item.id || `T${String(parsed.indexOf(item) + 1).padStart(3, "0")}`,
|
|
2568
|
+
title: item.title,
|
|
2569
|
+
description: item.description,
|
|
2570
|
+
priority: item.priority || "medium",
|
|
2571
|
+
files: [],
|
|
2572
|
+
tests: item.acceptanceCriteria || []
|
|
2573
|
+
}));
|
|
2574
|
+
}
|
|
2575
|
+
loader.stop(chalk9__default.default.yellow(" \u26A0 \u89E3\u6790\u5931\u8D25\uFF0C\u4F7F\u7528\u57FA\u7840\u62C6\u5206"));
|
|
2576
|
+
return generateSpecItems(requirement, context, bddScenarios, questions, references);
|
|
2577
|
+
} catch (error) {
|
|
2578
|
+
loader.stop(chalk9__default.default.yellow(" \u26A0 AI \u62C6\u5206\u5931\u8D25\uFF0C\u4F7F\u7528\u57FA\u7840\u62C6\u5206"));
|
|
2579
|
+
return generateSpecItems(requirement, context, bddScenarios, questions, references);
|
|
2580
|
+
}
|
|
2581
|
+
}
|
|
2472
2582
|
async function saveSpecFile(workingDir, session) {
|
|
2473
2583
|
const specDir = path5__namespace.join(workingDir, "openspec", "changes");
|
|
2474
2584
|
await fs5__namespace.mkdir(specDir, { recursive: true });
|
|
@@ -2705,7 +2815,7 @@ function extractUrls(text) {
|
|
|
2705
2815
|
const matches = text.match(urlRegex);
|
|
2706
2816
|
return matches ? [...new Set(matches)] : [];
|
|
2707
2817
|
}
|
|
2708
|
-
async function fetchAndAnalyzeReference(url, ctx) {
|
|
2818
|
+
async function fetchAndAnalyzeReference(url, ctx, projectContext) {
|
|
2709
2819
|
const type = detectResourceType(url);
|
|
2710
2820
|
let content = "";
|
|
2711
2821
|
let analysis = "";
|
|
@@ -2720,7 +2830,7 @@ async function fetchAndAnalyzeReference(url, ctx) {
|
|
|
2720
2830
|
}
|
|
2721
2831
|
content = await response.text();
|
|
2722
2832
|
if (ctx.modelService.getCurrentModel()) {
|
|
2723
|
-
analysis = await analyzeReferenceContent(url, content, type, ctx);
|
|
2833
|
+
analysis = await analyzeReferenceContent(url, content, type, ctx, projectContext);
|
|
2724
2834
|
} else {
|
|
2725
2835
|
analysis = extractBasicInfo(content, type);
|
|
2726
2836
|
}
|
|
@@ -2741,9 +2851,20 @@ function detectResourceType(url) {
|
|
|
2741
2851
|
}
|
|
2742
2852
|
return "webpage";
|
|
2743
2853
|
}
|
|
2744
|
-
async function analyzeReferenceContent(url, content, type, ctx) {
|
|
2854
|
+
async function analyzeReferenceContent(url, content, type, ctx, projectContext) {
|
|
2745
2855
|
const prompt2 = `
|
|
2746
|
-
\u4F60\u662F\u4E00\u4E2A\u4E13\u4E1A\u7684\u4EA7\u54C1\u7ECF\u7406\
|
|
2856
|
+
\u4F60\u662F\u4E00\u4E2A\u4E13\u4E1A\u7684\u4EA7\u54C1\u7ECF\u7406\u3002\u8BF7\u5206\u6790\u4EE5\u4E0B\u53C2\u8003\u8D44\u6E90\uFF0C\u63D0\u53D6\u4E1A\u52A1\u529F\u80FD\u548C\u754C\u9762\u7ED3\u6784\u3002
|
|
2857
|
+
|
|
2858
|
+
## \u91CD\u8981\u8BF4\u660E
|
|
2859
|
+
\u26A0\uFE0F \u6B64\u5206\u6790\u4EC5\u7528\u4E8E\u7406\u89E3\u4E1A\u52A1\u529F\u80FD\uFF0C**\u6280\u672F\u5B9E\u73B0\u65B9\u6848\u5FC5\u987B\u9075\u5FAA\u5F53\u524D\u9879\u76EE\u7684\u5F00\u53D1\u89C4\u8303**\u3002
|
|
2860
|
+
\u53C2\u8003\u8D44\u6E90\u4E2D\u7684\u6280\u672F\u6808\u3001\u6846\u67B6\u3001\u4EE3\u7801\u98CE\u683C\u4EC5\u4F9B\u53C2\u8003\uFF0C\u5B9E\u9645\u5F00\u53D1\u5E94\u4F7F\u7528\u9879\u76EE\u73B0\u6709\u89C4\u8303\u3002
|
|
2861
|
+
|
|
2862
|
+
${projectContext ? `## \u5F53\u524D\u9879\u76EE\u89C4\u8303
|
|
2863
|
+
- \u9879\u76EE\u540D\u79F0: ${projectContext.name}
|
|
2864
|
+
- \u6280\u672F\u6808: ${projectContext.techStack.join(", ") || "\u672A\u6307\u5B9A"}
|
|
2865
|
+
- \u6846\u67B6: ${projectContext.framework || "\u672A\u6307\u5B9A"}
|
|
2866
|
+
- \u5F00\u53D1\u89C4\u8303\u6458\u8981: ${projectContext.devStandards?.slice(0, 1500) || "\u672A\u6307\u5B9A"}
|
|
2867
|
+
` : ""}
|
|
2747
2868
|
|
|
2748
2869
|
## \u53C2\u8003\u8D44\u6E90\u4FE1\u606F
|
|
2749
2870
|
- URL: ${url}
|
|
@@ -2756,38 +2877,31 @@ ${content.slice(0, 8e3)}
|
|
|
2756
2877
|
|
|
2757
2878
|
## \u5206\u6790\u8981\u6C42
|
|
2758
2879
|
|
|
2759
|
-
\u8BF7\u6309\u7167\u4EE5\u4E0B\u7ED3\u6784\u8FDB\u884C\
|
|
2880
|
+
\u8BF7\u6309\u7167\u4EE5\u4E0B\u7ED3\u6784\u8FDB\u884C\u5206\u6790\uFF1A
|
|
2760
2881
|
|
|
2761
|
-
### 1. \u4E1A\u52A1\u529F\u80FD\u5206\u6790
|
|
2762
|
-
- \u6838\u5FC3\u4E1A\u52A1\u529F\u80FD\u662F\u4EC0\u4E48\uFF1F\uFF08\u8BE6\u7EC6\u63CF\u8FF0\uFF09
|
|
2763
|
-
- \
|
|
2764
|
-
- \u4E1A\u52A1\
|
|
2765
|
-
- \u6570\u636E\u8F93\u5165\u8F93\u51FA\u662F\u4EC0\u4E48\uFF1F
|
|
2882
|
+
### 1. \u4E1A\u52A1\u529F\u80FD\u5206\u6790\uFF08\u91CD\u70B9\uFF09
|
|
2883
|
+
- \u6838\u5FC3\u4E1A\u52A1\u529F\u80FD\u662F\u4EC0\u4E48\uFF1F\uFF08\u8BE6\u7EC6\u63CF\u8FF0\u7528\u6237\u80FD\u505A\u4EC0\u4E48\uFF09
|
|
2884
|
+
- \u4E1A\u52A1\u6D41\u7A0B\u662F\u4EC0\u4E48\uFF1F\uFF08\u7528\u6237\u64CD\u4F5C\u6B65\u9AA4\uFF09
|
|
2885
|
+
- \u4E1A\u52A1\u89C4\u5219\u662F\u4EC0\u4E48\uFF1F\uFF08\u8F93\u5165\u9650\u5236\u3001\u8BA1\u7B97\u89C4\u5219\u7B49\uFF09
|
|
2766
2886
|
|
|
2767
2887
|
### 2. UI/UX \u7ED3\u6784\u5206\u6790
|
|
2768
|
-
- \u9875\u9762\u5E03\u5C40\u7ED3\u6784
|
|
2769
|
-
- \u4E3B\u8981\u7EC4\u4EF6\u6709\u54EA\u4E9B\uFF1F
|
|
2770
|
-
- \u7EC4\u4EF6\u4E4B\u95F4\u7684\u5173\u7CFB
|
|
2888
|
+
- \u9875\u9762\u5E03\u5C40\u7ED3\u6784\uFF08\u4E0D\u6D89\u53CA\u5177\u4F53\u6280\u672F\u5B9E\u73B0\uFF09
|
|
2889
|
+
- \u4E3B\u8981\u7EC4\u4EF6/\u6A21\u5757\u6709\u54EA\u4E9B\uFF1F
|
|
2771
2890
|
- \u4EA4\u4E92\u65B9\u5F0F\uFF08\u70B9\u51FB\u3001\u8F93\u5165\u3001\u62D6\u62FD\u7B49\uFF09
|
|
2772
2891
|
|
|
2773
2892
|
### 3. \u6570\u636E\u6A21\u578B\u5206\u6790
|
|
2774
|
-
- \u9700\u8981\u54EA\u4E9B\u6570\u636E\uFF1F
|
|
2893
|
+
- \u9700\u8981\u54EA\u4E9B\u6570\u636E\u5B57\u6BB5\uFF1F
|
|
2775
2894
|
- \u6570\u636E\u4E4B\u95F4\u7684\u5173\u7CFB
|
|
2776
2895
|
- \u6570\u636E\u6765\u6E90\uFF08\u7528\u6237\u8F93\u5165/\u8BA1\u7B97/API\uFF09
|
|
2777
2896
|
|
|
2778
2897
|
### 4. \u529F\u80FD\u62C6\u5206\u5EFA\u8BAE
|
|
2779
|
-
\
|
|
2780
|
-
- \u4EFB\u52A1\u540D\u79F0
|
|
2781
|
-
- \u4EFB\u52A1\u63CF\u8FF0
|
|
2782
|
-
- \
|
|
2783
|
-
|
|
2784
|
-
|
|
2785
|
-
|
|
2786
|
-
- \u63A8\u8350\u7684\u6280\u672F\u65B9\u6848
|
|
2787
|
-
- \u9700\u8981\u6CE8\u610F\u7684\u6280\u672F\u96BE\u70B9
|
|
2788
|
-
- \u6027\u80FD\u4F18\u5316\u5EFA\u8BAE
|
|
2789
|
-
|
|
2790
|
-
\u8BF7\u4EE5 Markdown \u683C\u5F0F\u8F93\u51FA\uFF0C\u91CD\u70B9\u7A81\u51FA\u4E1A\u52A1\u903B\u8F91\u548C\u529F\u80FD\u5B9E\u73B0\u7EC6\u8282\u3002
|
|
2898
|
+
\u5C06\u529F\u80FD\u62C6\u5206\u4E3A\u53EF\u72EC\u7ACB\u5F00\u53D1\u7684\u4EFB\u52A1\uFF1A
|
|
2899
|
+
- \u4EFB\u52A1\u540D\u79F0\uFF08\u7B80\u77ED\u660E\u786E\uFF09
|
|
2900
|
+
- \u4EFB\u52A1\u63CF\u8FF0\uFF08\u4E1A\u52A1\u89D2\u5EA6\uFF09
|
|
2901
|
+
- \u9A8C\u6536\u6807\u51C6
|
|
2902
|
+
|
|
2903
|
+
\u6CE8\u610F\uFF1A\u8BF7\u4EE5 Markdown \u683C\u5F0F\u8F93\u51FA\uFF0C\u91CD\u70B9\u7A81\u51FA**\u4E1A\u52A1\u903B\u8F91**\u548C**\u529F\u80FD\u7279\u6027**\u3002
|
|
2904
|
+
\u6280\u672F\u5B9E\u73B0\u65B9\u6848\u7531\u9879\u76EE\u89C4\u8303\u51B3\u5B9A\uFF0C\u6B64\u5904\u4E0D\u6D89\u53CA\u3002
|
|
2791
2905
|
`;
|
|
2792
2906
|
const loader = new LoadingIndicator("AI \u6B63\u5728\u5206\u6790\u53C2\u8003\u8D44\u6E90");
|
|
2793
2907
|
loader.start();
|