@nick848/sf-cli 1.0.18 → 1.0.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/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 += `
@@ -1921,7 +1921,12 @@ async function executeDevelopment(ctx, session) {
1921
1921
  role: "system",
1922
1922
  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
1923
 
1924
- \u8981\u6C42\uFF1A
1924
+ \u26A0\uFE0F \u91CD\u8981\u89C4\u5219\uFF1A
1925
+ 1. \u6280\u672F\u5B9E\u73B0\u5FC5\u987B\u4E25\u683C\u9075\u5FAA\u9879\u76EE\u73B0\u6709\u7684\u5F00\u53D1\u89C4\u8303
1926
+ 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
1927
+ 3. \u4F7F\u7528\u9879\u76EE\u6307\u5B9A\u7684\u6280\u672F\u6808\u548C\u6846\u67B6
1928
+
1929
+ \u4EE3\u7801\u8981\u6C42\uFF1A
1925
1930
  1. \u751F\u6210\u5B8C\u6574\u3001\u53EF\u8FD0\u884C\u7684\u4EE3\u7801
1926
1931
  2. \u9075\u5FAA\u9879\u76EE\u73B0\u6709\u7684\u4EE3\u7801\u98CE\u683C\u548C\u89C4\u8303
1927
1932
  3. \u4F7F\u7528\u9879\u76EE\u6307\u5B9A\u7684\u6280\u672F\u6808
@@ -1933,8 +1938,8 @@ async function executeDevelopment(ctx, session) {
1933
1938
  - \u6846\u67B6: ${session.context?.framework || "\u672A\u6307\u5B9A"}
1934
1939
  - \u6280\u672F\u6808: ${session.context?.techStack.join(", ") || "\u672A\u6307\u5B9A"}
1935
1940
 
1936
- ${session.context?.devStandards ? `\u5F00\u53D1\u89C4\u8303\uFF1A
1937
- ${session.context.devStandards.slice(0, 2e3)}` : ""}`
1941
+ ${session.context?.devStandards ? `\u3010\u5FC5\u987B\u9075\u5FAA\u7684\u5F00\u53D1\u89C4\u8303\u3011
1942
+ ${session.context.devStandards.slice(0, 2500)}` : ""}`
1938
1943
  },
1939
1944
  {
1940
1945
  role: "user",
@@ -2274,21 +2279,26 @@ ${requirement}
2274
2279
  ## \u9879\u76EE\u4E0A\u4E0B\u6587
2275
2280
  - \u6280\u672F\u6808: ${context.techStack?.join(", ") || "\u672A\u6307\u5B9A"}
2276
2281
  - \u6846\u67B6: ${context.framework || "\u672A\u6307\u5B9A"}
2282
+ ${context.devStandards ? `
2283
+ ## \u9879\u76EE\u5F00\u53D1\u89C4\u8303\uFF08\u5FC5\u987B\u9075\u5FAA\uFF09
2284
+ ${context.devStandards.slice(0, 2e3)}
2285
+ ` : ""}
2277
2286
 
2278
2287
  ## \u6F84\u6E05\u95EE\u7B54
2279
2288
  ${questions.filter((q) => q.answered).map((q) => `- Q: ${q.question}
2280
2289
  A: ${q.answer}`).join("\n")}
2281
2290
 
2282
- ## \u53C2\u8003\u8D44\u6E90\u5206\u6790
2283
- ${references.map((r) => `### ${r.url}
2284
- ${r.analysis}`).join("\n\n")}
2291
+ ## \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
2292
+ ${references.length > 0 ? references.map((r) => `### ${r.url}
2293
+ ${r.analysis}`).join("\n\n") : "\u65E0"}
2285
2294
 
2286
2295
  ## \u8981\u6C42
2287
2296
  1. \u6BCF\u4E2A\u529F\u80FD\u6A21\u5757\u751F\u6210\u4E00\u4E2A\u72EC\u7ACB\u7684 Feature
2288
2297
  2. \u6BCF\u4E2A Feature \u5305\u542B\u591A\u4E2A\u5177\u4F53\u7684 Scenario
2289
2298
  3. \u4F7F\u7528 Given-When-Then \u683C\u5F0F
2290
2299
  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\u4E0D\u8981\u6CDB\u6CDB\u800C\u8C08
2300
+ 5. \u573A\u666F\u8981\u5177\u4F53\u53EF\u6D4B\u8BD5\uFF0C\u805A\u7126\u4E1A\u52A1\u903B\u8F91
2301
+ 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
2302
 
2293
2303
  ## \u8F93\u51FA\u683C\u5F0F (JSON)
2294
2304
  \`\`\`json
@@ -2705,7 +2715,7 @@ function extractUrls(text) {
2705
2715
  const matches = text.match(urlRegex);
2706
2716
  return matches ? [...new Set(matches)] : [];
2707
2717
  }
2708
- async function fetchAndAnalyzeReference(url, ctx) {
2718
+ async function fetchAndAnalyzeReference(url, ctx, projectContext) {
2709
2719
  const type = detectResourceType(url);
2710
2720
  let content = "";
2711
2721
  let analysis = "";
@@ -2720,7 +2730,7 @@ async function fetchAndAnalyzeReference(url, ctx) {
2720
2730
  }
2721
2731
  content = await response.text();
2722
2732
  if (ctx.modelService.getCurrentModel()) {
2723
- analysis = await analyzeReferenceContent(url, content, type, ctx);
2733
+ analysis = await analyzeReferenceContent(url, content, type, ctx, projectContext);
2724
2734
  } else {
2725
2735
  analysis = extractBasicInfo(content, type);
2726
2736
  }
@@ -2741,9 +2751,20 @@ function detectResourceType(url) {
2741
2751
  }
2742
2752
  return "webpage";
2743
2753
  }
2744
- async function analyzeReferenceContent(url, content, type, ctx) {
2754
+ async function analyzeReferenceContent(url, content, type, ctx, projectContext) {
2745
2755
  const prompt2 = `
2746
- \u4F60\u662F\u4E00\u4E2A\u4E13\u4E1A\u7684\u4EA7\u54C1\u7ECF\u7406\u548C\u524D\u7AEF\u5F00\u53D1\u5DE5\u7A0B\u5E08\u3002\u8BF7\u6DF1\u5165\u5206\u6790\u4EE5\u4E0B\u53C2\u8003\u8D44\u6E90\uFF0C\u63D0\u53D6\u4E1A\u52A1\u529F\u80FD\u548C\u6280\u672F\u5B9E\u73B0\u7EC6\u8282\u3002
2756
+ \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
2757
+
2758
+ ## \u91CD\u8981\u8BF4\u660E
2759
+ \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
2760
+ \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
2761
+
2762
+ ${projectContext ? `## \u5F53\u524D\u9879\u76EE\u89C4\u8303
2763
+ - \u9879\u76EE\u540D\u79F0: ${projectContext.name}
2764
+ - \u6280\u672F\u6808: ${projectContext.techStack.join(", ") || "\u672A\u6307\u5B9A"}
2765
+ - \u6846\u67B6: ${projectContext.framework || "\u672A\u6307\u5B9A"}
2766
+ - \u5F00\u53D1\u89C4\u8303\u6458\u8981: ${projectContext.devStandards?.slice(0, 1500) || "\u672A\u6307\u5B9A"}
2767
+ ` : ""}
2747
2768
 
2748
2769
  ## \u53C2\u8003\u8D44\u6E90\u4FE1\u606F
2749
2770
  - URL: ${url}
@@ -2756,38 +2777,31 @@ ${content.slice(0, 8e3)}
2756
2777
 
2757
2778
  ## \u5206\u6790\u8981\u6C42
2758
2779
 
2759
- \u8BF7\u6309\u7167\u4EE5\u4E0B\u7ED3\u6784\u8FDB\u884C\u8BE6\u7EC6\u5206\u6790\uFF1A
2780
+ \u8BF7\u6309\u7167\u4EE5\u4E0B\u7ED3\u6784\u8FDB\u884C\u5206\u6790\uFF1A
2760
2781
 
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
- - \u7528\u6237\u53EF\u4EE5\u505A\u4EC0\u4E48\u64CD\u4F5C\uFF1F
2764
- - \u4E1A\u52A1\u6D41\u7A0B\u662F\u4EC0\u4E48\uFF1F
2765
- - \u6570\u636E\u8F93\u5165\u8F93\u51FA\u662F\u4EC0\u4E48\uFF1F
2782
+ ### 1. \u4E1A\u52A1\u529F\u80FD\u5206\u6790\uFF08\u91CD\u70B9\uFF09
2783
+ - \u6838\u5FC3\u4E1A\u52A1\u529F\u80FD\u662F\u4EC0\u4E48\uFF1F\uFF08\u8BE6\u7EC6\u63CF\u8FF0\u7528\u6237\u80FD\u505A\u4EC0\u4E48\uFF09
2784
+ - \u4E1A\u52A1\u6D41\u7A0B\u662F\u4EC0\u4E48\uFF1F\uFF08\u7528\u6237\u64CD\u4F5C\u6B65\u9AA4\uFF09
2785
+ - \u4E1A\u52A1\u89C4\u5219\u662F\u4EC0\u4E48\uFF1F\uFF08\u8F93\u5165\u9650\u5236\u3001\u8BA1\u7B97\u89C4\u5219\u7B49\uFF09
2766
2786
 
2767
2787
  ### 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
2788
+ - \u9875\u9762\u5E03\u5C40\u7ED3\u6784\uFF08\u4E0D\u6D89\u53CA\u5177\u4F53\u6280\u672F\u5B9E\u73B0\uFF09
2789
+ - \u4E3B\u8981\u7EC4\u4EF6/\u6A21\u5757\u6709\u54EA\u4E9B\uFF1F
2771
2790
  - \u4EA4\u4E92\u65B9\u5F0F\uFF08\u70B9\u51FB\u3001\u8F93\u5165\u3001\u62D6\u62FD\u7B49\uFF09
2772
2791
 
2773
2792
  ### 3. \u6570\u636E\u6A21\u578B\u5206\u6790
2774
- - \u9700\u8981\u54EA\u4E9B\u6570\u636E\uFF1F
2793
+ - \u9700\u8981\u54EA\u4E9B\u6570\u636E\u5B57\u6BB5\uFF1F
2775
2794
  - \u6570\u636E\u4E4B\u95F4\u7684\u5173\u7CFB
2776
2795
  - \u6570\u636E\u6765\u6E90\uFF08\u7528\u6237\u8F93\u5165/\u8BA1\u7B97/API\uFF09
2777
2796
 
2778
2797
  ### 4. \u529F\u80FD\u62C6\u5206\u5EFA\u8BAE
2779
- \u8BF7\u5C06\u529F\u80FD\u62C6\u5206\u4E3A\u53EF\u72EC\u7ACB\u5F00\u53D1\u7684\u4EFB\u52A1\uFF0C\u6BCF\u4E2A\u4EFB\u52A1\u5305\u542B\uFF1A
2780
- - \u4EFB\u52A1\u540D\u79F0
2781
- - \u4EFB\u52A1\u63CF\u8FF0
2782
- - \u6280\u672F\u8981\u70B9
2783
- - \u4F9D\u8D56\u5173\u7CFB
2784
-
2785
- ### 5. \u6280\u672F\u5B9E\u73B0\u5EFA\u8BAE
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
2798
+ \u5C06\u529F\u80FD\u62C6\u5206\u4E3A\u53EF\u72EC\u7ACB\u5F00\u53D1\u7684\u4EFB\u52A1\uFF1A
2799
+ - \u4EFB\u52A1\u540D\u79F0\uFF08\u7B80\u77ED\u660E\u786E\uFF09
2800
+ - \u4EFB\u52A1\u63CF\u8FF0\uFF08\u4E1A\u52A1\u89D2\u5EA6\uFF09
2801
+ - \u9A8C\u6536\u6807\u51C6
2802
+
2803
+ \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
2804
+ \u6280\u672F\u5B9E\u73B0\u65B9\u6848\u7531\u9879\u76EE\u89C4\u8303\u51B3\u5B9A\uFF0C\u6B64\u5904\u4E0D\u6D89\u53CA\u3002
2791
2805
  `;
2792
2806
  const loader = new LoadingIndicator("AI \u6B63\u5728\u5206\u6790\u53C2\u8003\u8D44\u6E90");
2793
2807
  loader.start();