intention-coding 0.3.0 → 0.3.2

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
@@ -1911,7 +1911,12 @@ flowchart TD
1911
1911
  });
1912
1912
  var config = __webpack_require__("./src/config.ts");
1913
1913
  var external_path_ = __webpack_require__("path");
1914
- const logDir = (0, config.WR)() + '/logs';
1914
+ let logDir;
1915
+ try {
1916
+ logDir = (0, config.WR)() + '/logs';
1917
+ } catch (error) {
1918
+ logDir = './.aico/logs';
1919
+ }
1915
1920
  const levels = {
1916
1921
  error: 0,
1917
1922
  warn: 1,
@@ -2127,7 +2132,7 @@ flowchart TD
2127
2132
  Authorization: "Bearer sk-fp8wJSigZBEP3x8y6MAZWGPuVIHJ5PDZtX9lMQQk8hjP2R0u"
2128
2133
  },
2129
2134
  body: JSON.stringify({
2130
- model: 'moonshot-v1-128k-vision-preview',
2135
+ model: 'kimi-latest',
2131
2136
  messages: [
2132
2137
  ...system_prompt ? [
2133
2138
  {
@@ -6227,7 +6232,6 @@ const projectRulesPromptTemplate = `
6227
6232
 
6228
6233
  ## \u{9879}\u{76EE}\u{4FE1}\u{606F}
6229
6234
  - **\u{9879}\u{76EE}\u{540D}\u{79F0}**: {{projectName}}
6230
- - **\u{5206}\u{6790}\u{6DF1}\u{5EA6}**: {{analysisDepth}}
6231
6235
  - **\u{5305}\u{542B}\u{793A}\u{4F8B}**: {{includeExamples}}
6232
6236
 
6233
6237
  ## \u{9879}\u{76EE}\u{67B6}\u{6784}\u{5206}\u{6790}
@@ -6240,6 +6244,12 @@ const projectRulesPromptTemplate = `
6240
6244
  ## \u{4EFB}\u{52A1}\u{8981}\u{6C42}
6241
6245
  \u{8BF7}\u{57FA}\u{4E8E}\u{9879}\u{76EE}\u{67B6}\u{6784}\u{5206}\u{6790}\u{FF0C}\u{667A}\u{80FD}\u{8BC6}\u{522B}\u{9879}\u{76EE}\u{7684}\u{6280}\u{672F}\u{6808}\u{548C}\u{8BED}\u{8A00}\u{7279}\u{5F81}\u{FF0C}\u{7136}\u{540E}\u{751F}\u{6210}\u{4E00}\u{4EFD}\u{5B8C}\u{6574}\u{7684}project_rules.md\u{6587}\u{4EF6}\u{5185}\u{5BB9}\u{3002}
6242
6246
 
6247
+ ### \u{5904}\u{7406}\u{957F}\u{5185}\u{5BB9}\u{7684}\u{7279}\u{6B8A}\u{8BF4}\u{660E}
6248
+ \u{5F53}\u{9879}\u{76EE}\u{67B6}\u{6784}\u{5206}\u{6790}\u{5185}\u{5BB9}\u{8F83}\u{957F}\u{65F6}\u{FF0C}\u{8BF7}\u{91C7}\u{7528}\u{5206}\u{6BB5}\u{5904}\u{7406}\u{7684}\u{65B9}\u{5F0F}\u{FF1A}
6249
+ 1. \u{9996}\u{5148}\u{901A}\u{8BFB}\u{5168}\u{90E8}\u{5185}\u{5BB9}\u{FF0C}\u{7406}\u{89E3}\u{6574}\u{4F53}\u{67B6}\u{6784}
6250
+ 2. \u{7136}\u{540E}\u{9010}\u{6BB5}\u{5206}\u{6790}\u{FF0C}\u{6BCF}\u{6BB5}\u{5904}\u{7406}\u{5B8C}\u{6210}\u{540E}\u{8FDB}\u{884C}\u{603B}\u{7ED3}
6251
+ 3. \u{6700}\u{7EC8}\u{6574}\u{5408}\u{6240}\u{6709}\u{5206}\u{6790}\u{7ED3}\u{679C}\u{751F}\u{6210}\u{5B8C}\u{6574}\u{7684}\u{89C4}\u{5219}\u{6587}\u{4EF6}
6252
+
6243
6253
  ### \u{6280}\u{672F}\u{6808}\u{8BC6}\u{522B}\u{548C}\u{5206}\u{6790}\u{89C4}\u{5219}
6244
6254
  \u{8BF7}\u{5148}\u{4ED4}\u{7EC6}\u{5206}\u{6790}\u{9879}\u{76EE}\u{7ED3}\u{6784}\u{FF0C}\u{8BC6}\u{522B}\u{51FA}\u{9879}\u{76EE}\u{7684}\u{6280}\u{672F}\u{6808}\u{548C}\u{67B6}\u{6784}\u{6A21}\u{5F0F}\u{FF1A}
6245
6255
 
@@ -6291,8 +6301,10 @@ const projectRulesPromptTemplate = `
6291
6301
 
6292
6302
  #### 6. \u{5F00}\u{53D1}\u{6700}\u{4F73}\u{5B9E}\u{8DF5}
6293
6303
  \u{9488}\u{5BF9}\u{9879}\u{76EE}\u{6280}\u{672F}\u{6808}\u{7684}\u{5177}\u{4F53}\u{5B9E}\u{8DF5}\u{FF1A}
6294
- - \u{4EE3}\u{7801}\u{590D}\u{7528}\u{539F}\u{5219}
6304
+ - \u{7EC4}\u{4EF6}\u{5316}\u{8BBE}\u{8BA1}\u{89C4}\u{5219}
6305
+ - \u{5DE5}\u{5177}\u{548C}\u{5E93}\u{7684}\u{4F7F}\u{7528}\u{89C4}\u{8303}
6295
6306
  - \u{7B2C}\u{4E09}\u{65B9}\u{5E93}\u{4F7F}\u{7528}\u{89C4}\u{8303}
6307
+ - \u{5355}\u{5143}\u{6D4B}\u{8BD5}\u{65B9}\u{6CD5}
6296
6308
 
6297
6309
  #### 7. \u{4EE3}\u{7801}\u{793A}\u{4F8B}\u{548C}\u{6A21}\u{677F}
6298
6310
  \u{5305}\u{542B}\u{9879}\u{76EE}\u{4E2D}\u{5E38}\u{7528}\u{7684}\u{4EE3}\u{7801}\u{6A21}\u{5F0F}\u{FF1A}
@@ -6313,12 +6325,6 @@ const projectRulesPromptTemplate = `
6313
6325
  const ProjectTemplateParams = esm.z.object({
6314
6326
  project_name: esm.z.string().optional().describe("\u9879\u76EE\u540D\u79F0\uFF0C\u7528\u4E8E\u751F\u6210\u6587\u4EF6\u540D"),
6315
6327
  project_path: esm.z.string().optional().describe("\u9879\u76EE\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u7528\u4E8E\u6307\u5B9A\u8981\u5206\u6790\u7684\u9879\u76EE\u76EE\u5F55"),
6316
- analysis_depth: esm.z["enum"]([
6317
- 'basic',
6318
- 'detailed',
6319
- 'comprehensive'
6320
- ]).optional().default('detailed').describe("\u5206\u6790\u6DF1\u5EA6"),
6321
- include_examples: esm.z.boolean().optional().default(true).describe("\u662F\u5426\u5305\u542B\u4EE3\u7801\u793A\u4F8B"),
6322
6328
  custom_rules: esm.z.string().optional().describe("\u81EA\u5B9A\u4E49\u89C4\u5219\u5185\u5BB9")
6323
6329
  });
6324
6330
  const initProjectStandard = {
@@ -6326,61 +6332,26 @@ const initProjectStandard = {
6326
6332
  description: "\u5206\u6790\u9879\u76EE\u67B6\u6784\u5E76\u751F\u6210\u5F00\u53D1\u89C4\u8303",
6327
6333
  parameters: ProjectTemplateParams,
6328
6334
  execute: async (args)=>{
6329
- const { project_name = 'current-project', project_path, analysis_depth = 'detailed', include_examples = true, custom_rules } = args;
6335
+ const { project_name = 'current-project', project_path, custom_rules } = args;
6330
6336
  try {
6331
6337
  utils_logger.k.info("\u5F00\u59CB\u751F\u6210\u9879\u76EE\u67B6\u6784\u5206\u6790\u6587\u6863");
6332
6338
  const projectAnalysisPath = await packProject(project_path);
6333
6339
  const projectAnalysis = await promises_["default"].readFile(projectAnalysisPath, 'utf-8');
6334
- utils_logger.k.info("\u9879\u76EE\u67B6\u6784\u5206\u6790\u6587\u6863\u8BFB\u53D6\u6210\u529F", {
6335
- path: projectAnalysisPath,
6336
- contentLength: projectAnalysis.length
6340
+ const projectRulesPromptData = generateProjectRulesPrompt(projectAnalysis, project_name, custom_rules);
6341
+ const aicoDir = (0, src_config.WR)();
6342
+ utils_logger.k.info("\u786E\u4FDD.aico\u76EE\u5F55\u5B58\u5728", {
6343
+ aicoDir
6337
6344
  });
6338
- const projectRulesPromptData = generateProjectRulesPrompt(projectAnalysis, project_name, analysis_depth, include_examples, custom_rules);
6339
- const result = {
6340
- success: true,
6341
- message: "\u9879\u76EE\u5F00\u53D1\u89C4\u8303\u5185\u5BB9\u751F\u6210\u5B8C\u6210",
6342
- project_info: {
6343
- name: project_name,
6344
- analysis_depth: analysis_depth,
6345
- include_examples: include_examples,
6346
- analysis_file: external_path_["default"].resolve(projectAnalysisPath)
6347
- },
6348
- generated_rules: {
6349
- projectrules: {
6350
- filename: 'project_rules.md',
6351
- content: '',
6352
- description: "\u9879\u76EE\u5F00\u53D1\u89C4\u5219\u6587\u4EF6",
6353
- suggested_path: '.aico/project_rules.md',
6354
- prompt_data: projectRulesPromptData
6355
- }
6356
- },
6357
- instructions: {
6358
- overview: "\u8BF7\u4F7F\u7528\u4EE5\u4E0B\u63D0\u793A\u8BCD\u8C03\u7528AI\u670D\u52A1\u751F\u6210\u9879\u76EE\u89C4\u5219\u5185\u5BB9\uFF1A",
6359
- workflow: [
6360
- "1. \u4F7F\u7528prompt_data\u4E2D\u7684\u63D0\u793A\u8BCD\u8C03\u7528AI\u670D\u52A1\u751F\u6210project_rules.md\u5185\u5BB9",
6361
- "2. \u5C06\u751F\u6210\u7684\u5185\u5BB9\u4FDD\u5B58\u5230.aico/project_rules.md\u8DEF\u5F84",
6362
- "3. \u6839\u636E\u9700\u8981\u8C03\u6574\u548C\u4F18\u5316\u751F\u6210\u7684\u5185\u5BB9"
6363
- ],
6364
- actions: [
6365
- {
6366
- action: 'generate_and_create_file',
6367
- file: '.aico/project_rules.md',
6368
- description: "\u9879\u76EE\u5F00\u53D1\u89C4\u5219\u6587\u4EF6",
6369
- has_prompt_data: true,
6370
- prompt_task: 'generate_project_rules',
6371
- generation_config: projectRulesPromptData.config
6372
- }
6373
- ]
6374
- }
6375
- };
6376
- return JSON.stringify(result, null, 2);
6345
+ await promises_["default"].mkdir(aicoDir, {
6346
+ recursive: true
6347
+ });
6348
+ return JSON.stringify(projectRulesPromptData, null, 2);
6377
6349
  } catch (error) {
6378
6350
  const errorMsg = error instanceof Error ? error.message : String(error);
6379
6351
  utils_logger.k.error(`\u{9879}\u{76EE}\u{89C4}\u{8303}\u{5185}\u{5BB9}\u{751F}\u{6210}\u{5931}\u{8D25}: ${errorMsg}`, {
6380
6352
  tool: "initialize-project-standard",
6381
6353
  project_name,
6382
6354
  project_path,
6383
- analysis_depth,
6384
6355
  error: errorMsg
6385
6356
  });
6386
6357
  const errorResult = {
@@ -6388,31 +6359,23 @@ const initProjectStandard = {
6388
6359
  message: "\u9879\u76EE\u89C4\u8303\u5185\u5BB9\u751F\u6210\u5931\u8D25",
6389
6360
  error: errorMsg,
6390
6361
  project_info: {
6391
- name: project_name,
6392
- analysis_depth: analysis_depth
6362
+ name: project_name
6393
6363
  }
6394
6364
  };
6395
6365
  return JSON.stringify(errorResult, null, 2);
6396
6366
  }
6397
6367
  }
6398
6368
  };
6399
- function generateProjectRulesPrompt(projectAnalysis, projectName, analysisDepth, includeExamples, customRules) {
6369
+ function generateProjectRulesPrompt(projectAnalysis, projectName, customRules) {
6400
6370
  utils_logger.k.info("\u751F\u6210\u9879\u76EE\u89C4\u5219\u6587\u4EF6\u63D0\u793A\u8BCD\u6570\u636E", {
6401
- projectName,
6402
- analysisDepth
6371
+ projectName
6403
6372
  });
6404
6373
  const customRulesSection = customRules ? `## \u{81EA}\u{5B9A}\u{4E49}\u{89C4}\u{5219}\u{8981}\u{6C42}
6405
6374
  ${customRules}` : '';
6406
- let prompt = projectRulesPromptTemplate.replace('{{projectName}}', projectName).replace('{{analysisDepth}}', analysisDepth).replace('{{includeExamples}}', includeExamples ? "\u662F" : "\u5426").replace('{{projectAnalysis}}', projectAnalysis).replace('{{customRulesSection}}', customRulesSection);
6375
+ let prompt = projectRulesPromptTemplate.replace('{{projectName}}', projectName).replace('{{projectAnalysis}}', projectAnalysis).replace('{{customRulesSection}}', customRulesSection);
6407
6376
  return {
6408
6377
  task: 'generate_project_rules',
6409
- prompt: prompt,
6410
- systemPrompt: "",
6411
- config: {
6412
- model: "default",
6413
- maxTokens: 4000,
6414
- temperature: 0.7
6415
- }
6378
+ prompt: prompt
6416
6379
  };
6417
6380
  }
6418
6381
  var openai = __webpack_require__("./src/utils/openai.ts");
@@ -7478,7 +7441,7 @@ sequenceDiagram
7478
7441
  \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{7528}\u{6237}: \u{6E32}\u{67D3}\u{9875}\u{9762}\u{5185}\u{5BB9}
7479
7442
  \`\`\`
7480
7443
 
7481
- ### 9.2 \u{66FF}\u{4EE3}\u{6D41}\u{7A0B}\u{FF08}\u{4E0D}\u{540C}\u{6709}\u{6548}\u{8DEF}\u{5F84}\u{FF09}
7444
+ ### 9.2 \u{65B9}\u{6848}\u{4E8C}\u{FF1A}\u{66FF}\u{4EE3}\u{6D41}\u{7A0B}\u{FF08}\u{4E0D}\u{540C}\u{6709}\u{6548}\u{8DEF}\u{5F84}\u{FF09}
7482
7445
 
7483
7446
  #### 9.2.1 \u{7EC4}\u{4EF6}\u{8BBE}\u{8BA1}\u{89C4}\u{8303}\u{6D41}\u{7A0B}
7484
7447
  \`\`\`mermaid
@@ -8029,26 +7992,6 @@ const appTemplatePrompt = `\u{4F60}\u{662F}\u{4E00}\u{4F4D}\u{4E13}\u{4E1A}\u{76
8029
7992
  ### 9.3 \u{7CFB}\u{7EDF}\u{6743}\u{9650}\u{8981}\u{6C42}
8030
7993
  [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}APP\u{9700}\u{8981}\u{7533}\u{8BF7}\u{7684}\u{7CFB}\u{7EDF}\u{6743}\u{9650}\u{53CA}\u{5176}\u{4F7F}\u{7528}\u{573A}\u{666F}]
8031
7994
 
8032
- ### 9.4 \u{8BBE}\u{5907}\u{7279}\u{6027}\u{9002}\u{914D}
8033
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{5BF9}\u{4E0D}\u{540C}\u{8BBE}\u{5907}\u{7279}\u{6027}\u{FF08}\u{5982}\u{5218}\u{6D77}\u{5C4F}\u{3001}\u{5168}\u{9762}\u{5C4F}\u{7B49}\u{FF09}\u{7684}\u{9002}\u{914D}\u{8981}\u{6C42}]
8034
-
8035
- ## 10. \u{6027}\u{80FD}\u{4F18}\u{5316}\u{8981}\u{6C42}
8036
-
8037
- ### 10.1 \u{5185}\u{5B58}\u{4F18}\u{5316}
8038
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{5185}\u{5B58}\u{4F7F}\u{7528}\u{4F18}\u{5316}\u{8981}\u{6C42}]
8039
-
8040
- ### 10.2 \u{7F51}\u{7EDC}\u{4F18}\u{5316}
8041
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{7F51}\u{7EDC}\u{8BF7}\u{6C42}\u{4F18}\u{5316}\u{8981}\u{6C42}]
8042
-
8043
- ### 10.3 \u{6E32}\u{67D3}\u{4F18}\u{5316}
8044
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{6E32}\u{67D3}\u{4F18}\u{5316}\u{8981}\u{6C42}]
8045
-
8046
- ### 10.4 \u{542F}\u{52A8}\u{4F18}\u{5316}
8047
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{5E94}\u{7528}\u{542F}\u{52A8}\u{901F}\u{5EA6}\u{4F18}\u{5316}\u{8981}\u{6C42}]
8048
-
8049
- ### 10.5 \u{7535}\u{91CF}\u{4F18}\u{5316}
8050
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{5E94}\u{7528}\u{7535}\u{91CF}\u{6D88}\u{8017}\u{4F18}\u{5316}\u{8981}\u{6C42}]
8051
-
8052
7995
  ## 11. \u{4E1A}\u{52A1}\u{5BF9}\u{8C61}\u{65F6}\u{5E8F}\u{56FE}
8053
7996
 
8054
7997
  \`\`\`mermaid
@@ -8102,34 +8045,9 @@ sequenceDiagram
8102
8045
  \u{79FB}\u{52A8}\u{7AEF}APP->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{9875}\u{9762}\u{8BBF}\u{95EE}\u{65E5}\u{5FD7}
8103
8046
  \`\`\`
8104
8047
 
8105
- ### 11.2 \u{66FF}\u{4EE3}\u{6D41}\u{7A0B}\u{FF08}\u{4E0D}\u{540C}\u{6709}\u{6548}\u{8DEF}\u{5F84}\u{FF09}
8106
-
8107
- #### 11.2.1 \u{5E73}\u{53F0}\u{7279}\u{6027}\u{9002}\u{914D}\u{6D41}\u{7A0B}
8108
- \`\`\`mermaid
8109
- sequenceDiagram
8110
- participant \u{7528}\u{6237}
8111
- participant \u{79FB}\u{52A8}\u{7AEF}APP
8112
- participant \u{8BBE}\u{5907}\u{4FE1}\u{606F}\u{68C0}\u{6D4B}\u{5668}
8113
- participant \u{5E73}\u{53F0}\u{9002}\u{914D}\u{5668}
8114
- participant UI\u{6E32}\u{67D3}\u{5F15}\u{64CE}
8115
-
8116
- \u{7528}\u{6237}->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{542F}\u{52A8}\u{5E94}\u{7528}
8117
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{8BBE}\u{5907}\u{4FE1}\u{606F}\u{68C0}\u{6D4B}\u{5668}: \u{68C0}\u{6D4B}\u{8BBE}\u{5907}\u{4FE1}\u{606F}
8118
- \u{8BBE}\u{5907}\u{4FE1}\u{606F}\u{68C0}\u{6D4B}\u{5668}-->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8FD4}\u{56DE}\u{8BBE}\u{5907}\u{4FE1}\u{606F}
8119
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{5E73}\u{53F0}\u{9002}\u{914D}\u{5668}: \u{8BF7}\u{6C42}\u{5E73}\u{53F0}\u{9002}\u{914D}
8120
- alt iOS\u{8BBE}\u{5907}
8121
- \u{5E73}\u{53F0}\u{9002}\u{914D}\u{5668}->>\u{5E73}\u{53F0}\u{9002}\u{914D}\u{5668}: \u{5E94}\u{7528}iOS\u{8BBE}\u{8BA1}\u{89C4}\u{8303}
8122
- \u{5E73}\u{53F0}\u{9002}\u{914D}\u{5668}-->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8FD4}\u{56DE}iOS\u{9002}\u{914D}\u{914D}\u{7F6E}
8123
- else Android\u{8BBE}\u{5907}
8124
- \u{5E73}\u{53F0}\u{9002}\u{914D}\u{5668}->>\u{5E73}\u{53F0}\u{9002}\u{914D}\u{5668}: \u{5E94}\u{7528}Android\u{8BBE}\u{8BA1}\u{89C4}\u{8303}
8125
- \u{5E73}\u{53F0}\u{9002}\u{914D}\u{5668}-->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8FD4}\u{56DE}Android\u{9002}\u{914D}\u{914D}\u{7F6E}
8126
- end
8127
- \u{79FB}\u{52A8}\u{7AEF}APP->>UI\u{6E32}\u{67D3}\u{5F15}\u{64CE}: \u{5E94}\u{7528}\u{9002}\u{914D}\u{914D}\u{7F6E}
8128
- UI\u{6E32}\u{67D3}\u{5F15}\u{64CE}-->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8FD4}\u{56DE}\u{6E32}\u{67D3}\u{7ED3}\u{679C}
8129
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{7528}\u{6237}: \u{663E}\u{793A}\u{9002}\u{914D}\u{540E}\u{7684}\u{754C}\u{9762}
8130
- \`\`\`
8048
+ ### 11.2 \u{65B9}\u{6848}\u{4E8C}\u{FF1A}\u{66FF}\u{4EE3}\u{6D41}\u{7A0B}\u{FF08}\u{4E0D}\u{540C}\u{6709}\u{6548}\u{8DEF}\u{5F84}\u{FF09}
8131
8049
 
8132
- #### 11.2.2 \u{624B}\u{52BF}\u{4EA4}\u{4E92}\u{8BBE}\u{8BA1}\u{6D41}\u{7A0B}
8050
+ #### 11.2.1 \u{624B}\u{52BF}\u{4EA4}\u{4E92}\u{8BBE}\u{8BA1}\u{6D41}\u{7A0B}
8133
8051
  \`\`\`mermaid
8134
8052
  sequenceDiagram
8135
8053
  participant \u{7528}\u{6237}
@@ -8148,7 +8066,7 @@ sequenceDiagram
8148
8066
  \u{79FB}\u{52A8}\u{7AEF}APP->>\u{7528}\u{6237}: \u{53CD}\u{9988}\u{624B}\u{52BF}\u{64CD}\u{4F5C}\u{7ED3}\u{679C}
8149
8067
  \`\`\`
8150
8068
 
8151
- #### 11.2.3 \u{7EC4}\u{4EF6}\u{8BBE}\u{8BA1}\u{89C4}\u{8303}\u{6D41}\u{7A0B}
8069
+ #### 11.2.2 \u{7EC4}\u{4EF6}\u{8BBE}\u{8BA1}\u{89C4}\u{8303}\u{6D41}\u{7A0B}
8152
8070
  \`\`\`mermaid
8153
8071
  sequenceDiagram
8154
8072
  participant \u{79FB}\u{52A8}\u{7AEF}APP
@@ -8210,25 +8128,6 @@ sequenceDiagram
8210
8128
  \u{79FB}\u{52A8}\u{7AEF}APP->>\u{7528}\u{6237}: \u{663E}\u{793A}\u{6743}\u{9650}\u{8BF7}\u{6C42}\u{63D0}\u{793A}
8211
8129
  \`\`\`
8212
8130
 
8213
- #### 11.3.3 \u{65E0}\u{6548}UI\u{7EC4}\u{4EF6}\u{9519}\u{8BEF}
8214
- \`\`\`mermaid
8215
- sequenceDiagram
8216
- participant \u{79FB}\u{52A8}\u{7AEF}APP
8217
- participant \u{7EC4}\u{4EF6}\u{5E93}
8218
- participant \u{8BBE}\u{8BA1}\u{7CFB}\u{7EDF}
8219
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
8220
- participant \u{76D1}\u{63A7}\u{670D}\u{52A1}
8221
-
8222
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{7EC4}\u{4EF6}\u{5E93}: \u{8BF7}\u{6C42}\u{672A}\u{77E5}\u{7EC4}\u{4EF6}
8223
- \u{7EC4}\u{4EF6}\u{5E93}-->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8FD4}\u{56DE}\u{7EC4}\u{4EF6}\u{4E0D}\u{5B58}\u{5728}\u{9519}\u{8BEF}
8224
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{8BBE}\u{8BA1}\u{7CFB}\u{7EDF}: \u{83B7}\u{53D6}\u{9ED8}\u{8BA4}\u{7EC4}\u{4EF6}\u{89C4}\u{8303}
8225
- \u{8BBE}\u{8BA1}\u{7CFB}\u{7EDF}-->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8FD4}\u{56DE}\u{9ED8}\u{8BA4}\u{7EC4}\u{4EF6}\u{5B9E}\u{73B0}
8226
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{4F7F}\u{7528}\u{9ED8}\u{8BA4}\u{7EC4}\u{4EF6}\u{66FF}\u{4EE3}
8227
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{7EC4}\u{4EF6}\u{9519}\u{8BEF}\u{65E5}\u{5FD7}
8228
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{76D1}\u{63A7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{9519}\u{8BEF}\u{6307}\u{6807}
8229
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{7528}\u{6237}: \u{5C55}\u{793A}\u{9ED8}\u{8BA4}\u{7EC4}\u{4EF6}
8230
- \`\`\`
8231
-
8232
8131
  ### 11.4 \u{8FB9}\u{7F18}\u{60C5}\u{51B5}\u{6D41}\u{7A0B}\u{FF08}\u{5E76}\u{53D1}\u{3001}\u{8D85}\u{65F6}\u{7B49}\u{FF09}
8233
8132
 
8234
8133
  #### 11.4.1 \u{79BB}\u{7EBF}\u{529F}\u{80FD}\u{5904}\u{7406}
@@ -8250,30 +8149,7 @@ sequenceDiagram
8250
8149
  \u{79FB}\u{52A8}\u{7AEF}APP->>\u{7528}\u{6237}: \u{663E}\u{793A}\u{79BB}\u{7EBF}\u{64CD}\u{4F5C}\u{6210}\u{529F}\u{63D0}\u{793A}
8251
8150
  \`\`\`
8252
8151
 
8253
- #### 11.4.2 \u{7535}\u{6C60}\u{4F18}\u{5316}\u{5904}\u{7406}
8254
- \`\`\`mermaid
8255
- sequenceDiagram
8256
- participant \u{7528}\u{6237}
8257
- participant \u{79FB}\u{52A8}\u{7AEF}APP
8258
- participant \u{7535}\u{6C60}\u{4F18}\u{5316}\u{68C0}\u{6D4B}\u{5668}
8259
- participant \u{6027}\u{80FD}\u{4F18}\u{5316}\u{5668}
8260
- participant \u{540E}\u{53F0}\u{4EFB}\u{52A1}\u{7BA1}\u{7406}\u{5668}
8261
-
8262
- \u{7528}\u{6237}->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{542F}\u{52A8}\u{5E94}\u{7528}
8263
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{7535}\u{6C60}\u{4F18}\u{5316}\u{68C0}\u{6D4B}\u{5668}: \u{68C0}\u{67E5}\u{7535}\u{6C60}\u{4F18}\u{5316}\u{8BBE}\u{7F6E}
8264
- \u{7535}\u{6C60}\u{4F18}\u{5316}\u{68C0}\u{6D4B}\u{5668}-->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8FD4}\u{56DE}\u{7535}\u{6C60}\u{4F18}\u{5316}\u{72B6}\u{6001}
8265
- alt \u{7535}\u{6C60}\u{4F18}\u{5316}\u{5DF2}\u{542F}\u{7528}
8266
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{6027}\u{80FD}\u{4F18}\u{5316}\u{5668}: \u{5E94}\u{7528}\u{7535}\u{6C60}\u{4F18}\u{5316}\u{7B56}\u{7565}
8267
- \u{6027}\u{80FD}\u{4F18}\u{5316}\u{5668}->>\u{540E}\u{53F0}\u{4EFB}\u{52A1}\u{7BA1}\u{7406}\u{5668}: \u{9650}\u{5236}\u{540E}\u{53F0}\u{4EFB}\u{52A1}
8268
- \u{540E}\u{53F0}\u{4EFB}\u{52A1}\u{7BA1}\u{7406}\u{5668}-->>\u{6027}\u{80FD}\u{4F18}\u{5316}\u{5668}: \u{8FD4}\u{56DE}\u{9650}\u{5236}\u{7ED3}\u{679C}
8269
- \u{6027}\u{80FD}\u{4F18}\u{5316}\u{5668}-->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8FD4}\u{56DE}\u{4F18}\u{5316}\u{914D}\u{7F6E}
8270
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{7528}\u{6237}: \u{5E94}\u{7528}\u{4F18}\u{5316}\u{914D}\u{7F6E}
8271
- else \u{7535}\u{6C60}\u{4F18}\u{5316}\u{672A}\u{542F}\u{7528}
8272
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{7528}\u{6237}: \u{6B63}\u{5E38}\u{8FD0}\u{884C}\u{5E94}\u{7528}
8273
- end
8274
- \`\`\`
8275
-
8276
- #### 11.4.3 \u{590D}\u{6742}\u{5E03}\u{5C40}\u{5904}\u{7406}
8152
+ #### 11.4.2 \u{590D}\u{6742}\u{5E03}\u{5C40}\u{5904}\u{7406}
8277
8153
  \`\`\`mermaid
8278
8154
  sequenceDiagram
8279
8155
  participant \u{79FB}\u{52A8}\u{7AEF}APP
@@ -9034,36 +8910,32 @@ const apiTemplatePrompt = `\u{4F60}\u{662F}\u{4E00}\u{4F4D}\u{4E13}\u{4E1A}\u{76
9034
8910
  |**\u{529F}\u{80FD}\u{63CF}\u{8FF0}**|[\u{8BE6}\u{7EC6}\u{7684}\u{529F}\u{80FD}\u{63CF}\u{8FF0}]|
9035
8911
  |**\u{8C03}\u{7528}\u{80FD}\u{529B}\u{57DF}/\u{4E2D}\u{5FC3}**|[\u{5982}\u{9002}\u{7528}\u{7684}\u{5176}\u{4ED6}\u{7CFB}\u{7EDF}\u{63A5}\u{53E3}]|
9036
8912
 
9037
- ## 3. API\u{63A5}\u{53E3}\u{8BBE}\u{8BA1}
8913
+ ## 3. \u{6570}\u{636E}\u{5EFA}\u{6A21}
8914
+ ## 3.1 ER\u{903B}\u{8F91}\u{56FE}\u{8BBE}\u{8BA1}
9038
8915
 
9039
- ### 3.1 \u{63A5}\u{53E3}\u{6982}\u{8FF0}
9040
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{63A5}\u{53E3}\u{7684}\u{6574}\u{4F53}\u{8BBE}\u{8BA1}\u{601D}\u{8DEF}\u{548C}\u{67B6}\u{6784}]
8916
+ [\u{63CF}\u{8FF0}\u{6570}\u{636E}\u{5E93}\u{8868}\u{4E4B}\u{95F4}\u{7684}\u{5173}\u{7CFB}\u{548C}ER\u{56FE}\u{8BBE}\u{8BA1}]
8917
+ \`\`\`mermaid
8918
+ \`\`\`
9041
8919
 
9042
- ### 3.2 \u{63A5}\u{53E3}\u{5217}\u{8868}
9043
- [\u{5217}\u{51FA}\u{6240}\u{6709}\u{76F8}\u{5173}\u{7684}API\u{63A5}\u{53E3}]
8920
+ ## 4. \u{6570}\u{636E}\u{8868}\u{5B9E}\u{4F53}\u{8BBE}\u{8BA1}
9044
8921
 
9045
- ### 3.3 \u{63A5}\u{53E3}\u{7248}\u{672C}\u{7BA1}\u{7406}
9046
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{63A5}\u{53E3}\u{7684}\u{7248}\u{672C}\u{7BA1}\u{7406}\u{7B56}\u{7565}]
8922
+ [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{6D89}\u{53CA}\u{7684}\u{6570}\u{636E}\u{8868}\u{5B9E}\u{4F53}\u{7ED3}\u{6784}\u{FF0C}\u{5305}\u{62EC}\u{5B57}\u{6BB5}\u{540D}\u{3001}\u{7C7B}\u{578B}\u{3001}\u{7EA6}\u{675F}\u{6761}\u{4EF6}\u{7B49}]
9047
8923
 
9048
- ### 3.4 \u{63A5}\u{53E3}\u{547D}\u{540D}\u{89C4}\u{8303}
9049
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{63A5}\u{53E3}\u{7684}\u{547D}\u{540D}\u{89C4}\u{8303}\u{548C}\u{8BBE}\u{8BA1}\u{539F}\u{5219}]
8924
+ ## 5. API\u{63A5}\u{53E3}\u{8BBE}\u{8BA1}
9050
8925
 
9051
- ### 3.5 \u{63A5}\u{53E3}\u{5206}\u{7EC4}\u{7B56}\u{7565}
9052
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{63A5}\u{53E3}\u{7684}\u{5206}\u{7EC4}\u{7B56}\u{7565}\u{548C}\u{7EC4}\u{7EC7}\u{7ED3}\u{6784}]
8926
+ ### 5.1 \u{63A5}\u{53E3}\u{5217}\u{8868}
8927
+ [\u{5217}\u{51FA}\u{6240}\u{6709}\u{76F8}\u{5173}\u{7684}API\u{63A5}\u{53E3}]
9053
8928
 
9054
- ## 4. \u{63A5}\u{53E3}\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}
8929
+ ### 5.2 \u{63A5}\u{53E3}\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}
9055
8930
 
9056
- ### 4.1 \u{63A5}\u{53E3}1 - [\u{63A5}\u{53E3}\u{540D}\u{79F0}]
9057
- #### 4.1.1 \u{57FA}\u{672C}\u{4FE1}\u{606F}
8931
+ #### 5.2.1 \u{63A5}\u{53E3}1 - [\u{63A5}\u{53E3}\u{540D}\u{79F0}]
8932
+ #### 5.2.2 \u{57FA}\u{672C}\u{4FE1}\u{606F}
9058
8933
  - **\u{63A5}\u{53E3}\u{5730}\u{5740}**: [URL\u{8DEF}\u{5F84}]
9059
- - **\u{8BF7}\u{6C42}\u{65B9}\u{6CD5}**: [GET/POST/PUT/DELETE\u{7B49}]
9060
- - **\u{534F}\u{8BAE}**: [HTTP/HTTPS]
8934
+ - **\u{8BF7}\u{6C42}\u{65B9}\u{6CD5}**: [\u{53EA}\u{5141}\u{8BB8}\u{4F7F}\u{7528}POST\u{8BF7}\u{6C42}]
8935
+ - **\u{534F}\u{8BAE}**: [\u{53EA}\u{5141}\u{8BB8}\u{4F7F}\u{7528}HTTPS]
9061
8936
  - **\u{5185}\u{5BB9}\u{7C7B}\u{578B}**: [application/json\u{7B49}]
9062
8937
 
9063
- #### 4.1.2 \u{529F}\u{80FD}\u{63CF}\u{8FF0}
9064
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{8BE5}\u{63A5}\u{53E3}\u{7684}\u{529F}\u{80FD}]
9065
-
9066
- #### 4.1.3 \u{8BF7}\u{6C42}\u{53C2}\u{6570}
8938
+ #### 5.2.3 \u{8BF7}\u{6C42}\u{53C2}\u{6570}
9067
8939
  [\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{8BF7}\u{6C42}\u{53C2}\u{6570}]
9068
8940
 
9069
8941
  |\u{53C2}\u{6570}\u{540D}|\u{7C7B}\u{578B}|\u{662F}\u{5426}\u{5FC5}\u{586B}|\u{4F4D}\u{7F6E}|\u{8BF4}\u{660E}|
@@ -9071,12 +8943,7 @@ const apiTemplatePrompt = `\u{4F60}\u{662F}\u{4E00}\u{4F4D}\u{4E13}\u{4E1A}\u{76
9071
8943
  |[\u{53C2}\u{6570}1]|[string/int\u{7B49}]|[\u{662F}/\u{5426}]|[query/body/path]|[\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}]|
9072
8944
  |[\u{53C2}\u{6570}2]|[string/int\u{7B49}]|[\u{662F}/\u{5426}]|[query/body/path]|[\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}]|
9073
8945
 
9074
- #### 4.1.4 \u{8BF7}\u{6C42}\u{793A}\u{4F8B}
9075
- \`\`\`json
9076
- [\u{8BF7}\u{6C42}\u{793A}\u{4F8B}JSON]
9077
- \`\`\`
9078
-
9079
- #### 4.1.5 \u{54CD}\u{5E94}\u{53C2}\u{6570}
8946
+ #### 5.2.4 \u{54CD}\u{5E94}\u{53C2}\u{6570}
9080
8947
  [\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{54CD}\u{5E94}\u{53C2}\u{6570}]
9081
8948
 
9082
8949
  |\u{53C2}\u{6570}\u{540D}|\u{7C7B}\u{578B}|\u{8BF4}\u{660E}|
@@ -9084,17 +8951,7 @@ const apiTemplatePrompt = `\u{4F60}\u{662F}\u{4E00}\u{4F4D}\u{4E13}\u{4E1A}\u{76
9084
8951
  |[\u{53C2}\u{6570}1]|[string/object\u{7B49}]|[\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}]|
9085
8952
  |[\u{53C2}\u{6570}2]|[string/object\u{7B49}]|[\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}]|
9086
8953
 
9087
- #### 4.1.6 \u{54CD}\u{5E94}\u{793A}\u{4F8B}
9088
- \`\`\`json
9089
- [\u{6210}\u{529F}\u{54CD}\u{5E94}\u{793A}\u{4F8B}JSON]
9090
- \`\`\`
9091
-
9092
- #### 4.1.7 \u{9519}\u{8BEF}\u{54CD}\u{5E94}\u{793A}\u{4F8B}
9093
- \`\`\`json
9094
- [\u{9519}\u{8BEF}\u{54CD}\u{5E94}\u{793A}\u{4F8B}JSON]
9095
- \`\`\`
9096
-
9097
- #### 4.1.8 \u{9519}\u{8BEF}\u{7801}\u{8BF4}\u{660E}
8954
+ #### 5.2.5 \u{9519}\u{8BEF}\u{7801}\u{8BF4}\u{660E}
9098
8955
  [\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{8BE5}\u{63A5}\u{53E3}\u{7684}\u{9519}\u{8BEF}\u{7801}]
9099
8956
 
9100
8957
  |\u{9519}\u{8BEF}\u{7801}|\u{8BF4}\u{660E}|
@@ -9102,133 +8959,12 @@ const apiTemplatePrompt = `\u{4F60}\u{662F}\u{4E00}\u{4F4D}\u{4E13}\u{4E1A}\u{76
9102
8959
  |[\u{9519}\u{8BEF}\u{7801}1]|[\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}]|
9103
8960
  |[\u{9519}\u{8BEF}\u{7801}2]|[\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}]|
9104
8961
 
9105
- ### 4.2 \u{63A5}\u{53E3}2 - [\u{63A5}\u{53E3}\u{540D}\u{79F0}]
9106
- [\u{6309}\u{7167}\u{4E0A}\u{8FF0}\u{683C}\u{5F0F}\u{7EE7}\u{7EED}\u{63CF}\u{8FF0}\u{5176}\u{4ED6}\u{63A5}\u{53E3}]
9107
-
9108
- ## 5. \u{6570}\u{636E}\u{7ED3}\u{6784}\u{5B9A}\u{4E49}
9109
-
9110
- ### 5.1 \u{8BF7}\u{6C42}\u{6570}\u{636E}\u{7ED3}\u{6784}
9111
- [\u{8BE6}\u{7EC6}\u{5B9A}\u{4E49}\u{8BF7}\u{6C42}\u{6570}\u{636E}\u{7684}\u{7ED3}\u{6784}]
9112
-
9113
- ### 5.2 \u{54CD}\u{5E94}\u{6570}\u{636E}\u{7ED3}\u{6784}
9114
- [\u{8BE6}\u{7EC6}\u{5B9A}\u{4E49}\u{54CD}\u{5E94}\u{6570}\u{636E}\u{7684}\u{7ED3}\u{6784}]
9115
-
9116
- ### 5.3 \u{6570}\u{636E}\u{6A21}\u{578B}\u{8BF4}\u{660E}
9117
- [\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{5404}\u{6570}\u{636E}\u{6A21}\u{578B}\u{7684}\u{5B57}\u{6BB5}\u{542B}\u{4E49}\u{548C}\u{7EA6}\u{675F}]
9118
-
9119
- ### 5.4 \u{6570}\u{636E}\u{9A8C}\u{8BC1}\u{89C4}\u{5219}
9120
- [\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{6570}\u{636E}\u{7684}\u{9A8C}\u{8BC1}\u{89C4}\u{5219}\u{548C}\u{7EA6}\u{675F}\u{6761}\u{4EF6}]
9121
-
9122
- ### 5.5 \u{6570}\u{636E}\u{8F6C}\u{6362}\u{89C4}\u{8303}
9123
- [\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{6570}\u{636E}\u{5728}\u{4E0D}\u{540C}\u{7CFB}\u{7EDF}\u{95F4}\u{7684}\u{8F6C}\u{6362}\u{89C4}\u{8303}]
8962
+ #### 5.2.6 \u{8BE6}\u{7EC6}\u{5B9E}\u{73B0}\u{903B}\u{8F91}
8963
+ [\u{5206}\u{6B65}\u{9AA4}\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{8BE5}\u{63A5}\u{53E3}\u{7684}\u{8BE6}\u{7EC6}\u{903B}\u{8F91}\u{FF0C}\u{5982}\u{679C}\u{5B58}\u{5728}sql\u{8BED}\u{53E5}\u{FF0C}\u{9700}\u{8981}\u{6DFB}\u{52A0}sql\u{8BED}\u{53E5}\u{5E76}\u{5728}sql\u{8BED}\u{53E5}\u{4E2D}\u{6DFB}\u{52A0}\u{6CE8}\u{91CA}\u{8BF4}\u{660E}]
9124
8964
 
9125
- ### 5.6 \u{654F}\u{611F}\u{6570}\u{636E}\u{5904}\u{7406}
9126
- [\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{654F}\u{611F}\u{6570}\u{636E}\u{7684}\u{52A0}\u{5BC6}\u{548C}\u{5904}\u{7406}\u{8981}\u{6C42}]
9127
-
9128
- ## 6. \u{4EA4}\u{4E92}\u{903B}\u{8F91}\u{8BF4}\u{660E}
9129
-
9130
- ### 6.1 \u{8C03}\u{7528}\u{65F6}\u{5E8F}
9131
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{8C03}\u{7528}\u{7684}\u{65F6}\u{5E8F}\u{903B}\u{8F91}]
9132
-
9133
- ### 6.2 \u{4E1A}\u{52A1}\u{6D41}\u{7A0B}
9134
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{6D89}\u{53CA}\u{7684}\u{4E1A}\u{52A1}\u{6D41}\u{7A0B}]
9135
-
9136
- ### 6.3 \u{5F02}\u{5E38}\u{5904}\u{7406}
9137
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{8C03}\u{7528}\u{5F02}\u{5E38}\u{7684}\u{5904}\u{7406}\u{903B}\u{8F91}]
9138
-
9139
- ### 6.4 \u{91CD}\u{8BD5}\u{673A}\u{5236}
9140
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{8C03}\u{7528}\u{5931}\u{8D25}\u{65F6}\u{7684}\u{91CD}\u{8BD5}\u{673A}\u{5236}]
9141
-
9142
- ### 6.5 \u{72B6}\u{6001}\u{7BA1}\u{7406}
9143
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{8C03}\u{7528}\u{8FC7}\u{7A0B}\u{4E2D}\u{7684}\u{72B6}\u{6001}\u{7BA1}\u{7406}]
9144
-
9145
- ### 6.6 \u{8D85}\u{65F6}\u{5904}\u{7406}
9146
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{8C03}\u{7528}\u{7684}\u{8D85}\u{65F6}\u{5904}\u{7406}\u{673A}\u{5236}]
9147
-
9148
- ### 6.7 \u{5E76}\u{53D1}\u{5904}\u{7406}
9149
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{7684}\u{5E76}\u{53D1}\u{8C03}\u{7528}\u{5904}\u{7406}\u{673A}\u{5236}]
9150
-
9151
- ## 7. \u{8BA4}\u{8BC1}\u{4E0E}\u{6388}\u{6743}
9152
-
9153
- ### 7.1 \u{8BA4}\u{8BC1}\u{65B9}\u{5F0F}
9154
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{7684}\u{8BA4}\u{8BC1}\u{65B9}\u{5F0F}\u{FF0C}\u{5982}Token\u{3001}OAuth\u{7B49}]
9155
-
9156
- ### 7.2 \u{6388}\u{6743}\u{673A}\u{5236}
9157
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{7684}\u{6388}\u{6743}\u{673A}\u{5236}]
9158
-
9159
- ### 7.3 \u{5B89}\u{5168}\u{8981}\u{6C42}
9160
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{7684}\u{5B89}\u{5168}\u{8981}\u{6C42}]
9161
-
9162
- ### 7.4 \u{4F1A}\u{8BDD}\u{7BA1}\u{7406}
9163
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{7684}\u{4F1A}\u{8BDD}\u{7BA1}\u{7406}\u{673A}\u{5236}]
9164
-
9165
- ### 7.5 \u{8BBF}\u{95EE}\u{63A7}\u{5236}
9166
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{7684}\u{8BBF}\u{95EE}\u{63A7}\u{5236}\u{7B56}\u{7565}]
9167
-
9168
- ### 7.6 \u{5BA1}\u{8BA1}\u{65E5}\u{5FD7}
9169
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{7684}\u{5BA1}\u{8BA1}\u{65E5}\u{5FD7}\u{8981}\u{6C42}]
9170
-
9171
- ## 8. \u{6027}\u{80FD}\u{8981}\u{6C42}
9172
-
9173
- ### 8.1 \u{54CD}\u{5E94}\u{65F6}\u{95F4}
9174
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{7684}\u{54CD}\u{5E94}\u{65F6}\u{95F4}\u{8981}\u{6C42}]
9175
-
9176
- ### 8.2 \u{5E76}\u{53D1}\u{5904}\u{7406}
9177
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{7684}\u{5E76}\u{53D1}\u{5904}\u{7406}\u{80FD}\u{529B}\u{8981}\u{6C42}]
9178
-
9179
- ### 8.3 \u{9650}\u{6D41}\u{7B56}\u{7565}
9180
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{7684}\u{9650}\u{6D41}\u{7B56}\u{7565}]
9181
-
9182
- ### 8.4 \u{7F13}\u{5B58}\u{7B56}\u{7565}
9183
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{7684}\u{7F13}\u{5B58}\u{4F7F}\u{7528}\u{7B56}\u{7565}]
9184
-
9185
- ### 8.5 \u{8D1F}\u{8F7D}\u{5747}\u{8861}
9186
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{7684}\u{8D1F}\u{8F7D}\u{5747}\u{8861}\u{7B56}\u{7565}]
9187
-
9188
- ### 8.6 \u{76D1}\u{63A7}\u{6307}\u{6807}
9189
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{7684}\u{76D1}\u{63A7}\u{6307}\u{6807}\u{8981}\u{6C42}]
9190
-
9191
- ## 9. \u{4E1A}\u{52A1}\u{5BF9}\u{8C61}\u{65F6}\u{5E8F}\u{56FE}
9192
-
9193
- \`\`\`mermaid
9194
- sequenceDiagram
9195
- participant \u{5BA2}\u{6237}\u{7AEF}
9196
- participant API\u{7F51}\u{5173}
9197
- participant \u{8BA4}\u{8BC1}\u{670D}\u{52A1}
9198
- participant \u{6743}\u{9650}\u{670D}\u{52A1}
9199
- participant \u{4E1A}\u{52A1}\u{670D}\u{52A1}
9200
- participant \u{6570}\u{636E}\u{5E93}
9201
- participant \u{7F13}\u{5B58}\u{670D}\u{52A1}
9202
- participant \u{6D88}\u{606F}\u{961F}\u{5217}
9203
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
9204
- participant \u{76D1}\u{63A7}\u{670D}\u{52A1}
9205
-
9206
- \u{5BA2}\u{6237}\u{7AEF}->>API\u{7F51}\u{5173}: \u{53D1}\u{9001}API\u{8BF7}\u{6C42}
9207
- API\u{7F51}\u{5173}->>\u{8BA4}\u{8BC1}\u{670D}\u{52A1}: \u{9A8C}\u{8BC1}\u{8BF7}\u{6C42}\u{4EE4}\u{724C}
9208
- \u{8BA4}\u{8BC1}\u{670D}\u{52A1}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{8BA4}\u{8BC1}\u{7ED3}\u{679C}
9209
- API\u{7F51}\u{5173}->>\u{6743}\u{9650}\u{670D}\u{52A1}: \u{68C0}\u{67E5}\u{8BBF}\u{95EE}\u{6743}\u{9650}
9210
- \u{6743}\u{9650}\u{670D}\u{52A1}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{6743}\u{9650}\u{4FE1}\u{606F}
9211
- API\u{7F51}\u{5173}->>\u{4E1A}\u{52A1}\u{670D}\u{52A1}: \u{8F6C}\u{53D1}\u{8BF7}\u{6C42}
9212
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}->>\u{7F13}\u{5B58}\u{670D}\u{52A1}: \u{67E5}\u{8BE2}\u{7F13}\u{5B58}\u{6570}\u{636E}
9213
- alt \u{7F13}\u{5B58}\u{547D}\u{4E2D}
9214
- \u{7F13}\u{5B58}\u{670D}\u{52A1}-->>\u{4E1A}\u{52A1}\u{670D}\u{52A1}: \u{8FD4}\u{56DE}\u{7F13}\u{5B58}\u{6570}\u{636E}
9215
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}->>\u{76D1}\u{63A7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{7F13}\u{5B58}\u{547D}\u{4E2D}
9216
- else \u{7F13}\u{5B58}\u{672A}\u{547D}\u{4E2D}
9217
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}->>\u{6570}\u{636E}\u{5E93}: \u{67E5}\u{8BE2}\u{6570}\u{636E}
9218
- \u{6570}\u{636E}\u{5E93}-->>\u{4E1A}\u{52A1}\u{670D}\u{52A1}: \u{8FD4}\u{56DE}\u{67E5}\u{8BE2}\u{7ED3}\u{679C}
9219
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}->>\u{7F13}\u{5B58}\u{670D}\u{52A1}: \u{5B58}\u{50A8}\u{5230}\u{7F13}\u{5B58}
9220
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}->>\u{76D1}\u{63A7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{6570}\u{636E}\u{5E93}\u{67E5}\u{8BE2}
9221
- end
9222
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}->>\u{6D88}\u{606F}\u{961F}\u{5217}: \u{53D1}\u{9001}\u{5F02}\u{6B65}\u{6D88}\u{606F}
9223
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{54CD}\u{5E94}\u{6570}\u{636E}
9224
- API\u{7F51}\u{5173}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{8BBF}\u{95EE}\u{65E5}\u{5FD7}
9225
- API\u{7F51}\u{5173}->>\u{76D1}\u{63A7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{6027}\u{80FD}\u{6307}\u{6807}
9226
- API\u{7F51}\u{5173}->>\u{5BA2}\u{6237}\u{7AEF}: \u{8FD4}\u{56DE}\u{54CD}\u{5E94}
9227
- \`\`\`
9228
-
9229
- ### 9.2 \u{66FF}\u{4EE3}\u{6D41}\u{7A0B}\u{FF08}\u{4E0D}\u{540C}\u{6709}\u{6548}\u{8DEF}\u{5F84}\u{FF09}
8965
+ ## 6. \u{4E1A}\u{52A1}\u{5BF9}\u{8C61}\u{65F6}\u{5E8F}\u{56FE}
9230
8966
 
9231
- #### 9.2.1 \u{8BA4}\u{8BC1}/\u{6388}\u{6743}\u{6D41}\u{7A0B}
8967
+ #### 6.2.1 \u{6B63}\u{5411}\u{6D41}\u{7A0B}
9232
8968
  \`\`\`mermaid
9233
8969
  sequenceDiagram
9234
8970
  participant \u{5BA2}\u{6237}\u{7AEF}
@@ -9254,59 +8990,9 @@ sequenceDiagram
9254
8990
  end
9255
8991
  \`\`\`
9256
8992
 
9257
- #### 9.2.2 \u{9519}\u{8BEF}\u{5904}\u{7406}\u{6D41}\u{7A0B}
9258
- \`\`\`mermaid
9259
- sequenceDiagram
9260
- participant \u{5BA2}\u{6237}\u{7AEF}
9261
- participant API\u{7F51}\u{5173}
9262
- participant \u{4E1A}\u{52A1}\u{670D}\u{52A1}
9263
- participant \u{6570}\u{636E}\u{5E93}
9264
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
9265
- participant \u{76D1}\u{63A7}\u{670D}\u{52A1}
9266
-
9267
- \u{5BA2}\u{6237}\u{7AEF}->>API\u{7F51}\u{5173}: \u{53D1}\u{9001}API\u{8BF7}\u{6C42}
9268
- API\u{7F51}\u{5173}->>\u{4E1A}\u{52A1}\u{670D}\u{52A1}: \u{8F6C}\u{53D1}\u{8BF7}\u{6C42}
9269
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}->>\u{6570}\u{636E}\u{5E93}: \u{67E5}\u{8BE2}\u{6570}\u{636E}
9270
- \u{6570}\u{636E}\u{5E93}-->>\u{4E1A}\u{52A1}\u{670D}\u{52A1}: \u{8FD4}\u{56DE}\u{6570}\u{636E}\u{5E93}\u{9519}\u{8BEF}
9271
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{9519}\u{8BEF}\u{65E5}\u{5FD7}
9272
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}->>\u{76D1}\u{63A7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{9519}\u{8BEF}\u{6307}\u{6807}
9273
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}->>\u{4E1A}\u{52A1}\u{670D}\u{52A1}: \u{6267}\u{884C}\u{9519}\u{8BEF}\u{6062}\u{590D}\u{903B}\u{8F91}
9274
- alt \u{9519}\u{8BEF}\u{53EF}\u{6062}\u{590D}
9275
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}->>\u{6570}\u{636E}\u{5E93}: \u{91CD}\u{8BD5}\u{67E5}\u{8BE2}
9276
- \u{6570}\u{636E}\u{5E93}-->>\u{4E1A}\u{52A1}\u{670D}\u{52A1}: \u{8FD4}\u{56DE}\u{67E5}\u{8BE2}\u{7ED3}\u{679C}
9277
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{54CD}\u{5E94}\u{6570}\u{636E}
9278
- API\u{7F51}\u{5173}->>\u{5BA2}\u{6237}\u{7AEF}: \u{8FD4}\u{56DE}\u{54CD}\u{5E94}
9279
- else \u{9519}\u{8BEF}\u{4E0D}\u{53EF}\u{6062}\u{590D}
9280
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{9519}\u{8BEF}\u{54CD}\u{5E94}
9281
- API\u{7F51}\u{5173}->>\u{5BA2}\u{6237}\u{7AEF}: \u{8FD4}\u{56DE}500\u{9519}\u{8BEF}
9282
- end
9283
- \`\`\`
8993
+ ### 6.3 \u{5F02}\u{5E38}\u{6D41}\u{7A0B}\u{FF08}\u{903B}\u{8F91}\u{4E2D}\u{51FA}\u{73B0}\u{5F02}\u{5E38}\u{60C5}\u{51B5}\u{7684}\u{4E0B}\u{7684}\u{5904}\u{7406}\u{FF09}
9284
8994
 
9285
- #### 9.2.3 API\u{6587}\u{6863}\u{81EA}\u{52A8}\u{751F}\u{6210}\u{6D41}\u{7A0B}
9286
- \`\`\`mermaid
9287
- sequenceDiagram
9288
- participant \u{5F00}\u{53D1}\u{8005}
9289
- participant API\u{7F51}\u{5173}
9290
- participant \u{6587}\u{6863}\u{751F}\u{6210}\u{5668}
9291
- participant \u{7248}\u{672C}\u{7BA1}\u{7406}\u{5668}
9292
- participant \u{5B58}\u{50A8}\u{670D}\u{52A1}
9293
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
9294
-
9295
- \u{5F00}\u{53D1}\u{8005}->>API\u{7F51}\u{5173}: \u{90E8}\u{7F72}\u{65B0}API\u{7248}\u{672C}
9296
- API\u{7F51}\u{5173}->>\u{6587}\u{6863}\u{751F}\u{6210}\u{5668}: \u{89E6}\u{53D1}\u{6587}\u{6863}\u{751F}\u{6210}
9297
- \u{6587}\u{6863}\u{751F}\u{6210}\u{5668}->>\u{7248}\u{672C}\u{7BA1}\u{7406}\u{5668}: \u{83B7}\u{53D6}API\u{89C4}\u{8303}
9298
- \u{7248}\u{672C}\u{7BA1}\u{7406}\u{5668}-->>\u{6587}\u{6863}\u{751F}\u{6210}\u{5668}: \u{8FD4}\u{56DE}API\u{5B9A}\u{4E49}
9299
- \u{6587}\u{6863}\u{751F}\u{6210}\u{5668}->>\u{6587}\u{6863}\u{751F}\u{6210}\u{5668}: \u{89E3}\u{6790}API\u{7ED3}\u{6784}
9300
- \u{6587}\u{6863}\u{751F}\u{6210}\u{5668}->>\u{5B58}\u{50A8}\u{670D}\u{52A1}: \u{4FDD}\u{5B58}\u{6587}\u{6863}\u{7248}\u{672C}
9301
- \u{5B58}\u{50A8}\u{670D}\u{52A1}-->>\u{6587}\u{6863}\u{751F}\u{6210}\u{5668}: \u{786E}\u{8BA4}\u{4FDD}\u{5B58}\u{6210}\u{529F}
9302
- \u{6587}\u{6863}\u{751F}\u{6210}\u{5668}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{6587}\u{6863}\u{751F}\u{6210}\u{7ED3}\u{679C}
9303
- API\u{7F51}\u{5173}->>\u{5F00}\u{53D1}\u{8005}: \u{901A}\u{77E5}\u{6587}\u{6863}\u{751F}\u{6210}\u{5B8C}\u{6210}
9304
- API\u{7F51}\u{5173}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{6587}\u{6863}\u{751F}\u{6210}\u{65E5}\u{5FD7}
9305
- \`\`\`
9306
-
9307
- ### 9.3 \u{5F02}\u{5E38}\u{6D41}\u{7A0B}\u{FF08}\u{9519}\u{8BEF}\u{5904}\u{7406}\u{FF09}
9308
-
9309
- #### 9.3.1 \u{9650}\u{6D41}\u{5904}\u{7406}
8995
+ #### 6.3.1 xx\u{5F02}\u{5E38}\u{5904}\u{7406}\u{6D41}\u{7A0B}
9310
8996
  \`\`\`mermaid
9311
8997
  sequenceDiagram
9312
8998
  participant \u{5BA2}\u{6237}\u{7AEF}
@@ -9325,7 +9011,7 @@ sequenceDiagram
9325
9011
  end
9326
9012
  \`\`\`
9327
9013
 
9328
- #### 9.3.2 \u{6570}\u{636E}\u{9A8C}\u{8BC1}\u{51B2}\u{7A81}
9014
+ #### 6.3.2 xx\u{5F02}\u{5E38}\u{5904}\u{7406}\u{6D41}\u{7A0B}
9329
9015
  \`\`\`mermaid
9330
9016
  sequenceDiagram
9331
9017
  participant \u{5BA2}\u{6237}\u{7AEF}
@@ -9343,193 +9029,68 @@ sequenceDiagram
9343
9029
  API\u{7F51}\u{5173}->>\u{5BA2}\u{6237}\u{7AEF}: \u{8FD4}\u{56DE}400\u{9519}\u{8BEF}\u{53CA}\u{9519}\u{8BEF}\u{8BE6}\u{60C5}
9344
9030
  \`\`\`
9345
9031
 
9346
- #### 9.3.3 API Schema\u{9A8C}\u{8BC1}\u{9519}\u{8BEF}
9347
- \`\`\`mermaid
9348
- sequenceDiagram
9349
- participant \u{5F00}\u{53D1}\u{8005}
9350
- participant API\u{7F51}\u{5173}
9351
- participant Schema\u{9A8C}\u{8BC1}\u{5668}
9352
- participant \u{7248}\u{672C}\u{7BA1}\u{7406}\u{5668}
9353
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
9354
- participant \u{76D1}\u{63A7}\u{670D}\u{52A1}
9355
-
9356
- \u{5F00}\u{53D1}\u{8005}->>API\u{7F51}\u{5173}: \u{90E8}\u{7F72}API\u{5B9A}\u{4E49}
9357
- API\u{7F51}\u{5173}->>Schema\u{9A8C}\u{8BC1}\u{5668}: \u{9A8C}\u{8BC1}API Schema
9358
- Schema\u{9A8C}\u{8BC1}\u{5668}->>\u{7248}\u{672C}\u{7BA1}\u{7406}\u{5668}: \u{83B7}\u{53D6}\u{5386}\u{53F2}\u{7248}\u{672C}
9359
- \u{7248}\u{672C}\u{7BA1}\u{7406}\u{5668}-->>Schema\u{9A8C}\u{8BC1}\u{5668}: \u{8FD4}\u{56DE}\u{5386}\u{53F2}\u{5B9A}\u{4E49}
9360
- Schema\u{9A8C}\u{8BC1}\u{5668}->>Schema\u{9A8C}\u{8BC1}\u{5668}: \u{6267}\u{884C}\u{517C}\u{5BB9}\u{6027}\u{68C0}\u{67E5}
9361
- alt Schema\u{6709}\u{6548}
9362
- Schema\u{9A8C}\u{8BC1}\u{5668}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{9A8C}\u{8BC1}\u{901A}\u{8FC7}
9363
- API\u{7F51}\u{5173}->>\u{5F00}\u{53D1}\u{8005}: \u{901A}\u{77E5}\u{90E8}\u{7F72}\u{6210}\u{529F}
9364
- else Schema\u{65E0}\u{6548}
9365
- Schema\u{9A8C}\u{8BC1}\u{5668}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{9A8C}\u{8BC1}\u{5931}\u{8D25}
9366
- API\u{7F51}\u{5173}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}Schema\u{9519}\u{8BEF}
9367
- API\u{7F51}\u{5173}->>\u{76D1}\u{63A7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{9A8C}\u{8BC1}\u{5931}\u{8D25}\u{6307}\u{6807}
9368
- API\u{7F51}\u{5173}->>\u{5F00}\u{53D1}\u{8005}: \u{8FD4}\u{56DE}\u{9519}\u{8BEF}\u{8BE6}\u{60C5}\u{548C}\u{4FEE}\u{590D}\u{5EFA}\u{8BAE}
9369
- end
9370
- \`\`\`
9371
-
9372
- ### 9.4 \u{8FB9}\u{7F18}\u{60C5}\u{51B5}\u{6D41}\u{7A0B}\u{FF08}\u{5E76}\u{53D1}\u{3001}\u{8D85}\u{65F6}\u{7B49}\u{FF09}
9032
+ ### 6.4 \u{8FB9}\u{7F18}\u{60C5}\u{51B5}\u{6D41}\u{7A0B}\u{FF08}\u{5E76}\u{53D1}\u{3001}\u{8D85}\u{65F6}\u{3001}\u{6570}\u{636E}\u{8FB9}\u{754C}\u{7B49}\u{FF09}
9373
9033
 
9374
- #### 9.4.1 API\u{7248}\u{672C}\u{7BA1}\u{7406}
9034
+ #### 6.4.1 \u{5E76}\u{53D1}\u{51B2}\u{7A81}\u{5904}\u{7406}
9375
9035
  \`\`\`mermaid
9376
9036
  sequenceDiagram
9377
9037
  participant \u{5BA2}\u{6237}\u{7AEF}
9378
9038
  participant API\u{7F51}\u{5173}
9379
- participant \u{7248}\u{672C}\u{7BA1}\u{7406}\u{5668}
9380
- participant \u{4E1A}\u{52A1}\u{670D}\u{52A1}v1
9381
- participant \u{4E1A}\u{52A1}\u{670D}\u{52A1}v2
9382
-
9383
- \u{5BA2}\u{6237}\u{7AEF}->>API\u{7F51}\u{5173}: \u{53D1}\u{9001}\u{5E26}\u{7248}\u{672C}\u{53F7}\u{7684}API\u{8BF7}\u{6C42}
9384
- API\u{7F51}\u{5173}->>\u{7248}\u{672C}\u{7BA1}\u{7406}\u{5668}: \u{89E3}\u{6790}API\u{7248}\u{672C}
9385
- \u{7248}\u{672C}\u{7BA1}\u{7406}\u{5668}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{7248}\u{672C}\u{4FE1}\u{606F}
9386
- alt \u{8BF7}\u{6C42}v1\u{7248}\u{672C}
9387
- API\u{7F51}\u{5173}->>\u{4E1A}\u{52A1}\u{670D}\u{52A1}v1: \u{8F6C}\u{53D1}\u{8BF7}\u{6C42}
9388
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}v1-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{54CD}\u{5E94}
9389
- else \u{8BF7}\u{6C42}v2\u{7248}\u{672C}
9390
- API\u{7F51}\u{5173}->>\u{4E1A}\u{52A1}\u{670D}\u{52A1}v2: \u{8F6C}\u{53D1}\u{8BF7}\u{6C42}
9391
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}v2-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{54CD}\u{5E94}
9392
- end
9393
- API\u{7F51}\u{5173}->>\u{5BA2}\u{6237}\u{7AEF}: \u{8FD4}\u{56DE}\u{54CD}\u{5E94}
9394
- \`\`\`
9395
-
9396
- #### 9.4.2 \u{6027}\u{80FD}/\u{53EF}\u{6269}\u{5C55}\u{6027}\u{8981}\u{6C42}
9397
- \`\`\`mermaid
9398
- sequenceDiagram
9399
- participant \u{5BA2}\u{6237}\u{7AEF}
9400
- participant \u{8D1F}\u{8F7D}\u{5747}\u{8861}\u{5668}
9401
- participant API\u{7F51}\u{5173}1
9402
- participant API\u{7F51}\u{5173}2
9403
- participant \u{4E1A}\u{52A1}\u{670D}\u{52A1}
9404
9039
  participant \u{6570}\u{636E}\u{5E93}
9040
+ participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
9405
9041
  participant \u{7F13}\u{5B58}\u{670D}\u{52A1}
9406
- participant \u{76D1}\u{63A7}\u{670D}\u{52A1}
9407
9042
 
9408
- \u{5BA2}\u{6237}\u{7AEF}->>\u{8D1F}\u{8F7D}\u{5747}\u{8861}\u{5668}: \u{53D1}\u{9001}API\u{8BF7}\u{6C42}
9409
- \u{8D1F}\u{8F7D}\u{5747}\u{8861}\u{5668}->>API\u{7F51}\u{5173}1: \u{5206}\u{53D1}\u{8BF7}\u{6C42}(\u{8F6E}\u{8BE2}\u{7B56}\u{7565})
9410
- API\u{7F51}\u{5173}1->>\u{4E1A}\u{52A1}\u{670D}\u{52A1}: \u{8F6C}\u{53D1}\u{8BF7}\u{6C42}
9411
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}->>\u{7F13}\u{5B58}\u{670D}\u{52A1}: \u{67E5}\u{8BE2}\u{7F13}\u{5B58}
9412
- alt \u{7F13}\u{5B58}\u{547D}\u{4E2D}
9413
- \u{7F13}\u{5B58}\u{670D}\u{52A1}-->>\u{4E1A}\u{52A1}\u{670D}\u{52A1}: \u{8FD4}\u{56DE}\u{7F13}\u{5B58}\u{6570}\u{636E}
9414
- else \u{7F13}\u{5B58}\u{672A}\u{547D}\u{4E2D}
9415
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}->>\u{6570}\u{636E}\u{5E93}: \u{67E5}\u{8BE2}\u{6570}\u{636E}
9416
- \u{6570}\u{636E}\u{5E93}-->>\u{4E1A}\u{52A1}\u{670D}\u{52A1}: \u{8FD4}\u{56DE}\u{67E5}\u{8BE2}\u{7ED3}\u{679C}
9417
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}->>\u{7F13}\u{5B58}\u{670D}\u{52A1}: \u{5B58}\u{50A8}\u{5230}\u{7F13}\u{5B58}
9043
+ alt \u{9AD8}\u{5E76}\u{53D1}\u{573A}\u{666F}
9044
+ \u{5BA2}\u{6237}\u{7AEF}->>API\u{7F51}\u{5173}: \u{5E76}\u{53D1}\u{8BF7}\u{6C42}
9045
+ API\u{7F51}\u{5173}->>\u{6570}\u{636E}\u{5E93}: \u{6267}\u{884C}\u{6570}\u{636E}\u{64CD}\u{4F5C}
9046
+ \u{6570}\u{636E}\u{5E93}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{7ED3}\u{679C}
9047
+ API\u{7F51}\u{5173}->>\u{7F13}\u{5B58}\u{670D}\u{52A1}: \u{7F13}\u{5B58}\u{54CD}\u{5E94}\u{6570}\u{636E}
9048
+ API\u{7F51}\u{5173}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{5E76}\u{53D1}\u{51B2}\u{7A81}
9049
+ else \u{975E}\u{9AD8}\u{5E76}\u{53D1}\u{573A}\u{666F}
9050
+ API\u{7F51}\u{5173}->>\u{6570}\u{636E}\u{5E93}: \u{6267}\u{884C}\u{6570}\u{636E}\u{64CD}\u{4F5C}
9051
+ \u{6570}\u{636E}\u{5E93}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{7ED3}\u{679C}
9052
+ API\u{7F51}\u{5173}->>\u{7F13}\u{5B58}\u{670D}\u{52A1}: \u{7F13}\u{5B58}\u{54CD}\u{5E94}\u{6570}\u{636E}
9418
9053
  end
9419
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}-->>API\u{7F51}\u{5173}1: \u{8FD4}\u{56DE}\u{54CD}\u{5E94}\u{6570}\u{636E}
9420
- API\u{7F51}\u{5173}1->>\u{76D1}\u{63A7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{6027}\u{80FD}\u{6307}\u{6807}
9421
- API\u{7F51}\u{5173}1->>\u{8D1F}\u{8F7D}\u{5747}\u{8861}\u{5668}: \u{8FD4}\u{56DE}\u{54CD}\u{5E94}
9422
- \u{8D1F}\u{8F7D}\u{5747}\u{8861}\u{5668}->>\u{5BA2}\u{6237}\u{7AEF}: \u{8FD4}\u{56DE}\u{54CD}\u{5E94}
9054
+ API\u{7F51}\u{5173}->>\u{5BA2}\u{6237}\u{7AEF}: \u{8FD4}\u{56DE}\u{54CD}\u{5E94}
9423
9055
  \`\`\`
9424
-
9425
- #### 9.4.3 API\u{6027}\u{80FD}\u{964D}\u{7EA7}\u{5904}\u{7406}
9056
+ #### 6.4.2 \u{8D85}\u{65F6}\u{5904}\u{7406}
9426
9057
  \`\`\`mermaid
9427
9058
  sequenceDiagram
9428
9059
  participant \u{5BA2}\u{6237}\u{7AEF}
9429
9060
  participant API\u{7F51}\u{5173}
9430
- participant \u{6027}\u{80FD}\u{76D1}\u{63A7}\u{5668}
9431
- participant \u{964D}\u{7EA7}\u{7B56}\u{7565}\u{5668}
9432
- participant \u{7F13}\u{5B58}\u{670D}\u{52A1}
9061
+ participant \u{4E1A}\u{52A1}\u{670D}\u{52A1}
9433
9062
  participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
9063
+ participant \u{76D1}\u{63A7}\u{670D}\u{52A1}
9064
+ participant \u{5907}\u{7528}\u{670D}\u{52A1}
9434
9065
 
9435
- \u{5BA2}\u{6237}\u{7AEF}->>API\u{7F51}\u{5173}: \u{53D1}\u{9001}API\u{8BF7}\u{6C42}
9436
- API\u{7F51}\u{5173}->>\u{6027}\u{80FD}\u{76D1}\u{63A7}\u{5668}: \u{68C0}\u{67E5}\u{670D}\u{52A1}\u{6027}\u{80FD}
9437
- \u{6027}\u{80FD}\u{76D1}\u{63A7}\u{5668}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{6027}\u{80FD}\u{72B6}\u{6001}
9438
- alt \u{6027}\u{80FD}\u{6B63}\u{5E38}
9439
- API\u{7F51}\u{5173}->>\u{540E}\u{7EED}\u{670D}\u{52A1}: \u{6B63}\u{5E38}\u{5904}\u{7406}\u{8BF7}\u{6C42}
9440
- \u{540E}\u{7EED}\u{670D}\u{52A1}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{5B8C}\u{6574}\u{54CD}\u{5E94}
9441
- else \u{6027}\u{80FD}\u{964D}\u{7EA7}
9442
- API\u{7F51}\u{5173}->>\u{964D}\u{7EA7}\u{7B56}\u{7565}\u{5668}: \u{5E94}\u{7528}\u{964D}\u{7EA7}\u{7B56}\u{7565}
9443
- \u{964D}\u{7EA7}\u{7B56}\u{7565}\u{5668}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{964D}\u{7EA7}\u{914D}\u{7F6E}
9444
- API\u{7F51}\u{5173}->>\u{7F13}\u{5B58}\u{670D}\u{52A1}: \u{83B7}\u{53D6}\u{7F13}\u{5B58}\u{6570}\u{636E}
9445
- \u{7F13}\u{5B58}\u{670D}\u{52A1}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{7F13}\u{5B58}\u{54CD}\u{5E94}
9446
- API\u{7F51}\u{5173}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{964D}\u{7EA7}\u{4E8B}\u{4EF6}
9447
- end
9448
- API\u{7F51}\u{5173}->>\u{5BA2}\u{6237}\u{7AEF}: \u{8FD4}\u{56DE}\u{54CD}\u{5E94}
9066
+ \u{5BA2}\u{6237}\u{7AEF}->>API\u{7F51}\u{5173}: \u{53D1}\u{9001}\u{5305}\u{542B}\u{65E0}\u{6548}\u{6570}\u{636E}\u{7684}\u{8BF7}\u{6C42}
9067
+ API\u{7F51}\u{5173}->>\u{4E1A}\u{52A1}\u{670D}\u{52A1}: \u{8F6C}\u{53D1}\u{8BF7}\u{6C42}
9068
+ \u{4E1A}\u{52A1}\u{670D}\u{52A1}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{8D85}\u{65F6}\u{4E8B}\u{4EF6}
9069
+ \u{4E1A}\u{52A1}\u{670D}\u{52A1}->>\u{76D1}\u{63A7}\u{670D}\u{52A1}: \u{4E0A}\u{62A5}\u{8D85}\u{65F6}\u{6307}\u{6807}
9070
+ \u{4E1A}\u{52A1}\u{670D}\u{52A1}-->>\u{4E1A}\u{52A1}\u{670D}\u{52A1}: \u{91CD}\u{8BD5}\u{8BF7}\u{6C42}
9071
+ \u{4E1A}\u{52A1}\u{670D}\u{52A1}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}408\u{9519}\u{8BEF}(\u{8BF7}\u{6C42}\u{8D85}\u{65F6})
9072
+ API\u{7F51}\u{5173}->>\u{5907}\u{7528}\u{670D}\u{52A1}: \u{8F6C}\u{53D1}\u{8BF7}\u{6C42}
9073
+ \u{5907}\u{7528}\u{670D}\u{52A1}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{9519}\u{8BEF}\u{54CD}\u{5E94}
9074
+ API\u{7F51}\u{5173}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{65E5}\u{5FD7}\u{8BB0}\u{5F55}\u{5907}\u{7528}\u{670D}\u{52A1}\u{54CD}\u{5E94}
9075
+ API\u{7F51}\u{5173}->>\u{76D1}\u{63A7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{5907}\u{7528}\u{670D}\u{52A1}\u{5931}\u{8D25}
9076
+ API\u{7F51}\u{5173}->>\u{5BA2}\u{6237}\u{7AEF}: \u{8FD4}\u{56DE}\u{5907}\u{7528}\u{670D}\u{52A1}\u{54CD}\u{5E94}
9449
9077
  \`\`\`
9450
9078
 
9451
- ## 10. \u{4E1A}\u{52A1}\u{72B6}\u{6001}\u{63CF}\u{8FF0}
9079
+ ## 7. \u{4E1A}\u{52A1}\u{72B6}\u{6001}\u{63CF}\u{8FF0}
9452
9080
 
9453
9081
  | | | |
9454
9082
  |---|---|---|
9455
9083
  |**\u{72B6}\u{6001}\u{7F16}\u{53F7}**|**\u{72B6}\u{6001}\u{540D}\u{79F0}**|**\u{63CF}\u{8FF0}**|
9456
- |01|\u{8BF7}\u{6C42}\u{63A5}\u{6536}|API\u{63A5}\u{6536}\u{5230}\u{8BF7}\u{6C42}|
9457
- |02|\u{53C2}\u{6570}\u{9A8C}\u{8BC1}|\u{6B63}\u{5728}\u{9A8C}\u{8BC1}\u{8BF7}\u{6C42}\u{53C2}\u{6570}|
9458
- |03|\u{4E1A}\u{52A1}\u{5904}\u{7406}|\u{6B63}\u{5728}\u{5904}\u{7406}\u{4E1A}\u{52A1}\u{903B}\u{8F91}|
9459
- |04|\u{6570}\u{636E}\u{64CD}\u{4F5C}|\u{6B63}\u{5728}\u{6267}\u{884C}\u{6570}\u{636E}\u{64CD}\u{4F5C}|
9460
- |05|\u{54CD}\u{5E94}\u{8FD4}\u{56DE}|\u{6B63}\u{5728}\u{8FD4}\u{56DE}\u{54CD}\u{5E94}|
9461
- |06|\u{5904}\u{7406}\u{5B8C}\u{6210}|\u{8BF7}\u{6C42}\u{5904}\u{7406}\u{5B8C}\u{6210}|
9084
+ |01|\u{6536}\u{5230}\u{5BA1}\u{6838}\u{7533}\u{8BF7}|\u{5F53}\u{63A5}\u{6536}\u{5230}\u{5BA1}\u{6838}\u{7533}\u{8BF7}\u{65F6}\u{FF0C}\u{7CFB}\u{7EDF}\u{4F1A}\u{8BB0}\u{5F55}\u{7533}\u{8BF7}\u{4FE1}\u{606F}\u{5E76}\u{8FD4}\u{56DE}\u{5BA1}\u{6838}\u{4E2D}\u{72B6}\u{6001}|
9085
+ |02|\u{5BA1}\u{6279}\u{5BA1}\u{6838}\u{72B6}\u{6001}|\u{5F53}\u{5BA1}\u{6279}\u{4EBA}\u{5BF9}\u{7533}\u{8BF7}\u{8FDB}\u{884C}\u{5BA1}\u{6279}\u{540E}\u{FF0C}\u{7CFB}\u{7EDF}\u{4F1A}\u{66F4}\u{65B0}\u{5BA1}\u{6838}\u{72B6}\u{6001}\u{5E76}\u{8FD4}\u{56DE}\u{5BA1}\u{6279}\u{7ED3}\u{679C}|
9462
9086
  |[\u{6DFB}\u{52A0}\u{66F4}\u{591A}\u{72B6}\u{6001}...]||
9463
9087
 
9464
- ## 11. \u{5904}\u{7406}\u{903B}\u{8F91}\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}
9465
-
9466
- ### 11.1 \u{8BF7}\u{6C42}\u{5904}\u{7406}\u{903B}\u{8F91}
9467
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{8BF7}\u{6C42}\u{7684}\u{5904}\u{7406}\u{903B}\u{8F91}]
9468
-
9469
- ### 11.2 \u{53C2}\u{6570}\u{9A8C}\u{8BC1}\u{903B}\u{8F91}
9470
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{8BF7}\u{6C42}\u{53C2}\u{6570}\u{7684}\u{9A8C}\u{8BC1}\u{903B}\u{8F91}]
9471
-
9472
- ### 11.3 \u{4E1A}\u{52A1}\u{5904}\u{7406}\u{903B}\u{8F91}
9473
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{4E1A}\u{52A1}\u{903B}\u{8F91}\u{7684}\u{5904}\u{7406}\u{8FC7}\u{7A0B}]
9474
-
9475
- ### 11.4 \u{6570}\u{636E}\u{64CD}\u{4F5C}\u{903B}\u{8F91}
9476
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{6570}\u{636E}\u{64CD}\u{4F5C}\u{7684}\u{5904}\u{7406}\u{903B}\u{8F91}]
9477
-
9478
- ### 11.5 \u{54CD}\u{5E94}\u{751F}\u{6210}\u{903B}\u{8F91}
9479
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{54CD}\u{5E94}\u{6570}\u{636E}\u{7684}\u{751F}\u{6210}\u{903B}\u{8F91}]
9480
-
9481
- ### 11.6 \u{9519}\u{8BEF}\u{5904}\u{7406}\u{903B}\u{8F91}
9482
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9519}\u{8BEF}\u{60C5}\u{51B5}\u{7684}\u{5904}\u{7406}\u{903B}\u{8F91}]
9483
-
9484
- ### 11.7 \u{4E8B}\u{52A1}\u{7BA1}\u{7406}\u{903B}\u{8F91}
9485
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{8C03}\u{7528}\u{4E2D}\u{7684}\u{4E8B}\u{52A1}\u{7BA1}\u{7406}\u{903B}\u{8F91}]
9486
-
9487
- ## 12. \u{76D1}\u{63A7}\u{4E0E}\u{65E5}\u{5FD7}
9488
-
9489
- ### 12.1 \u{76D1}\u{63A7}\u{6307}\u{6807}
9490
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{7684}\u{76D1}\u{63A7}\u{6307}\u{6807}]
9491
-
9492
- ### 12.2 \u{65E5}\u{5FD7}\u{8BB0}\u{5F55}
9493
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{7684}\u{65E5}\u{5FD7}\u{8BB0}\u{5F55}\u{8981}\u{6C42}]
9494
-
9495
- ### 12.3 \u{544A}\u{8B66}\u{673A}\u{5236}
9496
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{7684}\u{544A}\u{8B66}\u{673A}\u{5236}]
9497
-
9498
- ### 12.4 \u{6027}\u{80FD}\u{5206}\u{6790}
9499
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{7684}\u{6027}\u{80FD}\u{5206}\u{6790}\u{8981}\u{6C42}]
9500
-
9501
- ### 12.5 \u{9519}\u{8BEF}\u{8FFD}\u{8E2A}
9502
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{7684}\u{9519}\u{8BEF}\u{8FFD}\u{8E2A}\u{8981}\u{6C42}]
9503
-
9504
- ### 12.6 \u{8BBF}\u{95EE}\u{7EDF}\u{8BA1}
9505
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{7684}\u{8BBF}\u{95EE}\u{7EDF}\u{8BA1}\u{8981}\u{6C42}]
9506
-
9507
- ## 13. \u{6D4B}\u{8BD5}\u{8981}\u{6C42}
9508
-
9509
- ### 13.1 \u{529F}\u{80FD}\u{6D4B}\u{8BD5}
9510
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{529F}\u{80FD}\u{7684}\u{6D4B}\u{8BD5}\u{8981}\u{6C42}]
9511
-
9512
- ### 13.2 \u{6027}\u{80FD}\u{6D4B}\u{8BD5}
9513
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{6027}\u{80FD}\u{7684}\u{6D4B}\u{8BD5}\u{8981}\u{6C42}]
9514
-
9515
- ### 13.3 \u{5B89}\u{5168}\u{6D4B}\u{8BD5}
9516
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{5B89}\u{5168}\u{6027}\u{7684}\u{6D4B}\u{8BD5}\u{8981}\u{6C42}]
9517
-
9518
- ### 13.4 \u{517C}\u{5BB9}\u{6027}\u{6D4B}\u{8BD5}
9519
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{517C}\u{5BB9}\u{6027}\u{7684}\u{6D4B}\u{8BD5}\u{8981}\u{6C42}]
9520
-
9521
- ### 13.5 \u{538B}\u{529B}\u{6D4B}\u{8BD5}
9522
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{538B}\u{529B}\u{6D4B}\u{8BD5}\u{7684}\u{8981}\u{6C42}]
9523
-
9524
- ### 13.6 \u{56DE}\u{5F52}\u{6D4B}\u{8BD5}
9525
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}API\u{56DE}\u{5F52}\u{6D4B}\u{8BD5}\u{7684}\u{8981}\u{6C42}]
9526
-
9527
- ## 14. \u{4F2A}\u{4EE3}\u{7801}\u{793A}\u{4F8B}
9088
+ ## 8. \u{4F2A}\u{4EE3}\u{7801}\u{793A}\u{4F8B}
9528
9089
 
9529
9090
  \`\`\`gherkin
9530
9091
  Scenario Outline: \u{7528}\u{6237}\u{901A}\u{8FC7}API\u{67E5}\u{8BE2}\u{8BA2}\u{5355}\u{4FE1}\u{606F}
9531
9092
  Given \u{7528}\u{6237}\u{5DF2}\u{901A}\u{8FC7}\u{8BA4}\u{8BC1}\u{5E76}\u{62E5}\u{6709}\u{67E5}\u{8BE2}\u{6743}\u{9650}
9532
- When \u{7528}\u{6237}\u{5411}/orders/<order_id>\u{63A5}\u{53E3}\u{53D1}\u{9001}GET\u{8BF7}\u{6C42}
9093
+ When \u{7528}\u{6237}\u{5411}/orders/<order_id>\u{63A5}\u{53E3}\u{53D1}\u{9001}POST\u{8BF7}\u{6C42}
9533
9094
  Then \u{7CFB}\u{7EDF}\u{5E94}\u{8FD4}\u{56DE}\u{8BA2}\u{5355}\u{4FE1}\u{606F}\u{6216} <error_message>
9534
9095
 
9535
9096
  Examples:
@@ -9566,8 +9127,8 @@ Scenario Outline: API\u{8C03}\u{7528}\u{4E0E}\u{6570}\u{636E}\u{5904}\u{7406}\u{
9566
9127
  | /users | POST | \u{7F3A}\u{5931}\u{5FC5}\u{586B}\u{9879} | \u{8FD4}\u{56DE}400\u{9519}\u{8BEF}\u{FF0C}\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{7F3A}\u{5931}\u{5B57}\u{6BB5} |
9567
9128
  | /users/123 | PUT | \u{66F4}\u{65B0}\u{6570}\u{636E} | \u{66F4}\u{65B0}\u{7528}\u{6237}\u{4FE1}\u{606F}\u{FF0C}\u{8FD4}\u{56DE}\u{66F4}\u{65B0}\u{540E}\u{7684}\u{5B8C}\u{6574}\u{7528}\u{6237}\u{4FE1}\u{606F} |
9568
9129
  | /users/123 | DELETE | \u{5B58}\u{5728}\u{8D44}\u{6E90} | \u{5220}\u{9664}\u{7528}\u{6237}\u{FF0C}\u{8FD4}\u{56DE}204\u{72B6}\u{6001}\u{7801} |
9569
- | /users/999 | GET | \u{4E0D}\u{5B58}\u{5728}\u{8D44}\u{6E90} | \u{8FD4}\u{56DE}404\u{9519}\u{8BEF}\u{FF0C}\u{8BF4}\u{660E}\u{8D44}\u{6E90}\u{672A}\u{627E}\u{5230} |
9570
- | /users | GET | \u{5927}\u{91CF}\u{6570}\u{636E} | \u{5206}\u{9875}\u{8FD4}\u{56DE}\u{7528}\u{6237}\u{5217}\u{8868}\u{FF0C}\u{5305}\u{542B}\u{603B}\u{6570}\u{548C}\u{5206}\u{9875}\u{4FE1}\u{606F} |
9130
+ | /users/999 | POST | \u{4E0D}\u{5B58}\u{5728}\u{8D44}\u{6E90} | \u{8FD4}\u{56DE}404\u{9519}\u{8BEF}\u{FF0C}\u{8BF4}\u{660E}\u{8D44}\u{6E90}\u{672A}\u{627E}\u{5230} |
9131
+ | /users | POST | \u{5927}\u{91CF}\u{6570}\u{636E} | \u{5206}\u{9875}\u{8FD4}\u{56DE}\u{7528}\u{6237}\u{5217}\u{8868}\u{FF0C}\u{5305}\u{542B}\u{603B}\u{6570}\u{548C}\u{5206}\u{9875}\u{4FE1}\u{606F} |
9571
9132
 
9572
9133
  Scenario Outline: API\u{9650}\u{6D41}\u{4E0E}\u{9519}\u{8BEF}\u{6062}\u{590D}\u{5904}\u{7406}
9573
9134
  Given \u{5BA2}\u{6237}\u{7AEF}\u{5728}<time_window>\u{5185}\u{53D1}\u{9001}<request_count>\u{4E2A}\u{8BF7}\u{6C42}
@@ -9642,6 +9203,37 @@ const requirementAnalyzerTool = {
9642
9203
  const { input_type, content, md_file_path, feature_name, options = {}, auto_trigger = {} } = args;
9643
9204
  const { custom_prompt, use_streaming, chunk_size } = options;
9644
9205
  const analysis_depth = 'detailed';
9206
+ utils_logger.k.info("\u5F00\u59CB\u83B7\u53D6\u9879\u76EE\u4FE1\u606F");
9207
+ let projectInfo = null;
9208
+ try {
9209
+ const projectTemplatePromise = (async ()=>{
9210
+ const projectTemplateArgs = {
9211
+ project_name: feature_name,
9212
+ project_path: void 0
9213
+ };
9214
+ const projectAnalysisResult = await initProjectStandard.execute(projectTemplateArgs);
9215
+ if (projectAnalysisResult) {
9216
+ const projectAnalysis = JSON.parse(projectAnalysisResult);
9217
+ if (projectAnalysis.prompt && projectAnalysis.prompt.includes('{{projectAnalysis}}')) {
9218
+ const projectAnalysisContent = projectAnalysis.prompt.match(/## 项目架构分析\n([\s\S]*)/);
9219
+ if (projectAnalysisContent && projectAnalysisContent[1]) projectInfo = extractProjectInfo(projectAnalysisContent[1]);
9220
+ }
9221
+ }
9222
+ return projectInfo;
9223
+ })();
9224
+ projectInfo = await Promise.race([
9225
+ projectTemplatePromise,
9226
+ new Promise((resolve)=>setTimeout(()=>resolve(null), 5000))
9227
+ ]);
9228
+ if (null === projectInfo) utils_logger.k.warn("\u83B7\u53D6\u9879\u76EE\u4FE1\u606F\u8D85\u65F6\uFF0C\u5C06\u4F7F\u7528\u901A\u7528\u6280\u672F\u6587\u6863\u751F\u6210");
9229
+ else utils_logger.k.info("\u9879\u76EE\u4FE1\u606F\u83B7\u53D6\u6210\u529F", {
9230
+ projectInfo
9231
+ });
9232
+ } catch (projectError) {
9233
+ utils_logger.k.warn("\u83B7\u53D6\u9879\u76EE\u4FE1\u606F\u5931\u8D25\uFF0C\u5C06\u4F7F\u7528\u901A\u7528\u6280\u672F\u6587\u6863\u751F\u6210", {
9234
+ error: projectError instanceof Error ? projectError.message : String(projectError)
9235
+ });
9236
+ }
9645
9237
  try {
9646
9238
  let inputContent = '';
9647
9239
  let sourceInfo = '';
@@ -9649,6 +9241,14 @@ const requirementAnalyzerTool = {
9649
9241
  inputContent = content;
9650
9242
  sourceInfo = "\u7528\u6237\u76F4\u63A5\u8F93\u5165";
9651
9243
  } else if ('md_file' === input_type) {
9244
+ if (!md_file_path) {
9245
+ utils_logger.k.error("md_file_path\u53C2\u6570\u4E3A\u7A7A", {
9246
+ input_type,
9247
+ md_file_path,
9248
+ feature_name
9249
+ });
9250
+ throw new Error("md_file_path\u53C2\u6570\u4E0D\u80FD\u4E3A\u7A7A");
9251
+ }
9652
9252
  const resolvedPath = await (0, common.kK)(md_file_path);
9653
9253
  const stats = await promises_.stat(resolvedPath);
9654
9254
  const fileSizeInMB = stats.size / 1048576;
@@ -9708,7 +9308,7 @@ const requirementAnalyzerTool = {
9708
9308
  priority: 'priority' in feature ? feature.priority : 'medium',
9709
9309
  complexity: 'complexity' in feature ? feature.complexity : feature.estimatedComplexity
9710
9310
  });
9711
- const featureDoc = await generateRequirementWithDFS(featureContent, featureTitle, custom_prompt, featureType);
9311
+ const featureDoc = await generateRequirementWithDFS(featureContent, featureTitle, custom_prompt, featureType, projectInfo);
9712
9312
  await promises_.writeFile(featureOutputPath, featureDoc, 'utf8');
9713
9313
  generatedFiles.push(external_path_["default"].resolve(featureOutputPath));
9714
9314
  utils_logger.k.info(`\u{529F}\u{80FD}\u{70B9}\u{5206}\u{6790}\u{5B8C}\u{6210} ${i + 1}/${featuresToProcess.length}`, {
@@ -9745,7 +9345,7 @@ ${generatedFiles.map((f)=>`- \`${f}\``).join('\n')}
9745
9345
  analysisDepth: analysis_depth,
9746
9346
  sourceInfo
9747
9347
  });
9748
- const requirementDoc = await generateRequirementWithDFS((null == (_requirementAnalysis_requirements_ = requirementAnalysis.requirements[0]) ? void 0 : _requirementAnalysis_requirements_.fullContent) || inputContent, feature_name, custom_prompt, (null == (_requirementAnalysis_requirements_1 = requirementAnalysis.requirements[0]) ? void 0 : _requirementAnalysis_requirements_1.type) || "\u7CFB\u7EDF");
9348
+ const requirementDoc = await generateRequirementWithDFS((null == (_requirementAnalysis_requirements_ = requirementAnalysis.requirements[0]) ? void 0 : _requirementAnalysis_requirements_.fullContent) || inputContent, feature_name, custom_prompt, (null == (_requirementAnalysis_requirements_1 = requirementAnalysis.requirements[0]) ? void 0 : _requirementAnalysis_requirements_1.type) || "\u7CFB\u7EDF", projectInfo);
9749
9349
  await promises_.writeFile(outputPath, requirementDoc, 'utf8');
9750
9350
  generatedFiles.push(external_path_["default"].resolve(outputPath));
9751
9351
  const stats = {
@@ -9989,7 +9589,7 @@ function analyzeRequirementsFallback(inputContent) {
9989
9589
  ]
9990
9590
  };
9991
9591
  }
9992
- async function generateRequirementWithDFS(requirementContent, requirementTitle, customPrompt, requirementType = "\u7CFB\u7EDF") {
9592
+ async function generateRequirementWithDFS(requirementContent, requirementTitle, customPrompt, requirementType = "\u7CFB\u7EDF", projectInfo) {
9993
9593
  utils_logger.k.info("\u5F00\u59CB\u4F7F\u7528\u6DF1\u5EA6\u641C\u7D22\u7B97\u6CD5\u751F\u6210\u9700\u6C42\u6587\u6863", {
9994
9594
  requirementTitle,
9995
9595
  requirementType,
@@ -10000,7 +9600,16 @@ async function generateRequirementWithDFS(requirementContent, requirementTitle,
10000
9600
  else if (requirementType.includes("\u79FB\u52A8") || requirementType.includes('app') || requirementType.includes('App')) selectedPrompt = appTemplatePrompt;
10001
9601
  else if (requirementType.includes('SDK') || requirementType.includes('sdk') || requirementType.includes("\u7B2C\u4E09\u65B9")) selectedPrompt = sdkTemplatePrompt;
10002
9602
  else if (requirementType.includes("\u63A5\u53E3") || requirementType.includes('API') || requirementType.includes('api')) selectedPrompt = apiTemplatePrompt;
10003
- const prompt = selectedPrompt.replace('{featureName}', requirementTitle).replace('{businessDomain}', '').replace('{generateSequenceDiagram}', "\u662F").replace('{inputContent}', requirementContent).replace('{currentTime}', new Date().toLocaleString('zh-CN'));
9603
+ let projectContext = '';
9604
+ if (projectInfo) projectContext = `
9605
+ ## \u{9879}\u{76EE}\u{4E0A}\u{4E0B}\u{6587}\u{4FE1}\u{606F}
9606
+ \u{5F53}\u{524D}\u{9879}\u{76EE}\u{662F}\u{4E00}\u{4E2A}${projectInfo.projectType}\u{FF0C}\u{4F7F}\u{7528}\u{7684}\u{4E3B}\u{8981}\u{6280}\u{672F}\u{6808}\u{5305}\u{62EC}\u{FF1A}${projectInfo.techStack.join(', ')}\u{3002}
9607
+ \u{9879}\u{76EE}\u{4F7F}\u{7528}\u{7684}\u{7F16}\u{7A0B}\u{8BED}\u{8A00}\u{662F}${projectInfo.language}\u{FF0C}\u{6846}\u{67B6}\u{5305}\u{62EC}\u{FF1A}${projectInfo.frameworks.join(', ')}\u{3002}
9608
+ \u{9879}\u{76EE}\u{4F9D}\u{8D56}\u{FF1A}${projectInfo.dependencies.join(', ')}\u{3002}
9609
+
9610
+ \u{8BF7}\u{6839}\u{636E}\u{4EE5}\u{4E0A}\u{9879}\u{76EE}\u{6280}\u{672F}\u{6808}\u{548C}\u{67B6}\u{6784}\u{4FE1}\u{606F}\u{FF0C}\u{751F}\u{6210}\u{4E0E}\u{9879}\u{76EE}\u{5339}\u{914D}\u{7684}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}\u{3002}
9611
+ `;
9612
+ const prompt = selectedPrompt.replace('{featureName}', requirementTitle).replace('{businessDomain}', projectContext).replace('{generateSequenceDiagram}', "\u662F").replace('{inputContent}', requirementContent).replace('{currentTime}', new Date().toLocaleString('zh-CN'));
10004
9613
  try {
10005
9614
  const result = await callAIServiceWithProgress(`\u{9700}\u{6C42}\u{6587}\u{6863}\u{751F}\u{6210}(${requirementTitle})`, ()=>openai.r.generateText({
10006
9615
  prompt: prompt,
@@ -10070,9 +9679,10 @@ function categorizeError(error) {
10070
9679
  if (errorMsg.includes('validation') || errorMsg.includes("\u65E0\u6548") || errorMsg.includes('required')) return "INVALID_INPUT";
10071
9680
  if (errorMsg.includes('openai') || errorMsg.includes('kimi') || errorMsg.includes('api')) return "AI_SERVICE_ERROR";
10072
9681
  if (errorMsg.includes('json') || errorMsg.includes('parse')) return "JSON_PARSE_ERROR";
10073
- if (errorMsg.includes('network') || errorMsg.includes('timeout') || errorMsg.includes("\u8FDE\u63A5")) return "NETWORK_ERROR";
9682
+ if (errorMsg.includes('network') || errorMsg.includes("\u8FDE\u63A5")) return "NETWORK_ERROR";
10074
9683
  if (errorMsg.includes('memory') || errorMsg.includes('heap')) return "MEMORY_ERROR";
10075
9684
  if (errorMsg.includes('timeout') || errorMsg.includes("\u8D85\u65F6")) return "TIMEOUT_ERROR";
9685
+ if (errorMsg.includes('network') || errorMsg.includes("\u8FDE\u63A5")) return "NETWORK_ERROR";
10076
9686
  return "UNKNOWN_ERROR";
10077
9687
  }
10078
9688
  function generateUserFriendlyErrorMessage(errorType, originalMessage) {
@@ -10134,6 +9744,76 @@ async function callAIServiceWithProgress(description, apiCall, maxRetries = 3, b
10134
9744
  throw error;
10135
9745
  }
10136
9746
  }
9747
+ function extractProjectInfo(projectAnalysis) {
9748
+ const projectInfo = {
9749
+ techStack: [],
9750
+ frameworks: [],
9751
+ language: '',
9752
+ projectType: '',
9753
+ dependencies: []
9754
+ };
9755
+ const techStackKeywords = [
9756
+ 'React',
9757
+ 'Vue',
9758
+ 'Angular',
9759
+ 'Svelte',
9760
+ 'Node.js',
9761
+ 'Express',
9762
+ 'Koa',
9763
+ 'Fastify',
9764
+ 'Python',
9765
+ 'Django',
9766
+ 'Flask',
9767
+ 'Java',
9768
+ 'Spring',
9769
+ 'Spring Boot',
9770
+ 'TypeScript',
9771
+ 'JavaScript',
9772
+ 'PostgreSQL',
9773
+ 'MySQL',
9774
+ 'MongoDB',
9775
+ 'Redis',
9776
+ 'Docker',
9777
+ 'Kubernetes'
9778
+ ];
9779
+ const frameworkKeywords = [
9780
+ 'React',
9781
+ 'Vue',
9782
+ 'Angular',
9783
+ 'Svelte',
9784
+ 'Express',
9785
+ 'Koa',
9786
+ 'Fastify',
9787
+ 'Django',
9788
+ 'Flask',
9789
+ 'Spring',
9790
+ 'Spring Boot',
9791
+ 'Next.js',
9792
+ 'Nuxt.js'
9793
+ ];
9794
+ const languageKeywords = [
9795
+ 'TypeScript',
9796
+ 'JavaScript',
9797
+ 'Python',
9798
+ 'Java',
9799
+ 'Go',
9800
+ 'Rust',
9801
+ 'C#'
9802
+ ];
9803
+ for (const keyword of techStackKeywords)if (projectAnalysis.includes(keyword)) projectInfo.techStack.push(keyword);
9804
+ for (const keyword of frameworkKeywords)if (projectAnalysis.includes(keyword)) projectInfo.frameworks.push(keyword);
9805
+ for (const keyword of languageKeywords)if (projectAnalysis.includes(keyword)) {
9806
+ projectInfo.language = keyword;
9807
+ break;
9808
+ }
9809
+ if (projectAnalysis.includes('package.json')) projectInfo.projectType = "Node.js\u9879\u76EE";
9810
+ else if (projectAnalysis.includes('requirements.txt') || projectAnalysis.includes('pyproject.toml')) projectInfo.projectType = "Python\u9879\u76EE";
9811
+ else if (projectAnalysis.includes('pom.xml') || projectAnalysis.includes('build.gradle')) projectInfo.projectType = "Java\u9879\u76EE";
9812
+ else projectInfo.projectType = "\u901A\u7528\u9879\u76EE";
9813
+ const dependencyMatch = projectAnalysis.match(/## 依赖.*?```.*?\n([\s\S]*?)\n```/);
9814
+ if (dependencyMatch && dependencyMatch[1]) projectInfo.dependencies = dependencyMatch[1].split('\n').filter((line)=>'' !== line.trim()).map((line)=>line.trim());
9815
+ return projectInfo;
9816
+ }
10137
9817
  async function extractFeaturesWithNLP(inputContent) {
10138
9818
  try {
10139
9819
  utils_logger.k.info("\u5F00\u59CB\u4F7F\u7528\u589E\u5F3A\u578BNLP\u6280\u672F\u63D0\u53D6\u529F\u80FD\u70B9", {
@@ -10148,10 +9828,18 @@ async function extractFeaturesWithNLP(inputContent) {
10148
9828
  const jsonMatch = result.match(/\{[\s\S]*\}/);
10149
9829
  if (jsonMatch) {
10150
9830
  const features = JSON.parse(jsonMatch[0]);
9831
+ if (Array.isArray(features)) {
9832
+ utils_logger.k.info("\u589E\u5F3A\u578B\u529F\u80FD\u70B9\u63D0\u53D6\u6210\u529F", {
9833
+ featureCount: features.length
9834
+ });
9835
+ return features;
9836
+ }
10151
9837
  utils_logger.k.info("\u589E\u5F3A\u578B\u529F\u80FD\u70B9\u63D0\u53D6\u6210\u529F", {
10152
- featureCount: features.length
9838
+ featureCount: 1
10153
9839
  });
10154
- return features;
9840
+ return [
9841
+ features
9842
+ ];
10155
9843
  }
10156
9844
  } catch (parseError) {
10157
9845
  utils_logger.k.warn("JSON\u89E3\u6790\u5931\u8D25", {
@@ -12665,6 +12353,294 @@ const listSupportedFormatsTool = {
12665
12353
  \u{8F93}\u{51FA}\u{683C}\u{5F0F}\u{FF1A}${formats.output.join(', ')}`;
12666
12354
  }
12667
12355
  };
12356
+ const BugFixAgentParams = esm.z.object({
12357
+ bug_description: esm.z.string().describe("Bug\u63CF\u8FF0\u4FE1\u606F\u6216\u95EE\u9898\u8BF4\u660E"),
12358
+ project_path: esm.z.string().optional().describe("\u9879\u76EE\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u7528\u4E8E\u6307\u5B9A\u8981\u5206\u6790\u7684\u9879\u76EE\u76EE\u5F55"),
12359
+ project_name: esm.z.string().optional().default('current-project').describe("\u9879\u76EE\u540D\u79F0"),
12360
+ output_format: esm.z["enum"]([
12361
+ 'markdown',
12362
+ 'json'
12363
+ ]).optional().default('markdown').describe("\u8F93\u51FA\u683C\u5F0F")
12364
+ });
12365
+ const bugFixAgentTool = {
12366
+ name: "bug\u4FEE\u590D\u667A\u80FD\u4F53",
12367
+ description: "\u6839\u636E\u7528\u6237\u63D0\u4F9B\u7684bug\u63CF\u8FF0\u4FE1\u606F\uFF0C\u667A\u80FD\u5206\u6790\u9879\u76EE\u7ED3\u6784\u5E76\u751F\u6210\u4FEE\u590D\u65B9\u6848",
12368
+ parameters: BugFixAgentParams,
12369
+ execute: async (args)=>{
12370
+ const { bug_description, project_path, project_name = 'current-project', output_format = 'markdown' } = args;
12371
+ try {
12372
+ utils_logger.k.info("\u5F00\u59CBBug\u4FEE\u590D\u667A\u80FD\u4F53\u6D41\u7A0B", {
12373
+ project_name,
12374
+ project_path
12375
+ });
12376
+ utils_logger.k.info("1. \u9879\u76EE\u7406\u89E3\u9636\u6BB5\uFF1A\u8C03\u7528project-template\u670D\u52A1\u5206\u6790\u9879\u76EE\u7ED3\u6784");
12377
+ const projectTemplateArgs = {
12378
+ project_name,
12379
+ project_path,
12380
+ custom_rules: void 0
12381
+ };
12382
+ const projectAnalysisResult = await initProjectStandard.execute(projectTemplateArgs);
12383
+ let projectRulesPromptData = null;
12384
+ if (projectAnalysisResult) try {
12385
+ projectRulesPromptData = JSON.parse(projectAnalysisResult);
12386
+ } catch (parseError) {
12387
+ utils_logger.k.warn("\u9879\u76EE\u5206\u6790\u7ED3\u679C\u89E3\u6790\u5931\u8D25", {
12388
+ parseError
12389
+ });
12390
+ }
12391
+ utils_logger.k.info("2. \u89C4\u5219\u5339\u914D\u9636\u6BB5\uFF1A\u6839\u636Eproject_rules.md\u5B9A\u4F4D\u76F8\u5173\u5185\u5BB9");
12392
+ const projectRules = await getProjectRules(project_name);
12393
+ utils_logger.k.info("3. \u4EFB\u52A1\u89C4\u5212\u9636\u6BB5\uFF1A\u521B\u5EFA\u8BE6\u7EC6\u7684\u6267\u884C\u6E05\u5355");
12394
+ const taskPlan = await createTaskExecutionPlan(bug_description, projectRulesPromptData, projectRules);
12395
+ utils_logger.k.info("4. \u5B9E\u65BD\u9636\u6BB5\uFF1A\u6267\u884C\u4FEE\u590D\u4EFB\u52A1\u5E76\u751F\u6210\u7ED3\u679C");
12396
+ const fixResult = await executeBugFixTask(bug_description, projectRules, taskPlan);
12397
+ const outputPath = await saveBugFixResult(fixResult, project_name, output_format);
12398
+ utils_logger.k.info("Bug\u4FEE\u590D\u667A\u80FD\u4F53\u6D41\u7A0B\u5B8C\u6210", {
12399
+ outputPath
12400
+ });
12401
+ return JSON.stringify({
12402
+ success: true,
12403
+ message: "Bug\u4FEE\u590D\u5206\u6790\u5B8C\u6210",
12404
+ data: {
12405
+ project_name,
12406
+ task_plan: taskPlan,
12407
+ fix_result: fixResult,
12408
+ output_path: outputPath
12409
+ }
12410
+ });
12411
+ } catch (error) {
12412
+ const errorMsg = error instanceof Error ? error.message : String(error);
12413
+ utils_logger.k.error("Bug\u4FEE\u590D\u667A\u80FD\u4F53\u6267\u884C\u5931\u8D25", {
12414
+ project_name,
12415
+ error: errorMsg
12416
+ });
12417
+ throw new Error(`Bug\u{4FEE}\u{590D}\u{667A}\u{80FD}\u{4F53}\u{6267}\u{884C}\u{5931}\u{8D25}: ${errorMsg}`);
12418
+ }
12419
+ }
12420
+ };
12421
+ async function getProjectRules(projectName) {
12422
+ try {
12423
+ const storageDir = (0, src_config.WR)();
12424
+ const projectRulesPath = external_path_["default"].join(storageDir, 'project_rules.md');
12425
+ try {
12426
+ await promises_["default"].access(projectRulesPath);
12427
+ const projectRules = await promises_["default"].readFile(projectRulesPath, 'utf-8');
12428
+ utils_logger.k.info("\u6210\u529F\u8BFB\u53D6\u9879\u76EE\u89C4\u5219\u6587\u4EF6", {
12429
+ projectRulesPath
12430
+ });
12431
+ return projectRules;
12432
+ } catch (fileError) {
12433
+ utils_logger.k.warn("\u9879\u76EE\u89C4\u5219\u6587\u4EF6\u4E0D\u5B58\u5728\uFF0C\u5C06\u4F7F\u7528\u9ED8\u8BA4\u89C4\u5219", {
12434
+ projectRulesPath
12435
+ });
12436
+ return getDefaultProjectRules(projectName);
12437
+ }
12438
+ } catch (error) {
12439
+ const errorMsg = error instanceof Error ? error.message : String(error);
12440
+ utils_logger.k.error("\u83B7\u53D6\u9879\u76EE\u89C4\u5219\u5931\u8D25", {
12441
+ error: errorMsg
12442
+ });
12443
+ return getDefaultProjectRules(projectName);
12444
+ }
12445
+ }
12446
+ function getDefaultProjectRules(projectName) {
12447
+ return `# ${projectName} - \u{9879}\u{76EE}\u{5F00}\u{53D1}\u{89C4}\u{8303}
12448
+
12449
+ ## 1. \u{9879}\u{76EE}\u{6982}\u{8FF0}
12450
+ - \u{9879}\u{76EE}\u{540D}\u{79F0}: ${projectName}
12451
+ - \u{6280}\u{672F}\u{6808}: \u{901A}\u{7528}Web\u{9879}\u{76EE}
12452
+ - \u{67B6}\u{6784}\u{6A21}\u{5F0F}: \u{5206}\u{5C42}\u{67B6}\u{6784}
12453
+
12454
+ ## 2. \u{76EE}\u{5F55}\u{7ED3}\u{6784}\u{89C4}\u{8303}
12455
+ \`\`\`
12456
+ src/
12457
+ \u{251C}\u{2500}\u{2500} controllers/ # \u{63A7}\u{5236}\u{5668}\u{5C42}
12458
+ \u{251C}\u{2500}\u{2500} services/ # \u{4E1A}\u{52A1}\u{903B}\u{8F91}\u{5C42}
12459
+ \u{251C}\u{2500}\u{2500} repositories/ # \u{6570}\u{636E}\u{8BBF}\u{95EE}\u{5C42}
12460
+ \u{251C}\u{2500}\u{2500} models/ # \u{6570}\u{636E}\u{6A21}\u{578B}
12461
+ \u{251C}\u{2500}\u{2500} middleware/ # \u{4E2D}\u{95F4}\u{4EF6}
12462
+ \u{251C}\u{2500}\u{2500} utils/ # \u{5DE5}\u{5177}\u{51FD}\u{6570}
12463
+ \u{2514}\u{2500}\u{2500} config/ # \u{914D}\u{7F6E}\u{6587}\u{4EF6}
12464
+ \`\`\`
12465
+
12466
+ ## 3. \u{4EE3}\u{7801}\u{89C4}\u{8303}
12467
+ - \u{547D}\u{540D}\u{89C4}\u{8303}: \u{4F7F}\u{7528}camelCase\u{547D}\u{540D}\u{53D8}\u{91CF}\u{548C}\u{51FD}\u{6570}
12468
+ - \u{4EE3}\u{7801}\u{98CE}\u{683C}: \u{4F7F}\u{7528}4\u{7A7A}\u{683C}\u{7F29}\u{8FDB}
12469
+ - \u{6CE8}\u{91CA}\u{8981}\u{6C42}: \u{51FD}\u{6570}\u{9700}\u{6DFB}\u{52A0}JSDoc\u{6CE8}\u{91CA}
12470
+ - \u{5BFC}\u{5165}\u{89C4}\u{5219}: \u{6309}\u{6A21}\u{5757}\u{5206}\u{7C7B}\u{5BFC}\u{5165}
12471
+
12472
+ ## 4. \u{9519}\u{8BEF}\u{5904}\u{7406}\u{89C4}\u{8303}
12473
+ - \u{4F7F}\u{7528}try-catch\u{5904}\u{7406}\u{5F02}\u{5E38}
12474
+ - \u{63D0}\u{4F9B}\u{6709}\u{610F}\u{4E49}\u{7684}\u{9519}\u{8BEF}\u{4FE1}\u{606F}
12475
+ - \u{8BB0}\u{5F55}\u{9519}\u{8BEF}\u{65E5}\u{5FD7}
12476
+ `;
12477
+ }
12478
+ async function createTaskExecutionPlan(bugDescription, projectAnalysis, projectRules) {
12479
+ try {
12480
+ const prompt = `\u{4F60}\u{662F}\u{4E00}\u{4F4D}\u{4E13}\u{4E1A}\u{7684}\u{8F6F}\u{4EF6}Bug\u{4FEE}\u{590D}\u{4E13}\u{5BB6}\u{3002}\u{8BF7}\u{57FA}\u{4E8E}\u{4EE5}\u{4E0B}\u{4FE1}\u{606F}\u{521B}\u{5EFA}\u{8BE6}\u{7EC6}\u{7684}Bug\u{4FEE}\u{590D}\u{4EFB}\u{52A1}\u{6267}\u{884C}\u{6E05}\u{5355}\u{FF1A}
12481
+
12482
+ ## Bug\u{63CF}\u{8FF0}
12483
+ ${bugDescription}
12484
+
12485
+ ## \u{9879}\u{76EE}\u{5206}\u{6790}
12486
+ ${(null == projectAnalysis ? void 0 : projectAnalysis.prompt) || "\u65E0\u9879\u76EE\u5206\u6790\u4FE1\u606F"}
12487
+
12488
+ ## \u{9879}\u{76EE}\u{89C4}\u{5219}
12489
+ ${projectRules}
12490
+
12491
+ ## \u{4EFB}\u{52A1}\u{8981}\u{6C42}
12492
+ \u{8BF7}\u{6309}\u{7167}\u{4EE5}\u{4E0B}\u{7ED3}\u{6784}\u{521B}\u{5EFA}\u{4EFB}\u{52A1}\u{6267}\u{884C}\u{6E05}\u{5355}\u{FF1A}
12493
+ 1. \u{63CF}\u{8FF0}\u{4FE1}\u{606F}\u{4E0E}\u{5DE5}\u{7A0B}\u{5185}\u{5BB9}\u{5339}\u{914D}\u{7684}\u{5BF9}\u{5E94}\u{5173}\u{7CFB}
12494
+ - \u{5206}\u{6790}Bug\u{63CF}\u{8FF0}\u{4FE1}\u{606F}
12495
+ - \u{89E3}\u{6790}\u{9879}\u{76EE}\u{89C4}\u{5219}\u{6587}\u{4EF6}
12496
+ - \u{5EFA}\u{7ACB}\u{63CF}\u{8FF0}\u{4FE1}\u{606F}\u{4E0E}\u{9879}\u{76EE}\u{6587}\u{4EF6}/\u{6A21}\u{5757}\u{7684}\u{6620}\u{5C04}\u{5173}\u{7CFB}
12497
+ - \u{786E}\u{5B9A}\u{53D7}\u{5F71}\u{54CD}\u{7684}\u{4EE3}\u{7801}\u{8303}\u{56F4}
12498
+ 2. \u{5B8C}\u{6210}\u{672C}\u{6B21}\u{63CF}\u{8FF0}\u{4EFB}\u{52A1}\u{7684}\u{65B9}\u{6CD5}\u{548C}\u{4EA4}\u{4ED8}\u{7ED3}\u{679C}
12499
+ - \u{5236}\u{5B9A}\u{4FEE}\u{590D}\u{65B9}\u{6848}\u{548C}\u{5B9E}\u{65BD}\u{6B65}\u{9AA4}
12500
+ - \u{751F}\u{6210}\u{4FEE}\u{590D}\u{4EE3}\u{7801}\u{6216}\u{4FEE}\u{6539}\u{5EFA}\u{8BAE}
12501
+ - \u{63D0}\u{4F9B}\u{9A8C}\u{8BC1}\u{65B9}\u{6CD5}\u{548C}\u{6D4B}\u{8BD5}\u{7528}\u{4F8B}
12502
+ - \u{8F93}\u{51FA}\u{4FEE}\u{590D}\u{62A5}\u{544A}\u{548C}\u{76F8}\u{5173}\u{6587}\u{6863}
12503
+
12504
+ \u{8BF7}\u{8F93}\u{51FA}JSON\u{683C}\u{5F0F}\u{7684}\u{7ED3}\u{679C}\u{FF0C}\u{5305}\u{542B}\u{4EE5}\u{4E0A}\u{4E24}\u{4E2A}\u{4E3B}\u{8981}\u{90E8}\u{5206}\u{7684}\u{8BE6}\u{7EC6}\u{5185}\u{5BB9}\u{3002}`;
12505
+ const result = await openai.r.generateText({
12506
+ prompt,
12507
+ system_prompt: "\u4F60\u662F\u4E00\u4F4D\u4E13\u4E1A\u7684\u8F6F\u4EF6Bug\u4FEE\u590D\u4E13\u5BB6\uFF0C\u5584\u4E8E\u5206\u6790Bug\u5E76\u5236\u5B9A\u4FEE\u590D\u65B9\u6848\u3002",
12508
+ temperature: 0.3
12509
+ });
12510
+ try {
12511
+ const jsonMatch = result.match(/\{[\s\S]*\}/);
12512
+ if (jsonMatch) return JSON.parse(jsonMatch[0]);
12513
+ } catch (parseError) {
12514
+ utils_logger.k.warn("\u4EFB\u52A1\u6267\u884C\u6E05\u5355JSON\u89E3\u6790\u5931\u8D25\uFF0C\u4F7F\u7528\u9ED8\u8BA4\u7ED3\u6784", {
12515
+ parseError
12516
+ });
12517
+ }
12518
+ return {
12519
+ description_mapping: {
12520
+ analysis: "\u57FA\u4E8EBug\u63CF\u8FF0\u8FDB\u884C\u5206\u6790",
12521
+ project_rules_analysis: "\u89E3\u6790\u9879\u76EE\u89C4\u5219\u6587\u4EF6",
12522
+ mapping_relationship: "\u5EFA\u7ACB\u6620\u5C04\u5173\u7CFB",
12523
+ affected_scope: "\u786E\u5B9A\u53D7\u5F71\u54CD\u4EE3\u7801\u8303\u56F4"
12524
+ },
12525
+ task_completion: {
12526
+ fix_plan: "\u5236\u5B9A\u4FEE\u590D\u65B9\u6848",
12527
+ implementation_steps: "\u5B9E\u65BD\u6B65\u9AA4",
12528
+ code_changes: "\u4EE3\u7801\u4FEE\u6539\u5EFA\u8BAE",
12529
+ validation_methods: "\u9A8C\u8BC1\u65B9\u6CD5",
12530
+ test_cases: "\u6D4B\u8BD5\u7528\u4F8B",
12531
+ deliverables: "\u4EA4\u4ED8\u6587\u6863"
12532
+ }
12533
+ };
12534
+ } catch (error) {
12535
+ const errorMsg = error instanceof Error ? error.message : String(error);
12536
+ utils_logger.k.error("\u521B\u5EFA\u4EFB\u52A1\u6267\u884C\u6E05\u5355\u5931\u8D25", {
12537
+ error: errorMsg
12538
+ });
12539
+ return {
12540
+ description_mapping: {
12541
+ analysis: "\u57FA\u4E8EBug\u63CF\u8FF0\u8FDB\u884C\u5206\u6790",
12542
+ project_rules_analysis: "\u89E3\u6790\u9879\u76EE\u89C4\u5219\u6587\u4EF6",
12543
+ mapping_relationship: "\u5EFA\u7ACB\u6620\u5C04\u5173\u7CFB",
12544
+ affected_scope: "\u786E\u5B9A\u53D7\u5F71\u54CD\u4EE3\u7801\u8303\u56F4"
12545
+ },
12546
+ task_completion: {
12547
+ fix_plan: "\u5236\u5B9A\u4FEE\u590D\u65B9\u6848",
12548
+ implementation_steps: "\u5B9E\u65BD\u6B65\u9AA4",
12549
+ code_changes: "\u4EE3\u7801\u4FEE\u6539\u5EFA\u8BAE",
12550
+ validation_methods: "\u9A8C\u8BC1\u65B9\u6CD5",
12551
+ test_cases: "\u6D4B\u8BD5\u7528\u4F8B",
12552
+ deliverables: "\u4EA4\u4ED8\u6587\u6863"
12553
+ }
12554
+ };
12555
+ }
12556
+ }
12557
+ async function executeBugFixTask(bugDescription, projectRules, taskPlan) {
12558
+ try {
12559
+ const prompt = `\u{4F60}\u{662F}\u{4E00}\u{4F4D}\u{4E13}\u{4E1A}\u{7684}\u{8F6F}\u{4EF6}Bug\u{4FEE}\u{590D}\u{4E13}\u{5BB6}\u{3002}\u{8BF7}\u{57FA}\u{4E8E}\u{4EE5}\u{4E0B}\u{4FE1}\u{606F}\u{6267}\u{884C}Bug\u{4FEE}\u{590D}\u{4EFB}\u{52A1}\u{FF1A}
12560
+
12561
+ ## Bug\u{63CF}\u{8FF0}
12562
+ ${bugDescription}
12563
+
12564
+ ## \u{9879}\u{76EE}\u{89C4}\u{5219}
12565
+ ${projectRules}
12566
+
12567
+ ## \u{4EFB}\u{52A1}\u{6267}\u{884C}\u{8BA1}\u{5212}
12568
+ ${JSON.stringify(taskPlan, null, 2)}
12569
+
12570
+ ## \u{4EFB}\u{52A1}\u{8981}\u{6C42}
12571
+ \u{8BF7}\u{5B8C}\u{6210}\u{4EE5}\u{4E0B}\u{4EFB}\u{52A1}\u{FF1A}
12572
+ 1. \u{5206}\u{6790}Bug\u{7684}\u{6839}\u{672C}\u{539F}\u{56E0}
12573
+ 2. \u{5236}\u{5B9A}\u{8BE6}\u{7EC6}\u{7684}\u{4FEE}\u{590D}\u{65B9}\u{6848}
12574
+ 3. \u{63D0}\u{4F9B}\u{5177}\u{4F53}\u{7684}\u{4EE3}\u{7801}\u{4FEE}\u{6539}\u{5EFA}\u{8BAE}
12575
+ 4. \u{7F16}\u{5199}\u{9A8C}\u{8BC1}\u{65B9}\u{6CD5}\u{548C}\u{6D4B}\u{8BD5}\u{7528}\u{4F8B}
12576
+ 5. \u{751F}\u{6210}\u{4FEE}\u{590D}\u{62A5}\u{544A}
12577
+
12578
+ \u{8BF7}\u{8F93}\u{51FA}\u{8BE6}\u{7EC6}\u{7684}\u{4FEE}\u{590D}\u{65B9}\u{6848}\u{FF0C}\u{5305}\u{62EC}\u{4EE3}\u{7801}\u{793A}\u{4F8B}\u{548C}\u{5B9E}\u{65BD}\u{6B65}\u{9AA4}\u{3002}`;
12579
+ const result = await openai.r.generateText({
12580
+ prompt,
12581
+ system_prompt: "\u4F60\u662F\u4E00\u4F4D\u4E13\u4E1A\u7684\u8F6F\u4EF6Bug\u4FEE\u590D\u4E13\u5BB6\uFF0C\u5584\u4E8E\u5206\u6790Bug\u5E76\u63D0\u4F9B\u8BE6\u7EC6\u7684\u4FEE\u590D\u65B9\u6848\u3002",
12582
+ temperature: 0.3,
12583
+ max_tokens: 4000
12584
+ });
12585
+ return {
12586
+ bug_analysis: "\u5DF2\u5B8C\u6210Bug\u5206\u6790",
12587
+ fix_solution: result,
12588
+ implementation_guide: "\u8BF7\u6309\u7167\u4E0A\u8FF0\u65B9\u6848\u5B9E\u65BD\u4FEE\u590D",
12589
+ validation_method: "\u901A\u8FC7\u5355\u5143\u6D4B\u8BD5\u548C\u96C6\u6210\u6D4B\u8BD5\u9A8C\u8BC1\u4FEE\u590D\u6548\u679C"
12590
+ };
12591
+ } catch (error) {
12592
+ const errorMsg = error instanceof Error ? error.message : String(error);
12593
+ utils_logger.k.error("\u6267\u884CBug\u4FEE\u590D\u4EFB\u52A1\u5931\u8D25", {
12594
+ error: errorMsg
12595
+ });
12596
+ return {
12597
+ bug_analysis: "Bug\u5206\u6790\u5931\u8D25",
12598
+ fix_solution: `\u{4FEE}\u{590D}\u{65B9}\u{6848}\u{751F}\u{6210}\u{5931}\u{8D25}: ${errorMsg}`,
12599
+ implementation_guide: "\u8BF7\u624B\u52A8\u5206\u6790\u5E76\u4FEE\u590DBug",
12600
+ validation_method: "\u624B\u52A8\u9A8C\u8BC1\u4FEE\u590D\u6548\u679C"
12601
+ };
12602
+ }
12603
+ }
12604
+ async function saveBugFixResult(fixResult, projectName, outputFormat) {
12605
+ try {
12606
+ const storageDir = (0, src_config.WR)();
12607
+ const bugFixDir = external_path_["default"].join(storageDir, 'bug-fix-results');
12608
+ await promises_["default"].mkdir(bugFixDir, {
12609
+ recursive: true
12610
+ });
12611
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
12612
+ const fileName = `bug-fix-${projectName}-${timestamp}.${outputFormat}`;
12613
+ const outputPath = external_path_["default"].join(bugFixDir, fileName);
12614
+ if ('json' === outputFormat) await promises_["default"].writeFile(outputPath, JSON.stringify(fixResult, null, 2), 'utf-8');
12615
+ else {
12616
+ const markdownContent = `# Bug\u{4FEE}\u{590D}\u{62A5}\u{544A}
12617
+
12618
+ ## \u{9879}\u{76EE}\u{540D}\u{79F0}
12619
+ ${projectName}
12620
+
12621
+ ## \u{4FEE}\u{590D}\u{7ED3}\u{679C}
12622
+ ${fixResult.fix_solution}
12623
+
12624
+ ## \u{5B9E}\u{65BD}\u{6307}\u{5357}
12625
+ ${fixResult.implementation_guide}
12626
+
12627
+ ## \u{9A8C}\u{8BC1}\u{65B9}\u{6CD5}
12628
+ ${fixResult.validation_method}
12629
+
12630
+ ## \u{751F}\u{6210}\u{65F6}\u{95F4}
12631
+ ${new Date().toISOString()}
12632
+ `;
12633
+ await promises_["default"].writeFile(outputPath, markdownContent, 'utf-8');
12634
+ }
12635
+ return outputPath;
12636
+ } catch (error) {
12637
+ const errorMsg = error instanceof Error ? error.message : String(error);
12638
+ utils_logger.k.error("\u4FDD\u5B58Bug\u4FEE\u590D\u7ED3\u679C\u5931\u8D25", {
12639
+ error: errorMsg
12640
+ });
12641
+ throw new Error(`\u{4FDD}\u{5B58}Bug\u{4FEE}\u{590D}\u{7ED3}\u{679C}\u{5931}\u{8D25}: ${errorMsg}`);
12642
+ }
12643
+ }
12668
12644
  (0, src_config.NL)();
12669
12645
  const server = new FastMCP({
12670
12646
  name: src_config.Gp.name,
@@ -12685,6 +12661,7 @@ server.addTool(convertImageTool);
12685
12661
  server.addTool(batchConvertImagesTool);
12686
12662
  server.addTool(getImageInfoTool);
12687
12663
  server.addTool(listSupportedFormatsTool);
12664
+ server.addTool(bugFixAgentTool);
12688
12665
  server.addTool(addTaskToQueueTool);
12689
12666
  server.addTool(createIterationTool);
12690
12667
  server.addTool(enhanced_tools_updateTaskTool);