intention-coding 0.2.5 → 0.3.1
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/config.d.ts +6 -2
- package/dist/index.js +5957 -4488
- package/dist/services/api-test/add-tasks-to-plan.d.ts +8 -8
- package/dist/services/api-test/api-test.d.ts +4 -4
- package/dist/services/api-test/index.d.ts +14 -14
- package/dist/services/api-test/test-plan.d.ts +10 -10
- package/dist/services/api-test/update-task.d.ts +8 -8
- package/dist/services/change-summarizer/prompt/change-analysis.d.ts +1 -1
- package/dist/services/claude-code/index.d.ts +6 -6
- package/dist/services/code-generator/database-manager.d.ts +4 -4
- package/dist/services/code-generator/enhanced-tools.d.ts +12 -12
- package/dist/services/image-converter/converter.d.ts +84 -0
- package/dist/services/image-converter/index.d.ts +132 -0
- package/dist/services/index.d.ts +0 -5
- package/dist/services/integrated-generator/index.d.ts +4 -4
- package/dist/services/project-template/index.d.ts +7 -21
- package/dist/services/project-template/prompt/project-rules.d.ts +1 -0
- package/dist/services/requirement-analyzer/chunk-reader.d.ts +37 -0
- package/dist/services/requirement-analyzer/index.d.ts +30 -90
- package/dist/services/requirement-analyzer/prompt/api-template.d.ts +1 -0
- package/dist/services/requirement-analyzer/prompt/app-template.d.ts +1 -0
- package/dist/services/requirement-analyzer/prompt/enhanced-feature-extraction.d.ts +1 -0
- package/dist/services/requirement-analyzer/prompt/fallback-document.d.ts +1 -0
- package/dist/services/requirement-analyzer/prompt/feature-dependency-analysis.d.ts +1 -0
- package/dist/services/requirement-analyzer/prompt/feature-extraction.d.ts +2 -0
- package/dist/services/requirement-analyzer/prompt/pc-page-template.d.ts +1 -0
- package/dist/services/requirement-analyzer/prompt/requirement-analysis.d.ts +2 -0
- package/dist/services/requirement-analyzer/prompt/sdk-template.d.ts +1 -0
- package/dist/utils/openai.d.ts +31 -0
- package/dist/utils/pack.d.ts +1 -1
- package/package.json +4 -2
- package/dist/prompt/change-analysis.ts +0 -53
- package/dist/prompt/initialize-project-standard.xml +0 -66
- package/dist/prompt/instructions.md +0 -235
- package/dist/prompt/velocity-template-generation.xml +0 -112
- package/dist/services/requirement-analyzer/auto-trigger.d.ts +0 -1
- package/dist/services/velocity-template/index.d.ts +0 -334
- package/dist/utils/openai-service.d.ts +0 -59
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
export interface ConvertImageOptions {
|
|
2
|
+
input_path: string;
|
|
3
|
+
output_format: string;
|
|
4
|
+
quality?: number;
|
|
5
|
+
width?: number;
|
|
6
|
+
height?: number;
|
|
7
|
+
maintain_aspect_ratio?: boolean;
|
|
8
|
+
output_path?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface BatchConvertOptions {
|
|
11
|
+
input_paths: string[];
|
|
12
|
+
output_format: string;
|
|
13
|
+
quality?: number;
|
|
14
|
+
width?: number;
|
|
15
|
+
height?: number;
|
|
16
|
+
maintain_aspect_ratio?: boolean;
|
|
17
|
+
output_directory?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface ConvertResult {
|
|
20
|
+
output_path: string;
|
|
21
|
+
file_size: number;
|
|
22
|
+
dimensions: {
|
|
23
|
+
width: number;
|
|
24
|
+
height: number;
|
|
25
|
+
};
|
|
26
|
+
format: string;
|
|
27
|
+
}
|
|
28
|
+
export interface BatchConvertResult {
|
|
29
|
+
success: boolean;
|
|
30
|
+
output_path?: string;
|
|
31
|
+
error?: string;
|
|
32
|
+
}
|
|
33
|
+
export interface ImageInfo {
|
|
34
|
+
format: string;
|
|
35
|
+
width: number;
|
|
36
|
+
height: number;
|
|
37
|
+
channels: number;
|
|
38
|
+
size: number;
|
|
39
|
+
space?: string;
|
|
40
|
+
}
|
|
41
|
+
export declare class ImageConverter {
|
|
42
|
+
private supportedInputFormats;
|
|
43
|
+
private supportedOutputFormats;
|
|
44
|
+
constructor();
|
|
45
|
+
/**
|
|
46
|
+
* 转换单个图片
|
|
47
|
+
*/
|
|
48
|
+
convertImage(options: ConvertImageOptions): Promise<ConvertResult>;
|
|
49
|
+
/**
|
|
50
|
+
* 批量转换图片
|
|
51
|
+
*/
|
|
52
|
+
batchConvertImages(options: BatchConvertOptions): Promise<BatchConvertResult[]>;
|
|
53
|
+
/**
|
|
54
|
+
* 获取图片信息
|
|
55
|
+
*/
|
|
56
|
+
getImageInfo(imagePath: string): Promise<ImageInfo>;
|
|
57
|
+
/**
|
|
58
|
+
* 获取支持的格式列表
|
|
59
|
+
*/
|
|
60
|
+
getSupportedFormats(): {
|
|
61
|
+
input: string[];
|
|
62
|
+
output: string[];
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* 转换为SVG格式
|
|
66
|
+
*/
|
|
67
|
+
private convertToSvg;
|
|
68
|
+
/**
|
|
69
|
+
* 转换为ICO格式(简化版本)
|
|
70
|
+
*/
|
|
71
|
+
private convertToIco;
|
|
72
|
+
/**
|
|
73
|
+
* 获取文件格式
|
|
74
|
+
*/
|
|
75
|
+
private getFileFormat;
|
|
76
|
+
/**
|
|
77
|
+
* 生成输出文件路径
|
|
78
|
+
*/
|
|
79
|
+
private generateOutputPath;
|
|
80
|
+
/**
|
|
81
|
+
* 生成输出文件名
|
|
82
|
+
*/
|
|
83
|
+
private generateOutputFilename;
|
|
84
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
declare const ConvertImageArgsSchema: z.ZodObject<{
|
|
3
|
+
input_path: z.ZodString;
|
|
4
|
+
output_format: z.ZodString;
|
|
5
|
+
quality: z.ZodOptional<z.ZodNumber>;
|
|
6
|
+
width: z.ZodOptional<z.ZodNumber>;
|
|
7
|
+
height: z.ZodOptional<z.ZodNumber>;
|
|
8
|
+
maintain_aspect_ratio: z.ZodDefault<z.ZodBoolean>;
|
|
9
|
+
output_path: z.ZodOptional<z.ZodString>;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
input_path: string;
|
|
12
|
+
output_format: string;
|
|
13
|
+
maintain_aspect_ratio: boolean;
|
|
14
|
+
quality?: number | undefined;
|
|
15
|
+
width?: number | undefined;
|
|
16
|
+
height?: number | undefined;
|
|
17
|
+
output_path?: string | undefined;
|
|
18
|
+
}, {
|
|
19
|
+
input_path: string;
|
|
20
|
+
output_format: string;
|
|
21
|
+
quality?: number | undefined;
|
|
22
|
+
width?: number | undefined;
|
|
23
|
+
height?: number | undefined;
|
|
24
|
+
maintain_aspect_ratio?: boolean | undefined;
|
|
25
|
+
output_path?: string | undefined;
|
|
26
|
+
}>;
|
|
27
|
+
declare const BatchConvertArgsSchema: z.ZodObject<{
|
|
28
|
+
input_paths: z.ZodArray<z.ZodString, "many">;
|
|
29
|
+
output_format: z.ZodString;
|
|
30
|
+
quality: z.ZodOptional<z.ZodNumber>;
|
|
31
|
+
width: z.ZodOptional<z.ZodNumber>;
|
|
32
|
+
height: z.ZodOptional<z.ZodNumber>;
|
|
33
|
+
maintain_aspect_ratio: z.ZodDefault<z.ZodBoolean>;
|
|
34
|
+
output_directory: z.ZodOptional<z.ZodString>;
|
|
35
|
+
}, "strip", z.ZodTypeAny, {
|
|
36
|
+
output_format: string;
|
|
37
|
+
maintain_aspect_ratio: boolean;
|
|
38
|
+
input_paths: string[];
|
|
39
|
+
quality?: number | undefined;
|
|
40
|
+
width?: number | undefined;
|
|
41
|
+
height?: number | undefined;
|
|
42
|
+
output_directory?: string | undefined;
|
|
43
|
+
}, {
|
|
44
|
+
output_format: string;
|
|
45
|
+
input_paths: string[];
|
|
46
|
+
quality?: number | undefined;
|
|
47
|
+
width?: number | undefined;
|
|
48
|
+
height?: number | undefined;
|
|
49
|
+
maintain_aspect_ratio?: boolean | undefined;
|
|
50
|
+
output_directory?: string | undefined;
|
|
51
|
+
}>;
|
|
52
|
+
export declare const convertImageTool: {
|
|
53
|
+
name: string;
|
|
54
|
+
description: string;
|
|
55
|
+
parameters: z.ZodObject<{
|
|
56
|
+
input_path: z.ZodString;
|
|
57
|
+
output_format: z.ZodString;
|
|
58
|
+
quality: z.ZodOptional<z.ZodNumber>;
|
|
59
|
+
width: z.ZodOptional<z.ZodNumber>;
|
|
60
|
+
height: z.ZodOptional<z.ZodNumber>;
|
|
61
|
+
maintain_aspect_ratio: z.ZodDefault<z.ZodBoolean>;
|
|
62
|
+
output_path: z.ZodOptional<z.ZodString>;
|
|
63
|
+
}, "strip", z.ZodTypeAny, {
|
|
64
|
+
input_path: string;
|
|
65
|
+
output_format: string;
|
|
66
|
+
maintain_aspect_ratio: boolean;
|
|
67
|
+
quality?: number | undefined;
|
|
68
|
+
width?: number | undefined;
|
|
69
|
+
height?: number | undefined;
|
|
70
|
+
output_path?: string | undefined;
|
|
71
|
+
}, {
|
|
72
|
+
input_path: string;
|
|
73
|
+
output_format: string;
|
|
74
|
+
quality?: number | undefined;
|
|
75
|
+
width?: number | undefined;
|
|
76
|
+
height?: number | undefined;
|
|
77
|
+
maintain_aspect_ratio?: boolean | undefined;
|
|
78
|
+
output_path?: string | undefined;
|
|
79
|
+
}>;
|
|
80
|
+
execute: (args: z.infer<typeof ConvertImageArgsSchema>) => Promise<string>;
|
|
81
|
+
};
|
|
82
|
+
export declare const batchConvertImagesTool: {
|
|
83
|
+
name: string;
|
|
84
|
+
description: string;
|
|
85
|
+
parameters: z.ZodObject<{
|
|
86
|
+
input_paths: z.ZodArray<z.ZodString, "many">;
|
|
87
|
+
output_format: z.ZodString;
|
|
88
|
+
quality: z.ZodOptional<z.ZodNumber>;
|
|
89
|
+
width: z.ZodOptional<z.ZodNumber>;
|
|
90
|
+
height: z.ZodOptional<z.ZodNumber>;
|
|
91
|
+
maintain_aspect_ratio: z.ZodDefault<z.ZodBoolean>;
|
|
92
|
+
output_directory: z.ZodOptional<z.ZodString>;
|
|
93
|
+
}, "strip", z.ZodTypeAny, {
|
|
94
|
+
output_format: string;
|
|
95
|
+
maintain_aspect_ratio: boolean;
|
|
96
|
+
input_paths: string[];
|
|
97
|
+
quality?: number | undefined;
|
|
98
|
+
width?: number | undefined;
|
|
99
|
+
height?: number | undefined;
|
|
100
|
+
output_directory?: string | undefined;
|
|
101
|
+
}, {
|
|
102
|
+
output_format: string;
|
|
103
|
+
input_paths: string[];
|
|
104
|
+
quality?: number | undefined;
|
|
105
|
+
width?: number | undefined;
|
|
106
|
+
height?: number | undefined;
|
|
107
|
+
maintain_aspect_ratio?: boolean | undefined;
|
|
108
|
+
output_directory?: string | undefined;
|
|
109
|
+
}>;
|
|
110
|
+
execute: (args: z.infer<typeof BatchConvertArgsSchema>) => Promise<string>;
|
|
111
|
+
};
|
|
112
|
+
export declare const getImageInfoTool: {
|
|
113
|
+
name: string;
|
|
114
|
+
description: string;
|
|
115
|
+
parameters: z.ZodObject<{
|
|
116
|
+
image_path: z.ZodString;
|
|
117
|
+
}, "strip", z.ZodTypeAny, {
|
|
118
|
+
image_path: string;
|
|
119
|
+
}, {
|
|
120
|
+
image_path: string;
|
|
121
|
+
}>;
|
|
122
|
+
execute: (args: {
|
|
123
|
+
image_path: string;
|
|
124
|
+
}) => Promise<string>;
|
|
125
|
+
};
|
|
126
|
+
export declare const listSupportedFormatsTool: {
|
|
127
|
+
name: string;
|
|
128
|
+
description: string;
|
|
129
|
+
parameters: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
|
|
130
|
+
execute: () => Promise<string>;
|
|
131
|
+
};
|
|
132
|
+
export {};
|
package/dist/services/index.d.ts
CHANGED
|
@@ -15,13 +15,13 @@ export declare const IntegratedGeneratorParams: z.ZodObject<{
|
|
|
15
15
|
technical_requirements: z.ZodOptional<z.ZodString>;
|
|
16
16
|
}, "strip", z.ZodTypeAny, {
|
|
17
17
|
project_name: string;
|
|
18
|
-
include_examples: boolean;
|
|
19
18
|
programming_language: string;
|
|
20
19
|
user_story: string;
|
|
21
20
|
acceptance_criteria: string[];
|
|
22
21
|
generation_type: "full_project" | "module_only" | "feature_only";
|
|
23
22
|
include_tests: boolean;
|
|
24
23
|
project_description: string;
|
|
24
|
+
include_examples: boolean;
|
|
25
25
|
framework?: string | undefined;
|
|
26
26
|
technical_requirements?: string | undefined;
|
|
27
27
|
custom_context?: string | undefined;
|
|
@@ -33,13 +33,13 @@ export declare const IntegratedGeneratorParams: z.ZodObject<{
|
|
|
33
33
|
user_story: string;
|
|
34
34
|
acceptance_criteria: string[];
|
|
35
35
|
project_description: string;
|
|
36
|
-
include_examples?: boolean | undefined;
|
|
37
36
|
framework?: string | undefined;
|
|
38
37
|
technical_requirements?: string | undefined;
|
|
39
38
|
custom_context?: string | undefined;
|
|
40
39
|
architecture_pattern?: "microservices" | "monolithic" | "layered" | "event-driven" | undefined;
|
|
41
40
|
generation_type?: "full_project" | "module_only" | "feature_only" | undefined;
|
|
42
41
|
include_tests?: boolean | undefined;
|
|
42
|
+
include_examples?: boolean | undefined;
|
|
43
43
|
business_rules?: string[] | undefined;
|
|
44
44
|
}>;
|
|
45
45
|
export interface IntegratedGeneratorParams {
|
|
@@ -76,13 +76,13 @@ export declare const integratedGenerator: {
|
|
|
76
76
|
technical_requirements: z.ZodOptional<z.ZodString>;
|
|
77
77
|
}, "strip", z.ZodTypeAny, {
|
|
78
78
|
project_name: string;
|
|
79
|
-
include_examples: boolean;
|
|
80
79
|
programming_language: string;
|
|
81
80
|
user_story: string;
|
|
82
81
|
acceptance_criteria: string[];
|
|
83
82
|
generation_type: "full_project" | "module_only" | "feature_only";
|
|
84
83
|
include_tests: boolean;
|
|
85
84
|
project_description: string;
|
|
85
|
+
include_examples: boolean;
|
|
86
86
|
framework?: string | undefined;
|
|
87
87
|
technical_requirements?: string | undefined;
|
|
88
88
|
custom_context?: string | undefined;
|
|
@@ -94,13 +94,13 @@ export declare const integratedGenerator: {
|
|
|
94
94
|
user_story: string;
|
|
95
95
|
acceptance_criteria: string[];
|
|
96
96
|
project_description: string;
|
|
97
|
-
include_examples?: boolean | undefined;
|
|
98
97
|
framework?: string | undefined;
|
|
99
98
|
technical_requirements?: string | undefined;
|
|
100
99
|
custom_context?: string | undefined;
|
|
101
100
|
architecture_pattern?: "microservices" | "monolithic" | "layered" | "event-driven" | undefined;
|
|
102
101
|
generation_type?: "full_project" | "module_only" | "feature_only" | undefined;
|
|
103
102
|
include_tests?: boolean | undefined;
|
|
103
|
+
include_examples?: boolean | undefined;
|
|
104
104
|
business_rules?: string[] | undefined;
|
|
105
105
|
}>;
|
|
106
106
|
execute: (args: IntegratedGeneratorParams) => Promise<string>;
|
|
@@ -1,28 +1,20 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
export declare const ProjectTemplateParams: z.ZodObject<{
|
|
3
3
|
project_name: z.ZodOptional<z.ZodString>;
|
|
4
|
-
|
|
5
|
-
analysis_depth: z.ZodDefault<z.ZodOptional<z.ZodEnum<["basic", "detailed", "comprehensive"]>>>;
|
|
6
|
-
include_examples: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
4
|
+
project_path: z.ZodOptional<z.ZodString>;
|
|
7
5
|
custom_rules: z.ZodOptional<z.ZodString>;
|
|
8
6
|
}, "strip", z.ZodTypeAny, {
|
|
9
|
-
output_type: "cursorrules" | "instructions" | "both";
|
|
10
|
-
analysis_depth: "basic" | "detailed" | "comprehensive";
|
|
11
|
-
include_examples: boolean;
|
|
12
7
|
project_name?: string | undefined;
|
|
8
|
+
project_path?: string | undefined;
|
|
13
9
|
custom_rules?: string | undefined;
|
|
14
10
|
}, {
|
|
15
11
|
project_name?: string | undefined;
|
|
16
|
-
|
|
17
|
-
analysis_depth?: "basic" | "detailed" | "comprehensive" | undefined;
|
|
18
|
-
include_examples?: boolean | undefined;
|
|
12
|
+
project_path?: string | undefined;
|
|
19
13
|
custom_rules?: string | undefined;
|
|
20
14
|
}>;
|
|
21
15
|
export interface ProjectTemplateParams {
|
|
22
16
|
project_name?: string;
|
|
23
|
-
|
|
24
|
-
analysis_depth?: 'basic' | 'detailed' | 'comprehensive';
|
|
25
|
-
include_examples?: boolean;
|
|
17
|
+
project_path?: string;
|
|
26
18
|
custom_rules?: string;
|
|
27
19
|
}
|
|
28
20
|
export declare const initProjectStandard: {
|
|
@@ -30,21 +22,15 @@ export declare const initProjectStandard: {
|
|
|
30
22
|
description: string;
|
|
31
23
|
parameters: z.ZodObject<{
|
|
32
24
|
project_name: z.ZodOptional<z.ZodString>;
|
|
33
|
-
|
|
34
|
-
analysis_depth: z.ZodDefault<z.ZodOptional<z.ZodEnum<["basic", "detailed", "comprehensive"]>>>;
|
|
35
|
-
include_examples: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
25
|
+
project_path: z.ZodOptional<z.ZodString>;
|
|
36
26
|
custom_rules: z.ZodOptional<z.ZodString>;
|
|
37
27
|
}, "strip", z.ZodTypeAny, {
|
|
38
|
-
output_type: "cursorrules" | "instructions" | "both";
|
|
39
|
-
analysis_depth: "basic" | "detailed" | "comprehensive";
|
|
40
|
-
include_examples: boolean;
|
|
41
28
|
project_name?: string | undefined;
|
|
29
|
+
project_path?: string | undefined;
|
|
42
30
|
custom_rules?: string | undefined;
|
|
43
31
|
}, {
|
|
44
32
|
project_name?: string | undefined;
|
|
45
|
-
|
|
46
|
-
analysis_depth?: "basic" | "detailed" | "comprehensive" | undefined;
|
|
47
|
-
include_examples?: boolean | undefined;
|
|
33
|
+
project_path?: string | undefined;
|
|
48
34
|
custom_rules?: string | undefined;
|
|
49
35
|
}>;
|
|
50
36
|
execute: (args: ProjectTemplateParams) => Promise<string>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const projectRulesPromptTemplate = "\n\u4F60\u662F\u4E00\u4F4D\u4E13\u4E1A\u7684\u8F6F\u4EF6\u5F00\u53D1\u89C4\u8303\u4E13\u5BB6\uFF0C\u8BF7\u57FA\u4E8E\u63D0\u4F9B\u7684\u9879\u76EE\u67B6\u6784\u5206\u6790\uFF0C\u751F\u6210\u4E00\u4EFD\u5B8C\u6574\u7684\u9879\u76EE\u5F00\u53D1\u89C4\u5219\u6587\u4EF6\u3002\n\n## \u9879\u76EE\u4FE1\u606F\n- **\u9879\u76EE\u540D\u79F0**: {{projectName}}\n- **\u5305\u542B\u793A\u4F8B**: {{includeExamples}}\n\n## \u9879\u76EE\u67B6\u6784\u5206\u6790\n```\n{{projectAnalysis}}\n```\n\n{{customRulesSection}}\n\n## \u4EFB\u52A1\u8981\u6C42\n\u8BF7\u57FA\u4E8E\u9879\u76EE\u67B6\u6784\u5206\u6790\uFF0C\u667A\u80FD\u8BC6\u522B\u9879\u76EE\u7684\u6280\u672F\u6808\u548C\u8BED\u8A00\u7279\u5F81\uFF0C\u7136\u540E\u751F\u6210\u4E00\u4EFD\u5B8C\u6574\u7684project_rules.md\u6587\u4EF6\u5185\u5BB9\u3002\n\n### \u5904\u7406\u957F\u5185\u5BB9\u7684\u7279\u6B8A\u8BF4\u660E\n\u5F53\u9879\u76EE\u67B6\u6784\u5206\u6790\u5185\u5BB9\u8F83\u957F\u65F6\uFF0C\u8BF7\u91C7\u7528\u5206\u6BB5\u5904\u7406\u7684\u65B9\u5F0F\uFF1A\n1. \u9996\u5148\u901A\u8BFB\u5168\u90E8\u5185\u5BB9\uFF0C\u7406\u89E3\u6574\u4F53\u67B6\u6784\n2. \u7136\u540E\u9010\u6BB5\u5206\u6790\uFF0C\u6BCF\u6BB5\u5904\u7406\u5B8C\u6210\u540E\u8FDB\u884C\u603B\u7ED3\n3. \u6700\u7EC8\u6574\u5408\u6240\u6709\u5206\u6790\u7ED3\u679C\u751F\u6210\u5B8C\u6574\u7684\u89C4\u5219\u6587\u4EF6\n\n### \u6280\u672F\u6808\u8BC6\u522B\u548C\u5206\u6790\u89C4\u5219\n\u8BF7\u5148\u4ED4\u7EC6\u5206\u6790\u9879\u76EE\u7ED3\u6784\uFF0C\u8BC6\u522B\u51FA\u9879\u76EE\u7684\u6280\u672F\u6808\u548C\u67B6\u6784\u6A21\u5F0F\uFF1A\n\n**\u5E38\u89C1\u6280\u672F\u6808\u8BC6\u522B\uFF1A**\n- **Node.js/TypeScript\u9879\u76EE**: package.json, tsconfig.json, *.ts, *.js\n- **Java\u540E\u7AEF\u9879\u76EE**: pom.xml, build.gradle, src/main/java, *.java\n- **Python\u9879\u76EE**: requirements.txt, setup.py, pyproject.toml, *.py\n- **Go\u9879\u76EE**: go.mod, go.sum, *.go\n- **C#/.NET\u9879\u76EE**: *.csproj, *.sln, *.cs\n- **Vue.js\u524D\u7AEF**: package.json, *.vue, vite.config.js\n- **React\u524D\u7AEF**: package.json, *.jsx, *.tsx\n- **\u5FAE\u670D\u52A1\u67B6\u6784**: docker-compose.yml, kubernetes, \u591A\u4E2A\u6A21\u5757\u76EE\u5F55\n- **\u5355\u4F53\u5E94\u7528**: \u4F20\u7EDF\u7684\u5206\u5C42\u67B6\u6784\n\n### \u6587\u4EF6\u5185\u5BB9\u8981\u6C42\n\u751F\u6210\u7684project_rules.md\u6587\u4EF6\u5E94\u8BE5\u5305\u542B\u4EE5\u4E0B\u5177\u4F53\u7AE0\u8282\uFF1A\n\n#### 1. \u9879\u76EE\u6982\u8FF0\n- \u4E3B\u8981\u6280\u672F\u6808\u548C\u7248\u672C\u4FE1\u606F\n- \u67B6\u6784\u6A21\u5F0F\uFF08\u5FAE\u670D\u52A1\u3001\u5355\u4F53\u3001\u5206\u5C42\u7B49\uFF09\n- \u9879\u76EE\u89C4\u6A21\u548C\u590D\u6742\u5EA6\u8BF4\u660E\n\n#### 2. \u76EE\u5F55\u7ED3\u6784\u89C4\u8303\n\u57FA\u4E8E\u5B9E\u9645\u9879\u76EE\u7ED3\u6784\uFF0C\u8BE6\u7EC6\u8BF4\u660E\uFF1A\n- \u5404\u76EE\u5F55\u7684\u4F5C\u7528\u548C\u5B58\u653E\u5185\u5BB9\n- \u6587\u4EF6\u7EC4\u7EC7\u89C4\u5219\n- \u547D\u540D\u7EA6\u5B9A\n\n#### 3. \u4EE3\u7801\u89C4\u8303\n- \u547D\u540D\u89C4\u8303\uFF08\u6587\u4EF6\u3001\u53D8\u91CF\u3001\u51FD\u6570\u3001\u7C7B\u3001\u5E38\u91CF\u7B49\uFF09\n- \u4EE3\u7801\u98CE\u683C\uFF08\u7F29\u8FDB\u3001\u683C\u5F0F\u7B49\uFF09\n- \u6CE8\u91CA\u8981\u6C42\n- \u5BFC\u5165\u89C4\u5219\n\n#### 4. \u6280\u672F\u6808\u4E13\u7528\u89C4\u8303\n\u6839\u636E\u8BC6\u522B\u7684\u6280\u672F\u6808\uFF0C\u5305\u542B\u5177\u4F53\u7684\u89C4\u8303\uFF1A\n- **\u6570\u636E\u5E93\u89C4\u8303**: ORM\u4F7F\u7528\u65B9\u5F0F\u3001\u5B57\u6BB5\u547D\u540D\u3001\u5173\u8054\u5173\u7CFB\u5904\u7406\n- **API\u8BBE\u8BA1\u89C4\u8303**: RESTful\u8BBE\u8BA1\u3001\u53C2\u6570\u6821\u9A8C\u3001\u8FD4\u56DE\u683C\u5F0F\n- **\u524D\u7AEF\u7EC4\u4EF6\u89C4\u8303**: \u7EC4\u4EF6\u547D\u540D\u3001props\u5B9A\u4E49\u3001\u4E8B\u4EF6\u5904\u7406\n- **\u670D\u52A1\u5C42\u89C4\u8303**: \u4E1A\u52A1\u903B\u8F91\u5C01\u88C5\u3001\u4E8B\u52A1\u5904\u7406\u3001\u5F02\u5E38\u5904\u7406\n\n#### 5. \u67B6\u6784\u6A21\u5F0F\u548C\u8BBE\u8BA1\u539F\u5219\n\u6839\u636E\u9879\u76EE\u67B6\u6784\uFF0C\u5305\u542B\uFF1A\n- \u5206\u5C42\u67B6\u6784\u89C4\u5219\uFF08Controller-Service-Repository\u7B49\uFF09\n- \u4F9D\u8D56\u6CE8\u5165\u6A21\u5F0F\n- \u9519\u8BEF\u5904\u7406\u6A21\u5F0F\n- \u6570\u636E\u9A8C\u8BC1\u6A21\u5F0F\n- \u6743\u9650\u63A7\u5236\u6A21\u5F0F\n\n#### 6. \u5F00\u53D1\u6700\u4F73\u5B9E\u8DF5\n\u9488\u5BF9\u9879\u76EE\u6280\u672F\u6808\u7684\u5177\u4F53\u5B9E\u8DF5\uFF1A\n- \u7EC4\u4EF6\u5316\u8BBE\u8BA1\u89C4\u5219\n- \u5DE5\u5177\u548C\u5E93\u7684\u4F7F\u7528\u89C4\u8303\n- \u7B2C\u4E09\u65B9\u5E93\u4F7F\u7528\u89C4\u8303\n- \u5355\u5143\u6D4B\u8BD5\u65B9\u6CD5\n\n#### 7. \u4EE3\u7801\u793A\u4F8B\u548C\u6A21\u677F\n\u5305\u542B\u9879\u76EE\u4E2D\u5E38\u7528\u7684\u4EE3\u7801\u6A21\u5F0F\uFF1A\n- Entity\u5B9A\u4E49\u6A21\u677F\n- Service\u5C42\u65B9\u6CD5\u6A21\u677F\n- Controller\u63A5\u53E3\u6A21\u677F\n- \u5176\u4ED6\u9879\u76EE\u7279\u5B9A\u7684\u5E38\u7528\u6A21\u677F\n\n### \u8F93\u51FA\u8981\u6C42\n1. **\u8BE6\u7EC6\u5177\u4F53**: \u6BCF\u4E2A\u89C4\u5219\u90FD\u8981\u5177\u4F53\u53EF\u64CD\u4F5C\uFF0C\u907F\u514D\u6A21\u7CCA\u63CF\u8FF0\n2. **\u9879\u76EE\u76F8\u5173**: \u57FA\u4E8E\u5B9E\u9645\u9879\u76EE\u7ED3\u6784\u548C\u6280\u672F\u6808\uFF0C\u5305\u542B\u9879\u76EE\u7279\u5B9A\u4FE1\u606F\n3. **\u7ED3\u6784\u6E05\u6670**: \u4F7F\u7528markdown\u683C\u5F0F\uFF0C\u5C42\u6B21\u5206\u660E\n4. **\u5B9E\u7528\u6027\u5F3A**: \u89C4\u5219\u8981\u80FD\u76F4\u63A5\u6307\u5BFC\u65E5\u5E38\u5F00\u53D1\u5DE5\u4F5C\n5. **\u6280\u672F\u51C6\u786E**: \u786E\u4FDD\u89C4\u5219\u4E0E\u9879\u76EE\u6280\u672F\u6808\u548C\u8BED\u8A00\u7279\u6027\u5B8C\u5168\u5339\u914D\n\n\u8BF7\u5C06\u751F\u6210\u7684\u6587\u4EF6\u4FDD\u5B58\u5230\u9879\u76EE\u6839\u76EE\u5F55\u4E0B\u7684.aico\u6587\u4EF6\u5939\u4E2D\uFF0C\u6587\u4EF6\u540D\u4E3Aproject_rules.md\u3002\n";
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 分段读取文件的选项
|
|
3
|
+
*/
|
|
4
|
+
interface ChunkReadOptions {
|
|
5
|
+
/** 每次读取的行数,默认100行 */
|
|
6
|
+
linesPerChunk?: number;
|
|
7
|
+
/** 编码格式,默认utf8 */
|
|
8
|
+
encoding?: BufferEncoding;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* 分段读取文件的结果
|
|
12
|
+
*/
|
|
13
|
+
interface ChunkReadResult {
|
|
14
|
+
/** 当前块的内容 */
|
|
15
|
+
content: string;
|
|
16
|
+
/** 当前块的起始行号(从0开始) */
|
|
17
|
+
startLine: number;
|
|
18
|
+
/** 当前块的结束行号 */
|
|
19
|
+
endLine: number;
|
|
20
|
+
/** 是否是最后一个块 */
|
|
21
|
+
isLastChunk: boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 异步迭代器,用于分段读取大文件
|
|
25
|
+
* @param filePath 文件路径
|
|
26
|
+
* @param options 读取选项
|
|
27
|
+
*/
|
|
28
|
+
export declare function readLargeFileInChunks(filePath: string, options?: ChunkReadOptions): AsyncGenerator<ChunkReadResult, void, unknown>;
|
|
29
|
+
/**
|
|
30
|
+
* 读取文件指定行范围的内容
|
|
31
|
+
* @param filePath 文件路径
|
|
32
|
+
* @param startLine 起始行号(包含)
|
|
33
|
+
* @param endLine 结束行号(包含)
|
|
34
|
+
* @returns 指定行范围的内容
|
|
35
|
+
*/
|
|
36
|
+
export declare function readFileLines(filePath: string, startLine: number, endLine: number): Promise<string>;
|
|
37
|
+
export {};
|
|
@@ -5,29 +5,17 @@ export declare const RequirementAnalyzerParams: z.ZodEffects<z.ZodObject<{
|
|
|
5
5
|
md_file_path: z.ZodOptional<z.ZodString>;
|
|
6
6
|
feature_name: z.ZodString;
|
|
7
7
|
options: z.ZodDefault<z.ZodOptional<z.ZodObject<{
|
|
8
|
-
analysis_depth: z.ZodDefault<z.ZodOptional<z.ZodEnum<["basic", "detailed", "comprehensive"]>>>;
|
|
9
|
-
generate_sequence_diagram: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
10
|
-
business_domain: z.ZodOptional<z.ZodString>;
|
|
11
|
-
prompt_style: z.ZodDefault<z.ZodOptional<z.ZodEnum<["standard", "technical", "business"]>>>;
|
|
12
|
-
include_code_examples: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
13
8
|
custom_prompt: z.ZodOptional<z.ZodString>;
|
|
14
|
-
|
|
9
|
+
use_streaming: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
10
|
+
chunk_size: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
15
11
|
}, "strip", z.ZodTypeAny, {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
prompt_style: "standard" | "technical" | "business";
|
|
19
|
-
include_code_examples: boolean;
|
|
20
|
-
language: "zh-CN" | "en";
|
|
21
|
-
business_domain?: string | undefined;
|
|
12
|
+
chunk_size: number;
|
|
13
|
+
use_streaming: boolean;
|
|
22
14
|
custom_prompt?: string | undefined;
|
|
23
15
|
}, {
|
|
24
|
-
|
|
25
|
-
generate_sequence_diagram?: boolean | undefined;
|
|
26
|
-
business_domain?: string | undefined;
|
|
27
|
-
prompt_style?: "standard" | "technical" | "business" | undefined;
|
|
28
|
-
include_code_examples?: boolean | undefined;
|
|
16
|
+
chunk_size?: number | undefined;
|
|
29
17
|
custom_prompt?: string | undefined;
|
|
30
|
-
|
|
18
|
+
use_streaming?: boolean | undefined;
|
|
31
19
|
}>>>;
|
|
32
20
|
auto_trigger: z.ZodDefault<z.ZodOptional<z.ZodObject<{
|
|
33
21
|
enable: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
@@ -53,12 +41,8 @@ export declare const RequirementAnalyzerParams: z.ZodEffects<z.ZodObject<{
|
|
|
53
41
|
}>>>;
|
|
54
42
|
}, "strip", z.ZodTypeAny, {
|
|
55
43
|
options: {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
prompt_style: "standard" | "technical" | "business";
|
|
59
|
-
include_code_examples: boolean;
|
|
60
|
-
language: "zh-CN" | "en";
|
|
61
|
-
business_domain?: string | undefined;
|
|
44
|
+
chunk_size: number;
|
|
45
|
+
use_streaming: boolean;
|
|
62
46
|
custom_prompt?: string | undefined;
|
|
63
47
|
};
|
|
64
48
|
input_type: "text" | "md_file";
|
|
@@ -77,13 +61,9 @@ export declare const RequirementAnalyzerParams: z.ZodEffects<z.ZodObject<{
|
|
|
77
61
|
input_type: "text" | "md_file";
|
|
78
62
|
feature_name: string;
|
|
79
63
|
options?: {
|
|
80
|
-
|
|
81
|
-
generate_sequence_diagram?: boolean | undefined;
|
|
82
|
-
business_domain?: string | undefined;
|
|
83
|
-
prompt_style?: "standard" | "technical" | "business" | undefined;
|
|
84
|
-
include_code_examples?: boolean | undefined;
|
|
64
|
+
chunk_size?: number | undefined;
|
|
85
65
|
custom_prompt?: string | undefined;
|
|
86
|
-
|
|
66
|
+
use_streaming?: boolean | undefined;
|
|
87
67
|
} | undefined;
|
|
88
68
|
content?: string | undefined;
|
|
89
69
|
md_file_path?: string | undefined;
|
|
@@ -97,12 +77,8 @@ export declare const RequirementAnalyzerParams: z.ZodEffects<z.ZodObject<{
|
|
|
97
77
|
} | undefined;
|
|
98
78
|
}>, {
|
|
99
79
|
options: {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
prompt_style: "standard" | "technical" | "business";
|
|
103
|
-
include_code_examples: boolean;
|
|
104
|
-
language: "zh-CN" | "en";
|
|
105
|
-
business_domain?: string | undefined;
|
|
80
|
+
chunk_size: number;
|
|
81
|
+
use_streaming: boolean;
|
|
106
82
|
custom_prompt?: string | undefined;
|
|
107
83
|
};
|
|
108
84
|
input_type: "text" | "md_file";
|
|
@@ -121,13 +97,9 @@ export declare const RequirementAnalyzerParams: z.ZodEffects<z.ZodObject<{
|
|
|
121
97
|
input_type: "text" | "md_file";
|
|
122
98
|
feature_name: string;
|
|
123
99
|
options?: {
|
|
124
|
-
|
|
125
|
-
generate_sequence_diagram?: boolean | undefined;
|
|
126
|
-
business_domain?: string | undefined;
|
|
127
|
-
prompt_style?: "standard" | "technical" | "business" | undefined;
|
|
128
|
-
include_code_examples?: boolean | undefined;
|
|
100
|
+
chunk_size?: number | undefined;
|
|
129
101
|
custom_prompt?: string | undefined;
|
|
130
|
-
|
|
102
|
+
use_streaming?: boolean | undefined;
|
|
131
103
|
} | undefined;
|
|
132
104
|
content?: string | undefined;
|
|
133
105
|
md_file_path?: string | undefined;
|
|
@@ -146,13 +118,9 @@ export interface RequirementAnalyzerParams {
|
|
|
146
118
|
md_file_path?: string;
|
|
147
119
|
feature_name: string;
|
|
148
120
|
options?: {
|
|
149
|
-
analysis_depth?: 'basic' | 'detailed' | 'comprehensive';
|
|
150
|
-
generate_sequence_diagram?: boolean;
|
|
151
|
-
business_domain?: string;
|
|
152
|
-
prompt_style?: 'standard' | 'technical' | 'business';
|
|
153
|
-
include_code_examples?: boolean;
|
|
154
121
|
custom_prompt?: string;
|
|
155
|
-
|
|
122
|
+
use_streaming?: boolean;
|
|
123
|
+
chunk_size?: number;
|
|
156
124
|
};
|
|
157
125
|
auto_trigger?: {
|
|
158
126
|
enable?: boolean;
|
|
@@ -172,29 +140,17 @@ export declare const requirementAnalyzerTool: {
|
|
|
172
140
|
md_file_path: z.ZodOptional<z.ZodString>;
|
|
173
141
|
feature_name: z.ZodString;
|
|
174
142
|
options: z.ZodDefault<z.ZodOptional<z.ZodObject<{
|
|
175
|
-
analysis_depth: z.ZodDefault<z.ZodOptional<z.ZodEnum<["basic", "detailed", "comprehensive"]>>>;
|
|
176
|
-
generate_sequence_diagram: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
177
|
-
business_domain: z.ZodOptional<z.ZodString>;
|
|
178
|
-
prompt_style: z.ZodDefault<z.ZodOptional<z.ZodEnum<["standard", "technical", "business"]>>>;
|
|
179
|
-
include_code_examples: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
180
143
|
custom_prompt: z.ZodOptional<z.ZodString>;
|
|
181
|
-
|
|
144
|
+
use_streaming: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
145
|
+
chunk_size: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
182
146
|
}, "strip", z.ZodTypeAny, {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
prompt_style: "standard" | "technical" | "business";
|
|
186
|
-
include_code_examples: boolean;
|
|
187
|
-
language: "zh-CN" | "en";
|
|
188
|
-
business_domain?: string | undefined;
|
|
147
|
+
chunk_size: number;
|
|
148
|
+
use_streaming: boolean;
|
|
189
149
|
custom_prompt?: string | undefined;
|
|
190
150
|
}, {
|
|
191
|
-
|
|
192
|
-
generate_sequence_diagram?: boolean | undefined;
|
|
193
|
-
business_domain?: string | undefined;
|
|
194
|
-
prompt_style?: "standard" | "technical" | "business" | undefined;
|
|
195
|
-
include_code_examples?: boolean | undefined;
|
|
151
|
+
chunk_size?: number | undefined;
|
|
196
152
|
custom_prompt?: string | undefined;
|
|
197
|
-
|
|
153
|
+
use_streaming?: boolean | undefined;
|
|
198
154
|
}>>>;
|
|
199
155
|
auto_trigger: z.ZodDefault<z.ZodOptional<z.ZodObject<{
|
|
200
156
|
enable: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
@@ -220,12 +176,8 @@ export declare const requirementAnalyzerTool: {
|
|
|
220
176
|
}>>>;
|
|
221
177
|
}, "strip", z.ZodTypeAny, {
|
|
222
178
|
options: {
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
prompt_style: "standard" | "technical" | "business";
|
|
226
|
-
include_code_examples: boolean;
|
|
227
|
-
language: "zh-CN" | "en";
|
|
228
|
-
business_domain?: string | undefined;
|
|
179
|
+
chunk_size: number;
|
|
180
|
+
use_streaming: boolean;
|
|
229
181
|
custom_prompt?: string | undefined;
|
|
230
182
|
};
|
|
231
183
|
input_type: "text" | "md_file";
|
|
@@ -244,13 +196,9 @@ export declare const requirementAnalyzerTool: {
|
|
|
244
196
|
input_type: "text" | "md_file";
|
|
245
197
|
feature_name: string;
|
|
246
198
|
options?: {
|
|
247
|
-
|
|
248
|
-
generate_sequence_diagram?: boolean | undefined;
|
|
249
|
-
business_domain?: string | undefined;
|
|
250
|
-
prompt_style?: "standard" | "technical" | "business" | undefined;
|
|
251
|
-
include_code_examples?: boolean | undefined;
|
|
199
|
+
chunk_size?: number | undefined;
|
|
252
200
|
custom_prompt?: string | undefined;
|
|
253
|
-
|
|
201
|
+
use_streaming?: boolean | undefined;
|
|
254
202
|
} | undefined;
|
|
255
203
|
content?: string | undefined;
|
|
256
204
|
md_file_path?: string | undefined;
|
|
@@ -264,12 +212,8 @@ export declare const requirementAnalyzerTool: {
|
|
|
264
212
|
} | undefined;
|
|
265
213
|
}>, {
|
|
266
214
|
options: {
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
prompt_style: "standard" | "technical" | "business";
|
|
270
|
-
include_code_examples: boolean;
|
|
271
|
-
language: "zh-CN" | "en";
|
|
272
|
-
business_domain?: string | undefined;
|
|
215
|
+
chunk_size: number;
|
|
216
|
+
use_streaming: boolean;
|
|
273
217
|
custom_prompt?: string | undefined;
|
|
274
218
|
};
|
|
275
219
|
input_type: "text" | "md_file";
|
|
@@ -288,13 +232,9 @@ export declare const requirementAnalyzerTool: {
|
|
|
288
232
|
input_type: "text" | "md_file";
|
|
289
233
|
feature_name: string;
|
|
290
234
|
options?: {
|
|
291
|
-
|
|
292
|
-
generate_sequence_diagram?: boolean | undefined;
|
|
293
|
-
business_domain?: string | undefined;
|
|
294
|
-
prompt_style?: "standard" | "technical" | "business" | undefined;
|
|
295
|
-
include_code_examples?: boolean | undefined;
|
|
235
|
+
chunk_size?: number | undefined;
|
|
296
236
|
custom_prompt?: string | undefined;
|
|
297
|
-
|
|
237
|
+
use_streaming?: boolean | undefined;
|
|
298
238
|
} | undefined;
|
|
299
239
|
content?: string | undefined;
|
|
300
240
|
md_file_path?: string | undefined;
|
|
@@ -0,0 +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";
|