intention-coding 0.3.1 → 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
@@ -6345,56 +6345,7 @@ const initProjectStandard = {
6345
6345
  await promises_["default"].mkdir(aicoDir, {
6346
6346
  recursive: true
6347
6347
  });
6348
- const projectRulesPath = external_path_["default"].join(aicoDir, 'project_rules.md');
6349
- const initialContent = `# ${project_name} - \u{9879}\u{76EE}\u{5F00}\u{53D1}\u{89C4}\u{8303}
6350
- ## \u{9879}\u{76EE}\u{4FE1}\u{606F}
6351
- - **\u{9879}\u{76EE}\u{540D}\u{79F0}**: ${project_name}
6352
- - **\u{5206}\u{6790}\u{6587}\u{4EF6}**: ${external_path_["default"].relative(process.cwd(), projectAnalysisPath)}
6353
-
6354
- ## \u{4E0B}\u{4E00}\u{6B65}\u{64CD}\u{4F5C}
6355
- \u{8BF7}\u{4F7F}\u{7528}\u{4EE5}\u{4E0B}\u{63D0}\u{793A}\u{8BCD}\u{8C03}\u{7528}AI\u{670D}\u{52A1}\u{751F}\u{6210}\u{9879}\u{76EE}\u{89C4}\u{5219}\u{5185}\u{5BB9}\u{FF1A}
6356
- \`\`\`json
6357
- ${JSON.stringify(projectRulesPromptData, null, 2)}
6358
- \`\`\`
6359
- `;
6360
- await promises_["default"].writeFile(projectRulesPath, initialContent, 'utf-8');
6361
- utils_logger.k.info("\u9879\u76EE\u89C4\u5219\u6587\u4EF6\u521B\u5EFA\u6210\u529F", {
6362
- path: projectRulesPath
6363
- });
6364
- const result = {
6365
- success: true,
6366
- message: "\u9879\u76EE\u5F00\u53D1\u89C4\u8303\u5185\u5BB9\u751F\u6210\u5B8C\u6210",
6367
- project_info: {
6368
- name: project_name,
6369
- analysis_file: external_path_["default"].resolve(projectAnalysisPath)
6370
- },
6371
- generated_rules: {
6372
- projectrules: {
6373
- filename: 'project_rules.md',
6374
- content: initialContent,
6375
- description: "\u9879\u76EE\u5F00\u53D1\u89C4\u5219\u6587\u4EF6",
6376
- suggested_path: '.aico/project_rules.md'
6377
- }
6378
- },
6379
- instructions: {
6380
- overview: "\u8BF7\u4F7F\u7528\u4EE5\u4E0B\u63D0\u793A\u8BCD\u8C03\u7528AI\u670D\u52A1\u751F\u6210\u9879\u76EE\u89C4\u5219\u5185\u5BB9\uFF1A",
6381
- workflow: [
6382
- "1. \u4F7F\u7528prompt_data\u4E2D\u7684\u63D0\u793A\u8BCD\u8C03\u7528AI\u670D\u52A1\u751F\u6210project_rules.md\u5185\u5BB9",
6383
- "2. \u5C06\u751F\u6210\u7684\u5185\u5BB9\u4FDD\u5B58\u5230.aico/project_rules.md\u8DEF\u5F84",
6384
- "3. \u6839\u636E\u9700\u8981\u8C03\u6574\u548C\u4F18\u5316\u751F\u6210\u7684\u5185\u5BB9"
6385
- ],
6386
- actions: [
6387
- {
6388
- action: 'generate_and_create_file',
6389
- file: '.aico/project_rules.md',
6390
- description: "\u9879\u76EE\u5F00\u53D1\u89C4\u5219\u6587\u4EF6",
6391
- has_prompt_data: true,
6392
- prompt_task: 'generate_project_rules'
6393
- }
6394
- ]
6395
- }
6396
- };
6397
- return JSON.stringify(result, null, 2);
6348
+ return JSON.stringify(projectRulesPromptData, null, 2);
6398
6349
  } catch (error) {
6399
6350
  const errorMsg = error instanceof Error ? error.message : String(error);
6400
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}`, {
@@ -8959,9 +8910,12 @@ const apiTemplatePrompt = `\u{4F60}\u{662F}\u{4E00}\u{4F4D}\u{4E13}\u{4E1A}\u{76
8959
8910
  |**\u{529F}\u{80FD}\u{63CF}\u{8FF0}**|[\u{8BE6}\u{7EC6}\u{7684}\u{529F}\u{80FD}\u{63CF}\u{8FF0}]|
8960
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}]|
8961
8912
 
8962
- ## 3. ER\u{903B}\u{8F91}\u{56FE}\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}
8963
8915
 
8964
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
+ \`\`\`
8965
8919
 
8966
8920
  ## 4. \u{6570}\u{636E}\u{8868}\u{5B9E}\u{4F53}\u{8BBE}\u{8BA1}
8967
8921
 
@@ -8969,22 +8923,19 @@ const apiTemplatePrompt = `\u{4F60}\u{662F}\u{4E00}\u{4F4D}\u{4E13}\u{4E1A}\u{76
8969
8923
 
8970
8924
  ## 5. API\u{63A5}\u{53E3}\u{8BBE}\u{8BA1}
8971
8925
 
8972
- ### 5.1 \u{63A5}\u{53E3}\u{6982}\u{8FF0}
8973
- [\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}]
8974
-
8975
- ### 5.2 \u{63A5}\u{53E3}\u{5217}\u{8868}
8926
+ ### 5.1 \u{63A5}\u{53E3}\u{5217}\u{8868}
8976
8927
  [\u{5217}\u{51FA}\u{6240}\u{6709}\u{76F8}\u{5173}\u{7684}API\u{63A5}\u{53E3}]
8977
8928
 
8978
- ## 5. \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}
8979
8930
 
8980
- ### 5.1 \u{63A5}\u{53E3}1 - [\u{63A5}\u{53E3}\u{540D}\u{79F0}]
8981
- #### 5.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}
8982
8933
  - **\u{63A5}\u{53E3}\u{5730}\u{5740}**: [URL\u{8DEF}\u{5F84}]
8983
8934
  - **\u{8BF7}\u{6C42}\u{65B9}\u{6CD5}**: [\u{53EA}\u{5141}\u{8BB8}\u{4F7F}\u{7528}POST\u{8BF7}\u{6C42}]
8984
8935
  - **\u{534F}\u{8BAE}**: [\u{53EA}\u{5141}\u{8BB8}\u{4F7F}\u{7528}HTTPS]
8985
8936
  - **\u{5185}\u{5BB9}\u{7C7B}\u{578B}**: [application/json\u{7B49}]
8986
8937
 
8987
- #### 5.1.2 \u{8BF7}\u{6C42}\u{53C2}\u{6570}
8938
+ #### 5.2.3 \u{8BF7}\u{6C42}\u{53C2}\u{6570}
8988
8939
  [\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{8BF7}\u{6C42}\u{53C2}\u{6570}]
8989
8940
 
8990
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}|
@@ -8992,7 +8943,7 @@ const apiTemplatePrompt = `\u{4F60}\u{662F}\u{4E00}\u{4F4D}\u{4E13}\u{4E1A}\u{76
8992
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}]|
8993
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}]|
8994
8945
 
8995
- #### 5.1.3 \u{54CD}\u{5E94}\u{53C2}\u{6570}
8946
+ #### 5.2.4 \u{54CD}\u{5E94}\u{53C2}\u{6570}
8996
8947
  [\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{54CD}\u{5E94}\u{53C2}\u{6570}]
8997
8948
 
8998
8949
  |\u{53C2}\u{6570}\u{540D}|\u{7C7B}\u{578B}|\u{8BF4}\u{660E}|
@@ -9000,7 +8951,7 @@ const apiTemplatePrompt = `\u{4F60}\u{662F}\u{4E00}\u{4F4D}\u{4E13}\u{4E1A}\u{76
9000
8951
  |[\u{53C2}\u{6570}1]|[string/object\u{7B49}]|[\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}]|
9001
8952
  |[\u{53C2}\u{6570}2]|[string/object\u{7B49}]|[\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}]|
9002
8953
 
9003
- #### 5.1.4 \u{9519}\u{8BEF}\u{7801}\u{8BF4}\u{660E}
8954
+ #### 5.2.5 \u{9519}\u{8BEF}\u{7801}\u{8BF4}\u{660E}
9004
8955
  [\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{8BE5}\u{63A5}\u{53E3}\u{7684}\u{9519}\u{8BEF}\u{7801}]
9005
8956
 
9006
8957
  |\u{9519}\u{8BEF}\u{7801}|\u{8BF4}\u{660E}|
@@ -9008,50 +8959,12 @@ const apiTemplatePrompt = `\u{4F60}\u{662F}\u{4E00}\u{4F4D}\u{4E13}\u{4E1A}\u{76
9008
8959
  |[\u{9519}\u{8BEF}\u{7801}1]|[\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}]|
9009
8960
  |[\u{9519}\u{8BEF}\u{7801}2]|[\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}]|
9010
8961
 
9011
- #### 5.1.5 \u{8BE6}\u{7EC6}\u{903B}\u{8F91}
9012
- [\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}]
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}]
9013
8964
 
9014
8965
  ## 6. \u{4E1A}\u{52A1}\u{5BF9}\u{8C61}\u{65F6}\u{5E8F}\u{56FE}
9015
8966
 
9016
- \`\`\`mermaid
9017
- sequenceDiagram
9018
- participant \u{5BA2}\u{6237}\u{7AEF}
9019
- participant API\u{7F51}\u{5173}
9020
- participant \u{8BA4}\u{8BC1}\u{670D}\u{52A1}
9021
- participant \u{6743}\u{9650}\u{670D}\u{52A1}
9022
- participant \u{4E1A}\u{52A1}\u{670D}\u{52A1}
9023
- participant \u{6570}\u{636E}\u{5E93}
9024
- participant \u{7F13}\u{5B58}\u{670D}\u{52A1}
9025
- participant \u{6D88}\u{606F}\u{961F}\u{5217}
9026
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
9027
- participant \u{76D1}\u{63A7}\u{670D}\u{52A1}
9028
-
9029
- \u{5BA2}\u{6237}\u{7AEF}->>API\u{7F51}\u{5173}: \u{53D1}\u{9001}API\u{8BF7}\u{6C42}
9030
- 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}
9031
- \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}
9032
- 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}
9033
- \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}
9034
- API\u{7F51}\u{5173}->>\u{4E1A}\u{52A1}\u{670D}\u{52A1}: \u{8F6C}\u{53D1}\u{8BF7}\u{6C42}
9035
- \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}
9036
- alt \u{7F13}\u{5B58}\u{547D}\u{4E2D}
9037
- \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}
9038
- \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}
9039
- else \u{7F13}\u{5B58}\u{672A}\u{547D}\u{4E2D}
9040
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}->>\u{6570}\u{636E}\u{5E93}: \u{67E5}\u{8BE2}\u{6570}\u{636E}
9041
- \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}
9042
- \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
- \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}
9044
- end
9045
- \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}
9046
- \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}
9047
- 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}
9048
- 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}
9049
- API\u{7F51}\u{5173}->>\u{5BA2}\u{6237}\u{7AEF}: \u{8FD4}\u{56DE}\u{54CD}\u{5E94}
9050
- \`\`\`
9051
-
9052
- ### 6.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}
9053
-
9054
- #### 6.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}
9055
8968
  \`\`\`mermaid
9056
8969
  sequenceDiagram
9057
8970
  participant \u{5BA2}\u{6237}\u{7AEF}
@@ -9077,9 +8990,9 @@ sequenceDiagram
9077
8990
  end
9078
8991
  \`\`\`
9079
8992
 
9080
- ### 6.3 \u{5F02}\u{5E38}\u{6D41}\u{7A0B}\u{FF08}\u{9519}\u{8BEF}\u{5904}\u{7406}\u{FF09}
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}
9081
8994
 
9082
- #### 6.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}
9083
8996
  \`\`\`mermaid
9084
8997
  sequenceDiagram
9085
8998
  participant \u{5BA2}\u{6237}\u{7AEF}
@@ -9098,7 +9011,7 @@ sequenceDiagram
9098
9011
  end
9099
9012
  \`\`\`
9100
9013
 
9101
- #### 6.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}
9102
9015
  \`\`\`mermaid
9103
9016
  sequenceDiagram
9104
9017
  participant \u{5BA2}\u{6237}\u{7AEF}
@@ -9116,33 +9029,7 @@ sequenceDiagram
9116
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}
9117
9030
  \`\`\`
9118
9031
 
9119
- #### 6.3.3 API Schema\u{9A8C}\u{8BC1}\u{9519}\u{8BEF}
9120
- \`\`\`mermaid
9121
- sequenceDiagram
9122
- participant \u{5F00}\u{53D1}\u{8005}
9123
- participant API\u{7F51}\u{5173}
9124
- participant Schema\u{9A8C}\u{8BC1}\u{5668}
9125
- participant \u{7248}\u{672C}\u{7BA1}\u{7406}\u{5668}
9126
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
9127
- participant \u{76D1}\u{63A7}\u{670D}\u{52A1}
9128
-
9129
- \u{5F00}\u{53D1}\u{8005}->>API\u{7F51}\u{5173}: \u{90E8}\u{7F72}API\u{5B9A}\u{4E49}
9130
- API\u{7F51}\u{5173}->>Schema\u{9A8C}\u{8BC1}\u{5668}: \u{9A8C}\u{8BC1}API Schema
9131
- 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}
9132
- \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}
9133
- 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}
9134
- alt Schema\u{6709}\u{6548}
9135
- Schema\u{9A8C}\u{8BC1}\u{5668}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{9A8C}\u{8BC1}\u{901A}\u{8FC7}
9136
- API\u{7F51}\u{5173}->>\u{5F00}\u{53D1}\u{8005}: \u{901A}\u{77E5}\u{90E8}\u{7F72}\u{6210}\u{529F}
9137
- else Schema\u{65E0}\u{6548}
9138
- Schema\u{9A8C}\u{8BC1}\u{5668}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{9A8C}\u{8BC1}\u{5931}\u{8D25}
9139
- API\u{7F51}\u{5173}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}Schema\u{9519}\u{8BEF}
9140
- 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}
9141
- 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}
9142
- end
9143
- \`\`\`
9144
-
9145
- ### 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{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}
9146
9033
 
9147
9034
  #### 6.4.1 \u{5E76}\u{53D1}\u{51B2}\u{7A81}\u{5904}\u{7406}
9148
9035
  \`\`\`mermaid
@@ -9189,43 +9076,13 @@ sequenceDiagram
9189
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}
9190
9077
  \`\`\`
9191
9078
 
9192
- #### 6.4.3 API\u{6027}\u{80FD}\u{964D}\u{7EA7}\u{5904}\u{7406}
9193
- \`\`\`mermaid
9194
- sequenceDiagram
9195
- participant \u{5BA2}\u{6237}\u{7AEF}
9196
- participant API\u{7F51}\u{5173}
9197
- participant \u{6027}\u{80FD}\u{76D1}\u{63A7}\u{5668}
9198
- participant \u{964D}\u{7EA7}\u{7B56}\u{7565}\u{5668}
9199
- participant \u{7F13}\u{5B58}\u{670D}\u{52A1}
9200
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
9201
-
9202
- \u{5BA2}\u{6237}\u{7AEF}->>API\u{7F51}\u{5173}: \u{53D1}\u{9001}API\u{8BF7}\u{6C42}
9203
- 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}
9204
- \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}
9205
- alt \u{6027}\u{80FD}\u{6B63}\u{5E38}
9206
- 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}
9207
- \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}
9208
- else \u{6027}\u{80FD}\u{964D}\u{7EA7}
9209
- 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}
9210
- \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}
9211
- 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}
9212
- \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}
9213
- 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}
9214
- end
9215
- API\u{7F51}\u{5173}->>\u{5BA2}\u{6237}\u{7AEF}: \u{8FD4}\u{56DE}\u{54CD}\u{5E94}
9216
- \`\`\`
9217
-
9218
9079
  ## 7. \u{4E1A}\u{52A1}\u{72B6}\u{6001}\u{63CF}\u{8FF0}
9219
9080
 
9220
9081
  | | | |
9221
9082
  |---|---|---|
9222
9083
  |**\u{72B6}\u{6001}\u{7F16}\u{53F7}**|**\u{72B6}\u{6001}\u{540D}\u{79F0}**|**\u{63CF}\u{8FF0}**|
9223
- |01|\u{8BF7}\u{6C42}\u{63A5}\u{6536}|API\u{63A5}\u{6536}\u{5230}\u{8BF7}\u{6C42}|
9224
- |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}|
9225
- |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}|
9226
- |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}|
9227
- |05|\u{54CD}\u{5E94}\u{8FD4}\u{56DE}|\u{6B63}\u{5728}\u{8FD4}\u{56DE}\u{54CD}\u{5E94}|
9228
- |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}|
9229
9086
  |[\u{6DFB}\u{52A0}\u{66F4}\u{591A}\u{72B6}\u{6001}...]||
9230
9087
 
9231
9088
  ## 8. \u{4F2A}\u{4EE3}\u{7801}\u{793A}\u{4F8B}
@@ -9346,6 +9203,37 @@ const requirementAnalyzerTool = {
9346
9203
  const { input_type, content, md_file_path, feature_name, options = {}, auto_trigger = {} } = args;
9347
9204
  const { custom_prompt, use_streaming, chunk_size } = options;
9348
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
+ }
9349
9237
  try {
9350
9238
  let inputContent = '';
9351
9239
  let sourceInfo = '';
@@ -9353,6 +9241,14 @@ const requirementAnalyzerTool = {
9353
9241
  inputContent = content;
9354
9242
  sourceInfo = "\u7528\u6237\u76F4\u63A5\u8F93\u5165";
9355
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
+ }
9356
9252
  const resolvedPath = await (0, common.kK)(md_file_path);
9357
9253
  const stats = await promises_.stat(resolvedPath);
9358
9254
  const fileSizeInMB = stats.size / 1048576;
@@ -9412,7 +9308,7 @@ const requirementAnalyzerTool = {
9412
9308
  priority: 'priority' in feature ? feature.priority : 'medium',
9413
9309
  complexity: 'complexity' in feature ? feature.complexity : feature.estimatedComplexity
9414
9310
  });
9415
- const featureDoc = await generateRequirementWithDFS(featureContent, featureTitle, custom_prompt, featureType);
9311
+ const featureDoc = await generateRequirementWithDFS(featureContent, featureTitle, custom_prompt, featureType, projectInfo);
9416
9312
  await promises_.writeFile(featureOutputPath, featureDoc, 'utf8');
9417
9313
  generatedFiles.push(external_path_["default"].resolve(featureOutputPath));
9418
9314
  utils_logger.k.info(`\u{529F}\u{80FD}\u{70B9}\u{5206}\u{6790}\u{5B8C}\u{6210} ${i + 1}/${featuresToProcess.length}`, {
@@ -9449,7 +9345,7 @@ ${generatedFiles.map((f)=>`- \`${f}\``).join('\n')}
9449
9345
  analysisDepth: analysis_depth,
9450
9346
  sourceInfo
9451
9347
  });
9452
- 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);
9453
9349
  await promises_.writeFile(outputPath, requirementDoc, 'utf8');
9454
9350
  generatedFiles.push(external_path_["default"].resolve(outputPath));
9455
9351
  const stats = {
@@ -9693,7 +9589,7 @@ function analyzeRequirementsFallback(inputContent) {
9693
9589
  ]
9694
9590
  };
9695
9591
  }
9696
- async function generateRequirementWithDFS(requirementContent, requirementTitle, customPrompt, requirementType = "\u7CFB\u7EDF") {
9592
+ async function generateRequirementWithDFS(requirementContent, requirementTitle, customPrompt, requirementType = "\u7CFB\u7EDF", projectInfo) {
9697
9593
  utils_logger.k.info("\u5F00\u59CB\u4F7F\u7528\u6DF1\u5EA6\u641C\u7D22\u7B97\u6CD5\u751F\u6210\u9700\u6C42\u6587\u6863", {
9698
9594
  requirementTitle,
9699
9595
  requirementType,
@@ -9704,7 +9600,16 @@ async function generateRequirementWithDFS(requirementContent, requirementTitle,
9704
9600
  else if (requirementType.includes("\u79FB\u52A8") || requirementType.includes('app') || requirementType.includes('App')) selectedPrompt = appTemplatePrompt;
9705
9601
  else if (requirementType.includes('SDK') || requirementType.includes('sdk') || requirementType.includes("\u7B2C\u4E09\u65B9")) selectedPrompt = sdkTemplatePrompt;
9706
9602
  else if (requirementType.includes("\u63A5\u53E3") || requirementType.includes('API') || requirementType.includes('api')) selectedPrompt = apiTemplatePrompt;
9707
- 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'));
9708
9613
  try {
9709
9614
  const result = await callAIServiceWithProgress(`\u{9700}\u{6C42}\u{6587}\u{6863}\u{751F}\u{6210}(${requirementTitle})`, ()=>openai.r.generateText({
9710
9615
  prompt: prompt,
@@ -9774,9 +9679,10 @@ function categorizeError(error) {
9774
9679
  if (errorMsg.includes('validation') || errorMsg.includes("\u65E0\u6548") || errorMsg.includes('required')) return "INVALID_INPUT";
9775
9680
  if (errorMsg.includes('openai') || errorMsg.includes('kimi') || errorMsg.includes('api')) return "AI_SERVICE_ERROR";
9776
9681
  if (errorMsg.includes('json') || errorMsg.includes('parse')) return "JSON_PARSE_ERROR";
9777
- 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";
9778
9683
  if (errorMsg.includes('memory') || errorMsg.includes('heap')) return "MEMORY_ERROR";
9779
9684
  if (errorMsg.includes('timeout') || errorMsg.includes("\u8D85\u65F6")) return "TIMEOUT_ERROR";
9685
+ if (errorMsg.includes('network') || errorMsg.includes("\u8FDE\u63A5")) return "NETWORK_ERROR";
9780
9686
  return "UNKNOWN_ERROR";
9781
9687
  }
9782
9688
  function generateUserFriendlyErrorMessage(errorType, originalMessage) {
@@ -9838,6 +9744,76 @@ async function callAIServiceWithProgress(description, apiCall, maxRetries = 3, b
9838
9744
  throw error;
9839
9745
  }
9840
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
+ }
9841
9817
  async function extractFeaturesWithNLP(inputContent) {
9842
9818
  try {
9843
9819
  utils_logger.k.info("\u5F00\u59CB\u4F7F\u7528\u589E\u5F3A\u578BNLP\u6280\u672F\u63D0\u53D6\u529F\u80FD\u70B9", {
@@ -9852,10 +9828,18 @@ async function extractFeaturesWithNLP(inputContent) {
9852
9828
  const jsonMatch = result.match(/\{[\s\S]*\}/);
9853
9829
  if (jsonMatch) {
9854
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
+ }
9855
9837
  utils_logger.k.info("\u589E\u5F3A\u578B\u529F\u80FD\u70B9\u63D0\u53D6\u6210\u529F", {
9856
- featureCount: features.length
9838
+ featureCount: 1
9857
9839
  });
9858
- return features;
9840
+ return [
9841
+ features
9842
+ ];
9859
9843
  }
9860
9844
  } catch (parseError) {
9861
9845
  utils_logger.k.warn("JSON\u89E3\u6790\u5931\u8D25", {
@@ -12369,6 +12353,294 @@ const listSupportedFormatsTool = {
12369
12353
  \u{8F93}\u{51FA}\u{683C}\u{5F0F}\u{FF1A}${formats.output.join(', ')}`;
12370
12354
  }
12371
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
+ }
12372
12644
  (0, src_config.NL)();
12373
12645
  const server = new FastMCP({
12374
12646
  name: src_config.Gp.name,
@@ -12389,6 +12661,7 @@ server.addTool(convertImageTool);
12389
12661
  server.addTool(batchConvertImagesTool);
12390
12662
  server.addTool(getImageInfoTool);
12391
12663
  server.addTool(listSupportedFormatsTool);
12664
+ server.addTool(bugFixAgentTool);
12392
12665
  server.addTool(addTaskToQueueTool);
12393
12666
  server.addTool(createIterationTool);
12394
12667
  server.addTool(enhanced_tools_updateTaskTool);
@@ -0,0 +1,44 @@
1
+ import { z } from 'zod';
2
+ export declare const BugFixAgentParams: z.ZodObject<{
3
+ bug_description: z.ZodString;
4
+ project_path: z.ZodOptional<z.ZodString>;
5
+ project_name: z.ZodDefault<z.ZodOptional<z.ZodString>>;
6
+ output_format: z.ZodDefault<z.ZodOptional<z.ZodEnum<["markdown", "json"]>>>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ project_name: string;
9
+ output_format: "json" | "markdown";
10
+ bug_description: string;
11
+ project_path?: string | undefined;
12
+ }, {
13
+ bug_description: string;
14
+ project_name?: string | undefined;
15
+ project_path?: string | undefined;
16
+ output_format?: "json" | "markdown" | undefined;
17
+ }>;
18
+ export interface BugFixAgentParams {
19
+ bug_description: string;
20
+ project_path?: string;
21
+ project_name?: string;
22
+ output_format?: 'markdown' | 'json';
23
+ }
24
+ export declare const bugFixAgentTool: {
25
+ name: string;
26
+ description: string;
27
+ parameters: z.ZodObject<{
28
+ bug_description: z.ZodString;
29
+ project_path: z.ZodOptional<z.ZodString>;
30
+ project_name: z.ZodDefault<z.ZodOptional<z.ZodString>>;
31
+ output_format: z.ZodDefault<z.ZodOptional<z.ZodEnum<["markdown", "json"]>>>;
32
+ }, "strip", z.ZodTypeAny, {
33
+ project_name: string;
34
+ output_format: "json" | "markdown";
35
+ bug_description: string;
36
+ project_path?: string | undefined;
37
+ }, {
38
+ bug_description: string;
39
+ project_name?: string | undefined;
40
+ project_path?: string | undefined;
41
+ output_format?: "json" | "markdown" | undefined;
42
+ }>;
43
+ execute: (args: BugFixAgentParams) => Promise<string>;
44
+ };
@@ -249,3 +249,24 @@ export declare const requirementAnalyzerTool: {
249
249
  }>;
250
250
  execute: (args: RequirementAnalyzerParams) => Promise<string>;
251
251
  };
252
+ export declare enum ErrorType {
253
+ FILE_NOT_FOUND = "FILE_NOT_FOUND",
254
+ FILE_ACCESS_ERROR = "FILE_ACCESS_ERROR",
255
+ INVALID_INPUT = "INVALID_INPUT",
256
+ AI_SERVICE_ERROR = "AI_SERVICE_ERROR",
257
+ JSON_PARSE_ERROR = "JSON_PARSE_ERROR",
258
+ NETWORK_ERROR = "NETWORK_ERROR",
259
+ MEMORY_ERROR = "MEMORY_ERROR",
260
+ TIMEOUT_ERROR = "TIMEOUT_ERROR",
261
+ UNKNOWN_ERROR = "UNKNOWN_ERROR"
262
+ }
263
+ export declare function categorizeError(error: unknown): ErrorType;
264
+ export declare function generateUserFriendlyErrorMessage(errorType: ErrorType, originalMessage: string): string;
265
+ export declare function extractFeaturesWithNLP(inputContent: string): Promise<Array<{
266
+ featureName: string;
267
+ description: string;
268
+ priority: 'high' | 'medium' | 'low';
269
+ estimatedComplexity: '简单' | '中等' | '复杂';
270
+ type: '核心功能点' | '辅助功能点' | '扩展功能点';
271
+ businessValue: string;
272
+ }>>;
@@ -1 +1 @@
1
- export declare const apiTemplatePrompt = "\u4F60\u662F\u4E00\u4F4D\u4E13\u4E1A\u7684\u540E\u7AEF\u6280\u672F\u6587\u6863\u7F16\u5199\u4E13\u5BB6\u3002\u8BF7\u57FA\u4E8E\u7528\u6237\u63D0\u4F9B\u7684\u8F93\u5165\u5185\u5BB9\uFF0C\u751F\u6210\u4E00\u4EFD\u5B8C\u6574\u3001\u8BE6\u7EC6\u7684API\u63A5\u53E3\u6280\u672F\u9700\u6C42\u6587\u6863\u3002\n\n## \u4EFB\u52A1\u8981\u6C42\n- \u5FC5\u987B\u8F93\u51FA\u5B8C\u6574\u7684Markdown\u683C\u5F0F\u6280\u672F\u9700\u6C42\u6587\u6863\n- \u4E0D\u8981\u53EA\u7ED9\u51FA\u603B\u7ED3\uFF0C\u8981\u8F93\u51FA\u5B8C\u6574\u7684\u6587\u6863\u5185\u5BB9\n- \u6BCF\u4E2A\u7AE0\u8282\u90FD\u8981\u6709\u8BE6\u7EC6\u7684\u5185\u5BB9\uFF0C\u4E0D\u80FD\u7701\u7565\n- \u6587\u6863\u957F\u5EA6\u5E94\u8BE5\u57283000\u5B57\u4EE5\u4E0A\n- \u91CD\u70B9\u63CF\u8FF0API\u63A5\u53E3\u8BBE\u8BA1\u3001\u6570\u636E\u7ED3\u6784\u3001\u4EA4\u4E92\u903B\u8F91\u7B49\u540E\u7AEF\u76F8\u5173\u5185\u5BB9\n\n## \u8F93\u5165\u4FE1\u606F\n- **\u529F\u80FD\u540D\u79F0**: {featureName}\n- **\u4E1A\u52A1\u9886\u57DF**: {businessDomain}\n- **\u751F\u6210\u65F6\u5E8F\u56FE**: {generateSequenceDiagram}\n\n## \u539F\u59CB\u9700\u6C42\u5185\u5BB9\n```\n{inputContent}\n```\n\n## \u6587\u6863\u7ED3\u6784\u8981\u6C42\n\u8BF7\u4E25\u683C\u6309\u7167\u4EE5\u4E0B\u7ED3\u6784\u8F93\u51FA\u5B8C\u6574\u7684\u9700\u6C42\u6587\u6863\uFF0C\u6BCF\u4E2A\u7AE0\u8282\u90FD\u8981\u6709\u8BE6\u5B9E\u7684\u5185\u5BB9\uFF1A\n\n# {featureName} - API\u63A5\u53E3\u6280\u672F\u9700\u6C42\u6587\u6863\n\n> **\u751F\u6210\u65F6\u95F4**: {currentTime}\n> **\u4E1A\u52A1\u9886\u57DF**: {businessDomain}\n> **\u63A5\u53E3\u7C7B\u578B**: RESTful API\n\n---\n\n## 1. \u9700\u6C42\u80CC\u666F\n\n**\u80CC\u666F**: [\u8BE6\u7EC6\u63CF\u8FF0API\u63A5\u53E3\u7684\u80CC\u666F\u3001\u4E1A\u52A1\u9700\u6C42\u548C\u76EE\u6807]\n\n**\u5173\u952E\u529F\u80FD**: [\u5217\u51FAAPI\u63A5\u53E3\u7684\u4E3B\u8981\u529F\u80FD\u70B9]\n\n**\u6D89\u53CA\u89D2\u8272**: [\u5217\u51FA\u6240\u6709\u76F8\u5173\u7CFB\u7EDF\u89D2\u8272]\n\n## 2. {featureName}\u529F\u80FD\u8BBE\u8BA1\u8BF4\u660E\n\n| | | | | |\n|---|---|---|---|---|\n|**\u6D41\u7A0B\u7F16\u53F7**|F001|**\u6D41\u7A0B\u540D\u79F0**|{featureName}|\n|**\u4E1A\u52A1\u529F\u80FD\u7F16\u53F7**|BF001|**\u4E1A\u52A1\u529F\u80FD\u540D\u79F0**|{featureName}|\n|**\u529F\u80FD\u8BBE\u8BA1\u7F16\u53F7**|FD001|**\u7CFB\u7EDF\u529F\u80FD\u540D\u79F0**|{featureName}|\n|**\u524D\u7F6E\u6761\u4EF6**|[\u8BE6\u7EC6\u63CF\u8FF0API\u8C03\u7528\u7684\u524D\u7F6E\u6761\u4EF6]|\n|**\u89D2\u8272\uFF08\u5C97\u4F4D\uFF09**|[\u8BE6\u7EC6\u63CF\u8FF0\u8C03\u7528\u65B9\u89D2\u8272\u53CA\u5176\u6743\u9650]|\n|**\u5165\u53E3\u6E20\u9053**|[\u63CF\u8FF0API\u8C03\u7528\u5165\u53E3]|\n|**\u529F\u80FD\u63CF\u8FF0**|[\u8BE6\u7EC6\u7684\u529F\u80FD\u63CF\u8FF0]|\n|**\u8C03\u7528\u80FD\u529B\u57DF/\u4E2D\u5FC3**|[\u5982\u9002\u7528\u7684\u5176\u4ED6\u7CFB\u7EDF\u63A5\u53E3]|\n\n## 3. ER\u903B\u8F91\u56FE\u8BBE\u8BA1\n\n[\u63CF\u8FF0\u6570\u636E\u5E93\u8868\u4E4B\u95F4\u7684\u5173\u7CFB\u548CER\u56FE\u8BBE\u8BA1]\n\n## 4. \u6570\u636E\u8868\u5B9E\u4F53\u8BBE\u8BA1\n\n[\u8BE6\u7EC6\u63CF\u8FF0\u6D89\u53CA\u7684\u6570\u636E\u8868\u5B9E\u4F53\u7ED3\u6784\uFF0C\u5305\u62EC\u5B57\u6BB5\u540D\u3001\u7C7B\u578B\u3001\u7EA6\u675F\u6761\u4EF6\u7B49]\n\n## 5. API\u63A5\u53E3\u8BBE\u8BA1\n\n### 5.1 \u63A5\u53E3\u6982\u8FF0\n[\u8BE6\u7EC6\u63CF\u8FF0API\u63A5\u53E3\u7684\u6574\u4F53\u8BBE\u8BA1\u601D\u8DEF\u548C\u67B6\u6784]\n\n### 5.2 \u63A5\u53E3\u5217\u8868\n[\u5217\u51FA\u6240\u6709\u76F8\u5173\u7684API\u63A5\u53E3]\n\n## 5. \u63A5\u53E3\u8BE6\u7EC6\u8BF4\u660E\n\n### 5.1 \u63A5\u53E31 - [\u63A5\u53E3\u540D\u79F0]\n#### 5.1.1 \u57FA\u672C\u4FE1\u606F\n- **\u63A5\u53E3\u5730\u5740**: [URL\u8DEF\u5F84]\n- **\u8BF7\u6C42\u65B9\u6CD5**: [\u53EA\u5141\u8BB8\u4F7F\u7528POST\u8BF7\u6C42]\n- **\u534F\u8BAE**: [\u53EA\u5141\u8BB8\u4F7F\u7528HTTPS]\n- **\u5185\u5BB9\u7C7B\u578B**: [application/json\u7B49]\n\n#### 5.1.2 \u8BF7\u6C42\u53C2\u6570\n[\u8BE6\u7EC6\u8BF4\u660E\u8BF7\u6C42\u53C2\u6570]\n\n|\u53C2\u6570\u540D|\u7C7B\u578B|\u662F\u5426\u5FC5\u586B|\u4F4D\u7F6E|\u8BF4\u660E|\n|------|----|--------|----|----|\n|[\u53C2\u65701]|[string/int\u7B49]|[\u662F/\u5426]|[query/body/path]|[\u8BE6\u7EC6\u8BF4\u660E]|\n|[\u53C2\u65702]|[string/int\u7B49]|[\u662F/\u5426]|[query/body/path]|[\u8BE6\u7EC6\u8BF4\u660E]|\n\n#### 5.1.3 \u54CD\u5E94\u53C2\u6570\n[\u8BE6\u7EC6\u8BF4\u660E\u54CD\u5E94\u53C2\u6570]\n\n|\u53C2\u6570\u540D|\u7C7B\u578B|\u8BF4\u660E|\n|------|----|----|\n|[\u53C2\u65701]|[string/object\u7B49]|[\u8BE6\u7EC6\u8BF4\u660E]|\n|[\u53C2\u65702]|[string/object\u7B49]|[\u8BE6\u7EC6\u8BF4\u660E]|\n\n#### 5.1.4 \u9519\u8BEF\u7801\u8BF4\u660E\n[\u8BE6\u7EC6\u8BF4\u660E\u8BE5\u63A5\u53E3\u7684\u9519\u8BEF\u7801]\n\n|\u9519\u8BEF\u7801|\u8BF4\u660E|\n|------|----|\n|[\u9519\u8BEF\u78011]|[\u8BE6\u7EC6\u8BF4\u660E]|\n|[\u9519\u8BEF\u78012]|[\u8BE6\u7EC6\u8BF4\u660E]|\n\n#### 5.1.5 \u8BE6\u7EC6\u903B\u8F91\n[\u5206\u6B65\u9AA4\u8BE6\u7EC6\u63CF\u8FF0\u8BE5\u63A5\u53E3\u7684\u8BE6\u7EC6\u903B\u8F91]\n\n## 6. \u4E1A\u52A1\u5BF9\u8C61\u65F6\u5E8F\u56FE\n\n```mermaid\nsequenceDiagram\n participant \u5BA2\u6237\u7AEF\n participant API\u7F51\u5173\n participant \u8BA4\u8BC1\u670D\u52A1\n participant \u6743\u9650\u670D\u52A1\n participant \u4E1A\u52A1\u670D\u52A1\n participant \u6570\u636E\u5E93\n participant \u7F13\u5B58\u670D\u52A1\n participant \u6D88\u606F\u961F\u5217\n participant \u65E5\u5FD7\u670D\u52A1\n participant \u76D1\u63A7\u670D\u52A1\n \n \u5BA2\u6237\u7AEF->>API\u7F51\u5173: \u53D1\u9001API\u8BF7\u6C42\n API\u7F51\u5173->>\u8BA4\u8BC1\u670D\u52A1: \u9A8C\u8BC1\u8BF7\u6C42\u4EE4\u724C\n \u8BA4\u8BC1\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u8BA4\u8BC1\u7ED3\u679C\n API\u7F51\u5173->>\u6743\u9650\u670D\u52A1: \u68C0\u67E5\u8BBF\u95EE\u6743\u9650\n \u6743\u9650\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u6743\u9650\u4FE1\u606F\n API\u7F51\u5173->>\u4E1A\u52A1\u670D\u52A1: \u8F6C\u53D1\u8BF7\u6C42\n \u4E1A\u52A1\u670D\u52A1->>\u7F13\u5B58\u670D\u52A1: \u67E5\u8BE2\u7F13\u5B58\u6570\u636E\n alt \u7F13\u5B58\u547D\u4E2D\n \u7F13\u5B58\u670D\u52A1-->>\u4E1A\u52A1\u670D\u52A1: \u8FD4\u56DE\u7F13\u5B58\u6570\u636E\n \u4E1A\u52A1\u670D\u52A1->>\u76D1\u63A7\u670D\u52A1: \u8BB0\u5F55\u7F13\u5B58\u547D\u4E2D\n else \u7F13\u5B58\u672A\u547D\u4E2D\n \u4E1A\u52A1\u670D\u52A1->>\u6570\u636E\u5E93: \u67E5\u8BE2\u6570\u636E\n \u6570\u636E\u5E93-->>\u4E1A\u52A1\u670D\u52A1: \u8FD4\u56DE\u67E5\u8BE2\u7ED3\u679C\n \u4E1A\u52A1\u670D\u52A1->>\u7F13\u5B58\u670D\u52A1: \u5B58\u50A8\u5230\u7F13\u5B58\n \u4E1A\u52A1\u670D\u52A1->>\u76D1\u63A7\u670D\u52A1: \u8BB0\u5F55\u6570\u636E\u5E93\u67E5\u8BE2\n end\n \u4E1A\u52A1\u670D\u52A1->>\u6D88\u606F\u961F\u5217: \u53D1\u9001\u5F02\u6B65\u6D88\u606F\n \u4E1A\u52A1\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u54CD\u5E94\u6570\u636E\n API\u7F51\u5173->>\u65E5\u5FD7\u670D\u52A1: \u8BB0\u5F55\u8BBF\u95EE\u65E5\u5FD7\n API\u7F51\u5173->>\u76D1\u63A7\u670D\u52A1: \u8BB0\u5F55\u6027\u80FD\u6307\u6807\n API\u7F51\u5173->>\u5BA2\u6237\u7AEF: \u8FD4\u56DE\u54CD\u5E94\n```\n\n### 6.2 \u65B9\u6848\u4E8C\uFF1A\u66FF\u4EE3\u6D41\u7A0B\uFF08\u4E0D\u540C\u6709\u6548\u8DEF\u5F84\uFF09\n\n#### 6.2.1 \u8BA4\u8BC1/\u6388\u6743\u6D41\u7A0B\n```mermaid\nsequenceDiagram\n participant \u5BA2\u6237\u7AEF\n participant API\u7F51\u5173\n participant \u8BA4\u8BC1\u670D\u52A1\n participant \u6743\u9650\u670D\u52A1\n participant \u4E1A\u52A1\u670D\u52A1\n participant \u65E5\u5FD7\u670D\u52A1\n \n \u5BA2\u6237\u7AEF->>API\u7F51\u5173: \u53D1\u9001API\u8BF7\u6C42\n API\u7F51\u5173->>\u8BA4\u8BC1\u670D\u52A1: \u9A8C\u8BC1\u8BF7\u6C42\u4EE4\u724C\n alt \u4EE4\u724C\u6709\u6548\n \u8BA4\u8BC1\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u8BA4\u8BC1\u6210\u529F\n API\u7F51\u5173->>\u6743\u9650\u670D\u52A1: \u68C0\u67E5\u8BBF\u95EE\u6743\u9650\n \u6743\u9650\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u6743\u9650\u4FE1\u606F\n API\u7F51\u5173->>\u4E1A\u52A1\u670D\u52A1: \u8F6C\u53D1\u8BF7\u6C42\n \u4E1A\u52A1\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u54CD\u5E94\u6570\u636E\n API\u7F51\u5173->>\u5BA2\u6237\u7AEF: \u8FD4\u56DE\u54CD\u5E94\n else \u4EE4\u724C\u65E0\u6548\n \u8BA4\u8BC1\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u8BA4\u8BC1\u5931\u8D25\n API\u7F51\u5173->>\u65E5\u5FD7\u670D\u52A1: \u8BB0\u5F55\u8BA4\u8BC1\u5931\u8D25\n API\u7F51\u5173->>\u5BA2\u6237\u7AEF: \u8FD4\u56DE401\u9519\u8BEF\n end\n```\n\n### 6.3 \u5F02\u5E38\u6D41\u7A0B\uFF08\u9519\u8BEF\u5904\u7406\uFF09\n\n#### 6.3.1 \u9650\u6D41\u5904\u7406\n```mermaid\nsequenceDiagram\n participant \u5BA2\u6237\u7AEF\n participant API\u7F51\u5173\n participant \u9650\u6D41\u670D\u52A1\n participant \u65E5\u5FD7\u670D\u52A1\n \n \u5BA2\u6237\u7AEF->>API\u7F51\u5173: \u53D1\u9001API\u8BF7\u6C42\n API\u7F51\u5173->>\u9650\u6D41\u670D\u52A1: \u68C0\u67E5\u8BF7\u6C42\u9891\u7387\n \u9650\u6D41\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u9650\u6D41\u51B3\u5B9A\n alt \u8BF7\u6C42\u9891\u7387\u6B63\u5E38\n API\u7F51\u5173->>\u540E\u7EED\u670D\u52A1: \u5904\u7406\u8BF7\u6C42\n else \u8BF7\u6C42\u9891\u7387\u8FC7\u9AD8\n API\u7F51\u5173->>\u65E5\u5FD7\u670D\u52A1: \u8BB0\u5F55\u9650\u6D41\u4E8B\u4EF6\n API\u7F51\u5173->>\u5BA2\u6237\u7AEF: \u8FD4\u56DE429\u9519\u8BEF(\u8BF7\u6C42\u8FC7\u591A)\n end\n```\n\n#### 6.3.2 \u6570\u636E\u9A8C\u8BC1\u51B2\u7A81\n```mermaid\nsequenceDiagram\n participant \u5BA2\u6237\u7AEF\n participant API\u7F51\u5173\n participant \u4E1A\u52A1\u670D\u52A1\n participant \u6570\u636E\u9A8C\u8BC1\u5668\n participant \u65E5\u5FD7\u670D\u52A1\n \n \u5BA2\u6237\u7AEF->>API\u7F51\u5173: \u53D1\u9001\u5305\u542B\u65E0\u6548\u6570\u636E\u7684\u8BF7\u6C42\n API\u7F51\u5173->>\u4E1A\u52A1\u670D\u52A1: \u8F6C\u53D1\u8BF7\u6C42\n \u4E1A\u52A1\u670D\u52A1->>\u6570\u636E\u9A8C\u8BC1\u5668: \u9A8C\u8BC1\u6570\u636E\u683C\u5F0F\n \u6570\u636E\u9A8C\u8BC1\u5668-->>\u4E1A\u52A1\u670D\u52A1: \u8FD4\u56DE\u9A8C\u8BC1\u5931\u8D25\n \u4E1A\u52A1\u670D\u52A1->>\u65E5\u5FD7\u670D\u52A1: \u8BB0\u5F55\u9A8C\u8BC1\u9519\u8BEF\n \u4E1A\u52A1\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE400\u9519\u8BEF(\u8BF7\u6C42\u6570\u636E\u65E0\u6548)\n API\u7F51\u5173->>\u5BA2\u6237\u7AEF: \u8FD4\u56DE400\u9519\u8BEF\u53CA\u9519\u8BEF\u8BE6\u60C5\n```\n\n#### 6.3.3 API Schema\u9A8C\u8BC1\u9519\u8BEF\n```mermaid\nsequenceDiagram\n participant \u5F00\u53D1\u8005\n participant API\u7F51\u5173\n participant Schema\u9A8C\u8BC1\u5668\n participant \u7248\u672C\u7BA1\u7406\u5668\n participant \u65E5\u5FD7\u670D\u52A1\n participant \u76D1\u63A7\u670D\u52A1\n \n \u5F00\u53D1\u8005->>API\u7F51\u5173: \u90E8\u7F72API\u5B9A\u4E49\n API\u7F51\u5173->>Schema\u9A8C\u8BC1\u5668: \u9A8C\u8BC1API Schema\n Schema\u9A8C\u8BC1\u5668->>\u7248\u672C\u7BA1\u7406\u5668: \u83B7\u53D6\u5386\u53F2\u7248\u672C\n \u7248\u672C\u7BA1\u7406\u5668-->>Schema\u9A8C\u8BC1\u5668: \u8FD4\u56DE\u5386\u53F2\u5B9A\u4E49\n Schema\u9A8C\u8BC1\u5668->>Schema\u9A8C\u8BC1\u5668: \u6267\u884C\u517C\u5BB9\u6027\u68C0\u67E5\n alt Schema\u6709\u6548\n Schema\u9A8C\u8BC1\u5668-->>API\u7F51\u5173: \u8FD4\u56DE\u9A8C\u8BC1\u901A\u8FC7\n API\u7F51\u5173->>\u5F00\u53D1\u8005: \u901A\u77E5\u90E8\u7F72\u6210\u529F\n else Schema\u65E0\u6548\n Schema\u9A8C\u8BC1\u5668-->>API\u7F51\u5173: \u8FD4\u56DE\u9A8C\u8BC1\u5931\u8D25\n API\u7F51\u5173->>\u65E5\u5FD7\u670D\u52A1: \u8BB0\u5F55Schema\u9519\u8BEF\n API\u7F51\u5173->>\u76D1\u63A7\u670D\u52A1: \u8BB0\u5F55\u9A8C\u8BC1\u5931\u8D25\u6307\u6807\n API\u7F51\u5173->>\u5F00\u53D1\u8005: \u8FD4\u56DE\u9519\u8BEF\u8BE6\u60C5\u548C\u4FEE\u590D\u5EFA\u8BAE\n end\n```\n\n### 6.4 \u8FB9\u7F18\u60C5\u51B5\u6D41\u7A0B\uFF08\u5E76\u53D1\u3001\u8D85\u65F6\u7B49\uFF09\n\n#### 6.4.1 \u5E76\u53D1\u51B2\u7A81\u5904\u7406\n```mermaid\nsequenceDiagram\n participant \u5BA2\u6237\u7AEF\n participant API\u7F51\u5173\n participant \u6570\u636E\u5E93\n participant \u65E5\u5FD7\u670D\u52A1\n participant \u7F13\u5B58\u670D\u52A1\n \n alt \u9AD8\u5E76\u53D1\u573A\u666F\n \u5BA2\u6237\u7AEF->>API\u7F51\u5173: \u5E76\u53D1\u8BF7\u6C42\n API\u7F51\u5173->>\u6570\u636E\u5E93: \u6267\u884C\u6570\u636E\u64CD\u4F5C\n \u6570\u636E\u5E93-->>API\u7F51\u5173: \u8FD4\u56DE\u7ED3\u679C\n API\u7F51\u5173->>\u7F13\u5B58\u670D\u52A1: \u7F13\u5B58\u54CD\u5E94\u6570\u636E\n API\u7F51\u5173->>\u65E5\u5FD7\u670D\u52A1: \u8BB0\u5F55\u5E76\u53D1\u51B2\u7A81\n else \u975E\u9AD8\u5E76\u53D1\u573A\u666F\n API\u7F51\u5173->>\u6570\u636E\u5E93: \u6267\u884C\u6570\u636E\u64CD\u4F5C\n \u6570\u636E\u5E93-->>API\u7F51\u5173: \u8FD4\u56DE\u7ED3\u679C\n API\u7F51\u5173->>\u7F13\u5B58\u670D\u52A1: \u7F13\u5B58\u54CD\u5E94\u6570\u636E\n end\n API\u7F51\u5173->>\u5BA2\u6237\u7AEF: \u8FD4\u56DE\u54CD\u5E94\n```\n#### 6.4.2 \u8D85\u65F6\u5904\u7406\n```mermaid\nsequenceDiagram\n participant \u5BA2\u6237\u7AEF\n participant API\u7F51\u5173\n participant \u4E1A\u52A1\u670D\u52A1\n participant \u65E5\u5FD7\u670D\u52A1\n participant \u76D1\u63A7\u670D\u52A1\n participant \u5907\u7528\u670D\u52A1\n \n \u5BA2\u6237\u7AEF->>API\u7F51\u5173: \u53D1\u9001\u5305\u542B\u65E0\u6548\u6570\u636E\u7684\u8BF7\u6C42\n API\u7F51\u5173->>\u4E1A\u52A1\u670D\u52A1: \u8F6C\u53D1\u8BF7\u6C42\n \u4E1A\u52A1\u670D\u52A1->>\u65E5\u5FD7\u670D\u52A1: \u8BB0\u5F55\u8D85\u65F6\u4E8B\u4EF6\n \u4E1A\u52A1\u670D\u52A1->>\u76D1\u63A7\u670D\u52A1: \u4E0A\u62A5\u8D85\u65F6\u6307\u6807\n \u4E1A\u52A1\u670D\u52A1-->>\u4E1A\u52A1\u670D\u52A1: \u91CD\u8BD5\u8BF7\u6C42\n \u4E1A\u52A1\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE408\u9519\u8BEF(\u8BF7\u6C42\u8D85\u65F6)\n API\u7F51\u5173->>\u5907\u7528\u670D\u52A1: \u8F6C\u53D1\u8BF7\u6C42\n \u5907\u7528\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u9519\u8BEF\u54CD\u5E94\n API\u7F51\u5173->>\u65E5\u5FD7\u670D\u52A1: \u65E5\u5FD7\u8BB0\u5F55\u5907\u7528\u670D\u52A1\u54CD\u5E94\n API\u7F51\u5173->>\u76D1\u63A7\u670D\u52A1: \u8BB0\u5F55\u5907\u7528\u670D\u52A1\u5931\u8D25\n API\u7F51\u5173->>\u5BA2\u6237\u7AEF: \u8FD4\u56DE\u5907\u7528\u670D\u52A1\u54CD\u5E94\n```\n\n#### 6.4.3 API\u6027\u80FD\u964D\u7EA7\u5904\u7406\n```mermaid\nsequenceDiagram\n participant \u5BA2\u6237\u7AEF\n participant API\u7F51\u5173\n participant \u6027\u80FD\u76D1\u63A7\u5668\n participant \u964D\u7EA7\u7B56\u7565\u5668\n participant \u7F13\u5B58\u670D\u52A1\n participant \u65E5\u5FD7\u670D\u52A1\n \n \u5BA2\u6237\u7AEF->>API\u7F51\u5173: \u53D1\u9001API\u8BF7\u6C42\n API\u7F51\u5173->>\u6027\u80FD\u76D1\u63A7\u5668: \u68C0\u67E5\u670D\u52A1\u6027\u80FD\n \u6027\u80FD\u76D1\u63A7\u5668-->>API\u7F51\u5173: \u8FD4\u56DE\u6027\u80FD\u72B6\u6001\n alt \u6027\u80FD\u6B63\u5E38\n API\u7F51\u5173->>\u540E\u7EED\u670D\u52A1: \u6B63\u5E38\u5904\u7406\u8BF7\u6C42\n \u540E\u7EED\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u5B8C\u6574\u54CD\u5E94\n else \u6027\u80FD\u964D\u7EA7\n API\u7F51\u5173->>\u964D\u7EA7\u7B56\u7565\u5668: \u5E94\u7528\u964D\u7EA7\u7B56\u7565\n \u964D\u7EA7\u7B56\u7565\u5668-->>API\u7F51\u5173: \u8FD4\u56DE\u964D\u7EA7\u914D\u7F6E\n API\u7F51\u5173->>\u7F13\u5B58\u670D\u52A1: \u83B7\u53D6\u7F13\u5B58\u6570\u636E\n \u7F13\u5B58\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u7F13\u5B58\u54CD\u5E94\n API\u7F51\u5173->>\u65E5\u5FD7\u670D\u52A1: \u8BB0\u5F55\u964D\u7EA7\u4E8B\u4EF6\n end\n API\u7F51\u5173->>\u5BA2\u6237\u7AEF: \u8FD4\u56DE\u54CD\u5E94\n```\n\n## 7. \u4E1A\u52A1\u72B6\u6001\u63CF\u8FF0\n\n| | | |\n|---|---|---|\n|**\u72B6\u6001\u7F16\u53F7**|**\u72B6\u6001\u540D\u79F0**|**\u63CF\u8FF0**|\n|01|\u8BF7\u6C42\u63A5\u6536|API\u63A5\u6536\u5230\u8BF7\u6C42|\n|02|\u53C2\u6570\u9A8C\u8BC1|\u6B63\u5728\u9A8C\u8BC1\u8BF7\u6C42\u53C2\u6570|\n|03|\u4E1A\u52A1\u5904\u7406|\u6B63\u5728\u5904\u7406\u4E1A\u52A1\u903B\u8F91|\n|04|\u6570\u636E\u64CD\u4F5C|\u6B63\u5728\u6267\u884C\u6570\u636E\u64CD\u4F5C|\n|05|\u54CD\u5E94\u8FD4\u56DE|\u6B63\u5728\u8FD4\u56DE\u54CD\u5E94|\n|06|\u5904\u7406\u5B8C\u6210|\u8BF7\u6C42\u5904\u7406\u5B8C\u6210|\n|[\u6DFB\u52A0\u66F4\u591A\u72B6\u6001...]||\n\n## 8. \u4F2A\u4EE3\u7801\u793A\u4F8B\n\n```gherkin\nScenario Outline: \u7528\u6237\u901A\u8FC7API\u67E5\u8BE2\u8BA2\u5355\u4FE1\u606F\n Given \u7528\u6237\u5DF2\u901A\u8FC7\u8BA4\u8BC1\u5E76\u62E5\u6709\u67E5\u8BE2\u6743\u9650\n When \u7528\u6237\u5411/orders/<order_id>\u63A5\u53E3\u53D1\u9001POST\u8BF7\u6C42\n Then \u7CFB\u7EDF\u5E94\u8FD4\u56DE\u8BA2\u5355\u4FE1\u606F\u6216 <error_message>\n\n Examples:\n | order_id | error_message |\n | 12345 | null (\u6210\u529F\u8FD4\u56DE\u8BA2\u5355\u4FE1\u606F) |\n | 99999 | \"\u8BA2\u5355\u4E0D\u5B58\u5728\" |\n\nScenario Outline: API\u8BA4\u8BC1\u4E0E\u6388\u6743\u6D41\u7A0B\n Given \u5BA2\u6237\u7AEF\u4F7F\u7528<auth_type>\u65B9\u5F0F\u8FDB\u884C\u8BA4\u8BC1\n When \u5BA2\u6237\u7AEF\u8BBF\u95EE<api_endpoint>\u63A5\u53E3\u65F6\n Then \u7CFB\u7EDF\u5E94:\n 1. \u9A8C\u8BC1\u8BA4\u8BC1\u51ED\u8BC1\u7684\u6709\u6548\u6027\n 2. \u68C0\u67E5\u7528\u6237\u6743\u9650\n 3. \u6839\u636E\u9A8C\u8BC1\u7ED3\u679C\u8FD4\u56DE\u76F8\u5E94\u54CD\u5E94\n\n Examples:\n | auth_type | api_endpoint | \u9884\u671F\u884C\u4E3A |\n | Bearer Token | /orders | \u9A8C\u8BC1\u4EE4\u724C\u6709\u6548\u6027\uFF0C\u68C0\u67E5\u8BA2\u5355\u8BBF\u95EE\u6743\u9650 |\n | API Key | /products | \u9A8C\u8BC1API Key\uFF0C\u68C0\u67E5\u4EA7\u54C1\u8BBF\u95EE\u6743\u9650 |\n | \u65E0\u6548\u4EE4\u724C | /orders | \u8FD4\u56DE401\u672A\u6388\u6743\u9519\u8BEF |\n | \u65E0\u6743\u9650\u7528\u6237 | /admin | \u8FD4\u56DE403\u7981\u6B62\u8BBF\u95EE\u9519\u8BEF |\n\nScenario Outline: API\u8C03\u7528\u4E0E\u6570\u636E\u5904\u7406\u6D41\u7A0B\n Given \u5BA2\u6237\u7AEF\u5411<api_endpoint>\u53D1\u9001<http_method>\u8BF7\u6C42\n When \u8BF7\u6C42\u5305\u542B<data_status>\u6570\u636E\u65F6\n Then \u7CFB\u7EDF\u5E94:\n 1. \u9A8C\u8BC1\u8BF7\u6C42\u53C2\u6570\u683C\u5F0F\n 2. \u6267\u884C\u4E1A\u52A1\u903B\u8F91\u5904\u7406\n 3. \u8FD4\u56DE\u6807\u51C6\u5316\u54CD\u5E94\u683C\u5F0F\n\n Examples:\n | api_endpoint | http_method | data_status | \u5904\u7406\u903B\u8F91 |\n | /users | POST | \u6709\u6548\u6570\u636E | \u521B\u5EFA\u65B0\u7528\u6237\uFF0C\u8FD4\u56DE\u7528\u6237ID\u548C\u521B\u5EFA\u65F6\u95F4 |\n | /users | POST | \u7F3A\u5931\u5FC5\u586B\u9879 | \u8FD4\u56DE400\u9519\u8BEF\uFF0C\u8BE6\u7EC6\u8BF4\u660E\u7F3A\u5931\u5B57\u6BB5 |\n | /users/123 | PUT | \u66F4\u65B0\u6570\u636E | \u66F4\u65B0\u7528\u6237\u4FE1\u606F\uFF0C\u8FD4\u56DE\u66F4\u65B0\u540E\u7684\u5B8C\u6574\u7528\u6237\u4FE1\u606F |\n | /users/123 | DELETE | \u5B58\u5728\u8D44\u6E90 | \u5220\u9664\u7528\u6237\uFF0C\u8FD4\u56DE204\u72B6\u6001\u7801 |\n | /users/999 | POST | \u4E0D\u5B58\u5728\u8D44\u6E90 | \u8FD4\u56DE404\u9519\u8BEF\uFF0C\u8BF4\u660E\u8D44\u6E90\u672A\u627E\u5230 |\n | /users | POST | \u5927\u91CF\u6570\u636E | \u5206\u9875\u8FD4\u56DE\u7528\u6237\u5217\u8868\uFF0C\u5305\u542B\u603B\u6570\u548C\u5206\u9875\u4FE1\u606F |\n\nScenario Outline: API\u9650\u6D41\u4E0E\u9519\u8BEF\u6062\u590D\u5904\u7406\n Given \u5BA2\u6237\u7AEF\u5728<time_window>\u5185\u53D1\u9001<request_count>\u4E2A\u8BF7\u6C42\n When \u7CFB\u7EDF\u68C0\u6D4B\u5230<traffic_pattern>\u65F6\n Then \u7CFB\u7EDF\u5E94:\n 1. \u5E94\u7528\u9650\u6D41\u7B56\u7565\u63A7\u5236\u8BF7\u6C42\u9891\u7387\n 2. \u8FD4\u56DE\u9002\u5F53\u7684\u9650\u6D41\u54CD\u5E94\u7801\n 3. \u63D0\u4F9B\u91CD\u8BD5\u5EFA\u8BAE\u548C\u65F6\u95F4\u7A97\u53E3\u4FE1\u606F\n\n Examples:\n | time_window | request_count | traffic_pattern | \u9650\u6D41\u7B56\u7565 |\n | 1\u5206\u949F | 60\u4E2A\u8BF7\u6C42 | \u6B63\u5E38\u6D41\u91CF | \u5141\u8BB8\u8BF7\u6C42\u901A\u8FC7\uFF0C\u8BB0\u5F55\u8BBF\u95EE\u65E5\u5FD7 |\n | 1\u5206\u949F | 120\u4E2A\u8BF7\u6C42 | \u7A81\u53D1\u6D41\u91CF | \u8FD4\u56DE429\u72B6\u6001\u7801\uFF0C\u5EFA\u8BAE\u7B49\u5F8530\u79D2\u540E\u91CD\u8BD5 |\n | 1\u5206\u949F | 1000\u4E2A\u8BF7\u6C42 | \u6076\u610F\u653B\u51FB | \u7ACB\u5373\u62D2\u7EDD\u8BF7\u6C42\uFF0C\u8BB0\u5F55IP\u5E76\u89E6\u53D1\u5B89\u5168\u9632\u62A4\u673A\u5236 |\n | 5\u5206\u949F | 50\u4E2A\u8BF7\u6C42 | \u5468\u671F\u6027\u8BF7\u6C42 | \u5141\u8BB8\u8BF7\u6C42\u901A\u8FC7\uFF0C\u4F18\u5316\u7F13\u5B58\u7B56\u7565\u63D0\u5347\u54CD\u5E94\u901F\u5EA6 |\n | 1\u5C0F\u65F6 | 10000\u4E2A\u8BF7\u6C42 | \u6B63\u5E38\u4E1A\u52A1\u9AD8\u5CF0 | \u52A8\u6001\u8C03\u6574\u9650\u6D41\u9608\u503C\uFF0C\u542F\u7528\u8D1F\u8F7D\u5747\u8861\u7B56\u7565 |\n```\n\n---\n\n**\u91CD\u8981\u63D0\u9192**: \n1. \u8BF7\u8F93\u51FA\u5B8C\u6574\u7684Markdown\u6587\u6863\uFF0C\u4E0D\u8981\u7701\u7565\u4EFB\u4F55\u7AE0\u8282\n2. \u6BCF\u4E2A\u7AE0\u8282\u90FD\u8981\u6709\u5B9E\u8D28\u6027\u7684\u5185\u5BB9\uFF0C\u4E0D\u80FD\u53EA\u662F\u6A21\u677F\n3. \u6839\u636E\u8F93\u5165\u7684\u539F\u59CB\u5185\u5BB9\u8FDB\u884C\u5177\u4F53\u5206\u6790\uFF0C\u4E0D\u8981\u4F7F\u7528\u901A\u7528\u6A21\u677F\n4. \u6587\u6863\u603B\u957F\u5EA6\u5E94\u8BE5\u57283000\u5B57\u4EE5\u4E0A\n5. \u8868\u683C\u4E2D\u7684\u5185\u5BB9\u8981\u586B\u5199\u5177\u4F53\u4FE1\u606F\uFF0C\u4E0D\u8981\u4FDD\u7559\u5360\u4F4D\u7B26\n6. \u91CD\u70B9\u5173\u6CE8API\u63A5\u53E3\u8BBE\u8BA1\u3001\u6570\u636E\u7ED3\u6784\u3001\u4EA4\u4E92\u903B\u8F91\u7B49\u6280\u672F\u7EC6\u8282\n\n\u73B0\u5728\u8BF7\u5F00\u59CB\u751F\u6210\u5B8C\u6574\u7684API\u63A5\u53E3\u6280\u672F\u9700\u6C42\u6587\u6863\uFF1A";
1
+ export declare const apiTemplatePrompt = "\u4F60\u662F\u4E00\u4F4D\u4E13\u4E1A\u7684\u540E\u7AEF\u6280\u672F\u6587\u6863\u7F16\u5199\u4E13\u5BB6\u3002\u8BF7\u57FA\u4E8E\u7528\u6237\u63D0\u4F9B\u7684\u8F93\u5165\u5185\u5BB9\uFF0C\u751F\u6210\u4E00\u4EFD\u5B8C\u6574\u3001\u8BE6\u7EC6\u7684API\u63A5\u53E3\u6280\u672F\u9700\u6C42\u6587\u6863\u3002\n\n## \u4EFB\u52A1\u8981\u6C42\n- \u5FC5\u987B\u8F93\u51FA\u5B8C\u6574\u7684Markdown\u683C\u5F0F\u6280\u672F\u9700\u6C42\u6587\u6863\n- \u4E0D\u8981\u53EA\u7ED9\u51FA\u603B\u7ED3\uFF0C\u8981\u8F93\u51FA\u5B8C\u6574\u7684\u6587\u6863\u5185\u5BB9\n- \u6BCF\u4E2A\u7AE0\u8282\u90FD\u8981\u6709\u8BE6\u7EC6\u7684\u5185\u5BB9\uFF0C\u4E0D\u80FD\u7701\u7565\n- \u6587\u6863\u957F\u5EA6\u5E94\u8BE5\u57283000\u5B57\u4EE5\u4E0A\n- \u91CD\u70B9\u63CF\u8FF0API\u63A5\u53E3\u8BBE\u8BA1\u3001\u6570\u636E\u7ED3\u6784\u3001\u4EA4\u4E92\u903B\u8F91\u7B49\u540E\u7AEF\u76F8\u5173\u5185\u5BB9\n\n## \u8F93\u5165\u4FE1\u606F\n- **\u529F\u80FD\u540D\u79F0**: {featureName}\n- **\u4E1A\u52A1\u9886\u57DF**: {businessDomain}\n- **\u751F\u6210\u65F6\u5E8F\u56FE**: {generateSequenceDiagram}\n\n## \u539F\u59CB\u9700\u6C42\u5185\u5BB9\n```\n{inputContent}\n```\n\n## \u6587\u6863\u7ED3\u6784\u8981\u6C42\n\u8BF7\u4E25\u683C\u6309\u7167\u4EE5\u4E0B\u7ED3\u6784\u8F93\u51FA\u5B8C\u6574\u7684\u9700\u6C42\u6587\u6863\uFF0C\u6BCF\u4E2A\u7AE0\u8282\u90FD\u8981\u6709\u8BE6\u5B9E\u7684\u5185\u5BB9\uFF1A\n\n# {featureName} - API\u63A5\u53E3\u6280\u672F\u9700\u6C42\u6587\u6863\n\n> **\u751F\u6210\u65F6\u95F4**: {currentTime}\n> **\u4E1A\u52A1\u9886\u57DF**: {businessDomain}\n> **\u63A5\u53E3\u7C7B\u578B**: RESTful API\n\n---\n\n## 1. \u9700\u6C42\u80CC\u666F\n\n**\u80CC\u666F**: [\u8BE6\u7EC6\u63CF\u8FF0API\u63A5\u53E3\u7684\u80CC\u666F\u3001\u4E1A\u52A1\u9700\u6C42\u548C\u76EE\u6807]\n\n**\u5173\u952E\u529F\u80FD**: [\u5217\u51FAAPI\u63A5\u53E3\u7684\u4E3B\u8981\u529F\u80FD\u70B9]\n\n**\u6D89\u53CA\u89D2\u8272**: [\u5217\u51FA\u6240\u6709\u76F8\u5173\u7CFB\u7EDF\u89D2\u8272]\n\n## 2. {featureName}\u529F\u80FD\u8BBE\u8BA1\u8BF4\u660E\n\n| | | | | |\n|---|---|---|---|---|\n|**\u6D41\u7A0B\u7F16\u53F7**|F001|**\u6D41\u7A0B\u540D\u79F0**|{featureName}|\n|**\u4E1A\u52A1\u529F\u80FD\u7F16\u53F7**|BF001|**\u4E1A\u52A1\u529F\u80FD\u540D\u79F0**|{featureName}|\n|**\u529F\u80FD\u8BBE\u8BA1\u7F16\u53F7**|FD001|**\u7CFB\u7EDF\u529F\u80FD\u540D\u79F0**|{featureName}|\n|**\u524D\u7F6E\u6761\u4EF6**|[\u8BE6\u7EC6\u63CF\u8FF0API\u8C03\u7528\u7684\u524D\u7F6E\u6761\u4EF6]|\n|**\u89D2\u8272\uFF08\u5C97\u4F4D\uFF09**|[\u8BE6\u7EC6\u63CF\u8FF0\u8C03\u7528\u65B9\u89D2\u8272\u53CA\u5176\u6743\u9650]|\n|**\u5165\u53E3\u6E20\u9053**|[\u63CF\u8FF0API\u8C03\u7528\u5165\u53E3]|\n|**\u529F\u80FD\u63CF\u8FF0**|[\u8BE6\u7EC6\u7684\u529F\u80FD\u63CF\u8FF0]|\n|**\u8C03\u7528\u80FD\u529B\u57DF/\u4E2D\u5FC3**|[\u5982\u9002\u7528\u7684\u5176\u4ED6\u7CFB\u7EDF\u63A5\u53E3]|\n\n## 3. \u6570\u636E\u5EFA\u6A21\n## 3.1 ER\u903B\u8F91\u56FE\u8BBE\u8BA1\n\n[\u63CF\u8FF0\u6570\u636E\u5E93\u8868\u4E4B\u95F4\u7684\u5173\u7CFB\u548CER\u56FE\u8BBE\u8BA1]\n```mermaid\n```\n\n## 4. \u6570\u636E\u8868\u5B9E\u4F53\u8BBE\u8BA1\n\n[\u8BE6\u7EC6\u63CF\u8FF0\u6D89\u53CA\u7684\u6570\u636E\u8868\u5B9E\u4F53\u7ED3\u6784\uFF0C\u5305\u62EC\u5B57\u6BB5\u540D\u3001\u7C7B\u578B\u3001\u7EA6\u675F\u6761\u4EF6\u7B49]\n\n## 5. API\u63A5\u53E3\u8BBE\u8BA1\n\n### 5.1 \u63A5\u53E3\u5217\u8868\n[\u5217\u51FA\u6240\u6709\u76F8\u5173\u7684API\u63A5\u53E3]\n\n### 5.2 \u63A5\u53E3\u8BE6\u7EC6\u8BF4\u660E\n\n#### 5.2.1 \u63A5\u53E31 - [\u63A5\u53E3\u540D\u79F0]\n#### 5.2.2 \u57FA\u672C\u4FE1\u606F\n- **\u63A5\u53E3\u5730\u5740**: [URL\u8DEF\u5F84]\n- **\u8BF7\u6C42\u65B9\u6CD5**: [\u53EA\u5141\u8BB8\u4F7F\u7528POST\u8BF7\u6C42]\n- **\u534F\u8BAE**: [\u53EA\u5141\u8BB8\u4F7F\u7528HTTPS]\n- **\u5185\u5BB9\u7C7B\u578B**: [application/json\u7B49]\n\n#### 5.2.3 \u8BF7\u6C42\u53C2\u6570\n[\u8BE6\u7EC6\u8BF4\u660E\u8BF7\u6C42\u53C2\u6570]\n\n|\u53C2\u6570\u540D|\u7C7B\u578B|\u662F\u5426\u5FC5\u586B|\u4F4D\u7F6E|\u8BF4\u660E|\n|------|----|--------|----|----|\n|[\u53C2\u65701]|[string/int\u7B49]|[\u662F/\u5426]|[query/body/path]|[\u8BE6\u7EC6\u8BF4\u660E]|\n|[\u53C2\u65702]|[string/int\u7B49]|[\u662F/\u5426]|[query/body/path]|[\u8BE6\u7EC6\u8BF4\u660E]|\n\n#### 5.2.4 \u54CD\u5E94\u53C2\u6570\n[\u8BE6\u7EC6\u8BF4\u660E\u54CD\u5E94\u53C2\u6570]\n\n|\u53C2\u6570\u540D|\u7C7B\u578B|\u8BF4\u660E|\n|------|----|----|\n|[\u53C2\u65701]|[string/object\u7B49]|[\u8BE6\u7EC6\u8BF4\u660E]|\n|[\u53C2\u65702]|[string/object\u7B49]|[\u8BE6\u7EC6\u8BF4\u660E]|\n\n#### 5.2.5 \u9519\u8BEF\u7801\u8BF4\u660E\n[\u8BE6\u7EC6\u8BF4\u660E\u8BE5\u63A5\u53E3\u7684\u9519\u8BEF\u7801]\n\n|\u9519\u8BEF\u7801|\u8BF4\u660E|\n|------|----|\n|[\u9519\u8BEF\u78011]|[\u8BE6\u7EC6\u8BF4\u660E]|\n|[\u9519\u8BEF\u78012]|[\u8BE6\u7EC6\u8BF4\u660E]|\n\n#### 5.2.6 \u8BE6\u7EC6\u5B9E\u73B0\u903B\u8F91\n[\u5206\u6B65\u9AA4\u8BE6\u7EC6\u63CF\u8FF0\u8BE5\u63A5\u53E3\u7684\u8BE6\u7EC6\u903B\u8F91\uFF0C\u5982\u679C\u5B58\u5728sql\u8BED\u53E5\uFF0C\u9700\u8981\u6DFB\u52A0sql\u8BED\u53E5\u5E76\u5728sql\u8BED\u53E5\u4E2D\u6DFB\u52A0\u6CE8\u91CA\u8BF4\u660E]\n\n## 6. \u4E1A\u52A1\u5BF9\u8C61\u65F6\u5E8F\u56FE\n\n#### 6.2.1 \u6B63\u5411\u6D41\u7A0B\n```mermaid\nsequenceDiagram\n participant \u5BA2\u6237\u7AEF\n participant API\u7F51\u5173\n participant \u8BA4\u8BC1\u670D\u52A1\n participant \u6743\u9650\u670D\u52A1\n participant \u4E1A\u52A1\u670D\u52A1\n participant \u65E5\u5FD7\u670D\u52A1\n \n \u5BA2\u6237\u7AEF->>API\u7F51\u5173: \u53D1\u9001API\u8BF7\u6C42\n API\u7F51\u5173->>\u8BA4\u8BC1\u670D\u52A1: \u9A8C\u8BC1\u8BF7\u6C42\u4EE4\u724C\n alt \u4EE4\u724C\u6709\u6548\n \u8BA4\u8BC1\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u8BA4\u8BC1\u6210\u529F\n API\u7F51\u5173->>\u6743\u9650\u670D\u52A1: \u68C0\u67E5\u8BBF\u95EE\u6743\u9650\n \u6743\u9650\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u6743\u9650\u4FE1\u606F\n API\u7F51\u5173->>\u4E1A\u52A1\u670D\u52A1: \u8F6C\u53D1\u8BF7\u6C42\n \u4E1A\u52A1\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u54CD\u5E94\u6570\u636E\n API\u7F51\u5173->>\u5BA2\u6237\u7AEF: \u8FD4\u56DE\u54CD\u5E94\n else \u4EE4\u724C\u65E0\u6548\n \u8BA4\u8BC1\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u8BA4\u8BC1\u5931\u8D25\n API\u7F51\u5173->>\u65E5\u5FD7\u670D\u52A1: \u8BB0\u5F55\u8BA4\u8BC1\u5931\u8D25\n API\u7F51\u5173->>\u5BA2\u6237\u7AEF: \u8FD4\u56DE401\u9519\u8BEF\n end\n```\n\n### 6.3 \u5F02\u5E38\u6D41\u7A0B\uFF08\u903B\u8F91\u4E2D\u51FA\u73B0\u5F02\u5E38\u60C5\u51B5\u7684\u4E0B\u7684\u5904\u7406\uFF09\n\n#### 6.3.1 xx\u5F02\u5E38\u5904\u7406\u6D41\u7A0B\n```mermaid\nsequenceDiagram\n participant \u5BA2\u6237\u7AEF\n participant API\u7F51\u5173\n participant \u9650\u6D41\u670D\u52A1\n participant \u65E5\u5FD7\u670D\u52A1\n \n \u5BA2\u6237\u7AEF->>API\u7F51\u5173: \u53D1\u9001API\u8BF7\u6C42\n API\u7F51\u5173->>\u9650\u6D41\u670D\u52A1: \u68C0\u67E5\u8BF7\u6C42\u9891\u7387\n \u9650\u6D41\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u9650\u6D41\u51B3\u5B9A\n alt \u8BF7\u6C42\u9891\u7387\u6B63\u5E38\n API\u7F51\u5173->>\u540E\u7EED\u670D\u52A1: \u5904\u7406\u8BF7\u6C42\n else \u8BF7\u6C42\u9891\u7387\u8FC7\u9AD8\n API\u7F51\u5173->>\u65E5\u5FD7\u670D\u52A1: \u8BB0\u5F55\u9650\u6D41\u4E8B\u4EF6\n API\u7F51\u5173->>\u5BA2\u6237\u7AEF: \u8FD4\u56DE429\u9519\u8BEF(\u8BF7\u6C42\u8FC7\u591A)\n end\n```\n\n#### 6.3.2 xx\u5F02\u5E38\u5904\u7406\u6D41\u7A0B\n```mermaid\nsequenceDiagram\n participant \u5BA2\u6237\u7AEF\n participant API\u7F51\u5173\n participant \u4E1A\u52A1\u670D\u52A1\n participant \u6570\u636E\u9A8C\u8BC1\u5668\n participant \u65E5\u5FD7\u670D\u52A1\n \n \u5BA2\u6237\u7AEF->>API\u7F51\u5173: \u53D1\u9001\u5305\u542B\u65E0\u6548\u6570\u636E\u7684\u8BF7\u6C42\n API\u7F51\u5173->>\u4E1A\u52A1\u670D\u52A1: \u8F6C\u53D1\u8BF7\u6C42\n \u4E1A\u52A1\u670D\u52A1->>\u6570\u636E\u9A8C\u8BC1\u5668: \u9A8C\u8BC1\u6570\u636E\u683C\u5F0F\n \u6570\u636E\u9A8C\u8BC1\u5668-->>\u4E1A\u52A1\u670D\u52A1: \u8FD4\u56DE\u9A8C\u8BC1\u5931\u8D25\n \u4E1A\u52A1\u670D\u52A1->>\u65E5\u5FD7\u670D\u52A1: \u8BB0\u5F55\u9A8C\u8BC1\u9519\u8BEF\n \u4E1A\u52A1\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE400\u9519\u8BEF(\u8BF7\u6C42\u6570\u636E\u65E0\u6548)\n API\u7F51\u5173->>\u5BA2\u6237\u7AEF: \u8FD4\u56DE400\u9519\u8BEF\u53CA\u9519\u8BEF\u8BE6\u60C5\n```\n\n### 6.4 \u8FB9\u7F18\u60C5\u51B5\u6D41\u7A0B\uFF08\u5E76\u53D1\u3001\u8D85\u65F6\u3001\u6570\u636E\u8FB9\u754C\u7B49\uFF09\n\n#### 6.4.1 \u5E76\u53D1\u51B2\u7A81\u5904\u7406\n```mermaid\nsequenceDiagram\n participant \u5BA2\u6237\u7AEF\n participant API\u7F51\u5173\n participant \u6570\u636E\u5E93\n participant \u65E5\u5FD7\u670D\u52A1\n participant \u7F13\u5B58\u670D\u52A1\n \n alt \u9AD8\u5E76\u53D1\u573A\u666F\n \u5BA2\u6237\u7AEF->>API\u7F51\u5173: \u5E76\u53D1\u8BF7\u6C42\n API\u7F51\u5173->>\u6570\u636E\u5E93: \u6267\u884C\u6570\u636E\u64CD\u4F5C\n \u6570\u636E\u5E93-->>API\u7F51\u5173: \u8FD4\u56DE\u7ED3\u679C\n API\u7F51\u5173->>\u7F13\u5B58\u670D\u52A1: \u7F13\u5B58\u54CD\u5E94\u6570\u636E\n API\u7F51\u5173->>\u65E5\u5FD7\u670D\u52A1: \u8BB0\u5F55\u5E76\u53D1\u51B2\u7A81\n else \u975E\u9AD8\u5E76\u53D1\u573A\u666F\n API\u7F51\u5173->>\u6570\u636E\u5E93: \u6267\u884C\u6570\u636E\u64CD\u4F5C\n \u6570\u636E\u5E93-->>API\u7F51\u5173: \u8FD4\u56DE\u7ED3\u679C\n API\u7F51\u5173->>\u7F13\u5B58\u670D\u52A1: \u7F13\u5B58\u54CD\u5E94\u6570\u636E\n end\n API\u7F51\u5173->>\u5BA2\u6237\u7AEF: \u8FD4\u56DE\u54CD\u5E94\n```\n#### 6.4.2 \u8D85\u65F6\u5904\u7406\n```mermaid\nsequenceDiagram\n participant \u5BA2\u6237\u7AEF\n participant API\u7F51\u5173\n participant \u4E1A\u52A1\u670D\u52A1\n participant \u65E5\u5FD7\u670D\u52A1\n participant \u76D1\u63A7\u670D\u52A1\n participant \u5907\u7528\u670D\u52A1\n \n \u5BA2\u6237\u7AEF->>API\u7F51\u5173: \u53D1\u9001\u5305\u542B\u65E0\u6548\u6570\u636E\u7684\u8BF7\u6C42\n API\u7F51\u5173->>\u4E1A\u52A1\u670D\u52A1: \u8F6C\u53D1\u8BF7\u6C42\n \u4E1A\u52A1\u670D\u52A1->>\u65E5\u5FD7\u670D\u52A1: \u8BB0\u5F55\u8D85\u65F6\u4E8B\u4EF6\n \u4E1A\u52A1\u670D\u52A1->>\u76D1\u63A7\u670D\u52A1: \u4E0A\u62A5\u8D85\u65F6\u6307\u6807\n \u4E1A\u52A1\u670D\u52A1-->>\u4E1A\u52A1\u670D\u52A1: \u91CD\u8BD5\u8BF7\u6C42\n \u4E1A\u52A1\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE408\u9519\u8BEF(\u8BF7\u6C42\u8D85\u65F6)\n API\u7F51\u5173->>\u5907\u7528\u670D\u52A1: \u8F6C\u53D1\u8BF7\u6C42\n \u5907\u7528\u670D\u52A1-->>API\u7F51\u5173: \u8FD4\u56DE\u9519\u8BEF\u54CD\u5E94\n API\u7F51\u5173->>\u65E5\u5FD7\u670D\u52A1: \u65E5\u5FD7\u8BB0\u5F55\u5907\u7528\u670D\u52A1\u54CD\u5E94\n API\u7F51\u5173->>\u76D1\u63A7\u670D\u52A1: \u8BB0\u5F55\u5907\u7528\u670D\u52A1\u5931\u8D25\n API\u7F51\u5173->>\u5BA2\u6237\u7AEF: \u8FD4\u56DE\u5907\u7528\u670D\u52A1\u54CD\u5E94\n```\n\n## 7. \u4E1A\u52A1\u72B6\u6001\u63CF\u8FF0\n\n| | | |\n|---|---|---|\n|**\u72B6\u6001\u7F16\u53F7**|**\u72B6\u6001\u540D\u79F0**|**\u63CF\u8FF0**|\n|01|\u6536\u5230\u5BA1\u6838\u7533\u8BF7|\u5F53\u63A5\u6536\u5230\u5BA1\u6838\u7533\u8BF7\u65F6\uFF0C\u7CFB\u7EDF\u4F1A\u8BB0\u5F55\u7533\u8BF7\u4FE1\u606F\u5E76\u8FD4\u56DE\u5BA1\u6838\u4E2D\u72B6\u6001|\n|02|\u5BA1\u6279\u5BA1\u6838\u72B6\u6001|\u5F53\u5BA1\u6279\u4EBA\u5BF9\u7533\u8BF7\u8FDB\u884C\u5BA1\u6279\u540E\uFF0C\u7CFB\u7EDF\u4F1A\u66F4\u65B0\u5BA1\u6838\u72B6\u6001\u5E76\u8FD4\u56DE\u5BA1\u6279\u7ED3\u679C|\n|[\u6DFB\u52A0\u66F4\u591A\u72B6\u6001...]||\n\n## 8. \u4F2A\u4EE3\u7801\u793A\u4F8B\n\n```gherkin\nScenario Outline: \u7528\u6237\u901A\u8FC7API\u67E5\u8BE2\u8BA2\u5355\u4FE1\u606F\n Given \u7528\u6237\u5DF2\u901A\u8FC7\u8BA4\u8BC1\u5E76\u62E5\u6709\u67E5\u8BE2\u6743\u9650\n When \u7528\u6237\u5411/orders/<order_id>\u63A5\u53E3\u53D1\u9001POST\u8BF7\u6C42\n Then \u7CFB\u7EDF\u5E94\u8FD4\u56DE\u8BA2\u5355\u4FE1\u606F\u6216 <error_message>\n\n Examples:\n | order_id | error_message |\n | 12345 | null (\u6210\u529F\u8FD4\u56DE\u8BA2\u5355\u4FE1\u606F) |\n | 99999 | \"\u8BA2\u5355\u4E0D\u5B58\u5728\" |\n\nScenario Outline: API\u8BA4\u8BC1\u4E0E\u6388\u6743\u6D41\u7A0B\n Given \u5BA2\u6237\u7AEF\u4F7F\u7528<auth_type>\u65B9\u5F0F\u8FDB\u884C\u8BA4\u8BC1\n When \u5BA2\u6237\u7AEF\u8BBF\u95EE<api_endpoint>\u63A5\u53E3\u65F6\n Then \u7CFB\u7EDF\u5E94:\n 1. \u9A8C\u8BC1\u8BA4\u8BC1\u51ED\u8BC1\u7684\u6709\u6548\u6027\n 2. \u68C0\u67E5\u7528\u6237\u6743\u9650\n 3. \u6839\u636E\u9A8C\u8BC1\u7ED3\u679C\u8FD4\u56DE\u76F8\u5E94\u54CD\u5E94\n\n Examples:\n | auth_type | api_endpoint | \u9884\u671F\u884C\u4E3A |\n | Bearer Token | /orders | \u9A8C\u8BC1\u4EE4\u724C\u6709\u6548\u6027\uFF0C\u68C0\u67E5\u8BA2\u5355\u8BBF\u95EE\u6743\u9650 |\n | API Key | /products | \u9A8C\u8BC1API Key\uFF0C\u68C0\u67E5\u4EA7\u54C1\u8BBF\u95EE\u6743\u9650 |\n | \u65E0\u6548\u4EE4\u724C | /orders | \u8FD4\u56DE401\u672A\u6388\u6743\u9519\u8BEF |\n | \u65E0\u6743\u9650\u7528\u6237 | /admin | \u8FD4\u56DE403\u7981\u6B62\u8BBF\u95EE\u9519\u8BEF |\n\nScenario Outline: API\u8C03\u7528\u4E0E\u6570\u636E\u5904\u7406\u6D41\u7A0B\n Given \u5BA2\u6237\u7AEF\u5411<api_endpoint>\u53D1\u9001<http_method>\u8BF7\u6C42\n When \u8BF7\u6C42\u5305\u542B<data_status>\u6570\u636E\u65F6\n Then \u7CFB\u7EDF\u5E94:\n 1. \u9A8C\u8BC1\u8BF7\u6C42\u53C2\u6570\u683C\u5F0F\n 2. \u6267\u884C\u4E1A\u52A1\u903B\u8F91\u5904\u7406\n 3. \u8FD4\u56DE\u6807\u51C6\u5316\u54CD\u5E94\u683C\u5F0F\n\n Examples:\n | api_endpoint | http_method | data_status | \u5904\u7406\u903B\u8F91 |\n | /users | POST | \u6709\u6548\u6570\u636E | \u521B\u5EFA\u65B0\u7528\u6237\uFF0C\u8FD4\u56DE\u7528\u6237ID\u548C\u521B\u5EFA\u65F6\u95F4 |\n | /users | POST | \u7F3A\u5931\u5FC5\u586B\u9879 | \u8FD4\u56DE400\u9519\u8BEF\uFF0C\u8BE6\u7EC6\u8BF4\u660E\u7F3A\u5931\u5B57\u6BB5 |\n | /users/123 | PUT | \u66F4\u65B0\u6570\u636E | \u66F4\u65B0\u7528\u6237\u4FE1\u606F\uFF0C\u8FD4\u56DE\u66F4\u65B0\u540E\u7684\u5B8C\u6574\u7528\u6237\u4FE1\u606F |\n | /users/123 | DELETE | \u5B58\u5728\u8D44\u6E90 | \u5220\u9664\u7528\u6237\uFF0C\u8FD4\u56DE204\u72B6\u6001\u7801 |\n | /users/999 | POST | \u4E0D\u5B58\u5728\u8D44\u6E90 | \u8FD4\u56DE404\u9519\u8BEF\uFF0C\u8BF4\u660E\u8D44\u6E90\u672A\u627E\u5230 |\n | /users | POST | \u5927\u91CF\u6570\u636E | \u5206\u9875\u8FD4\u56DE\u7528\u6237\u5217\u8868\uFF0C\u5305\u542B\u603B\u6570\u548C\u5206\u9875\u4FE1\u606F |\n\nScenario Outline: API\u9650\u6D41\u4E0E\u9519\u8BEF\u6062\u590D\u5904\u7406\n Given \u5BA2\u6237\u7AEF\u5728<time_window>\u5185\u53D1\u9001<request_count>\u4E2A\u8BF7\u6C42\n When \u7CFB\u7EDF\u68C0\u6D4B\u5230<traffic_pattern>\u65F6\n Then \u7CFB\u7EDF\u5E94:\n 1. \u5E94\u7528\u9650\u6D41\u7B56\u7565\u63A7\u5236\u8BF7\u6C42\u9891\u7387\n 2. \u8FD4\u56DE\u9002\u5F53\u7684\u9650\u6D41\u54CD\u5E94\u7801\n 3. \u63D0\u4F9B\u91CD\u8BD5\u5EFA\u8BAE\u548C\u65F6\u95F4\u7A97\u53E3\u4FE1\u606F\n\n Examples:\n | time_window | request_count | traffic_pattern | \u9650\u6D41\u7B56\u7565 |\n | 1\u5206\u949F | 60\u4E2A\u8BF7\u6C42 | \u6B63\u5E38\u6D41\u91CF | \u5141\u8BB8\u8BF7\u6C42\u901A\u8FC7\uFF0C\u8BB0\u5F55\u8BBF\u95EE\u65E5\u5FD7 |\n | 1\u5206\u949F | 120\u4E2A\u8BF7\u6C42 | \u7A81\u53D1\u6D41\u91CF | \u8FD4\u56DE429\u72B6\u6001\u7801\uFF0C\u5EFA\u8BAE\u7B49\u5F8530\u79D2\u540E\u91CD\u8BD5 |\n | 1\u5206\u949F | 1000\u4E2A\u8BF7\u6C42 | \u6076\u610F\u653B\u51FB | \u7ACB\u5373\u62D2\u7EDD\u8BF7\u6C42\uFF0C\u8BB0\u5F55IP\u5E76\u89E6\u53D1\u5B89\u5168\u9632\u62A4\u673A\u5236 |\n | 5\u5206\u949F | 50\u4E2A\u8BF7\u6C42 | \u5468\u671F\u6027\u8BF7\u6C42 | \u5141\u8BB8\u8BF7\u6C42\u901A\u8FC7\uFF0C\u4F18\u5316\u7F13\u5B58\u7B56\u7565\u63D0\u5347\u54CD\u5E94\u901F\u5EA6 |\n | 1\u5C0F\u65F6 | 10000\u4E2A\u8BF7\u6C42 | \u6B63\u5E38\u4E1A\u52A1\u9AD8\u5CF0 | \u52A8\u6001\u8C03\u6574\u9650\u6D41\u9608\u503C\uFF0C\u542F\u7528\u8D1F\u8F7D\u5747\u8861\u7B56\u7565 |\n```\n\n---\n\n**\u91CD\u8981\u63D0\u9192**: \n1. \u8BF7\u8F93\u51FA\u5B8C\u6574\u7684Markdown\u6587\u6863\uFF0C\u4E0D\u8981\u7701\u7565\u4EFB\u4F55\u7AE0\u8282\n2. \u6BCF\u4E2A\u7AE0\u8282\u90FD\u8981\u6709\u5B9E\u8D28\u6027\u7684\u5185\u5BB9\uFF0C\u4E0D\u80FD\u53EA\u662F\u6A21\u677F\n3. \u6839\u636E\u8F93\u5165\u7684\u539F\u59CB\u5185\u5BB9\u8FDB\u884C\u5177\u4F53\u5206\u6790\uFF0C\u4E0D\u8981\u4F7F\u7528\u901A\u7528\u6A21\u677F\n4. \u6587\u6863\u603B\u957F\u5EA6\u5E94\u8BE5\u57283000\u5B57\u4EE5\u4E0A\n5. \u8868\u683C\u4E2D\u7684\u5185\u5BB9\u8981\u586B\u5199\u5177\u4F53\u4FE1\u606F\uFF0C\u4E0D\u8981\u4FDD\u7559\u5360\u4F4D\u7B26\n6. \u91CD\u70B9\u5173\u6CE8API\u63A5\u53E3\u8BBE\u8BA1\u3001\u6570\u636E\u7ED3\u6784\u3001\u4EA4\u4E92\u903B\u8F91\u7B49\u6280\u672F\u7EC6\u8282\n\n\u73B0\u5728\u8BF7\u5F00\u59CB\u751F\u6210\u5B8C\u6574\u7684API\u63A5\u53E3\u6280\u672F\u9700\u6C42\u6587\u6863\uFF1A";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "intention-coding",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "软件工程化的需求分析,功能设计,代码编写,测试运行和发布部署",
5
5
  "type": "module",
6
6
  "exports": {