intention-coding 0.5.6 → 0.5.8

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.
Files changed (38) hide show
  1. package/dist/index.cjs +1428 -2486
  2. package/dist/services/image-analysis/analyzer.d.ts +0 -8
  3. package/dist/services/image-analysis/analyzer.d.ts.map +1 -1
  4. package/dist/services/image-analysis/index.d.ts.map +1 -1
  5. package/dist/services/image-recognition-agent/analyzer.d.ts +3 -1
  6. package/dist/services/image-recognition-agent/analyzer.d.ts.map +1 -1
  7. package/dist/services/image-recognition-agent/index.d.ts +1 -0
  8. package/dist/services/image-recognition-agent/index.d.ts.map +1 -1
  9. package/dist/services/image-recognition-agent/processor.d.ts +1 -1
  10. package/dist/services/image-recognition-agent/processor.d.ts.map +1 -1
  11. package/dist/services/image-recognition-agent/types.d.ts +3 -0
  12. package/dist/services/image-recognition-agent/types.d.ts.map +1 -1
  13. package/dist/services/requirement/index.d.ts.map +1 -1
  14. package/dist/services/requirement-analyzer/core/document-generator.d.ts +71 -5
  15. package/dist/services/requirement-analyzer/core/document-generator.d.ts.map +1 -1
  16. package/dist/services/requirement-analyzer/core/requirement-analyzer-service.d.ts +21 -10
  17. package/dist/services/requirement-analyzer/core/requirement-analyzer-service.d.ts.map +1 -1
  18. package/dist/services/requirement-analyzer/core/template-selector.d.ts.map +1 -1
  19. package/dist/services/requirement-analyzer/core/types.d.ts +40 -22
  20. package/dist/services/requirement-analyzer/core/types.d.ts.map +1 -1
  21. package/dist/services/requirement-analyzer/index.d.ts +12 -12
  22. package/dist/services/requirement-analyzer/index.d.ts.map +1 -1
  23. package/dist/services/requirement-analyzer/prompt/api-template.d.ts +1 -1
  24. package/dist/services/requirement-analyzer/prompt/api-template.d.ts.map +1 -1
  25. package/dist/services/requirement-analyzer/prompt/app-template.d.ts +1 -1
  26. package/dist/services/requirement-analyzer/prompt/app-template.d.ts.map +1 -1
  27. package/dist/services/requirement-analyzer/prompt/intelligent-requirement-analysis.d.ts +1 -1
  28. package/dist/services/requirement-analyzer/prompt/intelligent-requirement-analysis.d.ts.map +1 -1
  29. package/dist/services/requirement-analyzer/prompt/pc-page-template.d.ts +1 -1
  30. package/dist/services/requirement-analyzer/prompt/pc-page-template.d.ts.map +1 -1
  31. package/dist/services/requirement-analyzer/prompt/requirement-analysis.d.ts +1 -1
  32. package/dist/services/requirement-analyzer/prompt/requirement-analysis.d.ts.map +1 -1
  33. package/dist/services/requirement-analyzer/prompt/sdk-template.d.ts +1 -1
  34. package/dist/services/requirement-analyzer/prompt/sdk-template.d.ts.map +1 -1
  35. package/dist/utils/openai.d.ts.map +1 -1
  36. package/package.json +1 -1
  37. package/dist/services/requirement-analyzer/core/parameter-bridge.d.ts +0 -44
  38. package/dist/services/requirement-analyzer/core/parameter-bridge.d.ts.map +0 -1
package/dist/index.cjs CHANGED
@@ -275,7 +275,7 @@ var __webpack_exports__ = {};
275
275
  if (null === _PROJECT_ROOT) _PROJECT_ROOT = detectProjectRoot();
276
276
  return _PROJECT_ROOT;
277
277
  };
278
- const config_PROJECT_ROOT = (()=>{
278
+ (()=>{
279
279
  try {
280
280
  return getProjectRoot();
281
281
  } catch (error) {
@@ -312,7 +312,6 @@ var __webpack_exports__ = {};
312
312
  description: "\u8F6F\u4EF6\u5DE5\u7A0B\u5316\u7684\u9700\u6C42\u5206\u6790\uFF0C\u529F\u80FD\u8BBE\u8BA1\uFF0C\u4EE3\u7801\u7F16\u5199\uFF0C\u6D4B\u8BD5\u8FD0\u884C\u548C\u53D1\u5E03\u90E8\u7F72"
313
313
  };
314
314
  const promises_namespaceObject = require("fs/promises");
315
- var promises_default = /*#__PURE__*/ __webpack_require__.n(promises_namespaceObject);
316
315
  const external_mammoth_namespaceObject = require("mammoth");
317
316
  var external_mammoth_default = /*#__PURE__*/ __webpack_require__.n(external_mammoth_namespaceObject);
318
317
  const external_html_to_md_namespaceObject = require("html-to-md");
@@ -4182,210 +4181,12 @@ var __webpack_exports__ = {};
4182
4181
  }
4183
4182
  }
4184
4183
  };
4185
- class ParameterBridge {
4186
- static ToolParamsSchema = objectType({
4187
- input_type: enumType([
4188
- "text",
4189
- "md_file"
4190
- ]).describe("\u8F93\u5165\u7C7B\u578B\uFF1A\u76F4\u63A5\u6587\u672C\u8F93\u5165\u6216\u5F15\u7528\u5DF2\u751F\u6210\u7684MD\u6587\u4EF6"),
4191
- content: stringType().optional().describe("\u5F53input_type\u4E3Atext\u65F6\uFF0C\u76F4\u63A5\u8F93\u5165\u7684\u9700\u6C42\u5185\u5BB9"),
4192
- md_file_path: stringType().optional().describe("\u5F53input_type\u4E3Amd_file\u65F6\uFF0C\u8981\u5206\u6790\u7684MD\u6587\u4EF6\u8DEF\u5F84"),
4193
- feature_name: stringType().describe("\u529F\u80FD\u540D\u79F0\uFF0C\u7528\u4E8E\u751F\u6210\u8F93\u51FA\u6587\u4EF6\u540D"),
4194
- custom_prompt: stringType().optional().describe("\u81EA\u5B9A\u4E49\u63D0\u793A\u8BCD\uFF0C\u7528\u4E8E\u6307\u5BFCAI\u751F\u6210\u7279\u5B9A\u98CE\u683C\u7684\u9700\u6C42\u6587\u6863"),
4195
- analysis_depth: enumType([
4196
- "basic",
4197
- "detailed",
4198
- "comprehensive"
4199
- ]).default("detailed").describe("\u5206\u6790\u6DF1\u5EA6\uFF1A\u57FA\u7840\u3001\u8BE6\u7EC6\u3001\u7EFC\u5408"),
4200
- use_streaming: booleanType().default(false).describe("\u662F\u5426\u4F7F\u7528\u6D41\u5F0F\u5904\u7406\uFF08\u9002\u7528\u4E8E\u5927\u6587\u4EF6\uFF09"),
4201
- chunk_size: numberType().min(10).max(1000).default(100).describe("\u5206\u5757\u5927\u5C0F\uFF08\u4EC5\u5728use_streaming\u4E3Atrue\u65F6\u6709\u6548\uFF09")
4202
- }).refine((data)=>{
4203
- if ("text" === data.input_type) return data.content && data.content.trim().length > 0;
4204
- if ("md_file" === data.input_type) return data.md_file_path && data.md_file_path.trim().length > 0;
4205
- return false;
4206
- }, {
4207
- message: "\u5F53input_type\u4E3Atext\u65F6content\u5FC5\u586B\uFF0C\u5F53input_type\u4E3Amd_file\u65F6md_file_path\u5FC5\u586B"
4208
- });
4209
- static validateToolParams(args) {
4210
- try {
4211
- const result = ParameterBridge.ToolParamsSchema.safeParse(args);
4212
- if (result.success) return {
4213
- success: true,
4214
- data: result.data
4215
- };
4216
- {
4217
- const errorMessages = result.error.errors.map((err)=>`${err.path.join('.')}: ${err.message}`).join('; ');
4218
- return {
4219
- success: false,
4220
- error: `\u{53C2}\u{6570}\u{9A8C}\u{8BC1}\u{5931}\u{8D25}: ${errorMessages}`
4221
- };
4222
- }
4223
- } catch (error) {
4224
- return {
4225
- success: false,
4226
- error: `\u{53C2}\u{6570}\u{9A8C}\u{8BC1}\u{5F02}\u{5E38}: ${error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF"}`
4227
- };
4228
- }
4229
- }
4230
- static convertToServiceParams(toolParams) {
4231
- return {
4232
- input_type: toolParams.input_type,
4233
- content: toolParams.content,
4234
- md_file_path: toolParams.md_file_path,
4235
- feature_name: toolParams.feature_name,
4236
- custom_prompt: toolParams.custom_prompt,
4237
- analysis_depth: toolParams.analysis_depth,
4238
- use_streaming: toolParams.use_streaming,
4239
- chunk_size: toolParams.chunk_size
4240
- };
4241
- }
4242
- static convertToToolResponse(serviceResult) {
4243
- if (false === serviceResult.success) return {
4244
- content: [
4245
- {
4246
- type: "text",
4247
- text: JSON.stringify({
4248
- success: false,
4249
- message: serviceResult.message,
4250
- data: serviceResult.data || null
4251
- })
4252
- }
4253
- ],
4254
- isError: true
4255
- };
4256
- return {
4257
- content: [
4258
- {
4259
- type: "text",
4260
- text: JSON.stringify({
4261
- success: true,
4262
- message: serviceResult.message || "\u9700\u6C42\u5206\u6790\u5B8C\u6210",
4263
- data: {
4264
- outputPath: serviceResult.outputPath,
4265
- generatedFiles: serviceResult.generatedFiles || [],
4266
- analysisInfo: serviceResult.analysisInfo || {}
4267
- }
4268
- })
4269
- }
4270
- ]
4271
- };
4272
- }
4273
- static convertErrorToToolResponse(error) {
4274
- return {
4275
- content: [
4276
- {
4277
- type: "text",
4278
- text: JSON.stringify({
4279
- success: false,
4280
- message: error.message || "\u9700\u6C42\u5206\u6790\u8FC7\u7A0B\u4E2D\u53D1\u751F\u9519\u8BEF",
4281
- data: {
4282
- code: error.code || 'UNKNOWN_ERROR',
4283
- context: error.context || null
4284
- }
4285
- })
4286
- }
4287
- ],
4288
- isError: true
4289
- };
4290
- }
4291
- }
4292
- async function readLargeFileContent(filePath, chunkSize = 100) {
4293
- try {
4294
- logger.info("\u5F00\u59CB\u5206\u6BB5\u8BFB\u53D6\u5927\u6587\u4EF6", {
4295
- filePath,
4296
- chunkSize
4297
- });
4298
- const content = await promises_namespaceObject.readFile(filePath, 'utf8');
4299
- const lines = content.split('\n');
4300
- if (lines.length <= chunkSize) {
4301
- logger.info("\u6587\u4EF6\u884C\u6570\u8F83\u5C11\uFF0C\u76F4\u63A5\u8FD4\u56DE\u5B8C\u6574\u5185\u5BB9", {
4302
- totalLines: lines.length
4303
- });
4304
- return content;
4305
- }
4306
- const importantContent = selectImportantContent(lines, chunkSize);
4307
- logger.info("\u5927\u6587\u4EF6\u5206\u6BB5\u8BFB\u53D6\u5B8C\u6210", {
4308
- originalLines: lines.length,
4309
- selectedLines: importantContent.split('\n').length
4310
- });
4311
- return importantContent;
4312
- } catch (error) {
4313
- logger.error("\u5927\u6587\u4EF6\u8BFB\u53D6\u5931\u8D25", {
4314
- error,
4315
- filePath
4316
- });
4317
- throw error;
4318
- }
4319
- }
4320
- function selectImportantContent(lines, maxLines) {
4321
- const importantLines = [];
4322
- const headerLines = [];
4323
- const contentLines = [];
4324
- for (const line of lines){
4325
- const trimmedLine = line.trim();
4326
- if (trimmedLine.startsWith('#')) headerLines.push(line);
4327
- else if (trimmedLine.length > 0 && !isBoilerplate(trimmedLine)) contentLines.push(line);
4328
- }
4329
- importantLines.push(...headerLines);
4330
- const remainingLines = maxLines - headerLines.length;
4331
- if (remainingLines > 0) {
4332
- const selectedContent = selectMostImportantContent(contentLines, remainingLines);
4333
- importantLines.push(...selectedContent);
4334
- }
4335
- return importantLines.join('\n');
4336
- }
4337
- function selectMostImportantContent(contentLines, maxLines) {
4338
- if (contentLines.length <= maxLines) return contentLines;
4339
- const scoredLines = contentLines.map((line)=>({
4340
- line,
4341
- score: calculateImportanceScore(line)
4342
- }));
4343
- scoredLines.sort((a, b)=>b.score - a.score);
4344
- return scoredLines.slice(0, maxLines).map((item)=>item.line);
4345
- }
4346
- function calculateImportanceScore(line) {
4347
- let score = 0;
4348
- const trimmedLine = line.trim().toLowerCase();
4349
- const keywords = [
4350
- "\u9700\u6C42",
4351
- "\u529F\u80FD",
4352
- "\u63A5\u53E3",
4353
- 'api',
4354
- "\u9875\u9762",
4355
- "\u7528\u6237",
4356
- "\u7CFB\u7EDF",
4357
- "\u5B9E\u73B0",
4358
- "\u5F00\u53D1",
4359
- "\u8BBE\u8BA1",
4360
- "\u4E1A\u52A1",
4361
- "\u6D41\u7A0B",
4362
- "\u6570\u636E",
4363
- "\u670D\u52A1"
4364
- ];
4365
- for (const keyword of keywords)if (trimmedLine.includes(keyword)) score += 2;
4366
- if (trimmedLine.length > 10 && trimmedLine.length < 200) score += 1;
4367
- if (trimmedLine.includes("\uFF1A") || trimmedLine.includes(':')) score += 1;
4368
- return score;
4369
- }
4370
- function isBoilerplate(line) {
4371
- const boilerplatePatterns = [
4372
- /^-+$/,
4373
- /^=+$/,
4374
- /^\s*$/,
4375
- /^#+\s*$/,
4376
- /^目录$/,
4377
- /^table of contents$/i,
4378
- /^generated by/i,
4379
- /^created by/i
4380
- ];
4381
- return boilerplatePatterns.some((pattern)=>pattern.test(line.trim()));
4382
- }
4383
4184
  class RequirementAnalysisError extends Error {
4384
4185
  code;
4385
4186
  context;
4386
4187
  constructor(message, code, context){
4387
4188
  super(message), this.code = code, this.context = context;
4388
- this.name = 'RequirementAnalysisError';
4189
+ this.name = "RequirementAnalysisError";
4389
4190
  }
4390
4191
  }
4391
4192
  var types_ErrorCodes = /*#__PURE__*/ function(ErrorCodes) {
@@ -4398,238 +4199,82 @@ var __webpack_exports__ = {};
4398
4199
  ErrorCodes["UNSUPPORTED_REQUIREMENT_TYPE"] = "UNSUPPORTED_REQUIREMENT_TYPE";
4399
4200
  return ErrorCodes;
4400
4201
  }({});
4401
- const external_aico_pack_namespaceObject = require("aico-pack");
4402
- async function packProject(projectPath) {
4403
- const mdDir = external_path_default().join(getStorageDir(), 'tech');
4404
- await promises_default().mkdir(mdDir, {
4405
- recursive: true
4406
- });
4407
- logger.info(`\u{1F4C2} \u{6B63}\u{5728}\u{5206}\u{6790}\u{5F53}\u{524D}\u{672C}\u{5730}\u{9879}\u{76EE}`);
4408
- const mdPath = external_path_default().join(mdDir, `\u{9879}\u{76EE}\u{67B6}\u{6784}\u{5206}\u{6790}.md`);
4409
- const options = {
4410
- output: mdPath,
4411
- style: 'markdown',
4412
- headerText: "\u667A\u80FD\u8F6F\u4EF6\u661F\u5DE5\u5382",
4413
- fileSummary: true,
4414
- removeEmptyLines: true,
4415
- removeComments: true,
4416
- showLineNumbers: true,
4417
- compress: true,
4418
- quiet: true,
4419
- customPatterns: [
4420
- "**/*.md",
4421
- "**/*.log",
4422
- "**/*.json",
4423
- "**/*.txt",
4424
- "**/*.dockerfile",
4425
- "**/*.yml",
4426
- "**/*.yaml",
4427
- "**/*.sh",
4428
- "**/*.env",
4429
- "**/*.env.example",
4430
- "**/LICENSE",
4431
- "**/test/**"
4432
- ]
4433
- };
4434
- const targetPath = projectPath || config_PROJECT_ROOT;
4435
- await (0, external_aico_pack_namespaceObject.runCli)([
4436
- targetPath
4437
- ], process.cwd(), options);
4438
- return mdPath;
4439
- }
4440
- class ProjectAnalyzer {
4441
- async analyzeProject() {
4442
- try {
4443
- logger.info("\u5F00\u59CB\u5206\u6790\u9879\u76EE\u57FA\u672C\u60C5\u51B5");
4444
- const projectAnalysisPath = await packProject();
4445
- logger.info("\u9879\u76EE\u5206\u6790\u5B8C\u6210", {
4446
- analysisPath: projectAnalysisPath
4447
- });
4448
- const projectAnalysisContent = await promises_namespaceObject.readFile(projectAnalysisPath, 'utf8');
4449
- const projectInfo = this.extractProjectInfo(projectAnalysisContent);
4450
- logger.info("\u9879\u76EE\u4FE1\u606F\u63D0\u53D6\u5B8C\u6210", {
4451
- projectInfo
4452
- });
4453
- return projectInfo;
4454
- } catch (error) {
4455
- logger.warn("\u9879\u76EE\u5206\u6790\u5931\u8D25\uFF0C\u4F7F\u7528\u9ED8\u8BA4\u914D\u7F6E", {
4456
- error
4457
- });
4458
- return this.getDefaultProjectInfo();
4459
- }
4460
- }
4461
- extractProjectInfo(projectAnalysis) {
4462
- const projectInfo = {
4463
- techStack: [],
4464
- frameworks: [],
4465
- language: '',
4466
- projectType: '',
4467
- dependencies: []
4468
- };
4469
- const techStackKeywords = [
4470
- 'React',
4471
- 'Vue',
4472
- 'Angular',
4473
- 'Svelte',
4474
- 'Node.js',
4475
- 'Express',
4476
- 'Koa',
4477
- 'Fastify',
4478
- 'Python',
4479
- 'Django',
4480
- 'Flask',
4481
- 'Java',
4482
- 'Spring',
4483
- 'Spring Boot',
4484
- 'TypeScript',
4485
- 'JavaScript',
4486
- 'PostgreSQL',
4487
- 'MySQL',
4488
- 'MongoDB',
4489
- 'Redis',
4490
- 'Docker',
4491
- 'Kubernetes'
4492
- ];
4493
- const frameworkKeywords = [
4494
- 'React',
4495
- 'Vue',
4496
- 'Angular',
4497
- 'Svelte',
4498
- 'Express',
4499
- 'Koa',
4500
- 'Fastify',
4501
- 'Django',
4502
- 'Flask',
4503
- 'Spring',
4504
- 'Spring Boot',
4505
- 'Next.js',
4506
- 'Nuxt.js'
4507
- ];
4508
- const languageKeywords = [
4509
- 'TypeScript',
4510
- 'JavaScript',
4511
- 'Python',
4512
- 'Java',
4513
- 'Go',
4514
- 'Rust',
4515
- 'C#'
4516
- ];
4517
- for (const keyword of techStackKeywords)if (projectAnalysis.includes(keyword)) projectInfo.techStack.push(keyword);
4518
- for (const keyword of frameworkKeywords)if (projectAnalysis.includes(keyword)) projectInfo.frameworks.push(keyword);
4519
- for (const keyword of languageKeywords)if (projectAnalysis.includes(keyword)) {
4520
- projectInfo.language = keyword;
4521
- break;
4522
- }
4523
- projectInfo.projectType = this.determineProjectType(projectAnalysis);
4524
- projectInfo.dependencies = this.extractDependencies(projectAnalysis);
4525
- return projectInfo;
4526
- }
4527
- determineProjectType(projectAnalysis) {
4528
- if (projectAnalysis.includes('package.json')) return "Node.js\u9879\u76EE";
4529
- if (projectAnalysis.includes('requirements.txt') || projectAnalysis.includes('pyproject.toml')) return "Python\u9879\u76EE";
4530
- if (projectAnalysis.includes('pom.xml') || projectAnalysis.includes('build.gradle')) return "Java\u9879\u76EE";
4531
- if (projectAnalysis.includes('Cargo.toml')) return "Rust\u9879\u76EE";
4532
- if (projectAnalysis.includes('go.mod')) return "Go\u9879\u76EE";
4533
- else return "\u901A\u7528\u9879\u76EE";
4534
- }
4535
- extractDependencies(projectAnalysis) {
4536
- const dependencyMatch = projectAnalysis.match(/## 依赖.*?```.*?\n([\s\S]*?)\n```/);
4537
- if (dependencyMatch && dependencyMatch[1]) return dependencyMatch[1].split('\n').filter((line)=>'' !== line.trim()).map((line)=>line.trim()).slice(0, 10);
4538
- return [];
4539
- }
4540
- getDefaultProjectInfo() {
4541
- return {
4542
- techStack: [],
4543
- frameworks: [],
4544
- language: '',
4545
- projectType: "\u901A\u7528\u9879\u76EE",
4546
- dependencies: []
4547
- };
4548
- }
4549
- validateProjectInfo(projectInfo) {
4550
- if (!projectInfo.projectType) throw new RequirementAnalysisError("\u65E0\u6CD5\u786E\u5B9A\u9879\u76EE\u7C7B\u578B\uFF0C\u8BF7\u68C0\u67E5\u9879\u76EE\u7ED3\u6784", types_ErrorCodes.PROJECT_ANALYSIS_FAILED, {
4551
- projectInfo
4552
- });
4553
- }
4554
- }
4555
4202
  class OpenAIService {
4556
4203
  qwenConfig = {
4557
- apiKey: 'sk-95b0bc60b7464bbbafd64edc2f5bab14',
4558
- baseUrl: 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions',
4559
- model: 'qwen3-coder-plus'
4204
+ apiKey: "sk-95b0bc60b7464bbbafd64edc2f5bab14",
4205
+ baseUrl: "https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions",
4206
+ model: "qwen3-coder-plus"
4560
4207
  };
4561
4208
  kimiConfig = {
4562
- apiKey: 'sk-fp8wJSigZBEP3x8y6MAZWGPuVIHJ5PDZtX9lMQQk8hjP2R0u',
4563
- baseUrl: 'https://api.moonshot.cn/v1/chat/completions',
4564
- model: 'kimi-latest'
4209
+ apiKey: "sk-fp8wJSigZBEP3x8y6MAZWGPuVIHJ5PDZtX9lMQQk8hjP2R0u",
4210
+ baseUrl: "https://api.moonshot.cn/v1/chat/completions",
4211
+ model: "kimi-k2-0905-preview"
4565
4212
  };
4566
4213
  glm4vConfig = {
4567
- apiKey: 'fb26a7ff758c3974e43bfff49a684dd3.apcuRq6v6RvwuJDu',
4568
- baseUrl: 'https://open.bigmodel.cn/api/paas/v4/chat/completions',
4569
- model: 'glm-4v-flash'
4214
+ apiKey: "fb26a7ff758c3974e43bfff49a684dd3.apcuRq6v6RvwuJDu",
4215
+ baseUrl: "https://open.bigmodel.cn/api/paas/v4/chat/completions",
4216
+ model: "glm-4v-flash"
4570
4217
  };
4571
4218
  deepseekConfig = {
4572
- apiKey: 'sk-d7g4er7QBGrGQ51Cvep2438xVic6aiXXPCR7ZfrYh34kxXzG',
4573
- baseUrl: 'https://api.lkeap.cloud.tencent.com/v1/chat/completions',
4574
- model: 'deepseek-v3.1'
4219
+ apiKey: "sk-d7g4er7QBGrGQ51Cvep2438xVic6aiXXPCR7ZfrYh34kxXzG",
4220
+ baseUrl: "https://api.lkeap.cloud.tencent.com/v1/chat/completions",
4221
+ model: "deepseek-v3.1-terminus"
4575
4222
  };
4576
4223
  constructor(){}
4577
4224
  async generateText(params) {
4578
4225
  const { prompt, temperature, system_prompt } = params;
4579
4226
  let lastError = null;
4580
4227
  try {
4581
- const response = await fetch(this.deepseekConfig.baseUrl, {
4582
- method: 'POST',
4228
+ const response = await fetch(this.kimiConfig.baseUrl, {
4229
+ method: "POST",
4583
4230
  headers: {
4584
- 'Content-Type': 'application/json',
4585
- Authorization: `Bearer ${this.deepseekConfig.apiKey}`
4231
+ "Content-Type": "application/json",
4232
+ Authorization: `Bearer ${this.kimiConfig.apiKey}`
4586
4233
  },
4587
4234
  body: JSON.stringify({
4588
- model: this.deepseekConfig.model,
4235
+ model: this.kimiConfig.model,
4589
4236
  messages: [
4590
4237
  ...system_prompt ? [
4591
4238
  {
4592
- role: 'system',
4239
+ role: "system",
4593
4240
  content: system_prompt
4594
4241
  }
4595
4242
  ] : [],
4596
4243
  {
4597
- role: 'user',
4244
+ role: "user",
4598
4245
  content: prompt
4599
4246
  }
4600
4247
  ],
4601
- max_tokens: 4096,
4602
- temperature: temperature || 0.7,
4603
- stream: false
4248
+ temperature: temperature || 0.7
4604
4249
  })
4605
4250
  });
4606
4251
  if (!response.ok) {
4607
4252
  const errorText = await response.text();
4608
- throw new Error(`DeepSeek API error: ${response.status} ${response.statusText} - ${errorText}`);
4253
+ throw new Error(`Kimi API error: ${response.status} ${response.statusText} - ${errorText}`);
4609
4254
  }
4610
4255
  const data = await response.json();
4611
- if (!data.choices || 0 === data.choices.length) throw new Error('No choices returned from DeepSeek API');
4256
+ if (!data.choices || 0 === data.choices.length) throw new Error("No choices returned from Kimi API");
4612
4257
  return data.choices[0].message.content;
4613
4258
  } catch (error) {
4614
4259
  lastError = error;
4615
4260
  try {
4616
- const response = await fetch(this.qwenConfig.baseUrl, {
4617
- method: 'POST',
4261
+ const response = await fetch(this.deepseekConfig.baseUrl, {
4262
+ method: "POST",
4618
4263
  headers: {
4619
- 'Content-Type': 'application/json',
4620
- Authorization: `Bearer ${this.qwenConfig.apiKey}`
4264
+ "Content-Type": "application/json",
4265
+ Authorization: `Bearer ${this.deepseekConfig.apiKey}`
4621
4266
  },
4622
4267
  body: JSON.stringify({
4623
- model: this.qwenConfig.model,
4268
+ model: this.deepseekConfig.model,
4624
4269
  messages: [
4625
4270
  ...system_prompt ? [
4626
4271
  {
4627
- role: 'system',
4272
+ role: "system",
4628
4273
  content: system_prompt
4629
4274
  }
4630
4275
  ] : [],
4631
4276
  {
4632
- role: 'user',
4277
+ role: "user",
4633
4278
  content: prompt
4634
4279
  }
4635
4280
  ],
@@ -4640,13 +4285,48 @@ var __webpack_exports__ = {};
4640
4285
  });
4641
4286
  if (!response.ok) {
4642
4287
  const errorText = await response.text();
4643
- throw new Error(`Qwen API error: ${response.status} ${response.statusText} - ${errorText}`);
4288
+ throw new Error(`DeepSeek API error: ${response.status} ${response.statusText} - ${errorText}`);
4644
4289
  }
4645
4290
  const data = await response.json();
4646
- if (!data.choices || 0 === data.choices.length) throw new Error('No choices returned from Qwen API');
4291
+ if (!data.choices || 0 === data.choices.length) throw new Error("No choices returned from DeepSeek API");
4647
4292
  return data.choices[0].message.content;
4648
- } catch (qwenError) {
4649
- throw lastError;
4293
+ } catch (deepseekError) {
4294
+ try {
4295
+ const response = await fetch(this.qwenConfig.baseUrl, {
4296
+ method: "POST",
4297
+ headers: {
4298
+ "Content-Type": "application/json",
4299
+ Authorization: `Bearer ${this.qwenConfig.apiKey}`
4300
+ },
4301
+ body: JSON.stringify({
4302
+ model: this.qwenConfig.model,
4303
+ messages: [
4304
+ ...system_prompt ? [
4305
+ {
4306
+ role: "system",
4307
+ content: system_prompt
4308
+ }
4309
+ ] : [],
4310
+ {
4311
+ role: "user",
4312
+ content: prompt
4313
+ }
4314
+ ],
4315
+ max_tokens: 4096,
4316
+ temperature: temperature || 0.7,
4317
+ stream: false
4318
+ })
4319
+ });
4320
+ if (!response.ok) {
4321
+ const errorText = await response.text();
4322
+ throw new Error(`Qwen API error: ${response.status} ${response.statusText} - ${errorText}`);
4323
+ }
4324
+ const data = await response.json();
4325
+ if (!data.choices || 0 === data.choices.length) throw new Error("No choices returned from Qwen API");
4326
+ return data.choices[0].message.content;
4327
+ } catch (qwenError) {
4328
+ throw lastError;
4329
+ }
4650
4330
  }
4651
4331
  }
4652
4332
  }
@@ -4654,49 +4334,67 @@ var __webpack_exports__ = {};
4654
4334
  const { prompt, temperature, system_prompt } = params;
4655
4335
  let lastError = null;
4656
4336
  try {
4657
- const response = await fetch(this.deepseekConfig.baseUrl, {
4658
- method: 'POST',
4337
+ const controller = new AbortController();
4338
+ const timeoutId = setTimeout(()=>controller.abort(), 300000);
4339
+ const response = await fetch(this.kimiConfig.baseUrl, {
4340
+ method: "POST",
4659
4341
  headers: {
4660
- 'Content-Type': 'application/json',
4661
- Authorization: `Bearer ${this.deepseekConfig.apiKey}`
4342
+ "Content-Type": "application/json",
4343
+ Authorization: `Bearer ${this.kimiConfig.apiKey}`
4662
4344
  },
4663
4345
  body: JSON.stringify({
4664
- model: this.deepseekConfig.model,
4346
+ model: this.kimiConfig.model,
4665
4347
  messages: [
4666
4348
  ...system_prompt ? [
4667
4349
  {
4668
- role: 'system',
4350
+ role: "system",
4669
4351
  content: system_prompt
4670
4352
  }
4671
4353
  ] : [],
4672
4354
  {
4673
- role: 'user',
4355
+ role: "user",
4674
4356
  content: prompt
4675
4357
  }
4676
4358
  ],
4677
4359
  max_tokens: 4096,
4678
4360
  temperature: temperature || 0.7,
4679
4361
  stream: true
4680
- })
4362
+ }),
4363
+ signal: controller.signal
4681
4364
  });
4365
+ clearTimeout(timeoutId);
4682
4366
  if (!response.ok) {
4683
4367
  const errorText = await response.text();
4684
- throw new Error(`DeepSeek API error: ${response.status} ${response.statusText} - ${errorText}`);
4368
+ throw new Error(`Kimi API error: ${response.status} ${response.statusText} - ${errorText}`);
4685
4369
  }
4686
- if (!response.body) throw new Error('Response body is null');
4370
+ if (!response.body) throw new Error("Response body is null");
4687
4371
  const reader = response.body.getReader();
4688
4372
  const decoder = new TextDecoder();
4689
4373
  return {
4690
4374
  async *[Symbol.asyncIterator] () {
4375
+ let chunkTimeout = null;
4691
4376
  try {
4692
4377
  while(true){
4693
- const { done, value } = await reader.read();
4378
+ const readPromise = reader.read();
4379
+ const timeoutPromise = new Promise((_, reject)=>{
4380
+ chunkTimeout = setTimeout(()=>{
4381
+ reject(new Error("Chunk read timeout"));
4382
+ }, 30000);
4383
+ });
4384
+ const { done, value } = await Promise.race([
4385
+ readPromise,
4386
+ timeoutPromise
4387
+ ]);
4388
+ if (chunkTimeout) {
4389
+ clearTimeout(chunkTimeout);
4390
+ chunkTimeout = null;
4391
+ }
4694
4392
  if (done) break;
4695
4393
  const chunk = decoder.decode(value);
4696
- const lines = chunk.split('\n').filter((line)=>'' !== line.trim());
4697
- for (const line of lines)if (line.startsWith('data: ')) {
4394
+ const lines = chunk.split("\n").filter((line)=>"" !== line.trim());
4395
+ for (const line of lines)if (line.startsWith("data: ")) {
4698
4396
  const data = line.slice(6);
4699
- if ('[DONE]' === data) return;
4397
+ if ("[DONE]" === data) return;
4700
4398
  try {
4701
4399
  const parsed = JSON.parse(data);
4702
4400
  const content = parsed.choices?.[0]?.delta?.content;
@@ -4704,7 +4402,11 @@ var __webpack_exports__ = {};
4704
4402
  } catch (e) {}
4705
4403
  }
4706
4404
  }
4405
+ } catch (error) {
4406
+ if (chunkTimeout) clearTimeout(chunkTimeout);
4407
+ return;
4707
4408
  } finally{
4409
+ if (chunkTimeout) clearTimeout(chunkTimeout);
4708
4410
  reader.releaseLock();
4709
4411
  }
4710
4412
  }
@@ -4712,49 +4414,67 @@ var __webpack_exports__ = {};
4712
4414
  } catch (error) {
4713
4415
  lastError = error;
4714
4416
  try {
4715
- const response = await fetch(this.qwenConfig.baseUrl, {
4716
- method: 'POST',
4417
+ const controller = new AbortController();
4418
+ const timeoutId = setTimeout(()=>controller.abort(), 300000);
4419
+ const response = await fetch(this.deepseekConfig.baseUrl, {
4420
+ method: "POST",
4717
4421
  headers: {
4718
- 'Content-Type': 'application/json',
4719
- Authorization: `Bearer ${this.qwenConfig.apiKey}`
4422
+ "Content-Type": "application/json",
4423
+ Authorization: `Bearer ${this.deepseekConfig.apiKey}`
4720
4424
  },
4721
4425
  body: JSON.stringify({
4722
- model: this.qwenConfig.model,
4426
+ model: this.deepseekConfig.model,
4723
4427
  messages: [
4724
4428
  ...system_prompt ? [
4725
4429
  {
4726
- role: 'system',
4430
+ role: "system",
4727
4431
  content: system_prompt
4728
4432
  }
4729
4433
  ] : [],
4730
4434
  {
4731
- role: 'user',
4435
+ role: "user",
4732
4436
  content: prompt
4733
4437
  }
4734
4438
  ],
4735
4439
  max_tokens: 4096,
4736
4440
  temperature: temperature || 0.7,
4737
4441
  stream: true
4738
- })
4442
+ }),
4443
+ signal: controller.signal
4739
4444
  });
4445
+ clearTimeout(timeoutId);
4740
4446
  if (!response.ok) {
4741
4447
  const errorText = await response.text();
4742
- throw new Error(`Qwen API error: ${response.status} ${response.statusText} - ${errorText}`);
4448
+ throw new Error(`DeepSeek API error: ${response.status} ${response.statusText} - ${errorText}`);
4743
4449
  }
4744
- if (!response.body) throw new Error('Response body is null');
4450
+ if (!response.body) throw new Error("Response body is null");
4745
4451
  const reader = response.body.getReader();
4746
4452
  const decoder = new TextDecoder();
4747
4453
  return {
4748
4454
  async *[Symbol.asyncIterator] () {
4455
+ let chunkTimeout = null;
4749
4456
  try {
4750
4457
  while(true){
4751
- const { done, value } = await reader.read();
4458
+ const readPromise = reader.read();
4459
+ const timeoutPromise = new Promise((_, reject)=>{
4460
+ chunkTimeout = setTimeout(()=>{
4461
+ reject(new Error("Chunk read timeout"));
4462
+ }, 30000);
4463
+ });
4464
+ const { done, value } = await Promise.race([
4465
+ readPromise,
4466
+ timeoutPromise
4467
+ ]);
4468
+ if (chunkTimeout) {
4469
+ clearTimeout(chunkTimeout);
4470
+ chunkTimeout = null;
4471
+ }
4752
4472
  if (done) break;
4753
4473
  const chunk = decoder.decode(value);
4754
- const lines = chunk.split('\n').filter((line)=>'' !== line.trim());
4755
- for (const line of lines)if (line.startsWith('data: ')) {
4474
+ const lines = chunk.split("\n").filter((line)=>"" !== line.trim());
4475
+ for (const line of lines)if (line.startsWith("data: ")) {
4756
4476
  const data = line.slice(6);
4757
- if ('[DONE]' === data) return;
4477
+ if ("[DONE]" === data) return;
4758
4478
  try {
4759
4479
  const parsed = JSON.parse(data);
4760
4480
  const content = parsed.choices?.[0]?.delta?.content;
@@ -4762,13 +4482,97 @@ var __webpack_exports__ = {};
4762
4482
  } catch (e) {}
4763
4483
  }
4764
4484
  }
4485
+ } catch (error) {
4486
+ if (chunkTimeout) clearTimeout(chunkTimeout);
4487
+ return;
4765
4488
  } finally{
4489
+ if (chunkTimeout) clearTimeout(chunkTimeout);
4766
4490
  reader.releaseLock();
4767
4491
  }
4768
4492
  }
4769
4493
  };
4770
- } catch (qwenError) {
4771
- throw lastError;
4494
+ } catch (deepseekError) {
4495
+ try {
4496
+ const controller = new AbortController();
4497
+ const timeoutId = setTimeout(()=>controller.abort(), 300000);
4498
+ const response = await fetch(this.qwenConfig.baseUrl, {
4499
+ method: "POST",
4500
+ headers: {
4501
+ "Content-Type": "application/json",
4502
+ Authorization: `Bearer ${this.qwenConfig.apiKey}`
4503
+ },
4504
+ body: JSON.stringify({
4505
+ model: this.qwenConfig.model,
4506
+ messages: [
4507
+ ...system_prompt ? [
4508
+ {
4509
+ role: "system",
4510
+ content: system_prompt
4511
+ }
4512
+ ] : [],
4513
+ {
4514
+ role: "user",
4515
+ content: prompt
4516
+ }
4517
+ ],
4518
+ max_tokens: 4096,
4519
+ temperature: temperature || 0.7,
4520
+ stream: true
4521
+ }),
4522
+ signal: controller.signal
4523
+ });
4524
+ clearTimeout(timeoutId);
4525
+ if (!response.ok) {
4526
+ const errorText = await response.text();
4527
+ throw new Error(`Qwen API error: ${response.status} ${response.statusText} - ${errorText}`);
4528
+ }
4529
+ if (!response.body) throw new Error("Response body is null");
4530
+ const reader = response.body.getReader();
4531
+ const decoder = new TextDecoder();
4532
+ return {
4533
+ async *[Symbol.asyncIterator] () {
4534
+ let chunkTimeout = null;
4535
+ try {
4536
+ while(true){
4537
+ const readPromise = reader.read();
4538
+ const timeoutPromise = new Promise((_, reject)=>{
4539
+ chunkTimeout = setTimeout(()=>{
4540
+ reject(new Error("Chunk read timeout"));
4541
+ }, 30000);
4542
+ });
4543
+ const { done, value } = await Promise.race([
4544
+ readPromise,
4545
+ timeoutPromise
4546
+ ]);
4547
+ if (chunkTimeout) {
4548
+ clearTimeout(chunkTimeout);
4549
+ chunkTimeout = null;
4550
+ }
4551
+ if (done) break;
4552
+ const chunk = decoder.decode(value);
4553
+ const lines = chunk.split("\n").filter((line)=>"" !== line.trim());
4554
+ for (const line of lines)if (line.startsWith("data: ")) {
4555
+ const data = line.slice(6);
4556
+ if ("[DONE]" === data) return;
4557
+ try {
4558
+ const parsed = JSON.parse(data);
4559
+ const content = parsed.choices?.[0]?.delta?.content;
4560
+ if (content) yield content;
4561
+ } catch (e) {}
4562
+ }
4563
+ }
4564
+ } catch (error) {
4565
+ if (chunkTimeout) clearTimeout(chunkTimeout);
4566
+ return;
4567
+ } finally{
4568
+ if (chunkTimeout) clearTimeout(chunkTimeout);
4569
+ reader.releaseLock();
4570
+ }
4571
+ }
4572
+ };
4573
+ } catch (qwenError) {
4574
+ throw lastError;
4575
+ }
4772
4576
  }
4773
4577
  }
4774
4578
  }
@@ -4777,9 +4581,9 @@ var __webpack_exports__ = {};
4777
4581
  let lastError = null;
4778
4582
  try {
4779
4583
  const response = await fetch(this.glm4vConfig.baseUrl, {
4780
- method: 'POST',
4584
+ method: "POST",
4781
4585
  headers: {
4782
- 'Content-Type': 'application/json',
4586
+ "Content-Type": "application/json",
4783
4587
  Authorization: `Bearer ${this.glm4vConfig.apiKey}`
4784
4588
  },
4785
4589
  body: JSON.stringify({
@@ -4787,21 +4591,21 @@ var __webpack_exports__ = {};
4787
4591
  messages: [
4788
4592
  ...system_prompt ? [
4789
4593
  {
4790
- role: 'system',
4594
+ role: "system",
4791
4595
  content: system_prompt
4792
4596
  }
4793
4597
  ] : [],
4794
4598
  {
4795
- role: 'user',
4599
+ role: "user",
4796
4600
  content: [
4797
4601
  {
4798
- type: 'image_url',
4602
+ type: "image_url",
4799
4603
  image_url: {
4800
4604
  url: image_base64
4801
4605
  }
4802
4606
  },
4803
4607
  {
4804
- type: 'text',
4608
+ type: "text",
4805
4609
  text: prompt
4806
4610
  }
4807
4611
  ]
@@ -4815,15 +4619,15 @@ var __webpack_exports__ = {};
4815
4619
  throw new Error(`GLM-4V API error: ${response.status} ${response.statusText} - ${errorText}`);
4816
4620
  }
4817
4621
  const data = await response.json();
4818
- if (!data.choices || 0 === data.choices.length) throw new Error('No choices returned from GLM-4V API');
4622
+ if (!data.choices || 0 === data.choices.length) throw new Error("No choices returned from GLM-4V API");
4819
4623
  return data.choices[0].message.content;
4820
4624
  } catch (error) {
4821
4625
  lastError = error;
4822
4626
  try {
4823
4627
  const response = await fetch(this.kimiConfig.baseUrl, {
4824
- method: 'POST',
4628
+ method: "POST",
4825
4629
  headers: {
4826
- 'Content-Type': 'application/json',
4630
+ "Content-Type": "application/json",
4827
4631
  Authorization: `Bearer ${this.kimiConfig.apiKey}`
4828
4632
  },
4829
4633
  body: JSON.stringify({
@@ -4831,26 +4635,26 @@ var __webpack_exports__ = {};
4831
4635
  messages: [
4832
4636
  ...system_prompt ? [
4833
4637
  {
4834
- role: 'system',
4638
+ role: "system",
4835
4639
  content: [
4836
4640
  {
4837
- type: 'text',
4641
+ type: "text",
4838
4642
  text: system_prompt
4839
4643
  }
4840
4644
  ]
4841
4645
  }
4842
4646
  ] : [],
4843
4647
  {
4844
- role: 'user',
4648
+ role: "user",
4845
4649
  content: [
4846
4650
  {
4847
- type: 'image_url',
4651
+ type: "image_url",
4848
4652
  image_url: {
4849
4653
  url: image_base64
4850
4654
  }
4851
4655
  },
4852
4656
  {
4853
- type: 'text',
4657
+ type: "text",
4854
4658
  text: prompt
4855
4659
  }
4856
4660
  ]
@@ -4864,7 +4668,7 @@ var __webpack_exports__ = {};
4864
4668
  throw new Error(`Kimi Vision API error: ${response.status} ${response.statusText} - ${errorText}`);
4865
4669
  }
4866
4670
  const data = await response.json();
4867
- if (!data.choices || 0 === data.choices.length) throw new Error('No choices returned from Kimi Vision API');
4671
+ if (!data.choices || 0 === data.choices.length) throw new Error("No choices returned from Kimi Vision API");
4868
4672
  return data.choices[0].message.content;
4869
4673
  } catch (kimiError) {
4870
4674
  throw lastError;
@@ -4873,50 +4677,25 @@ var __webpack_exports__ = {};
4873
4677
  }
4874
4678
  }
4875
4679
  const openAIService = new OpenAIService();
4876
- const intelligentRequirementAnalysisPrompt = `\u{4F60}\u{662F}\u{4E00}\u{4F4D}\u{4E13}\u{4E1A}\u{7684}\u{8F6F}\u{4EF6}\u{9700}\u{6C42}\u{5206}\u{6790}\u{5E08}\u{FF0C}\u{64C5}\u{957F}\u{5FEB}\u{901F}\u{8BC6}\u{522B}\u{9700}\u{6C42}\u{7C7B}\u{578B}\u{5E76}\u{8FDB}\u{884C}\u{7CBE}\u{786E}\u{7684}\u{529F}\u{80FD}\u{70B9}\u{5206}\u{6790}\u{3002}
4877
-
4878
- ## \u{4EFB}\u{52A1}\u{8981}\u{6C42}
4879
- - \u{5FEB}\u{901F}\u{8BC6}\u{522B}\u{9700}\u{6C42}\u{7684}\u{4E3B}\u{8981}\u{7C7B}\u{578B}\u{FF08}\u{63A5}\u{53E3}\u{3001}PC\u{9875}\u{9762}\u{3001}APP\u{3001}SDK\u{96C6}\u{6210}\u{3001}\u{6DF7}\u{5408}\u{7C7B}\u{578B}\u{FF09}
4880
- - \u{6839}\u{636E}\u{9700}\u{6C42}\u{7C7B}\u{578B}\u{FF0C}\u{7CBE}\u{786E}\u{63D0}\u{53D6}2-5\u{4E2A}\u{6838}\u{5FC3}\u{529F}\u{80FD}\u{70B9}
4881
- - \u{907F}\u{514D}\u{8FC7}\u{5EA6}\u{62C6}\u{5206}\u{FF0C}\u{786E}\u{4FDD}\u{6BCF}\u{4E2A}\u{529F}\u{80FD}\u{70B9}\u{90FD}\u{5177}\u{6709}\u{72EC}\u{7ACB}\u{7684}\u{4E1A}\u{52A1}\u{4EF7}\u{503C}
4882
- - \u{63A8}\u{8350}\u{6700}\u{5408}\u{9002}\u{7684}\u{6280}\u{672F}\u{6A21}\u{677F}
4883
-
4884
- ## \u{8F93}\u{5165}\u{5185}\u{5BB9}
4680
+ const intelligentRequirementAnalysisPrompt = `\u{4F60}\u{662F}\u{8F6F}\u{4EF6}\u{9700}\u{6C42}\u{5206}\u{6790}\u{5E08}\u{FF0C}\u{5FEB}\u{901F}\u{8BC6}\u{522B}\u{9700}\u{6C42}\u{7C7B}\u{578B}\u{5E76}\u{7CBE}\u{786E}\u{63D0}\u{53D6}2-5\u{4E2A}\u{6838}\u{5FC3}\u{529F}\u{80FD}\u{70B9}\u{3002}
4885
4681
 
4682
+ **\u{8F93}\u{5165}\u{5185}\u{5BB9}**:
4886
4683
  {inputContent}
4887
4684
 
4888
- ## \u{9700}\u{6C42}\u{7C7B}\u{578B}\u{8BC6}\u{522B}\u{6807}\u{51C6}
4889
-
4890
- **\u{63A5}\u{53E3}\u{7C7B}\u{578B}**\u{FF1A}
4891
- - \u{5173}\u{952E}\u{8BCD}\u{FF1A}API\u{3001}\u{63A5}\u{53E3}\u{3001}REST\u{3001}GraphQL\u{3001}\u{5FAE}\u{670D}\u{52A1}\u{3001}\u{540E}\u{7AEF}\u{670D}\u{52A1}\u{3001}\u{6570}\u{636E}\u{63A5}\u{53E3}\u{3001}\u{670D}\u{52A1}\u{7AEF}
4892
- - \u{7279}\u{5F81}\u{FF1A}\u{4E3B}\u{8981}\u{63CF}\u{8FF0}\u{6570}\u{636E}\u{4EA4}\u{4E92}\u{3001}\u{4E1A}\u{52A1}\u{903B}\u{8F91}\u{5904}\u{7406}\u{3001}\u{7CFB}\u{7EDF}\u{96C6}\u{6210}\u{3001}\u{6570}\u{636E}\u{5E93}\u{64CD}\u{4F5C}
4893
- - \u{8F93}\u{51FA}\u{FF1A}\u{6570}\u{636E}\u{7ED3}\u{6784}\u{3001}\u{63A5}\u{53E3}\u{89C4}\u{8303}\u{3001}\u{4E1A}\u{52A1}\u{903B}\u{8F91}
4894
-
4895
- **PC\u{9875}\u{9762}\u{7C7B}\u{578B}**\u{FF1A}
4896
- - \u{5173}\u{952E}\u{8BCD}\u{FF1A}\u{9875}\u{9762}\u{3001}\u{754C}\u{9762}\u{3001}UI\u{3001}\u{7F51}\u{9875}\u{3001}\u{6D4F}\u{89C8}\u{5668}\u{3001}\u{524D}\u{7AEF}\u{3001}\u{7BA1}\u{7406}\u{540E}\u{53F0}\u{3001}Web\u{5E94}\u{7528}
4897
- - \u{7279}\u{5F81}\u{FF1A}\u{4E3B}\u{8981}\u{63CF}\u{8FF0}\u{7528}\u{6237}\u{754C}\u{9762}\u{3001}\u{8868}\u{5355}\u{64CD}\u{4F5C}\u{3001}\u{6570}\u{636E}\u{5C55}\u{793A}\u{3001}\u{7528}\u{6237}\u{4EA4}\u{4E92}
4898
- - \u{8F93}\u{51FA}\u{FF1A}\u{9875}\u{9762}\u{5E03}\u{5C40}\u{3001}\u{4EA4}\u{4E92}\u{903B}\u{8F91}\u{3001}\u{6837}\u{5F0F}\u{8BBE}\u{8BA1}
4899
-
4900
- **APP\u{7C7B}\u{578B}**\u{FF1A}
4901
- - \u{5173}\u{952E}\u{8BCD}\u{FF1A}App\u{3001}\u{79FB}\u{52A8}\u{5E94}\u{7528}\u{3001}iOS\u{3001}Android\u{3001}\u{79FB}\u{52A8}\u{7AEF}\u{3001}\u{5C0F}\u{7A0B}\u{5E8F}\u{3001}\u{539F}\u{751F}\u{5E94}\u{7528}
4902
- - \u{7279}\u{5F81}\u{FF1A}\u{4E3B}\u{8981}\u{63CF}\u{8FF0}\u{79FB}\u{52A8}\u{7AEF}\u{529F}\u{80FD}\u{3001}\u{624B}\u{52BF}\u{64CD}\u{4F5C}\u{3001}\u{79FB}\u{52A8}\u{8BBE}\u{5907}\u{7279}\u{6027}\u{3001}\u{63A8}\u{9001}\u{901A}\u{77E5}
4903
- - \u{8F93}\u{51FA}\u{FF1A}\u{79FB}\u{52A8}\u{7AEF}\u{754C}\u{9762}\u{3001}\u{624B}\u{52BF}\u{4EA4}\u{4E92}\u{3001}\u{8BBE}\u{5907}\u{9002}\u{914D}
4685
+ ## \u{9700}\u{6C42}\u{7C7B}\u{578B}\u{8BC6}\u{522B}
4904
4686
 
4905
- **SDK\u{96C6}\u{6210}\u{7C7B}\u{578B}**\u{FF1A}
4906
- - \u{5173}\u{952E}\u{8BCD}\u{FF1A}SDK\u{3001}\u{7B2C}\u{4E09}\u{65B9}\u{3001}\u{96C6}\u{6210}\u{3001}\u{5BF9}\u{63A5}\u{3001}\u{652F}\u{4ED8}\u{3001}\u{5730}\u{56FE}\u{3001}\u{63A8}\u{9001}\u{3001}\u{7EDF}\u{8BA1}\u{3001}\u{5F00}\u{653E}\u{5E73}\u{53F0}
4907
- - \u{7279}\u{5F81}\u{FF1A}\u{4E3B}\u{8981}\u{63CF}\u{8FF0}\u{4E0E}\u{5916}\u{90E8}\u{670D}\u{52A1}\u{7684}\u{5BF9}\u{63A5}\u{3001}\u{914D}\u{7F6E}\u{53C2}\u{6570}\u{3001}\u{56DE}\u{8C03}\u{5904}\u{7406}
4908
- - \u{8F93}\u{51FA}\u{FF1A}\u{96C6}\u{6210}\u{6D41}\u{7A0B}\u{3001}\u{914D}\u{7F6E}\u{8BF4}\u{660E}\u{3001}\u{8C03}\u{7528}\u{793A}\u{4F8B}
4909
-
4910
- **\u{6DF7}\u{5408}\u{7C7B}\u{578B}**\u{FF1A}
4911
- - \u{540C}\u{65F6}\u{5305}\u{542B}\u{4E0A}\u{8FF0}\u{591A}\u{79CD}\u{7C7B}\u{578B}\u{7684}\u{7279}\u{5F81}
4912
- - \u{9700}\u{8981}\u{751F}\u{6210}\u{591A}\u{79CD}\u{6280}\u{672F}\u{6A21}\u{677F}
4687
+ **\u{63A5}\u{53E3}**: API\u{3001}REST\u{3001}GraphQL\u{3001}\u{5FAE}\u{670D}\u{52A1}\u{3001}\u{540E}\u{7AEF}\u{670D}\u{52A1} \u{2192} \u{6570}\u{636E}\u{4EA4}\u{4E92}\u{3001}\u{4E1A}\u{52A1}\u{903B}\u{8F91}\u{3001}\u{7CFB}\u{7EDF}\u{96C6}\u{6210}
4688
+ **PC\u{9875}\u{9762}**: \u{9875}\u{9762}\u{3001}UI\u{3001}\u{7F51}\u{9875}\u{3001}\u{524D}\u{7AEF}\u{3001}\u{7BA1}\u{7406}\u{540E}\u{53F0} \u{2192} \u{7528}\u{6237}\u{754C}\u{9762}\u{3001}\u{8868}\u{5355}\u{64CD}\u{4F5C}\u{3001}\u{6570}\u{636E}\u{5C55}\u{793A}
4689
+ **APP**: \u{79FB}\u{52A8}\u{5E94}\u{7528}\u{3001}iOS\u{3001}Android\u{3001}\u{5C0F}\u{7A0B}\u{5E8F} \u{2192} \u{79FB}\u{52A8}\u{7AEF}\u{529F}\u{80FD}\u{3001}\u{624B}\u{52BF}\u{64CD}\u{4F5C}\u{3001}\u{8BBE}\u{5907}\u{7279}\u{6027}
4690
+ **SDK\u{96C6}\u{6210}**: \u{7B2C}\u{4E09}\u{65B9}\u{3001}\u{5BF9}\u{63A5}\u{3001}\u{652F}\u{4ED8}\u{3001}\u{5730}\u{56FE}\u{3001}\u{63A8}\u{9001} \u{2192} \u{5916}\u{90E8}\u{670D}\u{52A1}\u{5BF9}\u{63A5}\u{3001}\u{914D}\u{7F6E}\u{53C2}\u{6570}\u{3001}\u{56DE}\u{8C03}\u{5904}\u{7406}
4691
+ **\u{6DF7}\u{5408}**: \u{5305}\u{542B}\u{591A}\u{79CD}\u{7C7B}\u{578B}\u{7279}\u{5F81}
4913
4692
 
4914
4693
  ## \u{529F}\u{80FD}\u{70B9}\u{63D0}\u{53D6}\u{539F}\u{5219}
4915
4694
 
4916
- 1. **\u{7CBE}\u{786E}\u{6027}\u{539F}\u{5219}**\u{FF1A}\u{53EA}\u{63D0}\u{53D6}\u{771F}\u{6B63}\u{6838}\u{5FC3}\u{7684}\u{3001}\u{72EC}\u{7ACB}\u{7684}\u{529F}\u{80FD}\u{70B9}\u{FF08}\u{901A}\u{5E38}2-5\u{4E2A}\u{FF09}
4917
- 2. **\u{4E1A}\u{52A1}\u{4EF7}\u{503C}\u{539F}\u{5219}**\u{FF1A}\u{6BCF}\u{4E2A}\u{529F}\u{80FD}\u{70B9}\u{90FD}\u{5E94}\u{8BE5}\u{5177}\u{6709}\u{660E}\u{786E}\u{7684}\u{4E1A}\u{52A1}\u{4EF7}\u{503C}
4918
- 3. **\u{6280}\u{672F}\u{5339}\u{914D}\u{539F}\u{5219}**\u{FF1A}\u{529F}\u{80FD}\u{70B9}\u{5E94}\u{8BE5}\u{4E0E}\u{8BC6}\u{522B}\u{51FA}\u{7684}\u{9700}\u{6C42}\u{7C7B}\u{578B}\u{9AD8}\u{5EA6}\u{5339}\u{914D}
4919
- 4. **\u{907F}\u{514D}\u{8FC7}\u{5EA6}\u{62C6}\u{5206}**\u{FF1A}\u{4E0D}\u{8981}\u{5C06}\u{4E00}\u{4E2A}\u{5B8C}\u{6574}\u{7684}\u{529F}\u{80FD}\u{62C6}\u{5206}\u{6210}\u{591A}\u{4E2A}\u{5C0F}\u{529F}\u{80FD}\u{70B9}
4695
+ 1. \u{7CBE}\u{786E}\u{6027}\u{FF1A}\u{53EA}\u{63D0}\u{53D6}\u{6838}\u{5FC3}\u{72EC}\u{7ACB}\u{529F}\u{80FD}\u{70B9}\u{FF08}2-5\u{4E2A}\u{FF09}
4696
+ 2. \u{4E1A}\u{52A1}\u{4EF7}\u{503C}\u{FF1A}\u{6BCF}\u{4E2A}\u{529F}\u{80FD}\u{70B9}\u{6709}\u{660E}\u{786E}\u{4E1A}\u{52A1}\u{4EF7}\u{503C}
4697
+ 3. \u{6280}\u{672F}\u{5339}\u{914D}\u{FF1A}\u{529F}\u{80FD}\u{70B9}\u{4E0E}\u{9700}\u{6C42}\u{7C7B}\u{578B}\u{9AD8}\u{5EA6}\u{5339}\u{914D}
4698
+ 4. \u{907F}\u{514D}\u{8FC7}\u{5EA6}\u{62C6}\u{5206}\u{FF1A}\u{4FDD}\u{6301}\u{529F}\u{80FD}\u{5B8C}\u{6574}\u{6027}
4920
4699
 
4921
4700
  ## \u{8F93}\u{51FA}\u{683C}\u{5F0F}
4922
4701
 
@@ -4947,21 +4726,9 @@ var __webpack_exports__ = {};
4947
4726
  }
4948
4727
  \`\`\`
4949
4728
 
4950
- ## \u{5206}\u{6790}\u{6B65}\u{9AA4}
4951
-
4952
- 1. **\u{5FEB}\u{901F}\u{7C7B}\u{578B}\u{8BC6}\u{522B}**\u{FF1A}\u{6839}\u{636E}\u{5173}\u{952E}\u{8BCD}\u{548C}\u{7279}\u{5F81}\u{5FEB}\u{901F}\u{5224}\u{65AD}\u{9700}\u{6C42}\u{7684}\u{4E3B}\u{8981}\u{7C7B}\u{578B}
4953
- 2. **\u{6838}\u{5FC3}\u{529F}\u{80FD}\u{63D0}\u{53D6}**\u{FF1A}\u{63D0}\u{53D6}2-5\u{4E2A}\u{771F}\u{6B63}\u{6838}\u{5FC3}\u{7684}\u{529F}\u{80FD}\u{70B9}\u{FF0C}\u{907F}\u{514D}\u{8FC7}\u{5EA6}\u{62C6}\u{5206}
4954
- 3. **\u{6A21}\u{677F}\u{63A8}\u{8350}**\u{FF1A}\u{6839}\u{636E}\u{9700}\u{6C42}\u{7C7B}\u{578B}\u{63A8}\u{8350}\u{6700}\u{5408}\u{9002}\u{7684}\u{6280}\u{672F}\u{6A21}\u{677F}
4955
- 4. **\u{4F18}\u{5316}\u{5EFA}\u{8BAE}**\u{FF1A}\u{63D0}\u{4F9B}\u{529F}\u{80FD}\u{70B9}\u{4F18}\u{5316}\u{5EFA}\u{8BAE}\u{FF0C}\u{786E}\u{4FDD}\u{7CBE}\u{786E}\u{6027}
4956
4729
 
4957
- ## \u{91CD}\u{8981}\u{63D0}\u{9192}
4958
4730
 
4959
- - **\u{907F}\u{514D}\u{8FC7}\u{5EA6}\u{62C6}\u{5206}**\u{FF1A}\u{4E00}\u{4E2A}\u{5B8C}\u{6574}\u{7684}\u{4E1A}\u{52A1}\u{529F}\u{80FD}\u{4E0D}\u{8981}\u{62C6}\u{5206}\u{6210}\u{591A}\u{4E2A}\u{5C0F}\u{529F}\u{80FD}\u{70B9}
4960
- - **\u{7CBE}\u{786E}\u{5339}\u{914D}**\u{FF1A}\u{786E}\u{4FDD}\u{529F}\u{80FD}\u{70B9}\u{4E0E}\u{9700}\u{6C42}\u{7C7B}\u{578B}\u{9AD8}\u{5EA6}\u{5339}\u{914D}
4961
- - **\u{6570}\u{91CF}\u{63A7}\u{5236}**\u{FF1A}\u{901A}\u{5E38}\u{4E00}\u{4E2A}\u{9700}\u{6C42}\u{5E94}\u{8BE5}\u{53EA}\u{6709}2-5\u{4E2A}\u{6838}\u{5FC3}\u{529F}\u{80FD}\u{70B9}
4962
- - **\u{6A21}\u{677F}\u{5BFC}\u{5411}**\u{FF1A}\u{4F18}\u{5148}\u{8003}\u{8651}\u{80FD}\u{591F}\u{751F}\u{6210}\u{5355}\u{4E00}\u{6280}\u{672F}\u{6A21}\u{677F}\u{7684}\u{529F}\u{80FD}\u{70B9}\u{7EC4}\u{5408}
4963
-
4964
- \u{8BF7}\u{57FA}\u{4E8E}\u{4EE5}\u{4E0A}\u{6807}\u{51C6}\u{8FDB}\u{884C}\u{667A}\u{80FD}\u{9700}\u{6C42}\u{5206}\u{6790}\u{FF1A}`;
4731
+ **\u{8981}\u{6C42}**: \u{907F}\u{514D}\u{8FC7}\u{5EA6}\u{62C6}\u{5206}\u{FF0C}\u{7CBE}\u{786E}\u{5339}\u{914D}\u{9700}\u{6C42}\u{7C7B}\u{578B}\u{FF0C}\u{63A7}\u{5236}2-5\u{4E2A}\u{6838}\u{5FC3}\u{529F}\u{80FD}\u{70B9}\u{FF0C}\u{4F18}\u{5148}\u{5355}\u{4E00}\u{6280}\u{672F}\u{6A21}\u{677F}\u{3002}`;
4965
4732
  class IntelligentAnalyzer {
4966
4733
  async analyzeRequirements(inputContent, projectInfo, customPrompt) {
4967
4734
  try {
@@ -5077,20 +4844,13 @@ var __webpack_exports__ = {};
5077
4844
  });
5078
4845
  }
5079
4846
  }
5080
- const requirementAnalysisPrompt = `\u{4F60}\u{662F}\u{4E00}\u{4F4D}\u{4E13}\u{4E1A}\u{7684}\u{8F6F}\u{4EF6}\u{5DE5}\u{7A0B}\u{9700}\u{6C42}\u{5206}\u{6790}\u{4E13}\u{5BB6}\u{3002}\u{8BF7}\u{57FA}\u{4E8E}\u{7528}\u{6237}\u{63D0}\u{4F9B}\u{7684}\u{8F93}\u{5165}\u{5185}\u{5BB9}\u{FF0C}\u{751F}\u{6210}\u{4E00}\u{4EFD}\u{5B8C}\u{6574}\u{3001}\u{8BE6}\u{7EC6}\u{7684}\u{6807}\u{51C6}\u{5316}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}\u{3002}
5081
-
5082
- ## \u{4EFB}\u{52A1}\u{8981}\u{6C42}
5083
- - \u{5FC5}\u{987B}\u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{7684}Markdown\u{683C}\u{5F0F}\u{9700}\u{6C42}\u{6587}\u{6863}
5084
- - \u{4E0D}\u{8981}\u{53EA}\u{7ED9}\u{51FA}\u{603B}\u{7ED3}\u{FF0C}\u{8981}\u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{7684}\u{6587}\u{6863}\u{5185}\u{5BB9}
5085
- - \u{6BCF}\u{4E2A}\u{7AE0}\u{8282}\u{90FD}\u{8981}\u{6709}\u{8BE6}\u{7EC6}\u{7684}\u{5185}\u{5BB9}\u{FF0C}\u{4E0D}\u{80FD}\u{7701}\u{7565}
5086
- - \u{6587}\u{6863}\u{957F}\u{5EA6}\u{5E94}\u{8BE5}\u{5728}3000\u{5B57}\u{4EE5}\u{4E0A}
4847
+ const external_crypto_namespaceObject = require("crypto");
4848
+ var external_crypto_default = /*#__PURE__*/ __webpack_require__.n(external_crypto_namespaceObject);
4849
+ const requirementAnalysisPrompt = `\u{4F60}\u{662F}\u{8F6F}\u{4EF6}\u{5DE5}\u{7A0B}\u{9700}\u{6C42}\u{5206}\u{6790}\u{4E13}\u{5BB6}\u{3002}\u{57FA}\u{4E8E}\u{8F93}\u{5165}\u{5185}\u{5BB9}\u{751F}\u{6210}\u{5B8C}\u{6574}\u{7684}\u{6807}\u{51C6}\u{5316}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}\u{FF08}Markdown\u{683C}\u{5F0F}\u{FF0C}3000\u{5B57}\u{4EE5}\u{4E0A}\u{FF09}\u{3002}
5087
4850
 
5088
- ## \u{8F93}\u{5165}\u{4FE1}\u{606F}
5089
- - **\u{529F}\u{80FD}\u{540D}\u{79F0}**: {featureName}
5090
- - **\u{4E1A}\u{52A1}\u{9886}\u{57DF}**: {businessDomain}
5091
- - **\u{751F}\u{6210}\u{65F6}\u{5E8F}\u{56FE}**: {generateSequenceDiagram}
4851
+ **\u{8F93}\u{5165}**: \u{529F}\u{80FD}\u{540D}\u{79F0}={featureName}, \u{4E1A}\u{52A1}\u{9886}\u{57DF}={businessDomain}, \u{751F}\u{6210}\u{65F6}\u{5E8F}\u{56FE}={generateSequenceDiagram}
5092
4852
 
5093
- ## \u{539F}\u{59CB}\u{9700}\u{6C42}\u{5185}\u{5BB9}
4853
+ **\u{539F}\u{59CB}\u{9700}\u{6C42}**:
5094
4854
  \`\`\`
5095
4855
  {inputContent}
5096
4856
  \`\`\`
@@ -5728,30 +5488,13 @@ Scenario Outline: UI\u{7EC4}\u{4EF6}\u{4EA4}\u{4E92}\u{5904}\u{7406}\u{6D41}\u{7
5728
5488
 
5729
5489
  ---
5730
5490
 
5731
- **\u{91CD}\u{8981}\u{63D0}\u{9192}**:
5732
- 1. \u{8BF7}\u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{7684}Markdown\u{6587}\u{6863}\u{FF0C}\u{4E0D}\u{8981}\u{7701}\u{7565}\u{4EFB}\u{4F55}\u{7AE0}\u{8282}
5733
- 2. \u{6BCF}\u{4E2A}\u{7AE0}\u{8282}\u{90FD}\u{8981}\u{6709}\u{5B9E}\u{8D28}\u{6027}\u{7684}\u{5185}\u{5BB9}\u{FF0C}\u{4E0D}\u{80FD}\u{53EA}\u{662F}\u{6A21}\u{677F}
5734
- 3. \u{6839}\u{636E}\u{8F93}\u{5165}\u{7684}\u{539F}\u{59CB}\u{5185}\u{5BB9}\u{8FDB}\u{884C}\u{5177}\u{4F53}\u{5206}\u{6790}\u{FF0C}\u{4E0D}\u{8981}\u{4F7F}\u{7528}\u{901A}\u{7528}\u{6A21}\u{677F}
5735
- 4. \u{6587}\u{6863}\u{603B}\u{957F}\u{5EA6}\u{5E94}\u{8BE5}\u{5728}3000\u{5B57}\u{4EE5}\u{4E0A}
5736
- 5. \u{8868}\u{683C}\u{4E2D}\u{7684}\u{5185}\u{5BB9}\u{8981}\u{586B}\u{5199}\u{5177}\u{4F53}\u{4FE1}\u{606F}\u{FF0C}\u{4E0D}\u{8981}\u{4FDD}\u{7559}\u{5360}\u{4F4D}\u{7B26}
5737
-
5738
- \u{73B0}\u{5728}\u{8BF7}\u{5F00}\u{59CB}\u{751F}\u{6210}\u{5B8C}\u{6574}\u{7684}\u{9700}\u{6C42}\u{6587}\u{6863}\u{FF1A}\`;
5491
+ **\u{8981}\u{6C42}**: \u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{6587}\u{6863}\u{FF0C}\u{6BCF}\u{7AE0}\u{8282}\u{6709}\u{5B9E}\u{8D28}\u{5185}\u{5BB9}\u{FF0C}\u{8868}\u{683C}\u{586B}\u{5199}\u{5177}\u{4F53}\u{4FE1}\u{606F}\u{FF0C}\u{57FA}\u{4E8E}\u{539F}\u{59CB}\u{5185}\u{5BB9}\u{5177}\u{4F53}\u{5206}\u{6790}\u{3002}\`;
5739
5492
  `;
5740
- const pcPageTemplatePrompt = `\u{4F60}\u{662F}\u{4E00}\u{4F4D}\u{4E13}\u{4E1A}\u{7684}\u{524D}\u{7AEF}\u{6280}\u{672F}\u{6587}\u{6863}\u{7F16}\u{5199}\u{4E13}\u{5BB6}\u{3002}\u{8BF7}\u{57FA}\u{4E8E}\u{7528}\u{6237}\u{63D0}\u{4F9B}\u{7684}\u{8F93}\u{5165}\u{5185}\u{5BB9}\u{FF0C}\u{751F}\u{6210}\u{4E00}\u{4EFD}\u{5B8C}\u{6574}\u{3001}\u{8BE6}\u{7EC6}\u{7684}\u{524D}\u{7AEF}PC\u{9875}\u{9762}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}\u{3002}
5741
-
5742
- ## \u{4EFB}\u{52A1}\u{8981}\u{6C42}
5743
- - \u{5FC5}\u{987B}\u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{7684}Markdown\u{683C}\u{5F0F}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}
5744
- - \u{4E0D}\u{8981}\u{53EA}\u{7ED9}\u{51FA}\u{603B}\u{7ED3}\u{FF0C}\u{8981}\u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{7684}\u{6587}\u{6863}\u{5185}\u{5BB9}
5745
- - \u{6BCF}\u{4E2A}\u{7AE0}\u{8282}\u{90FD}\u{8981}\u{6709}\u{8BE6}\u{7EC6}\u{7684}\u{5185}\u{5BB9}\u{FF0C}\u{4E0D}\u{80FD}\u{7701}\u{7565}
5746
- - \u{6587}\u{6863}\u{957F}\u{5EA6}\u{5E94}\u{8BE5}\u{5728}3000\u{5B57}\u{4EE5}\u{4E0A}
5747
- - \u{91CD}\u{70B9}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{5E03}\u{5C40}\u{3001}\u{6837}\u{5F0F}\u{3001}\u{4EA4}\u{4E92}\u{903B}\u{8F91}\u{7B49}\u{524D}\u{7AEF}\u{76F8}\u{5173}\u{5185}\u{5BB9}
5493
+ const pcPageTemplatePrompt = `\u{4F60}\u{662F}\u{524D}\u{7AEF}\u{6280}\u{672F}\u{6587}\u{6863}\u{4E13}\u{5BB6}\u{3002}\u{57FA}\u{4E8E}\u{8F93}\u{5165}\u{5185}\u{5BB9}\u{751F}\u{6210}\u{5B8C}\u{6574}\u{7684}PC\u{9875}\u{9762}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}\u{FF08}Markdown\u{683C}\u{5F0F}\u{FF0C}3000\u{5B57}\u{4EE5}\u{4E0A}\u{FF09}\u{3002}
5748
5494
 
5749
- ## \u{8F93}\u{5165}\u{4FE1}\u{606F}
5750
- - **\u{529F}\u{80FD}\u{540D}\u{79F0}**: {featureName}
5751
- - **\u{4E1A}\u{52A1}\u{9886}\u{57DF}**: {businessDomain}
5752
- - **\u{751F}\u{6210}\u{65F6}\u{5E8F}\u{56FE}**: {generateSequenceDiagram}
5495
+ **\u{8F93}\u{5165}**: \u{529F}\u{80FD}\u{540D}\u{79F0}={featureName}, \u{4E1A}\u{52A1}\u{9886}\u{57DF}={businessDomain}, \u{751F}\u{6210}\u{65F6}\u{5E8F}\u{56FE}={generateSequenceDiagram}
5753
5496
 
5754
- ## \u{539F}\u{59CB}\u{9700}\u{6C42}\u{5185}\u{5BB9}
5497
+ **\u{539F}\u{59CB}\u{9700}\u{6C42}**:
5755
5498
  \`\`\`
5756
5499
  {inputContent}
5757
5500
  \`\`\`
@@ -5796,13 +5539,7 @@ Scenario Outline: UI\u{7EC4}\u{4EF6}\u{4EA4}\u{4E92}\u{5904}\u{7406}\u{6D41}\u{7
5796
5539
  ### 3.2 \u{9875}\u{9762}\u{533A}\u{57DF}\u{5212}\u{5206}
5797
5540
  [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{5404}\u{4E2A}\u{529F}\u{80FD}\u{533A}\u{57DF}\u{7684}\u{5E03}\u{5C40}\u{FF0C}\u{4F7F}\u{7528}\u{6587}\u{5B57}\u{6216}ASCII\u{56FE}\u{793A}\u{63CF}\u{8FF0}\u{533A}\u{57DF}\u{4F4D}\u{7F6E}\u{5173}\u{7CFB}]
5798
5541
 
5799
- ### 3.3 \u{54CD}\u{5E94}\u{5F0F}\u{8BBE}\u{8BA1}\u{8981}\u{6C42}
5800
- [\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{5728}\u{4E0D}\u{540C}\u{5C4F}\u{5E55}\u{5C3A}\u{5BF8}\u{4E0B}\u{7684}\u{5E03}\u{5C40}\u{9002}\u{914D}\u{8981}\u{6C42}]
5801
-
5802
- ### 3.4 \u{5E03}\u{5C40}\u{7EC4}\u{4EF6}\u{89C4}\u{8303}
5803
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{4E2D}\u{4F7F}\u{7528}\u{7684}\u{5E03}\u{5C40}\u{7EC4}\u{4EF6}\u{FF0C}\u{5982}\u{6805}\u{683C}\u{7CFB}\u{7EDF}\u{3001}\u{5BB9}\u{5668}\u{3001}\u{9762}\u{677F}\u{7B49}\u{7684}\u{4F7F}\u{7528}\u{89C4}\u{8303}]
5804
-
5805
- ### 3.5 \u{9875}\u{9762}\u{6D41}\u{7EBF}\u{8BBE}\u{8BA1}
5542
+ ### 3.3 \u{9875}\u{9762}\u{6D41}\u{7EBF}\u{8BBE}\u{8BA1}
5806
5543
  [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{7528}\u{6237}\u{5728}\u{9875}\u{9762}\u{4E2D}\u{7684}\u{89C6}\u{89C9}\u{6D41}\u{7EBF}\u{548C}\u{64CD}\u{4F5C}\u{8DEF}\u{5F84}\u{8BBE}\u{8BA1}]
5807
5544
 
5808
5545
  ## 4. \u{6837}\u{5F0F}\u{89C4}\u{8303}\u{8BF4}\u{660E}
@@ -5810,21 +5547,10 @@ Scenario Outline: UI\u{7EC4}\u{4EF6}\u{4EA4}\u{4E92}\u{5904}\u{7406}\u{6D41}\u{7
5810
5547
  ### 4.1 \u{8272}\u{5F69}\u{89C4}\u{8303}
5811
5548
  [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{4F7F}\u{7528}\u{7684}\u{4E3B}\u{8272}\u{8C03}\u{3001}\u{8F85}\u{52A9}\u{8272}\u{3001}\u{72B6}\u{6001}\u{8272}\u{7B49}\u{914D}\u{8272}\u{65B9}\u{6848}]
5812
5549
 
5813
- ### 4.2 \u{5B57}\u{4F53}\u{89C4}\u{8303}
5814
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{4F7F}\u{7528}\u{7684}\u{5B57}\u{4F53}\u{3001}\u{5B57}\u{53F7}\u{3001}\u{5B57}\u{91CD}\u{7B49}\u{89C4}\u{8303}]
5815
5550
 
5816
- ### 4.3 \u{7EC4}\u{4EF6}\u{6837}\u{5F0F}
5817
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{4E2D}\u{5404}\u{79CD}UI\u{7EC4}\u{4EF6}\u{7684}\u{6837}\u{5F0F}\u{89C4}\u{8303}\u{FF0C}\u{5982}\u{6309}\u{94AE}\u{3001}\u{8F93}\u{5165}\u{6846}\u{3001}\u{8868}\u{683C}\u{7B49}]
5818
-
5819
- ### 4.4 \u{95F4}\u{8DDD}\u{89C4}\u{8303}
5820
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{5143}\u{7D20}\u{95F4}\u{7684}\u{95F4}\u{8DDD}\u{89C4}\u{8303}\u{FF0C}\u{5305}\u{62EC}\u{5185}\u{8FB9}\u{8DDD}\u{3001}\u{5916}\u{8FB9}\u{8DDD}\u{7B49}]
5821
-
5822
- ### 4.5 \u{54C1}\u{724C}\u{89C6}\u{89C9}\u{89C4}\u{8303}
5551
+ ### 4.2 \u{54C1}\u{724C}\u{89C6}\u{89C9}\u{89C4}\u{8303}
5823
5552
  [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{54C1}\u{724C}\u{89C6}\u{89C9}\u{5143}\u{7D20}\u{5728}\u{9875}\u{9762}\u{4E2D}\u{7684}\u{5E94}\u{7528}\u{89C4}\u{8303}\u{FF0C}\u{5982}Logo\u{3001}\u{56FE}\u{6807}\u{7B49}]
5824
5553
 
5825
- ### 4.6 \u{52A8}\u{6548}\u{89C4}\u{8303}
5826
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{4E2D}\u{52A8}\u{6548}\u{7684}\u{4F7F}\u{7528}\u{89C4}\u{8303}\u{FF0C}\u{5305}\u{62EC}\u{8FC7}\u{6E21}\u{6548}\u{679C}\u{3001}\u{52A0}\u{8F7D}\u{52A8}\u{753B}\u{7B49}]
5827
-
5828
5554
  ## 5. \u{4EA4}\u{4E92}\u{903B}\u{8F91}\u{8BF4}\u{660E}
5829
5555
 
5830
5556
  ### 5.1 \u{7528}\u{6237}\u{64CD}\u{4F5C}\u{6D41}\u{7A0B}
@@ -5896,206 +5622,15 @@ Scenario Outline: UI\u{7EC4}\u{4EF6}\u{4EA4}\u{4E92}\u{5904}\u{7406}\u{6D41}\u{7
5896
5622
 
5897
5623
  \`\`\`mermaid
5898
5624
  sequenceDiagram
5899
- participant \u{7528}\u{6237}
5900
- participant \u{524D}\u{7AEF}\u{9875}\u{9762}
5901
- participant \u{8DEF}\u{7531}\u{7BA1}\u{7406}\u{5668}
5902
- participant \u{72B6}\u{6001}\u{7BA1}\u{7406}\u{5668}
5903
- participant API\u{5BA2}\u{6237}\u{7AEF}
5904
- participant \u{540E}\u{7AEF}\u{670D}\u{52A1}
5905
- participant \u{6570}\u{636E}\u{5E93}
5906
- participant \u{7F13}\u{5B58}\u{670D}\u{52A1}
5907
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
5908
-
5909
- %% \u{9875}\u{9762}\u{52A0}\u{8F7D}\u{6D41}\u{7A0B}
5910
- \u{7528}\u{6237}->>\u{524D}\u{7AEF}\u{9875}\u{9762}: \u{8BBF}\u{95EE}\u{9875}\u{9762}URL
5911
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{8DEF}\u{7531}\u{7BA1}\u{7406}\u{5668}: \u{89E3}\u{6790}\u{8DEF}\u{7531}
5912
- \u{8DEF}\u{7531}\u{7BA1}\u{7406}\u{5668}-->>\u{524D}\u{7AEF}\u{9875}\u{9762}: \u{8FD4}\u{56DE}\u{8DEF}\u{7531}\u{4FE1}\u{606F}
5913
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{72B6}\u{6001}\u{7BA1}\u{7406}\u{5668}: \u{521D}\u{59CB}\u{5316}\u{9875}\u{9762}\u{72B6}\u{6001}
5914
- \u{72B6}\u{6001}\u{7BA1}\u{7406}\u{5668}-->>\u{524D}\u{7AEF}\u{9875}\u{9762}: \u{8FD4}\u{56DE}\u{521D}\u{59CB}\u{72B6}\u{6001}
5915
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>API\u{5BA2}\u{6237}\u{7AEF}: \u{53D1}\u{8D77}\u{6570}\u{636E}\u{8BF7}\u{6C42}
5916
- API\u{5BA2}\u{6237}\u{7AEF}->>\u{540E}\u{7AEF}\u{670D}\u{52A1}: \u{53D1}\u{9001}HTTP\u{8BF7}\u{6C42}
5917
- \u{540E}\u{7AEF}\u{670D}\u{52A1}->>\u{7F13}\u{5B58}\u{670D}\u{52A1}: \u{67E5}\u{8BE2}\u{7F13}\u{5B58}
5918
- alt \u{7F13}\u{5B58}\u{547D}\u{4E2D}
5919
- \u{7F13}\u{5B58}\u{670D}\u{52A1}-->>\u{540E}\u{7AEF}\u{670D}\u{52A1}: \u{8FD4}\u{56DE}\u{7F13}\u{5B58}\u{6570}\u{636E}
5920
- else \u{7F13}\u{5B58}\u{672A}\u{547D}\u{4E2D}
5921
- \u{540E}\u{7AEF}\u{670D}\u{52A1}->>\u{6570}\u{636E}\u{5E93}: \u{67E5}\u{8BE2}\u{6570}\u{636E}
5922
- \u{6570}\u{636E}\u{5E93}-->>\u{540E}\u{7AEF}\u{670D}\u{52A1}: \u{8FD4}\u{56DE}\u{67E5}\u{8BE2}\u{7ED3}\u{679C}
5923
- \u{540E}\u{7AEF}\u{670D}\u{52A1}->>\u{7F13}\u{5B58}\u{670D}\u{52A1}: \u{5B58}\u{50A8}\u{5230}\u{7F13}\u{5B58}
5924
- end
5925
- \u{540E}\u{7AEF}\u{670D}\u{52A1}-->>API\u{5BA2}\u{6237}\u{7AEF}: \u{8FD4}\u{56DE}\u{54CD}\u{5E94}\u{6570}\u{636E}
5926
- API\u{5BA2}\u{6237}\u{7AEF}-->>\u{524D}\u{7AEF}\u{9875}\u{9762}: \u{8FD4}\u{56DE}\u{5904}\u{7406}\u{540E}\u{6570}\u{636E}
5927
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{72B6}\u{6001}\u{7BA1}\u{7406}\u{5668}: \u{66F4}\u{65B0}\u{9875}\u{9762}\u{72B6}\u{6001}
5928
- \u{72B6}\u{6001}\u{7BA1}\u{7406}\u{5668}-->>\u{524D}\u{7AEF}\u{9875}\u{9762}: \u{901A}\u{77E5}\u{72B6}\u{6001}\u{66F4}\u{65B0}
5929
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{7528}\u{6237}: \u{6E32}\u{67D3}\u{9875}\u{9762}\u{5185}\u{5BB9}
5930
- \`\`\`
5931
-
5932
- ### 9.2 \u{65B9}\u{6848}\u{4E8C}\u{FF1A}\u{66FF}\u{4EE3}\u{6D41}\u{7A0B}\u{FF08}\u{4E0D}\u{540C}\u{6709}\u{6548}\u{8DEF}\u{5F84}\u{FF09}
5933
-
5934
- #### 9.2.1 \u{7EC4}\u{4EF6}\u{8BBE}\u{8BA1}\u{89C4}\u{8303}\u{6D41}\u{7A0B}
5935
- \`\`\`mermaid
5936
- sequenceDiagram
5937
- participant \u{524D}\u{7AEF}\u{9875}\u{9762}
5938
- participant \u{7EC4}\u{4EF6}\u{5E93}
5939
- participant \u{8BBE}\u{8BA1}\u{7CFB}\u{7EDF}
5940
- participant \u{6837}\u{5F0F}\u{7BA1}\u{7406}\u{5668}
5941
-
5942
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{7EC4}\u{4EF6}\u{5E93}: \u{8BF7}\u{6C42}\u{7EC4}\u{4EF6}\u{89C4}\u{8303}
5943
- \u{7EC4}\u{4EF6}\u{5E93}->>\u{8BBE}\u{8BA1}\u{7CFB}\u{7EDF}: \u{83B7}\u{53D6}\u{8BBE}\u{8BA1}\u{89C4}\u{8303}
5944
- \u{8BBE}\u{8BA1}\u{7CFB}\u{7EDF}-->>\u{7EC4}\u{4EF6}\u{5E93}: \u{8FD4}\u{56DE}\u{8BBE}\u{8BA1}\u{89C4}\u{8303}
5945
- \u{7EC4}\u{4EF6}\u{5E93}->>\u{6837}\u{5F0F}\u{7BA1}\u{7406}\u{5668}: \u{5E94}\u{7528}\u{6837}\u{5F0F}\u{89C4}\u{5219}
5946
- \u{6837}\u{5F0F}\u{7BA1}\u{7406}\u{5668}-->>\u{7EC4}\u{4EF6}\u{5E93}: \u{8FD4}\u{56DE}\u{6837}\u{5F0F}\u{914D}\u{7F6E}
5947
- \u{7EC4}\u{4EF6}\u{5E93}-->>\u{524D}\u{7AEF}\u{9875}\u{9762}: \u{8FD4}\u{56DE}\u{7EC4}\u{4EF6}\u{5B9E}\u{73B0}
5948
- \`\`\`
5949
-
5950
- #### 9.2.2 \u{54CD}\u{5E94}\u{5F0F}\u{5E03}\u{5C40}\u{9002}\u{914D}\u{6D41}\u{7A0B}
5951
- \`\`\`mermaid
5952
- sequenceDiagram
5953
- participant \u{7528}\u{6237}
5954
- participant \u{524D}\u{7AEF}\u{9875}\u{9762}
5955
- participant \u{5A92}\u{4F53}\u{67E5}\u{8BE2}\u{5668}
5956
- participant \u{5E03}\u{5C40}\u{5F15}\u{64CE}
5957
-
5958
- \u{7528}\u{6237}->>\u{524D}\u{7AEF}\u{9875}\u{9762}: \u{8C03}\u{6574}\u{6D4F}\u{89C8}\u{5668}\u{7A97}\u{53E3}\u{5927}\u{5C0F}
5959
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{5A92}\u{4F53}\u{67E5}\u{8BE2}\u{5668}: \u{68C0}\u{6D4B}\u{5C4F}\u{5E55}\u{5C3A}\u{5BF8}
5960
- \u{5A92}\u{4F53}\u{67E5}\u{8BE2}\u{5668}-->>\u{524D}\u{7AEF}\u{9875}\u{9762}: \u{8FD4}\u{56DE}\u{65AD}\u{70B9}\u{4FE1}\u{606F}
5961
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{5E03}\u{5C40}\u{5F15}\u{64CE}: \u{5E94}\u{7528}\u{54CD}\u{5E94}\u{5F0F}\u{89C4}\u{5219}
5962
- \u{5E03}\u{5C40}\u{5F15}\u{64CE}-->>\u{524D}\u{7AEF}\u{9875}\u{9762}: \u{8FD4}\u{56DE}\u{9002}\u{914D}\u{540E}\u{5E03}\u{5C40}
5963
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{7528}\u{6237}: \u{91CD}\u{65B0}\u{6E32}\u{67D3}\u{9002}\u{914D}\u{9875}\u{9762}
5964
- \`\`\`
5965
-
5966
- #### 9.2.3 \u{590D}\u{6742}\u{8868}\u{5355}\u{5904}\u{7406}\u{6D41}\u{7A0B}
5967
- \`\`\`mermaid
5968
- sequenceDiagram
5969
- participant \u{7528}\u{6237}
5970
- participant \u{524D}\u{7AEF}\u{9875}\u{9762}
5971
- participant \u{8868}\u{5355}\u{9A8C}\u{8BC1}\u{5668}
5972
- participant \u{72B6}\u{6001}\u{7BA1}\u{7406}\u{5668}
5973
- participant API\u{5BA2}\u{6237}\u{7AEF}
5974
- participant \u{540E}\u{7AEF}\u{670D}\u{52A1}
5975
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
5976
- participant \u{76D1}\u{63A7}\u{670D}\u{52A1}
5977
-
5978
- \u{7528}\u{6237}->>\u{524D}\u{7AEF}\u{9875}\u{9762}: \u{63D0}\u{4EA4}\u{590D}\u{6742}\u{8868}\u{5355}
5979
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{8868}\u{5355}\u{9A8C}\u{8BC1}\u{5668}: \u{9A8C}\u{8BC1}\u{8868}\u{5355}\u{6570}\u{636E}
5980
- \u{8868}\u{5355}\u{9A8C}\u{8BC1}\u{5668}-->>\u{524D}\u{7AEF}\u{9875}\u{9762}: \u{8FD4}\u{56DE}\u{9A8C}\u{8BC1}\u{7ED3}\u{679C}
5981
- alt \u{9A8C}\u{8BC1}\u{901A}\u{8FC7}
5982
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{72B6}\u{6001}\u{7BA1}\u{7406}\u{5668}: \u{66F4}\u{65B0}\u{63D0}\u{4EA4}\u{72B6}\u{6001}
5983
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>API\u{5BA2}\u{6237}\u{7AEF}: \u{53D1}\u{9001}\u{8868}\u{5355}\u{6570}\u{636E}
5984
- API\u{5BA2}\u{6237}\u{7AEF}->>\u{540E}\u{7AEF}\u{670D}\u{52A1}: \u{8F6C}\u{53D1}\u{8BF7}\u{6C42}
5985
- \u{540E}\u{7AEF}\u{670D}\u{52A1}-->>API\u{5BA2}\u{6237}\u{7AEF}: \u{8FD4}\u{56DE}\u{5904}\u{7406}\u{7ED3}\u{679C}
5986
- API\u{5BA2}\u{6237}\u{7AEF}-->>\u{524D}\u{7AEF}\u{9875}\u{9762}: \u{8FD4}\u{56DE}\u{54CD}\u{5E94}
5987
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{72B6}\u{6001}\u{7BA1}\u{7406}\u{5668}: \u{66F4}\u{65B0}\u{6210}\u{529F}\u{72B6}\u{6001}
5988
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{7528}\u{6237}: \u{663E}\u{793A}\u{6210}\u{529F}\u{6D88}\u{606F}
5989
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{76D1}\u{63A7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{63D0}\u{4EA4}\u{6210}\u{529F}
5990
- else \u{9A8C}\u{8BC1}\u{5931}\u{8D25}
5991
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{72B6}\u{6001}\u{7BA1}\u{7406}\u{5668}: \u{66F4}\u{65B0}\u{9519}\u{8BEF}\u{72B6}\u{6001}
5992
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{7528}\u{6237}: \u{663E}\u{793A}\u{9A8C}\u{8BC1}\u{9519}\u{8BEF}
5993
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{9A8C}\u{8BC1}\u{5931}\u{8D25}
5994
- end
5995
- \`\`\`
5996
-
5997
- ### 9.3 \u{5F02}\u{5E38}\u{6D41}\u{7A0B}\u{FF08}\u{9519}\u{8BEF}\u{5904}\u{7406}\u{FF09}
5998
-
5999
- #### 9.3.1 \u{65E0}\u{6548}UI\u{7EC4}\u{4EF6}\u{8BF7}\u{6C42}
6000
- \`\`\`mermaid
6001
- sequenceDiagram
6002
- participant \u{524D}\u{7AEF}\u{9875}\u{9762}
6003
- participant \u{7EC4}\u{4EF6}\u{5E93}
6004
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
6005
-
6006
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{7EC4}\u{4EF6}\u{5E93}: \u{8BF7}\u{6C42}\u{672A}\u{77E5}\u{7EC4}\u{4EF6}
6007
- \u{7EC4}\u{4EF6}\u{5E93}-->>\u{524D}\u{7AEF}\u{9875}\u{9762}: \u{8FD4}\u{56DE}\u{7EC4}\u{4EF6}\u{4E0D}\u{5B58}\u{5728}\u{9519}\u{8BEF}
6008
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{7EC4}\u{4EF6}\u{9519}\u{8BEF}\u{65E5}\u{5FD7}
6009
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{524D}\u{7AEF}\u{9875}\u{9762}: \u{4F7F}\u{7528}\u{9ED8}\u{8BA4}\u{7EC4}\u{4EF6}\u{66FF}\u{4EE3}
6010
- \`\`\`
6011
-
6012
- #### 9.3.2 \u{6837}\u{5F0F}\u{89C4}\u{8303}\u{51B2}\u{7A81}
6013
- \`\`\`mermaid
6014
- sequenceDiagram
6015
- participant \u{524D}\u{7AEF}\u{9875}\u{9762}
6016
- participant \u{6837}\u{5F0F}\u{7BA1}\u{7406}\u{5668}
6017
- participant \u{8BBE}\u{8BA1}\u{7CFB}\u{7EDF}
6018
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
6019
-
6020
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{6837}\u{5F0F}\u{7BA1}\u{7406}\u{5668}: \u{8BF7}\u{6C42}\u{6837}\u{5F0F}\u{89C4}\u{8303}
6021
- \u{6837}\u{5F0F}\u{7BA1}\u{7406}\u{5668}->>\u{8BBE}\u{8BA1}\u{7CFB}\u{7EDF}: \u{83B7}\u{53D6}\u{6837}\u{5F0F}\u{89C4}\u{5219}
6022
- \u{8BBE}\u{8BA1}\u{7CFB}\u{7EDF}-->>\u{6837}\u{5F0F}\u{7BA1}\u{7406}\u{5668}: \u{8FD4}\u{56DE}\u{51B2}\u{7A81}\u{6837}\u{5F0F}
6023
- \u{6837}\u{5F0F}\u{7BA1}\u{7406}\u{5668}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{6837}\u{5F0F}\u{51B2}\u{7A81}
6024
- \u{6837}\u{5F0F}\u{7BA1}\u{7406}\u{5668}->>\u{6837}\u{5F0F}\u{7BA1}\u{7406}\u{5668}: \u{89E3}\u{6790}\u{51B2}\u{7A81}\u{89C4}\u{5219}
6025
- \u{6837}\u{5F0F}\u{7BA1}\u{7406}\u{5668}-->>\u{524D}\u{7AEF}\u{9875}\u{9762}: \u{8FD4}\u{56DE}\u{89E3}\u{6790}\u{540E}\u{6837}\u{5F0F}
6026
- \`\`\`
6027
-
6028
- #### 9.3.3 \u{54CD}\u{5E94}\u{5F0F}\u{65AD}\u{70B9}\u{51B2}\u{7A81}
6029
- \`\`\`mermaid
6030
- sequenceDiagram
6031
- participant \u{524D}\u{7AEF}\u{9875}\u{9762}
6032
- participant \u{5A92}\u{4F53}\u{67E5}\u{8BE2}\u{5668}
6033
- participant \u{8BBE}\u{8BA1}\u{7CFB}\u{7EDF}
6034
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
6035
- participant \u{76D1}\u{63A7}\u{670D}\u{52A1}
6036
-
6037
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{5A92}\u{4F53}\u{67E5}\u{8BE2}\u{5668}: \u{68C0}\u{6D4B}\u{54CD}\u{5E94}\u{5F0F}\u{65AD}\u{70B9}
6038
- \u{5A92}\u{4F53}\u{67E5}\u{8BE2}\u{5668}->>\u{8BBE}\u{8BA1}\u{7CFB}\u{7EDF}: \u{83B7}\u{53D6}\u{65AD}\u{70B9}\u{89C4}\u{8303}
6039
- \u{8BBE}\u{8BA1}\u{7CFB}\u{7EDF}-->>\u{5A92}\u{4F53}\u{67E5}\u{8BE2}\u{5668}: \u{8FD4}\u{56DE}\u{51B2}\u{7A81}\u{65AD}\u{70B9}
6040
- \u{5A92}\u{4F53}\u{67E5}\u{8BE2}\u{5668}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{65AD}\u{70B9}\u{51B2}\u{7A81}
6041
- \u{5A92}\u{4F53}\u{67E5}\u{8BE2}\u{5668}->>\u{5A92}\u{4F53}\u{67E5}\u{8BE2}\u{5668}: \u{5E94}\u{7528}\u{9ED8}\u{8BA4}\u{65AD}\u{70B9}
6042
- \u{5A92}\u{4F53}\u{67E5}\u{8BE2}\u{5668}-->>\u{524D}\u{7AEF}\u{9875}\u{9762}: \u{8FD4}\u{56DE}\u{9ED8}\u{8BA4}\u{65AD}\u{70B9}\u{4FE1}\u{606F}
6043
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{76D1}\u{63A7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{65AD}\u{70B9}\u{5F02}\u{5E38}
6044
5625
  \`\`\`
6045
5626
 
6046
- ### 9.4 \u{8FB9}\u{7F18}\u{60C5}\u{51B5}\u{6D41}\u{7A0B}\u{FF08}\u{5E76}\u{53D1}\u{3001}\u{8D85}\u{65F6}\u{7B49}\u{FF09}
6047
-
6048
- #### 9.4.1 \u{590D}\u{6742}\u{5E03}\u{5C40}\u{5904}\u{7406}
6049
- \`\`\`mermaid
6050
- sequenceDiagram
6051
- participant \u{524D}\u{7AEF}\u{9875}\u{9762}
6052
- participant \u{5E03}\u{5C40}\u{5F15}\u{64CE}
6053
- participant \u{6027}\u{80FD}\u{76D1}\u{63A7}\u{5668}
6054
-
6055
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{5E03}\u{5C40}\u{5F15}\u{64CE}: \u{8BF7}\u{6C42}\u{590D}\u{6742}\u{5E03}\u{5C40}\u{8BA1}\u{7B97}
6056
- \u{5E03}\u{5C40}\u{5F15}\u{64CE}->>\u{5E03}\u{5C40}\u{5F15}\u{64CE}: \u{6267}\u{884C}\u{591A}\u{533A}\u{57DF}\u{5E03}\u{5C40}\u{7B97}\u{6CD5}
6057
- \u{5E03}\u{5C40}\u{5F15}\u{64CE}-->>\u{524D}\u{7AEF}\u{9875}\u{9762}: \u{8FD4}\u{56DE}\u{4F18}\u{5316}\u{5E03}\u{5C40}
6058
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{6027}\u{80FD}\u{76D1}\u{63A7}\u{5668}: \u{8BB0}\u{5F55}\u{5E03}\u{5C40}\u{6027}\u{80FD}
6059
- \u{6027}\u{80FD}\u{76D1}\u{63A7}\u{5668}-->>\u{524D}\u{7AEF}\u{9875}\u{9762}: \u{8FD4}\u{56DE}\u{6027}\u{80FD}\u{5EFA}\u{8BAE}
6060
- \`\`\`
5627
+ ### 9.2 \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}
6061
5628
 
6062
- #### 9.4.2 \u{6027}\u{80FD}\u{4F18}\u{5316}\u{8981}\u{6C42}
5629
+ #### 9.2.1 \u{6027}\u{80FD}\u{4F18}\u{5316}\u{8981}\u{6C42}
6063
5630
  \`\`\`mermaid
6064
5631
  sequenceDiagram
6065
- participant \u{524D}\u{7AEF}\u{9875}\u{9762}
6066
- participant \u{6027}\u{80FD}\u{4F18}\u{5316}\u{5668}
6067
- participant \u{7F13}\u{5B58}\u{7BA1}\u{7406}\u{5668}
6068
-
6069
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{6027}\u{80FD}\u{4F18}\u{5316}\u{5668}: \u{8BF7}\u{6C42}\u{6E32}\u{67D3}\u{4F18}\u{5316}
6070
- \u{6027}\u{80FD}\u{4F18}\u{5316}\u{5668}->>\u{6027}\u{80FD}\u{4F18}\u{5316}\u{5668}: \u{5206}\u{6790}\u{6E32}\u{67D3}\u{6027}\u{80FD}
6071
- \u{6027}\u{80FD}\u{4F18}\u{5316}\u{5668}-->>\u{524D}\u{7AEF}\u{9875}\u{9762}: \u{8FD4}\u{56DE}\u{4F18}\u{5316}\u{7B56}\u{7565}
6072
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{7F13}\u{5B58}\u{7BA1}\u{7406}\u{5668}: \u{914D}\u{7F6E}\u{61D2}\u{52A0}\u{8F7D}\u{7B56}\u{7565}
6073
- \u{7F13}\u{5B58}\u{7BA1}\u{7406}\u{5668}-->>\u{524D}\u{7AEF}\u{9875}\u{9762}: \u{8FD4}\u{56DE}\u{7F13}\u{5B58}\u{914D}\u{7F6E}
6074
5632
  \`\`\`
6075
5633
 
6076
- #### 9.4.3 \u{5E03}\u{5C40}\u{8BA1}\u{7B97}\u{8D85}\u{65F6}\u{5904}\u{7406}
6077
- \`\`\`mermaid
6078
- sequenceDiagram
6079
- participant \u{524D}\u{7AEF}\u{9875}\u{9762}
6080
- participant \u{5E03}\u{5C40}\u{5F15}\u{64CE}
6081
- participant \u{6027}\u{80FD}\u{4F18}\u{5316}\u{5668}
6082
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
6083
- participant \u{76D1}\u{63A7}\u{670D}\u{52A1}
6084
-
6085
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{5E03}\u{5C40}\u{5F15}\u{64CE}: \u{8BF7}\u{6C42}\u{590D}\u{6742}\u{5E03}\u{5C40}\u{8BA1}\u{7B97}
6086
- \u{5E03}\u{5C40}\u{5F15}\u{64CE}->>\u{5E03}\u{5C40}\u{5F15}\u{64CE}: \u{6267}\u{884C}\u{5E03}\u{5C40}\u{7B97}\u{6CD5}
6087
- alt \u{5E03}\u{5C40}\u{8BA1}\u{7B97}\u{8D85}\u{65F6}
6088
- \u{5E03}\u{5C40}\u{5F15}\u{64CE}->>\u{6027}\u{80FD}\u{4F18}\u{5316}\u{5668}: \u{8BF7}\u{6C42}\u{964D}\u{7EA7}\u{7B56}\u{7565}
6089
- \u{6027}\u{80FD}\u{4F18}\u{5316}\u{5668}-->>\u{5E03}\u{5C40}\u{5F15}\u{64CE}: \u{8FD4}\u{56DE}\u{7B80}\u{5316}\u{5E03}\u{5C40}\u{65B9}\u{6848}
6090
- \u{5E03}\u{5C40}\u{5F15}\u{64CE}->>\u{5E03}\u{5C40}\u{5F15}\u{64CE}: \u{5E94}\u{7528}\u{7B80}\u{5316}\u{65B9}\u{6848}
6091
- \u{5E03}\u{5C40}\u{5F15}\u{64CE}-->>\u{524D}\u{7AEF}\u{9875}\u{9762}: \u{8FD4}\u{56DE}\u{964D}\u{7EA7}\u{5E03}\u{5C40}
6092
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{8D85}\u{65F6}\u{4E8B}\u{4EF6}
6093
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{76D1}\u{63A7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{6027}\u{80FD}\u{6307}\u{6807}
6094
- else \u{8BA1}\u{7B97}\u{5B8C}\u{6210}
6095
- \u{5E03}\u{5C40}\u{5F15}\u{64CE}-->>\u{524D}\u{7AEF}\u{9875}\u{9762}: \u{8FD4}\u{56DE}\u{5B8C}\u{6574}\u{5E03}\u{5C40}
6096
- end
6097
- \u{524D}\u{7AEF}\u{9875}\u{9762}->>\u{7528}\u{6237}: \u{6E32}\u{67D3}\u{9875}\u{9762}\u{5E03}\u{5C40}
6098
- \`\`\`
6099
5634
 
6100
5635
  ## 10. \u{4E1A}\u{52A1}\u{72B6}\u{6001}\u{63CF}\u{8FF0}
6101
5636
 
@@ -6114,1254 +5649,176 @@ sequenceDiagram
6114
5649
  |10|\u{63D0}\u{4EA4}\u{5931}\u{8D25}|\u{8868}\u{5355}\u{63D0}\u{4EA4}\u{5931}\u{8D25}\u{72B6}\u{6001}|
6115
5650
  |[\u{6DFB}\u{52A0}\u{66F4}\u{591A}\u{72B6}\u{6001}...]||
6116
5651
 
6117
- ## 11. \u{524D}\u{7AEF}\u{5904}\u{7406}\u{903B}\u{8F91}\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}
5652
+ ## 11. \u{7528}\u{6237}\u{6545}\u{4E8B}
6118
5653
 
6119
- ### 11.1 \u{9875}\u{9762}\u{521D}\u{59CB}\u{5316}\u{903B}\u{8F91}
6120
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{52A0}\u{8F7D}\u{65F6}\u{7684}\u{521D}\u{59CB}\u{5316}\u{5904}\u{7406}\u{903B}\u{8F91}]
5654
+ ### 11.1 \u{6545}\u{4E8B}1
5655
+ [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{6545}\u{4E8B}\u{7684}\u{5185}\u{5BB9}\u{FF0C}\u{5305}\u{62EC}\u{4EFB}\u{52A1}\u{5B9A}\u{4E49}\u{3001}\u{4E1A}\u{52A1}\u{903B}\u{8F91}\u{63CF}\u{8FF0}\u{3001}\u{6280}\u{672F}\u{65B9}\u{6848}\u{5B9E}\u{73B0}\u{7B49}]
5656
+ ### 11.2 \u{6545}\u{4E8B}2
5657
+ [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{6545}\u{4E8B}\u{7684}\u{5185}\u{5BB9}\u{FF0C}\u{5305}\u{62EC}\u{4EFB}\u{52A1}\u{5B9A}\u{4E49}\u{3001}\u{4E1A}\u{52A1}\u{903B}\u{8F91}\u{63CF}\u{8FF0}\u{3001}\u{6280}\u{672F}\u{65B9}\u{6848}\u{5B9E}\u{73B0}\u{7B49}]
5658
+ ...
5659
+ ### 11.3 \u{66F4}\u{591A}\u{6545}\u{4E8B}
5660
+ [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{66F4}\u{591A}\u{6545}\u{4E8B}\u{7684}\u{5185}\u{5BB9}\u{FF0C}\u{5305}\u{62EC}\u{4EFB}\u{52A1}\u{5B9A}\u{4E49}\u{3001}\u{4E1A}\u{52A1}\u{903B}\u{8F91}\u{63CF}\u{8FF0}\u{3001}\u{6280}\u{672F}\u{65B9}\u{6848}\u{5B9E}\u{73B0}\u{7B49}]
5661
+ >
6121
5662
 
6122
- ### 11.2 \u{6570}\u{636E}\u{83B7}\u{53D6}\u{903B}\u{8F91}
6123
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{6570}\u{636E}\u{83B7}\u{53D6}\u{7684}\u{5904}\u{7406}\u{903B}\u{8F91}\u{FF0C}\u{5305}\u{62EC}API\u{8C03}\u{7528}\u{3001}\u{6570}\u{636E}\u{5904}\u{7406}\u{7B49}]
6124
5663
 
6125
- ### 11.3 \u{7528}\u{6237}\u{4EA4}\u{4E92}\u{5904}\u{7406}\u{903B}\u{8F91}
6126
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{7528}\u{6237}\u{5404}\u{79CD}\u{4EA4}\u{4E92}\u{64CD}\u{4F5C}\u{7684}\u{5904}\u{7406}\u{903B}\u{8F91}]
5664
+ ---
6127
5665
 
6128
- ### 11.4 \u{6570}\u{636E}\u{5C55}\u{793A}\u{903B}\u{8F91}
6129
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{6570}\u{636E}\u{5728}\u{9875}\u{9762}\u{4E2D}\u{7684}\u{5C55}\u{793A}\u{5904}\u{7406}\u{903B}\u{8F91}]
5666
+ **\u{8981}\u{6C42}**: \u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{6587}\u{6863}\u{FF0C}\u{6BCF}\u{7AE0}\u{8282}\u{6709}\u{5B9E}\u{8D28}\u{5185}\u{5BB9}\u{FF0C}\u{8868}\u{683C}\u{586B}\u{5199}\u{5177}\u{4F53}\u{4FE1}\u{606F}\u{FF0C}\u{91CD}\u{70B9}\u{5173}\u{6CE8}\u{9875}\u{9762}\u{5E03}\u{5C40}\u{3001}\u{6837}\u{5F0F}\u{3001}\u{4EA4}\u{4E92}\u{903B}\u{8F91}\u{3002}`;
5667
+ const appTemplatePrompt = `\u{4F60}\u{662F}\u{79FB}\u{52A8}\u{7AEF}\u{6280}\u{672F}\u{6587}\u{6863}\u{4E13}\u{5BB6}\u{3002}\u{57FA}\u{4E8E}\u{8F93}\u{5165}\u{5185}\u{5BB9}\u{751F}\u{6210}\u{5B8C}\u{6574}\u{7684}APP\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}\u{FF08}Markdown\u{683C}\u{5F0F}\u{FF0C}1500\u{5B57}\u{4EE5}\u{4E0A}\u{FF09}\u{3002}
6130
5668
 
6131
- ### 11.5 \u{9519}\u{8BEF}\u{5904}\u{7406}\u{903B}\u{8F91}
6132
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{4E2D}\u{5404}\u{79CD}\u{9519}\u{8BEF}\u{60C5}\u{51B5}\u{7684}\u{5904}\u{7406}\u{903B}\u{8F91}]
5669
+ **\u{8F93}\u{5165}**: \u{529F}\u{80FD}\u{540D}\u{79F0}={featureName}, \u{4E1A}\u{52A1}\u{9886}\u{57DF}={businessDomain}
6133
5670
 
6134
- ### 11.6 \u{6027}\u{80FD}\u{4F18}\u{5316}\u{903B}\u{8F91}
6135
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{6027}\u{80FD}\u{4F18}\u{5316}\u{7684}\u{5904}\u{7406}\u{903B}\u{8F91}\u{FF0C}\u{5982}\u{61D2}\u{52A0}\u{8F7D}\u{3001}\u{7F13}\u{5B58}\u{7B49}]
5671
+ **\u{539F}\u{59CB}\u{9700}\u{6C42}**:
5672
+ \`\`\`
5673
+ {inputContent}
5674
+ \`\`\`
6136
5675
 
6137
- ## 12. \u{4F2A}\u{4EE3}\u{7801}\u{793A}\u{4F8B}
5676
+ ## \u{6587}\u{6863}\u{7ED3}\u{6784}\u{8981}\u{6C42}
5677
+ \u{8BF7}\u{4E25}\u{683C}\u{6309}\u{7167}\u{4EE5}\u{4E0B}\u{7ED3}\u{6784}\u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{7684}\u{9700}\u{6C42}\u{6587}\u{6863}\u{FF0C}\u{6BCF}\u{4E2A}\u{7AE0}\u{8282}\u{90FD}\u{8981}\u{6709}\u{8BE6}\u{5B9E}\u{7684}\u{5185}\u{5BB9}\u{FF1A}
6138
5678
 
6139
- \`\`\`gherkin
6140
- Scenario Outline: \u{7528}\u{6237}\u{5728}PC\u{9875}\u{9762}\u{4E2D}\u{8FDB}\u{884C}\u{8868}\u{5355}\u{63D0}\u{4EA4}
6141
- Given \u{7528}\u{6237}\u{5DF2}\u{6253}\u{5F00}<page_name>\u{9875}\u{9762}\u{5E76}\u{586B}\u{5199}\u{4E86}\u{8868}\u{5355}
6142
- When \u{7528}\u{6237}\u{70B9}\u{51FB}"\u{63D0}\u{4EA4}"\u{6309}\u{94AE}
6143
- Then \u{7CFB}\u{7EDF}\u{5E94}\u{9A8C}\u{8BC1}\u{8868}\u{5355}\u{6570}\u{636E}\u{5E76}<result>
5679
+ # {featureName} - APP\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}
6144
5680
 
6145
- Examples:
6146
- | page_name | result |
6147
- | \u{7528}\u{6237}\u{4FE1}\u{606F}\u{9875} | \u{663E}\u{793A}"\u{63D0}\u{4EA4}\u{6210}\u{529F}"\u{63D0}\u{793A}\u{5E76}\u{8DF3}\u{8F6C} |
6148
- | \u{8BA2}\u{5355}\u{9875}\u{9762} | \u{663E}\u{793A}\u{9519}\u{8BEF}\u{4FE1}\u{606F}"\u{5FC5}\u{586B}\u{9879}\u{672A}\u{586B}\u{5199}" |
5681
+ > **\u{751F}\u{6210}\u{65F6}\u{95F4}**: {currentTime}
5682
+ > **\u{4E1A}\u{52A1}\u{9886}\u{57DF}**: {businessDomain}
5683
+ > **\u{5E94}\u{7528}\u{7C7B}\u{578B}**: \u{79FB}\u{52A8}\u{7AEF}\u{5E94}\u{7528}\u{7A0B}\u{5E8F}
6149
5684
 
6150
- Scenario Outline: PC\u{9875}\u{9762}\u{8DEF}\u{7531}\u{5BFC}\u{822A}\u{5904}\u{7406}
6151
- Given \u{7528}\u{6237}\u{5728}<current_page>\u{9875}\u{9762}
6152
- When \u{7528}\u{6237}\u{70B9}\u{51FB}<navigation_action>\u{65F6}
6153
- Then \u{7CFB}\u{7EDF}\u{5E94}:
6154
- 1. \u{9A8C}\u{8BC1}\u{7528}\u{6237}\u{662F}\u{5426}\u{6709}\u{8BBF}\u{95EE}\u{76EE}\u{6807}\u{9875}\u{9762}\u{7684}\u{6743}\u{9650}
6155
- 2. \u{4FDD}\u{5B58}\u{5F53}\u{524D}\u{9875}\u{9762}\u{72B6}\u{6001}
6156
- 3. \u{52A0}\u{8F7D}\u{76EE}\u{6807}\u{9875}\u{9762}
6157
- 4. \u{6062}\u{590D}\u{76EE}\u{6807}\u{9875}\u{9762}\u{4E4B}\u{524D}\u{7684}\u{72B6}\u{6001}\u{FF08}\u{5982}\u{679C}\u{5B58}\u{5728}\u{FF09}
5685
+ ---
6158
5686
 
6159
- Examples:
6160
- | current_page | navigation_action | \u{5904}\u{7406}\u{903B}\u{8F91} |
6161
- | \u{9996}\u{9875} | \u{70B9}\u{51FB}\u{7528}\u{6237}\u{7BA1}\u{7406}\u{94FE}\u{63A5} | \u{68C0}\u{67E5}\u{6743}\u{9650}\u{540E}\u{8DF3}\u{8F6C}\u{5230}\u{7528}\u{6237}\u{7BA1}\u{7406}\u{9875}\u{9762} |
6162
- | \u{7528}\u{6237}\u{5217}\u{8868}\u{9875} | \u{70B9}\u{51FB}\u{8FD4}\u{56DE}\u{6309}\u{94AE} | \u{8FD4}\u{56DE}\u{4E0A}\u{4E00}\u{9875}\u{9762}\u{5E76}\u{6062}\u{590D}\u{4E4B}\u{524D}\u{6EDA}\u{52A8}\u{4F4D}\u{7F6E} |
6163
- | \u{8BA2}\u{5355}\u{9875}\u{9762} | \u{76F4}\u{63A5}\u{8F93}\u{5165}URL | \u{9A8C}\u{8BC1}\u{767B}\u{5F55}\u{72B6}\u{6001}\u{548C}\u{6743}\u{9650}\u{540E}\u{52A0}\u{8F7D}\u{9875}\u{9762} |
6164
-
6165
- Scenario Outline: PC\u{9875}\u{9762}\u{7EC4}\u{4EF6}\u{4EA4}\u{4E92}\u{6D41}\u{7A0B}
6166
- Given \u{7528}\u{6237}\u{5728}<page_name>\u{9875}\u{9762}\u{4E2D}
6167
- When \u{7528}\u{6237}\u{6267}\u{884C}<user_action>\u{64CD}\u{4F5C}\u{65F6}
6168
- Then \u{7CFB}\u{7EDF}\u{5E94}\u{6309}\u{7167}\u{4EE5}\u{4E0B}\u{903B}\u{8F91}\u{5904}\u{7406}:
6169
- 1. \u{9A8C}\u{8BC1}\u{7528}\u{6237}\u{64CD}\u{4F5C}\u{7684}\u{5408}\u{6CD5}\u{6027}
6170
- 2. \u{66F4}\u{65B0}\u{76F8}\u{5173}\u{7EC4}\u{4EF6}\u{7684}\u{72B6}\u{6001}
6171
- 3. \u{89E6}\u{53D1}\u{76F8}\u{5E94}\u{7684}\u{4E8B}\u{4EF6}\u{5904}\u{7406}\u{51FD}\u{6570}
6172
- 4. \u{6839}\u{636E}\u{5904}\u{7406}\u{7ED3}\u{679C}\u{66F4}\u{65B0}UI\u{663E}\u{793A}
5687
+ ## 1. \u{9700}\u{6C42}\u{6982}\u{8FF0}
6173
5688
 
6174
- Examples:
6175
- | page_name | user_action | \u{9884}\u{671F}\u{5904}\u{7406}\u{903B}\u{8F91} |
6176
- | \u{7528}\u{6237}\u{5217}\u{8868}\u{9875} | \u{70B9}\u{51FB}\u{7F16}\u{8F91}\u{6309}\u{94AE} | \u{663E}\u{793A}\u{7F16}\u{8F91}\u{6A21}\u{6001}\u{6846}\u{FF0C}\u{586B}\u{5145}\u{7528}\u{6237}\u{6570}\u{636E} |
6177
- | \u{5546}\u{54C1}\u{8BE6}\u{60C5}\u{9875} | \u{70B9}\u{51FB}\u{6536}\u{85CF}\u{6309}\u{94AE} | \u{53D1}\u{9001}\u{6536}\u{85CF}\u{8BF7}\u{6C42}\u{FF0C}\u{66F4}\u{65B0}\u{6309}\u{94AE}\u{72B6}\u{6001}\u{548C}\u{6536}\u{85CF}\u{6570} |
6178
- | \u{8BA2}\u{5355}\u{9875}\u{9762} | \u{9009}\u{62E9}\u{652F}\u{4ED8}\u{65B9}\u{5F0F} | \u{663E}\u{793A}\u{5BF9}\u{5E94}\u{652F}\u{4ED8}\u{8868}\u{5355}\u{FF0C}\u{66F4}\u{65B0}\u{8BA2}\u{5355}\u{91D1}\u{989D}\u{8BA1}\u{7B97} |
6179
-
6180
- Scenario Outline: PC\u{9875}\u{9762}\u{6570}\u{636E}\u{52A0}\u{8F7D}\u{5F02}\u{5E38}\u{5904}\u{7406}
6181
- Given \u{7CFB}\u{7EDF}\u{6B63}\u{5728}\u{52A0}\u{8F7D}<page_name>\u{9875}\u{9762}\u{6570}\u{636E}
6182
- When \u{53D1}\u{751F}<data_error>\u{9519}\u{8BEF}\u{65F6}
6183
- Then \u{7CFB}\u{7EDF}\u{5E94}:
6184
- 1. \u{663E}\u{793A}\u{76F8}\u{5E94}\u{7684}\u{9519}\u{8BEF}\u{63D0}\u{793A}\u{4FE1}\u{606F}
6185
- 2. \u{63D0}\u{4F9B}\u{91CD}\u{8BD5}\u{6216}\u{8FD4}\u{56DE}\u{9009}\u{9879}
6186
- 3. \u{8BB0}\u{5F55}\u{9519}\u{8BEF}\u{65E5}\u{5FD7}\u{7528}\u{4E8E}\u{95EE}\u{9898}\u{8FFD}\u{8E2A}
6187
- 4. \u{6839}\u{636E}\u{9519}\u{8BEF}\u{7C7B}\u{578B}\u{91C7}\u{53D6}\u{6062}\u{590D}\u{63AA}\u{65BD}
5689
+ **\u{4E1A}\u{52A1}\u{80CC}\u{666F}**: [\u{63CF}\u{8FF0}APP\u{529F}\u{80FD}\u{80CC}\u{666F}\u{3001}\u{4E1A}\u{52A1}\u{9700}\u{6C42}\u{548C}\u{76EE}\u{6807}]
6188
5690
 
6189
- Examples:
6190
- | page_name | data_error | \u{6062}\u{590D}\u{63AA}\u{65BD} |
6191
- | \u{7528}\u{6237}\u{5217}\u{8868}\u{9875} | \u{7F51}\u{7EDC}\u{8FDE}\u{63A5}\u{5931}\u{8D25} | \u{663E}\u{793A}\u{91CD}\u{8BD5}\u{6309}\u{94AE}\u{FF0C}\u{63D0}\u{4F9B}\u{79BB}\u{7EBF}\u{6570}\u{636E}\u{67E5}\u{770B} |
6192
- | \u{5546}\u{54C1}\u{8BE6}\u{60C5}\u{9875} | \u{6570}\u{636E}\u{683C}\u{5F0F}\u{9519}\u{8BEF} | \u{663E}\u{793A}\u{9ED8}\u{8BA4}\u{6570}\u{636E}\u{FF0C}\u{8BB0}\u{5F55}\u{683C}\u{5F0F}\u{9519}\u{8BEF}\u{8BE6}\u{60C5} |
6193
- | \u{8BA2}\u{5355}\u{9875}\u{9762} | \u{670D}\u{52A1}\u{5668}\u{54CD}\u{5E94}\u{8D85}\u{65F6} | \u{81EA}\u{52A8}\u{91CD}\u{8BD5}\u{8BF7}\u{6C42}\u{FF0C}\u{8D85}\u{8FC7}\u{6B21}\u{6570}\u{540E}\u{63D0}\u{793A}\u{7528}\u{6237} |
6194
- | \u{4EEA}\u{8868}\u{677F}\u{9875} | \u{6743}\u{9650}\u{9A8C}\u{8BC1}\u{5931}\u{8D25} | \u{8DF3}\u{8F6C}\u{5230}\u{767B}\u{5F55}\u{9875}\u{9762}\u{FF0C}\u{4FDD}\u{5B58}\u{5F53}\u{524D}\u{9875}\u{9762}\u{72B6}\u{6001} |
6195
-
6196
- Scenario Outline: PC\u{9875}\u{9762}\u{54CD}\u{5E94}\u{5F0F}\u{5E03}\u{5C40}\u{9002}\u{914D}
6197
- Given \u{7528}\u{6237}\u{5728}\u{4E0D}\u{540C}\u{8BBE}\u{5907}\u{4E0A}\u{8BBF}\u{95EE}<page_name>\u{9875}\u{9762}
6198
- When \u{5C4F}\u{5E55}\u{5C3A}\u{5BF8}\u{4E3A}<screen_size>\u{65F6}
6199
- Then \u{9875}\u{9762}\u{5E94}\u{81EA}\u{52A8}\u{9002}\u{914D}\u{5E76}:
6200
- 1. \u{8C03}\u{6574}\u{5E03}\u{5C40}\u{7ED3}\u{6784}\u{4EE5}\u{9002}\u{5E94}\u{5C4F}\u{5E55}
6201
- 2. \u{4F18}\u{5316}\u{4EA4}\u{4E92}\u{5143}\u{7D20}\u{7684}\u{663E}\u{793A}\u{6548}\u{679C}
6202
- 3. \u{4FDD}\u{6301}\u{6838}\u{5FC3}\u{529F}\u{80FD}\u{7684}\u{53EF}\u{7528}\u{6027}
5691
+ **\u{6838}\u{5FC3}\u{529F}\u{80FD}**: [\u{5217}\u{51FA}APP\u{7684}\u{4E3B}\u{8981}\u{529F}\u{80FD}\u{70B9}]
6203
5692
 
6204
- Examples:
6205
- | page_name | screen_size | \u{9002}\u{914D}\u{7B56}\u{7565} |
6206
- | \u{7528}\u{6237}\u{7BA1}\u{7406}\u{9875} | \u{5927}\u{5C4F}\u{5E55}(>1200px) | \u{663E}\u{793A}\u{4E09}\u{680F}\u{5E03}\u{5C40}\u{FF0C}\u{63D0}\u{4F9B}\u{5B8C}\u{6574}\u{7684}\u{529F}\u{80FD}\u{9762}\u{677F} |
6207
- | \u{7528}\u{6237}\u{7BA1}\u{7406}\u{9875} | \u{4E2D}\u{7B49}\u{5C4F}\u{5E55}(768px-1200px) | \u{663E}\u{793A}\u{4E24}\u{680F}\u{5E03}\u{5C40}\u{FF0C}\u{9690}\u{85CF}\u{90E8}\u{5206}\u{6B21}\u{8981}\u{529F}\u{80FD} |
6208
- | \u{7528}\u{6237}\u{7BA1}\u{7406}\u{9875} | \u{5C0F}\u{5C4F}\u{5E55}(<768px) | \u{663E}\u{793A}\u{5355}\u{680F}\u{5E03}\u{5C40}\u{FF0C}\u{4E3B}\u{8981}\u{529F}\u{80FD}\u{901A}\u{8FC7}\u{6298}\u{53E0}\u{83DC}\u{5355}\u{8BBF}\u{95EE} |
6209
-
6210
- Scenario Outline: PC\u{9875}\u{9762}\u{590D}\u{6742}\u{6570}\u{636E}\u{52A0}\u{8F7D}\u{5904}\u{7406}
6211
- Given \u{7CFB}\u{7EDF}\u{6B63}\u{5728}\u{52A0}\u{8F7D}<page_name>\u{9875}\u{9762}\u{7684}<data_type>\u{6570}\u{636E}
6212
- When \u{6570}\u{636E}\u{91CF}\u{4E3A}<data_volume>\u{65F6}
6213
- Then \u{7CFB}\u{7EDF}\u{5E94}:
6214
- 1. \u{663E}\u{793A}\u{52A0}\u{8F7D}\u{6307}\u{793A}\u{5668}
6215
- 2. \u{5206}\u{6279}\u{52A0}\u{8F7D}\u{6570}\u{636E}\u{4EE5}\u{63D0}\u{9AD8}\u{54CD}\u{5E94}\u{6027}
6216
- 3. \u{5B9E}\u{73B0}\u{865A}\u{62DF}\u{6EDA}\u{52A8}\u{6216}\u{5206}\u{9875}\u{673A}\u{5236}
6217
- 4. \u{63D0}\u{4F9B}\u{6570}\u{636E}\u{52A0}\u{8F7D}\u{8FDB}\u{5EA6}\u{53CD}\u{9988}
5693
+ ## 2. \u{754C}\u{9762}\u{8BBE}\u{8BA1}
6218
5694
 
6219
- Examples:
6220
- | page_name | data_type | data_volume | \u{5904}\u{7406}\u{7B56}\u{7565} |
6221
- | \u{7528}\u{6237}\u{5217}\u{8868}\u{9875} | \u{7528}\u{6237}\u{4FE1}\u{606F} | \u{5C11}\u{91CF}(<100\u{6761}) | \u{76F4}\u{63A5}\u{52A0}\u{8F7D}\u{5E76}\u{6E32}\u{67D3}\u{6240}\u{6709}\u{6570}\u{636E} |
6222
- | \u{7528}\u{6237}\u{5217}\u{8868}\u{9875} | \u{7528}\u{6237}\u{4FE1}\u{606F} | \u{4E2D}\u{7B49}(100-1000\u{6761}) | \u{5206}\u{9875}\u{52A0}\u{8F7D}\u{FF0C}\u{6BCF}\u{9875}50\u{6761}\u{6570}\u{636E} |
6223
- | \u{7528}\u{6237}\u{5217}\u{8868}\u{9875} | \u{7528}\u{6237}\u{4FE1}\u{606F} | \u{5927}\u{91CF}(>1000\u{6761}) | \u{865A}\u{62DF}\u{6EDA}\u{52A8}\u{FF0C}\u{4EC5}\u{6E32}\u{67D3}\u{53EF}\u{89C6}\u{533A}\u{57DF}\u{6570}\u{636E} |
6224
- | \u{4EEA}\u{8868}\u{677F}\u{9875} | \u{56FE}\u{8868}\u{6570}\u{636E} | \u{5B9E}\u{65F6}\u{6570}\u{636E}\u{6D41} | \u{6D41}\u{5F0F}\u{52A0}\u{8F7D}\u{FF0C}\u{5B9A}\u{671F}\u{66F4}\u{65B0}\u{56FE}\u{8868}\u{663E}\u{793A} |
6225
-
6226
- Scenario Outline: PC\u{9875}\u{9762}\u{72B6}\u{6001}\u{7BA1}\u{7406}\u{6D41}\u{7A0B}
6227
- Given \u{9875}\u{9762}\u{5904}\u{4E8E}<current_state>\u{72B6}\u{6001}
6228
- When \u{53D1}\u{751F}<state_change_trigger>\u{65F6}
6229
- Then \u{7CFB}\u{7EDF}\u{5E94}:
6230
- 1. \u{66F4}\u{65B0}\u{9875}\u{9762}\u{72B6}\u{6001}
6231
- 2. \u{89E6}\u{53D1}\u{76F8}\u{5E94}\u{7684}\u{72B6}\u{6001}\u{5904}\u{7406}\u{903B}\u{8F91}
6232
- 3. \u{66F4}\u{65B0}UI\u{663E}\u{793A}
6233
- 4. \u{8BB0}\u{5F55}\u{72B6}\u{6001}\u{53D8}\u{66F4}\u{65E5}\u{5FD7}
5695
+ ### 2.1 \u{9875}\u{9762}\u{5E03}\u{5C40}
5696
+ [\u{63CF}\u{8FF0}\u{4E3B}\u{8981}\u{9875}\u{9762}\u{7684}\u{5E03}\u{5C40}\u{7ED3}\u{6784}\u{548C}\u{754C}\u{9762}\u{5143}\u{7D20}]
6234
5697
 
6235
- Examples:
6236
- | current_state | state_change_trigger | \u{5904}\u{7406}\u{903B}\u{8F91} |
6237
- | \u{5F85}\u{52A0}\u{8F7D} | \u{9875}\u{9762}\u{521D}\u{59CB}\u{5316}\u{5B8C}\u{6210} | \u{5207}\u{6362}\u{5230}\u{52A0}\u{8F7D}\u{4E2D}\u{72B6}\u{6001}\u{FF0C}\u{663E}\u{793A}\u{52A0}\u{8F7D}\u{6307}\u{793A}\u{5668} |
6238
- | \u{52A0}\u{8F7D}\u{4E2D} | \u{6570}\u{636E}\u{52A0}\u{8F7D}\u{6210}\u{529F} | \u{5207}\u{6362}\u{5230}\u{6B63}\u{5E38}\u{663E}\u{793A}\u{72B6}\u{6001}\u{FF0C}\u{6E32}\u{67D3}\u{6570}\u{636E} |
6239
- | \u{52A0}\u{8F7D}\u{4E2D} | \u{6570}\u{636E}\u{52A0}\u{8F7D}\u{5931}\u{8D25} | \u{5207}\u{6362}\u{5230}\u{52A0}\u{8F7D}\u{5931}\u{8D25}\u{72B6}\u{6001}\u{FF0C}\u{663E}\u{793A}\u{9519}\u{8BEF}\u{4FE1}\u{606F} |
6240
- | \u{6B63}\u{5E38}\u{663E}\u{793A} | \u{7528}\u{6237}\u{4FEE}\u{6539}\u{6570}\u{636E} | \u{5207}\u{6362}\u{5230}\u{810F}\u{6570}\u{636E}\u{72B6}\u{6001}\u{FF0C}\u{663E}\u{793A}\u{4FDD}\u{5B58}\u{6309}\u{94AE} |
6241
- | \u{8868}\u{5355}\u{9A8C}\u{8BC1}\u{4E2D} | \u{9A8C}\u{8BC1}\u{5B8C}\u{6210} | \u{6839}\u{636E}\u{9A8C}\u{8BC1}\u{7ED3}\u{679C}\u{5207}\u{6362}\u{5230}\u{6210}\u{529F}\u{6216}\u{5931}\u{8D25}\u{72B6}\u{6001} |
6242
-
6243
- Scenario Outline: PC\u{9875}\u{9762}\u{54CD}\u{5E94}\u{5F0F}\u{5E03}\u{5C40}\u{9002}\u{5E94}\u{6027}\u{4F18}\u{5316}
6244
- Given \u{7528}\u{6237}\u{5728}<device_type>\u{8BBE}\u{5907}\u{4E0A}\u{4F7F}\u{7528}<page_name>\u{9875}\u{9762}
6245
- When \u{53D1}\u{751F}<layout_change_event>\u{65F6}
6246
- Then \u{7CFB}\u{7EDF}\u{5E94}:
6247
- 1. \u{68C0}\u{6D4B}\u{5F53}\u{524D}\u{89C6}\u{53E3}\u{5C3A}\u{5BF8}\u{548C}\u{8BBE}\u{5907}\u{7279}\u{6027}
6248
- 2. \u{5E94}\u{7528}\u{76F8}\u{5E94}\u{7684}\u{54CD}\u{5E94}\u{5F0F}\u{65AD}\u{70B9}\u{89C4}\u{5219}
6249
- 3. \u{8C03}\u{6574}\u{5E03}\u{5C40}\u{7EC4}\u{4EF6}\u{7684}\u{663E}\u{793A}\u{65B9}\u{5F0F}
6250
- 4. \u{4F18}\u{5316}\u{4EA4}\u{4E92}\u{5143}\u{7D20}\u{7684}\u{89E6}\u{63A7}\u{53CB}\u{597D}\u{6027}
5698
+ ### 2.2 \u{7528}\u{6237}\u{754C}\u{9762}
5699
+ [\u{63CF}\u{8FF0}APP\u{7684}\u{7528}\u{6237}\u{754C}\u{9762}\u{8BBE}\u{8BA1}\u{548C}\u{4EA4}\u{4E92}\u{5143}\u{7D20}]
6251
5700
 
6252
- Examples:
6253
- | device_type | page_name | layout_change_event | \u{4F18}\u{5316}\u{7B56}\u{7565} |
6254
- | \u{684C}\u{9762}\u{7AEF} | \u{6570}\u{636E}\u{8868}\u{683C}\u{9875} | \u{7A97}\u{53E3}\u{5C3A}\u{5BF8}\u{7F29}\u{5C0F} | \u{9690}\u{85CF}\u{975E}\u{5173}\u{952E}\u{5217}\u{FF0C}\u{63D0}\u{4F9B}\u{6C34}\u{5E73}\u{6EDA}\u{52A8}\u{6761} |
6255
- | \u{5E73}\u{677F}\u{7AEF} | \u{6570}\u{636E}\u{8868}\u{683C}\u{9875} | \u{5C4F}\u{5E55}\u{65CB}\u{8F6C}\u{4E3A}\u{6A2A}\u{5411} | \u{8C03}\u{6574}\u{5217}\u{5BBD}\u{6BD4}\u{4F8B}\u{FF0C}\u{4F18}\u{5316}\u{6570}\u{636E}\u{5C55}\u{793A}\u{5BC6}\u{5EA6} |
6256
- | \u{79FB}\u{52A8}\u{7AEF} | \u{6570}\u{636E}\u{8868}\u{683C}\u{9875} | \u{9996}\u{6B21}\u{52A0}\u{8F7D}\u{9875}\u{9762} | \u{91C7}\u{7528}\u{5361}\u{7247}\u{5F0F}\u{5E03}\u{5C40}\u{FF0C}\u{652F}\u{6301}\u{6ED1}\u{52A8}\u{67E5}\u{770B}\u{66F4}\u{591A}\u{4FE1}\u{606F} |
6257
- | \u{684C}\u{9762}\u{7AEF} | \u{8868}\u{5355}\u{9875}\u{9762} | \u{7A97}\u{53E3}\u{5C3A}\u{5BF8}\u{653E}\u{5927} | \u{589E}\u{52A0}\u{8868}\u{5355}\u{5143}\u{7D20}\u{95F4}\u{8DDD}\u{FF0C}\u{63D0}\u{4F9B}\u{66F4}\u{5BBD}\u{7684}\u{8F93}\u{5165}\u{6846} |
6258
- | \u{79FB}\u{52A8}\u{7AEF} | \u{8868}\u{5355}\u{9875}\u{9762} | \u{8F6F}\u{952E}\u{76D8}\u{5F39}\u{51FA} | \u{81EA}\u{52A8}\u{8C03}\u{6574}\u{8868}\u{5355}\u{5E03}\u{5C40}\u{FF0C}\u{786E}\u{4FDD}\u{8F93}\u{5165}\u{6846}\u{5728}\u{53EF}\u{89C6}\u{533A}\u{57DF}\u{5185} |
6259
-
6260
- Scenario Outline: PC\u{9875}\u{9762}\u{6027}\u{80FD}\u{4F18}\u{5316}\u{5904}\u{7406}
6261
- Given \u{9875}\u{9762}\u{5305}\u{542B}<content_type>\u{5185}\u{5BB9}
6262
- When \u{9875}\u{9762}\u{52A0}\u{8F7D}\u{65F6}
6263
- Then \u{7CFB}\u{7EDF}\u{5E94}:
6264
- 1. \u{5E94}\u{7528}\u{76F8}\u{5E94}\u{7684}\u{6027}\u{80FD}\u{4F18}\u{5316}\u{7B56}\u{7565}
6265
- 2. \u{76D1}\u{63A7}\u{9875}\u{9762}\u{6027}\u{80FD}\u{6307}\u{6807}
6266
- 3. \u{6839}\u{636E}\u{6027}\u{80FD}\u{6570}\u{636E}\u{8C03}\u{6574}\u{4F18}\u{5316}\u{7B56}\u{7565}
5701
+ ## 3. \u{4EA4}\u{4E92}\u{903B}\u{8F91}
6267
5702
 
6268
- Examples:
6269
- | content_type | \u{4F18}\u{5316}\u{7B56}\u{7565} |
6270
- | \u{5927}\u{91CF}\u{56FE}\u{7247} | \u{4F7F}\u{7528}\u{61D2}\u{52A0}\u{8F7D}\u{FF0C}\u{4F18}\u{5148}\u{52A0}\u{8F7D}\u{9996}\u{5C4F}\u{56FE}\u{7247} |
6271
- | \u{590D}\u{6742}\u{8868}\u{683C} | \u{4F7F}\u{7528}\u{865A}\u{62DF}\u{6EDA}\u{52A8}\u{FF0C}\u{5206}\u{9875}\u{52A0}\u{8F7D}\u{6570}\u{636E} |
6272
- | \u{5927}\u{91CF}\u{6570}\u{636E} | \u{4F7F}\u{7528}\u{6570}\u{636E}\u{5206}\u{7247}\u{FF0C}\u{589E}\u{91CF}\u{6E32}\u{67D3} |
6273
- | \u{52A8}\u{753B}\u{6548}\u{679C} | \u{4F7F}\u{7528}CSS3\u{786C}\u{4EF6}\u{52A0}\u{901F}\u{FF0C}\u{51CF}\u{5C11}\u{91CD}\u{7ED8}\u{91CD}\u{6392} |
6274
-
6275
- Scenario Outline: PC\u{9875}\u{9762}\u{7F13}\u{5B58}\u{5904}\u{7406}\u{6D41}\u{7A0B}
6276
- Given \u{7CFB}\u{7EDF}\u{68C0}\u{6D4B}\u{5230}<cache_condition>
6277
- When \u{7528}\u{6237}\u{8BBF}\u{95EE}\u{9875}\u{9762}\u{65F6}
6278
- Then \u{7CFB}\u{7EDF}\u{5E94}:
6279
- 1. \u{68C0}\u{67E5}\u{7F13}\u{5B58}\u{6709}\u{6548}\u{6027}
6280
- 2. \u{6839}\u{636E}\u{7F13}\u{5B58}\u{72B6}\u{6001}\u{51B3}\u{5B9A}\u{6570}\u{636E}\u{6765}\u{6E90}
6281
- 3. \u{66F4}\u{65B0}\u{7F13}\u{5B58}\u{FF08}\u{5982}\u{9700}\u{8981}\u{FF09}
6282
- 4. \u{663E}\u{793A}\u{6570}\u{636E}\u{7ED9}\u{7528}\u{6237}
5703
+ ### 3.1 \u{7528}\u{6237}\u{64CD}\u{4F5C}\u{6D41}\u{7A0B}
5704
+ [\u{63CF}\u{8FF0}\u{4E3B}\u{8981}\u{7684}\u{7528}\u{6237}\u{64CD}\u{4F5C}\u{6D41}\u{7A0B}\u{548C}\u{5BFC}\u{822A}\u{8DEF}\u{5F84}]
6283
5705
 
6284
- Examples:
6285
- | cache_condition | \u{5904}\u{7406}\u{903B}\u{8F91} |
6286
- | \u{6709}\u{6709}\u{6548}\u{7F13}\u{5B58} | \u{76F4}\u{63A5}\u{4F7F}\u{7528}\u{7F13}\u{5B58}\u{6570}\u{636E}\u{FF0C}\u{540E}\u{53F0}\u{66F4}\u{65B0}\u{7F13}\u{5B58} |
6287
- | \u{7F13}\u{5B58}\u{5DF2}\u{8FC7}\u{671F} | \u{4F7F}\u{7528}\u{7F13}\u{5B58}\u{6570}\u{636E}\u{5FEB}\u{901F}\u{663E}\u{793A}\u{FF0C}\u{540C}\u{65F6}\u{8BF7}\u{6C42}\u{6700}\u{65B0}\u{6570}\u{636E} |
6288
- | \u{65E0}\u{7F13}\u{5B58} | \u{8BF7}\u{6C42}\u{6700}\u{65B0}\u{6570}\u{636E}\u{FF0C}\u{6210}\u{529F}\u{540E}\u{5B58}\u{5165}\u{7F13}\u{5B58} |
6289
- | \u{7F13}\u{5B58}\u{6570}\u{636E}\u{5F02}\u{5E38} | \u{8BF7}\u{6C42}\u{6700}\u{65B0}\u{6570}\u{636E}\u{FF0C}\u{4FEE}\u{590D}\u{7F13}\u{5B58} |
6290
-
6291
- Scenario Outline: PC\u{9875}\u{9762}\u{5E76}\u{53D1}\u{8BF7}\u{6C42}\u{5904}\u{7406}
6292
- Given \u{9875}\u{9762}\u{540C}\u{65F6}\u{53D1}\u{8D77}<concurrent_requests>\u{4E2A}\u{8BF7}\u{6C42}
6293
- When \u{7CFB}\u{7EDF}\u{5904}\u{7406}\u{8FD9}\u{4E9B}\u{8BF7}\u{6C42}\u{65F6}
6294
- Then \u{7CFB}\u{7EDF}\u{5E94}:
6295
- 1. \u{7BA1}\u{7406}\u{8BF7}\u{6C42}\u{961F}\u{5217}
6296
- 2. \u{63A7}\u{5236}\u{5E76}\u{53D1}\u{6570}\u{91CF}
6297
- 3. \u{5904}\u{7406}\u{8BF7}\u{6C42}\u{7ED3}\u{679C}
6298
- 4. \u{66F4}\u{65B0}UI\u{72B6}\u{6001}
5706
+ ### 3.2 \u{4EA4}\u{4E92}\u{89C4}\u{5219}
5707
+ [\u{63CF}\u{8FF0}APP\u{4E2D}\u{7684}\u{4E3B}\u{8981}\u{4EA4}\u{4E92}\u{89C4}\u{5219}\u{548C}\u{54CD}\u{5E94}\u{673A}\u{5236}]
6299
5708
 
6300
- Examples:
6301
- | concurrent_requests | \u{5904}\u{7406}\u{7B56}\u{7565} |
6302
- | 1-3\u{4E2A}\u{8BF7}\u{6C42} | \u{5E76}\u{884C}\u{5904}\u{7406}\u{6240}\u{6709}\u{8BF7}\u{6C42} |
6303
- | 4-10\u{4E2A}\u{8BF7}\u{6C42} | \u{9650}\u{5236}\u{5E76}\u{53D1}\u{6570}\u{4E3A}5\u{FF0C}\u{961F}\u{5217}\u{5904}\u{7406}\u{5269}\u{4F59}\u{8BF7}\u{6C42} |
6304
- | 10\u{4E2A}\u{4EE5}\u{4E0A}\u{8BF7}\u{6C42} | \u{9650}\u{5236}\u{5E76}\u{53D1}\u{6570}\u{4E3A}3\u{FF0C}\u{663E}\u{793A}\u{8BF7}\u{6C42}\u{5904}\u{7406}\u{8FDB}\u{5EA6} |
6305
- | \u{5305}\u{542B}\u{4F9D}\u{8D56}\u{5173}\u{7CFB} | \u{6309}\u{4F9D}\u{8D56}\u{987A}\u{5E8F}\u{5904}\u{7406}\u{FF0C}\u{5148}\u{5904}\u{7406}\u{4F9D}\u{8D56}\u{8BF7}\u{6C42} |
6306
- \`\`\`
6307
-
6308
- ---
6309
-
6310
- **\u{91CD}\u{8981}\u{63D0}\u{9192}**:
6311
- 1. \u{8BF7}\u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{7684}Markdown\u{6587}\u{6863}\u{FF0C}\u{4E0D}\u{8981}\u{7701}\u{7565}\u{4EFB}\u{4F55}\u{7AE0}\u{8282}
6312
- 2. \u{6BCF}\u{4E2A}\u{7AE0}\u{8282}\u{90FD}\u{8981}\u{6709}\u{5B9E}\u{8D28}\u{6027}\u{7684}\u{5185}\u{5BB9}\u{FF0C}\u{4E0D}\u{80FD}\u{53EA}\u{662F}\u{6A21}\u{677F}
6313
- 3. \u{6839}\u{636E}\u{8F93}\u{5165}\u{7684}\u{539F}\u{59CB}\u{5185}\u{5BB9}\u{8FDB}\u{884C}\u{5177}\u{4F53}\u{5206}\u{6790}\u{FF0C}\u{4E0D}\u{8981}\u{4F7F}\u{7528}\u{901A}\u{7528}\u{6A21}\u{677F}
6314
- 4. \u{6587}\u{6863}\u{603B}\u{957F}\u{5EA6}\u{5E94}\u{8BE5}\u{5728}3000\u{5B57}\u{4EE5}\u{4E0A}
6315
- 5. \u{8868}\u{683C}\u{4E2D}\u{7684}\u{5185}\u{5BB9}\u{8981}\u{586B}\u{5199}\u{5177}\u{4F53}\u{4FE1}\u{606F}\u{FF0C}\u{4E0D}\u{8981}\u{4FDD}\u{7559}\u{5360}\u{4F4D}\u{7B26}
6316
- 6. \u{91CD}\u{70B9}\u{5173}\u{6CE8}\u{524D}\u{7AEF}\u{9875}\u{9762}\u{7684}\u{5E03}\u{5C40}\u{3001}\u{6837}\u{5F0F}\u{3001}\u{4EA4}\u{4E92}\u{903B}\u{8F91}\u{7B49}\u{6280}\u{672F}\u{7EC6}\u{8282}
6317
-
6318
- \u{73B0}\u{5728}\u{8BF7}\u{5F00}\u{59CB}\u{751F}\u{6210}\u{5B8C}\u{6574}\u{7684}PC\u{9875}\u{9762}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}\u{FF1A}`;
6319
- const appTemplatePrompt = `\u{4F60}\u{662F}\u{4E00}\u{4F4D}\u{4E13}\u{4E1A}\u{7684}\u{79FB}\u{52A8}\u{7AEF}\u{6280}\u{672F}\u{6587}\u{6863}\u{7F16}\u{5199}\u{4E13}\u{5BB6}\u{3002}\u{8BF7}\u{57FA}\u{4E8E}\u{7528}\u{6237}\u{63D0}\u{4F9B}\u{7684}\u{8F93}\u{5165}\u{5185}\u{5BB9}\u{FF0C}\u{751F}\u{6210}\u{4E00}\u{4EFD}\u{5B8C}\u{6574}\u{3001}\u{8BE6}\u{7EC6}\u{7684}APP\u{5F00}\u{53D1}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}\u{3002}
6320
-
6321
- ## \u{4EFB}\u{52A1}\u{8981}\u{6C42}
6322
- - \u{5FC5}\u{987B}\u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{7684}Markdown\u{683C}\u{5F0F}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}
6323
- - \u{4E0D}\u{8981}\u{53EA}\u{7ED9}\u{51FA}\u{603B}\u{7ED3}\u{FF0C}\u{8981}\u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{7684}\u{6587}\u{6863}\u{5185}\u{5BB9}
6324
- - \u{6BCF}\u{4E2A}\u{7AE0}\u{8282}\u{90FD}\u{8981}\u{6709}\u{8BE6}\u{7EC6}\u{7684}\u{5185}\u{5BB9}\u{FF0C}\u{4E0D}\u{80FD}\u{7701}\u{7565}
6325
- - \u{6587}\u{6863}\u{957F}\u{5EA6}\u{5E94}\u{8BE5}\u{5728}3000\u{5B57}\u{4EE5}\u{4E0A}
6326
- - \u{91CD}\u{70B9}\u{63CF}\u{8FF0}\u{79FB}\u{52A8}\u{7AEF}\u{9875}\u{9762}\u{5E03}\u{5C40}\u{3001}\u{6837}\u{5F0F}\u{3001}\u{4EA4}\u{4E92}\u{903B}\u{8F91}\u{7B49}\u{79FB}\u{52A8}\u{7AEF}\u{76F8}\u{5173}\u{5185}\u{5BB9}
6327
-
6328
- ## \u{8F93}\u{5165}\u{4FE1}\u{606F}
6329
- - **\u{529F}\u{80FD}\u{540D}\u{79F0}**: {featureName}
6330
- - **\u{4E1A}\u{52A1}\u{9886}\u{57DF}**: {businessDomain}
6331
- - **\u{751F}\u{6210}\u{65F6}\u{5E8F}\u{56FE}**: {generateSequenceDiagram}
6332
-
6333
- ## \u{539F}\u{59CB}\u{9700}\u{6C42}\u{5185}\u{5BB9}
6334
- \`\`\`
6335
- {inputContent}
6336
- \`\`\`
6337
-
6338
- ## \u{6587}\u{6863}\u{7ED3}\u{6784}\u{8981}\u{6C42}
6339
- \u{8BF7}\u{4E25}\u{683C}\u{6309}\u{7167}\u{4EE5}\u{4E0B}\u{7ED3}\u{6784}\u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{7684}\u{9700}\u{6C42}\u{6587}\u{6863}\u{FF0C}\u{6BCF}\u{4E2A}\u{7AE0}\u{8282}\u{90FD}\u{8981}\u{6709}\u{8BE6}\u{5B9E}\u{7684}\u{5185}\u{5BB9}\u{FF1A}
6340
-
6341
- # {featureName} - APP\u{5F00}\u{53D1}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}
6342
-
6343
- > **\u{751F}\u{6210}\u{65F6}\u{95F4}**: {currentTime}
6344
- > **\u{4E1A}\u{52A1}\u{9886}\u{57DF}**: {businessDomain}
6345
- > **\u{5E94}\u{7528}\u{7C7B}\u{578B}**: \u{79FB}\u{52A8}\u{7AEF}\u{5E94}\u{7528}
6346
-
6347
- ---
6348
-
6349
- ## 1. \u{9700}\u{6C42}\u{80CC}\u{666F}
6350
-
6351
- **\u{80CC}\u{666F}**: [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}APP\u{529F}\u{80FD}\u{80CC}\u{666F}\u{3001}\u{4E1A}\u{52A1}\u{9700}\u{6C42}\u{548C}\u{76EE}\u{6807}]
6352
-
6353
- **\u{5173}\u{952E}\u{529F}\u{80FD}**: [\u{5217}\u{51FA}APP\u{7684}\u{4E3B}\u{8981}\u{529F}\u{80FD}\u{70B9}]
6354
-
6355
- **\u{6D89}\u{53CA}\u{89D2}\u{8272}**: [\u{5217}\u{51FA}\u{6240}\u{6709}\u{76F8}\u{5173}\u{7528}\u{6237}\u{89D2}\u{8272}]
6356
-
6357
- ## 2. {featureName}\u{529F}\u{80FD}\u{8BBE}\u{8BA1}\u{8BF4}\u{660E}
6358
-
6359
- | | | | | |
6360
- |---|---|---|---|---|
6361
- |**\u{6D41}\u{7A0B}\u{7F16}\u{53F7}**|F001|**\u{6D41}\u{7A0B}\u{540D}\u{79F0}**|{featureName}|
6362
- |**\u{4E1A}\u{52A1}\u{529F}\u{80FD}\u{7F16}\u{53F7}**|BF001|**\u{4E1A}\u{52A1}\u{529F}\u{80FD}\u{540D}\u{79F0}**|{featureName}|
6363
- |**\u{529F}\u{80FD}\u{8BBE}\u{8BA1}\u{7F16}\u{53F7}**|FD001|**\u{7CFB}\u{7EDF}\u{529F}\u{80FD}\u{540D}\u{79F0}**|{featureName}|
6364
- |**\u{524D}\u{7F6E}\u{6761}\u{4EF6}**|[\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{529F}\u{80FD}\u{4F7F}\u{7528}\u{7684}\u{524D}\u{7F6E}\u{6761}\u{4EF6}]|
6365
- |**\u{89D2}\u{8272}\u{FF08}\u{5C97}\u{4F4D}\u{FF09}**|[\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{7528}\u{6237}\u{89D2}\u{8272}\u{53CA}\u{5176}\u{6743}\u{9650}]|
6366
- |**\u{5165}\u{53E3}\u{6E20}\u{9053}**|[\u{63CF}\u{8FF0}\u{529F}\u{80FD}\u{8BBF}\u{95EE}\u{5165}\u{53E3}\u{FF0C}\u{5982}Tab\u{3001}\u{6309}\u{94AE}\u{7B49}]|
6367
- |**\u{529F}\u{80FD}\u{63CF}\u{8FF0}**|[\u{8BE6}\u{7EC6}\u{7684}\u{529F}\u{80FD}\u{63CF}\u{8FF0}]|
6368
- |**\u{8C03}\u{7528}\u{80FD}\u{529B}\u{57DF}/\u{4E2D}\u{5FC3}**|[\u{5982}\u{9002}\u{7528}\u{7684}\u{540E}\u{7AEF}API\u{63A5}\u{53E3}]|
6369
-
6370
- ## 3. \u{9875}\u{9762}\u{5E03}\u{5C40}\u{8BBE}\u{8BA1}
6371
-
6372
- ### 3.1 \u{6574}\u{4F53}\u{5E03}\u{5C40}\u{7ED3}\u{6784}
6373
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{7684}\u{6574}\u{4F53}\u{5E03}\u{5C40}\u{7ED3}\u{6784}\u{FF0C}\u{5305}\u{62EC}\u{5BFC}\u{822A}\u{680F}\u{3001}\u{5185}\u{5BB9}\u{533A}\u{3001}\u{5E95}\u{90E8}\u{64CD}\u{4F5C}\u{680F}\u{7B49}\u{533A}\u{57DF}\u{7684}\u{5212}\u{5206}\u{548C}\u{529F}\u{80FD}]
6374
-
6375
- ### 3.2 \u{9875}\u{9762}\u{533A}\u{57DF}\u{5212}\u{5206}
6376
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{5404}\u{4E2A}\u{529F}\u{80FD}\u{533A}\u{57DF}\u{7684}\u{5E03}\u{5C40}\u{FF0C}\u{4F7F}\u{7528}\u{6587}\u{5B57}\u{63CF}\u{8FF0}\u{533A}\u{57DF}\u{4F4D}\u{7F6E}\u{5173}\u{7CFB}]
6377
-
6378
- ### 3.3 \u{591A}\u{5C4F}\u{5E55}\u{9002}\u{914D}\u{8981}\u{6C42}
6379
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{5728}\u{4E0D}\u{540C}\u{5C4F}\u{5E55}\u{5C3A}\u{5BF8}\u{548C}\u{5206}\u{8FA8}\u{7387}\u{4E0B}\u{7684}\u{5E03}\u{5C40}\u{9002}\u{914D}\u{8981}\u{6C42}]
6380
-
6381
- ### 3.4 \u{54CD}\u{5E94}\u{5F0F}\u{5E03}\u{5C40}\u{89C4}\u{8303}
6382
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{79FB}\u{52A8}\u{7AEF}\u{54CD}\u{5E94}\u{5F0F}\u{5E03}\u{5C40}\u{7684}\u{8BBE}\u{8BA1}\u{89C4}\u{8303}\u{548C}\u{5B9E}\u{73B0}\u{8981}\u{6C42}]
6383
-
6384
- ### 3.5 \u{624B}\u{52BF}\u{533A}\u{57DF}\u{8BBE}\u{8BA1}
6385
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{4E2D}\u{624B}\u{52BF}\u{64CD}\u{4F5C}\u{533A}\u{57DF}\u{7684}\u{8BBE}\u{8BA1}\u{548C}\u{4EA4}\u{4E92}\u{89C4}\u{8303}]
6386
-
6387
- ## 4. \u{6837}\u{5F0F}\u{89C4}\u{8303}\u{8BF4}\u{660E}
6388
-
6389
- ### 4.1 \u{8272}\u{5F69}\u{89C4}\u{8303}
6390
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}APP\u{4F7F}\u{7528}\u{7684}\u{4E3B}\u{8272}\u{8C03}\u{3001}\u{8F85}\u{52A9}\u{8272}\u{3001}\u{72B6}\u{6001}\u{8272}\u{7B49}\u{914D}\u{8272}\u{65B9}\u{6848}]
6391
-
6392
- ### 4.2 \u{5B57}\u{4F53}\u{89C4}\u{8303}
6393
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}APP\u{4F7F}\u{7528}\u{7684}\u{5B57}\u{4F53}\u{3001}\u{5B57}\u{53F7}\u{3001}\u{5B57}\u{91CD}\u{7B49}\u{89C4}\u{8303}\u{FF0C}\u{8003}\u{8651}iOS\u{548C}Android\u{5DEE}\u{5F02}]
6394
-
6395
- ### 4.3 \u{7EC4}\u{4EF6}\u{6837}\u{5F0F}
6396
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}APP\u{4E2D}\u{5404}\u{79CD}UI\u{7EC4}\u{4EF6}\u{7684}\u{6837}\u{5F0F}\u{89C4}\u{8303}\u{FF0C}\u{5982}\u{6309}\u{94AE}\u{3001}\u{8F93}\u{5165}\u{6846}\u{3001}\u{5217}\u{8868}\u{7B49}]
6397
-
6398
- ### 4.4 \u{95F4}\u{8DDD}\u{89C4}\u{8303}
6399
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{5143}\u{7D20}\u{95F4}\u{7684}\u{95F4}\u{8DDD}\u{89C4}\u{8303}\u{FF0C}\u{5305}\u{62EC}\u{5185}\u{8FB9}\u{8DDD}\u{3001}\u{5916}\u{8FB9}\u{8DDD}\u{7B49}]
6400
-
6401
- ### 4.5 \u{56FE}\u{6807}\u{89C4}\u{8303}
6402
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}APP\u{4E2D}\u{56FE}\u{6807}\u{7684}\u{8BBE}\u{8BA1}\u{89C4}\u{8303}\u{548C}\u{4F7F}\u{7528}\u{8981}\u{6C42}]
6403
-
6404
- ### 4.6 \u{4E3B}\u{9898}\u{89C4}\u{8303}
6405
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}APP\u{4E3B}\u{9898}\u{5207}\u{6362}\u{7684}\u{8BBE}\u{8BA1}\u{89C4}\u{8303}\u{548C}\u{5B9E}\u{73B0}\u{8981}\u{6C42}]
6406
-
6407
- ## 5. \u{4EA4}\u{4E92}\u{903B}\u{8F91}\u{8BF4}\u{660E}
6408
-
6409
- ### 5.1 \u{624B}\u{52BF}\u{64CD}\u{4F5C}
6410
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{652F}\u{6301}\u{7684}\u{624B}\u{52BF}\u{64CD}\u{4F5C}\u{FF0C}\u{5982}\u{6ED1}\u{52A8}\u{3001}\u{957F}\u{6309}\u{3001}\u{53CC}\u{51FB}\u{7B49}]
6411
-
6412
- ### 5.2 \u{9875}\u{9762}\u{8DF3}\u{8F6C}\u{903B}\u{8F91}
6413
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{95F4}\u{7684}\u{8DF3}\u{8F6C}\u{5173}\u{7CFB}\u{548C}\u{5BFC}\u{822A}\u{903B}\u{8F91}]
6414
-
6415
- ### 5.3 \u{72B6}\u{6001}\u{7BA1}\u{7406}
6416
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{7684}\u{5404}\u{79CD}\u{72B6}\u{6001}\u{53CA}\u{5176}\u{5207}\u{6362}\u{903B}\u{8F91}\u{FF0C}\u{5982}\u{52A0}\u{8F7D}\u{72B6}\u{6001}\u{3001}\u{7A7A}\u{72B6}\u{6001}\u{3001}\u{9519}\u{8BEF}\u{72B6}\u{6001}\u{7B49}]
6417
-
6418
- ### 5.4 \u{52A8}\u{6548}\u{8BBE}\u{8BA1}
6419
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{4E2D}\u{7684}\u{52A8}\u{753B}\u{6548}\u{679C}\u{548C}\u{8FC7}\u{6E21}\u{6548}\u{679C}\u{FF0C}\u{8003}\u{8651}\u{5E73}\u{53F0}\u{7279}\u{6027}]
6420
-
6421
- ### 5.5 \u{8868}\u{5355}\u{9A8C}\u{8BC1}\u{89C4}\u{5219}
6422
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{4E2D}\u{8868}\u{5355}\u{5143}\u{7D20}\u{7684}\u{9A8C}\u{8BC1}\u{89C4}\u{5219}\u{548C}\u{9519}\u{8BEF}\u{63D0}\u{793A}]
6423
-
6424
- ### 5.6 \u{7528}\u{6237}\u{53CD}\u{9988}\u{673A}\u{5236}
6425
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{7528}\u{6237}\u{64CD}\u{4F5C}\u{540E}\u{7684}\u{53CD}\u{9988}\u{673A}\u{5236}\u{FF0C}\u{5982}Toast\u{3001}Loading\u{7B49}]
6426
-
6427
- ### 5.7 \u{79BB}\u{7EBF}\u{4EA4}\u{4E92}\u{5904}\u{7406}
6428
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{5E94}\u{7528}\u{5728}\u{79BB}\u{7EBF}\u{72B6}\u{6001}\u{4E0B}\u{7684}\u{4EA4}\u{4E92}\u{5904}\u{7406}\u{673A}\u{5236}]
6429
-
6430
- ## 6. \u{754C}\u{9762}\u{5B57}\u{6BB5}\u{8BF4}\u{660E}
6431
-
6432
- ### 6.1 \u{4E3B}\u{8981}\u{6570}\u{636E}\u{5B9E}\u{4F53}
6433
- [\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{6D89}\u{53CA}\u{7684}\u{4E3B}\u{8981}\u{6570}\u{636E}\u{5B9E}\u{4F53}]
6434
-
6435
- \u{5B9E}\u{4F53}\u{4E00}
6436
- | | | | | |
6437
- |---|---|---|---|---|
6438
- |**\u{5B57}\u{6BB5}\u{540D}\u{79F0}**|**\u{6570}\u{636E}\u{7C7B}\u{578B}**|**\u{957F}\u{5EA6}**|**\u{5FC5}\u{586B}**|**\u{8BF4}\u{660E}**|
6439
- |[\u{5B57}\u{6BB5}1]|[\u{7C7B}\u{578B}]|[\u{957F}\u{5EA6}]|[\u{662F}/\u{5426}]|[\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}]|
6440
- |[\u{5B57}\u{6BB5}2]|[\u{7C7B}\u{578B}]|[\u{957F}\u{5EA6}]|[\u{662F}/\u{5426}]|[\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}]|
6441
- |[\u{6DFB}\u{52A0}\u{66F4}\u{591A}\u{76F8}\u{5173}\u{5B57}\u{6BB5}...]|||
6442
-
6443
- ### 6.2 \u{8F93}\u{5165}\u{63A7}\u{4EF6}\u{8BF4}\u{660E}
6444
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{4E2D}\u{5404}\u{79CD}\u{8F93}\u{5165}\u{63A7}\u{4EF6}\u{7684}\u{4F7F}\u{7528}\u{89C4}\u{8303}]
6445
-
6446
- ### 6.3 \u{5C55}\u{793A}\u{63A7}\u{4EF6}\u{8BF4}\u{660E}
6447
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{4E2D}\u{5404}\u{79CD}\u{5C55}\u{793A}\u{63A7}\u{4EF6}\u{7684}\u{4F7F}\u{7528}\u{89C4}\u{8303}]
6448
-
6449
- ## 7. \u{754C}\u{9762}\u{64CD}\u{4F5C}\u{8BF4}\u{660E}
6450
-
6451
- | | | |
6452
- |---|---|---|
6453
- |**\u{5E8F}\u{53F7}**|**\u{4E1A}\u{52A1}\u{64CD}\u{4F5C}**|**\u{8BF4}\u{660E}**|
6454
- |1|[\u{64CD}\u{4F5C}1]|[\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{64CD}\u{4F5C}\u{89E6}\u{53D1}\u{6761}\u{4EF6}\u{3001}\u{6267}\u{884C}\u{8FC7}\u{7A0B}\u{548C}\u{7ED3}\u{679C}]|
6455
- |2|[\u{64CD}\u{4F5C}2]|[\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{64CD}\u{4F5C}\u{89E6}\u{53D1}\u{6761}\u{4EF6}\u{3001}\u{6267}\u{884C}\u{8FC7}\u{7A0B}\u{548C}\u{7ED3}\u{679C}]|
6456
- |[\u{6DFB}\u{52A0}\u{66F4}\u{591A}\u{64CD}\u{4F5C}...]
6457
-
6458
- ## 8. \u{7EC4}\u{4EF6}\u{7ED3}\u{6784}\u{8BBE}\u{8BA1}
6459
-
6460
- ### 8.1 \u{9875}\u{9762}\u{7EC4}\u{4EF6}\u{6811}
6461
- [\u{4F7F}\u{7528}\u{6811}\u{72B6}\u{7ED3}\u{6784}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{7684}\u{7EC4}\u{4EF6}\u{5C42}\u{6B21}\u{5173}\u{7CFB}]
6462
-
6463
- ### 8.2 \u{6838}\u{5FC3}\u{7EC4}\u{4EF6}\u{8BF4}\u{660E}
6464
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{4E2D}\u{7684}\u{6838}\u{5FC3}\u{7EC4}\u{4EF6}\u{529F}\u{80FD}\u{3001}\u{5C5E}\u{6027}\u{548C}\u{4F7F}\u{7528}\u{65B9}\u{5F0F}]
6465
-
6466
- ### 8.3 \u{7EC4}\u{4EF6}\u{901A}\u{4FE1}\u{673A}\u{5236}
6467
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{7EC4}\u{4EF6}\u{95F4}\u{7684}\u{901A}\u{4FE1}\u{65B9}\u{5F0F}\u{548C}\u{6570}\u{636E}\u{6D41}]
6468
-
6469
- ### 8.4 \u{7EC4}\u{4EF6}\u{72B6}\u{6001}\u{7BA1}\u{7406}
6470
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{7EC4}\u{4EF6}\u{5185}\u{90E8}\u{72B6}\u{6001}\u{548C}\u{5168}\u{5C40}\u{72B6}\u{6001}\u{7684}\u{7BA1}\u{7406}\u{65B9}\u{5F0F}]
6471
-
6472
- ## 9. \u{5E73}\u{53F0}\u{7279}\u{6027}\u{8003}\u{8651}
6473
-
6474
- ### 9.1 iOS\u{5E73}\u{53F0}\u{9002}\u{914D}
6475
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{5728}iOS\u{5E73}\u{53F0}\u{4E0A}\u{7684}\u{7279}\u{6B8A}\u{9002}\u{914D}\u{8981}\u{6C42}]
6476
-
6477
- ### 9.2 Android\u{5E73}\u{53F0}\u{9002}\u{914D}
6478
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{5728}Android\u{5E73}\u{53F0}\u{4E0A}\u{7684}\u{7279}\u{6B8A}\u{9002}\u{914D}\u{8981}\u{6C42}]
6479
-
6480
- ### 9.3 \u{7CFB}\u{7EDF}\u{6743}\u{9650}\u{8981}\u{6C42}
6481
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}APP\u{9700}\u{8981}\u{7533}\u{8BF7}\u{7684}\u{7CFB}\u{7EDF}\u{6743}\u{9650}\u{53CA}\u{5176}\u{4F7F}\u{7528}\u{573A}\u{666F}]
6482
-
6483
- ## 11. \u{4E1A}\u{52A1}\u{5BF9}\u{8C61}\u{65F6}\u{5E8F}\u{56FE}
6484
-
6485
- \`\`\`mermaid
6486
- sequenceDiagram
6487
- participant \u{7528}\u{6237}
6488
- participant \u{79FB}\u{52A8}\u{7AEF}APP
6489
- participant \u{8DEF}\u{7531}\u{7BA1}\u{7406}\u{5668}
6490
- participant \u{72B6}\u{6001}\u{7BA1}\u{7406}\u{5668}
6491
- participant \u{8BA4}\u{8BC1}\u{670D}\u{52A1}
6492
- participant \u{6743}\u{9650}\u{670D}\u{52A1}
6493
- participant \u{540E}\u{7AEF}\u{670D}\u{52A1}
6494
- participant \u{6570}\u{636E}\u{5E93}
6495
- participant \u{7F13}\u{5B58}\u{670D}\u{52A1}
6496
- participant \u{6D88}\u{606F}\u{961F}\u{5217}
6497
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
6498
- participant \u{76D1}\u{63A7}\u{670D}\u{52A1}
6499
-
6500
- %% \u{5E94}\u{7528}\u{542F}\u{52A8}\u{6D41}\u{7A0B}
6501
- \u{7528}\u{6237}->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{542F}\u{52A8}\u{5E94}\u{7528}
6502
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{8DEF}\u{7531}\u{7BA1}\u{7406}\u{5668}: \u{89E3}\u{6790}\u{521D}\u{59CB}\u{8DEF}\u{7531}
6503
- \u{8DEF}\u{7531}\u{7BA1}\u{7406}\u{5668}-->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8FD4}\u{56DE}\u{8DEF}\u{7531}\u{4FE1}\u{606F}
6504
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{72B6}\u{6001}\u{7BA1}\u{7406}\u{5668}: \u{521D}\u{59CB}\u{5316}\u{5E94}\u{7528}\u{72B6}\u{6001}
6505
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{8BA4}\u{8BC1}\u{670D}\u{52A1}: \u{9A8C}\u{8BC1}\u{7528}\u{6237}\u{8EAB}\u{4EFD}
6506
- \u{8BA4}\u{8BC1}\u{670D}\u{52A1}-->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8FD4}\u{56DE}\u{8BA4}\u{8BC1}\u{7ED3}\u{679C}
6507
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{6743}\u{9650}\u{670D}\u{52A1}: \u{68C0}\u{67E5}\u{7528}\u{6237}\u{6743}\u{9650}
6508
- \u{6743}\u{9650}\u{670D}\u{52A1}-->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8FD4}\u{56DE}\u{6743}\u{9650}\u{4FE1}\u{606F}
6509
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{72B6}\u{6001}\u{7BA1}\u{7406}\u{5668}: \u{66F4}\u{65B0}\u{8BA4}\u{8BC1}\u{72B6}\u{6001}
6510
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{7528}\u{6237}: \u{663E}\u{793A}\u{4E3B}\u{754C}\u{9762}
6511
-
6512
- %% \u{9875}\u{9762}\u{52A0}\u{8F7D}\u{6D41}\u{7A0B}
6513
- \u{7528}\u{6237}->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8BBF}\u{95EE}\u{529F}\u{80FD}\u{9875}\u{9762}
6514
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{8DEF}\u{7531}\u{7BA1}\u{7406}\u{5668}: \u{89E3}\u{6790}\u{9875}\u{9762}\u{8DEF}\u{7531}
6515
- \u{8DEF}\u{7531}\u{7BA1}\u{7406}\u{5668}-->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8FD4}\u{56DE}\u{8DEF}\u{7531}\u{4FE1}\u{606F}
6516
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{72B6}\u{6001}\u{7BA1}\u{7406}\u{5668}: \u{521D}\u{59CB}\u{5316}\u{9875}\u{9762}\u{72B6}\u{6001}
6517
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{7F13}\u{5B58}\u{670D}\u{52A1}: \u{67E5}\u{8BE2}\u{7F13}\u{5B58}\u{6570}\u{636E}
6518
- alt \u{7F13}\u{5B58}\u{4E2D}\u{6709}\u{6570}\u{636E}
6519
- \u{7F13}\u{5B58}\u{670D}\u{52A1}-->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8FD4}\u{56DE}\u{7F13}\u{5B58}\u{6570}\u{636E}
6520
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{72B6}\u{6001}\u{7BA1}\u{7406}\u{5668}: \u{66F4}\u{65B0}\u{9875}\u{9762}\u{72B6}\u{6001}
6521
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{7528}\u{6237}: \u{6E32}\u{67D3}\u{9875}\u{9762}\u{5185}\u{5BB9}
6522
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{76D1}\u{63A7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{7F13}\u{5B58}\u{547D}\u{4E2D}
6523
- else \u{7F13}\u{5B58}\u{4E2D}\u{65E0}\u{6570}\u{636E}
6524
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{540E}\u{7AEF}\u{670D}\u{52A1}: \u{53D1}\u{8D77}API\u{8BF7}\u{6C42}
6525
- \u{540E}\u{7AEF}\u{670D}\u{52A1}->>\u{6570}\u{636E}\u{5E93}: \u{67E5}\u{8BE2}\u{6570}\u{636E}
6526
- \u{6570}\u{636E}\u{5E93}-->>\u{540E}\u{7AEF}\u{670D}\u{52A1}: \u{8FD4}\u{56DE}\u{67E5}\u{8BE2}\u{7ED3}\u{679C}
6527
- \u{540E}\u{7AEF}\u{670D}\u{52A1}-->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8FD4}\u{56DE}\u{54CD}\u{5E94}\u{6570}\u{636E}
6528
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{7F13}\u{5B58}\u{670D}\u{52A1}: \u{5B58}\u{50A8}\u{6570}\u{636E}\u{5230}\u{7F13}\u{5B58}
6529
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{72B6}\u{6001}\u{7BA1}\u{7406}\u{5668}: \u{66F4}\u{65B0}\u{9875}\u{9762}\u{72B6}\u{6001}
6530
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{7528}\u{6237}: \u{6E32}\u{67D3}\u{9875}\u{9762}\u{5185}\u{5BB9}
6531
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{76D1}\u{63A7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{6570}\u{636E}\u{52A0}\u{8F7D}
6532
- end
6533
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{9875}\u{9762}\u{8BBF}\u{95EE}\u{65E5}\u{5FD7}
6534
- \`\`\`
6535
-
6536
- ### 11.2 \u{65B9}\u{6848}\u{4E8C}\u{FF1A}\u{66FF}\u{4EE3}\u{6D41}\u{7A0B}\u{FF08}\u{4E0D}\u{540C}\u{6709}\u{6548}\u{8DEF}\u{5F84}\u{FF09}
6537
-
6538
- #### 11.2.1 \u{624B}\u{52BF}\u{4EA4}\u{4E92}\u{8BBE}\u{8BA1}\u{6D41}\u{7A0B}
6539
- \`\`\`mermaid
6540
- sequenceDiagram
6541
- participant \u{7528}\u{6237}
6542
- participant \u{79FB}\u{52A8}\u{7AEF}APP
6543
- participant \u{624B}\u{52BF}\u{8BC6}\u{522B}\u{5668}
6544
- participant \u{4EA4}\u{4E92}\u{5904}\u{7406}\u{5668}
6545
- participant \u{72B6}\u{6001}\u{7BA1}\u{7406}\u{5668}
6546
-
6547
- \u{7528}\u{6237}->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{6267}\u{884C}\u{624B}\u{52BF}\u{64CD}\u{4F5C}
6548
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{624B}\u{52BF}\u{8BC6}\u{522B}\u{5668}: \u{8BC6}\u{522B}\u{624B}\u{52BF}\u{7C7B}\u{578B}
6549
- \u{624B}\u{52BF}\u{8BC6}\u{522B}\u{5668}-->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8FD4}\u{56DE}\u{624B}\u{52BF}\u{8BC6}\u{522B}\u{7ED3}\u{679C}
6550
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{4EA4}\u{4E92}\u{5904}\u{7406}\u{5668}: \u{5904}\u{7406}\u{624B}\u{52BF}\u{64CD}\u{4F5C}
6551
- \u{4EA4}\u{4E92}\u{5904}\u{7406}\u{5668}->>\u{72B6}\u{6001}\u{7BA1}\u{7406}\u{5668}: \u{66F4}\u{65B0}\u{5E94}\u{7528}\u{72B6}\u{6001}
6552
- \u{72B6}\u{6001}\u{7BA1}\u{7406}\u{5668}-->>\u{4EA4}\u{4E92}\u{5904}\u{7406}\u{5668}: \u{8FD4}\u{56DE}\u{72B6}\u{6001}\u{66F4}\u{65B0}\u{7ED3}\u{679C}
6553
- \u{4EA4}\u{4E92}\u{5904}\u{7406}\u{5668}-->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8FD4}\u{56DE}\u{5904}\u{7406}\u{7ED3}\u{679C}
6554
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{7528}\u{6237}: \u{53CD}\u{9988}\u{624B}\u{52BF}\u{64CD}\u{4F5C}\u{7ED3}\u{679C}
6555
- \`\`\`
6556
-
6557
- #### 11.2.2 \u{7EC4}\u{4EF6}\u{8BBE}\u{8BA1}\u{89C4}\u{8303}\u{6D41}\u{7A0B}
6558
- \`\`\`mermaid
6559
- sequenceDiagram
6560
- participant \u{79FB}\u{52A8}\u{7AEF}APP
6561
- participant \u{7EC4}\u{4EF6}\u{5E93}
6562
- participant \u{8BBE}\u{8BA1}\u{7CFB}\u{7EDF}
6563
- participant \u{6837}\u{5F0F}\u{7BA1}\u{7406}\u{5668}
6564
- participant \u{5E03}\u{5C40}\u{5F15}\u{64CE}
6565
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
6566
-
6567
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{7EC4}\u{4EF6}\u{5E93}: \u{8BF7}\u{6C42}\u{7EC4}\u{4EF6}\u{89C4}\u{8303}
6568
- \u{7EC4}\u{4EF6}\u{5E93}->>\u{8BBE}\u{8BA1}\u{7CFB}\u{7EDF}: \u{83B7}\u{53D6}\u{8BBE}\u{8BA1}\u{89C4}\u{8303}
6569
- \u{8BBE}\u{8BA1}\u{7CFB}\u{7EDF}-->>\u{7EC4}\u{4EF6}\u{5E93}: \u{8FD4}\u{56DE}\u{8BBE}\u{8BA1}\u{89C4}\u{8303}
6570
- \u{7EC4}\u{4EF6}\u{5E93}->>\u{6837}\u{5F0F}\u{7BA1}\u{7406}\u{5668}: \u{5E94}\u{7528}\u{6837}\u{5F0F}\u{89C4}\u{5219}
6571
- \u{6837}\u{5F0F}\u{7BA1}\u{7406}\u{5668}-->>\u{7EC4}\u{4EF6}\u{5E93}: \u{8FD4}\u{56DE}\u{6837}\u{5F0F}\u{914D}\u{7F6E}
6572
- \u{7EC4}\u{4EF6}\u{5E93}->>\u{5E03}\u{5C40}\u{5F15}\u{64CE}: \u{8BA1}\u{7B97}\u{5E03}\u{5C40}
6573
- \u{5E03}\u{5C40}\u{5F15}\u{64CE}-->>\u{7EC4}\u{4EF6}\u{5E93}: \u{8FD4}\u{56DE}\u{5E03}\u{5C40}\u{4FE1}\u{606F}
6574
- \u{7EC4}\u{4EF6}\u{5E93}-->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8FD4}\u{56DE}\u{7EC4}\u{4EF6}\u{5B9E}\u{73B0}
6575
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{7EC4}\u{4EF6}\u{4F7F}\u{7528}\u{65E5}\u{5FD7}
6576
- \`\`\`
6577
-
6578
- ### 11.3 \u{5F02}\u{5E38}\u{6D41}\u{7A0B}\u{FF08}\u{9519}\u{8BEF}\u{5904}\u{7406}\u{FF09}
6579
-
6580
- #### 11.3.1 \u{8BBE}\u{5907}\u{517C}\u{5BB9}\u{6027}\u{9519}\u{8BEF}
6581
- \`\`\`mermaid
6582
- sequenceDiagram
6583
- participant \u{7528}\u{6237}
6584
- participant \u{79FB}\u{52A8}\u{7AEF}APP
6585
- participant \u{8BBE}\u{5907}\u{517C}\u{5BB9}\u{6027}\u{68C0}\u{67E5}\u{5668}
6586
- participant \u{9519}\u{8BEF}\u{5904}\u{7406}\u{5668}
6587
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
6588
-
6589
- \u{7528}\u{6237}->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{542F}\u{52A8}\u{5E94}\u{7528}
6590
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{8BBE}\u{5907}\u{517C}\u{5BB9}\u{6027}\u{68C0}\u{67E5}\u{5668}: \u{68C0}\u{67E5}\u{8BBE}\u{5907}\u{517C}\u{5BB9}\u{6027}
6591
- \u{8BBE}\u{5907}\u{517C}\u{5BB9}\u{6027}\u{68C0}\u{67E5}\u{5668}-->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8FD4}\u{56DE}\u{4E0D}\u{517C}\u{5BB9}\u{9519}\u{8BEF}
6592
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{9519}\u{8BEF}\u{5904}\u{7406}\u{5668}: \u{5904}\u{7406}\u{517C}\u{5BB9}\u{6027}\u{9519}\u{8BEF}
6593
- \u{9519}\u{8BEF}\u{5904}\u{7406}\u{5668}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{517C}\u{5BB9}\u{6027}\u{9519}\u{8BEF}
6594
- \u{9519}\u{8BEF}\u{5904}\u{7406}\u{5668}-->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8FD4}\u{56DE}\u{9519}\u{8BEF}\u{5904}\u{7406}\u{7ED3}\u{679C}
6595
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{7528}\u{6237}: \u{663E}\u{793A}\u{517C}\u{5BB9}\u{6027}\u{63D0}\u{793A}
6596
- \`\`\`
6597
-
6598
- #### 11.3.2 \u{6743}\u{9650}\u{51B2}\u{7A81}\u{9519}\u{8BEF}
6599
- \`\`\`mermaid
6600
- sequenceDiagram
6601
- participant \u{7528}\u{6237}
6602
- participant \u{79FB}\u{52A8}\u{7AEF}APP
6603
- participant \u{6743}\u{9650}\u{670D}\u{52A1}
6604
- participant \u{9519}\u{8BEF}\u{5904}\u{7406}\u{5668}
6605
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
6606
- participant \u{8BBE}\u{7F6E}\u{7BA1}\u{7406}\u{5668}
6607
-
6608
- \u{7528}\u{6237}->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{6267}\u{884C}\u{9700}\u{8981}\u{6743}\u{9650}\u{7684}\u{64CD}\u{4F5C}
6609
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{6743}\u{9650}\u{670D}\u{52A1}: \u{68C0}\u{67E5}\u{6240}\u{9700}\u{6743}\u{9650}
6610
- \u{6743}\u{9650}\u{670D}\u{52A1}-->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8FD4}\u{56DE}\u{6743}\u{9650}\u{62D2}\u{7EDD}
6611
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{9519}\u{8BEF}\u{5904}\u{7406}\u{5668}: \u{5904}\u{7406}\u{6743}\u{9650}\u{9519}\u{8BEF}
6612
- \u{9519}\u{8BEF}\u{5904}\u{7406}\u{5668}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{6743}\u{9650}\u{9519}\u{8BEF}
6613
- \u{9519}\u{8BEF}\u{5904}\u{7406}\u{5668}->>\u{8BBE}\u{7F6E}\u{7BA1}\u{7406}\u{5668}: \u{8BF7}\u{6C42}\u{6743}\u{9650}\u{8BBE}\u{7F6E}
6614
- \u{8BBE}\u{7F6E}\u{7BA1}\u{7406}\u{5668}-->>\u{9519}\u{8BEF}\u{5904}\u{7406}\u{5668}: \u{8FD4}\u{56DE}\u{8BBE}\u{7F6E}\u{7ED3}\u{679C}
6615
- \u{9519}\u{8BEF}\u{5904}\u{7406}\u{5668}-->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8FD4}\u{56DE}\u{9519}\u{8BEF}\u{5904}\u{7406}\u{7ED3}\u{679C}
6616
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{7528}\u{6237}: \u{663E}\u{793A}\u{6743}\u{9650}\u{8BF7}\u{6C42}\u{63D0}\u{793A}
6617
- \`\`\`
6618
-
6619
- ### 11.4 \u{8FB9}\u{7F18}\u{60C5}\u{51B5}\u{6D41}\u{7A0B}\u{FF08}\u{5E76}\u{53D1}\u{3001}\u{8D85}\u{65F6}\u{7B49}\u{FF09}
6620
-
6621
- #### 11.4.1 \u{79BB}\u{7EBF}\u{529F}\u{80FD}\u{5904}\u{7406}
6622
- \`\`\`mermaid
6623
- sequenceDiagram
6624
- participant \u{7528}\u{6237}
6625
- participant \u{79FB}\u{52A8}\u{7AEF}APP
6626
- participant \u{7F51}\u{7EDC}\u{72B6}\u{6001}\u{68C0}\u{6D4B}\u{5668}
6627
- participant \u{79BB}\u{7EBF}\u{6570}\u{636E}\u{7BA1}\u{7406}\u{5668}
6628
- participant \u{672C}\u{5730}\u{6570}\u{636E}\u{5E93}
6629
-
6630
- \u{7528}\u{6237}->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{6267}\u{884C}\u{6570}\u{636E}\u{64CD}\u{4F5C}
6631
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{7F51}\u{7EDC}\u{72B6}\u{6001}\u{68C0}\u{6D4B}\u{5668}: \u{68C0}\u{67E5}\u{7F51}\u{7EDC}\u{72B6}\u{6001}
6632
- \u{7F51}\u{7EDC}\u{72B6}\u{6001}\u{68C0}\u{6D4B}\u{5668}-->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8FD4}\u{56DE}\u{65E0}\u{7F51}\u{7EDC}\u{8FDE}\u{63A5}
6633
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{79BB}\u{7EBF}\u{6570}\u{636E}\u{7BA1}\u{7406}\u{5668}: \u{5904}\u{7406}\u{79BB}\u{7EBF}\u{64CD}\u{4F5C}
6634
- \u{79BB}\u{7EBF}\u{6570}\u{636E}\u{7BA1}\u{7406}\u{5668}->>\u{672C}\u{5730}\u{6570}\u{636E}\u{5E93}: \u{5B58}\u{50A8}\u{79BB}\u{7EBF}\u{6570}\u{636E}
6635
- \u{672C}\u{5730}\u{6570}\u{636E}\u{5E93}-->>\u{79BB}\u{7EBF}\u{6570}\u{636E}\u{7BA1}\u{7406}\u{5668}: \u{8FD4}\u{56DE}\u{5B58}\u{50A8}\u{7ED3}\u{679C}
6636
- \u{79BB}\u{7EBF}\u{6570}\u{636E}\u{7BA1}\u{7406}\u{5668}-->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8FD4}\u{56DE}\u{5904}\u{7406}\u{7ED3}\u{679C}
6637
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{7528}\u{6237}: \u{663E}\u{793A}\u{79BB}\u{7EBF}\u{64CD}\u{4F5C}\u{6210}\u{529F}\u{63D0}\u{793A}
6638
- \`\`\`
6639
-
6640
- #### 11.4.2 \u{590D}\u{6742}\u{5E03}\u{5C40}\u{5904}\u{7406}
6641
- \`\`\`mermaid
6642
- sequenceDiagram
6643
- participant \u{79FB}\u{52A8}\u{7AEF}APP
6644
- participant \u{5E03}\u{5C40}\u{5F15}\u{64CE}
6645
- participant \u{6027}\u{80FD}\u{4F18}\u{5316}\u{5668}
6646
- participant \u{7F13}\u{5B58}\u{670D}\u{52A1}
6647
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
6648
-
6649
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{5E03}\u{5C40}\u{5F15}\u{64CE}: \u{8BF7}\u{6C42}\u{590D}\u{6742}\u{5E03}\u{5C40}\u{8BA1}\u{7B97}
6650
- \u{5E03}\u{5C40}\u{5F15}\u{64CE}->>\u{5E03}\u{5C40}\u{5F15}\u{64CE}: \u{6267}\u{884C}\u{591A}\u{533A}\u{57DF}\u{5E03}\u{5C40}\u{7B97}\u{6CD5}
6651
- alt \u{5E03}\u{5C40}\u{8BA1}\u{7B97}\u{8D85}\u{65F6}
6652
- \u{5E03}\u{5C40}\u{5F15}\u{64CE}->>\u{6027}\u{80FD}\u{4F18}\u{5316}\u{5668}: \u{8BF7}\u{6C42}\u{4F18}\u{5316}\u{7B56}\u{7565}
6653
- \u{6027}\u{80FD}\u{4F18}\u{5316}\u{5668}-->>\u{5E03}\u{5C40}\u{5F15}\u{64CE}: \u{8FD4}\u{56DE}\u{7B80}\u{5316}\u{7B56}\u{7565}
6654
- \u{5E03}\u{5C40}\u{5F15}\u{64CE}->>\u{5E03}\u{5C40}\u{5F15}\u{64CE}: \u{5E94}\u{7528}\u{7B80}\u{5316}\u{8BA1}\u{7B97}
6655
- end
6656
- \u{5E03}\u{5C40}\u{5F15}\u{64CE}-->>\u{79FB}\u{52A8}\u{7AEF}APP: \u{8FD4}\u{56DE}\u{4F18}\u{5316}\u{5E03}\u{5C40}
6657
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{7F13}\u{5B58}\u{670D}\u{52A1}: \u{5B58}\u{50A8}\u{5E03}\u{5C40}\u{7ED3}\u{679C}
6658
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{6027}\u{80FD}\u{4F18}\u{5316}\u{5668}: \u{8BB0}\u{5F55}\u{5E03}\u{5C40}\u{6027}\u{80FD}
6659
- \u{79FB}\u{52A8}\u{7AEF}APP->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{5E03}\u{5C40}\u{65E5}\u{5FD7}
6660
- \`\`\`
6661
-
6662
- ## 12. \u{4E1A}\u{52A1}\u{72B6}\u{6001}\u{63CF}\u{8FF0}
6663
-
6664
- | | | |
6665
- |---|---|---|
6666
- |**\u{72B6}\u{6001}\u{7F16}\u{53F7}**|**\u{72B6}\u{6001}\u{540D}\u{79F0}**|**\u{63CF}\u{8FF0}**|
6667
- |01|\u{5F85}\u{52A0}\u{8F7D}|\u{9875}\u{9762}\u{521D}\u{59CB}\u{5316}\u{72B6}\u{6001}|
6668
- |02|\u{52A0}\u{8F7D}\u{4E2D}|\u{6570}\u{636E}\u{52A0}\u{8F7D}\u{72B6}\u{6001}|
6669
- |03|\u{6B63}\u{5E38}\u{663E}\u{793A}|\u{9875}\u{9762}\u{6B63}\u{5E38}\u{663E}\u{793A}\u{72B6}\u{6001}|
6670
- |04|\u{6570}\u{636E}\u{4E3A}\u{7A7A}|\u{65E0}\u{6570}\u{636E}\u{72B6}\u{6001}|
6671
- |05|\u{52A0}\u{8F7D}\u{5931}\u{8D25}|\u{6570}\u{636E}\u{52A0}\u{8F7D}\u{5931}\u{8D25}\u{72B6}\u{6001}|
6672
- |[\u{6DFB}\u{52A0}\u{66F4}\u{591A}\u{72B6}\u{6001}...]
6673
-
6674
- ## 13. \u{79FB}\u{52A8}\u{7AEF}\u{5904}\u{7406}\u{903B}\u{8F91}\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}
6675
-
6676
- ### 13.1 \u{9875}\u{9762}\u{521D}\u{59CB}\u{5316}\u{903B}\u{8F91}
6677
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{52A0}\u{8F7D}\u{65F6}\u{7684}\u{521D}\u{59CB}\u{5316}\u{5904}\u{7406}\u{903B}\u{8F91}]
6678
-
6679
- ### 13.2 \u{6570}\u{636E}\u{83B7}\u{53D6}\u{903B}\u{8F91}
6680
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{6570}\u{636E}\u{83B7}\u{53D6}\u{7684}\u{5904}\u{7406}\u{903B}\u{8F91}\u{FF0C}\u{5305}\u{62EC}API\u{8C03}\u{7528}\u{3001}\u{6570}\u{636E}\u{5904}\u{7406}\u{7B49}]
6681
-
6682
- ### 13.3 \u{7528}\u{6237}\u{4EA4}\u{4E92}\u{5904}\u{7406}\u{903B}\u{8F91}
6683
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{7528}\u{6237}\u{5404}\u{79CD}\u{4EA4}\u{4E92}\u{64CD}\u{4F5C}\u{7684}\u{5904}\u{7406}\u{903B}\u{8F91}]
6684
-
6685
- ### 13.4 \u{6570}\u{636E}\u{5C55}\u{793A}\u{903B}\u{8F91}
6686
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{6570}\u{636E}\u{5728}\u{9875}\u{9762}\u{4E2D}\u{7684}\u{5C55}\u{793A}\u{5904}\u{7406}\u{903B}\u{8F91}]
6687
-
6688
- ### 13.5 \u{9519}\u{8BEF}\u{5904}\u{7406}\u{903B}\u{8F91}
6689
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9875}\u{9762}\u{4E2D}\u{5404}\u{79CD}\u{9519}\u{8BEF}\u{60C5}\u{51B5}\u{7684}\u{5904}\u{7406}\u{903B}\u{8F91}]
6690
-
6691
- ### 13.6 \u{79BB}\u{7EBF}\u{5904}\u{7406}\u{903B}\u{8F91}
6692
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{5E94}\u{7528}\u{5728}\u{79BB}\u{7EBF}\u{72B6}\u{6001}\u{4E0B}\u{7684}\u{5904}\u{7406}\u{903B}\u{8F91}]
6693
-
6694
- ### 13.7 \u{7F13}\u{5B58}\u{5904}\u{7406}\u{903B}\u{8F91}
6695
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{5E94}\u{7528}\u{4E2D}\u{6570}\u{636E}\u{7F13}\u{5B58}\u{7684}\u{5904}\u{7406}\u{903B}\u{8F91}]
6696
-
6697
- ## 14. \u{4F2A}\u{4EE3}\u{7801}\u{793A}\u{4F8B}
6698
-
6699
- \`\`\`gherkin
6700
- Scenario Outline: \u{7528}\u{6237}\u{5728}APP\u{4E2D}\u{8FDB}\u{884C}\u{4E0B}\u{62C9}\u{5237}\u{65B0}\u{64CD}\u{4F5C}
6701
- Given \u{7528}\u{6237}\u{5728}<page_name>\u{9875}\u{9762}
6702
- When \u{7528}\u{6237}\u{6267}\u{884C}\u{4E0B}\u{62C9}\u{5237}\u{65B0}\u{624B}\u{52BF}
6703
- Then \u{7CFB}\u{7EDF}\u{5E94}\u{91CD}\u{65B0}\u{52A0}\u{8F7D}\u{6570}\u{636E}\u{5E76}<result>
6704
-
6705
- Examples:
6706
- | page_name | result |
6707
- | \u{8BA2}\u{5355}\u{5217}\u{8868}\u{9875} | \u{663E}\u{793A}\u{6700}\u{65B0}\u{8BA2}\u{5355}\u{6570}\u{636E} |
6708
- | \u{5546}\u{54C1}\u{8BE6}\u{60C5}\u{9875} | \u{663E}\u{793A}\u{5546}\u{54C1}\u{6700}\u{65B0}\u{4FE1}\u{606F} |
6709
-
6710
- Scenario Outline: APP\u{5E73}\u{53F0}\u{7279}\u{6027}\u{9002}\u{914D}\u{6D41}\u{7A0B}
6711
- Given \u{7528}\u{6237}\u{4F7F}\u{7528}<platform>\u{8BBE}\u{5907}
6712
- When \u{5E94}\u{7528}\u{542F}\u{52A8}\u{65F6}
6713
- Then \u{7CFB}\u{7EDF}\u{5E94}:
6714
- 1. \u{68C0}\u{6D4B}\u{8BBE}\u{5907}\u{5E73}\u{53F0}\u{7C7B}\u{578B}
6715
- 2. \u{5E94}\u{7528}\u{76F8}\u{5E94}\u{5E73}\u{53F0}\u{7684}\u{8BBE}\u{8BA1}\u{89C4}\u{8303}
6716
- 3. \u{8C03}\u{6574}UI\u{7EC4}\u{4EF6}\u{6837}\u{5F0F}
6717
- 4. \u{9002}\u{914D}\u{5E73}\u{53F0}\u{7279}\u{6709}\u{7684}\u{4EA4}\u{4E92}\u{65B9}\u{5F0F}
6718
-
6719
- Examples:
6720
- | platform | \u{9002}\u{914D}\u{7B56}\u{7565} |
6721
- | iOS | \u{5E94}\u{7528}iOS\u{8BBE}\u{8BA1}\u{8BED}\u{8A00}\u{FF0C}\u{4F7F}\u{7528}\u{539F}\u{751F}\u{5BFC}\u{822A}\u{680F} |
6722
- | Android | \u{5E94}\u{7528}Material Design\u{FF0C}\u{4F7F}\u{7528}\u{539F}\u{751F}\u{8FD4}\u{56DE}\u{952E} |
6723
-
6724
- Scenario Outline: APP\u{624B}\u{52BF}\u{64CD}\u{4F5C}\u{5904}\u{7406}\u{6D41}\u{7A0B}
6725
- Given \u{7528}\u{6237}\u{5728}<page_name>\u{9875}\u{9762}\u{4E0A}\u{6267}\u{884C}<gesture_type>\u{624B}\u{52BF}
6726
- When \u{624B}\u{52BF}\u{8BC6}\u{522B}\u{5668}\u{68C0}\u{6D4B}\u{5230}\u{624B}\u{52BF}\u{65F6}
6727
- Then \u{7CFB}\u{7EDF}\u{5E94}:
6728
- 1. \u{8BC6}\u{522B}\u{624B}\u{52BF}\u{7C7B}\u{578B}\u{548C}\u{53C2}\u{6570}
6729
- 2. \u{9A8C}\u{8BC1}\u{624B}\u{52BF}\u{64CD}\u{4F5C}\u{7684}\u{5408}\u{6CD5}\u{6027}
6730
- 3. \u{6267}\u{884C}\u{76F8}\u{5E94}\u{7684}\u{4E1A}\u{52A1}\u{903B}\u{8F91}
6731
- 4. \u{63D0}\u{4F9B}\u{64CD}\u{4F5C}\u{53CD}\u{9988}
6732
-
6733
- Examples:
6734
- | page_name | gesture_type | \u{5904}\u{7406}\u{903B}\u{8F91} |
6735
- | \u{5546}\u{54C1}\u{5217}\u{8868}\u{9875} | \u{4E0B}\u{62C9}\u{5237}\u{65B0} | \u{89E6}\u{53D1}\u{6570}\u{636E}\u{91CD}\u{65B0}\u{52A0}\u{8F7D}\u{FF0C}\u{663E}\u{793A}\u{5237}\u{65B0}\u{52A8}\u{753B} |
6736
- | \u{5546}\u{54C1}\u{8BE6}\u{60C5}\u{9875} | \u{5DE6}\u{53F3}\u{6ED1}\u{52A8} | \u{5207}\u{6362}\u{5230}\u{4E0A}\u{4E00}\u{4E2A}/\u{4E0B}\u{4E00}\u{4E2A}\u{5546}\u{54C1}\u{FF0C}\u{652F}\u{6301}\u{8FB9}\u{7F18}\u{56DE}\u{5F39}\u{6548}\u{679C} |
6737
- | \u{8D2D}\u{7269}\u{8F66}\u{9875} | \u{957F}\u{6309}\u{5546}\u{54C1} | \u{663E}\u{793A}\u{5546}\u{54C1}\u{64CD}\u{4F5C}\u{83DC}\u{5355}\u{FF08}\u{5220}\u{9664}\u{3001}\u{6536}\u{85CF}\u{3001}\u{79FB}\u{52A8}\u{7B49}\u{FF09} |
6738
- | \u{8BA2}\u{5355}\u{9875} | \u{53CC}\u{51FB}\u{8BA2}\u{5355}\u{9879} | \u{5FEB}\u{901F}\u{67E5}\u{770B}\u{8BA2}\u{5355}\u{8BE6}\u{60C5}\u{FF0C}\u{652F}\u{6301}3D Touch\u{9884}\u{89C8}\u{FF08}iOS\u{FF09} |
6739
- | \u{8BBE}\u{7F6E}\u{9875} | \u{634F}\u{5408}\u{7F29}\u{653E} | \u{8C03}\u{6574}\u{754C}\u{9762}\u{5143}\u{7D20}\u{5927}\u{5C0F}\u{FF0C}\u{9002}\u{914D}\u{7528}\u{6237}\u{89C6}\u{89C9}\u{504F}\u{597D} |
6740
-
6741
- Scenario Outline: APP\u{5BFC}\u{822A}\u{4E0E}\u{8DEF}\u{7531}\u{5904}\u{7406}\u{6D41}\u{7A0B}
6742
- Given \u{7528}\u{6237}\u{5728}<current_page>\u{9875}\u{9762}\u{6267}\u{884C}<navigation_action>
6743
- When \u{7CFB}\u{7EDF}\u{5904}\u{7406}\u{5BFC}\u{822A}\u{8BF7}\u{6C42}\u{65F6}
6744
- Then \u{7CFB}\u{7EDF}\u{5E94}:
6745
- 1. \u{9A8C}\u{8BC1}\u{76EE}\u{6807}\u{9875}\u{9762}\u{8BBF}\u{95EE}\u{6743}\u{9650}
6746
- 2. \u{4FDD}\u{5B58}\u{5F53}\u{524D}\u{9875}\u{9762}\u{72B6}\u{6001}
6747
- 3. \u{6267}\u{884C}\u{9875}\u{9762}\u{8FC7}\u{6E21}\u{52A8}\u{753B}
6748
- 4. \u{52A0}\u{8F7D}\u{76EE}\u{6807}\u{9875}\u{9762}\u{5E76}\u{6062}\u{590D}\u{72B6}\u{6001}
6749
-
6750
- Examples:
6751
- | current_page | navigation_action | \u{5904}\u{7406}\u{6D41}\u{7A0B} |
6752
- | \u{9996}\u{9875} | \u{70B9}\u{51FB}\u{5E95}\u{90E8}Tab | \u{5E73}\u{6ED1}\u{5207}\u{6362}Tab\u{9875}\u{9762}\u{FF0C}\u{4FDD}\u{6301}\u{5404}\u{9875}\u{9762}\u{72B6}\u{6001} |
6753
- | \u{5546}\u{54C1}\u{8BE6}\u{60C5}\u{9875} | \u{70B9}\u{51FB}\u{8FD4}\u{56DE}\u{6309}\u{94AE} | \u{8FD4}\u{56DE}\u{4E0A}\u{7EA7}\u{9875}\u{9762}\u{FF0C}\u{6062}\u{590D}\u{6EDA}\u{52A8}\u{4F4D}\u{7F6E}\u{548C}\u{7B5B}\u{9009}\u{6761}\u{4EF6} |
6754
- | \u{8D2D}\u{7269}\u{8F66}\u{9875} | \u{70B9}\u{51FB}\u{5546}\u{54C1}\u{56FE}\u{7247} | \u{8DF3}\u{8F6C}\u{5230}\u{5546}\u{54C1}\u{8BE6}\u{60C5}\u{9875}\u{FF0C}\u{4F20}\u{9012}\u{5546}\u{54C1}ID\u{548C}\u{6765}\u{6E90}\u{4FE1}\u{606F} |
6755
- | \u{8BA2}\u{5355}\u{786E}\u{8BA4}\u{9875} | \u{9875}\u{9762}\u{5237}\u{65B0} | \u{4FDD}\u{6301}\u{8868}\u{5355}\u{6570}\u{636E}\u{FF0C}\u{91CD}\u{65B0}\u{9A8C}\u{8BC1}\u{5E93}\u{5B58}\u{548C}\u{4EF7}\u{683C}\u{4FE1}\u{606F} |
6756
- | \u{8BBE}\u{7F6E}\u{9875} | \u{6DF1}\u{5EA6}\u{94FE}\u{63A5}\u{8DF3}\u{8F6C} | \u{89E3}\u{6790}\u{94FE}\u{63A5}\u{53C2}\u{6570}\u{FF0C}\u{5BFC}\u{822A}\u{5230}\u{6307}\u{5B9A}\u{8BBE}\u{7F6E}\u{9879}\u{5E76}\u{9AD8}\u{4EAE}\u{663E}\u{793A} |
6757
- \`\`\`
6758
-
6759
- ---
6760
-
6761
- **\u{91CD}\u{8981}\u{63D0}\u{9192}**:
6762
- 1. \u{8BF7}\u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{7684}Markdown\u{6587}\u{6863}\u{FF0C}\u{4E0D}\u{8981}\u{7701}\u{7565}\u{4EFB}\u{4F55}\u{7AE0}\u{8282}
6763
- 2. \u{6BCF}\u{4E2A}\u{7AE0}\u{8282}\u{90FD}\u{8981}\u{6709}\u{5B9E}\u{8D28}\u{6027}\u{7684}\u{5185}\u{5BB9}\u{FF0C}\u{4E0D}\u{80FD}\u{53EA}\u{662F}\u{6A21}\u{677F}
6764
- 3. \u{6839}\u{636E}\u{8F93}\u{5165}\u{7684}\u{539F}\u{59CB}\u{5185}\u{5BB9}\u{8FDB}\u{884C}\u{5177}\u{4F53}\u{5206}\u{6790}\u{FF0C}\u{4E0D}\u{8981}\u{4F7F}\u{7528}\u{901A}\u{7528}\u{6A21}\u{677F}
6765
- 4. \u{6587}\u{6863}\u{603B}\u{957F}\u{5EA6}\u{5E94}\u{8BE5}\u{5728}3000\u{5B57}\u{4EE5}\u{4E0A}
6766
- 5. \u{8868}\u{683C}\u{4E2D}\u{7684}\u{5185}\u{5BB9}\u{8981}\u{586B}\u{5199}\u{5177}\u{4F53}\u{4FE1}\u{606F}\u{FF0C}\u{4E0D}\u{8981}\u{4FDD}\u{7559}\u{5360}\u{4F4D}\u{7B26}
6767
- 6. \u{91CD}\u{70B9}\u{5173}\u{6CE8}\u{79FB}\u{52A8}\u{7AEF}\u{7279}\u{6709}\u{7684}\u{5E03}\u{5C40}\u{3001}\u{6837}\u{5F0F}\u{3001}\u{4EA4}\u{4E92}\u{903B}\u{8F91}\u{7B49}\u{6280}\u{672F}\u{7EC6}\u{8282}
6768
- 7. \u{8003}\u{8651}iOS\u{548C}Android\u{5E73}\u{53F0}\u{7684}\u{5DEE}\u{5F02}\u{6027}
6769
-
6770
- \u{73B0}\u{5728}\u{8BF7}\u{5F00}\u{59CB}\u{751F}\u{6210}\u{5B8C}\u{6574}\u{7684}APP\u{5F00}\u{53D1}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}\u{FF1A}`;
6771
- const sdkTemplatePrompt = `\u{4F60}\u{662F}\u{4E00}\u{4F4D}\u{4E13}\u{4E1A}\u{7684}\u{540E}\u{7AEF}\u{6280}\u{672F}\u{6587}\u{6863}\u{7F16}\u{5199}\u{4E13}\u{5BB6}\u{3002}\u{8BF7}\u{57FA}\u{4E8E}\u{7528}\u{6237}\u{63D0}\u{4F9B}\u{7684}\u{8F93}\u{5165}\u{5185}\u{5BB9}\u{FF0C}\u{751F}\u{6210}\u{4E00}\u{4EFD}\u{5B8C}\u{6574}\u{3001}\u{8BE6}\u{7EC6}\u{7684}\u{4E09}\u{65B9}SDK\u{96C6}\u{6210}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}\u{3002}
6772
-
6773
- ## \u{4EFB}\u{52A1}\u{8981}\u{6C42}
6774
- - \u{5FC5}\u{987B}\u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{7684}Markdown\u{683C}\u{5F0F}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}
6775
- - \u{4E0D}\u{8981}\u{53EA}\u{7ED9}\u{51FA}\u{603B}\u{7ED3}\u{FF0C}\u{8981}\u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{7684}\u{6587}\u{6863}\u{5185}\u{5BB9}
6776
- - \u{6BCF}\u{4E2A}\u{7AE0}\u{8282}\u{90FD}\u{8981}\u{6709}\u{8BE6}\u{7EC6}\u{7684}\u{5185}\u{5BB9}\u{FF0C}\u{4E0D}\u{80FD}\u{7701}\u{7565}
6777
- - \u{6587}\u{6863}\u{957F}\u{5EA6}\u{5E94}\u{8BE5}\u{5728}3000\u{5B57}\u{4EE5}\u{4E0A}
6778
- - \u{91CD}\u{70B9}\u{63CF}\u{8FF0}SDK\u{63A5}\u{5165}\u{6D41}\u{7A0B}\u{3001}\u{63A5}\u{53E3}\u{8C03}\u{7528}\u{3001}\u{6570}\u{636E}\u{7ED3}\u{6784}\u{7B49}\u{540E}\u{7AEF}\u{76F8}\u{5173}\u{5185}\u{5BB9}
6779
-
6780
- ## \u{8F93}\u{5165}\u{4FE1}\u{606F}
6781
- - **\u{529F}\u{80FD}\u{540D}\u{79F0}**: {featureName}
6782
- - **\u{4E1A}\u{52A1}\u{9886}\u{57DF}**: {businessDomain}
6783
- - **\u{751F}\u{6210}\u{65F6}\u{5E8F}\u{56FE}**: {generateSequenceDiagram}
6784
-
6785
- ## \u{539F}\u{59CB}\u{9700}\u{6C42}\u{5185}\u{5BB9}
6786
- \`\`\`
6787
- {inputContent}
6788
- \`\`\`
6789
-
6790
- ## \u{6587}\u{6863}\u{7ED3}\u{6784}\u{8981}\u{6C42}
6791
- \u{8BF7}\u{4E25}\u{683C}\u{6309}\u{7167}\u{4EE5}\u{4E0B}\u{7ED3}\u{6784}\u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{7684}\u{9700}\u{6C42}\u{6587}\u{6863}\u{FF0C}\u{6BCF}\u{4E2A}\u{7AE0}\u{8282}\u{90FD}\u{8981}\u{6709}\u{8BE6}\u{5B9E}\u{7684}\u{5185}\u{5BB9}\u{FF1A}
6792
-
6793
- # {featureName} - \u{4E09}\u{65B9}SDK\u{96C6}\u{6210}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}
6794
-
6795
- > **\u{751F}\u{6210}\u{65F6}\u{95F4}**: {currentTime}
6796
- > **\u{4E1A}\u{52A1}\u{9886}\u{57DF}**: {businessDomain}
6797
- > **\u{96C6}\u{6210}\u{7C7B}\u{578B}**: \u{4E09}\u{65B9}SDK\u{96C6}\u{6210}
6798
-
6799
- ---
6800
-
6801
- ## 1. \u{9700}\u{6C42}\u{80CC}\u{666F}
6802
-
6803
- **\u{80CC}\u{666F}**: [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{96C6}\u{6210}\u{7684}\u{80CC}\u{666F}\u{3001}\u{4E1A}\u{52A1}\u{9700}\u{6C42}\u{548C}\u{76EE}\u{6807}]
6804
-
6805
- **\u{5173}\u{952E}\u{529F}\u{80FD}**: [\u{5217}\u{51FA}SDK\u{96C6}\u{6210}\u{7684}\u{4E3B}\u{8981}\u{529F}\u{80FD}\u{70B9}]
6806
-
6807
- **\u{6D89}\u{53CA}\u{89D2}\u{8272}**: [\u{5217}\u{51FA}\u{6240}\u{6709}\u{76F8}\u{5173}\u{7CFB}\u{7EDF}\u{89D2}\u{8272}]
6808
-
6809
- ## 2. {featureName}\u{529F}\u{80FD}\u{8BBE}\u{8BA1}\u{8BF4}\u{660E}
6810
-
6811
- | | | | | |
6812
- |---|---|---|---|---|
6813
- |**\u{6D41}\u{7A0B}\u{7F16}\u{53F7}**|F001|**\u{6D41}\u{7A0B}\u{540D}\u{79F0}**|{featureName}|
6814
- |**\u{4E1A}\u{52A1}\u{529F}\u{80FD}\u{7F16}\u{53F7}**|BF001|**\u{4E1A}\u{52A1}\u{529F}\u{80FD}\u{540D}\u{79F0}**|{featureName}|
6815
- |**\u{529F}\u{80FD}\u{8BBE}\u{8BA1}\u{7F16}\u{53F7}**|FD001|**\u{7CFB}\u{7EDF}\u{529F}\u{80FD}\u{540D}\u{79F0}**|{featureName}|
6816
- |**\u{524D}\u{7F6E}\u{6761}\u{4EF6}**|[\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{96C6}\u{6210}\u{7684}\u{524D}\u{7F6E}\u{6761}\u{4EF6}]|
6817
- |**\u{89D2}\u{8272}\u{FF08}\u{5C97}\u{4F4D}\u{FF09}**|[\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{7CFB}\u{7EDF}\u{89D2}\u{8272}\u{53CA}\u{5176}\u{6743}\u{9650}]|
6818
- |**\u{5165}\u{53E3}\u{6E20}\u{9053}**|[\u{63CF}\u{8FF0}SDK\u{8C03}\u{7528}\u{5165}\u{53E3}]|
6819
- |**\u{529F}\u{80FD}\u{63CF}\u{8FF0}**|[\u{8BE6}\u{7EC6}\u{7684}\u{529F}\u{80FD}\u{63CF}\u{8FF0}]|
6820
- |**\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}]|
6821
-
6822
- ## 3. SDK\u{63A5}\u{5165}\u{6D41}\u{7A0B}
6823
-
6824
- ### 3.1 \u{63A5}\u{5165}\u{51C6}\u{5907}\u{5DE5}\u{4F5C}
6825
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{63A5}\u{5165}\u{524D}\u{7684}\u{51C6}\u{5907}\u{5DE5}\u{4F5C}\u{FF0C}\u{5305}\u{62EC}\u{73AF}\u{5883}\u{51C6}\u{5907}\u{3001}\u{4F9D}\u{8D56}\u{5B89}\u{88C5}\u{7B49}]
6826
-
6827
- ### 3.2 SDK\u{521D}\u{59CB}\u{5316}\u{914D}\u{7F6E}
6828
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{7684}\u{521D}\u{59CB}\u{5316}\u{914D}\u{7F6E}\u{8FC7}\u{7A0B}\u{FF0C}\u{5305}\u{62EC}\u{914D}\u{7F6E}\u{53C2}\u{6570}\u{3001}\u{5BC6}\u{94A5}\u{8BBE}\u{7F6E}\u{7B49}]
6829
-
6830
- ### 3.3 SDK\u{6CE8}\u{518C}\u{4E0E}\u{8BA4}\u{8BC1}
6831
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{7684}\u{6CE8}\u{518C}\u{548C}\u{8BA4}\u{8BC1}\u{6D41}\u{7A0B}]
6832
-
6833
- ### 3.4 \u{529F}\u{80FD}\u{96C6}\u{6210}\u{6B65}\u{9AA4}
6834
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{5404}\u{9879}\u{529F}\u{80FD}\u{7684}\u{96C6}\u{6210}\u{6B65}\u{9AA4}]
6835
-
6836
- ### 3.5 \u{5B89}\u{5168}\u{914D}\u{7F6E}
6837
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{7684}\u{5B89}\u{5168}\u{914D}\u{7F6E}\u{8981}\u{6C42}\u{FF0C}\u{5982}\u{8BC1}\u{4E66}\u{3001}\u{52A0}\u{5BC6}\u{7B49}]
6838
-
6839
- ### 3.6 \u{6D4B}\u{8BD5}\u{73AF}\u{5883}\u{914D}\u{7F6E}
6840
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{5728}\u{6D4B}\u{8BD5}\u{73AF}\u{5883}\u{4E2D}\u{7684}\u{914D}\u{7F6E}\u{8981}\u{6C42}]
6841
-
6842
- ## 4. \u{63A5}\u{53E3}\u{8C03}\u{7528}\u{8BF4}\u{660E}
6843
-
6844
- ### 4.1 \u{4E3B}\u{8981}API\u{63A5}\u{53E3}
6845
- [\u{5217}\u{51FA}SDK\u{63D0}\u{4F9B}\u{7684}\u{4E3B}\u{8981}API\u{63A5}\u{53E3}]
6846
-
6847
- ### 4.2 \u{63A5}\u{53E3}\u{8C03}\u{7528}\u{793A}\u{4F8B}
6848
- [\u{63D0}\u{4F9B}\u{8BE6}\u{7EC6}\u{7684}\u{63A5}\u{53E3}\u{8C03}\u{7528}\u{793A}\u{4F8B}\u{4EE3}\u{7801}]
6849
-
6850
- ### 4.3 \u{8BF7}\u{6C42}\u{53C2}\u{6570}\u{8BF4}\u{660E}
6851
- [\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{5404}\u{63A5}\u{53E3}\u{7684}\u{8BF7}\u{6C42}\u{53C2}\u{6570}]
6852
-
6853
- ### 4.4 \u{54CD}\u{5E94}\u{6570}\u{636E}\u{7ED3}\u{6784}
6854
- [\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{5404}\u{63A5}\u{53E3}\u{7684}\u{54CD}\u{5E94}\u{6570}\u{636E}\u{7ED3}\u{6784}]
6855
-
6856
- ### 4.5 \u{9519}\u{8BEF}\u{7801}\u{8BF4}\u{660E}
6857
- [\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}SDK\u{8FD4}\u{56DE}\u{7684}\u{9519}\u{8BEF}\u{7801}\u{53CA}\u{5176}\u{542B}\u{4E49}]
6858
-
6859
- ### 4.6 \u{63A5}\u{53E3}\u{8C03}\u{7528}\u{9650}\u{5236}
6860
- [\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}SDK\u{63A5}\u{53E3}\u{7684}\u{8C03}\u{7528}\u{9891}\u{7387}\u{9650}\u{5236}\u{548C}\u{914D}\u{989D}\u{7BA1}\u{7406}]
6861
-
6862
- ### 4.7 \u{5F02}\u{6B65}\u{56DE}\u{8C03}\u{5904}\u{7406}
6863
- [\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}SDK\u{5F02}\u{6B65}\u{56DE}\u{8C03}\u{7684}\u{5904}\u{7406}\u{673A}\u{5236}]
6864
-
6865
- ## 5. \u{6570}\u{636E}\u{7ED3}\u{6784}\u{5B9A}\u{4E49}
6866
-
6867
- ### 5.1 \u{8BF7}\u{6C42}\u{6570}\u{636E}\u{7ED3}\u{6784}
6868
- [\u{8BE6}\u{7EC6}\u{5B9A}\u{4E49}\u{8BF7}\u{6C42}\u{6570}\u{636E}\u{7684}\u{7ED3}\u{6784}]
6869
-
6870
- ### 5.2 \u{54CD}\u{5E94}\u{6570}\u{636E}\u{7ED3}\u{6784}
6871
- [\u{8BE6}\u{7EC6}\u{5B9A}\u{4E49}\u{54CD}\u{5E94}\u{6570}\u{636E}\u{7684}\u{7ED3}\u{6784}]
6872
-
6873
- ### 5.3 \u{6570}\u{636E}\u{7C7B}\u{578B}\u{8BF4}\u{660E}
6874
- [\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{5404}\u{6570}\u{636E}\u{5B57}\u{6BB5}\u{7684}\u{7C7B}\u{578B}\u{548C}\u{542B}\u{4E49}]
6875
-
6876
- ### 5.4 \u{6570}\u{636E}\u{9A8C}\u{8BC1}\u{89C4}\u{5219}
6877
- [\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{6570}\u{636E}\u{7684}\u{9A8C}\u{8BC1}\u{89C4}\u{5219}\u{548C}\u{7EA6}\u{675F}\u{6761}\u{4EF6}]
6878
-
6879
- ### 5.5 \u{6570}\u{636E}\u{8F6C}\u{6362}\u{89C4}\u{8303}
6880
- [\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{6570}\u{636E}\u{5728}\u{4E0D}\u{540C}\u{7CFB}\u{7EDF}\u{95F4}\u{7684}\u{8F6C}\u{6362}\u{89C4}\u{8303}]
6881
-
6882
- ### 5.6 \u{654F}\u{611F}\u{6570}\u{636E}\u{5904}\u{7406}
6883
- [\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{654F}\u{611F}\u{6570}\u{636E}\u{7684}\u{52A0}\u{5BC6}\u{548C}\u{5904}\u{7406}\u{8981}\u{6C42}]
6884
-
6885
- ## 6. \u{4EA4}\u{4E92}\u{903B}\u{8F91}\u{8BF4}\u{660E}
6886
-
6887
- ### 6.1 \u{8C03}\u{7528}\u{65F6}\u{5E8F}
6888
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{8C03}\u{7528}\u{7684}\u{65F6}\u{5E8F}\u{903B}\u{8F91}]
6889
-
6890
- ### 6.2 \u{56DE}\u{8C03}\u{5904}\u{7406}
6891
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{56DE}\u{8C03}\u{7684}\u{5904}\u{7406}\u{903B}\u{8F91}]
6892
-
6893
- ### 6.3 \u{5F02}\u{5E38}\u{5904}\u{7406}
6894
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{8C03}\u{7528}\u{5F02}\u{5E38}\u{7684}\u{5904}\u{7406}\u{903B}\u{8F91}]
6895
-
6896
- ### 6.4 \u{91CD}\u{8BD5}\u{673A}\u{5236}
6897
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{8C03}\u{7528}\u{5931}\u{8D25}\u{65F6}\u{7684}\u{91CD}\u{8BD5}\u{673A}\u{5236}]
6898
-
6899
- ### 6.5 \u{72B6}\u{6001}\u{7BA1}\u{7406}
6900
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{8C03}\u{7528}\u{8FC7}\u{7A0B}\u{4E2D}\u{7684}\u{72B6}\u{6001}\u{7BA1}\u{7406}]
6901
-
6902
- ### 6.6 \u{8D85}\u{65F6}\u{5904}\u{7406}
6903
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{8C03}\u{7528}\u{7684}\u{8D85}\u{65F6}\u{5904}\u{7406}\u{673A}\u{5236}]
6904
-
6905
- ### 6.7 \u{5E76}\u{53D1}\u{5904}\u{7406}
6906
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{7684}\u{5E76}\u{53D1}\u{8C03}\u{7528}\u{5904}\u{7406}\u{673A}\u{5236}]
6907
-
6908
- ## 7. \u{914D}\u{7F6E}\u{53C2}\u{6570}\u{8BF4}\u{660E}
6909
-
6910
- | | | | |
6911
- |---|---|---|---|
6912
- |**\u{53C2}\u{6570}\u{540D}\u{79F0}**|**\u{53C2}\u{6570}\u{7C7B}\u{578B}**|**\u{662F}\u{5426}\u{5FC5}\u{586B}**|**\u{8BF4}\u{660E}**|
6913
- |[\u{53C2}\u{6570}1]|[\u{5B57}\u{7B26}\u{4E32}/\u{6570}\u{5B57}\u{7B49}]|[\u{662F}/\u{5426}]|[\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}]|
6914
- |[\u{53C2}\u{6570}2]|[\u{5B57}\u{7B26}\u{4E32}/\u{6570}\u{5B57}\u{7B49}]|[\u{662F}/\u{5426}]|[\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}]|
6915
- |[\u{6DFB}\u{52A0}\u{66F4}\u{591A}\u{53C2}\u{6570}...]|||
6916
-
6917
- ### 7.1 \u{73AF}\u{5883}\u{914D}\u{7F6E}\u{53C2}\u{6570}
6918
- [\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{4E0D}\u{540C}\u{73AF}\u{5883}\u{4E0B}\u{7684}\u{914D}\u{7F6E}\u{53C2}\u{6570}\u{5DEE}\u{5F02}]
6919
-
6920
- ### 7.2 \u{6027}\u{80FD}\u{914D}\u{7F6E}\u{53C2}\u{6570}
6921
- [\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{5F71}\u{54CD}SDK\u{6027}\u{80FD}\u{7684}\u{914D}\u{7F6E}\u{53C2}\u{6570}]
6922
-
6923
- ### 7.3 \u{5B89}\u{5168}\u{914D}\u{7F6E}\u{53C2}\u{6570}
6924
- [\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{5B89}\u{5168}\u{76F8}\u{5173}\u{7684}\u{914D}\u{7F6E}\u{53C2}\u{6570}]
6925
-
6926
- ## 8. \u{5B89}\u{5168}\u{6027}\u{8003}\u{8651}
6927
-
6928
- ### 8.1 \u{6570}\u{636E}\u{52A0}\u{5BC6}
6929
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{6570}\u{636E}\u{4F20}\u{8F93}\u{548C}\u{5B58}\u{50A8}\u{7684}\u{52A0}\u{5BC6}\u{8981}\u{6C42}]
6930
-
6931
- ### 8.2 \u{8BBF}\u{95EE}\u{63A7}\u{5236}
6932
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{8BBF}\u{95EE}\u{7684}\u{6743}\u{9650}\u{63A7}\u{5236}\u{673A}\u{5236}]
6933
-
6934
- ### 8.3 \u{5BC6}\u{94A5}\u{7BA1}\u{7406}
6935
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{5BC6}\u{94A5}\u{7684}\u{7BA1}\u{7406}\u{65B9}\u{5F0F}]
6936
-
6937
- ### 8.4 \u{65E5}\u{5FD7}\u{8BB0}\u{5F55}
6938
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{8C03}\u{7528}\u{7684}\u{65E5}\u{5FD7}\u{8BB0}\u{5F55}\u{8981}\u{6C42}]
6939
-
6940
- ### 8.5 \u{5B89}\u{5168}\u{5BA1}\u{8BA1}
6941
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{8C03}\u{7528}\u{7684}\u{5B89}\u{5168}\u{5BA1}\u{8BA1}\u{8981}\u{6C42}]
6942
-
6943
- ### 8.6 \u{9632}\u{5FA1}\u{673A}\u{5236}
6944
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{9488}\u{5BF9}SDK\u{8C03}\u{7528}\u{7684}\u{5B89}\u{5168}\u{9632}\u{5FA1}\u{673A}\u{5236}]
6945
-
6946
- ## 9. \u{6027}\u{80FD}\u{4F18}\u{5316}\u{8981}\u{6C42}
6947
-
6948
- ### 9.1 \u{8C03}\u{7528}\u{6027}\u{80FD}
6949
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{8C03}\u{7528}\u{7684}\u{6027}\u{80FD}\u{8981}\u{6C42}]
6950
-
6951
- ### 9.2 \u{8D44}\u{6E90}\u{5360}\u{7528}
6952
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{5BF9}\u{7CFB}\u{7EDF}\u{8D44}\u{6E90}\u{7684}\u{5360}\u{7528}\u{8981}\u{6C42}]
6953
-
6954
- ### 9.3 \u{7F13}\u{5B58}\u{7B56}\u{7565}
6955
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{7684}\u{7F13}\u{5B58}\u{4F7F}\u{7528}\u{7B56}\u{7565}]
6956
-
6957
- ### 9.4 \u{8FDE}\u{63A5}\u{6C60}\u{7BA1}\u{7406}
6958
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{8FDE}\u{63A5}\u{6C60}\u{7684}\u{7BA1}\u{7406}\u{7B56}\u{7565}]
6959
-
6960
- ### 9.5 \u{8D1F}\u{8F7D}\u{5747}\u{8861}
6961
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{8C03}\u{7528}\u{7684}\u{8D1F}\u{8F7D}\u{5747}\u{8861}\u{7B56}\u{7565}]
6962
-
6963
- ### 9.6 \u{76D1}\u{63A7}\u{6307}\u{6807}
6964
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{8C03}\u{7528}\u{7684}\u{76D1}\u{63A7}\u{6307}\u{6807}\u{8981}\u{6C42}]
6965
-
6966
- ## 10. \u{4E1A}\u{52A1}\u{5BF9}\u{8C61}\u{65F6}\u{5E8F}\u{56FE}
6967
-
6968
- \`\`\`mermaid
6969
- sequenceDiagram
6970
- participant \u{5E94}\u{7528}\u{7CFB}\u{7EDF}
6971
- participant SDK
6972
- participant \u{8BA4}\u{8BC1}\u{670D}\u{52A1}
6973
- participant \u{6743}\u{9650}\u{670D}\u{52A1}
6974
- participant \u{7B2C}\u{4E09}\u{65B9}\u{670D}\u{52A1}
6975
- participant \u{6570}\u{636E}\u{5E93}
6976
- participant \u{7F13}\u{5B58}\u{670D}\u{52A1}
6977
- participant \u{6D88}\u{606F}\u{961F}\u{5217}
6978
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
6979
- participant \u{76D1}\u{63A7}\u{670D}\u{52A1}
6980
-
6981
- \u{5E94}\u{7528}\u{7CFB}\u{7EDF}->>SDK: \u{521D}\u{59CB}\u{5316}\u{8BF7}\u{6C42}
6982
- SDK->>\u{8BA4}\u{8BC1}\u{670D}\u{52A1}: \u{9A8C}\u{8BC1}\u{5E94}\u{7528}\u{51ED}\u{8BC1}
6983
- \u{8BA4}\u{8BC1}\u{670D}\u{52A1}-->>SDK: \u{8FD4}\u{56DE}\u{8BA4}\u{8BC1}\u{7ED3}\u{679C}
6984
- SDK->>\u{6743}\u{9650}\u{670D}\u{52A1}: \u{68C0}\u{67E5}\u{5E94}\u{7528}\u{6743}\u{9650}
6985
- \u{6743}\u{9650}\u{670D}\u{52A1}-->>SDK: \u{8FD4}\u{56DE}\u{6743}\u{9650}\u{4FE1}\u{606F}
6986
- SDK->>\u{7B2C}\u{4E09}\u{65B9}\u{670D}\u{52A1}: \u{53D1}\u{9001}\u{521D}\u{59CB}\u{5316}\u{8BF7}\u{6C42}
6987
- \u{7B2C}\u{4E09}\u{65B9}\u{670D}\u{52A1}-->>SDK: \u{8FD4}\u{56DE}\u{521D}\u{59CB}\u{5316}\u{54CD}\u{5E94}
6988
- SDK->>\u{7F13}\u{5B58}\u{670D}\u{52A1}: \u{5B58}\u{50A8}\u{521D}\u{59CB}\u{5316}\u{72B6}\u{6001}
6989
- SDK-->>\u{5E94}\u{7528}\u{7CFB}\u{7EDF}: \u{8FD4}\u{56DE}\u{521D}\u{59CB}\u{5316}\u{6210}\u{529F}
6990
-
6991
- %% SDK\u{4E1A}\u{52A1}\u{8C03}\u{7528}\u{6D41}\u{7A0B}
6992
- \u{5E94}\u{7528}\u{7CFB}\u{7EDF}->>SDK: \u{53D1}\u{9001}\u{4E1A}\u{52A1}\u{8BF7}\u{6C42}
6993
- SDK->>\u{7F13}\u{5B58}\u{670D}\u{52A1}: \u{67E5}\u{8BE2}\u{7F13}\u{5B58}\u{6570}\u{636E}
6994
- alt \u{7F13}\u{5B58}\u{4E2D}\u{6709}\u{6570}\u{636E}
6995
- \u{7F13}\u{5B58}\u{670D}\u{52A1}-->>SDK: \u{8FD4}\u{56DE}\u{7F13}\u{5B58}\u{6570}\u{636E}
6996
- SDK->>\u{76D1}\u{63A7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{7F13}\u{5B58}\u{547D}\u{4E2D}
6997
- else \u{7F13}\u{5B58}\u{4E2D}\u{65E0}\u{6570}\u{636E}
6998
- SDK->>\u{7B2C}\u{4E09}\u{65B9}\u{670D}\u{52A1}: \u{53D1}\u{9001}API\u{8C03}\u{7528}
6999
- \u{7B2C}\u{4E09}\u{65B9}\u{670D}\u{52A1}-->>SDK: \u{8FD4}\u{56DE}API\u{54CD}\u{5E94}
7000
- SDK->>\u{7F13}\u{5B58}\u{670D}\u{52A1}: \u{5B58}\u{50A8}\u{5230}\u{7F13}\u{5B58}
7001
- SDK->>\u{76D1}\u{63A7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}API\u{8C03}\u{7528}
7002
- end
7003
- SDK->>\u{6D88}\u{606F}\u{961F}\u{5217}: \u{53D1}\u{9001}\u{5F02}\u{6B65}\u{6D88}\u{606F}
7004
- SDK->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{8C03}\u{7528}\u{65E5}\u{5FD7}
7005
- SDK-->>\u{5E94}\u{7528}\u{7CFB}\u{7EDF}: \u{8FD4}\u{56DE}\u{4E1A}\u{52A1}\u{54CD}\u{5E94}
7006
- \`\`\`
5709
+ ## 4. \u{6570}\u{636E}\u{5904}\u{7406}
7007
5710
 
7008
- ### 10.2 \u{66FF}\u{4EE3}\u{6D41}\u{7A0B}\u{FF08}\u{4E0D}\u{540C}\u{6709}\u{6548}\u{8DEF}\u{5F84}\u{FF09}
5711
+ ### 4.1 \u{6570}\u{636E}\u{5C55}\u{793A}
5712
+ [\u{63CF}\u{8FF0}APP\u{4E2D}\u{6570}\u{636E}\u{7684}\u{5C55}\u{793A}\u{65B9}\u{5F0F}\u{548C}\u{683C}\u{5F0F}]
7009
5713
 
7010
- #### 10.2.1 \u{5B89}\u{5168}\u{89C4}\u{8303}\u{6D41}\u{7A0B}
7011
- \`\`\`mermaid
7012
- sequenceDiagram
7013
- participant \u{5E94}\u{7528}\u{7CFB}\u{7EDF}
7014
- participant SDK
7015
- participant \u{5B89}\u{5168}\u{670D}\u{52A1}
7016
- participant \u{52A0}\u{5BC6}\u{670D}\u{52A1}
7017
- participant \u{7B2C}\u{4E09}\u{65B9}\u{670D}\u{52A1}
7018
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
7019
-
7020
- \u{5E94}\u{7528}\u{7CFB}\u{7EDF}->>SDK: \u{53D1}\u{9001}\u{5305}\u{542B}\u{654F}\u{611F}\u{6570}\u{636E}\u{7684}\u{8BF7}\u{6C42}
7021
- SDK->>\u{5B89}\u{5168}\u{670D}\u{52A1}: \u{68C0}\u{67E5}\u{6570}\u{636E}\u{5B89}\u{5168}\u{6027}
7022
- \u{5B89}\u{5168}\u{670D}\u{52A1}-->>SDK: \u{8FD4}\u{56DE}\u{5B89}\u{5168}\u{68C0}\u{67E5}\u{7ED3}\u{679C}
7023
- alt \u{6570}\u{636E}\u{5B89}\u{5168}\u{5408}\u{89C4}
7024
- SDK->>\u{52A0}\u{5BC6}\u{670D}\u{52A1}: \u{52A0}\u{5BC6}\u{654F}\u{611F}\u{6570}\u{636E}
7025
- \u{52A0}\u{5BC6}\u{670D}\u{52A1}-->>SDK: \u{8FD4}\u{56DE}\u{52A0}\u{5BC6}\u{6570}\u{636E}
7026
- SDK->>\u{7B2C}\u{4E09}\u{65B9}\u{670D}\u{52A1}: \u{53D1}\u{9001}\u{52A0}\u{5BC6}\u{8BF7}\u{6C42}
7027
- \u{7B2C}\u{4E09}\u{65B9}\u{670D}\u{52A1}-->>SDK: \u{8FD4}\u{56DE}\u{54CD}\u{5E94}
7028
- SDK-->>\u{5E94}\u{7528}\u{7CFB}\u{7EDF}: \u{8FD4}\u{56DE}\u{5904}\u{7406}\u{7ED3}\u{679C}
7029
- else \u{6570}\u{636E}\u{5B58}\u{5728}\u{5B89}\u{5168}\u{98CE}\u{9669}
7030
- SDK->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{5B89}\u{5168}\u{98CE}\u{9669}
7031
- SDK-->>\u{5E94}\u{7528}\u{7CFB}\u{7EDF}: \u{8FD4}\u{56DE}\u{5B89}\u{5168}\u{9519}\u{8BEF}
7032
- end
7033
- \`\`\`
5714
+ ### 4.2 \u{6570}\u{636E}\u{4EA4}\u{4E92}
5715
+ [\u{63CF}\u{8FF0}APP\u{4E0E}\u{540E}\u{7AEF}\u{7684}\u{6570}\u{636E}\u{4EA4}\u{4E92}\u{65B9}\u{5F0F}]
7034
5716
 
7035
- #### 10.2.2 \u{56DE}\u{8C03}\u{5904}\u{7406}\u{6D41}\u{7A0B}
7036
- \`\`\`mermaid
7037
- sequenceDiagram
7038
- participant \u{5E94}\u{7528}\u{7CFB}\u{7EDF}
7039
- participant SDK
7040
- participant \u{7B2C}\u{4E09}\u{65B9}\u{670D}\u{52A1}
7041
- participant \u{56DE}\u{8C03}\u{5904}\u{7406}\u{5668}
7042
- participant \u{72B6}\u{6001}\u{7BA1}\u{7406}\u{5668}
7043
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
7044
-
7045
- \u{5E94}\u{7528}\u{7CFB}\u{7EDF}->>SDK: \u{53D1}\u{8D77}\u{5F02}\u{6B65}\u{64CD}\u{4F5C}\u{8BF7}\u{6C42}
7046
- SDK->>\u{7B2C}\u{4E09}\u{65B9}\u{670D}\u{52A1}: \u{53D1}\u{9001}\u{5F02}\u{6B65}\u{8BF7}\u{6C42}
7047
- \u{7B2C}\u{4E09}\u{65B9}\u{670D}\u{52A1}-->>SDK: \u{8FD4}\u{56DE}\u{63A5}\u{6536}\u{786E}\u{8BA4}
7048
- \u{7B2C}\u{4E09}\u{65B9}\u{670D}\u{52A1}->>\u{56DE}\u{8C03}\u{5904}\u{7406}\u{5668}: \u{53D1}\u{9001}\u{5904}\u{7406}\u{7ED3}\u{679C}
7049
- \u{56DE}\u{8C03}\u{5904}\u{7406}\u{5668}->>\u{72B6}\u{6001}\u{7BA1}\u{7406}\u{5668}: \u{66F4}\u{65B0}\u{64CD}\u{4F5C}\u{72B6}\u{6001}
7050
- \u{72B6}\u{6001}\u{7BA1}\u{7406}\u{5668}-->>\u{56DE}\u{8C03}\u{5904}\u{7406}\u{5668}: \u{8FD4}\u{56DE}\u{72B6}\u{6001}\u{66F4}\u{65B0}\u{7ED3}\u{679C}
7051
- \u{56DE}\u{8C03}\u{5904}\u{7406}\u{5668}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{56DE}\u{8C03}\u{65E5}\u{5FD7}
7052
- \u{56DE}\u{8C03}\u{5904}\u{7406}\u{5668}->>\u{5E94}\u{7528}\u{7CFB}\u{7EDF}: \u{53D1}\u{9001}\u{56DE}\u{8C03}\u{901A}\u{77E5}
7053
- \`\`\`
5717
+ ## 5. \u{529F}\u{80FD}\u{6A21}\u{5757}
7054
5718
 
7055
- #### 10.2.3 SDK\u{5B89}\u{5168}\u{89C4}\u{8303}\u{6D41}\u{7A0B}
7056
- \`\`\`mermaid
7057
- sequenceDiagram
7058
- participant \u{5E94}\u{7528}\u{7CFB}\u{7EDF}
7059
- participant SDK
7060
- participant \u{5B89}\u{5168}\u{670D}\u{52A1}
7061
- participant \u{52A0}\u{5BC6}\u{6A21}\u{5757}
7062
- participant \u{8BC1}\u{4E66}\u{7BA1}\u{7406}\u{5668}
7063
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
7064
-
7065
- \u{5E94}\u{7528}\u{7CFB}\u{7EDF}->>SDK: \u{53D1}\u{9001}\u{654F}\u{611F}\u{6570}\u{636E}\u{8BF7}\u{6C42}
7066
- SDK->>\u{5B89}\u{5168}\u{670D}\u{52A1}: \u{9A8C}\u{8BC1}\u{8BF7}\u{6C42}\u{5B89}\u{5168}\u{6027}
7067
- \u{5B89}\u{5168}\u{670D}\u{52A1}-->>SDK: \u{8FD4}\u{56DE}\u{5B89}\u{5168}\u{68C0}\u{67E5}\u{7ED3}\u{679C}
7068
- alt \u{8BF7}\u{6C42}\u{5B89}\u{5168}\u{5408}\u{89C4}
7069
- SDK->>\u{52A0}\u{5BC6}\u{6A21}\u{5757}: \u{52A0}\u{5BC6}\u{654F}\u{611F}\u{6570}\u{636E}
7070
- \u{52A0}\u{5BC6}\u{6A21}\u{5757}-->>SDK: \u{8FD4}\u{56DE}\u{52A0}\u{5BC6}\u{6570}\u{636E}
7071
- SDK->>\u{8BC1}\u{4E66}\u{7BA1}\u{7406}\u{5668}: \u{9A8C}\u{8BC1}\u{8BC1}\u{4E66}\u{6709}\u{6548}\u{6027}
7072
- \u{8BC1}\u{4E66}\u{7BA1}\u{7406}\u{5668}-->>SDK: \u{8FD4}\u{56DE}\u{8BC1}\u{4E66}\u{9A8C}\u{8BC1}\u{7ED3}\u{679C}
7073
- SDK->>\u{7B2C}\u{4E09}\u{65B9}\u{670D}\u{52A1}: \u{53D1}\u{9001}\u{5B89}\u{5168}\u{8BF7}\u{6C42}
7074
- \u{7B2C}\u{4E09}\u{65B9}\u{670D}\u{52A1}-->>SDK: \u{8FD4}\u{56DE}\u{54CD}\u{5E94}
7075
- SDK-->>\u{5E94}\u{7528}\u{7CFB}\u{7EDF}: \u{8FD4}\u{56DE}\u{5904}\u{7406}\u{7ED3}\u{679C}
7076
- else \u{5B58}\u{5728}\u{5B89}\u{5168}\u{98CE}\u{9669}
7077
- SDK->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{5B89}\u{5168}\u{8FDD}\u{89C4}\u{4E8B}\u{4EF6}
7078
- SDK->>\u{5E94}\u{7528}\u{7CFB}\u{7EDF}: \u{8FD4}\u{56DE}\u{5B89}\u{5168}\u{9519}\u{8BEF}\u{63D0}\u{793A}
7079
- end
7080
- \`\`\`
5719
+ ### 5.1 \u{6838}\u{5FC3}\u{6A21}\u{5757}
5720
+ [\u{63CF}\u{8FF0}APP\u{7684}\u{6838}\u{5FC3}\u{529F}\u{80FD}\u{6A21}\u{5757}]
7081
5721
 
7082
- ### 10.3 \u{5F02}\u{5E38}\u{6D41}\u{7A0B}\u{FF08}\u{9519}\u{8BEF}\u{5904}\u{7406}\u{FF09}
5722
+ ### 5.2 \u{4E1A}\u{52A1}\u{903B}\u{8F91}
5723
+ [\u{63CF}\u{8FF0}\u{5404}\u{6A21}\u{5757}\u{7684}\u{4E1A}\u{52A1}\u{903B}\u{8F91}\u{548C}\u{5904}\u{7406}\u{6D41}\u{7A0B}]
7083
5724
 
7084
- #### 10.3.1 SDK\u{517C}\u{5BB9}\u{6027}\u{9519}\u{8BEF}
7085
- \`\`\`mermaid
7086
- sequenceDiagram
7087
- participant \u{5E94}\u{7528}\u{7CFB}\u{7EDF}
7088
- participant SDK
7089
- participant \u{517C}\u{5BB9}\u{6027}\u{68C0}\u{67E5}\u{5668}
7090
- participant \u{9519}\u{8BEF}\u{5904}\u{7406}\u{5668}
7091
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
7092
-
7093
- \u{5E94}\u{7528}\u{7CFB}\u{7EDF}->>SDK: \u{521D}\u{59CB}\u{5316}\u{8BF7}\u{6C42}
7094
- SDK->>\u{517C}\u{5BB9}\u{6027}\u{68C0}\u{67E5}\u{5668}: \u{68C0}\u{67E5}SDK\u{7248}\u{672C}\u{517C}\u{5BB9}\u{6027}
7095
- \u{517C}\u{5BB9}\u{6027}\u{68C0}\u{67E5}\u{5668}-->>SDK: \u{8FD4}\u{56DE}\u{517C}\u{5BB9}\u{6027}\u{9519}\u{8BEF}
7096
- SDK->>\u{9519}\u{8BEF}\u{5904}\u{7406}\u{5668}: \u{5904}\u{7406}\u{517C}\u{5BB9}\u{6027}\u{9519}\u{8BEF}
7097
- \u{9519}\u{8BEF}\u{5904}\u{7406}\u{5668}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{517C}\u{5BB9}\u{6027}\u{9519}\u{8BEF}
7098
- \u{9519}\u{8BEF}\u{5904}\u{7406}\u{5668}-->>SDK: \u{8FD4}\u{56DE}\u{9519}\u{8BEF}\u{5904}\u{7406}\u{7ED3}\u{679C}
7099
- SDK-->>\u{5E94}\u{7528}\u{7CFB}\u{7EDF}: \u{8FD4}\u{56DE}\u{517C}\u{5BB9}\u{6027}\u{9519}\u{8BEF}\u{63D0}\u{793A}
7100
- \`\`\`
5725
+ ## 6. \u{4E1A}\u{52A1}\u{6D41}\u{7A0B}
7101
5726
 
7102
- #### 10.3.2 \u{914D}\u{7F6E}\u{51B2}\u{7A81}\u{9519}\u{8BEF}
7103
- \`\`\`mermaid
7104
- sequenceDiagram
7105
- participant \u{5E94}\u{7528}\u{7CFB}\u{7EDF}
7106
- participant SDK
7107
- participant \u{914D}\u{7F6E}\u{7BA1}\u{7406}\u{5668}
7108
- participant \u{9519}\u{8BEF}\u{5904}\u{7406}\u{5668}
7109
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
7110
-
7111
- \u{5E94}\u{7528}\u{7CFB}\u{7EDF}->>SDK: \u{53D1}\u{9001}\u{914D}\u{7F6E}\u{53C2}\u{6570}
7112
- SDK->>\u{914D}\u{7F6E}\u{7BA1}\u{7406}\u{5668}: \u{9A8C}\u{8BC1}\u{914D}\u{7F6E}\u{53C2}\u{6570}
7113
- \u{914D}\u{7F6E}\u{7BA1}\u{7406}\u{5668}-->>SDK: \u{8FD4}\u{56DE}\u{914D}\u{7F6E}\u{51B2}\u{7A81}
7114
- SDK->>\u{9519}\u{8BEF}\u{5904}\u{7406}\u{5668}: \u{5904}\u{7406}\u{914D}\u{7F6E}\u{9519}\u{8BEF}
7115
- \u{9519}\u{8BEF}\u{5904}\u{7406}\u{5668}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{914D}\u{7F6E}\u{9519}\u{8BEF}
7116
- \u{9519}\u{8BEF}\u{5904}\u{7406}\u{5668}->>SDK: \u{5E94}\u{7528}\u{9ED8}\u{8BA4}\u{914D}\u{7F6E}
7117
- SDK-->>\u{5E94}\u{7528}\u{7CFB}\u{7EDF}: \u{8FD4}\u{56DE}\u{914D}\u{7F6E}\u{8B66}\u{544A}\u{53CA}\u{9ED8}\u{8BA4}\u{914D}\u{7F6E}\u{7ED3}\u{679C}
7118
- \`\`\`
5727
+ [\u{4F7F}\u{7528}\u{7B80}\u{5355}\u{7684}mermaid\u{6D41}\u{7A0B}\u{56FE}\u{63CF}\u{8FF0}\u{4E3B}\u{8981}\u{4E1A}\u{52A1}\u{6D41}\u{7A0B}]
7119
5728
 
7120
- #### 10.3.3 SDK\u{521D}\u{59CB}\u{5316}\u{51B2}\u{7A81}
7121
5729
  \`\`\`mermaid
7122
- sequenceDiagram
7123
- participant \u{5E94}\u{7528}\u{7CFB}\u{7EDF}
7124
- participant SDK
7125
- participant \u{521D}\u{59CB}\u{5316}\u{68C0}\u{67E5}\u{5668}
7126
- participant \u{4F9D}\u{8D56}\u{7BA1}\u{7406}\u{5668}
7127
- participant \u{9519}\u{8BEF}\u{5904}\u{7406}\u{5668}
7128
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
7129
-
7130
- \u{5E94}\u{7528}\u{7CFB}\u{7EDF}->>SDK: \u{53D1}\u{8D77}\u{521D}\u{59CB}\u{5316}\u{8BF7}\u{6C42}
7131
- SDK->>\u{521D}\u{59CB}\u{5316}\u{68C0}\u{67E5}\u{5668}: \u{68C0}\u{67E5}\u{521D}\u{59CB}\u{5316}\u{72B6}\u{6001}
7132
- \u{521D}\u{59CB}\u{5316}\u{68C0}\u{67E5}\u{5668}-->>SDK: \u{8FD4}\u{56DE}\u{521D}\u{59CB}\u{5316}\u{72B6}\u{6001}
7133
- alt \u{672A}\u{521D}\u{59CB}\u{5316}
7134
- SDK->>\u{4F9D}\u{8D56}\u{7BA1}\u{7406}\u{5668}: \u{68C0}\u{67E5}\u{4F9D}\u{8D56}\u{9879}
7135
- \u{4F9D}\u{8D56}\u{7BA1}\u{7406}\u{5668}-->>SDK: \u{8FD4}\u{56DE}\u{4F9D}\u{8D56}\u{68C0}\u{67E5}\u{7ED3}\u{679C}
7136
- SDK->>SDK: \u{6267}\u{884C}\u{521D}\u{59CB}\u{5316}\u{903B}\u{8F91}
7137
- SDK-->>\u{5E94}\u{7528}\u{7CFB}\u{7EDF}: \u{8FD4}\u{56DE}\u{521D}\u{59CB}\u{5316}\u{6210}\u{529F}
7138
- else \u{5DF2}\u{521D}\u{59CB}\u{5316}
7139
- SDK->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{91CD}\u{590D}\u{521D}\u{59CB}\u{5316}
7140
- SDK-->>\u{5E94}\u{7528}\u{7CFB}\u{7EDF}: \u{8FD4}\u{56DE}\u{5DF2}\u{521D}\u{59CB}\u{5316}\u{72B6}\u{6001}
7141
- else \u{4F9D}\u{8D56}\u{7F3A}\u{5931}
7142
- SDK->>\u{9519}\u{8BEF}\u{5904}\u{7406}\u{5668}: \u{5904}\u{7406}\u{4F9D}\u{8D56}\u{9519}\u{8BEF}
7143
- \u{9519}\u{8BEF}\u{5904}\u{7406}\u{5668}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{4F9D}\u{8D56}\u{7F3A}\u{5931}
7144
- \u{9519}\u{8BEF}\u{5904}\u{7406}\u{5668}-->>SDK: \u{8FD4}\u{56DE}\u{9519}\u{8BEF}\u{5904}\u{7406}\u{7ED3}\u{679C}
7145
- SDK-->>\u{5E94}\u{7528}\u{7CFB}\u{7EDF}: \u{8FD4}\u{56DE}\u{4F9D}\u{8D56}\u{7F3A}\u{5931}\u{9519}\u{8BEF}
7146
- end
5730
+ graph TD
5731
+ A[\u{5F00}\u{59CB}] --> B[\u{5904}\u{7406}]
5732
+ B --> C[\u{7ED3}\u{675F}]
7147
5733
  \`\`\`
7148
5734
 
7149
- ### 10.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}
5735
+ ---
7150
5736
 
7151
- #### 10.4.1 \u{79BB}\u{7EBF}SDK\u{529F}\u{80FD}\u{5904}\u{7406}
7152
- \`\`\`mermaid
7153
- sequenceDiagram
7154
- participant \u{5E94}\u{7528}\u{7CFB}\u{7EDF}
7155
- participant SDK
7156
- participant \u{7F51}\u{7EDC}\u{72B6}\u{6001}\u{68C0}\u{6D4B}\u{5668}
7157
- participant \u{79BB}\u{7EBF}\u{6570}\u{636E}\u{7BA1}\u{7406}\u{5668}
7158
- participant \u{672C}\u{5730}\u{6570}\u{636E}\u{5E93}
7159
- participant \u{72B6}\u{6001}\u{7BA1}\u{7406}\u{5668}
7160
-
7161
- \u{5E94}\u{7528}\u{7CFB}\u{7EDF}->>SDK: \u{53D1}\u{9001}\u{6570}\u{636E}\u{64CD}\u{4F5C}\u{8BF7}\u{6C42}
7162
- SDK->>\u{7F51}\u{7EDC}\u{72B6}\u{6001}\u{68C0}\u{6D4B}\u{5668}: \u{68C0}\u{67E5}\u{7F51}\u{7EDC}\u{72B6}\u{6001}
7163
- \u{7F51}\u{7EDC}\u{72B6}\u{6001}\u{68C0}\u{6D4B}\u{5668}-->>SDK: \u{8FD4}\u{56DE}\u{65E0}\u{7F51}\u{7EDC}\u{8FDE}\u{63A5}
7164
- SDK->>\u{79BB}\u{7EBF}\u{6570}\u{636E}\u{7BA1}\u{7406}\u{5668}: \u{5904}\u{7406}\u{79BB}\u{7EBF}\u{64CD}\u{4F5C}
7165
- \u{79BB}\u{7EBF}\u{6570}\u{636E}\u{7BA1}\u{7406}\u{5668}->>\u{672C}\u{5730}\u{6570}\u{636E}\u{5E93}: \u{5B58}\u{50A8}\u{79BB}\u{7EBF}\u{6570}\u{636E}
7166
- \u{672C}\u{5730}\u{6570}\u{636E}\u{5E93}-->>\u{79BB}\u{7EBF}\u{6570}\u{636E}\u{7BA1}\u{7406}\u{5668}: \u{8FD4}\u{56DE}\u{5B58}\u{50A8}\u{7ED3}\u{679C}
7167
- \u{79BB}\u{7EBF}\u{6570}\u{636E}\u{7BA1}\u{7406}\u{5668}->>\u{72B6}\u{6001}\u{7BA1}\u{7406}\u{5668}: \u{66F4}\u{65B0}\u{79BB}\u{7EBF}\u{72B6}\u{6001}
7168
- \u{72B6}\u{6001}\u{7BA1}\u{7406}\u{5668}-->>\u{79BB}\u{7EBF}\u{6570}\u{636E}\u{7BA1}\u{7406}\u{5668}: \u{8FD4}\u{56DE}\u{72B6}\u{6001}\u{66F4}\u{65B0}\u{7ED3}\u{679C}
7169
- \u{79BB}\u{7EBF}\u{6570}\u{636E}\u{7BA1}\u{7406}\u{5668}-->>SDK: \u{8FD4}\u{56DE}\u{79BB}\u{7EBF}\u{5904}\u{7406}\u{7ED3}\u{679C}
7170
- SDK-->>\u{5E94}\u{7528}\u{7CFB}\u{7EDF}: \u{8FD4}\u{56DE}\u{79BB}\u{7EBF}\u{64CD}\u{4F5C}\u{6210}\u{529F}\u{63D0}\u{793A}
7171
- \`\`\`
5737
+ **\u{8981}\u{6C42}**: \u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{6587}\u{6863}\u{FF0C}\u{6BCF}\u{7AE0}\u{8282}\u{6709}\u{5B9E}\u{8D28}\u{5185}\u{5BB9}\u{FF0C}\u{91CD}\u{70B9}\u{5173}\u{6CE8}\u{754C}\u{9762}\u{8BBE}\u{8BA1}\u{3001}\u{4EA4}\u{4E92}\u{903B}\u{8F91}\u{548C}\u{6570}\u{636E}\u{5904}\u{7406}\u{3002}`;
5738
+ const sdkTemplatePrompt = `\u{4F60}\u{662F}\u{540E}\u{7AEF}\u{6280}\u{672F}\u{6587}\u{6863}\u{4E13}\u{5BB6}\u{3002}\u{57FA}\u{4E8E}\u{8F93}\u{5165}\u{5185}\u{5BB9}\u{751F}\u{6210}\u{5B8C}\u{6574}\u{7684}\u{4E09}\u{65B9}SDK\u{96C6}\u{6210}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}\u{FF08}Markdown\u{683C}\u{5F0F}\u{FF0C}1500\u{5B57}\u{4EE5}\u{4E0A}\u{FF09}\u{3002}
7172
5739
 
7173
- #### 10.4.2 \u{6027}\u{80FD}\u{4F18}\u{5316}\u{8981}\u{6C42}
7174
- \`\`\`mermaid
7175
- sequenceDiagram
7176
- participant \u{5E94}\u{7528}\u{7CFB}\u{7EDF}
7177
- participant SDK
7178
- participant \u{6027}\u{80FD}\u{4F18}\u{5316}\u{5668}
7179
- participant \u{8FDE}\u{63A5}\u{6C60}\u{7BA1}\u{7406}\u{5668}
7180
- participant \u{7F13}\u{5B58}\u{7BA1}\u{7406}\u{5668}
7181
- participant \u{76D1}\u{63A7}\u{670D}\u{52A1}
7182
-
7183
- \u{5E94}\u{7528}\u{7CFB}\u{7EDF}->>SDK: \u{53D1}\u{8D77}\u{9AD8}\u{5E76}\u{53D1}\u{8BF7}\u{6C42}
7184
- SDK->>\u{6027}\u{80FD}\u{4F18}\u{5316}\u{5668}: \u{5206}\u{6790}\u{6027}\u{80FD}\u{9700}\u{6C42}
7185
- \u{6027}\u{80FD}\u{4F18}\u{5316}\u{5668}-->>SDK: \u{8FD4}\u{56DE}\u{4F18}\u{5316}\u{7B56}\u{7565}
7186
- SDK->>\u{8FDE}\u{63A5}\u{6C60}\u{7BA1}\u{7406}\u{5668}: \u{5E94}\u{7528}\u{8FDE}\u{63A5}\u{6C60}\u{7B56}\u{7565}
7187
- \u{8FDE}\u{63A5}\u{6C60}\u{7BA1}\u{7406}\u{5668}-->>SDK: \u{8FD4}\u{56DE}\u{8FDE}\u{63A5}\u{6C60}\u{914D}\u{7F6E}
7188
- SDK->>\u{7F13}\u{5B58}\u{7BA1}\u{7406}\u{5668}: \u{914D}\u{7F6E}\u{7F13}\u{5B58}\u{7B56}\u{7565}
7189
- \u{7F13}\u{5B58}\u{7BA1}\u{7406}\u{5668}-->>SDK: \u{8FD4}\u{56DE}\u{7F13}\u{5B58}\u{914D}\u{7F6E}
7190
- SDK->>\u{76D1}\u{63A7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{6027}\u{80FD}\u{6307}\u{6807}
7191
- SDK-->>\u{5E94}\u{7528}\u{7CFB}\u{7EDF}: \u{8FD4}\u{56DE}\u{4F18}\u{5316}\u{540E}\u{54CD}\u{5E94}
7192
- \`\`\`
5740
+ **\u{8F93}\u{5165}**: \u{529F}\u{80FD}\u{540D}\u{79F0}={featureName}, \u{4E1A}\u{52A1}\u{9886}\u{57DF}={businessDomain}
7193
5741
 
7194
- #### 10.4.3 SDK\u{8D44}\u{6E90}\u{6CC4}\u{6F0F}\u{68C0}\u{6D4B}
7195
- \`\`\`mermaid
7196
- sequenceDiagram
7197
- participant \u{5E94}\u{7528}\u{7CFB}\u{7EDF}
7198
- participant SDK
7199
- participant \u{8D44}\u{6E90}\u{7BA1}\u{7406}\u{5668}
7200
- participant \u{5185}\u{5B58}\u{76D1}\u{63A7}\u{5668}
7201
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
7202
- participant \u{76D1}\u{63A7}\u{670D}\u{52A1}
7203
-
7204
- \u{5E94}\u{7528}\u{7CFB}\u{7EDF}->>SDK: \u{957F}\u{65F6}\u{95F4}\u{4F7F}\u{7528}SDK
7205
- SDK->>\u{8D44}\u{6E90}\u{7BA1}\u{7406}\u{5668}: \u{5B9A}\u{671F}\u{68C0}\u{67E5}\u{8D44}\u{6E90}\u{72B6}\u{6001}
7206
- \u{8D44}\u{6E90}\u{7BA1}\u{7406}\u{5668}->>\u{5185}\u{5B58}\u{76D1}\u{63A7}\u{5668}: \u{68C0}\u{67E5}\u{5185}\u{5B58}\u{4F7F}\u{7528}\u{60C5}\u{51B5}
7207
- \u{5185}\u{5B58}\u{76D1}\u{63A7}\u{5668}-->>\u{8D44}\u{6E90}\u{7BA1}\u{7406}\u{5668}: \u{8FD4}\u{56DE}\u{5185}\u{5B58}\u{72B6}\u{6001}
7208
- alt \u{5185}\u{5B58}\u{4F7F}\u{7528}\u{6B63}\u{5E38}
7209
- \u{8D44}\u{6E90}\u{7BA1}\u{7406}\u{5668}->>SDK: \u{7EE7}\u{7EED}\u{6B63}\u{5E38}\u{8FD0}\u{884C}
7210
- else \u{53D1}\u{73B0}\u{5185}\u{5B58}\u{6CC4}\u{6F0F}
7211
- \u{8D44}\u{6E90}\u{7BA1}\u{7406}\u{5668}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{8D44}\u{6E90}\u{6CC4}\u{6F0F}\u{4E8B}\u{4EF6}
7212
- \u{8D44}\u{6E90}\u{7BA1}\u{7406}\u{5668}->>\u{76D1}\u{63A7}\u{670D}\u{52A1}: \u{53D1}\u{9001}\u{544A}\u{8B66}\u{901A}\u{77E5}
7213
- \u{8D44}\u{6E90}\u{7BA1}\u{7406}\u{5668}->>\u{8D44}\u{6E90}\u{7BA1}\u{7406}\u{5668}: \u{6267}\u{884C}\u{8D44}\u{6E90}\u{56DE}\u{6536}
7214
- \u{8D44}\u{6E90}\u{7BA1}\u{7406}\u{5668}-->>SDK: \u{8FD4}\u{56DE}\u{8D44}\u{6E90}\u{56DE}\u{6536}\u{7ED3}\u{679C}
7215
- end
7216
- SDK-->>\u{5E94}\u{7528}\u{7CFB}\u{7EDF}: \u{8FD4}\u{56DE}\u{8FD0}\u{884C}\u{72B6}\u{6001}
5742
+ **\u{539F}\u{59CB}\u{9700}\u{6C42}**:
5743
+ \`\`\`
5744
+ {inputContent}
7217
5745
  \`\`\`
7218
5746
 
7219
- ## 11. \u{4E1A}\u{52A1}\u{72B6}\u{6001}\u{63CF}\u{8FF0}
5747
+ ## \u{6587}\u{6863}\u{7ED3}\u{6784}\u{8981}\u{6C42}
5748
+ \u{8BF7}\u{4E25}\u{683C}\u{6309}\u{7167}\u{4EE5}\u{4E0B}\u{7ED3}\u{6784}\u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{7684}\u{9700}\u{6C42}\u{6587}\u{6863}\u{FF0C}\u{6BCF}\u{4E2A}\u{7AE0}\u{8282}\u{90FD}\u{8981}\u{6709}\u{8BE6}\u{5B9E}\u{7684}\u{5185}\u{5BB9}\u{FF1A}
7220
5749
 
7221
- | | | |
7222
- |---|---|---|
7223
- |**\u{72B6}\u{6001}\u{7F16}\u{53F7}**|**\u{72B6}\u{6001}\u{540D}\u{79F0}**|**\u{63CF}\u{8FF0}**|
7224
- |01|\u{672A}\u{521D}\u{59CB}\u{5316}|SDK\u{672A}\u{521D}\u{59CB}\u{5316}\u{72B6}\u{6001}|
7225
- |02|\u{521D}\u{59CB}\u{5316}\u{4E2D}|SDK\u{521D}\u{59CB}\u{5316}\u{8FDB}\u{884C}\u{4E2D}|
7226
- |03|\u{5DF2}\u{521D}\u{59CB}\u{5316}|SDK\u{521D}\u{59CB}\u{5316}\u{5B8C}\u{6210}|
7227
- |04|\u{8C03}\u{7528}\u{4E2D}|SDK\u{63A5}\u{53E3}\u{8C03}\u{7528}\u{4E2D}|
7228
- |05|\u{8C03}\u{7528}\u{6210}\u{529F}|SDK\u{63A5}\u{53E3}\u{8C03}\u{7528}\u{6210}\u{529F}|
7229
- |06|\u{8C03}\u{7528}\u{5931}\u{8D25}|SDK\u{63A5}\u{53E3}\u{8C03}\u{7528}\u{5931}\u{8D25}|
7230
- |[\u{6DFB}\u{52A0}\u{66F4}\u{591A}\u{72B6}\u{6001}...]
5750
+ # {featureName} - \u{4E09}\u{65B9}SDK\u{96C6}\u{6210}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}
5751
+
5752
+ > **\u{751F}\u{6210}\u{65F6}\u{95F4}**: {currentTime}
5753
+ > **\u{4E1A}\u{52A1}\u{9886}\u{57DF}**: {businessDomain}
5754
+ > **\u{96C6}\u{6210}\u{7C7B}\u{578B}**: \u{4E09}\u{65B9}SDK\u{96C6}\u{6210}
7231
5755
 
7232
- ## 12. \u{5904}\u{7406}\u{903B}\u{8F91}\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}
5756
+ ---
7233
5757
 
7234
- ### 12.1 SDK\u{521D}\u{59CB}\u{5316}\u{903B}\u{8F91}
7235
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{521D}\u{59CB}\u{5316}\u{7684}\u{5904}\u{7406}\u{903B}\u{8F91}]
5758
+ ## 1. \u{9700}\u{6C42}\u{6982}\u{8FF0}
7236
5759
 
7237
- ### 12.2 \u{63A5}\u{53E3}\u{8C03}\u{7528}\u{903B}\u{8F91}
7238
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{63A5}\u{53E3}\u{8C03}\u{7528}\u{7684}\u{5904}\u{7406}\u{903B}\u{8F91}]
5760
+ **\u{4E1A}\u{52A1}\u{80CC}\u{666F}**: [\u{63CF}\u{8FF0}SDK\u{96C6}\u{6210}\u{7684}\u{80CC}\u{666F}\u{3001}\u{4E1A}\u{52A1}\u{9700}\u{6C42}\u{548C}\u{76EE}\u{6807}]
7239
5761
 
7240
- ### 12.3 \u{56DE}\u{8C03}\u{5904}\u{7406}\u{903B}\u{8F91}
7241
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{56DE}\u{8C03}\u{7684}\u{5904}\u{7406}\u{903B}\u{8F91}]
5762
+ **\u{6838}\u{5FC3}\u{529F}\u{80FD}**: [\u{5217}\u{51FA}SDK\u{96C6}\u{6210}\u{7684}\u{4E3B}\u{8981}\u{529F}\u{80FD}\u{70B9}]
7242
5763
 
7243
- ### 12.4 \u{9519}\u{8BEF}\u{5904}\u{7406}\u{903B}\u{8F91}
7244
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{8C03}\u{7528}\u{9519}\u{8BEF}\u{7684}\u{5904}\u{7406}\u{903B}\u{8F91}]
5764
+ ## 2. SDK\u{96C6}\u{6210}\u{8BBE}\u{8BA1}
7245
5765
 
7246
- ### 12.5 \u{8D44}\u{6E90}\u{91CA}\u{653E}\u{903B}\u{8F91}
7247
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{8D44}\u{6E90}\u{91CA}\u{653E}\u{7684}\u{5904}\u{7406}\u{903B}\u{8F91}]
5766
+ ### 2.1 \u{63A5}\u{5165}\u{6D41}\u{7A0B}
5767
+ [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{63A5}\u{5165}\u{7684}\u{51C6}\u{5907}\u{5DE5}\u{4F5C}\u{548C}\u{914D}\u{7F6E}\u{6D41}\u{7A0B}]
7248
5768
 
7249
- ### 12.6 \u{91CD}\u{8BD5}\u{903B}\u{8F91}
7250
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{8C03}\u{7528}\u{5931}\u{8D25}\u{65F6}\u{7684}\u{91CD}\u{8BD5}\u{5904}\u{7406}\u{903B}\u{8F91}]
5769
+ ### 2.2 \u{521D}\u{59CB}\u{5316}\u{914D}\u{7F6E}
5770
+ [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{7684}\u{521D}\u{59CB}\u{5316}\u{914D}\u{7F6E}\u{8FC7}\u{7A0B}]
7251
5771
 
7252
- ### 12.7 \u{7F13}\u{5B58}\u{903B}\u{8F91}
7253
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{8C03}\u{7528}\u{4E2D}\u{7684}\u{7F13}\u{5B58}\u{5904}\u{7406}\u{903B}\u{8F91}]
5772
+ ## 3. \u{63A5}\u{53E3}\u{8C03}\u{7528}\u{8BF4}\u{660E}
7254
5773
 
7255
- ## 13. \u{6D4B}\u{8BD5}\u{9A8C}\u{8BC1}\u{8981}\u{6C42}
5774
+ ### 3.1 \u{4E3B}\u{8981}API\u{63A5}\u{53E3}
5775
+ [\u{5217}\u{51FA}SDK\u{63D0}\u{4F9B}\u{7684}\u{4E3B}\u{8981}API\u{63A5}\u{53E3}]
7256
5776
 
7257
- ### 13.1 \u{529F}\u{80FD}\u{6D4B}\u{8BD5}
7258
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{529F}\u{80FD}\u{7684}\u{6D4B}\u{8BD5}\u{8981}\u{6C42}]
5777
+ ### 3.2 \u{63A5}\u{53E3}\u{8C03}\u{7528}\u{793A}\u{4F8B}
5778
+ [\u{63D0}\u{4F9B}\u{8BE6}\u{7EC6}\u{7684}\u{63A5}\u{53E3}\u{8C03}\u{7528}\u{793A}\u{4F8B}\u{4EE3}\u{7801}]
7259
5779
 
7260
- ### 13.2 \u{6027}\u{80FD}\u{6D4B}\u{8BD5}
7261
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{6027}\u{80FD}\u{7684}\u{6D4B}\u{8BD5}\u{8981}\u{6C42}]
5780
+ ### 3.3 \u{53C2}\u{6570}\u{8BF4}\u{660E}
5781
+ [\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{5404}\u{63A5}\u{53E3}\u{7684}\u{8BF7}\u{6C42}\u{53C2}\u{6570}\u{548C}\u{54CD}\u{5E94}\u{6570}\u{636E}\u{7ED3}\u{6784}]
7262
5782
 
7263
- ### 13.3 \u{5B89}\u{5168}\u{6D4B}\u{8BD5}
7264
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{5B89}\u{5168}\u{6027}\u{7684}\u{6D4B}\u{8BD5}\u{8981}\u{6C42}]
5783
+ |\u{53C2}\u{6570}\u{540D}\u{79F0}|\u{7C7B}\u{578B}|\u{662F}\u{5426}\u{5FC5}\u{586B}|\u{8BF4}\u{660E}|
5784
+ |------|------|------|------|
5785
+ |[\u{53C2}\u{6570}1]|[string/number\u{7B49}]|[\u{662F}/\u{5426}]|[\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}]|
5786
+ |[\u{53C2}\u{6570}2]|[string/number\u{7B49}]|[\u{662F}/\u{5426}]|[\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}]|
7265
5787
 
7266
- ### 13.4 \u{517C}\u{5BB9}\u{6027}\u{6D4B}\u{8BD5}
7267
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{517C}\u{5BB9}\u{6027}\u{7684}\u{6D4B}\u{8BD5}\u{8981}\u{6C42}]
5788
+ ## 4. \u{4EA4}\u{4E92}\u{903B}\u{8F91}
7268
5789
 
7269
- ### 13.5 \u{5F02}\u{5E38}\u{6D4B}\u{8BD5}
7270
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{5F02}\u{5E38}\u{60C5}\u{51B5}\u{7684}\u{6D4B}\u{8BD5}\u{8981}\u{6C42}]
5790
+ ### 4.1 \u{8C03}\u{7528}\u{65F6}\u{5E8F}
5791
+ [\u{63CF}\u{8FF0}SDK\u{8C03}\u{7528}\u{7684}\u{65F6}\u{5E8F}\u{903B}\u{8F91}]
7271
5792
 
7272
- ### 13.6 \u{56DE}\u{5F52}\u{6D4B}\u{8BD5}
7273
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}SDK\u{56DE}\u{5F52}\u{6D4B}\u{8BD5}\u{7684}\u{8981}\u{6C42}]
5793
+ ### 4.2 \u{9519}\u{8BEF}\u{5904}\u{7406}
5794
+ [\u{63CF}\u{8FF0}SDK\u{8C03}\u{7528}\u{5F02}\u{5E38}\u{7684}\u{5904}\u{7406}\u{903B}\u{8F91}]
7274
5795
 
7275
- ## 14. \u{4F2A}\u{4EE3}\u{7801}\u{793A}\u{4F8B}
5796
+ ## 5. \u{5B89}\u{5168}\u{4E0E}\u{6027}\u{80FD}
7276
5797
 
7277
- \`\`\`gherkin
7278
- Scenario Outline: \u{7528}\u{6237}\u{901A}\u{8FC7}SDK\u{8FDB}\u{884C}\u{652F}\u{4ED8}\u{64CD}\u{4F5C}
7279
- Given \u{7CFB}\u{7EDF}\u{5DF2}\u{521D}\u{59CB}\u{5316}<sdk_name>SDK
7280
- When \u{7528}\u{6237}\u{53D1}\u{8D77}\u{652F}\u{4ED8}\u{8BF7}\u{6C42}\u{FF0C}\u{91D1}\u{989D}\u{4E3A}<amount>\u{FF0C}\u{8BA2}\u{5355}\u{53F7}\u{4E3A}<order_id>
7281
- Then SDK\u{5E94}\u{8FD4}\u{56DE}\u{652F}\u{4ED8}\u{7ED3}\u{679C}<result>
5798
+ ### 5.1 \u{5B89}\u{5168}\u{6027}\u{8003}\u{8651}
5799
+ [\u{63CF}\u{8FF0}\u{6570}\u{636E}\u{52A0}\u{5BC6}\u{3001}\u{8BBF}\u{95EE}\u{63A7}\u{5236}\u{7B49}\u{5B89}\u{5168}\u{8981}\u{6C42}]
7282
5800
 
7283
- Examples:
7284
- | sdk_name | amount | order_id | result |
7285
- | \u{652F}\u{4ED8}\u{5B9D} | 100.00 | ORD001 | \u{652F}\u{4ED8}\u{6210}\u{529F} |
7286
- | \u{5FAE}\u{4FE1}\u{652F}\u{4ED8} | 200.00 | ORD002 | \u{652F}\u{4ED8}\u{5931}\u{8D25}-\u{4F59}\u{989D}\u{4E0D}\u{8DB3} |
7287
-
7288
- Scenario Outline: SDK\u{521D}\u{59CB}\u{5316}\u{4E0E}\u{8BA4}\u{8BC1}\u{6D41}\u{7A0B}
7289
- Given \u{5E94}\u{7528}\u{7CFB}\u{7EDF}\u{4F7F}\u{7528}<sdk_type>\u{7C7B}\u{578B}\u{7684}SDK
7290
- When \u{7CFB}\u{7EDF}\u{542F}\u{52A8}SDK\u{521D}\u{59CB}\u{5316}\u{8FC7}\u{7A0B}\u{65F6}
7291
- Then SDK\u{5E94}:
7292
- 1. \u{9A8C}\u{8BC1}\u{5E94}\u{7528}\u{51ED}\u{8BC1}\u{7684}\u{6709}\u{6548}\u{6027}
7293
- 2. \u{68C0}\u{67E5}\u{5E94}\u{7528}\u{6743}\u{9650}
7294
- 3. \u{8FDE}\u{63A5}\u{7B2C}\u{4E09}\u{65B9}\u{670D}\u{52A1}
7295
- 4. \u{8FD4}\u{56DE}\u{521D}\u{59CB}\u{5316}\u{7ED3}\u{679C}
5801
+ ### 5.2 \u{6027}\u{80FD}\u{4F18}\u{5316}
5802
+ [\u{63CF}\u{8FF0}SDK\u{8C03}\u{7528}\u{7684}\u{6027}\u{80FD}\u{8981}\u{6C42}\u{548C}\u{4F18}\u{5316}\u{7B56}\u{7565}]
7296
5803
 
7297
- Examples:
7298
- | sdk_type | \u{9884}\u{671F}\u{884C}\u{4E3A} |
7299
- | \u{652F}\u{4ED8}SDK | \u{9A8C}\u{8BC1}\u{5546}\u{6237}ID\u{548C}\u{5BC6}\u{94A5}\u{FF0C}\u{8FDE}\u{63A5}\u{652F}\u{4ED8}\u{7F51}\u{5173} |
7300
- | \u{5730}\u{56FE}SDK | \u{9A8C}\u{8BC1}API Key\u{FF0C}\u{8FDE}\u{63A5}\u{5730}\u{56FE}\u{670D}\u{52A1} |
7301
- | \u{63A8}\u{9001}SDK | \u{9A8C}\u{8BC1}\u{5E94}\u{7528}\u{6807}\u{8BC6}\u{FF0C}\u{8FDE}\u{63A5}\u{63A8}\u{9001}\u{670D}\u{52A1} |
7302
- | \u{65E0}\u{6548}\u{51ED}\u{8BC1} | \u{8FD4}\u{56DE}\u{521D}\u{59CB}\u{5316}\u{5931}\u{8D25}\u{FF0C}\u{8BB0}\u{5F55}\u{9519}\u{8BEF}\u{65E5}\u{5FD7} |
7303
-
7304
- Scenario Outline: SDK\u{63A5}\u{53E3}\u{8C03}\u{7528}\u{4E0E}\u{56DE}\u{8C03}\u{5904}\u{7406}
7305
- Given \u{5E94}\u{7528}\u{7CFB}\u{7EDF}\u{5DF2}\u{521D}\u{59CB}\u{5316}<sdk_name>SDK
7306
- When \u{8C03}\u{7528}<api_method>\u{63A5}\u{53E3}\u{5E76}\u{4F20}\u{5165}<parameter_status>\u{53C2}\u{6570}\u{65F6}
7307
- Then SDK\u{5E94}:
7308
- 1. \u{9A8C}\u{8BC1}\u{53C2}\u{6570}\u{6709}\u{6548}\u{6027}
7309
- 2. \u{6267}\u{884C}API\u{8C03}\u{7528}
7310
- 3. \u{5904}\u{7406}\u{5F02}\u{6B65}\u{56DE}\u{8C03}
7311
- 4. \u{8FD4}\u{56DE}\u{8C03}\u{7528}\u{7ED3}\u{679C}
5804
+ ## 6. \u{4E1A}\u{52A1}\u{6D41}\u{7A0B}
7312
5805
 
7313
- Examples:
7314
- | sdk_name | api_method | parameter_status | \u{5904}\u{7406}\u{903B}\u{8F91} |
7315
- | \u{652F}\u{4ED8}\u{5B9D} | pay | \u{6709}\u{6548}\u{53C2}\u{6570} | \u{53D1}\u{8D77}\u{652F}\u{4ED8}\u{8BF7}\u{6C42}\u{FF0C}\u{76D1}\u{542C}\u{652F}\u{4ED8}\u{7ED3}\u{679C}\u{56DE}\u{8C03} |
7316
- | \u{5FAE}\u{4FE1}\u{652F}\u{4ED8} | refund | \u{7F3A}\u{5931}\u{5FC5}\u{586B}\u{53C2}\u{6570} | \u{8FD4}\u{56DE}\u{53C2}\u{6570}\u{9519}\u{8BEF}\u{FF0C}\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{7F3A}\u{5931}\u{5B57}\u{6BB5} |
7317
- | \u{5730}\u{56FE}SDK | getLocation| \u{7F51}\u{7EDC}\u{5F02}\u{5E38} | \u{91CD}\u{8BD5}3\u{6B21}\u{540E}\u{8FD4}\u{56DE}\u{7F51}\u{7EDC}\u{9519}\u{8BEF}\u{FF0C}\u{63D0}\u{4F9B}\u{79BB}\u{7EBF}\u{5B9A}\u{4F4D}\u{65B9}\u{6848} |
7318
- | \u{63A8}\u{9001}SDK | sendMessage| \u{8D85}\u{65F6}\u{53C2}\u{6570} | \u{8BBE}\u{7F6E}5\u{79D2}\u{8D85}\u{65F6}\u{FF0C}\u{8D85}\u{65F6}\u{540E}\u{8FD4}\u{56DE}\u{5931}\u{8D25}\u{5E76}\u{8BB0}\u{5F55}\u{65E5}\u{5FD7} |
7319
- | \u{5B58}\u{50A8}SDK | uploadFile | \u{5927}\u{6587}\u{4EF6} | \u{5206}\u{5757}\u{4E0A}\u{4F20}\u{FF0C}\u{652F}\u{6301}\u{65AD}\u{70B9}\u{7EED}\u{4F20}\u{548C}\u{8FDB}\u{5EA6}\u{56DE}\u{8C03} |
7320
-
7321
- Scenario Outline: SDK\u{9519}\u{8BEF}\u{5904}\u{7406}\u{4E0E}\u{6062}\u{590D}\u{673A}\u{5236}
7322
- Given SDK\u{5728}\u{6267}\u{884C}<operation_type>\u{64CD}\u{4F5C}\u{65F6}\u{9047}\u{5230}<error_type>\u{9519}\u{8BEF}
7323
- When \u{7CFB}\u{7EDF}\u{68C0}\u{6D4B}\u{5230}\u{9519}\u{8BEF}\u{5E76}\u{542F}\u{52A8}\u{6062}\u{590D}\u{6D41}\u{7A0B}\u{65F6}
7324
- Then SDK\u{5E94}:
7325
- 1. \u{8BB0}\u{5F55}\u{8BE6}\u{7EC6}\u{7684}\u{9519}\u{8BEF}\u{65E5}\u{5FD7}
7326
- 2. \u{6839}\u{636E}\u{9519}\u{8BEF}\u{7C7B}\u{578B}\u{6267}\u{884C}\u{6062}\u{590D}\u{7B56}\u{7565}
7327
- 3. \u{901A}\u{77E5}\u{5E94}\u{7528}\u{7CFB}\u{7EDF}\u{5904}\u{7406}\u{7ED3}\u{679C}
7328
- 4. \u{66F4}\u{65B0}\u{5185}\u{90E8}\u{72B6}\u{6001}\u{7BA1}\u{7406}
5806
+ [\u{4F7F}\u{7528}\u{7B80}\u{5355}\u{7684}mermaid\u{6D41}\u{7A0B}\u{56FE}\u{63CF}\u{8FF0}\u{4E3B}\u{8981}\u{4E1A}\u{52A1}\u{6D41}\u{7A0B}]
7329
5807
 
7330
- Examples:
7331
- | operation_type | error_type | \u{6062}\u{590D}\u{7B56}\u{7565} |
7332
- | \u{652F}\u{4ED8}\u{64CD}\u{4F5C} | \u{7F51}\u{7EDC}\u{8D85}\u{65F6} | \u{6307}\u{6570}\u{9000}\u{907F}\u{91CD}\u{8BD5}\u{FF0C}\u{6700}\u{591A}\u{91CD}\u{8BD5}3\u{6B21}\u{FF0C}\u{5931}\u{8D25}\u{540E}\u{8FD4}\u{56DE}\u{9519}\u{8BEF}\u{7801} |
7333
- | \u{6587}\u{4EF6}\u{4E0A}\u{4F20} | \u{670D}\u{52A1}\u{5668}\u{9519}\u{8BEF} | \u{6682}\u{505C}\u{4E0A}\u{4F20}\u{FF0C}\u{7B49}\u{5F85}5\u{5206}\u{949F}\u{540E}\u{81EA}\u{52A8}\u{6062}\u{590D}\u{FF0C}\u{652F}\u{6301}\u{624B}\u{52A8}\u{91CD}\u{8BD5} |
7334
- | \u{4F4D}\u{7F6E}\u{83B7}\u{53D6} | \u{6743}\u{9650}\u{62D2}\u{7EDD} | \u{5F15}\u{5BFC}\u{7528}\u{6237}\u{5F00}\u{542F}\u{6743}\u{9650}\u{FF0C}\u{63D0}\u{4F9B}\u{964D}\u{7EA7}\u{65B9}\u{6848}\u{FF08}\u{5982}IP\u{5B9A}\u{4F4D}\u{FF09} |
7335
- | \u{6D88}\u{606F}\u{63A8}\u{9001} | \u{8BC1}\u{4E66}\u{8FC7}\u{671F} | \u{81EA}\u{52A8}\u{66F4}\u{65B0}\u{8BC1}\u{4E66}\u{FF0C}\u{91CD}\u{65B0}\u{5EFA}\u{7ACB}\u{5B89}\u{5168}\u{8FDE}\u{63A5} |
7336
- | \u{6570}\u{636E}\u{540C}\u{6B65} | \u{6570}\u{636E}\u{51B2}\u{7A81} | \u{51B2}\u{7A81}\u{68C0}\u{6D4B}\u{4E0E}\u{5408}\u{5E76}\u{7B56}\u{7565}\u{FF0C}\u{8BB0}\u{5F55}\u{51B2}\u{7A81}\u{8BE6}\u{60C5}\u{4F9B}\u{4EBA}\u{5DE5}\u{5904}\u{7406} |
5808
+ \`\`\`mermaid
5809
+ graph TD
5810
+ A[\u{5F00}\u{59CB}] --> B[\u{5904}\u{7406}]
5811
+ B --> C[\u{7ED3}\u{675F}]
7337
5812
  \`\`\`
7338
5813
 
7339
5814
  ---
7340
5815
 
7341
- **\u{91CD}\u{8981}\u{63D0}\u{9192}**:
7342
- 1. \u{8BF7}\u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{7684}Markdown\u{6587}\u{6863}\u{FF0C}\u{4E0D}\u{8981}\u{7701}\u{7565}\u{4EFB}\u{4F55}\u{7AE0}\u{8282}
7343
- 2. \u{6BCF}\u{4E2A}\u{7AE0}\u{8282}\u{90FD}\u{8981}\u{6709}\u{5B9E}\u{8D28}\u{6027}\u{7684}\u{5185}\u{5BB9}\u{FF0C}\u{4E0D}\u{80FD}\u{53EA}\u{662F}\u{6A21}\u{677F}
7344
- 3. \u{6839}\u{636E}\u{8F93}\u{5165}\u{7684}\u{539F}\u{59CB}\u{5185}\u{5BB9}\u{8FDB}\u{884C}\u{5177}\u{4F53}\u{5206}\u{6790}\u{FF0C}\u{4E0D}\u{8981}\u{4F7F}\u{7528}\u{901A}\u{7528}\u{6A21}\u{677F}
7345
- 4. \u{6587}\u{6863}\u{603B}\u{957F}\u{5EA6}\u{5E94}\u{8BE5}\u{5728}3000\u{5B57}\u{4EE5}\u{4E0A}
7346
- 5. \u{8868}\u{683C}\u{4E2D}\u{7684}\u{5185}\u{5BB9}\u{8981}\u{586B}\u{5199}\u{5177}\u{4F53}\u{4FE1}\u{606F}\u{FF0C}\u{4E0D}\u{8981}\u{4FDD}\u{7559}\u{5360}\u{4F4D}\u{7B26}
7347
- 6. \u{91CD}\u{70B9}\u{5173}\u{6CE8}SDK\u{63A5}\u{5165}\u{6D41}\u{7A0B}\u{3001}\u{63A5}\u{53E3}\u{8C03}\u{7528}\u{3001}\u{6570}\u{636E}\u{7ED3}\u{6784}\u{7B49}\u{6280}\u{672F}\u{7EC6}\u{8282}
7348
-
7349
- \u{73B0}\u{5728}\u{8BF7}\u{5F00}\u{59CB}\u{751F}\u{6210}\u{5B8C}\u{6574}\u{7684}\u{4E09}\u{65B9}SDK\u{96C6}\u{6210}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}\u{FF1A}`;
7350
- const apiTemplatePrompt = `\u{4F60}\u{662F}\u{4E00}\u{4F4D}\u{4E13}\u{4E1A}\u{7684}\u{540E}\u{7AEF}\u{6280}\u{672F}\u{6587}\u{6863}\u{7F16}\u{5199}\u{4E13}\u{5BB6}\u{3002}\u{8BF7}\u{57FA}\u{4E8E}\u{7528}\u{6237}\u{63D0}\u{4F9B}\u{7684}\u{8F93}\u{5165}\u{5185}\u{5BB9}\u{FF0C}\u{751F}\u{6210}\u{4E00}\u{4EFD}\u{5B8C}\u{6574}\u{3001}\u{8BE6}\u{7EC6}\u{7684}API\u{63A5}\u{53E3}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}\u{3002}
7351
-
7352
- ## \u{4EFB}\u{52A1}\u{8981}\u{6C42}
7353
- - \u{5FC5}\u{987B}\u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{7684}Markdown\u{683C}\u{5F0F}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}
7354
- - \u{4E0D}\u{8981}\u{53EA}\u{7ED9}\u{51FA}\u{603B}\u{7ED3}\u{FF0C}\u{8981}\u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{7684}\u{6587}\u{6863}\u{5185}\u{5BB9}
7355
- - \u{6BCF}\u{4E2A}\u{7AE0}\u{8282}\u{90FD}\u{8981}\u{6709}\u{8BE6}\u{7EC6}\u{7684}\u{5185}\u{5BB9}\u{FF0C}\u{4E0D}\u{80FD}\u{7701}\u{7565}
7356
- - \u{6587}\u{6863}\u{957F}\u{5EA6}\u{5E94}\u{8BE5}\u{5728}3000\u{5B57}\u{4EE5}\u{4E0A}
7357
- - \u{91CD}\u{70B9}\u{63CF}\u{8FF0}API\u{63A5}\u{53E3}\u{8BBE}\u{8BA1}\u{3001}\u{6570}\u{636E}\u{7ED3}\u{6784}\u{3001}\u{4EA4}\u{4E92}\u{903B}\u{8F91}\u{7B49}\u{540E}\u{7AEF}\u{76F8}\u{5173}\u{5185}\u{5BB9}
7358
-
7359
- ## \u{8F93}\u{5165}\u{4FE1}\u{606F}
7360
- - **\u{529F}\u{80FD}\u{540D}\u{79F0}**: {featureName}
7361
- - **\u{4E1A}\u{52A1}\u{9886}\u{57DF}**: {businessDomain}
7362
- - **\u{751F}\u{6210}\u{65F6}\u{5E8F}\u{56FE}**: {generateSequenceDiagram}
7363
-
7364
- ## \u{539F}\u{59CB}\u{9700}\u{6C42}\u{5185}\u{5BB9}
5816
+ **\u{8981}\u{6C42}**: \u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{6587}\u{6863}\u{FF0C}\u{6BCF}\u{7AE0}\u{8282}\u{6709}\u{5B9E}\u{8D28}\u{5185}\u{5BB9}\u{FF0C}\u{8868}\u{683C}\u{586B}\u{5199}\u{5177}\u{4F53}\u{4FE1}\u{606F}\u{FF0C}\u{91CD}\u{70B9}\u{5173}\u{6CE8}SDK\u{63A5}\u{5165}\u{6D41}\u{7A0B}\u{3001}\u{63A5}\u{53E3}\u{8C03}\u{7528}\u{548C}\u{6570}\u{636E}\u{7ED3}\u{6784}\u{3002}`;
5817
+ const apiTemplatePrompt = `\u{4F60}\u{662F}\u{540E}\u{7AEF}\u{6280}\u{672F}\u{6587}\u{6863}\u{4E13}\u{5BB6}\u{3002}\u{57FA}\u{4E8E}\u{8F93}\u{5165}\u{5185}\u{5BB9}\u{751F}\u{6210}\u{5B8C}\u{6574}\u{7684}API\u{63A5}\u{53E3}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}\u{FF08}Markdown\u{683C}\u{5F0F}\u{FF0C}3000\u{5B57}\u{4EE5}\u{4E0A}\u{FF09}\u{3002}
5818
+
5819
+ **\u{8F93}\u{5165}**: \u{529F}\u{80FD}\u{540D}\u{79F0}={featureName}, \u{4E1A}\u{52A1}\u{9886}\u{57DF}={businessDomain}, \u{751F}\u{6210}\u{65F6}\u{5E8F}\u{56FE}={generateSequenceDiagram}
5820
+
5821
+ **\u{539F}\u{59CB}\u{9700}\u{6C42}**:
7365
5822
  \`\`\`
7366
5823
  {inputContent}
7367
5824
  \`\`\`
@@ -7401,13 +5858,15 @@ Scenario Outline: SDK\u{9519}\u{8BEF}\u{5904}\u{7406}\u{4E0E}\u{6062}\u{590D}\u{
7401
5858
  ## 3. \u{6570}\u{636E}\u{5EFA}\u{6A21}
7402
5859
  ## 3.1 ER\u{903B}\u{8F91}\u{56FE}\u{8BBE}\u{8BA1}
7403
5860
 
7404
- [\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}]
5861
+ [\u{63CF}\u{8FF0}\u{6570}\u{636E}\u{5E93}\u{8868}\u{FF08}\u{8981}\u{5305}\u{542B}\u{6570}\u{636E}\u{5E93}\u{4E2D}\u{6587}\u{548C}\u{82F1}\u{6587}\u{540D}\u{79F0}\u{FF0C}\u{6570}\u{636E}\u{5E93}\u{8868}\u{5B57}\u{6BB5}\u{FF09}\u{4E4B}\u{95F4}\u{7684}\u{5173}\u{7CFB}\u{548C}ER\u{56FE}\u{8BBE}\u{8BA1}]
7405
5862
  \`\`\`mermaid
7406
5863
  \`\`\`
7407
5864
 
5865
+ [\u{63CF}\u{8FF0}\u{5BF9}\u{8C61}\u{4E4B}\u{95F4}\u{7684}\u{5173}\u{7CFB}]
5866
+
7408
5867
  ## 4. \u{6570}\u{636E}\u{8868}\u{5B9E}\u{4F53}\u{8BBE}\u{8BA1}
7409
5868
 
7410
- [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{6D89}\u{53CA}\u{7684}\u{6570}\u{636E}\u{8868}\u{5B9E}\u{4F53}\u{7ED3}\u{6784}\u{FF0C}\u{5305}\u{62EC}\u{5B57}\u{6BB5}\u{540D}\u{3001}\u{7C7B}\u{578B}\u{3001}\u{7EA6}\u{675F}\u{6761}\u{4EF6}\u{7B49}]
5869
+ [\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}\u{6D89}\u{53CA}\u{7684}\u{6570}\u{636E}\u{8868}\u{5B9E}\u{4F53}\u{7ED3}\u{6784}\u{FF0C}\u{5305}\u{62EC}\u{5B57}\u{6BB5}\u{540D}\u{3001}\u{7C7B}\u{578B}\u{3001}\u{7EA6}\u{675F}\u{6761}\u{4EF6}\u{3001}\u{7D22}\u{5F15}\u{89C4}\u{5219}\u{7B49}]
7411
5870
 
7412
5871
  ## 5. API\u{63A5}\u{53E3}\u{8BBE}\u{8BA1}
7413
5872
 
@@ -7455,27 +5914,6 @@ Scenario Outline: SDK\u{9519}\u{8BEF}\u{5904}\u{7406}\u{4E0E}\u{6062}\u{590D}\u{
7455
5914
  #### 6.2.1 \u{6B63}\u{5411}\u{6D41}\u{7A0B}
7456
5915
  \`\`\`mermaid
7457
5916
  sequenceDiagram
7458
- participant \u{5BA2}\u{6237}\u{7AEF}
7459
- participant API\u{7F51}\u{5173}
7460
- participant \u{8BA4}\u{8BC1}\u{670D}\u{52A1}
7461
- participant \u{6743}\u{9650}\u{670D}\u{52A1}
7462
- participant \u{4E1A}\u{52A1}\u{670D}\u{52A1}
7463
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
7464
-
7465
- \u{5BA2}\u{6237}\u{7AEF}->>API\u{7F51}\u{5173}: \u{53D1}\u{9001}API\u{8BF7}\u{6C42}
7466
- 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}
7467
- alt \u{4EE4}\u{724C}\u{6709}\u{6548}
7468
- \u{8BA4}\u{8BC1}\u{670D}\u{52A1}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{8BA4}\u{8BC1}\u{6210}\u{529F}
7469
- 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}
7470
- \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}
7471
- API\u{7F51}\u{5173}->>\u{4E1A}\u{52A1}\u{670D}\u{52A1}: \u{8F6C}\u{53D1}\u{8BF7}\u{6C42}
7472
- \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}
7473
- API\u{7F51}\u{5173}->>\u{5BA2}\u{6237}\u{7AEF}: \u{8FD4}\u{56DE}\u{54CD}\u{5E94}
7474
- else \u{4EE4}\u{724C}\u{65E0}\u{6548}
7475
- \u{8BA4}\u{8BC1}\u{670D}\u{52A1}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{8BA4}\u{8BC1}\u{5931}\u{8D25}
7476
- API\u{7F51}\u{5173}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{8BA4}\u{8BC1}\u{5931}\u{8D25}
7477
- API\u{7F51}\u{5173}->>\u{5BA2}\u{6237}\u{7AEF}: \u{8FD4}\u{56DE}401\u{9519}\u{8BEF}
7478
- end
7479
5917
  \`\`\`
7480
5918
 
7481
5919
  ### 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}
@@ -7483,85 +5921,11 @@ sequenceDiagram
7483
5921
  #### 6.3.1 xx\u{5F02}\u{5E38}\u{5904}\u{7406}\u{6D41}\u{7A0B}
7484
5922
  \`\`\`mermaid
7485
5923
  sequenceDiagram
7486
- participant \u{5BA2}\u{6237}\u{7AEF}
7487
- participant API\u{7F51}\u{5173}
7488
- participant \u{9650}\u{6D41}\u{670D}\u{52A1}
7489
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
7490
-
7491
- \u{5BA2}\u{6237}\u{7AEF}->>API\u{7F51}\u{5173}: \u{53D1}\u{9001}API\u{8BF7}\u{6C42}
7492
- API\u{7F51}\u{5173}->>\u{9650}\u{6D41}\u{670D}\u{52A1}: \u{68C0}\u{67E5}\u{8BF7}\u{6C42}\u{9891}\u{7387}
7493
- \u{9650}\u{6D41}\u{670D}\u{52A1}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{9650}\u{6D41}\u{51B3}\u{5B9A}
7494
- alt \u{8BF7}\u{6C42}\u{9891}\u{7387}\u{6B63}\u{5E38}
7495
- API\u{7F51}\u{5173}->>\u{540E}\u{7EED}\u{670D}\u{52A1}: \u{5904}\u{7406}\u{8BF7}\u{6C42}
7496
- else \u{8BF7}\u{6C42}\u{9891}\u{7387}\u{8FC7}\u{9AD8}
7497
- API\u{7F51}\u{5173}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{9650}\u{6D41}\u{4E8B}\u{4EF6}
7498
- API\u{7F51}\u{5173}->>\u{5BA2}\u{6237}\u{7AEF}: \u{8FD4}\u{56DE}429\u{9519}\u{8BEF}(\u{8BF7}\u{6C42}\u{8FC7}\u{591A})
7499
- end
7500
5924
  \`\`\`
7501
5925
 
7502
5926
  #### 6.3.2 xx\u{5F02}\u{5E38}\u{5904}\u{7406}\u{6D41}\u{7A0B}
7503
5927
  \`\`\`mermaid
7504
5928
  sequenceDiagram
7505
- participant \u{5BA2}\u{6237}\u{7AEF}
7506
- participant API\u{7F51}\u{5173}
7507
- participant \u{4E1A}\u{52A1}\u{670D}\u{52A1}
7508
- participant \u{6570}\u{636E}\u{9A8C}\u{8BC1}\u{5668}
7509
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
7510
-
7511
- \u{5BA2}\u{6237}\u{7AEF}->>API\u{7F51}\u{5173}: \u{53D1}\u{9001}\u{5305}\u{542B}\u{65E0}\u{6548}\u{6570}\u{636E}\u{7684}\u{8BF7}\u{6C42}
7512
- API\u{7F51}\u{5173}->>\u{4E1A}\u{52A1}\u{670D}\u{52A1}: \u{8F6C}\u{53D1}\u{8BF7}\u{6C42}
7513
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}->>\u{6570}\u{636E}\u{9A8C}\u{8BC1}\u{5668}: \u{9A8C}\u{8BC1}\u{6570}\u{636E}\u{683C}\u{5F0F}
7514
- \u{6570}\u{636E}\u{9A8C}\u{8BC1}\u{5668}-->>\u{4E1A}\u{52A1}\u{670D}\u{52A1}: \u{8FD4}\u{56DE}\u{9A8C}\u{8BC1}\u{5931}\u{8D25}
7515
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{9A8C}\u{8BC1}\u{9519}\u{8BEF}
7516
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}400\u{9519}\u{8BEF}(\u{8BF7}\u{6C42}\u{6570}\u{636E}\u{65E0}\u{6548})
7517
- 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}
7518
- \`\`\`
7519
-
7520
- ### 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}
7521
-
7522
- #### 6.4.1 \u{5E76}\u{53D1}\u{51B2}\u{7A81}\u{5904}\u{7406}
7523
- \`\`\`mermaid
7524
- sequenceDiagram
7525
- participant \u{5BA2}\u{6237}\u{7AEF}
7526
- participant API\u{7F51}\u{5173}
7527
- participant \u{6570}\u{636E}\u{5E93}
7528
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
7529
- participant \u{7F13}\u{5B58}\u{670D}\u{52A1}
7530
-
7531
- alt \u{9AD8}\u{5E76}\u{53D1}\u{573A}\u{666F}
7532
- \u{5BA2}\u{6237}\u{7AEF}->>API\u{7F51}\u{5173}: \u{5E76}\u{53D1}\u{8BF7}\u{6C42}
7533
- API\u{7F51}\u{5173}->>\u{6570}\u{636E}\u{5E93}: \u{6267}\u{884C}\u{6570}\u{636E}\u{64CD}\u{4F5C}
7534
- \u{6570}\u{636E}\u{5E93}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{7ED3}\u{679C}
7535
- API\u{7F51}\u{5173}->>\u{7F13}\u{5B58}\u{670D}\u{52A1}: \u{7F13}\u{5B58}\u{54CD}\u{5E94}\u{6570}\u{636E}
7536
- API\u{7F51}\u{5173}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{5E76}\u{53D1}\u{51B2}\u{7A81}
7537
- else \u{975E}\u{9AD8}\u{5E76}\u{53D1}\u{573A}\u{666F}
7538
- API\u{7F51}\u{5173}->>\u{6570}\u{636E}\u{5E93}: \u{6267}\u{884C}\u{6570}\u{636E}\u{64CD}\u{4F5C}
7539
- \u{6570}\u{636E}\u{5E93}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{7ED3}\u{679C}
7540
- API\u{7F51}\u{5173}->>\u{7F13}\u{5B58}\u{670D}\u{52A1}: \u{7F13}\u{5B58}\u{54CD}\u{5E94}\u{6570}\u{636E}
7541
- end
7542
- API\u{7F51}\u{5173}->>\u{5BA2}\u{6237}\u{7AEF}: \u{8FD4}\u{56DE}\u{54CD}\u{5E94}
7543
- \`\`\`
7544
- #### 6.4.2 \u{8D85}\u{65F6}\u{5904}\u{7406}
7545
- \`\`\`mermaid
7546
- sequenceDiagram
7547
- participant \u{5BA2}\u{6237}\u{7AEF}
7548
- participant API\u{7F51}\u{5173}
7549
- participant \u{4E1A}\u{52A1}\u{670D}\u{52A1}
7550
- participant \u{65E5}\u{5FD7}\u{670D}\u{52A1}
7551
- participant \u{76D1}\u{63A7}\u{670D}\u{52A1}
7552
- participant \u{5907}\u{7528}\u{670D}\u{52A1}
7553
-
7554
- \u{5BA2}\u{6237}\u{7AEF}->>API\u{7F51}\u{5173}: \u{53D1}\u{9001}\u{5305}\u{542B}\u{65E0}\u{6548}\u{6570}\u{636E}\u{7684}\u{8BF7}\u{6C42}
7555
- API\u{7F51}\u{5173}->>\u{4E1A}\u{52A1}\u{670D}\u{52A1}: \u{8F6C}\u{53D1}\u{8BF7}\u{6C42}
7556
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{8D85}\u{65F6}\u{4E8B}\u{4EF6}
7557
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}->>\u{76D1}\u{63A7}\u{670D}\u{52A1}: \u{4E0A}\u{62A5}\u{8D85}\u{65F6}\u{6307}\u{6807}
7558
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}-->>\u{4E1A}\u{52A1}\u{670D}\u{52A1}: \u{91CD}\u{8BD5}\u{8BF7}\u{6C42}
7559
- \u{4E1A}\u{52A1}\u{670D}\u{52A1}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}408\u{9519}\u{8BEF}(\u{8BF7}\u{6C42}\u{8D85}\u{65F6})
7560
- API\u{7F51}\u{5173}->>\u{5907}\u{7528}\u{670D}\u{52A1}: \u{8F6C}\u{53D1}\u{8BF7}\u{6C42}
7561
- \u{5907}\u{7528}\u{670D}\u{52A1}-->>API\u{7F51}\u{5173}: \u{8FD4}\u{56DE}\u{9519}\u{8BEF}\u{54CD}\u{5E94}
7562
- API\u{7F51}\u{5173}->>\u{65E5}\u{5FD7}\u{670D}\u{52A1}: \u{65E5}\u{5FD7}\u{8BB0}\u{5F55}\u{5907}\u{7528}\u{670D}\u{52A1}\u{54CD}\u{5E94}
7563
- API\u{7F51}\u{5173}->>\u{76D1}\u{63A7}\u{670D}\u{52A1}: \u{8BB0}\u{5F55}\u{5907}\u{7528}\u{670D}\u{52A1}\u{5931}\u{8D25}
7564
- 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}
7565
5929
  \`\`\`
7566
5930
 
7567
5931
  ## 7. \u{4E1A}\u{52A1}\u{72B6}\u{6001}\u{63CF}\u{8FF0}
@@ -7585,67 +5949,11 @@ Scenario Outline: \u{7528}\u{6237}\u{901A}\u{8FC7}API\u{67E5}\u{8BE2}\u{8BA2}\u{
7585
5949
  | order_id | error_message |
7586
5950
  | 12345 | null (\u{6210}\u{529F}\u{8FD4}\u{56DE}\u{8BA2}\u{5355}\u{4FE1}\u{606F}) |
7587
5951
  | 99999 | "\u{8BA2}\u{5355}\u{4E0D}\u{5B58}\u{5728}" |
7588
-
7589
- Scenario Outline: API\u{8BA4}\u{8BC1}\u{4E0E}\u{6388}\u{6743}\u{6D41}\u{7A0B}
7590
- Given \u{5BA2}\u{6237}\u{7AEF}\u{4F7F}\u{7528}<auth_type>\u{65B9}\u{5F0F}\u{8FDB}\u{884C}\u{8BA4}\u{8BC1}
7591
- When \u{5BA2}\u{6237}\u{7AEF}\u{8BBF}\u{95EE}<api_endpoint>\u{63A5}\u{53E3}\u{65F6}
7592
- Then \u{7CFB}\u{7EDF}\u{5E94}:
7593
- 1. \u{9A8C}\u{8BC1}\u{8BA4}\u{8BC1}\u{51ED}\u{8BC1}\u{7684}\u{6709}\u{6548}\u{6027}
7594
- 2. \u{68C0}\u{67E5}\u{7528}\u{6237}\u{6743}\u{9650}
7595
- 3. \u{6839}\u{636E}\u{9A8C}\u{8BC1}\u{7ED3}\u{679C}\u{8FD4}\u{56DE}\u{76F8}\u{5E94}\u{54CD}\u{5E94}
7596
-
7597
- Examples:
7598
- | auth_type | api_endpoint | \u{9884}\u{671F}\u{884C}\u{4E3A} |
7599
- | Bearer Token | /orders | \u{9A8C}\u{8BC1}\u{4EE4}\u{724C}\u{6709}\u{6548}\u{6027}\u{FF0C}\u{68C0}\u{67E5}\u{8BA2}\u{5355}\u{8BBF}\u{95EE}\u{6743}\u{9650} |
7600
- | API Key | /products | \u{9A8C}\u{8BC1}API Key\u{FF0C}\u{68C0}\u{67E5}\u{4EA7}\u{54C1}\u{8BBF}\u{95EE}\u{6743}\u{9650} |
7601
- | \u{65E0}\u{6548}\u{4EE4}\u{724C} | /orders | \u{8FD4}\u{56DE}401\u{672A}\u{6388}\u{6743}\u{9519}\u{8BEF} |
7602
- | \u{65E0}\u{6743}\u{9650}\u{7528}\u{6237} | /admin | \u{8FD4}\u{56DE}403\u{7981}\u{6B62}\u{8BBF}\u{95EE}\u{9519}\u{8BEF} |
7603
-
7604
- Scenario Outline: API\u{8C03}\u{7528}\u{4E0E}\u{6570}\u{636E}\u{5904}\u{7406}\u{6D41}\u{7A0B}
7605
- Given \u{5BA2}\u{6237}\u{7AEF}\u{5411}<api_endpoint>\u{53D1}\u{9001}<http_method>\u{8BF7}\u{6C42}
7606
- When \u{8BF7}\u{6C42}\u{5305}\u{542B}<data_status>\u{6570}\u{636E}\u{65F6}
7607
- Then \u{7CFB}\u{7EDF}\u{5E94}:
7608
- 1. \u{9A8C}\u{8BC1}\u{8BF7}\u{6C42}\u{53C2}\u{6570}\u{683C}\u{5F0F}
7609
- 2. \u{6267}\u{884C}\u{4E1A}\u{52A1}\u{903B}\u{8F91}\u{5904}\u{7406}
7610
- 3. \u{8FD4}\u{56DE}\u{6807}\u{51C6}\u{5316}\u{54CD}\u{5E94}\u{683C}\u{5F0F}
7611
-
7612
- Examples:
7613
- | api_endpoint | http_method | data_status | \u{5904}\u{7406}\u{903B}\u{8F91} |
7614
- | /users | POST | \u{6709}\u{6548}\u{6570}\u{636E} | \u{521B}\u{5EFA}\u{65B0}\u{7528}\u{6237}\u{FF0C}\u{8FD4}\u{56DE}\u{7528}\u{6237}ID\u{548C}\u{521B}\u{5EFA}\u{65F6}\u{95F4} |
7615
- | /users | POST | \u{7F3A}\u{5931}\u{5FC5}\u{586B}\u{9879} | \u{8FD4}\u{56DE}400\u{9519}\u{8BEF}\u{FF0C}\u{8BE6}\u{7EC6}\u{8BF4}\u{660E}\u{7F3A}\u{5931}\u{5B57}\u{6BB5} |
7616
- | /users/123 | PUT | \u{66F4}\u{65B0}\u{6570}\u{636E} | \u{66F4}\u{65B0}\u{7528}\u{6237}\u{4FE1}\u{606F}\u{FF0C}\u{8FD4}\u{56DE}\u{66F4}\u{65B0}\u{540E}\u{7684}\u{5B8C}\u{6574}\u{7528}\u{6237}\u{4FE1}\u{606F} |
7617
- | /users/123 | DELETE | \u{5B58}\u{5728}\u{8D44}\u{6E90} | \u{5220}\u{9664}\u{7528}\u{6237}\u{FF0C}\u{8FD4}\u{56DE}204\u{72B6}\u{6001}\u{7801} |
7618
- | /users/999 | POST | \u{4E0D}\u{5B58}\u{5728}\u{8D44}\u{6E90} | \u{8FD4}\u{56DE}404\u{9519}\u{8BEF}\u{FF0C}\u{8BF4}\u{660E}\u{8D44}\u{6E90}\u{672A}\u{627E}\u{5230} |
7619
- | /users | POST | \u{5927}\u{91CF}\u{6570}\u{636E} | \u{5206}\u{9875}\u{8FD4}\u{56DE}\u{7528}\u{6237}\u{5217}\u{8868}\u{FF0C}\u{5305}\u{542B}\u{603B}\u{6570}\u{548C}\u{5206}\u{9875}\u{4FE1}\u{606F} |
7620
-
7621
- Scenario Outline: API\u{9650}\u{6D41}\u{4E0E}\u{9519}\u{8BEF}\u{6062}\u{590D}\u{5904}\u{7406}
7622
- Given \u{5BA2}\u{6237}\u{7AEF}\u{5728}<time_window>\u{5185}\u{53D1}\u{9001}<request_count>\u{4E2A}\u{8BF7}\u{6C42}
7623
- When \u{7CFB}\u{7EDF}\u{68C0}\u{6D4B}\u{5230}<traffic_pattern>\u{65F6}
7624
- Then \u{7CFB}\u{7EDF}\u{5E94}:
7625
- 1. \u{5E94}\u{7528}\u{9650}\u{6D41}\u{7B56}\u{7565}\u{63A7}\u{5236}\u{8BF7}\u{6C42}\u{9891}\u{7387}
7626
- 2. \u{8FD4}\u{56DE}\u{9002}\u{5F53}\u{7684}\u{9650}\u{6D41}\u{54CD}\u{5E94}\u{7801}
7627
- 3. \u{63D0}\u{4F9B}\u{91CD}\u{8BD5}\u{5EFA}\u{8BAE}\u{548C}\u{65F6}\u{95F4}\u{7A97}\u{53E3}\u{4FE1}\u{606F}
7628
-
7629
- Examples:
7630
- | time_window | request_count | traffic_pattern | \u{9650}\u{6D41}\u{7B56}\u{7565} |
7631
- | 1\u{5206}\u{949F} | 60\u{4E2A}\u{8BF7}\u{6C42} | \u{6B63}\u{5E38}\u{6D41}\u{91CF} | \u{5141}\u{8BB8}\u{8BF7}\u{6C42}\u{901A}\u{8FC7}\u{FF0C}\u{8BB0}\u{5F55}\u{8BBF}\u{95EE}\u{65E5}\u{5FD7} |
7632
- | 1\u{5206}\u{949F} | 120\u{4E2A}\u{8BF7}\u{6C42} | \u{7A81}\u{53D1}\u{6D41}\u{91CF} | \u{8FD4}\u{56DE}429\u{72B6}\u{6001}\u{7801}\u{FF0C}\u{5EFA}\u{8BAE}\u{7B49}\u{5F85}30\u{79D2}\u{540E}\u{91CD}\u{8BD5} |
7633
- | 1\u{5206}\u{949F} | 1000\u{4E2A}\u{8BF7}\u{6C42} | \u{6076}\u{610F}\u{653B}\u{51FB} | \u{7ACB}\u{5373}\u{62D2}\u{7EDD}\u{8BF7}\u{6C42}\u{FF0C}\u{8BB0}\u{5F55}IP\u{5E76}\u{89E6}\u{53D1}\u{5B89}\u{5168}\u{9632}\u{62A4}\u{673A}\u{5236} |
7634
- | 5\u{5206}\u{949F} | 50\u{4E2A}\u{8BF7}\u{6C42} | \u{5468}\u{671F}\u{6027}\u{8BF7}\u{6C42} | \u{5141}\u{8BB8}\u{8BF7}\u{6C42}\u{901A}\u{8FC7}\u{FF0C}\u{4F18}\u{5316}\u{7F13}\u{5B58}\u{7B56}\u{7565}\u{63D0}\u{5347}\u{54CD}\u{5E94}\u{901F}\u{5EA6} |
7635
- | 1\u{5C0F}\u{65F6} | 10000\u{4E2A}\u{8BF7}\u{6C42} | \u{6B63}\u{5E38}\u{4E1A}\u{52A1}\u{9AD8}\u{5CF0} | \u{52A8}\u{6001}\u{8C03}\u{6574}\u{9650}\u{6D41}\u{9608}\u{503C}\u{FF0C}\u{542F}\u{7528}\u{8D1F}\u{8F7D}\u{5747}\u{8861}\u{7B56}\u{7565} |
7636
5952
  \`\`\`
7637
5953
 
7638
5954
  ---
7639
5955
 
7640
- **\u{91CD}\u{8981}\u{63D0}\u{9192}**:
7641
- 1. \u{8BF7}\u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{7684}Markdown\u{6587}\u{6863}\u{FF0C}\u{4E0D}\u{8981}\u{7701}\u{7565}\u{4EFB}\u{4F55}\u{7AE0}\u{8282}
7642
- 2. \u{6BCF}\u{4E2A}\u{7AE0}\u{8282}\u{90FD}\u{8981}\u{6709}\u{5B9E}\u{8D28}\u{6027}\u{7684}\u{5185}\u{5BB9}\u{FF0C}\u{4E0D}\u{80FD}\u{53EA}\u{662F}\u{6A21}\u{677F}
7643
- 3. \u{6839}\u{636E}\u{8F93}\u{5165}\u{7684}\u{539F}\u{59CB}\u{5185}\u{5BB9}\u{8FDB}\u{884C}\u{5177}\u{4F53}\u{5206}\u{6790}\u{FF0C}\u{4E0D}\u{8981}\u{4F7F}\u{7528}\u{901A}\u{7528}\u{6A21}\u{677F}
7644
- 4. \u{6587}\u{6863}\u{603B}\u{957F}\u{5EA6}\u{5E94}\u{8BE5}\u{5728}3000\u{5B57}\u{4EE5}\u{4E0A}
7645
- 5. \u{8868}\u{683C}\u{4E2D}\u{7684}\u{5185}\u{5BB9}\u{8981}\u{586B}\u{5199}\u{5177}\u{4F53}\u{4FE1}\u{606F}\u{FF0C}\u{4E0D}\u{8981}\u{4FDD}\u{7559}\u{5360}\u{4F4D}\u{7B26}
7646
- 6. \u{91CD}\u{70B9}\u{5173}\u{6CE8}API\u{63A5}\u{53E3}\u{8BBE}\u{8BA1}\u{3001}\u{6570}\u{636E}\u{7ED3}\u{6784}\u{3001}\u{4EA4}\u{4E92}\u{903B}\u{8F91}\u{7B49}\u{6280}\u{672F}\u{7EC6}\u{8282}
7647
-
7648
- \u{73B0}\u{5728}\u{8BF7}\u{5F00}\u{59CB}\u{751F}\u{6210}\u{5B8C}\u{6574}\u{7684}API\u{63A5}\u{53E3}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}\u{FF1A}`;
5956
+ **\u{8981}\u{6C42}**: \u{8F93}\u{51FA}\u{5B8C}\u{6574}\u{6587}\u{6863}\u{FF0C}\u{6BCF}\u{7AE0}\u{8282}\u{6709}\u{5B9E}\u{8D28}\u{5185}\u{5BB9}\u{FF0C}\u{8868}\u{683C}\u{586B}\u{5199}\u{5177}\u{4F53}\u{4FE1}\u{606F}\u{FF0C}\u{91CD}\u{70B9}\u{5173}\u{6CE8}API\u{63A5}\u{53E3}\u{8BBE}\u{8BA1}\u{3001}\u{6570}\u{636E}\u{7ED3}\u{6784}\u{3001}\u{4EA4}\u{4E92}\u{903B}\u{8F91}\u{FF0C}\u{4F2A}\u{4EE3}\u{7801}\u{4F7F}\u{7528}gherkin\u{8BED}\u{6CD5}\u{3002}`;
7649
5957
  class TemplateSelector {
7650
5958
  templateMap = new Map([
7651
5959
  [
@@ -7653,7 +5961,7 @@ Scenario Outline: API\u{9650}\u{6D41}\u{4E0E}\u{9519}\u{8BEF}\u{6062}\u{590D}\u{
7653
5961
  pcPageTemplatePrompt
7654
5962
  ],
7655
5963
  [
7656
- 'APP',
5964
+ "APP",
7657
5965
  appTemplatePrompt
7658
5966
  ],
7659
5967
  [
@@ -7665,19 +5973,19 @@ Scenario Outline: API\u{9650}\u{6D41}\u{4E0E}\u{9519}\u{8BEF}\u{6062}\u{590D}\u{
7665
5973
  apiTemplatePrompt
7666
5974
  ],
7667
5975
  [
7668
- 'api',
5976
+ "api",
7669
5977
  apiTemplatePrompt
7670
5978
  ],
7671
5979
  [
7672
- 'pc',
5980
+ "pc",
7673
5981
  pcPageTemplatePrompt
7674
5982
  ],
7675
5983
  [
7676
- 'app',
5984
+ "app",
7677
5985
  appTemplatePrompt
7678
5986
  ],
7679
5987
  [
7680
- 'sdk',
5988
+ "sdk",
7681
5989
  sdkTemplatePrompt
7682
5990
  ]
7683
5991
  ]);
@@ -7717,10 +6025,10 @@ Scenario Outline: API\u{9650}\u{6D41}\u{4E0E}\u{9519}\u{8BEF}\u{6062}\u{590D}\u{
7717
6025
  const lowerType = requirementType.toLowerCase();
7718
6026
  if (this.containsAny(lowerType, [
7719
6027
  "\u9875\u9762",
7720
- 'pc',
7721
- 'web',
6028
+ "pc",
6029
+ "web",
7722
6030
  "\u754C\u9762",
7723
- 'ui',
6031
+ "ui",
7724
6032
  "\u7F51\u9875",
7725
6033
  "\u6D4F\u89C8\u5668",
7726
6034
  "\u524D\u7AEF"
@@ -7729,18 +6037,18 @@ Scenario Outline: API\u{9650}\u{6D41}\u{4E0E}\u{9519}\u{8BEF}\u{6062}\u{590D}\u{
7729
6037
  template: pcPageTemplatePrompt
7730
6038
  };
7731
6039
  if (this.containsAny(lowerType, [
7732
- 'app',
6040
+ "app",
7733
6041
  "\u79FB\u52A8",
7734
- 'ios',
7735
- 'android',
6042
+ "ios",
6043
+ "android",
7736
6044
  "\u5C0F\u7A0B\u5E8F",
7737
6045
  "\u79FB\u52A8\u7AEF"
7738
6046
  ])) return {
7739
- type: 'APP',
6047
+ type: "APP",
7740
6048
  template: appTemplatePrompt
7741
6049
  };
7742
6050
  if (this.containsAny(lowerType, [
7743
- 'sdk',
6051
+ "sdk",
7744
6052
  "\u7B2C\u4E09\u65B9",
7745
6053
  "\u96C6\u6210",
7746
6054
  "\u5BF9\u63A5",
@@ -7753,9 +6061,9 @@ Scenario Outline: API\u{9650}\u{6D41}\u{4E0E}\u{9519}\u{8BEF}\u{6062}\u{590D}\u{
7753
6061
  };
7754
6062
  if (this.containsAny(lowerType, [
7755
6063
  "\u63A5\u53E3",
7756
- 'api',
7757
- 'rest',
7758
- 'graphql',
6064
+ "api",
6065
+ "rest",
6066
+ "graphql",
7759
6067
  "\u5FAE\u670D\u52A1",
7760
6068
  "\u540E\u7AEF",
7761
6069
  "\u670D\u52A1\u7AEF"
@@ -7794,43 +6102,153 @@ Scenario Outline: API\u{9650}\u{6D41}\u{4E0E}\u{9519}\u{8BEF}\u{6062}\u{590D}\u{
7794
6102
  }
7795
6103
  class DocumentGenerator {
7796
6104
  templateSelector = new TemplateSelector();
7797
- async generateUnifiedDocument(analysis, projectInfo, featureName, sourceInfo, customPrompt) {
6105
+ static cache = new Map();
6106
+ static CACHE_DURATION = 86400000;
6107
+ generateCacheKey(content, requirementType, customPrompt) {
6108
+ const keySource = `${content}_${requirementType}_${customPrompt || ""}`;
6109
+ return external_crypto_default().createHash("md5").update(keySource).digest("hex");
6110
+ }
6111
+ getCachedDocument(cacheKey) {
6112
+ const cached = DocumentGenerator.cache.get(cacheKey);
6113
+ if (cached) {
6114
+ const now = Date.now();
6115
+ if (now - cached.timestamp < DocumentGenerator.CACHE_DURATION) {
6116
+ logger.info("\u4ECE\u7F13\u5B58\u4E2D\u83B7\u53D6\u6587\u6863", {
6117
+ cacheKey
6118
+ });
6119
+ return cached.document;
6120
+ }
6121
+ DocumentGenerator.cache.delete(cacheKey);
6122
+ logger.info("\u7F13\u5B58\u5DF2\u8FC7\u671F\uFF0C\u5DF2\u5220\u9664", {
6123
+ cacheKey
6124
+ });
6125
+ }
6126
+ return null;
6127
+ }
6128
+ saveToCache(cacheKey, document) {
6129
+ DocumentGenerator.cache.set(cacheKey, {
6130
+ document,
6131
+ timestamp: Date.now()
6132
+ });
6133
+ logger.info("\u6587\u6863\u5DF2\u4FDD\u5B58\u5230\u7F13\u5B58", {
6134
+ cacheKey
6135
+ });
6136
+ }
6137
+ cleanupExpiredCache() {
6138
+ const now = Date.now();
6139
+ let cleanedCount = 0;
6140
+ for (const [key, value] of DocumentGenerator.cache.entries())if (now - value.timestamp >= DocumentGenerator.CACHE_DURATION) {
6141
+ DocumentGenerator.cache.delete(key);
6142
+ cleanedCount++;
6143
+ }
6144
+ if (cleanedCount > 0) logger.info("\u6E05\u7406\u8FC7\u671F\u7F13\u5B58\u5B8C\u6210", {
6145
+ cleanedCount
6146
+ });
6147
+ }
6148
+ async generateUnifiedDocument(analysis, projectInfo, featureName, sourceInfo, customPrompt, currentProjectPath) {
7798
6149
  try {
7799
- logger.info("\u5F00\u59CB\u751F\u6210\u7EDF\u4E00\u6280\u672F\u6587\u6863", {
6150
+ logger.info("\u51C6\u5907\u751F\u6210\u7EDF\u4E00\u6280\u672F\u6587\u6863\u4EFB\u52A1", {
7800
6151
  featureName,
7801
6152
  requirementType: analysis.requirementType,
7802
- featureCount: analysis.requirements.length
7803
- });
7804
- const { outputPath, requirementDir } = await this.prepareOutputPath(featureName);
7805
- const unifiedContent = this.buildUnifiedContent(analysis, projectInfo, featureName, sourceInfo);
7806
- const document = await this.generateDocument(unifiedContent, featureName, analysis.requirementType, projectInfo, customPrompt);
7807
- await promises_namespaceObject.writeFile(outputPath, document, 'utf8');
7808
- const result = this.buildAnalysisResult(analysis, projectInfo, outputPath, sourceInfo);
7809
- logger.info("\u7EDF\u4E00\u6280\u672F\u6587\u6863\u751F\u6210\u5B8C\u6210", {
7810
- outputPath,
7811
- documentLength: document.length
6153
+ featureCount: analysis.requirements.length,
6154
+ currentProjectPath
6155
+ });
6156
+ const requirementTypes = this.parseRequirementTypes(analysis.requirementType);
6157
+ const generationTasks = await Promise.all(requirementTypes.map(async (reqType)=>{
6158
+ logger.info("\u51C6\u5907\u62A5\u544A\u751F\u6210\u4EFB\u52A1", {
6159
+ requirementType: reqType,
6160
+ featureName
6161
+ });
6162
+ const { outputPath } = await this.prepareOutputPath(featureName, currentProjectPath, reqType);
6163
+ const isUpdate = await this.checkFileExists(outputPath);
6164
+ let existingContent = null;
6165
+ if (isUpdate) {
6166
+ logger.info("\u68C0\u6D4B\u5230\u5DF2\u5B58\u5728\u62A5\u544A\uFF0C\u5C06\u8FDB\u884C\u589E\u91CF\u66F4\u65B0", {
6167
+ outputPath
6168
+ });
6169
+ existingContent = await promises_namespaceObject.readFile(outputPath, "utf8");
6170
+ }
6171
+ const unifiedContent = this.buildUnifiedContent(analysis, projectInfo, featureName, sourceInfo);
6172
+ const promptData = isUpdate && existingContent ? this.buildUpdatePrompt(existingContent, unifiedContent, featureName, reqType, projectInfo, customPrompt) : this.buildGenerationPrompt(unifiedContent, featureName, reqType, projectInfo, customPrompt);
6173
+ return {
6174
+ requirementType: reqType,
6175
+ outputPath,
6176
+ isUpdate,
6177
+ prompt: promptData.prompt,
6178
+ systemPrompt: promptData.systemPrompt,
6179
+ templateContent: promptData.templateContent,
6180
+ templateVariables: "templateVariables" in promptData ? promptData.templateVariables : {
6181
+ featureName: featureName,
6182
+ inputContent: this.buildUnifiedContent(analysis, projectInfo, featureName, sourceInfo),
6183
+ currentTime: new Date().toISOString(),
6184
+ businessDomain: this.mapRequirementTypeToBusinessDomain(reqType),
6185
+ generateSequenceDiagram: "true",
6186
+ customPrompt
6187
+ },
6188
+ existingContent: "existingContent" in promptData ? promptData.existingContent : void 0
6189
+ };
6190
+ }));
6191
+ const generatedFiles = generationTasks.map((task)=>task.outputPath);
6192
+ const result = this.buildTaskResult(analysis, projectInfo, generatedFiles[0], sourceInfo, generationTasks[0].isUpdate, generatedFiles, generationTasks);
6193
+ logger.info("\u6587\u6863\u751F\u6210\u4EFB\u52A1\u51C6\u5907\u5B8C\u6210", {
6194
+ totalTasks: generationTasks.length,
6195
+ files: generatedFiles
7812
6196
  });
7813
6197
  return result;
7814
6198
  } catch (error) {
7815
6199
  if (error instanceof RequirementAnalysisError) throw error;
7816
- logger.error("\u6587\u6863\u751F\u6210\u5931\u8D25", {
6200
+ logger.error("\u6587\u6863\u751F\u6210\u4EFB\u52A1\u51C6\u5907\u5931\u8D25", {
7817
6201
  error,
7818
6202
  featureName
7819
6203
  });
7820
- throw new RequirementAnalysisError("\u6280\u672F\u6587\u6863\u751F\u6210\u8FC7\u7A0B\u4E2D\u53D1\u751F\u9519\u8BEF\uFF0C\u8BF7\u68C0\u67E5\u9700\u6C42\u5185\u5BB9\u548C\u9879\u76EE\u914D\u7F6E", types_ErrorCodes.DOCUMENT_GENERATION_FAILED, {
6204
+ throw new RequirementAnalysisError("\u6280\u672F\u6587\u6863\u751F\u6210\u4EFB\u52A1\u51C6\u5907\u8FC7\u7A0B\u4E2D\u53D1\u751F\u9519\u8BEF\uFF0C\u8BF7\u68C0\u67E5\u9700\u6C42\u5185\u5BB9\u548C\u9879\u76EE\u914D\u7F6E", types_ErrorCodes.DOCUMENT_GENERATION_FAILED, {
7821
6205
  featureName,
7822
6206
  originalError: error
7823
6207
  });
7824
6208
  }
7825
6209
  }
7826
- async prepareOutputPath(featureName) {
7827
- const requirementDir = external_path_default().join(getStorageDir(), 'requirements', sanitizeFileName(featureName));
6210
+ parseRequirementTypes(requirementType) {
6211
+ const validTypes = [
6212
+ "PC",
6213
+ "API",
6214
+ "APP",
6215
+ "SDK"
6216
+ ];
6217
+ if (requirementType.includes("+")) {
6218
+ const types = requirementType.split("+").map((t)=>t.trim().toUpperCase());
6219
+ return types.filter((t)=>validTypes.includes(t));
6220
+ }
6221
+ const normalizedType = requirementType.toUpperCase();
6222
+ if (validTypes.includes(normalizedType)) return [
6223
+ normalizedType
6224
+ ];
6225
+ const typeMapping = {
6226
+ PC页面: "PC",
6227
+ 接口: "API",
6228
+ APP: "APP",
6229
+ SDK集成: "SDK"
6230
+ };
6231
+ return [
6232
+ typeMapping[requirementType] || "API"
6233
+ ];
6234
+ }
6235
+ async prepareOutputPath(featureName, currentProjectPath, requirementType) {
6236
+ const projectRoot = currentProjectPath || process.cwd();
6237
+ const designDir = external_path_default().join(projectRoot, ".aico", "design");
6238
+ const requirementDir = external_path_default().join(designDir, sanitizeFileName(featureName));
7828
6239
  await promises_namespaceObject.mkdir(requirementDir, {
7829
6240
  recursive: true
7830
6241
  });
7831
6242
  const sanitizedFeatureName = sanitizeFileName(featureName);
7832
- const outputFileName = `${sanitizedFeatureName}.md`;
6243
+ const outputFileName = requirementType ? `${sanitizedFeatureName}-${requirementType}.md` : `${sanitizedFeatureName}.md`;
7833
6244
  const outputPath = external_path_default().join(requirementDir, outputFileName);
6245
+ logger.info("\u8F93\u51FA\u8DEF\u5F84\u51C6\u5907\u5B8C\u6210", {
6246
+ projectRoot,
6247
+ designDir,
6248
+ requirementDir,
6249
+ outputPath,
6250
+ requirementType
6251
+ });
7834
6252
  return {
7835
6253
  outputPath,
7836
6254
  requirementDir
@@ -7839,23 +6257,23 @@ Scenario Outline: API\u{9650}\u{6D41}\u{4E0E}\u{9519}\u{8BEF}\u{6062}\u{590D}\u{
7839
6257
  buildUnifiedContent(analysis, projectInfo, featureName, sourceInfo) {
7840
6258
  const featuresToProcess = analysis.featureDependencies?.mergedFeatures || analysis.requirements;
7841
6259
  const combinedFeatureContent = featuresToProcess.map((feature, index)=>{
7842
- const featureTitle = 'title' in feature ? feature.title : feature.featureName;
7843
- const featureContent = 'fullContent' in feature ? feature.fullContent : feature.description;
6260
+ const featureTitle = "title" in feature ? feature.title : feature.featureName;
6261
+ const featureContent = "fullContent" in feature ? feature.fullContent : feature.description;
7844
6262
  return `## \u{529F}\u{80FD}\u{70B9}${index + 1}\u{FF1A}${featureTitle}\n\n${featureContent}`;
7845
- }).join('\n\n');
6263
+ }).join("\n\n");
7846
6264
  return `# ${featureName} - \u{7EDF}\u{4E00}\u{9700}\u{6C42}\u{5206}\u{6790}
7847
6265
 
7848
6266
  ## \u{9879}\u{76EE}\u{57FA}\u{672C}\u{4FE1}\u{606F}
7849
6267
  - **\u{9879}\u{76EE}\u{7C7B}\u{578B}**: ${projectInfo?.projectType || "\u901A\u7528\u9879\u76EE"}
7850
- - **\u{4E3B}\u{8981}\u{6280}\u{672F}\u{6808}**: ${projectInfo?.techStack?.join(', ') || "\u5F85\u786E\u5B9A"}
7851
- - **\u{5F00}\u{53D1}\u{6846}\u{67B6}**: ${projectInfo?.frameworks?.join(', ') || "\u5F85\u786E\u5B9A"}
6268
+ - **\u{4E3B}\u{8981}\u{6280}\u{672F}\u{6808}**: ${projectInfo?.techStack?.join(", ") || "\u5F85\u786E\u5B9A"}
6269
+ - **\u{5F00}\u{53D1}\u{6846}\u{67B6}**: ${projectInfo?.frameworks?.join(", ") || "\u5F85\u786E\u5B9A"}
7852
6270
  - **\u{7F16}\u{7A0B}\u{8BED}\u{8A00}**: ${projectInfo?.language || "\u5F85\u786E\u5B9A"}
7853
6271
 
7854
6272
  ## \u{9700}\u{6C42}\u{7C7B}\u{578B}\u{5206}\u{6790}
7855
6273
  - **\u{8BC6}\u{522B}\u{7C7B}\u{578B}**: ${analysis.requirementType}
7856
6274
  - **\u{63A8}\u{8350}\u{6A21}\u{677F}**: ${analysis.templateRecommendation.primaryTemplate}
7857
6275
  - **\u{529F}\u{80FD}\u{70B9}\u{6570}\u{91CF}**: ${featuresToProcess.length}\u{4E2A}
7858
- - **\u{7F6E}\u{4FE1}\u{5EA6}**: ${analysis.confidence || 'medium'}
6276
+ - **\u{7F6E}\u{4FE1}\u{5EA6}**: ${analysis.confidence || "medium"}
7859
6277
 
7860
6278
  ## \u{529F}\u{80FD}\u{70B9}\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}
7861
6279
 
@@ -7866,36 +6284,523 @@ ${combinedFeatureContent}
7866
6284
  - **\u{5206}\u{6790}\u{65F6}\u{95F4}**: ${new Date().toISOString()}
7867
6285
  `;
7868
6286
  }
7869
- async generateDocument(content, title, requirementType, projectInfo, customPrompt) {
6287
+ async generateDocument(content, title, requirementType, projectInfo, customPrompt, outputPath) {
6288
+ try {
6289
+ const cacheKey = this.generateCacheKey(content, requirementType, customPrompt);
6290
+ let document = this.getCachedDocument(cacheKey);
6291
+ if (document) {
6292
+ logger.info("\u4F7F\u7528\u7F13\u5B58\u7684\u6587\u6863", {
6293
+ title,
6294
+ requirementType
6295
+ });
6296
+ return document;
6297
+ }
6298
+ const template = this.templateSelector.selectTemplate(requirementType);
6299
+ this.templateSelector.validateTemplate(template, requirementType);
6300
+ const fullPrompt = this.buildDocumentPrompt(template, content, title, projectInfo, customPrompt, requirementType);
6301
+ if (outputPath) try {
6302
+ document = await this.generateDocumentStream(fullPrompt, outputPath, title, "", {
6303
+ realTimeMode: true
6304
+ });
6305
+ } catch (streamError) {
6306
+ logger.error("\u6D41\u5F0F\u751F\u6210\u5931\u8D25\uFF0C\u5C1D\u8BD5\u4F7F\u7528\u975E\u6D41\u5F0F\u65B9\u5F0F", {
6307
+ error: streamError,
6308
+ requirementType
6309
+ });
6310
+ document = await openAIService.generateText({
6311
+ prompt: fullPrompt,
6312
+ system_prompt: "\u4F60\u662F\u4E00\u4F4D\u4E13\u4E1A\u7684\u6280\u672F\u6587\u6863\u7F16\u5199\u4E13\u5BB6\uFF0C\u8BF7\u751F\u6210\u5B8C\u6574\u3001\u8BE6\u7EC6\u7684\u6280\u672F\u9700\u6C42\u6587\u6863\u3002"
6313
+ });
6314
+ }
6315
+ else document = await openAIService.generateText({
6316
+ prompt: fullPrompt,
6317
+ system_prompt: "\u4F60\u662F\u4E00\u4F4D\u4E13\u4E1A\u7684\u6280\u672F\u6587\u6863\u7F16\u5199\u4E13\u5BB6\uFF0C\u8BF7\u751F\u6210\u5B8C\u6574\u3001\u8BE6\u7EC6\u7684\u6280\u672F\u9700\u6C42\u6587\u6863\u3002"
6318
+ });
6319
+ this.validateGeneratedDocument(document, title);
6320
+ this.saveToCache(cacheKey, document);
6321
+ return document;
6322
+ } catch (error) {
6323
+ logger.error("\u6280\u672F\u6587\u6863\u751F\u6210\u5931\u8D25", {
6324
+ error,
6325
+ requirementType,
6326
+ title
6327
+ });
6328
+ throw new RequirementAnalysisError(`\u{65E0}\u{6CD5}\u{751F}\u{6210}${requirementType}\u{7C7B}\u{578B}\u{7684}\u{6280}\u{672F}\u{6587}\u{6863}\u{FF0C}\u{8BF7}\u{68C0}\u{67E5}\u{9700}\u{6C42}\u{63CF}\u{8FF0}\u{662F}\u{5426}\u{5B8C}\u{6574}`, types_ErrorCodes.DOCUMENT_GENERATION_FAILED, {
6329
+ requirementType,
6330
+ originalError: error
6331
+ });
6332
+ }
6333
+ }
6334
+ async generateDocumentStream(prompt, outputPath, title, initialContent = "", options) {
6335
+ const startTime = Date.now();
6336
+ const MAX_RETRY = 1;
6337
+ let retryCount = 0;
6338
+ let fullDocument = initialContent;
6339
+ let totalIOWriteCount = 0;
6340
+ let totalChunkCount = 0;
6341
+ let totalStreamTime = 0;
6342
+ let lastError = null;
6343
+ let totalChunkSize = 0;
6344
+ let chunkSizeList = [];
6345
+ let streamTimes = [];
6346
+ let ioTimes = [];
6347
+ const enablePerformanceMetrics = "production" !== process.env.NODE_ENV;
6348
+ let chunkBuffer = "";
6349
+ let currentBufferSize = options?.realTimeMode ? 100 : options?.bufferSize || 150;
6350
+ const MAX_BUFFER_SIZE = options?.realTimeMode ? 500 : 1000;
6351
+ const BUFFER_GROWTH_RATE = 1.5;
6352
+ let lastWriteTime = Date.now();
6353
+ const MIN_WRITE_INTERVAL = 50;
6354
+ while(retryCount <= MAX_RETRY){
6355
+ const streamStartTime = Date.now();
6356
+ try {
6357
+ logger.info("\u5F00\u59CB\u6D41\u5F0F\u751F\u6210\u6587\u6863", {
6358
+ outputPath,
6359
+ retryCount,
6360
+ currentLength: fullDocument.length,
6361
+ hasInitialContent: initialContent.length > 0,
6362
+ realTimeMode: options?.realTimeMode,
6363
+ bufferSize: currentBufferSize
6364
+ });
6365
+ if (0 === retryCount) await promises_namespaceObject.writeFile(outputPath, initialContent, "utf8");
6366
+ let chunkCount = 0;
6367
+ let streamStartLength = fullDocument.length;
6368
+ const actualPrompt = fullDocument.length > 0 && retryCount > 0 ? this.buildContinuationPrompt(prompt, fullDocument) : prompt;
6369
+ logger.info("\u8C03\u7528OpenAI\u6D41\u5F0FAPI", {
6370
+ promptLength: actualPrompt.length,
6371
+ isRetry: retryCount > 0,
6372
+ currentDocLength: fullDocument.length
6373
+ });
6374
+ let stream;
6375
+ try {
6376
+ stream = await openAIService.generateStream({
6377
+ prompt: actualPrompt,
6378
+ system_prompt: "\u4F60\u662F\u4E00\u4F4D\u4E13\u4E1A\u7684\u6280\u672F\u6587\u6863\u7F16\u5199\u4E13\u5BB6\uFF0C\u8BF7\u751F\u6210\u5B8C\u6574\u3001\u8BE6\u7EC6\u7684\u6280\u672F\u9700\u6C42\u6587\u6863\u3002"
6379
+ });
6380
+ } catch (apiError) {
6381
+ logger.error("\u8C03\u7528OpenAI API\u5931\u8D25", {
6382
+ error: apiError,
6383
+ retryCount
6384
+ });
6385
+ throw apiError;
6386
+ }
6387
+ try {
6388
+ for await (const chunk of stream){
6389
+ fullDocument += chunk;
6390
+ chunkBuffer += chunk;
6391
+ chunkCount++;
6392
+ totalChunkSize += chunk.length;
6393
+ if (enablePerformanceMetrics) chunkSizeList.push(chunk.length);
6394
+ const currentTime = Date.now();
6395
+ const timeSinceLastWrite = currentTime - lastWriteTime;
6396
+ if (options?.bufferSize) {
6397
+ if (chunkBuffer.length >= options.bufferSize) {
6398
+ await this.writeBufferToFile(outputPath, chunkBuffer, enablePerformanceMetrics, ioTimes);
6399
+ totalIOWriteCount++;
6400
+ chunkBuffer = "";
6401
+ lastWriteTime = currentTime;
6402
+ }
6403
+ } else {
6404
+ const shouldWrite = chunkBuffer.length >= currentBufferSize || timeSinceLastWrite > MIN_WRITE_INTERVAL && options?.realTimeMode;
6405
+ if (shouldWrite) {
6406
+ await this.writeBufferToFile(outputPath, chunkBuffer, enablePerformanceMetrics, ioTimes);
6407
+ totalIOWriteCount++;
6408
+ if (!options?.realTimeMode) {
6409
+ if (currentBufferSize < MAX_BUFFER_SIZE) currentBufferSize = Math.min(Math.floor(currentBufferSize * BUFFER_GROWTH_RATE), MAX_BUFFER_SIZE);
6410
+ }
6411
+ chunkBuffer = "";
6412
+ lastWriteTime = currentTime;
6413
+ }
6414
+ }
6415
+ }
6416
+ if (chunkBuffer.length > 0) {
6417
+ await this.writeBufferToFile(outputPath, chunkBuffer, enablePerformanceMetrics, ioTimes);
6418
+ totalIOWriteCount++;
6419
+ }
6420
+ const currentStreamTime = Date.now() - streamStartTime;
6421
+ if (enablePerformanceMetrics) streamTimes.push(currentStreamTime);
6422
+ totalStreamTime += currentStreamTime;
6423
+ totalChunkCount += chunkCount;
6424
+ logger.info("\u6D41\u5F0F\u6587\u6863\u751F\u6210\u5B8C\u6210", {
6425
+ outputPath,
6426
+ documentLength: fullDocument.length,
6427
+ totalChunks: chunkCount,
6428
+ totalChunkCount,
6429
+ totalIOWriteCount,
6430
+ currentStreamTime: `${currentStreamTime}ms`,
6431
+ totalStreamTime: `${totalStreamTime}ms`,
6432
+ retryCount,
6433
+ finalBufferSize: currentBufferSize
6434
+ });
6435
+ if (this.isDocumentComplete(fullDocument)) {
6436
+ this.validateGeneratedDocument(fullDocument, title);
6437
+ logger.info("\u6D41\u5F0F\u6587\u6863\u751F\u6210\u5B8C\u6210", {
6438
+ documentLength: fullDocument.length
6439
+ });
6440
+ return fullDocument;
6441
+ }
6442
+ if (fullDocument.length >= 2000) {
6443
+ logger.info("\u6587\u6863\u957F\u5EA6\u8FBE\u5230\u9608\u503C\uFF0C\u89C6\u4E3A\u5B8C\u6574", {
6444
+ documentLength: fullDocument.length
6445
+ });
6446
+ return fullDocument;
6447
+ }
6448
+ logger.warn("\u6587\u6863\u53EF\u80FD\u4E0D\u5B8C\u6574\uFF0C\u4F46\u5DF2\u8FBE\u5230\u6700\u5927\u91CD\u8BD5\u6B21\u6570", {
6449
+ documentLength: fullDocument.length
6450
+ });
6451
+ retryCount++;
6452
+ continue;
6453
+ } catch (streamError) {
6454
+ lastError = streamError;
6455
+ logger.error("\u6D41\u5F0F\u8BFB\u53D6\u8FC7\u7A0B\u4E2D\u51FA\u9519", {
6456
+ error: streamError,
6457
+ outputPath,
6458
+ currentLength: fullDocument.length,
6459
+ newContentLength: fullDocument.length - streamStartLength,
6460
+ retryCount
6461
+ });
6462
+ if (chunkBuffer.length > 0) {
6463
+ await this.writeBufferToFile(outputPath, chunkBuffer, enablePerformanceMetrics, ioTimes);
6464
+ fullDocument += chunkBuffer;
6465
+ chunkBuffer = "";
6466
+ }
6467
+ const newContentLength = fullDocument.length - streamStartLength;
6468
+ if (newContentLength > 0 && retryCount < MAX_RETRY) {
6469
+ logger.info("\u6D41\u5F0F\u751F\u6210\u4E2D\u65AD\uFF0C\u4F46\u5DF2\u4EA7\u751F\u65B0\u5185\u5BB9\uFF0C\u5C1D\u8BD5\u7EE7\u7EED\u751F\u6210", {
6470
+ newContentLength,
6471
+ totalLength: fullDocument.length,
6472
+ retryCount: retryCount + 1
6473
+ });
6474
+ retryCount++;
6475
+ continue;
6476
+ }
6477
+ logger.warn("\u6D41\u5F0F\u751F\u6210\u4E2D\u65AD\uFF0C\u4FDD\u7559\u5DF2\u751F\u6210\u5185\u5BB9", {
6478
+ currentLength: fullDocument.length,
6479
+ hasContent: fullDocument.length > 0,
6480
+ retryCount
6481
+ });
6482
+ break;
6483
+ }
6484
+ } catch (error) {
6485
+ lastError = error;
6486
+ logger.error("\u6D41\u5F0F\u6587\u6863\u751F\u6210\u5931\u8D25", {
6487
+ error,
6488
+ outputPath,
6489
+ retryCount,
6490
+ currentLength: fullDocument.length
6491
+ });
6492
+ if (chunkBuffer.length > 0) try {
6493
+ await this.writeBufferToFile(outputPath, chunkBuffer, enablePerformanceMetrics, ioTimes);
6494
+ fullDocument += chunkBuffer;
6495
+ chunkBuffer = "";
6496
+ } catch (writeError) {
6497
+ logger.error("\u5199\u5165\u7F13\u51B2\u533A\u5931\u8D25", {
6498
+ error: writeError
6499
+ });
6500
+ }
6501
+ if (fullDocument.length > 0 && retryCount < MAX_RETRY) {
6502
+ logger.info("\u5C1D\u8BD5\u91CD\u8BD5\u6D41\u5F0F\u751F\u6210", {
6503
+ currentLength: fullDocument.length
6504
+ });
6505
+ retryCount++;
6506
+ continue;
6507
+ }
6508
+ if (0 === fullDocument.length) {
6509
+ logger.error("\u6D41\u5F0F\u751F\u6210\u5B8C\u5168\u5931\u8D25\uFF0C\u6CA1\u6709\u751F\u6210\u4EFB\u4F55\u5185\u5BB9", {
6510
+ error,
6511
+ lastError
6512
+ });
6513
+ throw new RequirementAnalysisError("\u6D41\u5F0F\u6587\u6863\u751F\u6210\u5931\u8D25\uFF0C\u65E0\u6CD5\u8FDE\u63A5\u5230AI\u670D\u52A1\u6216\u751F\u6210\u5185\u5BB9", types_ErrorCodes.DOCUMENT_GENERATION_FAILED, {
6514
+ originalError: error,
6515
+ lastError,
6516
+ outputPath
6517
+ });
6518
+ }
6519
+ logger.info("\u4FDD\u7559\u5DF2\u751F\u6210\u5185\u5BB9\uFF0C\u5C1D\u8BD5\u4F7F\u7528\u975E\u6D41\u5F0F\u65B9\u5F0F\u7EE7\u7EED", {
6520
+ currentLength: fullDocument.length
6521
+ });
6522
+ break;
6523
+ }
6524
+ }
6525
+ let finalDocument = fullDocument;
6526
+ if (fullDocument.length > 0 && !this.isDocumentComplete(fullDocument)) {
6527
+ logger.info("\u4F7F\u7528\u975E\u6D41\u5F0F\u65B9\u5F0F\u7EE7\u7EED\u751F\u6210\u6587\u6863", {
6528
+ currentLength: fullDocument.length
6529
+ });
6530
+ try {
6531
+ finalDocument = await this.continueDocumentGeneration(prompt, fullDocument, outputPath);
6532
+ logger.info("\u6587\u6863\u7EED\u5199\u5B8C\u6210", {
6533
+ documentLength: finalDocument.length
6534
+ });
6535
+ } catch (continueError) {
6536
+ logger.error("\u6587\u6863\u7EED\u5199\u5931\u8D25", {
6537
+ error: continueError,
6538
+ currentLength: fullDocument.length
6539
+ });
6540
+ finalDocument = fullDocument;
6541
+ }
6542
+ }
6543
+ if (0 === finalDocument.length) {
6544
+ logger.error("\u6587\u6863\u751F\u6210\u5B8C\u5168\u5931\u8D25\uFF0C\u6CA1\u6709\u751F\u6210\u4EFB\u4F55\u5185\u5BB9", {
6545
+ lastError,
6546
+ outputPath
6547
+ });
6548
+ throw new RequirementAnalysisError("\u6587\u6863\u751F\u6210\u5931\u8D25\uFF0C\u65E0\u6CD5\u751F\u6210\u4EFB\u4F55\u5185\u5BB9\u3002\u8BF7\u68C0\u67E5AI\u670D\u52A1\u8FDE\u63A5\u6216\u7A0D\u540E\u91CD\u8BD5\u3002", types_ErrorCodes.DOCUMENT_GENERATION_FAILED, {
6549
+ originalError: lastError,
6550
+ outputPath,
6551
+ title
6552
+ });
6553
+ }
6554
+ if (enablePerformanceMetrics) {
6555
+ const totalTime = Date.now() - startTime;
6556
+ const avgIOWriteTime = totalIOWriteCount > 0 ? Math.round((totalTime - totalStreamTime) / totalIOWriteCount) : 0;
6557
+ const avgChunkSize = totalChunkCount > 0 ? Math.round(totalChunkSize / totalChunkCount) : 0;
6558
+ const avgStreamTime = streamTimes.length > 0 ? Math.round(streamTimes.reduce((a, b)=>a + b, 0) / streamTimes.length) : 0;
6559
+ const avgIOTime = ioTimes.length > 0 ? Math.round(ioTimes.reduce((a, b)=>a + b, 0) / ioTimes.length) : 0;
6560
+ const minChunkSize = chunkSizeList.length > 0 ? Math.min(...chunkSizeList) : 0;
6561
+ const maxChunkSize = chunkSizeList.length > 0 ? Math.max(...chunkSizeList) : 0;
6562
+ logger.info("\u6D41\u5F0F\u6587\u6863\u751F\u6210\u6027\u80FD\u7EDF\u8BA1", {
6563
+ outputPath,
6564
+ documentLength: finalDocument.length,
6565
+ totalChunks: totalChunkCount,
6566
+ totalIOWriteCount,
6567
+ totalTime: `${totalTime}ms`,
6568
+ totalStreamTime: `${totalStreamTime}ms`,
6569
+ avgIOWriteTime: `${avgIOWriteTime}ms/IO`,
6570
+ avgChunkSize: `${avgChunkSize}chars/chunk`,
6571
+ avgStreamTime: `${avgStreamTime}ms/call`,
6572
+ avgIOTime: `${avgIOTime}ms/IO`,
6573
+ minChunkSize: `${minChunkSize}chars`,
6574
+ maxChunkSize: `${maxChunkSize}chars`,
6575
+ bufferSize: currentBufferSize,
6576
+ retryCount
6577
+ });
6578
+ }
6579
+ return finalDocument;
6580
+ }
6581
+ async writeBufferToFile(outputPath, buffer, enablePerformanceMetrics, ioTimes) {
6582
+ const ioStartTime = Date.now();
6583
+ await promises_namespaceObject.appendFile(outputPath, buffer, "utf8");
6584
+ if (enablePerformanceMetrics) {
6585
+ const ioTime = Date.now() - ioStartTime;
6586
+ ioTimes.push(ioTime);
6587
+ }
6588
+ }
6589
+ buildContinuationPrompt(originalPrompt, existingContent) {
6590
+ return `# \u{4EFB}\u{52A1}\u{FF1A}\u{7EE7}\u{7EED}\u{5B8C}\u{6210}\u{6587}\u{6863}\u{751F}\u{6210}
6591
+
6592
+ ## \u{539F}\u{59CB}\u{9700}\u{6C42}
6593
+ ${originalPrompt}
6594
+
6595
+ ## \u{5DF2}\u{751F}\u{6210}\u{7684}\u{5185}\u{5BB9}
6596
+ \u{3010}\u{3010}\u{3010}\u{5DF2}\u{5B8C}\u{6210}\u{90E8}\u{5206}\u{5F00}\u{59CB}\u{3011}\u{3011}\u{3011}
6597
+ ${existingContent}
6598
+ \u{3010}\u{3010}\u{3010}\u{5DF2}\u{5B8C}\u{6210}\u{90E8}\u{5206}\u{7ED3}\u{675F}\u{3011}\u{3011}\u{3011}
6599
+
6600
+ ## \u{7EE7}\u{7EED}\u{8981}\u{6C42}
6601
+ \u{8BF7}\u{4ECE}\u{4E0A}\u{8FF0}\u{5185}\u{5BB9}\u{7684}\u{7ED3}\u{5C3E}\u{5904}\u{7EE7}\u{7EED}\u{751F}\u{6210}\u{FF0C}\u{5B8C}\u{6210}\u{5269}\u{4F59}\u{7684}\u{6587}\u{6863}\u{5185}\u{5BB9}\u{3002}\u{6CE8}\u{610F}\u{FF1A}
6602
+ 1. \u{4E0D}\u{8981}\u{91CD}\u{590D}\u{5DF2}\u{751F}\u{6210}\u{7684}\u{5185}\u{5BB9}
6603
+ 2. \u{4FDD}\u{6301}\u{6587}\u{6863}\u{7ED3}\u{6784}\u{7684}\u{8FDE}\u{8D2F}\u{6027}
6604
+ 3. \u{786E}\u{4FDD}\u{751F}\u{6210}\u{5B8C}\u{6574}\u{7684}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}
6605
+ 4. \u{76F4}\u{63A5}\u{4ECE}\u{4E2D}\u{65AD}\u{5904}\u{7EE7}\u{7EED}\u{FF0C}\u{4E0D}\u{8981}\u{6DFB}\u{52A0}\u{4EFB}\u{4F55}\u{8BF4}\u{660E}\u{6027}\u{6587}\u{5B57}
6606
+
6607
+ \u{8BF7}\u{7EE7}\u{7EED}\u{751F}\u{6210}\u{FF1A}`;
6608
+ }
6609
+ isDocumentComplete(document) {
6610
+ const hasEnding = document.includes("## \u66F4\u65B0\u65E5\u5FD7") || document.includes("---\n\n**") || document.trim().endsWith("---") || document.trim().endsWith("\u3002") || document.trim().endsWith("\uFF09");
6611
+ const hasReasonableLength = document.length >= 1000;
6612
+ return hasEnding && hasReasonableLength;
6613
+ }
6614
+ async continueDocumentGeneration(originalPrompt, existingContent, outputPath) {
6615
+ try {
6616
+ const continuationPrompt = this.buildContinuationPrompt(originalPrompt, existingContent);
6617
+ logger.info("\u4F7F\u7528\u975E\u6D41\u5F0FAPI\u7EE7\u7EED\u751F\u6210", {
6618
+ existingLength: existingContent.length
6619
+ });
6620
+ const continuedPart = await openAIService.generateText({
6621
+ prompt: continuationPrompt,
6622
+ system_prompt: "\u4F60\u662F\u4E00\u4F4D\u4E13\u4E1A\u7684\u6280\u672F\u6587\u6863\u7F16\u5199\u4E13\u5BB6\uFF0C\u8BF7\u7EE7\u7EED\u5B8C\u6210\u6587\u6863\u7684\u5269\u4F59\u90E8\u5206\u3002"
6623
+ });
6624
+ await promises_namespaceObject.appendFile(outputPath, continuedPart, "utf8");
6625
+ const fullDocument = existingContent + continuedPart;
6626
+ logger.info("\u6587\u6863\u7EED\u5199\u5B8C\u6210", {
6627
+ originalLength: existingContent.length,
6628
+ continuedLength: continuedPart.length,
6629
+ totalLength: fullDocument.length
6630
+ });
6631
+ return fullDocument;
6632
+ } catch (error) {
6633
+ logger.error("\u6587\u6863\u7EED\u5199\u5931\u8D25", {
6634
+ error,
6635
+ existingLength: existingContent.length
6636
+ });
6637
+ logger.warn("\u8FD4\u56DE\u5DF2\u751F\u6210\u7684\u90E8\u5206\u5185\u5BB9", {
6638
+ length: existingContent.length
6639
+ });
6640
+ return existingContent;
6641
+ }
6642
+ }
6643
+ buildGenerationPrompt(content, title, requirementType, projectInfo, customPrompt) {
6644
+ const template = this.templateSelector.selectTemplate(requirementType);
6645
+ this.templateSelector.validateTemplate(template, requirementType);
6646
+ const businessDomain = this.mapRequirementTypeToBusinessDomain(requirementType);
6647
+ const templateVariables = {
6648
+ featureName: title,
6649
+ inputContent: content,
6650
+ currentTime: new Date().toISOString(),
6651
+ businessDomain,
6652
+ generateSequenceDiagram: "true",
6653
+ customPrompt
6654
+ };
6655
+ let prompt = template;
6656
+ if (customPrompt) prompt += `
6657
+
6658
+ ## \u{81EA}\u{5B9A}\u{4E49}\u{8981}\u{6C42}
6659
+ ${customPrompt}`;
6660
+ return {
6661
+ prompt,
6662
+ systemPrompt: "\u4F60\u662F\u4E00\u4F4D\u4E13\u4E1A\u7684\u6280\u672F\u6587\u6863\u7F16\u5199\u4E13\u5BB6\uFF0C\u8BF7\u751F\u6210\u5B8C\u6574\u3001\u8BE6\u7EC6\u7684\u6280\u672F\u9700\u6C42\u6587\u6863\u3002",
6663
+ templateContent: template,
6664
+ templateVariables
6665
+ };
6666
+ }
6667
+ buildUpdatePrompt(existingContent, newContent, title, requirementType, projectInfo, customPrompt) {
6668
+ const template = this.templateSelector.selectTemplate(requirementType);
6669
+ const businessDomain = this.mapRequirementTypeToBusinessDomain(requirementType);
6670
+ const templateVariables = {
6671
+ featureName: title,
6672
+ inputContent: newContent,
6673
+ currentTime: new Date().toISOString(),
6674
+ businessDomain,
6675
+ generateSequenceDiagram: "true",
6676
+ customPrompt,
6677
+ existingContent
6678
+ };
6679
+ const prompt = `
6680
+ # \u{4EFB}\u{52A1}\u{FF1A}\u{667A}\u{80FD}\u{66F4}\u{65B0}\u{9700}\u{6C42}\u{5206}\u{6790}\u{62A5}\u{544A}
6681
+
6682
+ ## \u{5DF2}\u{5B58}\u{5728}\u{7684}\u{62A5}\u{544A}\u{5185}\u{5BB9}\u{FF1A}
6683
+ \u{3010}\u{3010}\u{3010}\u{65E7}\u{5185}\u{5BB9}\u{5F00}\u{59CB}\u{3011}\u{3011}\u{3011}
6684
+ ${existingContent}
6685
+ \u{3010}\u{3010}\u{3010}\u{65E7}\u{5185}\u{5BB9}\u{7ED3}\u{675F}\u{3011}\u{3011}\u{3011}
6686
+
6687
+ ## \u{65B0}\u{589E}\u{7684}\u{9700}\u{6C42}\u{4FE1}\u{606F}\u{FF1A}
6688
+ \u{3010}\u{3010}\u{3010}\u{65B0}\u{5185}\u{5BB9}\u{5F00}\u{59CB}\u{3011}\u{3011}\u{3011}
6689
+ ${newContent}
6690
+ \u{3010}\u{3010}\u{3010}\u{65B0}\u{5185}\u{5BB9}\u{7ED3}\u{675F}\u{3011}\u{3011}
6691
+
6692
+ ## \u{66F4}\u{65B0}\u{8981}\u{6C42}\u{FF1A}
6693
+ 1. **\u{667A}\u{80FD}\u{5408}\u{5E76}**\u{FF1A}\u{5C06}\u{65B0}\u{5185}\u{5BB9}\u{4E0E}\u{65E7}\u{5185}\u{5BB9}\u{8FDB}\u{884C}\u{667A}\u{80FD}\u{5408}\u{5E76}\u{FF0C}\u{4E0D}\u{662F}\u{7B80}\u{5355}\u{8986}\u{76D6}
6694
+ 2. **\u{4FDD}\u{7559}\u{6709}\u{6548}\u{4FE1}\u{606F}**\u{FF1A}\u{4FDD}\u{7559}\u{65E7}\u{62A5}\u{544A}\u{4E2D}\u{4ECD}\u{7136}\u{6709}\u{6548}\u{7684}\u{5185}\u{5BB9}
6695
+ 3. **\u{66F4}\u{65B0}\u{53D8}\u{5316}\u{9879}**\u{FF1A}\u{5982}\u{679C}\u{65B0}\u{5185}\u{5BB9}\u{4E0E}\u{65E7}\u{5185}\u{5BB9}\u{6709}\u{51B2}\u{7A81}\u{FF0C}\u{4EE5}\u{65B0}\u{5185}\u{5BB9}\u{4E3A}\u{51C6}
6696
+ 4. **\u{589E}\u{91CF}\u{6DFB}\u{52A0}**\u{FF1A}\u{5982}\u{679C}\u{662F}\u{65B0}\u{589E}\u{529F}\u{80FD}\u{70B9}\u{FF0C}\u{5219}\u{6DFB}\u{52A0}\u{5230}\u{539F}\u{6709}\u{529F}\u{80FD}\u{70B9}\u{5217}\u{8868}\u{4E2D}
6697
+ 5. **\u{4FDD}\u{6301}\u{7ED3}\u{6784}**\u{FF1A}\u{4FDD}\u{6301}\u{539F}\u{6709}\u{62A5}\u{544A}\u{7684}\u{6587}\u{6863}\u{7ED3}\u{6784}\u{548C}\u{683C}\u{5F0F}
6698
+ 6. **\u{6DFB}\u{52A0}\u{66F4}\u{65B0}\u{8BB0}\u{5F55}**\u{FF1A}\u{5728}\u{6587}\u{6863}\u{672B}\u{5C3E}\u{6DFB}\u{52A0}\u{66F4}\u{65B0}\u{65E5}\u{5FD7}\u{FF0C}\u{8BB0}\u{5F55}\u{672C}\u{6B21}\u{66F4}\u{65B0}\u{7684}\u{5185}\u{5BB9}
6699
+
6700
+ ## \u{6280}\u{672F}\u{6A21}\u{677F}\u{53C2}\u{8003}\u{FF1A}
6701
+ ${template}
6702
+
6703
+ ${customPrompt ? `## \u{81EA}\u{5B9A}\u{4E49}\u{8981}\u{6C42}\u{FF1A}
6704
+ ${customPrompt}` : ""}
6705
+
6706
+ \u{8BF7}\u{751F}\u{6210}\u{5B8C}\u{6574}\u{7684}\u{66F4}\u{65B0}\u{540E}\u{7684}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}\u{3002}
6707
+ `;
6708
+ return {
6709
+ prompt,
6710
+ systemPrompt: "\u4F60\u662F\u4E00\u4F4D\u4E13\u4E1A\u7684\u6280\u672F\u6587\u6863\u7F16\u5199\u4E13\u5BB6\uFF0C\u64C5\u957F\u667A\u80FD\u5408\u5E76\u548C\u66F4\u65B0\u6280\u672F\u6587\u6863\u3002\u8BF7\u4FDD\u6301\u6587\u6863\u7684\u4E13\u4E1A\u6027\u548C\u5B8C\u6574\u6027\u3002",
6711
+ templateContent: template,
6712
+ templateVariables,
6713
+ existingContent
6714
+ };
6715
+ }
6716
+ buildDocumentPrompt(template, content, title, projectInfo, customPrompt, requirementType) {
6717
+ const businessDomain = this.mapRequirementTypeToBusinessDomain(requirementType);
6718
+ let prompt = template.replace(/\{featureName\}/g, title).replace(/\{inputContent\}/g, content).replace(/\{currentTime\}/g, new Date().toISOString()).replace(/\{businessDomain\}/g, businessDomain).replace(/\{generateSequenceDiagram\}/g, "true");
6719
+ if (customPrompt) prompt += `
6720
+
6721
+ ## \u{81EA}\u{5B9A}\u{4E49}\u{8981}\u{6C42}
6722
+ ${customPrompt}`;
6723
+ return prompt;
6724
+ }
6725
+ mapRequirementTypeToBusinessDomain(requirementType) {
6726
+ if (!requirementType) return "API";
6727
+ const typeMapping = {
6728
+ PC: "PC",
6729
+ API: "API",
6730
+ APP: "APP",
6731
+ SDK: "SDK",
6732
+ PC页面: "PC",
6733
+ 接口: "API",
6734
+ SDK集成: "SDK"
6735
+ };
6736
+ return typeMapping[requirementType] || requirementType;
6737
+ }
6738
+ async checkFileExists(filePath) {
7870
6739
  try {
6740
+ await promises_namespaceObject.access(filePath);
6741
+ return true;
6742
+ } catch {
6743
+ return false;
6744
+ }
6745
+ }
6746
+ async updateExistingDocument(existingContent, newContent, title, requirementType, projectInfo, customPrompt, outputPath) {
6747
+ try {
6748
+ logger.info("\u5F00\u59CB\u667A\u80FD\u5408\u5E76\u66F4\u65B0\u6587\u6863", {
6749
+ title
6750
+ });
7871
6751
  const template = this.templateSelector.selectTemplate(requirementType);
7872
- this.templateSelector.validateTemplate(template, requirementType);
7873
- const fullPrompt = this.buildDocumentPrompt(template, content, title, projectInfo, customPrompt);
7874
- const document = await openAIService.generateText({
7875
- prompt: fullPrompt,
7876
- system_prompt: "\u4F60\u662F\u4E00\u4F4D\u4E13\u4E1A\u7684\u6280\u672F\u6587\u6863\u7F16\u5199\u4E13\u5BB6\uFF0C\u8BF7\u751F\u6210\u5B8C\u6574\u3001\u8BE6\u7EC6\u7684\u6280\u672F\u9700\u6C42\u6587\u6863\u3002"
6752
+ const updatePrompt = `
6753
+ # \u{4EFB}\u{52A1}\u{FF1A}\u{667A}\u{80FD}\u{66F4}\u{65B0}\u{9700}\u{6C42}\u{5206}\u{6790}\u{62A5}\u{544A}
6754
+
6755
+ ## \u{5DF2}\u{5B58}\u{5728}\u{7684}\u{62A5}\u{544A}\u{5185}\u{5BB9}\u{FF1A}
6756
+ \u{3010}\u{3010}\u{3010}\u{65E7}\u{5185}\u{5BB9}\u{5F00}\u{59CB}\u{3011}\u{3011}\u{3011}
6757
+ ${existingContent}
6758
+ \u{3010}\u{3010}\u{3010}\u{65E7}\u{5185}\u{5BB9}\u{7ED3}\u{675F}\u{3011}\u{3011}\u{3011}
6759
+
6760
+ ## \u{65B0}\u{589E}\u{7684}\u{9700}\u{6C42}\u{4FE1}\u{606F}\u{FF1A}
6761
+ \u{3010}\u{3010}\u{3010}\u{65B0}\u{5185}\u{5BB9}\u{5F00}\u{59CB}\u{3011}\u{3011}\u{3011}
6762
+ ${newContent}
6763
+ \u{3010}\u{3010}\u{3010}\u{65B0}\u{5185}\u{5BB9}\u{7ED3}\u{675F}\u{3011}\u{3011}\u{3011}
6764
+
6765
+ ## \u{66F4}\u{65B0}\u{8981}\u{6C42}\u{FF1A}
6766
+ 1. **\u{667A}\u{80FD}\u{5408}\u{5E76}**\u{FF1A}\u{5C06}\u{65B0}\u{5185}\u{5BB9}\u{4E0E}\u{65E7}\u{5185}\u{5BB9}\u{8FDB}\u{884C}\u{667A}\u{80FD}\u{5408}\u{5E76}\u{FF0C}\u{4E0D}\u{662F}\u{7B80}\u{5355}\u{8986}\u{76D6}
6767
+ 2. **\u{4FDD}\u{7559}\u{6709}\u{6548}\u{4FE1}\u{606F}**\u{FF1A}\u{4FDD}\u{7559}\u{65E7}\u{62A5}\u{544A}\u{4E2D}\u{4ECD}\u{7136}\u{6709}\u{6548}\u{7684}\u{5185}\u{5BB9}
6768
+ 3. **\u{66F4}\u{65B0}\u{53D8}\u{5316}\u{9879}**\u{FF1A}\u{5982}\u{679C}\u{65B0}\u{5185}\u{5BB9}\u{4E0E}\u{65E7}\u{5185}\u{5BB9}\u{6709}\u{51B2}\u{7A81}\u{FF0C}\u{4EE5}\u{65B0}\u{5185}\u{5BB9}\u{4E3A}\u{51C6}
6769
+ 4. **\u{589E}\u{91CF}\u{6DFB}\u{52A0}**\u{FF1A}\u{5982}\u{679C}\u{662F}\u{65B0}\u{589E}\u{529F}\u{80FD}\u{70B9}\u{FF0C}\u{5219}\u{6DFB}\u{52A0}\u{5230}\u{539F}\u{6709}\u{529F}\u{80FD}\u{70B9}\u{5217}\u{8868}\u{4E2D}
6770
+ 5. **\u{4FDD}\u{6301}\u{7ED3}\u{6784}**\u{FF1A}\u{4FDD}\u{6301}\u{539F}\u{6709}\u{62A5}\u{544A}\u{7684}\u{6587}\u{6863}\u{7ED3}\u{6784}\u{548C}\u{683C}\u{5F0F}
6771
+ 6. **\u{6DFB}\u{52A0}\u{66F4}\u{65B0}\u{8BB0}\u{5F55}**\u{FF1A}\u{5728}\u{6587}\u{6863}\u{672B}\u{5C3E}\u{6DFB}\u{52A0}\u{66F4}\u{65B0}\u{65E5}\u{5FD7}\u{FF0C}\u{8BB0}\u{5F55}\u{672C}\u{6B21}\u{66F4}\u{65B0}\u{7684}\u{5185}\u{5BB9}
6772
+
6773
+ ## \u{6280}\u{672F}\u{6A21}\u{677F}\u{53C2}\u{8003}\u{FF1A}
6774
+ ${template}
6775
+
6776
+ ${customPrompt ? `## \u{81EA}\u{5B9A}\u{4E49}\u{8981}\u{6C42}\u{FF1A}
6777
+ ${customPrompt}` : ""}
6778
+
6779
+ \u{8BF7}\u{751F}\u{6210}\u{5B8C}\u{6574}\u{7684}\u{66F4}\u{65B0}\u{540E}\u{7684}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}\u{3002}
6780
+ `;
6781
+ if (outputPath) return await this.generateDocumentStream(updatePrompt, outputPath, title, "", {
6782
+ realTimeMode: true
7877
6783
  });
7878
- this.validateGeneratedDocument(document, title);
7879
- return document;
6784
+ const updatedDocument = await openAIService.generateText({
6785
+ prompt: updatePrompt,
6786
+ system_prompt: "\u4F60\u662F\u4E00\u4F4D\u4E13\u4E1A\u7684\u6280\u672F\u6587\u6863\u7F16\u5199\u4E13\u5BB6\uFF0C\u64C5\u957F\u667A\u80FD\u5408\u5E76\u548C\u66F4\u65B0\u6280\u672F\u6587\u6863\u3002\u8BF7\u4FDD\u6301\u6587\u6863\u7684\u4E13\u4E1A\u6027\u548C\u5B8C\u6574\u6027\u3002"
6787
+ });
6788
+ this.validateGeneratedDocument(updatedDocument, title);
6789
+ logger.info("\u6587\u6863\u66F4\u65B0\u5B8C\u6210", {
6790
+ documentLength: updatedDocument.length
6791
+ });
6792
+ return updatedDocument;
7880
6793
  } catch (error) {
7881
- logger.error("\u6280\u672F\u6587\u6863\u751F\u6210\u5931\u8D25", {
6794
+ logger.error("\u6587\u6863\u66F4\u65B0\u5931\u8D25", {
7882
6795
  error,
7883
- requirementType
6796
+ title
7884
6797
  });
7885
- throw new RequirementAnalysisError(`\u{65E0}\u{6CD5}\u{751F}\u{6210}${requirementType}\u{7C7B}\u{578B}\u{7684}\u{6280}\u{672F}\u{6587}\u{6863}\u{FF0C}\u{8BF7}\u{68C0}\u{67E5}\u{9700}\u{6C42}\u{63CF}\u{8FF0}\u{662F}\u{5426}\u{5B8C}\u{6574}`, types_ErrorCodes.DOCUMENT_GENERATION_FAILED, {
6798
+ throw new RequirementAnalysisError(`\u{65E0}\u{6CD5}\u{66F4}\u{65B0}${requirementType}\u{7C7B}\u{578B}\u{7684}\u{6280}\u{672F}\u{6587}\u{6863}\u{FF0C}\u{8BF7}\u{68C0}\u{67E5}\u{9700}\u{6C42}\u{63CF}\u{8FF0}\u{662F}\u{5426}\u{5B8C}\u{6574}`, types_ErrorCodes.DOCUMENT_GENERATION_FAILED, {
7886
6799
  requirementType,
7887
6800
  originalError: error
7888
6801
  });
7889
6802
  }
7890
6803
  }
7891
- buildDocumentPrompt(template, content, title, projectInfo, customPrompt) {
7892
- let prompt = template.replace(/\{featureName\}/g, title).replace(/\{inputContent\}/g, content).replace(/\{currentTime\}/g, new Date().toISOString()).replace(/\{businessDomain\}/g, projectInfo?.projectType || "\u901A\u7528\u4E1A\u52A1").replace(/\{generateSequenceDiagram\}/g, 'true');
7893
- if (customPrompt) prompt += `
7894
-
7895
- ## \u{81EA}\u{5B9A}\u{4E49}\u{8981}\u{6C42}
7896
- ${customPrompt}`;
7897
- return prompt;
7898
- }
7899
6804
  validateGeneratedDocument(document, title) {
7900
6805
  if (!document || document.trim().length < 100) throw new RequirementAnalysisError("\u751F\u6210\u7684\u6280\u672F\u6587\u6863\u5185\u5BB9\u8FC7\u77ED\uFF0C\u53EF\u80FD\u5B58\u5728\u95EE\u9898", types_ErrorCodes.DOCUMENT_GENERATION_FAILED, {
7901
6806
  title,
@@ -7905,70 +6810,159 @@ ${customPrompt}`;
7905
6810
  title
7906
6811
  });
7907
6812
  }
7908
- buildAnalysisResult(analysis, projectInfo, outputPath, sourceInfo) {
6813
+ buildAnalysisResult(analysis, projectInfo, outputPath, sourceInfo, isUpdate = false, generatedFiles, analysisInfos) {
7909
6814
  const featuresToProcess = analysis.featureDependencies?.mergedFeatures || analysis.requirements;
6815
+ const absolutePath = external_path_default().resolve(outputPath);
6816
+ const allGeneratedFiles = generatedFiles || [
6817
+ absolutePath
6818
+ ];
6819
+ const allAbsolutePaths = allGeneratedFiles.map((f)=>external_path_default().resolve(f));
6820
+ const operationType = isUpdate ? "\u66F4\u65B0" : "\u751F\u6210";
6821
+ const operationIcon = isUpdate ? "\uD83D\uDD04" : "\u2705";
6822
+ const reportAddresses = allAbsolutePaths.length > 1 ? allAbsolutePaths.map((p, i)=>{
6823
+ const type = analysisInfos?.[i]?.requirementType || "";
6824
+ return `- **${type}\u{62A5}\u{544A}**: \`${p}\``;
6825
+ }).join("\n") : `\`${absolutePath}\``;
7910
6826
  return {
7911
6827
  success: true,
7912
6828
  message: `
7913
- # \u{2705} \u{7EDF}\u{4E00}\u{6280}\u{672F}\u{6587}\u{6863}\u{751F}\u{6210}\u{5B8C}\u{6210}
6829
+ # ${operationIcon} \u{9700}\u{6C42}\u{5206}\u{6790}\u{62A5}\u{544A}\u{5DF2}\u{5F00}\u{59CB}${operationType}\u{FF08}\u{6D41}\u{5F0F}\u{8F93}\u{51FA}\u{FF09}
7914
6830
 
7915
- ## \u{1F4CA} \u{667A}\u{80FD}\u{5206}\u{6790}\u{7ED3}\u{679C}
7916
- - **\u{9879}\u{76EE}\u{7C7B}\u{578B}**: ${projectInfo?.projectType || "\u901A\u7528\u9879\u76EE"}
6831
+ ## \u{1F4C4} \u{62A5}\u{544A}\u{5730}\u{5740}
6832
+ ${reportAddresses}
6833
+
6834
+ \u{FFFD} **\u{63D0}\u{793A}\u{544A}**: \u{6587}\u{6863}\u{6B63}\u{5728}\u{5B9E}\u{65F6}\u{751F}\u{6210}\u{4E2D}\u{FF0C}\u{60A8}\u{53EF}\u{4EE5}\u{7ACB}\u{5373}\u{6253}\u{5F00}\u{4E0A}\u{8FF0}\u{6587}\u{4EF6}\u{67E5}\u{770B}\u{751F}\u{6210}\u{8FDB}\u{5EA6}\u{3002}\u{6587}\u{6863}\u{5185}\u{5BB9}\u{4F1A}\u{81EA}\u{52A8}\u{5237}\u{65B0}\u{663E}\u{793A}\u{3002}
6835
+
6836
+ ## \u{1F4CA} \u{62A5}\u{544A}\u{603B}\u{7ED3}
7917
6837
  - **\u{9700}\u{6C42}\u{7C7B}\u{578B}**: ${analysis.requirementType}
7918
- - **\u{63A8}\u{8350}\u{6A21}\u{677F}**: ${analysis.templateRecommendation.primaryTemplate}
7919
- - **\u{603B}\u{8BA1}\u{529F}\u{80FD}\u{70B9}**: ${featuresToProcess.length} \u{4E2A}
7920
- - **\u{8F93}\u{5165}\u{6765}\u{6E90}**: ${sourceInfo}
7921
- - **\u{5206}\u{6790}\u{6A21}\u{5F0F}**: \u{7EDF}\u{4E00}\u{6280}\u{672F}\u{6587}\u{6863}\u{751F}\u{6210}
7922
- - **\u{751F}\u{6210}\u{6587}\u{6863}**: 1 \u{4E2A}\u{7EDF}\u{4E00}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}
6838
+ - **\u{751F}\u{6210}\u{62A5}\u{544A}\u{6570}**: ${allAbsolutePaths.length} \u{4EFD}
6839
+ - **\u{529F}\u{80FD}\u{70B9}\u{6570}\u{91CF}**: ${featuresToProcess.length} \u{4E2A}
6840
+ - **\u{4E1A}\u{52A1}\u{9886}\u{57DF}**: ${this.parseRequirementTypes(analysis.requirementType).join(", ")}
6841
+ - **\u{6280}\u{672F}\u{6A21}\u{677F}**: ${analysis.templateRecommendation.primaryTemplate}
7923
6842
 
7924
6843
  ## \u{1F3AF} \u{529F}\u{80FD}\u{70B9}\u{6E05}\u{5355}
7925
6844
  ${featuresToProcess.map((f, i)=>{
7926
- const featureTitle = 'title' in f ? f.title : f.featureName;
7927
- const priority = 'priority' in f ? f.priority : 'medium';
7928
- const complexity = 'complexity' in f ? f.complexity : f.estimatedComplexity;
7929
- const techType = 'technologyType' in f ? f.technologyType : analysis.requirementType;
7930
- return `- ${i + 1}. **${featureTitle}** (${priority}\u{4F18}\u{5148}\u{7EA7}, ${complexity}\u{590D}\u{6742}\u{5EA6}, ${techType}\u{7C7B}\u{578B})`;
7931
- }).join('\n')}
7932
-
7933
- ## \u{1F4C1} \u{751F}\u{6210}\u{6587}\u{4EF6}
7934
- - \`${external_path_default().resolve(outputPath)}\`
7935
-
7936
- ## \u{1F4A1} \u{4F18}\u{5316}\u{8BF4}\u{660E}
7937
- 1. **\u{9879}\u{76EE}\u{5206}\u{6790}**: \u{81EA}\u{52A8}\u{5206}\u{6790}\u{9879}\u{76EE}\u{57FA}\u{672C}\u{60C5}\u{51B5}\u{FF0C}\u{63D0}\u{53D6}\u{6280}\u{672F}\u{6808}\u{3001}\u{6846}\u{67B6}\u{7B49}\u{4FE1}\u{606F}
7938
- 2. **\u{667A}\u{80FD}\u{8BC6}\u{522B}**: \u{6839}\u{636E}\u{9700}\u{6C42}\u{5185}\u{5BB9}\u{667A}\u{80FD}\u{8BC6}\u{522B}\u{4E3A}**${analysis.requirementType}**\u{7C7B}\u{578B}
7939
- 3. **\u{6A21}\u{677F}\u{5339}\u{914D}**: \u{81EA}\u{52A8}\u{9009}\u{62E9}**${analysis.templateRecommendation.primaryTemplate}**\u{6280}\u{672F}\u{6A21}\u{677F}
7940
- 4. **\u{7EDF}\u{4E00}\u{6587}\u{6863}**: \u{5C06}\u{591A}\u{4E2A}\u{529F}\u{80FD}\u{70B9}\u{5408}\u{5E76}\u{751F}\u{6210}\u{4E00}\u{4E2A}\u{5B8C}\u{6574}\u{7684}\u{6280}\u{672F}\u{9700}\u{6C42}\u{6587}\u{6863}
7941
-
7942
- \u{60A8}\u{53EF}\u{4EE5}\u{5728}\u{4E0A}\u{8FF0}\u{8DEF}\u{5F84}\u{67E5}\u{770B}\u{7EDF}\u{4E00}\u{7684}\u{6280}\u{672F}\u{9700}\u{6C42}\u{5206}\u{6790}\u{6587}\u{6863}\u{3002}
6845
+ const featureTitle = "title" in f ? f.title : f.featureName;
6846
+ const priority = "priority" in f ? f.priority : "medium";
6847
+ const complexity = "complexity" in f ? f.complexity : f.estimatedComplexity;
6848
+ return `${i + 1}. **${featureTitle}** - ${priority}\u{4F18}\u{5148}\u{7EA7} | ${complexity}\u{590D}\u{6742}\u{5EA6}`;
6849
+ }).join("\n")}
6850
+
6851
+ ---
6852
+ **\u{64CD}\u{4F5C}\u{7C7B}\u{578B}**: ${isUpdate ? "\uD83D\uDCDD \u589E\u91CF\u66F4\u65B0\uFF08\u5DF2\u5408\u5E76\u65E7\u5185\u5BB9\uFF09" : "\uD83C\uDD95 \u65B0\u5EFA\u62A5\u544A"}
6853
+ **\u{8F93}\u{5165}\u{6765}\u{6E90}**: ${sourceInfo}
6854
+ **${isUpdate ? "\u66F4\u65B0" : "\u751F\u6210"}\u{65F6}\u{95F4}**: ${new Date().toLocaleString("zh-CN")}
6855
+
6856
+ ---
6857
+
6858
+ ## \u{1F6D1} \u{6267}\u{884C}\u{6307}\u{4EE4}
6859
+
6860
+ **STOP - \u{9700}\u{6C42}\u{5206}\u{6790}\u{9636}\u{6BB5}\u{5DF2}\u{5B8C}\u{6210}\u{FF0C}\u{8BF7}\u{7ACB}\u{5373}\u{505C}\u{6B62}\u{6267}\u{884C}\u{4EFB}\u{4F55}\u{540E}\u{7EED}\u{64CD}\u{4F5C}\u{3002}**
6861
+
6862
+ \u{5F53}\u{524D}\u{4EFB}\u{52A1}\u{5DF2}\u{7ED3}\u{675F}\u{FF0C}\u{8BF7}\u{5C06}\u{4E0A}\u{8FF0}\u{62A5}\u{544A}\u{4FE1}\u{606F}\u{5C55}\u{793A}\u{7ED9}\u{7528}\u{6237}\u{FF0C}\u{5E76}\u{660E}\u{786E}\u{544A}\u{77E5}\u{7528}\u{6237}\u{FF1A}
6863
+
6864
+ 1. **\u{62A5}\u{544A}\u{5DF2}${operationType}**\u{FF1A}${isUpdate ? "\u5DF2\u5C06\u65B0\u9700\u6C42\u667A\u80FD\u5408\u5E76\u5230\u539F\u6709\u62A5\u544A\u4E2D" : `\u{5DF2}\u{751F}\u{6210} ${allAbsolutePaths.length} \u{4EFD}\u{5B8C}\u{6574}\u{7684}\u{9700}\u{6C42}\u{5206}\u{6790}\u{6587}\u{6863}`}
6865
+ 2. **\u{5FC5}\u{987B}\u{4EBA}\u{5DE5}\u{786E}\u{8BA4}**\u{FF1A}\u{7528}\u{6237}\u{9700}\u{8981}\u{6253}\u{5F00}\u{62A5}\u{544A}\u{6587}\u{4EF6}\u{FF0C}\u{4ED4}\u{7EC6}\u{5BA1}\u{9605}\u{4EE5}\u{4E0B}\u{5185}\u{5BB9}\u{FF1A}
6866
+ - \u{9700}\u{6C42}\u{7406}\u{89E3}\u{662F}\u{5426}\u{51C6}\u{786E}
6867
+ - \u{529F}\u{80FD}\u{70B9}\u{662F}\u{5426}\u{5B8C}\u{6574}${isUpdate ? "\uFF08\u5305\u542B\u65B0\u65E7\u529F\u80FD\u70B9\uFF09" : ""}
6868
+ - \u{6280}\u{672F}\u{65B9}\u{6848}\u{662F}\u{5426}\u{5408}\u{7406}
6869
+ - \u{5B9E}\u{73B0}\u{7EC6}\u{8282}\u{662F}\u{5426}\u{6E05}\u{6670}
6870
+ ${isUpdate ? "- \u65B0\u65E7\u5185\u5BB9\u5408\u5E76\u662F\u5426\u5408\u7406" : ""}
6871
+ 3. **\u{7B49}\u{5F85}\u{7528}\u{6237}\u{6307}\u{4EE4}**\u{FF1A}\u{53EA}\u{6709}\u{5728}\u{7528}\u{6237}\u{660E}\u{786E}\u{786E}\u{8BA4}\u{62A5}\u{544A}\u{5185}\u{5BB9}\u{65E0}\u{8BEF}\u{540E}\u{FF0C}\u{624D}\u{80FD}\u{6839}\u{636E}\u{7528}\u{6237}\u{7684}\u{65B0}\u{6307}\u{4EE4}\u{7EE7}\u{7EED}\u{6267}\u{884C}\u{540E}\u{7EED}\u{5DE5}\u{4F5C}\u{FF08}\u{5982}\u{4EE3}\u{7801}\u{751F}\u{6210}\u{3001}\u{6D4B}\u{8BD5}\u{7B49}\u{FF09}
6872
+
6873
+ **\u{7981}\u{6B62}\u{81EA}\u{52A8}\u{6267}\u{884C}\u{4EFB}\u{4F55}\u{540E}\u{7EED}\u{6B65}\u{9AA4}\u{FF0C}\u{5FC5}\u{987B}\u{7B49}\u{5F85}\u{7528}\u{6237}\u{7684}\u{660E}\u{786E}\u{786E}\u{8BA4}\u{548C}\u{65B0}\u{7684}\u{6307}\u{4EE4}\u{3002}**
7943
6874
  `.trim(),
7944
- outputPath,
7945
- generatedFiles: [
7946
- external_path_default().resolve(outputPath)
7947
- ],
6875
+ outputPath: absolutePath,
6876
+ generatedFiles: allAbsolutePaths,
7948
6877
  analysisInfo: {
7949
6878
  requirementType: analysis.requirementType,
7950
6879
  recommendedTemplate: analysis.templateRecommendation.primaryTemplate,
7951
6880
  featureCount: featuresToProcess.length,
7952
- projectType: projectInfo?.projectType
6881
+ projectType: projectInfo?.projectType,
6882
+ generatedReports: analysisInfos
7953
6883
  }
7954
6884
  };
7955
6885
  }
6886
+ buildTaskResult(analysis, projectInfo, outputPath, sourceInfo, isUpdate = false, generatedFiles, generationTasks) {
6887
+ const featuresToProcess = analysis.featureDependencies?.mergedFeatures || analysis.requirements;
6888
+ const absolutePath = external_path_default().resolve(outputPath);
6889
+ const allGeneratedFiles = generatedFiles || [
6890
+ absolutePath
6891
+ ];
6892
+ const allAbsolutePaths = allGeneratedFiles.map((f)=>external_path_default().resolve(f));
6893
+ return {
6894
+ success: true,
6895
+ message: `
6896
+ # \u{1F4CB} \u{9700}\u{6C42}\u{5206}\u{6790}\u{62A5}\u{544A}\u{751F}\u{6210}\u{4EFB}\u{52A1}\u{5DF2}\u{51C6}\u{5907}
6897
+
6898
+ ## \u{1F4CA} \u{4EFB}\u{52A1}\u{6982}\u{89C8}
6899
+ - **\u{9700}\u{6C42}\u{7C7B}\u{578B}**: ${analysis.requirementType}
6900
+ - **\u{62A5}\u{544A}\u{6570}\u{91CF}**: ${allAbsolutePaths.length} \u{4EFD}
6901
+ - **\u{529F}\u{80FD}\u{70B9}\u{6570}\u{91CF}**: ${featuresToProcess.length} \u{4E2A}
6902
+ - **\u{64CD}\u{4F5C}\u{7C7B}\u{578B}**: ${isUpdate ? "\u589E\u91CF\u66F4\u65B0" : "\u65B0\u5EFA"}
6903
+
6904
+ ## \u{1F3AF} \u{529F}\u{80FD}\u{70B9}\u{6E05}\u{5355}
6905
+ ${featuresToProcess.map((f, i)=>{
6906
+ const featureTitle = "title" in f ? f.title : f.featureName;
6907
+ const priority = "priority" in f ? f.priority : "medium";
6908
+ const complexity = "complexity" in f ? f.complexity : f.estimatedComplexity;
6909
+ return `${i + 1}. **${featureTitle}** - ${priority}\u{4F18}\u{5148}\u{7EA7} | ${complexity}\u{590D}\u{6742}\u{5EA6}`;
6910
+ }).join("\n")}
6911
+
6912
+ ## \u{1F4DD} \u{751F}\u{6210}\u{4EFB}\u{52A1}
6913
+
6914
+ ${generationTasks?.map((task, i)=>`
6915
+ ### \u{4EFB}\u{52A1}${i + 1}\u{FF1A}${task.requirementType}\u{62A5}\u{544A}
6916
+
6917
+ **\u{6587}\u{4EF6}\u{8DEF}\u{5F84}**: \`${task.outputPath}\`
6918
+ **\u{64CD}\u{4F5C}\u{7C7B}\u{578B}**: ${task.isUpdate ? "\u589E\u91CF\u66F4\u65B0" : "\u65B0\u5EFA"}
6919
+
6920
+ \u{8BF7}\u{4F7F}\u{7528}\u{6D41}\u{5F0F}\u{8F93}\u{51FA}\u{65B9}\u{5F0F}\u{751F}\u{6210}\u{6587}\u{6863}\u{5185}\u{5BB9}\u{5E76}\u{5B9E}\u{65F6}\u{5199}\u{5165}\u{6587}\u{4EF6}\u{3002}
6921
+ `).join("\n")}
6922
+
6923
+ ---
6924
+
6925
+ **\u{8F93}\u{5165}\u{6765}\u{6E90}**: ${sourceInfo}
6926
+ **\u{4EFB}\u{52A1}\u{521B}\u{5EFA}\u{65F6}\u{95F4}**: ${new Date().toLocaleString("zh-CN")}
6927
+
6928
+ ## \u{26A0}\u{FE0F} \u{6267}\u{884C}\u{8BF4}\u{660E}
6929
+
6930
+ 1. **\u{7531}IDE\u{6267}\u{884C}**: \u{8FD9}\u{4E9B}\u{751F}\u{6210}\u{4EFB}\u{52A1}\u{5C06}\u{7531}Kiro IDE\u{81EA}\u{52A8}\u{6267}\u{884C}
6931
+ 2. **\u{6D41}\u{5F0F}\u{8F93}\u{51FA}**: \u{4F7F}\u{7528}\u{6D41}\u{5F0F}\u{65B9}\u{5F0F}\u{751F}\u{6210}\u{FF0C}\u{5B9E}\u{65F6}\u{5199}\u{5165}\u{6587}\u{4EF6}
6932
+ 3. **\u{5B9E}\u{65F6}\u{67E5}\u{770B}**: \u{53EF}\u{4EE5}\u{968F}\u{65F6}\u{6253}\u{5F00}\u{6587}\u{4EF6}\u{67E5}\u{770B}\u{751F}\u{6210}\u{8FDB}\u{5EA6}
6933
+ 4. **\u{9519}\u{8BEF}\u{5904}\u{7406}**: \u{5982}\u{679C}\u{751F}\u{6210}\u{5931}\u{8D25}\u{FF0C}\u{5DF2}\u{751F}\u{6210}\u{7684}\u{5185}\u{5BB9}\u{4F1A}\u{88AB}\u{4FDD}\u{7559}
6934
+ `.trim(),
6935
+ outputPath: absolutePath,
6936
+ generatedFiles: allAbsolutePaths,
6937
+ analysisInfo: {
6938
+ requirementType: analysis.requirementType,
6939
+ recommendedTemplate: analysis.templateRecommendation.primaryTemplate,
6940
+ featureCount: featuresToProcess.length,
6941
+ projectType: projectInfo?.projectType,
6942
+ generatedReports: generationTasks?.map((task)=>({
6943
+ requirementType: task.requirementType,
6944
+ outputPath: task.outputPath,
6945
+ isUpdate: task.isUpdate
6946
+ }))
6947
+ },
6948
+ generationTasks: generationTasks
6949
+ };
6950
+ }
7956
6951
  }
7957
6952
  class RequirementAnalyzerService {
7958
- projectAnalyzer = new ProjectAnalyzer();
7959
6953
  intelligentAnalyzer = new IntelligentAnalyzer();
7960
6954
  documentGenerator = new DocumentGenerator();
7961
6955
  async analyzeRequirements(params) {
7962
6956
  try {
7963
6957
  logger.info("\u5F00\u59CB\u9700\u6C42\u5206\u6790\u6D41\u7A0B", {
7964
- featureName: params.feature_name,
7965
- inputType: params.input_type
7966
- });
7967
- const { inputContent, sourceInfo } = await this.prepareInput(params);
7968
- const projectInfo = await this.projectAnalyzer.analyzeProject();
7969
- const requirementAnalysis = await this.intelligentAnalyzer.analyzeRequirements(inputContent, projectInfo, params.custom_prompt);
7970
- if (this.isMultiFeatureAnalysis(requirementAnalysis)) return await this.handleMultiFeatureAnalysis(requirementAnalysis, projectInfo, params, sourceInfo);
7971
- return await this.handleSingleFeatureAnalysis(requirementAnalysis, projectInfo, params, sourceInfo);
6958
+ requirementType: params.requirement_type,
6959
+ projectPath: params.current_project_path
6960
+ });
6961
+ const { requirementContent, projectInfo } = this.parseRequirementAnalysis(params.requirement_analysis);
6962
+ const requirementAnalysis = await this.intelligentAnalyzer.analyzeRequirements(requirementContent, projectInfo, void 0);
6963
+ const finalRequirementType = params.requirement_type || requirementAnalysis.requirementType;
6964
+ requirementAnalysis.requirementType = finalRequirementType;
6965
+ return await this.documentGenerator.generateUnifiedDocument(requirementAnalysis, projectInfo, this.extractFeatureName(requirementContent), "requirement-identifier\u5206\u6790\u7ED3\u679C", void 0, params.current_project_path);
7972
6966
  } catch (error) {
7973
6967
  if (error instanceof RequirementAnalysisError) throw error;
7974
6968
  logger.error("\u9700\u6C42\u5206\u6790\u6D41\u7A0B\u5931\u8D25", {
@@ -7981,101 +6975,217 @@ ${featuresToProcess.map((f, i)=>{
7981
6975
  });
7982
6976
  }
7983
6977
  }
7984
- async prepareInput(params) {
7985
- let inputContent;
7986
- let sourceInfo;
6978
+ parseRequirementAnalysis(analysisResult) {
7987
6979
  try {
7988
- if ('text' === params.input_type) {
7989
- if (!params.content) throw new RequirementAnalysisError("\u6587\u672C\u8F93\u5165\u6A21\u5F0F\u4E0Bcontent\u53C2\u6570\u4E0D\u80FD\u4E3A\u7A7A", types_ErrorCodes.INVALID_INPUT);
7990
- inputContent = params.content;
7991
- sourceInfo = "\u7528\u6237\u76F4\u63A5\u8F93\u5165";
7992
- } else if ('md_file' === params.input_type) {
7993
- if (!params.md_file_path) throw new RequirementAnalysisError("MD\u6587\u4EF6\u6A21\u5F0F\u4E0Bmd_file_path\u53C2\u6570\u4E0D\u80FD\u4E3A\u7A7A", types_ErrorCodes.INVALID_INPUT);
7994
- const resolvedPath = await validateAndResolvePath(params.md_file_path);
7995
- const stats = await promises_namespaceObject.stat(resolvedPath);
7996
- const fileSizeInMB = stats.size / 1048576;
7997
- logger.info("\u8BFB\u53D6MD\u6587\u4EF6", {
7998
- file: params.md_file_path,
7999
- size: `${fileSizeInMB.toFixed(2)} MB`,
8000
- useStreaming: params.use_streaming
8001
- });
8002
- if (fileSizeInMB > 1 || params.use_streaming) {
8003
- const chunkSize = params.chunk_size || 100;
8004
- inputContent = await readLargeFileContent(resolvedPath, chunkSize);
8005
- } else inputContent = await promises_namespaceObject.readFile(resolvedPath, 'utf8');
8006
- sourceInfo = `MD\u{6587}\u{4EF6}: ${params.md_file_path}`;
8007
- logger.info("MD\u6587\u4EF6\u8BFB\u53D6\u6210\u529F", {
8008
- file: params.md_file_path,
8009
- contentLength: inputContent.length
8010
- });
8011
- } else throw new RequirementAnalysisError(`\u{4E0D}\u{652F}\u{6301}\u{7684}\u{8F93}\u{5165}\u{7C7B}\u{578B}: ${params.input_type}`, types_ErrorCodes.INVALID_INPUT);
8012
- if (!inputContent || inputContent.trim().length < 10) throw new RequirementAnalysisError("\u8F93\u5165\u5185\u5BB9\u8FC7\u77ED\uFF0C\u8BF7\u63D0\u4F9B\u66F4\u8BE6\u7EC6\u7684\u9700\u6C42\u63CF\u8FF0", types_ErrorCodes.INVALID_INPUT);
6980
+ const parsed = JSON.parse(analysisResult);
8013
6981
  return {
8014
- inputContent,
8015
- sourceInfo
6982
+ requirementContent: parsed.requirement_description || parsed.data?.guidance || analysisResult,
6983
+ projectInfo: parsed.project_context || this.getDefaultProjectInfo()
8016
6984
  };
8017
- } catch (error) {
8018
- if (error instanceof RequirementAnalysisError) throw error;
8019
- logger.error("\u8F93\u5165\u5185\u5BB9\u51C6\u5907\u5931\u8D25", {
8020
- error,
8021
- params
8022
- });
8023
- if (error instanceof Error && 'code' in error && 'ENOENT' === error.code) throw new RequirementAnalysisError(`\u{6307}\u{5B9A}\u{7684}\u{6587}\u{4EF6}\u{4E0D}\u{5B58}\u{5728}: ${params.md_file_path}`, types_ErrorCodes.FILE_NOT_FOUND, {
8024
- filePath: params.md_file_path
8025
- });
8026
- throw new RequirementAnalysisError("\u8BFB\u53D6\u8F93\u5165\u5185\u5BB9\u65F6\u53D1\u751F\u9519\u8BEF\uFF0C\u8BF7\u68C0\u67E5\u6587\u4EF6\u8DEF\u5F84\u548C\u6743\u9650", types_ErrorCodes.INVALID_INPUT, {
8027
- originalError: error
6985
+ } catch {
6986
+ logger.info("\u4F7F\u7528\u6587\u672C\u683C\u5F0F\u7684\u9700\u6C42\u5206\u6790\u7ED3\u679C");
6987
+ return {
6988
+ requirementContent: analysisResult,
6989
+ projectInfo: this.getDefaultProjectInfo()
6990
+ };
6991
+ }
6992
+ }
6993
+ extractFeatureName(content) {
6994
+ logger.info("\u5F00\u59CB\u63D0\u53D6\u529F\u80FD\u540D\u79F0", {
6995
+ contentLength: content.length
6996
+ });
6997
+ const patterns = [
6998
+ /##\s*模块名称\s*[::]\s*(.+)/,
6999
+ /##\s*功能模块\s*[::]\s*(.+)/,
7000
+ /##\s*需求名称\s*[::]\s*(.+)/,
7001
+ /\*\*模块名称\*\*\s*[::]\s*(.+)/,
7002
+ /\*\*功能名称\*\*\s*[::]\s*(.+)/,
7003
+ /\*\*需求名称\*\*\s*[::]\s*(.+)/,
7004
+ /###\s*模块\d+[::]\s*(.+)/,
7005
+ /###\s*(.+?)(?:\s*模块)?$/m,
7006
+ /#\s*(.+?)\s*-\s*技术需求文档/,
7007
+ /#\s*(.+?)\s*-\s*需求分析/,
7008
+ /##\s*需求概述\s*\n+([^\n\[【]+)/
7009
+ ];
7010
+ for (const pattern of patterns){
7011
+ const match = content.match(pattern);
7012
+ if (match && match[1]) {
7013
+ let name = match[1].trim();
7014
+ const isPlaceholder = this.isPlaceholderText(name);
7015
+ if (isPlaceholder) {
7016
+ logger.info("\u8DF3\u8FC7\u5360\u4F4D\u7B26\u6587\u672C", {
7017
+ name
7018
+ });
7019
+ continue;
7020
+ }
7021
+ if (name.length > 20) {
7022
+ const extracted = this.extractKeywordsFromLongText(name);
7023
+ if (extracted && extracted.length > 0) name = extracted;
7024
+ }
7025
+ name = this.cleanFeatureName(name);
7026
+ if (name.length > 0 && name.length <= 50) {
7027
+ logger.info("\u6210\u529F\u63D0\u53D6\u529F\u80FD\u540D\u79F0", {
7028
+ name
7029
+ });
7030
+ return name;
7031
+ }
7032
+ }
7033
+ }
7034
+ const keywordName = this.extractFromKeywords(content);
7035
+ if (keywordName) {
7036
+ logger.info("\u4ECE\u5173\u952E\u8BCD\u63D0\u53D6\u529F\u80FD\u540D\u79F0", {
7037
+ name: keywordName
8028
7038
  });
7039
+ return keywordName;
8029
7040
  }
7041
+ const fallbackName = `feature-${Date.now()}`;
7042
+ logger.warn("\u65E0\u6CD5\u63D0\u53D6\u6709\u6548\u529F\u80FD\u540D\u79F0\uFF0C\u4F7F\u7528\u65F6\u95F4\u6233", {
7043
+ name: fallbackName
7044
+ });
7045
+ return fallbackName;
8030
7046
  }
8031
- isMultiFeatureAnalysis(analysis) {
8032
- return 'multi_specific_features' === analysis.analysisType || analysis.requirements.length > 1;
7047
+ extractKeywordsFromLongText(text) {
7048
+ const keywords = [
7049
+ /^开发([\u4e00-\u9fa5]{2,15})[功能模块系统平台]/,
7050
+ /^实现([\u4e00-\u9fa5]{2,15})[功能模块系统平台]/,
7051
+ /^开发([\u4e00-\u9fa5]{2,15}),/,
7052
+ /^实现([\u4e00-\u9fa5]{2,15}),/,
7053
+ /^([\u4e00-\u9fa5]{2,15})[功能模块系统平台]/,
7054
+ /^([\u4e00-\u9fa5]{2,15}),/,
7055
+ /^([\u4e00-\u9fa5]{2,15})/
7056
+ ];
7057
+ for (const pattern of keywords){
7058
+ const match = text.match(pattern);
7059
+ if (match && match[1]) {
7060
+ let keyword = match[1].replace(/[功能模块系统平台]+$/, "").trim();
7061
+ if (keyword.length > 0) return keyword;
7062
+ }
7063
+ }
7064
+ return text.substring(0, 20);
8033
7065
  }
8034
- async handleMultiFeatureAnalysis(analysis, projectInfo, params, sourceInfo) {
8035
- logger.info("\u6267\u884C\u591A\u529F\u80FD\u70B9\u7EDF\u4E00\u5206\u6790", {
8036
- featureName: params.feature_name,
8037
- requirementCount: analysis.requirements.length
8038
- });
8039
- return await this.documentGenerator.generateUnifiedDocument(analysis, projectInfo, params.feature_name, sourceInfo, params.custom_prompt);
7066
+ extractFromKeywords(content) {
7067
+ const moduleMatch = content.match(/###\s*模块\d+[::]\s*([^\n\[【]+)/);
7068
+ if (moduleMatch && moduleMatch[1]) {
7069
+ let name = this.cleanFeatureName(moduleMatch[1]);
7070
+ if (name.length > 50) name = this.extractKeywordsFromLongText(name);
7071
+ if (name.length > 0 && !this.isPlaceholderText(name)) return name;
7072
+ }
7073
+ const techMatch = content.match(/##\s*技术方案[\s\S]{0,200}?-\s*([^\n\[【]+)/);
7074
+ if (techMatch && techMatch[1]) {
7075
+ let name = this.cleanFeatureName(techMatch[1]);
7076
+ if (name.length > 50) name = this.extractKeywordsFromLongText(name);
7077
+ if (name.length > 0 && !this.isPlaceholderText(name)) return name;
7078
+ }
7079
+ return null;
8040
7080
  }
8041
- async handleSingleFeatureAnalysis(analysis, projectInfo, params, sourceInfo) {
8042
- logger.info("\u6267\u884C\u5355\u529F\u80FD\u70B9\u5206\u6790", {
8043
- featureName: params.feature_name,
8044
- requirementType: analysis.requirementType
8045
- });
8046
- return await this.documentGenerator.generateUnifiedDocument(analysis, projectInfo, params.feature_name, sourceInfo, params.custom_prompt);
7081
+ isPlaceholderText(text) {
7082
+ const exactPlaceholders = [
7083
+ "[\u4E00\u53E5\u8BDD\u63CF\u8FF0\u6838\u5FC3\u9700\u6C42]",
7084
+ "\u3010\u4E00\u53E5\u8BDD\u63CF\u8FF0\u6838\u5FC3\u9700\u6C42\u3011",
7085
+ "[\u540D\u79F0]",
7086
+ "\u3010\u540D\u79F0\u3011",
7087
+ "[\u529F\u80FD\u540D\u79F0]",
7088
+ "\u3010\u529F\u80FD\u540D\u79F0\u3011"
7089
+ ];
7090
+ if (exactPlaceholders.includes(text)) return true;
7091
+ const placeholderPatterns = [
7092
+ /^\[.*描述.*\]$/,
7093
+ /^【.*描述.*】$/,
7094
+ /^\[.*需求.*\]$/,
7095
+ /^【.*需求.*】$/,
7096
+ /一句话描述/,
7097
+ /核心需求/,
7098
+ /功能描述/,
7099
+ /需求描述/,
7100
+ /^\[.*\]$/,
7101
+ /^【.*】$/
7102
+ ];
7103
+ return placeholderPatterns.some((p)=>p.test(text));
7104
+ }
7105
+ cleanFeatureName(name) {
7106
+ return name.replace(/^\[|\]$/g, "").replace(/^【|】$/g, "").replace(/[功能模块系统平台]+$/, "").replace(/\s+/g, "").trim();
7107
+ }
7108
+ getDefaultProjectInfo() {
7109
+ return {
7110
+ techStack: [],
7111
+ frameworks: [],
7112
+ language: "",
7113
+ projectType: "\u901A\u7528\u9879\u76EE",
7114
+ dependencies: []
7115
+ };
8047
7116
  }
8048
7117
  }
8049
7118
  const requirementAnalyzerTool = {
8050
7119
  name: "\u9700\u6C42\u62A5\u544A\u751F\u6210\u667A\u80FD\u4F53",
8051
7120
  description: "\u667A\u80FD\u5206\u6790\u9700\u6C42\u5E76\u751F\u6210\u7EDF\u4E00\u7684\u6280\u672F\u6587\u6863\uFF0C\u652F\u6301\u9879\u76EE\u60C5\u51B5\u611F\u77E5\u548C\u7CBE\u786E\u6A21\u677F\u5339\u914D",
8052
7121
  inputSchema: {
8053
- input_type: enumType([
8054
- "text",
8055
- "md_file"
8056
- ]).describe("\u8F93\u5165\u7C7B\u578B\uFF1A\u76F4\u63A5\u6587\u672C\u8F93\u5165\u6216\u5F15\u7528\u5DF2\u751F\u6210\u7684MD\u6587\u4EF6"),
8057
- content: stringType().optional().describe("\u5F53input_type\u4E3Atext\u65F6\uFF0C\u76F4\u63A5\u8F93\u5165\u7684\u9700\u6C42\u5185\u5BB9"),
8058
- md_file_path: stringType().optional().describe("\u5F53input_type\u4E3Amd_file\u65F6\uFF0C\u8981\u5206\u6790\u7684MD\u6587\u4EF6\u8DEF\u5F84"),
8059
- feature_name: stringType().describe("\u529F\u80FD\u540D\u79F0\uFF0C\u7528\u4E8E\u751F\u6210\u8F93\u51FA\u6587\u4EF6\u540D"),
8060
- custom_prompt: stringType().optional().describe("\u81EA\u5B9A\u4E49\u63D0\u793A\u8BCD\uFF0C\u7528\u4E8E\u6307\u5BFCAI\u751F\u6210\u7279\u5B9A\u98CE\u683C\u7684\u9700\u6C42\u6587\u6863"),
8061
- analysis_depth: enumType([
8062
- "basic",
8063
- "detailed",
8064
- "comprehensive"
8065
- ]).default("detailed").describe("\u5206\u6790\u6DF1\u5EA6\uFF1A\u57FA\u7840\u3001\u8BE6\u7EC6\u3001\u7EFC\u5408"),
8066
- use_streaming: booleanType().default(false).describe("\u662F\u5426\u4F7F\u7528\u6D41\u5F0F\u5904\u7406\uFF08\u9002\u7528\u4E8E\u5927\u6587\u4EF6\uFF09"),
8067
- chunk_size: numberType().min(10).max(1000).default(100).describe("\u5206\u5757\u5927\u5C0F\uFF08\u4EC5\u5728use_streaming\u4E3Atrue\u65F6\u6709\u6548\uFF09")
7122
+ requirement_analysis: stringType().describe("requirement-identifier\u751F\u6210\u7684\u9700\u6C42\u5206\u6790\u7ED3\u679C\uFF08\u5305\u542B\u5F53\u524D\u9700\u6C42\u4E0E\u9879\u76EE\u60C5\u51B5\u7684\u5B8C\u6574\u5206\u6790\uFF09"),
7123
+ current_project_path: stringType().describe("\u5F53\u524D\u9879\u76EE\u8DEF\u5F84\uFF08\u5FC5\u586B\uFF09\uFF0C\u9700\u6C42\u62A5\u544A\u5C06\u751F\u6210\u5230\u8BE5\u8DEF\u5F84\u4E0B\u7684.aico/design\u76EE\u5F55"),
7124
+ requirement_type: enumType([
7125
+ "PC+API",
7126
+ "APP+API",
7127
+ "SDK+API",
7128
+ "APP+SDK",
7129
+ "PC+APP+API"
7130
+ ]).default("PC+API").describe("需求类型(必填):\n- PC+API: 页面+接口(会生成PC报告和API报告)\n- APP+API: 移动端+接口(会生成APP报告和API报告)\n- SDK+API: SDK集成+接口\n- APP+SDK: 移动端+SDK集成\n- PC+APP+API: 全平台(会生成PC、APP、API三份报告)\n根据需求内容选择合适的类型,如果需求提到「接口和页面」,应该使用 PC+API")
8068
7131
  },
8069
7132
  handler: async (args)=>{
8070
7133
  try {
8071
- const validationResult = ParameterBridge.validateToolParams(args);
8072
- if (!validationResult.success) return ParameterBridge.convertErrorToToolResponse(new Error(validationResult.error));
8073
- const serviceParams = ParameterBridge.convertToServiceParams(validationResult.data);
7134
+ const { requirement_analysis, current_project_path, requirement_type } = args;
7135
+ if (!requirement_analysis || !current_project_path) return {
7136
+ content: [
7137
+ {
7138
+ type: "text",
7139
+ text: JSON.stringify({
7140
+ success: false,
7141
+ message: "\u7F3A\u5C11\u5FC5\u586B\u53C2\u6570\uFF1Arequirement_analysis \u548C current_project_path",
7142
+ data: null
7143
+ })
7144
+ }
7145
+ ],
7146
+ isError: true
7147
+ };
8074
7148
  const service = new RequirementAnalyzerService();
8075
- const serviceResult = await service.analyzeRequirements(serviceParams);
8076
- return ParameterBridge.convertToToolResponse(serviceResult);
7149
+ const serviceResult = await service.analyzeRequirements({
7150
+ requirement_analysis,
7151
+ current_project_path,
7152
+ requirement_type: requirement_type || "PC+API"
7153
+ });
7154
+ return {
7155
+ content: [
7156
+ {
7157
+ type: "text",
7158
+ text: JSON.stringify({
7159
+ success: true,
7160
+ message: serviceResult.message || "\u9700\u6C42\u5206\u6790\u4EFB\u52A1\u5DF2\u51C6\u5907",
7161
+ data: {
7162
+ outputPath: serviceResult.outputPath,
7163
+ generatedFiles: serviceResult.generatedFiles || [],
7164
+ analysisInfo: serviceResult.analysisInfo || {},
7165
+ generationTasks: serviceResult.generationTasks || []
7166
+ }
7167
+ })
7168
+ }
7169
+ ]
7170
+ };
8077
7171
  } catch (error) {
8078
- return ParameterBridge.convertErrorToToolResponse(error);
7172
+ return {
7173
+ content: [
7174
+ {
7175
+ type: "text",
7176
+ text: JSON.stringify({
7177
+ success: false,
7178
+ message: error.message || "\u9700\u6C42\u5206\u6790\u8FC7\u7A0B\u4E2D\u53D1\u751F\u9519\u8BEF",
7179
+ data: {
7180
+ code: error.code || "\u672A\u77E5\u5F02\u5E38\u9700\u8981\u91CD\u65B0\u8C03\u7528\u667A\u80FD\u4F53",
7181
+ context: error.context || null,
7182
+ prompt: "\u68C0\u67E5\u62A5\u544A\u5B8C\u6574\u6027\uFF0C\u5982\u679C\u4E0D\u5B8C\u6574\u8865\u5168\u7F3A\u5C11\u7684\u4FE1\u606F\uFF0C\u5982\u679C\u5B8C\u6574\u8F93\u51FA\u4E00\u4E2A100\u5B57\u7684\u62A5\u544A\u5185\u5BB9\u6458\u8981"
7183
+ }
7184
+ })
7185
+ }
7186
+ ],
7187
+ isError: true
7188
+ };
8079
7189
  }
8080
7190
  }
8081
7191
  };
@@ -8702,14 +7812,21 @@ ${requirementSection}
8702
7812
  async performAIAnalysis(imagePath, basicInfo, context) {
8703
7813
  try {
8704
7814
  const imageBase64 = await this.imageToBase64(imagePath);
8705
- const prompt = this.buildAnalysisPrompt(imagePath, basicInfo, context);
7815
+ const systemPrompt = `You must interpret and analyze images strictly according to the assigned task.
7816
+ When an image placeholder is provided, your role is to parse the image content only within the scope of the user's instructions.
7817
+ Do not ignore or deviate from the task.
7818
+ Always ensure that your response reflects a clear, accurate interpretation of the image aligned with the given objective.`;
7819
+ const userPrompt = context || "\u8BF7\u5206\u6790\u8FD9\u5F20\u56FE\u7247\u7684\u5185\u5BB9";
8706
7820
  const aiResponse = await openAIService.analyzeImage({
8707
7821
  image_base64: imageBase64,
8708
- prompt: prompt,
8709
- system_prompt: "\u4F60\u662F\u4E00\u4E2A\u4E13\u4E1A\u7684\u56FE\u7247\u5206\u6790\u4E13\u5BB6\uFF0C\u8BF7\u4E25\u683C\u57FA\u4E8E\u4EFB\u52A1\u6307\u4EE4\u5206\u6790\u56FE\u7247\u5185\u5BB9\uFF0C\u4E0D\u504F\u79BB\u4EFB\u52A1\u8303\u56F4\uFF0C\u4E0D\u6DFB\u52A0\u65E0\u5173\u4FE1\u606F\u3002"
7822
+ prompt: userPrompt,
7823
+ system_prompt: systemPrompt
8710
7824
  });
8711
- const analysisContent = this.parseAIResponse(aiResponse);
8712
- return analysisContent;
7825
+ return {
7826
+ summary: aiResponse.trim(),
7827
+ details: {},
7828
+ tags: []
7829
+ };
8713
7830
  } catch (error) {
8714
7831
  logger.warn("\u4E3BAI\u5206\u6790\u5931\u8D25\uFF0C\u5C1D\u8BD5Dify\u515C\u5E95\u5206\u6790", {
8715
7832
  error,
@@ -8733,30 +7850,6 @@ ${requirementSection}
8733
7850
  }
8734
7851
  }
8735
7852
  }
8736
- buildAnalysisPrompt(imagePath, basicInfo, context) {
8737
- const basePrompt = `\u{8BF7}\u{5206}\u{6790}\u{8FD9}\u{5F20}\u{56FE}\u{7247}\u{3002}
8738
-
8739
- \u{56FE}\u{7247}\u{4FE1}\u{606F}\u{FF1A}
8740
- - \u{6587}\u{4EF6}\u{540D}\u{FF1A}${external_path_namespaceObject.basename(imagePath)}
8741
- - \u{683C}\u{5F0F}\u{FF1A}${basicInfo.format.toUpperCase()}
8742
- - \u{5C3A}\u{5BF8}\u{FF1A}${basicInfo.dimensions.width} \xd7 ${basicInfo.dimensions.height} \u{50CF}\u{7D20}
8743
- - \u{6587}\u{4EF6}\u{5927}\u{5C0F}\u{FF1A}${this.formatFileSize(basicInfo.file_size)}`;
8744
- const contextPrompt = context ? `
8745
-
8746
- ## \u{5206}\u{6790}\u{6307}\u{4EE4}
8747
- ${context}` : '';
8748
- return `${basePrompt}${contextPrompt}`.trim();
8749
- }
8750
- parseAIResponse(aiResponse) {
8751
- if (!aiResponse || 'string' != typeof aiResponse) throw new ImageAnalysisError("AI\u670D\u52A1\u8FD4\u56DE\u65E0\u6548\u54CD\u5E94", types_AnalysisErrorCodes.AI_SERVICE_ERROR, {
8752
- aiResponse
8753
- });
8754
- return {
8755
- summary: aiResponse.trim(),
8756
- details: {},
8757
- tags: []
8758
- };
8759
- }
8760
7853
  async getImageBasicInfo(imagePath) {
8761
7854
  try {
8762
7855
  const metadata = await external_sharp_default()(imagePath).metadata();
@@ -8906,179 +7999,11 @@ ${context}` : '';
8906
7999
  });
8907
8000
  const validatedArgs = ImageAnalysisParamsSchema.parse(args);
8908
8001
  const result = await analyzer.analyzeImage(validatedArgs.image_path, validatedArgs.context);
8909
- const systemGuidance = `
8910
- # \u{7CFB}\u{7EDF}\u{5316}\u{56FE}\u{7247}\u{5185}\u{5BB9}\u{5206}\u{6790}\u{667A}\u{80FD}\u{4F53}\u{6267}\u{884C}\u{6D41}\u{7A0B}
8911
-
8912
- ## \u{5206}\u{6790}\u{53C2}\u{6570}
8913
- - \u{56FE}\u{7247}\u{8DEF}\u{5F84}: ${validatedArgs.image_path}
8914
- - \u{4E0A}\u{4E0B}\u{6587}\u{6307}\u{5BFC}: ${validatedArgs.context || "\u65E0"}
8915
- - \u{56FE}\u{7247}\u{6587}\u{4EF6}: ${external_path_namespaceObject.basename(validatedArgs.image_path)}
8916
- - \u{56FE}\u{7247}\u{5C3A}\u{5BF8}: ${result.basic_info.dimensions.width} \xd7 ${result.basic_info.dimensions.height} \u{50CF}\u{7D20}
8917
- - \u{6587}\u{4EF6}\u{5927}\u{5C0F}: ${formatFileSize(result.basic_info.file_size)}
8918
- - \u{5904}\u{7406}\u{65F6}\u{95F4}: ${result.processing_time_ms}ms
8919
-
8920
- ## TODO\u{6E05}\u{5355}\u{6807}\u{51C6}\u{6D41}\u{7A0B}
8921
-
8922
- ### 1. \u{9700}\u{6C42}\u{5206}\u{6790}
8923
- **\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
8924
- - \u{5145}\u{5206}\u{641C}\u{7D22}\u{4E0E}\u{7528}\u{6237}\u{8F93}\u{5165}\u{5185}\u{5BB9}\u{76F8}\u{5173}\u{7684}\u{8D44}\u{6E90}
8925
- - \u{660E}\u{786E}\u{7528}\u{6237}\u{7684}\u{6838}\u{5FC3}\u{95EE}\u{9898}\u{3001}\u{9690}\u{542B}\u{9700}\u{6C42}\u{548C}\u{6700}\u{7EC8}\u{76EE}\u{6807}
8926
- - \u{56F4}\u{7ED5}\u{95EE}\u{9898}\u{FF0C}\u{5FEB}\u{901F}\u{6784}\u{5EFA}\u{4E00}\u{4E2A}\u{77E5}\u{8BC6}\u{6846}\u{67B6}\u{3002}\u{786E}\u{5B9A}\u{56DE}\u{7B54}\u{5E94}\u{5305}\u{542B}\u{7684}\u{5173}\u{952E}\u{6982}\u{5FF5}\u{3001}\u{4E0A}\u{4E0B}\u{6587}\u{3001}\u{6B63}\u{53CD}\u{8BBA}\u{70B9}\u{548C}\u{6F5C}\u{5728}\u{7684}\u{5EF6}\u{4F38}\u{9886}\u{57DF}
8927
- - \u{6839}\u{636E}\u{5145}\u{5206}\u{4E86}\u{89E3}\u{5230}\u{7684}\u{4FE1}\u{606F}\u{FF0C}\u{6E05}\u{6670}\u{5B8C}\u{6574}\u{7684}\u{590D}\u{8FF0}\u{7528}\u{6237}\u{9700}\u{6C42}\u{FF0C}\u{5E76}\u{7ED9}\u{51FA}\u{4E00}\u{4E2A}\u{9AD8}\u{5EA6}\u{6D53}\u{7F29}\u{7684}\u{3001}\u{7ED3}\u{8BBA}\u{6027}\u{7684}\u{6838}\u{5FC3}\u{89C2}\u{70B9}
8928
-
8929
- **\u{4E0A}\u{4E0B}\u{6587}\u{5206}\u{6790}\u{FF1A}**
8930
- ${validatedArgs.context ? `
8931
- **\u{7528}\u{6237}\u{63D0}\u{4F9B}\u{7684}\u{4E0A}\u{4E0B}\u{6587}\u{FF1A}**
8932
- \`\`\`
8933
- ${validatedArgs.context}
8934
- \`\`\`
8935
-
8936
- **\u{5206}\u{6790}\u{91CD}\u{70B9}\u{FF1A}**
8937
- - \u{6839}\u{636E}\u{4E0A}\u{4E0B}\u{6587}\u{786E}\u{5B9A}\u{5206}\u{6790}\u{65B9}\u{5411}
8938
- - \u{91CD}\u{70B9}\u{5173}\u{6CE8}\u{4E0A}\u{4E0B}\u{6587}\u{4E2D}\u{63D0}\u{5230}\u{7684}\u{5173}\u{952E}\u{8981}\u{7D20}
8939
- - \u{786E}\u{4FDD}\u{5206}\u{6790}\u{7ED3}\u{679C}\u{7B26}\u{5408}\u{7528}\u{6237}\u{9884}\u{671F}
8940
- ` : `
8941
- **\u{65E0}\u{7279}\u{5B9A}\u{4E0A}\u{4E0B}\u{6587}\u{6307}\u{5BFC}**
8942
- - \u{8FDB}\u{884C}\u{901A}\u{7528}\u{56FE}\u{7247}\u{5185}\u{5BB9}\u{5206}\u{6790}
8943
- - \u{8BC6}\u{522B}\u{56FE}\u{7247}\u{4E2D}\u{7684}\u{4E3B}\u{8981}\u{5143}\u{7D20}\u{548C}\u{7279}\u{5F81}
8944
- - \u{63D0}\u{4F9B}\u{5168}\u{9762}\u{7684}\u{56FE}\u{7247}\u{63CF}\u{8FF0}
8945
- `}
8946
-
8947
- **\u{56FE}\u{7247}\u{57FA}\u{672C}\u{4FE1}\u{606F}\u{FF1A}**
8948
- - \u{6587}\u{4EF6}\u{8DEF}\u{5F84}: ${validatedArgs.image_path}
8949
- - \u{56FE}\u{7247}\u{683C}\u{5F0F}: ${external_path_namespaceObject.extname(validatedArgs.image_path)}
8950
- - \u{5206}\u{8FA8}\u{7387}: ${result.basic_info.dimensions.width} \xd7 ${result.basic_info.dimensions.height}
8951
- - \u{6587}\u{4EF6}\u{5927}\u{5C0F}: ${formatFileSize(result.basic_info.file_size)}
8952
-
8953
- ### 2. \u{573A}\u{666F}\u{8BC6}\u{522B}
8954
- **\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
8955
- - \u{57FA}\u{4E8E}\u{9700}\u{6C42}\u{5206}\u{6790}\u{7684}\u{5185}\u{5BB9}\u{FF0C}\u{627E}\u{51FA}\u{4E3B}\u{8981}\u{77DB}\u{76FE}\u{70B9}\u{FF0C}\u{5B9A}\u{4F4D}\u{6838}\u{5FC3}\u{95EE}\u{9898}\u{8282}\u{70B9}
8956
- - \u{4ECE}\u{7CFB}\u{7EDF}\u{5C42}\u{9762}\u{62C6}\u{89E3}\u{4E3A}\u{53EF}\u{6267}\u{884C}\u{5B50}\u{4EFB}\u{52A1}\u{FF0C}\u{786E}\u{4FDD}\u{903B}\u{8F91}\u{94FE}\u{6761}\u{6E05}\u{6670}\u{FF0C}\u{4E0A}\u{4E0B}\u{6587}\u{4FE1}\u{606F}\u{5145}\u{8DB3}
8957
-
8958
- **\u{5206}\u{6790}\u{7EF4}\u{5EA6}\u{FF1A}**
8959
- 1. **\u{5185}\u{5BB9}\u{573A}\u{666F}\u{8BC6}\u{522B}**
8960
- - \u{56FE}\u{7247}\u{7C7B}\u{578B}\u{8BC6}\u{522B}\u{FF08}\u{81EA}\u{7136}\u{666F}\u{89C2}\u{3001}\u{4EBA}\u{7269}\u{3001}\u{6587}\u{6863}\u{3001}\u{56FE}\u{8868}\u{7B49}\u{FF09}
8961
- - \u{4E3B}\u{8981}\u{5BF9}\u{8C61}\u{8BC6}\u{522B}
8962
- - \u{573A}\u{666F}\u{73AF}\u{5883}\u{5206}\u{6790}
8963
- - \u{60C5}\u{611F}\u{8272}\u{5F69}\u{5224}\u{65AD}
8964
-
8965
- 2. **\u{6280}\u{672F}\u{573A}\u{666F}\u{8BC6}\u{522B}**
8966
- - \u{56FE}\u{7247}\u{8D28}\u{91CF}\u{8BC4}\u{4F30}
8967
- - \u{5206}\u{8FA8}\u{7387}\u{9002}\u{7528}\u{6027}
8968
- - \u{683C}\u{5F0F}\u{517C}\u{5BB9}\u{6027}
8969
- - \u{538B}\u{7F29}\u{8D28}\u{91CF}\u{5206}\u{6790}
8970
-
8971
- 3. **\u{5E94}\u{7528}\u{573A}\u{666F}\u{8BC6}\u{522B}**
8972
- - \u{4F7F}\u{7528}\u{573A}\u{666F}\u{5206}\u{6790}
8973
- - \u{76EE}\u{6807}\u{53D7}\u{4F17}\u{8BC6}\u{522B}
8974
- - \u{5546}\u{4E1A}\u{4EF7}\u{503C}\u{8BC4}\u{4F30}
8975
- - \u{7248}\u{6743}\u{98CE}\u{9669}\u{5206}\u{6790}
8976
-
8977
- ### 3. \u{65B9}\u{6848}\u{8BBE}\u{8BA1}
8978
- **\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
8979
- - \u{65B9}\u{6848}\u{8BBE}\u{8BA1}\u{4F18}\u{5148}\u{590D}\u{7528}\u{73B0}\u{6709}\u{65B9}\u{6848}\u{FF0C}\u{7EC4}\u{4EF6}\u{FF0C}\u{5DE5}\u{5177}\u{65B9}\u{6CD5}\u{7B49}\u{FF0C}\u{80FD}\u{590D}\u{7528}\u{7684}\u{5C3D}\u{53EF}\u{80FD}\u{590D}\u{7528}
8980
- - \u{626B}\u{63CF}\u{9879}\u{76EE}\u{4E2D}\u{4F7F}\u{7528}\u{7684}\u{6D4B}\u{8BD5}\u{6846}\u{67B6}\u{548C}\u{811A}\u{672C}\u{FF0C}\u{751F}\u{6210}\u{672C}\u{6B21}\u{9700}\u{6C42}\u{7684}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF0C}\u{5982}\u{679C}\u{4E0D}\u{5B58}\u{5728}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF0C}\u{5219}\u{7F16}\u{5199}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{5230}.aico/tests\u{4E0B}\u{9762}
8981
-
8982
- **\u{8BBE}\u{8BA1}\u{5185}\u{5BB9}\u{FF1A}**
8983
- 1. **\u{5206}\u{6790}\u{65B9}\u{6848}\u{8BBE}\u{8BA1}**
8984
- - \u{56FE}\u{7247}\u{5185}\u{5BB9}\u{8BC6}\u{522B}\u{7B56}\u{7565}
8985
- - \u{7279}\u{5F81}\u{63D0}\u{53D6}\u{65B9}\u{6CD5}
8986
- - \u{5206}\u{7C7B}\u{6807}\u{6CE8}\u{65B9}\u{6848}
8987
- - \u{8D28}\u{91CF}\u{8BC4}\u{4F30}\u{6807}\u{51C6}
8988
-
8989
- 2. **\u{8F93}\u{51FA}\u{65B9}\u{6848}\u{8BBE}\u{8BA1}**
8990
- - \u{5206}\u{6790}\u{62A5}\u{544A}\u{7ED3}\u{6784}
8991
- - \u{5173}\u{952E}\u{4FE1}\u{606F}\u{63D0}\u{53D6}
8992
- - \u{683C}\u{5F0F}\u{5316}\u{8F93}\u{51FA}\u{89C4}\u{8303}
8993
- - \u{591A}\u{8BED}\u{8A00}\u{652F}\u{6301}\u{65B9}\u{6848}
8994
-
8995
- 3. **\u{6D4B}\u{8BD5}\u{65B9}\u{6848}\u{8BBE}\u{8BA1}**
8996
- - \u{56FE}\u{7247}\u{6837}\u{672C}\u{6D4B}\u{8BD5}
8997
- - \u{51C6}\u{786E}\u{6027}\u{9A8C}\u{8BC1}
8998
- - \u{8FB9}\u{754C}\u{6848}\u{4F8B}\u{6D4B}\u{8BD5}
8999
- - \u{6027}\u{80FD}\u{57FA}\u{51C6}\u{6D4B}\u{8BD5}
9000
-
9001
- ### 4. \u{6267}\u{884C}\u{9A8C}\u{8BC1}
9002
- **\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
9003
- - \u{6309}\u{65B9}\u{6848}\u{8BBE}\u{8BA1}\u{7684}\u{7ED3}\u{679C}\u{8F93}\u{51FA}\u{4EE3}\u{7801}
9004
- - \u{5982}\u{679C}\u{6709}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF0C}\u{8FD0}\u{884C}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{5E76}\u{4FEE}\u{6B63}\u{76F4}\u{5230}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{5168}\u{90E8}\u{901A}\u{8FC7}
9005
-
9006
- **\u{9A8C}\u{8BC1}\u{5185}\u{5BB9}\u{FF1A}**
9007
- 1. **\u{56FE}\u{7247}\u{5185}\u{5BB9}\u{9A8C}\u{8BC1}**
9008
- - \u{4E3B}\u{8981}\u{5BF9}\u{8C61}\u{8BC6}\u{522B}\u{51C6}\u{786E}\u{6027}
9009
- - \u{573A}\u{666F}\u{63CF}\u{8FF0}\u{5B8C}\u{6574}\u{6027}
9010
- - \u{7EC6}\u{8282}\u{7279}\u{5F81}\u{6355}\u{6349}
9011
- - \u{4E0A}\u{4E0B}\u{6587}\u{76F8}\u{5173}\u{6027}
9012
-
9013
- 2. **\u{5206}\u{6790}\u{8D28}\u{91CF}\u{9A8C}\u{8BC1}**
9014
- - \u{63CF}\u{8FF0}\u{51C6}\u{786E}\u{6027}\u{68C0}\u{67E5}
9015
- - \u{5173}\u{952E}\u{4FE1}\u{606F}\u{5B8C}\u{6574}\u{6027}
9016
- - \u{903B}\u{8F91}\u{4E00}\u{81F4}\u{6027}\u{9A8C}\u{8BC1}
9017
- - \u{8BED}\u{8A00}\u{8868}\u{8FBE}\u{6E05}\u{6670}\u{5EA6}
9018
-
9019
- 3. **\u{6280}\u{672F}\u{6307}\u{6807}\u{9A8C}\u{8BC1}**
9020
- - \u{5904}\u{7406}\u{65F6}\u{95F4}\u{6548}\u{7387}
9021
- - \u{5185}\u{5B58}\u{4F7F}\u{7528}\u{4F18}\u{5316}
9022
- - \u{9519}\u{8BEF}\u{5904}\u{7406}\u{673A}\u{5236}
9023
- - \u{683C}\u{5F0F}\u{517C}\u{5BB9}\u{6027}
9024
-
9025
- ### 5. \u{603B}\u{7ED3}\u{53CD}\u{9988}
9026
- **\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
9027
- - \u{8F93}\u{51FA}\u{6700}\u{7EC8}\u{6267}\u{884C}\u{7684}\u{65B9}\u{6848}
9028
- - \u{66F4}\u{65B0}TODO\u{6E05}\u{5355}
9029
- - \u{6839}\u{636E}\u{60C5}\u{51B5}\u{63D0}\u{4F9B}\u{4E00}\u{4E9B}\u{524D}\u{77BB}\u{6027}\u{7684}\u{601D}\u{8003}\u{6216}\u{5EFA}\u{8BAE}
9030
-
9031
- **\u{8F93}\u{51FA}\u{5185}\u{5BB9}\u{FF1A}**
9032
- 1. **\u{56FE}\u{7247}\u{5206}\u{6790}\u{62A5}\u{544A}**
9033
- - \u{57FA}\u{672C}\u{4FE1}\u{606F}\u{6C47}\u{603B}
9034
- - \u{5185}\u{5BB9}\u{8BE6}\u{7EC6}\u{63CF}\u{8FF0}
9035
- - \u{7279}\u{5F81}\u{63D0}\u{53D6}\u{7ED3}\u{679C}
9036
- - \u{8D28}\u{91CF}\u{8BC4}\u{4F30}\u{62A5}\u{544A}
9037
-
9038
- 2. **\u{5E94}\u{7528}\u{5EFA}\u{8BAE}**
9039
- - \u{4F7F}\u{7528}\u{573A}\u{666F}\u{5EFA}\u{8BAE}
9040
- - \u{4F18}\u{5316}\u{6539}\u{8FDB}\u{5EFA}\u{8BAE}
9041
- - \u{6280}\u{672F}\u{5904}\u{7406}\u{5EFA}\u{8BAE}
9042
- - \u{5546}\u{4E1A}\u{5E94}\u{7528}\u{5EFA}\u{8BAE}
9043
-
9044
- ## \u{5F53}\u{524D}\u{5206}\u{6790}\u{7ED3}\u{679C}
9045
-
9046
- **\u{56FE}\u{7247}\u{63CF}\u{8FF0}\u{FF1A}**
9047
- ${result.content.summary}
9048
-
9049
- **\u{8BE6}\u{7EC6}\u{5206}\u{6790}\u{7ED3}\u{679C}\u{FF1A}**
9050
- - \u{57FA}\u{672C}\u{4FE1}\u{606F}\u{5DF2}\u{83B7}\u{53D6}
9051
- - \u{5185}\u{5BB9}\u{5206}\u{6790}\u{5DF2}\u{5B8C}\u{6210}
9052
- - \u{5904}\u{7406}\u{65F6}\u{95F4}: ${result.processing_time_ms}ms
9053
- - \u{5206}\u{6790}\u{72B6}\u{6001}: \u{6210}\u{529F}
9054
-
9055
- ---
9056
-
9057
- **\u{6267}\u{884C}\u{539F}\u{5219}\u{FF1A}**
9058
- - \u{521B}\u{5EFA}\u{5E76}\u{6301}\u{7EED}\u{66F4}\u{65B0}TODO\u{6E05}\u{5355}
9059
- - \u{6301}\u{7EED}\u{5DE5}\u{4F5C}\u{81F3}\u{5B8C}\u{6210}
9060
- - \u{786E}\u{4FDD}\u{5206}\u{6790}\u{7684}\u{51C6}\u{786E}\u{6027}\u{548C}\u{5168}\u{9762}\u{6027}
9061
- - \u{4E25}\u{683C}\u{57FA}\u{4E8E}\u{4EFB}\u{52A1}\u{6307}\u{4EE4}\u{8FDB}\u{884C}\u{5206}\u{6790}
9062
- - \u{4E0D}\u{504F}\u{79BB}\u{4EFB}\u{52A1}\u{8303}\u{56F4}\u{FF0C}\u{8F93}\u{51FA}\u{6E05}\u{6670}\u{51C6}\u{786E}\u{7684}\u{7ED3}\u{679C}
9063
- `;
9064
8002
  return {
9065
8003
  content: [
9066
8004
  {
9067
8005
  type: "text",
9068
- text: `\u{56FE}\u{7247}\u{5185}\u{5BB9}\u{5206}\u{6790}\u{5B8C}\u{6210}
9069
-
9070
- \u{5206}\u{6790}\u{7ED3}\u{679C}\u{FF1A}
9071
- - \u{56FE}\u{7247}\u{6587}\u{4EF6}\u{FF1A}${external_path_namespaceObject.basename(validatedArgs.image_path)}
9072
- - \u{56FE}\u{7247}\u{5C3A}\u{5BF8}\u{FF1A}${result.basic_info.dimensions.width} \xd7 ${result.basic_info.dimensions.height} \u{50CF}\u{7D20}
9073
- - \u{6587}\u{4EF6}\u{5927}\u{5C0F}\u{FF1A}${formatFileSize(result.basic_info.file_size)}
9074
- - \u{5904}\u{7406}\u{65F6}\u{95F4}\u{FF1A}${result.processing_time_ms}ms
9075
-
9076
- \u{56FE}\u{7247}\u{63CF}\u{8FF0}\u{FF1A}
9077
- ${result.content.summary}
9078
-
9079
- ---
9080
-
9081
- ${systemGuidance}`
8006
+ text: result.content.summary
9082
8007
  }
9083
8008
  ]
9084
8009
  };
@@ -9125,18 +8050,6 @@ ${systemGuidance}`
9125
8050
 
9126
8051
  ${error?.message || "\u672A\u77E5\u9519\u8BEF"}`;
9127
8052
  }
9128
- function formatFileSize(bytes) {
9129
- if (0 === bytes) return "0 B";
9130
- const k = 1024;
9131
- const sizes = [
9132
- "B",
9133
- "KB",
9134
- "MB",
9135
- "GB"
9136
- ];
9137
- const i = Math.floor(Math.log(bytes) / Math.log(k));
9138
- return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;
9139
- }
9140
8053
  class ImageConversionError extends Error {
9141
8054
  code;
9142
8055
  context;
@@ -9668,7 +8581,8 @@ ${getErrorSuggestion(error.code)}
9668
8581
  RETRY_DELAY_MS: 1000
9669
8582
  };
9670
8583
  const ImageRecognitionParamsSchema = objectType({
9671
- imagePath: stringType().min(1).describe("\u56FE\u7247\u6587\u4EF6\u8DEF\u5F84")
8584
+ imagePath: stringType().min(1).describe("\u56FE\u7247\u6587\u4EF6\u8DEF\u5F84"),
8585
+ context: stringType().optional().describe("\u4E0A\u4E0B\u6587\u5185\u5BB9\uFF0C\u7528\u4E8E\u6307\u5BFC\u56FE\u7247\u5206\u6790\u7684\u65B9\u5411\u548C\u8303\u56F4")
9672
8586
  });
9673
8587
  objectType({
9674
8588
  width: numberType().positive("\u56FE\u7247\u5BBD\u5EA6\u5FC5\u987B\u4E3A\u6B63\u6570"),
@@ -10073,12 +8987,15 @@ ${getErrorSuggestion(error.code)}
10073
8987
  }
10074
8988
  }
10075
8989
  class analyzer_ImageAnalyzer {
10076
- async analyzeLongImage(imagePath, imageInfo, segmentConfig, concurrencyConfig, apiPreference = 'auto') {
8990
+ context;
8991
+ async analyzeLongImage(imagePath, imageInfo, segmentConfig, concurrencyConfig, apiPreference = 'auto', context) {
10077
8992
  logger.info("ImageAnalyzer: \u5F00\u59CB\u5206\u6790\u957F\u56FE", {
10078
8993
  imagePath,
10079
8994
  totalSegments: segmentConfig.totalSegments,
10080
- maxConcurrency: concurrencyConfig.maxConcurrency
8995
+ maxConcurrency: concurrencyConfig.maxConcurrency,
8996
+ hasContext: !!context
10081
8997
  });
8998
+ this.context = context;
10082
8999
  const startTime = Date.now();
10083
9000
  const segmentResults = [];
10084
9001
  try {
@@ -10303,7 +9220,12 @@ ${getErrorSuggestion(error.code)}
10303
9220
  return segments;
10304
9221
  }
10305
9222
  buildAnalysisPrompt(segmentInfo) {
10306
- let prompt = `\u{8BF7}\u{5BF9}\u{8FD9}\u{5F20}\u{56FE}\u{7247}\u{8FDB}\u{884C}\u{9AD8}\u{7CBE}\u{5EA6}OCR\u{6587}\u{5B57}\u{8BC6}\u{522B}\u{FF0C}\u{53EA}\u{8F93}\u{51FA}\u{56FE}\u{7247}\u{4E2D}\u{7684}\u{539F}\u{59CB}\u{6587}\u{5B57}\u{5185}\u{5BB9}\u{3002}
9223
+ let prompt = '';
9224
+ prompt = this.context ? `${this.context}
9225
+
9226
+ \u{8BF7}\u{6839}\u{636E}\u{4E0A}\u{8FF0}\u{4EFB}\u{52A1}\u{8981}\u{6C42}\u{FF0C}\u{5206}\u{6790}\u{8FD9}\u{5F20}\u{56FE}\u{7247}\u{5E76}\u{63D0}\u{4F9B}\u{76F8}\u{5173}\u{7ED3}\u{679C}\u{3002}\u{53EA}\u{8F93}\u{51FA}\u{4E0E}\u{4EFB}\u{52A1}\u{76F8}\u{5173}\u{7684}\u{5185}\u{5BB9}\u{FF0C}\u{4E0D}\u{8981}\u{6DFB}\u{52A0}\u{989D}\u{5916}\u{7684}\u{89E3}\u{91CA}\u{6216}\u{63CF}\u{8FF0}\u{3002}
9227
+
9228
+ ` : `\u{8BF7}\u{5BF9}\u{8FD9}\u{5F20}\u{56FE}\u{7247}\u{8FDB}\u{884C}\u{9AD8}\u{7CBE}\u{5EA6}OCR\u{6587}\u{5B57}\u{8BC6}\u{522B}\u{FF0C}\u{53EA}\u{8F93}\u{51FA}\u{56FE}\u{7247}\u{4E2D}\u{7684}\u{539F}\u{59CB}\u{6587}\u{5B57}\u{5185}\u{5BB9}\u{3002}
10307
9229
 
10308
9230
  \u{8981}\u{6C42}\u{FF1A}
10309
9231
  1. **\u{53EA}\u{8BC6}\u{522B}\u{6587}\u{5B57}**\u{FF1A}\u{4EC5}\u{63D0}\u{53D6}\u{56FE}\u{7247}\u{4E2D}\u{7684}\u{6240}\u{6709}\u{6587}\u{5B57}\u{5185}\u{5BB9}\u{FF0C}\u{4FDD}\u{6301}\u{539F}\u{6709}\u{7684}\u{683C}\u{5F0F}\u{3001}\u{6362}\u{884C}\u{548C}\u{7ED3}\u{6784}
@@ -10326,15 +9248,10 @@ ${getErrorSuggestion(error.code)}
10326
9248
  return prompt;
10327
9249
  }
10328
9250
  buildSystemPrompt() {
10329
- return `\u{4F60}\u{662F}\u{4E00}\u{4E2A}\u{4E13}\u{4E1A}\u{7684}OCR\u{6587}\u{5B57}\u{8BC6}\u{522B}\u{4E13}\u{5BB6}\u{FF0C}\u{4E13}\u{95E8}\u{8D1F}\u{8D23}\u{4ECE}\u{56FE}\u{7247}\u{4E2D}\u{63D0}\u{53D6}\u{6587}\u{5B57}\u{5185}\u{5BB9}\u{3002}
10330
-
10331
- \u{4F60}\u{7684}\u{4EFB}\u{52A1}\u{662F}\u{FF1A}
10332
- 1. \u{9AD8}\u{7CBE}\u{5EA6}\u{8BC6}\u{522B}\u{56FE}\u{7247}\u{4E2D}\u{7684}\u{6240}\u{6709}\u{6587}\u{5B57}\u{5185}\u{5BB9}\u{FF0C}\u{5305}\u{62EC}\u{4E2D}\u{6587}\u{3001}\u{82F1}\u{6587}\u{3001}\u{6570}\u{5B57}\u{3001}\u{7B26}\u{53F7}\u{3001}\u{6807}\u{70B9}\u{7B26}\u{53F7}\u{7B49}
10333
- 2. \u{4FDD}\u{6301}\u{6587}\u{5B57}\u{7684}\u{539F}\u{59CB}\u{683C}\u{5F0F}\u{548C}\u{6392}\u{7248}\u{7ED3}\u{6784}
10334
- 3. \u{786E}\u{4FDD}\u{8BC6}\u{522B}\u{7ED3}\u{679C}\u{7684}\u{5B8C}\u{6574}\u{6027}\u{548C}\u{51C6}\u{786E}\u{6027}
10335
- 4. \u{4E0D}\u{8981}\u{6DFB}\u{52A0}\u{4EFB}\u{4F55}\u{89E3}\u{91CA}\u{3001}\u{63CF}\u{8FF0}\u{3001}\u{5206}\u{6790}\u{6216}\u{989D}\u{5916}\u{5185}\u{5BB9}
10336
-
10337
- \u{91CD}\u{8981}\u{FF1A}\u{53EA}\u{8F93}\u{51FA}\u{56FE}\u{7247}\u{4E2D}\u{5B9E}\u{9645}\u{5B58}\u{5728}\u{7684}\u{6587}\u{5B57}\u{5185}\u{5BB9}\u{FF0C}\u{4E0D}\u{8981}\u{751F}\u{6210}\u{4EFB}\u{4F55}\u{63CF}\u{8FF0}\u{6027}\u{8BED}\u{8A00}\u{3002}`;
9251
+ return `You must interpret and analyze images strictly according to the assigned task.
9252
+ When an image placeholder is provided, your role is to parse the image content only within the scope of the user's instructions.
9253
+ Do not ignore or deviate from the task.
9254
+ Always ensure that your response reflects a clear, accurate interpretation of the image aligned with the given objective.`;
10338
9255
  }
10339
9256
  parseAIResponse(response) {
10340
9257
  let textContent = '';
@@ -10430,7 +9347,7 @@ ${getErrorSuggestion(error.code)}
10430
9347
  this.configCalculator = new ConfigCalculator();
10431
9348
  this.analyzer = new analyzer_ImageAnalyzer();
10432
9349
  }
10433
- async processImage(imagePath) {
9350
+ async processImage(imagePath, context) {
10434
9351
  const startTime = Date.now();
10435
9352
  logger.info("ImageRecognitionProcessor: \u5F00\u59CB\u5904\u7406\u56FE\u7247", {
10436
9353
  imagePath
@@ -10456,7 +9373,7 @@ ${getErrorSuggestion(error.code)}
10456
9373
  segmentHeight: segmentConfig.segmentHeight,
10457
9374
  maxConcurrency: concurrencyConfig.maxConcurrency
10458
9375
  });
10459
- const analysisResult = await this.analyzer.analyzeLongImage(imagePath, imageInfo, segmentConfig, concurrencyConfig, 'auto');
9376
+ const analysisResult = await this.analyzer.analyzeLongImage(imagePath, imageInfo, segmentConfig, concurrencyConfig, 'auto', context);
10460
9377
  const outputPath = await this.generateSingleOutputFile(imageInfo, analysisResult.segmentResults, analysisResult.summary);
10461
9378
  const totalTime = Date.now() - startTime;
10462
9379
  logger.info("\u56FE\u7247\u5904\u7406\u5B8C\u6210", {
@@ -10545,7 +9462,8 @@ ${allTextContent || "\u672A\u8BC6\u522B\u5230\u6587\u5B57\u5185\u5BB9"}
10545
9462
  name: "analyzeLongImage",
10546
9463
  description: "\u4E13\u95E8\u5904\u7406\u957F\u56FE\u7684\u5185\u5BB9\u8BC6\u522B\u667A\u80FD\u4F53\uFF0C\u652F\u6301\u5206\u6BB5\u5904\u7406\u548C\u7EFC\u5408\u5185\u5BB9\u8BC6\u522B\uFF08\u6587\u5B57+\u56FE\u50CF\u63CF\u8FF0\uFF09\uFF0C\u4EE5\u4E2D\u6587Markdown\u683C\u5F0F\u8F93\u51FA\u3002\u53EA\u9700\u63D0\u4F9B\u56FE\u7247\u8DEF\u5F84\u5373\u53EF\uFF0C\u5176\u4ED6\u53C2\u6570\u81EA\u52A8\u4F18\u5316\u3002",
10547
9464
  inputSchema: {
10548
- imagePath: stringType().min(1).describe("\u56FE\u7247\u6587\u4EF6\u8DEF\u5F84")
9465
+ imagePath: stringType().min(1).describe("\u56FE\u7247\u6587\u4EF6\u8DEF\u5F84"),
9466
+ context: stringType().optional().describe("\u4E0A\u4E0B\u6587\u5185\u5BB9\uFF0C\u7528\u4E8E\u6307\u5BFC\u56FE\u7247\u5206\u6790\u7684\u65B9\u5411\u548C\u8303\u56F4")
10549
9467
  },
10550
9468
  handler: async (args)=>{
10551
9469
  initializeProjectRoot();
@@ -10553,9 +9471,9 @@ ${allTextContent || "\u672A\u8BC6\u522B\u5230\u6587\u5B57\u5185\u5BB9"}
10553
9471
  args
10554
9472
  });
10555
9473
  try {
10556
- const { imagePath } = ImageRecognitionParamsSchema.parse(args);
9474
+ const { imagePath, context } = ImageRecognitionParamsSchema.parse(args);
10557
9475
  const processor = new ImageRecognitionProcessor();
10558
- const result = await processor.processImage(imagePath);
9476
+ const result = await processor.processImage(imagePath, context);
10559
9477
  logger.info("\u56FE\u7247\u5185\u5BB9\u8BC6\u522B\u667A\u80FD\u4F53: \u5904\u7406\u5B8C\u6210", {
10560
9478
  outputPath: result.outputPath,
10561
9479
  summary: result.summary
@@ -10926,15 +9844,13 @@ ${user_input}
10926
9844
  - \u{56F4}\u{7ED5}\u{95EE}\u{9898}\u{FF0C}\u{5FEB}\u{901F}\u{6784}\u{5EFA}\u{4E00}\u{4E2A}\u{77E5}\u{8BC6}\u{6846}\u{67B6}\u{3002}\u{786E}\u{5B9A}\u{56DE}\u{7B54}\u{5E94}\u{5305}\u{542B}\u{7684}\u{5173}\u{952E}\u{6982}\u{5FF5}\u{3001}\u{4E0A}\u{4E0B}\u{6587}\u{3001}\u{6B63}\u{53CD}\u{8BBA}\u{70B9}\u{548C}\u{6F5C}\u{5728}\u{7684}\u{5EF6}\u{4F38}\u{9886}\u{57DF}
10927
9845
  - \u{6839}\u{636E}\u{5145}\u{5206}\u{4E86}\u{89E3}\u{5230}\u{7684}\u{4FE1}\u{606F}\u{FF0C}\u{6E05}\u{6670}\u{5B8C}\u{6574}\u{7684}\u{590D}\u{8FF0}\u{7528}\u{6237}\u{9700}\u{6C42}\u{FF0C}\u{5E76}\u{7ED9}\u{51FA}\u{4E00}\u{4E2A}\u{9AD8}\u{5EA6}\u{6D53}\u{7F29}\u{7684}\u{3001}\u{7ED3}\u{8BBA}\u{6027}\u{7684}\u{6838}\u{5FC3}\u{89C2}\u{70B9}
10928
9846
 
10929
- **\u{4F7F}\u{7528}\u{5DE5}\u{5177}\u{FF1A}**
10930
- ${project_context ? `
10931
- 1. \u{4F7F}\u{7528} listDirectory \u{67E5}\u{770B}\u{9879}\u{76EE}\u{7ED3}\u{6784}\u{FF1A}\`${project_context}\`
10932
- 2. \u{4F7F}\u{7528} grepSearch \u{641C}\u{7D22}\u{76F8}\u{5173}\u{529F}\u{80FD}\u{6A21}\u{5757}\u{FF0C}\u{4E86}\u{89E3}\u{73B0}\u{6709}\u{5B9E}\u{73B0}\u{6A21}\u{5F0F}
10933
- 3. \u{4F7F}\u{7528} readFile \u{8BFB}\u{53D6}\u{5173}\u{952E}\u{914D}\u{7F6E}\u{6587}\u{4EF6}\u{FF08}package.json, tsconfig.json\u{7B49}\u{FF09}
10934
- 4. \u{5206}\u{6790}\u{6280}\u{672F}\u{6808}\u{3001}\u{4EE3}\u{7801}\u{89C4}\u{8303}\u{3001}\u{67B6}\u{6784}\u{6A21}\u{5F0F}
10935
- ` : `
10936
- 1. \u{57FA}\u{4E8E}\u{901A}\u{7528}\u{6700}\u{4F73}\u{5B9E}\u{8DF5}\u{8FDB}\u{884C}\u{9700}\u{6C42}\u{5206}\u{6790}
10937
- 2. \u{641C}\u{7D22}\u{76F8}\u{5173}\u{6280}\u{672F}\u{6587}\u{6863}\u{548C}\u{6700}\u{4F73}\u{5B9E}\u{8DF5}
9847
+ **\u{4F7F}\u{7528}\u{5DE5}\u{5177}\u{FF1A}**
9848
+ ${`
9849
+ 1. \u{4F7F}\u{7528} readFile \u{8BFB}\u{53D6}\u{9879}\u{76EE}\u{6839}\u{76EE}\u{5F55}\u{7684} CLAUDE.md \u{6587}\u{4EF6}\u{FF0C}\u{83B7}\u{53D6}\u{9879}\u{76EE}\u{67B6}\u{6784}\u{7D22}\u{5F15}
9850
+ 2. \u{57FA}\u{4E8E} CLAUDE.md \u{7D22}\u{5F15}\u{FF0C}\u{5FEB}\u{901F}\u{5B9A}\u{4F4D}\u{5230}\u{4E0E}\u{9700}\u{6C42}\u{76F8}\u{5173}\u{7684}\u{6A21}\u{5757}\u{4EE5}\u{53CA}\u{53EF}\u{4EE5}\u{4F7F}\u{7528}\u{7684}\u{7EC4}\u{4EF6}\u{6216}\u{6A21}\u{5757}
9851
+ 3. \u{4F7F}\u{7528} grepSearch \u{5728}\u{7279}\u{5B9A}\u{6A21}\u{5757}\u{76EE}\u{5F55}\u{4E0B}\u{641C}\u{7D22}\u{76F8}\u{5173}\u{529F}\u{80FD}\u{5B9E}\u{73B0}
9852
+ 4. \u{4F7F}\u{7528} readFile \u{8BFB}\u{53D6}\u{5173}\u{952E}\u{914D}\u{7F6E}\u{6587}\u{4EF6}\u{4E86}\u{89E3}\u{9879}\u{76EE}\u{8BBE}\u{7F6E}
9853
+ 5. \u{6839}\u{636E}\u{9879}\u{76EE}\u{4E2D}\u{4E0E}\u{9700}\u{6C42}\u{76F8}\u{5173}\u{7684}\u{6A21}\u{5757}\u{7EC4}\u{4EF6}\u{4E0E}\u{7528}\u{6237}\u{8F93}\u{5165}\u{7684}\u{9700}\u{6C42}\u{8FDB}\u{884C}\u{6574}\u{5408}\u{FF0C}\u{7528}\u{4E8E}\u{540E}\u{7EED}\u{65B9}\u{6848}\u{8BBE}\u{8BA1}
10938
9854
  `}
10939
9855
 
10940
9856
  ### 2. \u{573A}\u{666F}\u{8BC6}\u{522B}
@@ -10944,19 +9860,33 @@ ${project_context ? `
10944
9860
 
10945
9861
  **\u{8F93}\u{51FA}\u{FF1A}** \u{573A}\u{666F}\u{5206}\u{6790}\u{62A5}\u{544A}\u{548C}\u{4EFB}\u{52A1}\u{5206}\u{89E3}\u{6E05}\u{5355}
10946
9862
 
10947
- ### 3. \u{65B9}\u{6848}\u{8BBE}\u{8BA1}
9863
+ ### 3. \u{9879}\u{76EE}\u{7D22}\u{5F15}\u{9A71}\u{52A8}\u{5206}\u{6790}
9864
+ **\u{6838}\u{5FC3}\u{539F}\u{5219}\u{FF1A}**
9865
+ - CLAUDE.md \u{4F18}\u{5148}\u{FF1A}\u{5148}\u{8BFB}\u{7D22}\u{5F15}\u{FF0C}\u{518D}\u{5206}\u{6790}\u{4EE3}\u{7801}
9866
+ - \u{7CBE}\u{51C6}\u{5B9A}\u{4F4D}\u{FF1A}\u{57FA}\u{4E8E}\u{7D22}\u{5F15}\u{76F4}\u{63A5}\u{627E}\u{5230}\u{76F8}\u{5173}\u{6A21}\u{5757}
9867
+ - \u{67B6}\u{6784}\u{4E00}\u{81F4}\u{FF1A}\u{786E}\u{4FDD}\u{65B0}\u{529F}\u{80FD}\u{7B26}\u{5408}\u{9879}\u{76EE}\u{6574}\u{4F53}\u{8BBE}\u{8BA1}
9868
+
9869
+ **\u{5177}\u{4F53}\u{64CD}\u{4F5C}\u{FF1A}**
9870
+ - \u{8BFB}\u{53D6} CLAUDE.md \u{7406}\u{89E3}\u{9879}\u{76EE}\u{613F}\u{666F}\u{548C}\u{67B6}\u{6784}
9871
+ - \u{5B9A}\u{4F4D}\u{5230}\u{4E0E}\u{9700}\u{6C42}\u{76F8}\u{5173}\u{7684}\u{670D}\u{52A1}\u{6216}\u{7EC4}\u{4EF6}\u{6A21}\u{5757}
9872
+ - \u{5206}\u{6790}\u{73B0}\u{6709}\u{6A21}\u{5757}\u{7684}\u{5B9E}\u{73B0}\u{6A21}\u{5F0F}\u{548C}\u{63A5}\u{53E3}\u{8BBE}\u{8BA1}
9873
+ - \u{57FA}\u{4E8E}\u{73B0}\u{6709}\u{67B6}\u{6784}\u{5236}\u{5B9A}\u{6280}\u{672F}\u{65B9}\u{6848}
9874
+
9875
+ ### 4. \u{65B9}\u{6848}\u{8BBE}\u{8BA1}
10948
9876
  **\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
10949
9877
  - \u{65B9}\u{6848}\u{8BBE}\u{8BA1}\u{4F18}\u{5148}\u{590D}\u{7528}\u{73B0}\u{6709}\u{65B9}\u{6848}\u{FF0C}\u{7EC4}\u{4EF6}\u{FF0C}\u{5DE5}\u{5177}\u{65B9}\u{6CD5}\u{7B49}\u{FF0C}\u{80FD}\u{590D}\u{7528}\u{7684}\u{5C3D}\u{53EF}\u{80FD}\u{590D}\u{7528}
9878
+ - \u{5982}\u{679C}\u{662F}\u{540E}\u{7AEF}\u{670D}\u{52A1}\u{FF0C}\u{67E5}\u{8BE2}\u{5E76}\u{660E}\u{786E}\u{4F7F}\u{7528}\u{7684}\u{6570}\u{636E}\u{5E93}\u{7C7B}\u{578B}\u{FF0C}\u{4E2D}\u{95F4}\u{4EF6}\u{6280}\u{672F}\u{FF1A}kafka\u{3001}redis \u{7B49}
9879
+ - \u{5982}\u{679C}\u{662F}APP\u{7C7B}\u{578B}\u{7684}APP/SDK \u{68C0}\u{67E5}\u{5DF2}\u{6709}\u{5B9E}\u{73B0}\u{60C5}\u{51B5}\u{FF0C}\u{5E76}\u{4E86}\u{89E3}\u{4E0E}\u{5E94}\u{7528}\u{573A}\u{666F}\u{7684}\u{5339}\u{914D}\u{5EA6}\u{FF0C}\u{907F}\u{514D}\u{4E0D}\u{5FC5}\u{8981}\u{7684}\u{91CD}\u{6784}\u{FF08}\u{6216}\u{8005}\u{5F15}\u{5165}\u{65B0}SDK\u{FF0C}\u{65B0}SDK\u{4E0E}\u{73B0}\u{6709}\u{4E1A}\u{52A1}\u{9694}\u{79BB}\u{6027}\u{8F83}\u{5F3A}\u{FF09}
10950
9880
  - \u{626B}\u{63CF}\u{9879}\u{76EE}\u{4E2D}\u{4F7F}\u{7528}\u{7684}\u{6D4B}\u{8BD5}\u{6846}\u{67B6}\u{548C}\u{811A}\u{672C}\u{FF0C}\u{751F}\u{6210}\u{672C}\u{6B21}\u{9700}\u{6C42}\u{7684}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF0C}\u{5982}\u{679C}\u{4E0D}\u{5B58}\u{5728}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF0C}\u{5219}\u{7F16}\u{5199}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{5230}.aico/tests\u{4E0B}\u{9762}
10951
9881
 
10952
9882
  **\u{4F7F}\u{7528}\u{5DE5}\u{5177}\u{FF1A}** grepSearch, readFile \u{67E5}\u{627E}\u{73B0}\u{6709}\u{7EC4}\u{4EF6}\u{548C}\u{5DE5}\u{5177}
10953
9883
 
10954
- ### 4. \u{6267}\u{884C}\u{9A8C}\u{8BC1}
9884
+ ### 5. \u{6267}\u{884C}\u{9A8C}\u{8BC1}
10955
9885
  **\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
10956
9886
  - \u{6309}\u{65B9}\u{6848}\u{8BBE}\u{8BA1}\u{7684}\u{7ED3}\u{679C}\u{8F93}\u{51FA}\u{4EE3}\u{7801}
10957
9887
  - \u{5982}\u{679C}\u{6709}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{FF0C}\u{8FD0}\u{884C}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{5E76}\u{4FEE}\u{6B63}\u{76F4}\u{5230}\u{6D4B}\u{8BD5}\u{811A}\u{672C}\u{5168}\u{90E8}\u{901A}\u{8FC7}
10958
9888
 
10959
- ### 5. \u{603B}\u{7ED3}\u{53CD}\u{9988}
9889
+ ### 6. \u{603B}\u{7ED3}\u{53CD}\u{9988}
10960
9890
  **\u{6267}\u{884C}\u{6B65}\u{9AA4}\u{FF1A}**
10961
9891
  - \u{8F93}\u{51FA}\u{6700}\u{7EC8}\u{6267}\u{884C}\u{7684}\u{65B9}\u{6848}
10962
9892
  - \u{66F4}\u{65B0}TODO\u{6E05}\u{5355}
@@ -11018,7 +9948,16 @@ ${project_context ? `
11018
9948
  \`\`\`
11019
9949
 
11020
9950
  ## \u{4E0B}\u{4E00}\u{6B65}\u{64CD}\u{4F5C}
11021
- \u{5B8C}\u{6210}\u{9700}\u{6C42}\u{5206}\u{6790}\u{540E}\u{FF0C}\u{8C03}\u{7528} **requirement-aligner** \u{5DE5}\u{5177}\u{FF0C}\u{4F20}\u{5165}\u{FF1A}
9951
+ \u{5B8C}\u{6210}\u{9700}\u{6C42}\u{5206}\u{6790}\u{540E}\u{FF0C}\u{6709}\u{4E24}\u{4E2A}\u{9009}\u{62E9}\u{FF1A}
9952
+
9953
+ ### \u{9009}\u{62E9}1\u{FF1A}\u{751F}\u{6210}\u{9700}\u{6C42}\u{62A5}\u{544A}\u{FF08}\u{63A8}\u{8350}\u{7528}\u{4E8E}\u{6587}\u{6863}\u{751F}\u{6210}\u{573A}\u{666F}\u{FF09}
9954
+ \u{8C03}\u{7528} **\u{9700}\u{6C42}\u{62A5}\u{544A}\u{751F}\u{6210}\u{667A}\u{80FD}\u{4F53}** \u{5DE5}\u{5177}\u{FF0C}\u{4F20}\u{5165}\u{FF1A}
9955
+ - requirement_analysis: \u{4E0A}\u{8FF0}\u{751F}\u{6210}\u{7684}\u{7ED3}\u{6784}\u{5316}\u{9700}\u{6C42}\u{6587}\u{6863}\u{FF08}\u{5305}\u{542B}\u{9879}\u{76EE}\u{60C5}\u{51B5}\u{5206}\u{6790}\u{FF09}
9956
+ - current_project_path: \u{9879}\u{76EE}\u{8DEF}\u{5F84}
9957
+ - requirement_type: \u{9700}\u{6C42}\u{7C7B}\u{578B}\u{FF08}PC+API/APP/SDK/\u{6DF7}\u{5408}\u{FF09}
9958
+
9959
+ ### \u{9009}\u{62E9}2\u{FF1A}\u{751F}\u{6210}\u{5B9E}\u{65BD}\u{8BA1}\u{5212}\u{FF08}\u{63A8}\u{8350}\u{7528}\u{4E8E}\u{4EE3}\u{7801}\u{5B9E}\u{73B0}\u{573A}\u{666F}\u{FF09}
9960
+ \u{8C03}\u{7528} **requirement-aligner** \u{5DE5}\u{5177}\u{FF0C}\u{4F20}\u{5165}\u{FF1A}
11022
9961
  - requirement_description: \u{4E0A}\u{8FF0}\u{751F}\u{6210}\u{7684}\u{7ED3}\u{6784}\u{5316}\u{9700}\u{6C42}\u{6587}\u{6863}
11023
9962
  - user_input: \u{539F}\u{59CB}\u{7528}\u{6237}\u{9700}\u{6C42}
11024
9963
 
@@ -11048,7 +9987,10 @@ ${project_context ? `
11048
9987
  "readFile - \u8BFB\u53D6\u5173\u952E\u6587\u4EF6",
11049
9988
  "fileSearch - \u67E5\u627E\u7279\u5B9A\u6587\u4EF6"
11050
9989
  ],
11051
- next_tool: "requirement-aligner"
9990
+ next_tool_options: {
9991
+ for_documentation: "\u9700\u6C42\u62A5\u544A\u751F\u6210\u667A\u80FD\u4F53",
9992
+ for_implementation: "requirement-aligner"
9993
+ }
11052
9994
  }
11053
9995
  }, null, 2)
11054
9996
  }