@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/index.mjs CHANGED
@@ -155,7 +155,7 @@ async function executeWorkflow(ctx) {
155
155
  for (const url of urls) {
156
156
  lines.push(chalk9.gray(` \u{1F4CE} ${url}`));
157
157
  try {
158
- const resource = await fetchAndAnalyzeReference(url, ctx);
158
+ const resource = await fetchAndAnalyzeReference(url, ctx, activeSession.context || void 0);
159
159
  activeSession.referenceResources.push(resource);
160
160
  lines.push(chalk9.green(` \u2713 \u5DF2\u5206\u6790`));
161
161
  activeSession.refinedRequirement += `
@@ -566,7 +566,12 @@ async function executeDevelopment(ctx, session) {
566
566
  role: "system",
567
567
  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
568
568
 
569
- \u8981\u6C42\uFF1A
569
+ \u26A0\uFE0F \u91CD\u8981\u89C4\u5219\uFF1A
570
+ 1. \u6280\u672F\u5B9E\u73B0\u5FC5\u987B\u4E25\u683C\u9075\u5FAA\u9879\u76EE\u73B0\u6709\u7684\u5F00\u53D1\u89C4\u8303
571
+ 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
572
+ 3. \u4F7F\u7528\u9879\u76EE\u6307\u5B9A\u7684\u6280\u672F\u6808\u548C\u6846\u67B6
573
+
574
+ \u4EE3\u7801\u8981\u6C42\uFF1A
570
575
  1. \u751F\u6210\u5B8C\u6574\u3001\u53EF\u8FD0\u884C\u7684\u4EE3\u7801
571
576
  2. \u9075\u5FAA\u9879\u76EE\u73B0\u6709\u7684\u4EE3\u7801\u98CE\u683C\u548C\u89C4\u8303
572
577
  3. \u4F7F\u7528\u9879\u76EE\u6307\u5B9A\u7684\u6280\u672F\u6808
@@ -578,8 +583,8 @@ async function executeDevelopment(ctx, session) {
578
583
  - \u6846\u67B6: ${session.context?.framework || "\u672A\u6307\u5B9A"}
579
584
  - \u6280\u672F\u6808: ${session.context?.techStack.join(", ") || "\u672A\u6307\u5B9A"}
580
585
 
581
- ${session.context?.devStandards ? `\u5F00\u53D1\u89C4\u8303\uFF1A
582
- ${session.context.devStandards.slice(0, 2e3)}` : ""}`
586
+ ${session.context?.devStandards ? `\u3010\u5FC5\u987B\u9075\u5FAA\u7684\u5F00\u53D1\u89C4\u8303\u3011
587
+ ${session.context.devStandards.slice(0, 2500)}` : ""}`
583
588
  },
584
589
  {
585
590
  role: "user",
@@ -919,21 +924,26 @@ ${requirement}
919
924
  ## \u9879\u76EE\u4E0A\u4E0B\u6587
920
925
  - \u6280\u672F\u6808: ${context.techStack?.join(", ") || "\u672A\u6307\u5B9A"}
921
926
  - \u6846\u67B6: ${context.framework || "\u672A\u6307\u5B9A"}
927
+ ${context.devStandards ? `
928
+ ## \u9879\u76EE\u5F00\u53D1\u89C4\u8303\uFF08\u5FC5\u987B\u9075\u5FAA\uFF09
929
+ ${context.devStandards.slice(0, 2e3)}
930
+ ` : ""}
922
931
 
923
932
  ## \u6F84\u6E05\u95EE\u7B54
924
933
  ${questions.filter((q) => q.answered).map((q) => `- Q: ${q.question}
925
934
  A: ${q.answer}`).join("\n")}
926
935
 
927
- ## \u53C2\u8003\u8D44\u6E90\u5206\u6790
928
- ${references.map((r) => `### ${r.url}
929
- ${r.analysis}`).join("\n\n")}
936
+ ## \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
937
+ ${references.length > 0 ? references.map((r) => `### ${r.url}
938
+ ${r.analysis}`).join("\n\n") : "\u65E0"}
930
939
 
931
940
  ## \u8981\u6C42
932
941
  1. \u6BCF\u4E2A\u529F\u80FD\u6A21\u5757\u751F\u6210\u4E00\u4E2A\u72EC\u7ACB\u7684 Feature
933
942
  2. \u6BCF\u4E2A Feature \u5305\u542B\u591A\u4E2A\u5177\u4F53\u7684 Scenario
934
943
  3. \u4F7F\u7528 Given-When-Then \u683C\u5F0F
935
944
  4. \u573A\u666F\u8981\u8986\u76D6: \u6B63\u5E38\u6D41\u7A0B\u3001\u8FB9\u754C\u60C5\u51B5\u3001\u5F02\u5E38\u5904\u7406
936
- 5. \u573A\u666F\u8981\u5177\u4F53\u53EF\u6D4B\u8BD5\uFF0C\u4E0D\u8981\u6CDB\u6CDB\u800C\u8C08
945
+ 5. \u573A\u666F\u8981\u5177\u4F53\u53EF\u6D4B\u8BD5\uFF0C\u805A\u7126\u4E1A\u52A1\u903B\u8F91
946
+ 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
937
947
 
938
948
  ## \u8F93\u51FA\u683C\u5F0F (JSON)
939
949
  \`\`\`json
@@ -1350,7 +1360,7 @@ function extractUrls(text) {
1350
1360
  const matches = text.match(urlRegex);
1351
1361
  return matches ? [...new Set(matches)] : [];
1352
1362
  }
1353
- async function fetchAndAnalyzeReference(url, ctx) {
1363
+ async function fetchAndAnalyzeReference(url, ctx, projectContext) {
1354
1364
  const type = detectResourceType(url);
1355
1365
  let content = "";
1356
1366
  let analysis = "";
@@ -1365,7 +1375,7 @@ async function fetchAndAnalyzeReference(url, ctx) {
1365
1375
  }
1366
1376
  content = await response.text();
1367
1377
  if (ctx.modelService.getCurrentModel()) {
1368
- analysis = await analyzeReferenceContent(url, content, type, ctx);
1378
+ analysis = await analyzeReferenceContent(url, content, type, ctx, projectContext);
1369
1379
  } else {
1370
1380
  analysis = extractBasicInfo(content, type);
1371
1381
  }
@@ -1386,9 +1396,20 @@ function detectResourceType(url) {
1386
1396
  }
1387
1397
  return "webpage";
1388
1398
  }
1389
- async function analyzeReferenceContent(url, content, type, ctx) {
1399
+ async function analyzeReferenceContent(url, content, type, ctx, projectContext) {
1390
1400
  const prompt2 = `
1391
- \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
1401
+ \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
1402
+
1403
+ ## \u91CD\u8981\u8BF4\u660E
1404
+ \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
1405
+ \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
1406
+
1407
+ ${projectContext ? `## \u5F53\u524D\u9879\u76EE\u89C4\u8303
1408
+ - \u9879\u76EE\u540D\u79F0: ${projectContext.name}
1409
+ - \u6280\u672F\u6808: ${projectContext.techStack.join(", ") || "\u672A\u6307\u5B9A"}
1410
+ - \u6846\u67B6: ${projectContext.framework || "\u672A\u6307\u5B9A"}
1411
+ - \u5F00\u53D1\u89C4\u8303\u6458\u8981: ${projectContext.devStandards?.slice(0, 1500) || "\u672A\u6307\u5B9A"}
1412
+ ` : ""}
1392
1413
 
1393
1414
  ## \u53C2\u8003\u8D44\u6E90\u4FE1\u606F
1394
1415
  - URL: ${url}
@@ -1401,38 +1422,31 @@ ${content.slice(0, 8e3)}
1401
1422
 
1402
1423
  ## \u5206\u6790\u8981\u6C42
1403
1424
 
1404
- \u8BF7\u6309\u7167\u4EE5\u4E0B\u7ED3\u6784\u8FDB\u884C\u8BE6\u7EC6\u5206\u6790\uFF1A
1425
+ \u8BF7\u6309\u7167\u4EE5\u4E0B\u7ED3\u6784\u8FDB\u884C\u5206\u6790\uFF1A
1405
1426
 
1406
- ### 1. \u4E1A\u52A1\u529F\u80FD\u5206\u6790
1407
- - \u6838\u5FC3\u4E1A\u52A1\u529F\u80FD\u662F\u4EC0\u4E48\uFF1F\uFF08\u8BE6\u7EC6\u63CF\u8FF0\uFF09
1408
- - \u7528\u6237\u53EF\u4EE5\u505A\u4EC0\u4E48\u64CD\u4F5C\uFF1F
1409
- - \u4E1A\u52A1\u6D41\u7A0B\u662F\u4EC0\u4E48\uFF1F
1410
- - \u6570\u636E\u8F93\u5165\u8F93\u51FA\u662F\u4EC0\u4E48\uFF1F
1427
+ ### 1. \u4E1A\u52A1\u529F\u80FD\u5206\u6790\uFF08\u91CD\u70B9\uFF09
1428
+ - \u6838\u5FC3\u4E1A\u52A1\u529F\u80FD\u662F\u4EC0\u4E48\uFF1F\uFF08\u8BE6\u7EC6\u63CF\u8FF0\u7528\u6237\u80FD\u505A\u4EC0\u4E48\uFF09
1429
+ - \u4E1A\u52A1\u6D41\u7A0B\u662F\u4EC0\u4E48\uFF1F\uFF08\u7528\u6237\u64CD\u4F5C\u6B65\u9AA4\uFF09
1430
+ - \u4E1A\u52A1\u89C4\u5219\u662F\u4EC0\u4E48\uFF1F\uFF08\u8F93\u5165\u9650\u5236\u3001\u8BA1\u7B97\u89C4\u5219\u7B49\uFF09
1411
1431
 
1412
1432
  ### 2. UI/UX \u7ED3\u6784\u5206\u6790
1413
- - \u9875\u9762\u5E03\u5C40\u7ED3\u6784
1414
- - \u4E3B\u8981\u7EC4\u4EF6\u6709\u54EA\u4E9B\uFF1F
1415
- - \u7EC4\u4EF6\u4E4B\u95F4\u7684\u5173\u7CFB
1433
+ - \u9875\u9762\u5E03\u5C40\u7ED3\u6784\uFF08\u4E0D\u6D89\u53CA\u5177\u4F53\u6280\u672F\u5B9E\u73B0\uFF09
1434
+ - \u4E3B\u8981\u7EC4\u4EF6/\u6A21\u5757\u6709\u54EA\u4E9B\uFF1F
1416
1435
  - \u4EA4\u4E92\u65B9\u5F0F\uFF08\u70B9\u51FB\u3001\u8F93\u5165\u3001\u62D6\u62FD\u7B49\uFF09
1417
1436
 
1418
1437
  ### 3. \u6570\u636E\u6A21\u578B\u5206\u6790
1419
- - \u9700\u8981\u54EA\u4E9B\u6570\u636E\uFF1F
1438
+ - \u9700\u8981\u54EA\u4E9B\u6570\u636E\u5B57\u6BB5\uFF1F
1420
1439
  - \u6570\u636E\u4E4B\u95F4\u7684\u5173\u7CFB
1421
1440
  - \u6570\u636E\u6765\u6E90\uFF08\u7528\u6237\u8F93\u5165/\u8BA1\u7B97/API\uFF09
1422
1441
 
1423
1442
  ### 4. \u529F\u80FD\u62C6\u5206\u5EFA\u8BAE
1424
- \u8BF7\u5C06\u529F\u80FD\u62C6\u5206\u4E3A\u53EF\u72EC\u7ACB\u5F00\u53D1\u7684\u4EFB\u52A1\uFF0C\u6BCF\u4E2A\u4EFB\u52A1\u5305\u542B\uFF1A
1425
- - \u4EFB\u52A1\u540D\u79F0
1426
- - \u4EFB\u52A1\u63CF\u8FF0
1427
- - \u6280\u672F\u8981\u70B9
1428
- - \u4F9D\u8D56\u5173\u7CFB
1429
-
1430
- ### 5. \u6280\u672F\u5B9E\u73B0\u5EFA\u8BAE
1431
- - \u63A8\u8350\u7684\u6280\u672F\u65B9\u6848
1432
- - \u9700\u8981\u6CE8\u610F\u7684\u6280\u672F\u96BE\u70B9
1433
- - \u6027\u80FD\u4F18\u5316\u5EFA\u8BAE
1434
-
1435
- \u8BF7\u4EE5 Markdown \u683C\u5F0F\u8F93\u51FA\uFF0C\u91CD\u70B9\u7A81\u51FA\u4E1A\u52A1\u903B\u8F91\u548C\u529F\u80FD\u5B9E\u73B0\u7EC6\u8282\u3002
1443
+ \u5C06\u529F\u80FD\u62C6\u5206\u4E3A\u53EF\u72EC\u7ACB\u5F00\u53D1\u7684\u4EFB\u52A1\uFF1A
1444
+ - \u4EFB\u52A1\u540D\u79F0\uFF08\u7B80\u77ED\u660E\u786E\uFF09
1445
+ - \u4EFB\u52A1\u63CF\u8FF0\uFF08\u4E1A\u52A1\u89D2\u5EA6\uFF09
1446
+ - \u9A8C\u6536\u6807\u51C6
1447
+
1448
+ \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
1449
+ \u6280\u672F\u5B9E\u73B0\u65B9\u6848\u7531\u9879\u76EE\u89C4\u8303\u51B3\u5B9A\uFF0C\u6B64\u5904\u4E0D\u6D89\u53CA\u3002
1436
1450
  `;
1437
1451
  const loader = new LoadingIndicator("AI \u6B63\u5728\u5206\u6790\u53C2\u8003\u8D44\u6E90");
1438
1452
  loader.start();