intention-coding 0.4.8 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -3938,12 +3938,13 @@ var __webpack_exports__ = {};
3938
3938
  }).describe("\u8F6C\u6362\u9009\u9879")
3939
3939
  });
3940
3940
  const word2mdTool = {
3941
- name: "word\u6587\u6863\u5904\u7406\u667A\u80FD\u4F53",
3941
+ name: "read_word",
3942
3942
  description: "word\u6587\u6863\u5904\u7406\u667A\u80FD\u4F53 - \u5C06Word\u6587\u6863(.docx)\u8F6C\u6362\u4E3AMarkdown\u683C\u5F0F",
3943
3943
  inputSchema: {
3944
3944
  filePath: stringType().describe("\u9700\u8981\u89E3\u6790\u7684Word\u6587\u6863\u7684\u7EDD\u5BF9\u8DEF\u5F84")
3945
3945
  },
3946
3946
  handler: async (args)=>{
3947
+ initializeProjectRoot();
3947
3948
  const { filePath } = args;
3948
3949
  if (!filePath) throw new Error("\u6587\u4EF6\u8DEF\u5F84\u53C2\u6570\u7F3A\u5931\uFF0C\u8BF7\u63D0\u4F9B filePath \u53C2\u6570");
3949
3950
  try {
@@ -4054,7 +4055,7 @@ var __webpack_exports__ = {};
4054
4055
  }).describe("\u8F6C\u6362\u9009\u9879")
4055
4056
  });
4056
4057
  const pdf2mdTool = {
4057
- name: "pdf\u5904\u7406\u667A\u80FD\u4F53",
4058
+ name: "read_pdf",
4058
4059
  description: "pdf\u5904\u7406\u667A\u80FD\u4F53 - \u5C06PDF\u6587\u6863\u8F6C\u6362\u4E3AMarkdown\u683C\u5F0F\uFF0C\u652F\u6301\u6587\u672C\u63D0\u53D6\u548C\u683C\u5F0F\u4FDD\u7559",
4059
4060
  inputSchema: {
4060
4061
  file_path: stringType().describe("\u9700\u8981\u89E3\u6790\u7684PDF\u6587\u6863\u7684\u7EDD\u5BF9\u8DEF\u5F84"),
@@ -4072,6 +4073,7 @@ var __webpack_exports__ = {};
4072
4073
  const { file_path, options = {} } = args;
4073
4074
  const { preserve_formatting = true, extract_metadata = true } = options;
4074
4075
  try {
4076
+ initializeProjectRoot();
4075
4077
  const resolvedPath = await common_validateAndResolvePath(file_path);
4076
4078
  if (!file_path.toLowerCase().endsWith('.pdf')) throw new Error("\u6587\u4EF6\u5FC5\u987B\u662FPDF\u683C\u5F0F\uFF08.pdf\u6269\u5C55\u540D\uFF09");
4077
4079
  logger_logger.info("\u5F00\u59CB\u8BFB\u53D6PDF\u6587\u4EF6", {
@@ -4300,7 +4302,7 @@ var __webpack_exports__ = {};
4300
4302
  });
4301
4303
  const initProjectStandard = {
4302
4304
  name: "\u9879\u76EE\u5F00\u53D1\u89C4\u8303\u751F\u6210\u667A\u80FD\u4F53",
4303
- description: "\u5206\u6790\u9879\u76EE\u67B6\u6784\u5E76\u751F\u6210\u5F00\u53D1\u89C4\u8303",
4305
+ description: "\u9879\u76EE\u5F00\u53D1\u89C4\u8303\u751F\u6210\u667A\u80FD\u4F53-\u5206\u6790\u9879\u76EE\u67B6\u6784\u5E76\u751F\u6210\u5F00\u53D1\u89C4\u8303",
4304
4306
  inputSchema: {
4305
4307
  project_name: stringType().optional().describe("\u9879\u76EE\u540D\u79F0\uFF0C\u7528\u4E8E\u751F\u6210\u6587\u4EF6\u540D"),
4306
4308
  project_path: stringType().optional().describe("\u9879\u76EE\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u7528\u4E8E\u6307\u5B9A\u8981\u5206\u6790\u7684\u9879\u76EE\u76EE\u5F55"),
@@ -4723,7 +4725,7 @@ ${customRules}` : '';
4723
4725
  message: "\u5F53input_type\u4E3Atext\u65F6content\u5FC5\u586B\uFF0C\u5F53input_type\u4E3Amd_file\u65F6md_file_path\u5FC5\u586B"
4724
4726
  });
4725
4727
  const requirementAnalyzerTool = {
4726
- name: "\u9700\u6C42\u5206\u6790\u667A\u80FD\u4F53",
4728
+ name: "\u9700\u6C42\u62A5\u544A\u751F\u6210\u667A\u80FD\u4F53",
4727
4729
  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",
4728
4730
  inputSchema: {
4729
4731
  input_type: enumType([
@@ -5005,7 +5007,7 @@ ${requirementSection}
5005
5007
  'webp'
5006
5008
  ];
5007
5009
  class ImageAnalyzer {
5008
- async analyzeImage(imagePath) {
5010
+ async analyzeImage(imagePath, context) {
5009
5011
  const startTime = Date.now();
5010
5012
  try {
5011
5013
  logger_logger.info("\u5F00\u59CB\u56FE\u7247\u5185\u5BB9\u5206\u6790", {
@@ -5013,7 +5015,7 @@ ${requirementSection}
5013
5015
  });
5014
5016
  await this.validateParams(imagePath);
5015
5017
  const basicInfo = await this.getImageBasicInfo(imagePath);
5016
- const analysisContent = await this.performAIAnalysis(imagePath, basicInfo);
5018
+ const analysisContent = await this.performAIAnalysis(imagePath, basicInfo, context);
5017
5019
  const processingTime = Date.now() - startTime;
5018
5020
  if (!analysisContent) throw new ImageAnalysisError("AI\u5206\u6790\u8FD4\u56DE\u7A7A\u7ED3\u679C", types_AnalysisErrorCodes.ANALYSIS_FAILED, {
5019
5021
  params: {
@@ -5044,16 +5046,16 @@ ${requirementSection}
5044
5046
  throw error;
5045
5047
  }
5046
5048
  }
5047
- async performAIAnalysis(imagePath, basicInfo) {
5049
+ async performAIAnalysis(imagePath, basicInfo, context) {
5048
5050
  try {
5049
5051
  const imageBase64 = await this.imageToBase64(imagePath);
5050
- const prompt = this.buildAnalysisPrompt(imagePath, basicInfo);
5052
+ const prompt = this.buildAnalysisPrompt(imagePath, basicInfo, context);
5051
5053
  const aiResponse = await openai_openAIService.analyzeImage({
5052
5054
  image_base64: imageBase64,
5053
5055
  prompt: prompt,
5054
- system_prompt: "\u4F60\u662F\u4E00\u4E2A\u4E13\u4E1A\u7684\u56FE\u7247\u5206\u6790\u4E13\u5BB6\uFF0C\u8BF7\u6839\u636E\u7528\u6237\u7684\u8981\u6C42\u8BE6\u7EC6\u5206\u6790\u56FE\u7247\u5185\u5BB9\u3002"
5056
+ 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"
5055
5057
  });
5056
- const analysisContent = this.parseAIResponse(aiResponse, types_AnalysisType.GENERAL);
5058
+ const analysisContent = this.parseAIResponse(aiResponse);
5057
5059
  return analysisContent;
5058
5060
  } catch (error) {
5059
5061
  logger_logger.error("AI\u5206\u6790\u5931\u8D25", {
@@ -5067,85 +5069,27 @@ ${requirementSection}
5067
5069
  });
5068
5070
  }
5069
5071
  }
5070
- buildAnalysisPrompt(imagePath, basicInfo) {
5071
- const isLongImage = basicInfo.dimensions.height > 2 * basicInfo.dimensions.width;
5072
- const isUIDesign = this.detectUIDesign(imagePath, basicInfo);
5073
- const basePrompt = `\u{8BF7}\u{5BF9}\u{8FD9}\u{5F20}\u{56FE}\u{7247}\u{8FDB}\u{884C}\u{4E13}\u{4E1A}\u{7684}\u{5185}\u{5BB9}\u{5206}\u{6790}\u{3002}
5072
+ buildAnalysisPrompt(imagePath, basicInfo, context) {
5073
+ const basePrompt = `\u{8BF7}\u{5206}\u{6790}\u{8FD9}\u{5F20}\u{56FE}\u{7247}\u{3002}
5074
5074
 
5075
5075
  \u{56FE}\u{7247}\u{4FE1}\u{606F}\u{FF1A}
5076
5076
  - \u{6587}\u{4EF6}\u{540D}\u{FF1A}${external_path_namespaceObject.basename(imagePath)}
5077
5077
  - \u{683C}\u{5F0F}\u{FF1A}${basicInfo.format.toUpperCase()}
5078
5078
  - \u{5C3A}\u{5BF8}\u{FF1A}${basicInfo.dimensions.width} \xd7 ${basicInfo.dimensions.height} \u{50CF}\u{7D20}
5079
- - \u{6587}\u{4EF6}\u{5927}\u{5C0F}\u{FF1A}${this.formatFileSize(basicInfo.file_size)}
5080
- - \u{56FE}\u{7247}\u{7C7B}\u{578B}\u{FF1A}${isLongImage ? "\u957F\u56FE" : "\u666E\u901A\u56FE\u7247"}${isUIDesign ? "\uFF0C\u7591\u4F3CUI\u8BBE\u8BA1\u7A3F" : ''}`;
5081
- const analysisRequirements = `
5082
- \u{8BF7}\u{4ECE}\u{4EE5}\u{4E0B}\u{7EF4}\u{5EA6}\u{8FDB}\u{884C}\u{5206}\u{6790}\u{FF1A}
5083
-
5084
- 1. **\u{5185}\u{5BB9}\u{6982}\u{8FF0}**\u{FF1A}\u{7B80}\u{8981}\u{63CF}\u{8FF0}\u{56FE}\u{7247}\u{7684}\u{4E3B}\u{8981}\u{5185}\u{5BB9}\u{548C}\u{4E3B}\u{9898}
5085
- 2. **\u{89C6}\u{89C9}\u{5143}\u{7D20}**\u{FF1A}\u{8BC6}\u{522B}\u{56FE}\u{7247}\u{4E2D}\u{7684}\u{4E3B}\u{8981}\u{7269}\u{4F53}\u{3001}\u{4EBA}\u{7269}\u{3001}\u{573A}\u{666F}\u{7B49}
5086
- 3. **\u{6587}\u{5B57}\u{5185}\u{5BB9}**\u{FF1A}\u{5982}\u{679C}\u{6709}\u{6587}\u{5B57}\u{FF0C}\u{8BF7}\u{51C6}\u{786E}\u{8BC6}\u{522B}\u{5E76}\u{63D0}\u{53D6}
5087
- 4. **\u{8272}\u{5F69}\u{5206}\u{6790}**\u{FF1A}\u{63CF}\u{8FF0}\u{4E3B}\u{8981}\u{8272}\u{8C03}\u{3001}\u{914D}\u{8272}\u{65B9}\u{6848}
5088
- 5. **\u{6784}\u{56FE}\u{5206}\u{6790}**\u{FF1A}\u{5206}\u{6790}\u{5E03}\u{5C40}\u{3001}\u{6784}\u{56FE}\u{7279}\u{70B9}
5089
- 6. **\u{6280}\u{672F}\u{8D28}\u{91CF}**\u{FF1A}\u{8BC4}\u{4F30}\u{56FE}\u{7247}\u{7684}\u{6E05}\u{6670}\u{5EA6}\u{3001}\u{5149}\u{7167}\u{3001}\u{66DD}\u{5149}\u{7B49}
5090
- ${isUIDesign ? `7. **UI\u{8BBE}\u{8BA1}\u{5206}\u{6790}**\u{FF1A}\u{5206}\u{6790}\u{754C}\u{9762}\u{5E03}\u{5C40}\u{3001}\u{7EC4}\u{4EF6}\u{3001}\u{4EA4}\u{4E92}\u{5143}\u{7D20}\u{3001}\u{8BBE}\u{8BA1}\u{98CE}\u{683C}\u{7B49}` : ''}
5091
- ${isLongImage ? `8. **\u{957F}\u{56FE}\u{7279}\u{5F81}**\u{FF1A}\u{5206}\u{6790}\u{957F}\u{56FE}\u{7684}\u{5185}\u{5BB9}\u{7ED3}\u{6784}\u{3001}\u{4FE1}\u{606F}\u{5C42}\u{6B21}\u{7B49}` : ''}
5092
-
5093
- \u{8BF7}\u{63D0}\u{4F9B}\u{8BE6}\u{7EC6}\u{3001}\u{51C6}\u{786E}\u{3001}\u{4E13}\u{4E1A}\u{7684}\u{5206}\u{6790}\u{7ED3}\u{679C}\u{3002}`;
5094
- const outputFormat = `
5095
- \u{8F93}\u{51FA}\u{8981}\u{6C42}\u{FF1A}
5096
- - \u{4F7F}\u{7528}\u{4E2D}\u{6587}\u{56DE}\u{7B54}
5097
- - \u{5185}\u{5BB9}\u{8981}\u{51C6}\u{786E}\u{3001}\u{5BA2}\u{89C2}\u{3001}\u{4E13}\u{4E1A}
5098
- - \u{91CD}\u{70B9}\u{7A81}\u{51FA}\u{56FE}\u{7247}\u{7684}\u{6838}\u{5FC3}\u{4FE1}\u{606F}
5099
- - \u{5982}\u{679C}\u{662F}UI\u{8BBE}\u{8BA1}\u{7A3F}\u{FF0C}\u{91CD}\u{70B9}\u{5206}\u{6790}\u{754C}\u{9762}\u{7ED3}\u{6784}\u{548C}\u{529F}\u{80FD}
5100
- - \u{5982}\u{679C}\u{5305}\u{542B}\u{6587}\u{5B57}\u{FF0C}\u{8BF7}\u{51C6}\u{786E}\u{63D0}\u{53D6}\u{6240}\u{6709}\u{53EF}\u{89C1}\u{6587}\u{5B57}
5101
- - \u{63D0}\u{4F9B}\u{6709}\u{4EF7}\u{503C}\u{7684}\u{6D1E}\u{5BDF}\u{548C}\u{5206}\u{6790}`;
5102
- return `${basePrompt}\n${analysisRequirements}\n${outputFormat}`.trim();
5103
- }
5104
- detectUIDesign(imagePath, basicInfo) {
5105
- const fileName = external_path_namespaceObject.basename(imagePath).toLowerCase();
5106
- const uiKeywords = [
5107
- 'ui',
5108
- 'design',
5109
- 'mockup',
5110
- 'wireframe',
5111
- 'prototype',
5112
- 'interface',
5113
- 'app',
5114
- 'web',
5115
- 'mobile'
5116
- ];
5117
- const hasUIKeyword = uiKeywords.some((keyword)=>fileName.includes(keyword));
5118
- const { width, height } = basicInfo.dimensions;
5119
- const aspectRatio = width / height;
5120
- const commonUIRatios = [
5121
- {
5122
- min: 0.4,
5123
- max: 0.6
5124
- },
5125
- {
5126
- min: 1.6,
5127
- max: 2.0
5128
- },
5129
- {
5130
- min: 0.9,
5131
- max: 1.1
5132
- }
5133
- ];
5134
- const hasUIRatio = commonUIRatios.some((ratio)=>aspectRatio >= ratio.min && aspectRatio <= ratio.max);
5135
- return hasUIKeyword || hasUIRatio && (width >= 300 || height >= 300);
5136
- }
5137
- getDetailInstruction(detailLevel) {
5138
- switch(detailLevel){
5139
- case types_DetailLevel.BRIEF:
5140
- return "\u8BF7\u63D0\u4F9B\u7B80\u8981\u7684\u5206\u6790\u7ED3\u679C\uFF0C\u91CD\u70B9\u7A81\u51FA\u6700\u91CD\u8981\u7684\u4FE1\u606F\u3002";
5141
- case types_DetailLevel.COMPREHENSIVE:
5142
- return "\u8BF7\u63D0\u4F9B\u5168\u9762\u8BE6\u7EC6\u7684\u5206\u6790\u7ED3\u679C\uFF0C\u5305\u542B\u6240\u6709\u53EF\u80FD\u7684\u7EC6\u8282\u548C\u4E13\u4E1A\u89C1\u89E3\u3002";
5143
- case types_DetailLevel.DETAILED:
5144
- default:
5145
- return "\u8BF7\u63D0\u4F9B\u8BE6\u7EC6\u7684\u5206\u6790\u7ED3\u679C\uFF0C\u5305\u542B\u4E3B\u8981\u7279\u5F81\u548C\u91CD\u8981\u7EC6\u8282\u3002";
5146
- }
5079
+ - \u{6587}\u{4EF6}\u{5927}\u{5C0F}\u{FF1A}${this.formatFileSize(basicInfo.file_size)}`;
5080
+ const contextPrompt = context ? `
5081
+
5082
+ ## \u{5206}\u{6790}\u{6307}\u{4EE4}
5083
+ ${context}
5084
+
5085
+ \u{8BF7}\u{4E25}\u{683C}\u{6839}\u{636E}\u{4EE5}\u{4E0A}\u{6307}\u{4EE4}\u{8FDB}\u{884C}\u{56FE}\u{7247}\u{5206}\u{6790}\u{FF0C}\u{4E0D}\u{504F}\u{79BB}\u{4EFB}\u{52A1}\u{8303}\u{56F4}\u{FF0C}\u{4E0D}\u{6DFB}\u{52A0}\u{65E0}\u{5173}\u{4FE1}\u{606F}\u{3002}` : '';
5086
+ const strictPrompt = `
5087
+
5088
+ ## \u{5206}\u{6790}\u{8981}\u{6C42}
5089
+ \u{4F60}\u{5FC5}\u{987B}\u{4E25}\u{683C}\u{6839}\u{636E}\u{4EFB}\u{52A1}\u{6307}\u{4EE4}\u{5206}\u{6790}\u{56FE}\u{7247}\u{5185}\u{5BB9}\u{FF0C}\u{4E0D}\u{504F}\u{79BB}\u{7528}\u{6237}\u{8981}\u{6C42}\u{7684}\u{8303}\u{56F4}\u{FF0C}\u{4E0D}\u{6DFB}\u{52A0}\u{65E0}\u{5173}\u{4FE1}\u{606F}\u{3002}\u{786E}\u{4FDD}\u{5206}\u{6790}\u{7ED3}\u{679C}\u{6E05}\u{6670}\u{51C6}\u{786E}\u{FF0C}\u{53EA}\u{5305}\u{542B}\u{4E0E}\u{4EFB}\u{52A1}\u{76F8}\u{5173}\u{7684}\u{4FE1}\u{606F}\u{3002}`;
5090
+ return `${basePrompt}${contextPrompt}${strictPrompt}`.trim();
5147
5091
  }
5148
- parseAIResponse(aiResponse, analysisType) {
5092
+ parseAIResponse(aiResponse) {
5149
5093
  if (!aiResponse || 'string' != typeof aiResponse) throw new ImageAnalysisError("AI\u670D\u52A1\u8FD4\u56DE\u65E0\u6548\u54CD\u5E94", types_AnalysisErrorCodes.AI_SERVICE_ERROR, {
5150
5094
  aiResponse
5151
5095
  });
@@ -5153,73 +5097,31 @@ ${isLongImage ? `8. **\u{957F}\u{56FE}\u{7279}\u{5F81}**\u{FF1A}\u{5206}\u{6790}
5153
5097
  responseLength: aiResponse.length,
5154
5098
  responsePreview: aiResponse.substring(0, 200) + (aiResponse.length > 200 ? '...' : '')
5155
5099
  });
5100
+ const cleanedResponse = this.cleanAIResponse(aiResponse);
5156
5101
  const content = {
5157
- summary: this.extractSummary(aiResponse),
5158
- details: this.extractDetails(aiResponse),
5159
- tags: this.extractTags(aiResponse)
5102
+ summary: cleanedResponse,
5103
+ details: {
5104
+ raw_response: aiResponse
5105
+ },
5106
+ tags: []
5160
5107
  };
5161
- content.objects = this.extractObjects(aiResponse);
5162
- content.text_content = this.extractTextContent(aiResponse);
5163
- content.scene_info = this.extractSceneInfo(aiResponse);
5164
- content.people_info = this.extractPeopleInfo(aiResponse);
5165
- content.technical_info = this.extractTechnicalInfo(aiResponse);
5166
- content.ui_design_info = this.extractUIDesignInfo(aiResponse);
5167
- content.requirement_info = this.extractRequirementInfo(aiResponse);
5168
5108
  logger_logger.debug("\u5185\u5BB9\u89E3\u6790\u7ED3\u679C", {
5169
- summaryLength: content.summary.length,
5170
- tagsCount: content.tags?.length || 0,
5171
- objectsCount: content.objects?.length || 0,
5172
- textContentCount: content.text_content?.length || 0,
5173
- hasSceneInfo: !!content.scene_info,
5174
- hasTechnicalInfo: !!content.technical_info,
5175
- hasUIDesignInfo: !!content.ui_design_info
5109
+ summaryLength: content.summary.length
5176
5110
  });
5177
5111
  return content;
5178
5112
  }
5179
- extractSummary(response) {
5180
- const summaryPatterns = [
5181
- /(?:内容概述|概述|主要内容|图片描述)[::]\s*(.*?)(?=\n\n|\n[0-9]|\n[一二三四五六七八九十]|\n[*-]|$)/s,
5182
- /^(.*?)(?=\n\n|\n[0-9]|\n[一二三四五六七八九十]|\n[*-])/s
5113
+ cleanAIResponse(response) {
5114
+ let cleaned = response.trim();
5115
+ const patternsToRemove = [
5116
+ /^(?:好的|明白了|根据您的要求|根据分析|根据图片内容)[,,::]\s*/i,
5117
+ /(?:以下是|下面是对|分析结果如下|内容如下)[::]\s*/i,
5118
+ /\n(?:总结|结论|综上所述)[::]\s*/i
5183
5119
  ];
5184
- for (const pattern of summaryPatterns){
5185
- const match = response.match(pattern);
5186
- if (match && match[1]) {
5187
- const summary = match[1].trim();
5188
- if (summary.length > 20) return summary;
5189
- }
5190
- }
5191
- const firstParagraph = response.split('\n\n')[0] || response.split('\n')[0] || response;
5192
- return firstParagraph.substring(0, 200).trim() + (firstParagraph.length > 200 ? '...' : '');
5193
- }
5194
- extractDetails(response) {
5195
- const details = {};
5196
- const sections = response.split(/\n(?=[0-9]+\.|[一二三四五六七八九十]+\.|[*-]|\*\*)/);
5197
- sections.forEach((section, index)=>{
5198
- const trimmedSection = section.trim();
5199
- if (trimmedSection.length > 10) {
5200
- const title = this.extractSectionTitle(trimmedSection);
5201
- if (title) details[title] = trimmedSection;
5202
- else details[`section_${index + 1}`] = trimmedSection;
5203
- }
5120
+ patternsToRemove.forEach((pattern)=>{
5121
+ cleaned = cleaned.replace(pattern, '');
5204
5122
  });
5205
- return details;
5206
- }
5207
- extractSectionTitle(section) {
5208
- const titlePatterns = [
5209
- /^\*\*(.*?)\*\*/,
5210
- /^[0-9]+\.\s*(.*?)[::]/,
5211
- /^[一二三四五六七八九十]+\.\s*(.*?)[::]/,
5212
- /^[*-]\s*(.*?)[::]/,
5213
- /^(.*?)[::]/
5214
- ];
5215
- for (const pattern of titlePatterns){
5216
- const match = section.match(pattern);
5217
- if (match && match[1]) {
5218
- const title = match[1].trim();
5219
- if (title.length > 0 && title.length < 50) return title;
5220
- }
5221
- }
5222
- return null;
5123
+ cleaned = cleaned.replace(/\n{3,}/g, '\n\n').trim();
5124
+ return cleaned;
5223
5125
  }
5224
5126
  async getImageBasicInfo(imagePath) {
5225
5127
  try {
@@ -5296,132 +5198,6 @@ ${isLongImage ? `8. **\u{957F}\u{56FE}\u{7279}\u{5F81}**\u{FF1A}\u{5206}\u{6790}
5296
5198
  if (content.text_content && content.text_content.length > 0) score += 0.1;
5297
5199
  return Math.min(score, 1.0);
5298
5200
  }
5299
- extractTags(text) {
5300
- const tags = [];
5301
- const tagPatterns = [
5302
- /标签[::]\s*([^\n]+)/gi,
5303
- /关键词[::]\s*([^\n]+)/gi,
5304
- /tags[::]\s*([^\n]+)/gi
5305
- ];
5306
- for (const pattern of tagPatterns){
5307
- const matches = text.matchAll(pattern);
5308
- for (const match of matches){
5309
- const tagString = match[1];
5310
- const extractedTags = tagString.split(/[,,、]/).map((tag)=>tag.trim()).filter(Boolean);
5311
- tags.push(...extractedTags);
5312
- }
5313
- }
5314
- const conceptPatterns = [
5315
- /(?:这是|这张图片是|图片显示|可以看到).*?([\u4e00-\u9fff]{2,8})/g,
5316
- /(?:主要|主要内容|核心|重点).*?([\u4e00-\u9fff]{2,8})/g,
5317
- /(?:包含|含有|具有).*?([\u4e00-\u9fff]{2,8})/g
5318
- ];
5319
- for (const pattern of conceptPatterns){
5320
- const matches = text.matchAll(pattern);
5321
- for (const match of matches){
5322
- const concept = match[1].trim();
5323
- if (concept && concept.length >= 2 && concept.length <= 8) tags.push(concept);
5324
- }
5325
- }
5326
- const typeKeywords = [
5327
- "\u7167\u7247",
5328
- "\u56FE\u7247",
5329
- "\u622A\u56FE",
5330
- "\u8BBE\u8BA1\u7A3F",
5331
- 'UI',
5332
- "\u754C\u9762",
5333
- "\u7F51\u9875",
5334
- "\u5E94\u7528",
5335
- 'APP',
5336
- "\u98CE\u666F",
5337
- "\u4EBA\u7269",
5338
- "\u5EFA\u7B51",
5339
- "\u52A8\u7269",
5340
- "\u690D\u7269",
5341
- "\u98DF\u7269",
5342
- "\u8F66\u8F86",
5343
- "\u6587\u6863",
5344
- "\u56FE\u8868",
5345
- "\u624B\u673A",
5346
- "\u7535\u8111",
5347
- "\u5E73\u677F",
5348
- "\u5C4F\u5E55",
5349
- "\u6309\u94AE",
5350
- "\u83DC\u5355",
5351
- "\u5BFC\u822A",
5352
- "\u8868\u5355"
5353
- ];
5354
- for (const keyword of typeKeywords)if (text.includes(keyword)) tags.push(keyword);
5355
- const uniqueTags = [
5356
- ...new Set(tags)
5357
- ];
5358
- return uniqueTags.slice(0, 10);
5359
- }
5360
- extractObjects(text) {
5361
- return [];
5362
- }
5363
- extractTextContent(text) {
5364
- const textContents = [];
5365
- const textPatterns = [
5366
- /(?:文字内容|文本内容|识别.*?文字|包含.*?文字)[::]\s*(.*?)(?=\n\n|\n[0-9]|\n[一二三四五六七八九十]|\n[*-]|$)/gs,
5367
- /(?:标题|文字|文本).*?[""]([^""]+)[""].*?/g,
5368
- /(?:写着|显示|标注|文字为)[::]?\s*[""]?([^""。\n]+)[""]?/g,
5369
- /[""]([^""]{5,50})[""](?=.*?(?:文字|文本|标题|内容))/g
5370
- ];
5371
- for (const pattern of textPatterns){
5372
- let match;
5373
- while(null !== (match = pattern.exec(text))){
5374
- const extractedText = match[1]?.trim();
5375
- if (extractedText && extractedText.length > 2) textContents.push({
5376
- text: extractedText,
5377
- confidence: 0.8,
5378
- language: this.detectLanguage(extractedText)
5379
- });
5380
- }
5381
- }
5382
- const uniqueTexts = textContents.filter((item, index, self)=>index === self.findIndex((t)=>t.text === item.text));
5383
- return uniqueTexts.slice(0, 10);
5384
- }
5385
- detectLanguage(text) {
5386
- const chineseChars = (text.match(/[\u4e00-\u9fff]/g) || []).length;
5387
- const totalChars = text.length;
5388
- if (chineseChars / totalChars > 0.3) return "\u4E2D\u6587";
5389
- if (/^[a-zA-Z\s\d.,!?;:'"()-]+$/.test(text)) return "\u82F1\u6587";
5390
- return "\u6DF7\u5408";
5391
- }
5392
- extractSceneInfo(text) {
5393
- return {};
5394
- }
5395
- extractPeopleInfo(text) {
5396
- return [];
5397
- }
5398
- extractTechnicalInfo(text) {
5399
- return {};
5400
- }
5401
- extractUIDesignInfo(text) {
5402
- const uiInfo = {
5403
- layout_type: this.extractValue(text, /布局类型[::]\s*([^\n]+)/i) || "\u672A\u8BC6\u522B",
5404
- components: this.extractUIComponents(text),
5405
- color_scheme: this.extractColorScheme(text),
5406
- typography: this.extractTypography(text),
5407
- navigation: this.extractNavigation(text),
5408
- responsive_design: this.extractBoolean(text, /响应式|自适应/i),
5409
- design_patterns: this.extractList(text, /设计模式[::]\s*([^\n]+)/i),
5410
- accessibility_features: this.extractList(text, /可访问性[::]\s*([^\n]+)/i)
5411
- };
5412
- return uiInfo;
5413
- }
5414
- extractRequirementInfo(text) {
5415
- const reqInfo = {
5416
- functional_requirements: this.extractFunctionalRequirements(text),
5417
- non_functional_requirements: this.extractNonFunctionalRequirements(text),
5418
- user_stories: this.extractUserStories(text),
5419
- business_rules: this.extractList(text, /业务规则[::]\s*([^\n]+)/i),
5420
- constraints: this.extractList(text, /约束条件[::]\s*([^\n]+)/i),
5421
- assumptions: this.extractList(text, /假设条件[::]\s*([^\n]+)/i)
5422
- };
5423
- return reqInfo;
5424
- }
5425
5201
  extractValue(text, pattern) {
5426
5202
  const match = text.match(pattern);
5427
5203
  return match ? match[1].trim() : null;
@@ -5558,77 +5334,41 @@ ${isLongImage ? `8. **\u{957F}\u{56FE}\u{7279}\u{5F81}**\u{FF1A}\u{5206}\u{6790}
5558
5334
  }
5559
5335
  const ImageAnalysisParamsSchema = objectType({
5560
5336
  image_path: stringType().min(1).describe("\u56FE\u7247\u6587\u4EF6\u8DEF\u5F84"),
5561
- output_path: stringType().optional().describe("\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84\uFF0C\u4E0D\u6307\u5B9A\u5219\u8F93\u51FA\u5230\u5F53\u524D\u5DE5\u7A0B\u7684.aico/image-recognition\u76EE\u5F55")
5337
+ context: stringType().optional().describe("\u4E0A\u4E0B\u6587\u5185\u5BB9\uFF0C\u7528\u4E8E\u6307\u5BFC\u56FE\u7247\u5206\u6790\u7684\u65B9\u5411\u548C\u8303\u56F4")
5562
5338
  });
5563
5339
  const read_imageTool = {
5564
5340
  name: "read_image",
5565
- description: "\u4E13\u4E1A\u56FE\u7247\u5185\u5BB9\u5206\u6790\u5DE5\u5177\uFF0C\u652F\u6301\u901A\u7528\u5206\u6790\u3001\u7269\u4F53\u8BC6\u522B\u3001\u6587\u5B57\u8BC6\u522B\u3001\u573A\u666F\u5206\u6790\u3001\u4EBA\u7269\u5206\u6790\u3001\u6280\u672F\u5206\u6790\u3001UI\u8BBE\u8BA1\u7A3F\u5206\u6790\u3001\u9700\u6C42\u8BC6\u522B\u7B49\u591A\u79CD\u6A21\u5F0F\uFF0C\u7279\u522B\u64C5\u957FUI\u8BBE\u8BA1\u7A3F\u7684\u7ED3\u6784\u5206\u6790\u548C\u9875\u9762\u9700\u6C42\u63D0\u53D6\u3002\u5206\u6790\u7ED3\u679C\u5C06\u4FDD\u5B58\u5230\u5F53\u524D\u5DE5\u7A0B\u7684.aico/image-recognition\u76EE\u5F55\u3002",
5341
+ description: "\u4E13\u4E1A\u56FE\u7247\u5185\u5BB9\u5206\u6790\u5DE5\u5177\uFF0C\u63D0\u4F9B\u7CBE\u786E\u7684\u56FE\u7247\u5185\u5BB9\u8BC6\u522B\u3002\u6839\u636E\u7528\u6237\u8F93\u5165\u7684\u4E0A\u4E0B\u6587\u4FE1\u606F\u548C\u56FE\u7247\u5185\u5BB9\uFF0C\u8FDB\u884C\u4E25\u683C\u57FA\u4E8E\u4EFB\u52A1\u6307\u4EE4\u7684\u5206\u6790\uFF0C\u4E0D\u504F\u79BB\u4EFB\u52A1\u8303\u56F4\uFF0C\u8F93\u51FA\u6E05\u6670\u51C6\u786E\u7684\u5206\u6790\u7ED3\u679C\u3002",
5566
5342
  inputSchema: {
5567
5343
  image_path: stringType().min(1).describe("\u56FE\u7247\u6587\u4EF6\u8DEF\u5F84"),
5568
- output_path: stringType().optional().describe("\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84\uFF0C\u4E0D\u6307\u5B9A\u5219\u8F93\u51FA\u5230\u5F53\u524D\u5DE5\u7A0B\u7684.aico/image-recognition\u76EE\u5F55")
5344
+ context: stringType().optional().describe("\u4E0A\u4E0B\u6587\u5185\u5BB9\uFF0C\u7528\u4E8E\u6307\u5BFC\u56FE\u7247\u5206\u6790\u7684\u65B9\u5411\u548C\u8303\u56F4")
5569
5345
  },
5570
5346
  handler: async (args)=>{
5571
- initializeProjectRoot();
5572
5347
  const analyzer = new ImageAnalyzer();
5573
5348
  try {
5574
5349
  logger_logger.info("\u56FE\u7247\u5185\u5BB9\u7406\u89E3\u667A\u80FD\u4F53\u5F00\u59CB\u6267\u884C", {
5575
5350
  imagePath: args.image_path
5576
5351
  });
5577
5352
  const validatedArgs = ImageAnalysisParamsSchema.parse(args);
5578
- const result = await analyzer.analyzeImage(validatedArgs.image_path);
5579
- const outputPath = await generateOutputFile(result, validatedArgs.image_path, validatedArgs.output_path);
5580
- formatAnalysisResult(result, validatedArgs);
5581
- logger_logger.info("\u56FE\u7247\u5185\u5BB9\u7406\u89E3\u667A\u80FD\u4F53\u6267\u884C\u5B8C\u6210", {
5582
- imagePath: validatedArgs.image_path,
5583
- outputPath,
5584
- confidenceScore: result.confidence_score,
5585
- processingTime: result.processing_time_ms
5586
- });
5353
+ const result = await analyzer.analyzeImage(validatedArgs.image_path, validatedArgs.context);
5587
5354
  return {
5588
5355
  content: [
5589
5356
  {
5590
5357
  type: "text",
5591
- text: `\u{2705} **\u{56FE}\u{7247}\u{5185}\u{5BB9}\u{7406}\u{89E3}\u{5B8C}\u{6210}**
5592
-
5593
- ## \u{1F4CA} \u{5206}\u{6790}\u{7ED3}\u{679C}
5594
-
5595
- - **\u{56FE}\u{7247}\u{6587}\u{4EF6}**: ${external_path_namespaceObject.basename(validatedArgs.image_path)}
5596
- - **\u{56FE}\u{7247}\u{5C3A}\u{5BF8}**: ${result.basic_info.dimensions.width} \xd7 ${result.basic_info.dimensions.height} \u{50CF}\u{7D20}
5597
- - **\u{6587}\u{4EF6}\u{5927}\u{5C0F}**: ${formatFileSize(result.basic_info.file_size)}
5598
- - **\u{5206}\u{6790}\u{7C7B}\u{578B}**: ${getAnalysisTypeLabel(result.analysis_type)}
5599
- - **\u{8BE6}\u{7EC6}\u{7A0B}\u{5EA6}**: ${getDetailLevelLabel(result.detail_level)}
5600
-
5601
- ## \u{1F4C1} \u{8F93}\u{51FA}\u{6587}\u{4EF6}
5602
-
5603
- - **\u{5206}\u{6790}\u{62A5}\u{544A}**: ${outputPath}
5604
- - **\u{6587}\u{4EF6}\u{5927}\u{5C0F}**: ${await getFileSize(outputPath)}
5358
+ text: `\u{56FE}\u{7247}\u{5185}\u{5BB9}\u{5206}\u{6790}\u{5B8C}\u{6210}
5605
5359
 
5606
- ## \u{23F1}\u{FE0F} \u{6027}\u{80FD}\u{7EDF}\u{8BA1}
5607
-
5608
- - **\u{5904}\u{7406}\u{65F6}\u{95F4}**: ${result.processing_time_ms}ms
5609
- - **\u{7F6E}\u{4FE1}\u{5EA6}**: ${result.confidence_score ? (100 * result.confidence_score).toFixed(1) + '%' : "\u672A\u8BC4\u4F30"}
5610
-
5611
- ## \u{1F4CB} \u{5185}\u{5BB9}\u{6982}\u{8FF0}
5360
+ \u{5206}\u{6790}\u{7ED3}\u{679C}\u{FF1A}
5361
+ - \u{56FE}\u{7247}\u{6587}\u{4EF6}\u{FF1A}${external_path_namespaceObject.basename(validatedArgs.image_path)}
5362
+ - \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}
5363
+ - \u{6587}\u{4EF6}\u{5927}\u{5C0F}\u{FF1A}${formatFileSize(result.basic_info.file_size)}
5364
+ - \u{5904}\u{7406}\u{65F6}\u{95F4}\u{FF1A}${result.processing_time_ms}ms
5612
5365
 
5366
+ \u{56FE}\u{7247}\u{63CF}\u{8FF0}\u{FF1A}
5613
5367
  ${result.content.summary}
5614
5368
 
5615
- ${result.content.tags && result.content.tags.length > 0 ? `
5616
- ## \u{1F3F7}\u{FE0F} \u{5173}\u{952E}\u{6807}\u{7B7E}
5617
- ${result.content.tags.map((tag)=>`\`${tag}\``).join(' ')}
5618
- ` : ''}
5619
-
5620
- \u{5206}\u{6790}\u{62A5}\u{544A}\u{5DF2}\u{4FDD}\u{5B58}\u{FF0C}\u{53EF}\u{4EE5}\u{67E5}\u{770B}\u{8BE6}\u{7EC6}\u{5185}\u{5BB9}\u{3002}`
5369
+ ${result.content.tags && result.content.tags.length > 0 ? `\u{5173}\u{952E}\u{6807}\u{7B7E}\u{FF1A}${result.content.tags.map((tag)=>`\`${tag}\``).join(' ')}` : ''}`
5621
5370
  }
5622
- ],
5623
- metadata: {
5624
- actions: [
5625
- {
5626
- type: "open_file",
5627
- path: outputPath,
5628
- description: "\u67E5\u770B\u5206\u6790\u62A5\u544A"
5629
- }
5630
- ]
5631
- }
5371
+ ]
5632
5372
  };
5633
5373
  } catch (error) {
5634
5374
  logger_logger.error("\u56FE\u7247\u5185\u5BB9\u7406\u89E3\u667A\u80FD\u4F53\u6267\u884C\u5931\u8D25", {
@@ -5656,369 +5396,6 @@ ${result.content.tags.map((tag)=>`\`${tag}\``).join(' ')}
5656
5396
  }
5657
5397
  }
5658
5398
  };
5659
- async function generateOutputFile(result, imagePath, outputPath) {
5660
- try {
5661
- let finalOutputPath;
5662
- if (outputPath) {
5663
- finalOutputPath = outputPath;
5664
- const outputDir = external_path_namespaceObject.dirname(finalOutputPath);
5665
- await promises_namespaceObject.mkdir(outputDir, {
5666
- recursive: true
5667
- });
5668
- } else {
5669
- const baseDir = config_getStorageDir();
5670
- const dateDir = new Date().toISOString().split('T')[0];
5671
- const outputDirectory = external_path_namespaceObject.join(baseDir, 'image-recognition', dateDir);
5672
- await promises_namespaceObject.mkdir(outputDirectory, {
5673
- recursive: true
5674
- });
5675
- const timestamp = new Date().toTimeString().slice(0, 8).replace(/:/g, '');
5676
- const imageBaseName = external_path_namespaceObject.basename(imagePath, external_path_namespaceObject.extname(imagePath));
5677
- const fileName = `${imageBaseName}_analysis_${timestamp}.md`;
5678
- finalOutputPath = external_path_namespaceObject.join(outputDirectory, fileName);
5679
- }
5680
- const reportContent = generateAnalysisReport(result, imagePath);
5681
- await promises_namespaceObject.writeFile(finalOutputPath, reportContent, 'utf8');
5682
- logger_logger.info("\u5206\u6790\u62A5\u544A\u5DF2\u751F\u6210", {
5683
- outputPath: finalOutputPath,
5684
- fileSize: await getFileSize(finalOutputPath)
5685
- });
5686
- return finalOutputPath;
5687
- } catch (error) {
5688
- logger_logger.error("\u751F\u6210\u8F93\u51FA\u6587\u4EF6\u5931\u8D25", {
5689
- error,
5690
- imagePath,
5691
- outputPath
5692
- });
5693
- throw new ImageAnalysisError(`\u{751F}\u{6210}\u{8F93}\u{51FA}\u{6587}\u{4EF6}\u{5931}\u{8D25}: ${error instanceof Error ? error.message : "\u672A\u77E5\u9519\u8BEF"}`, types_AnalysisErrorCodes.ANALYSIS_FAILED, {
5694
- imagePath,
5695
- outputPath,
5696
- error
5697
- });
5698
- }
5699
- }
5700
- function generateAnalysisReport(result, imagePath) {
5701
- const { basic_info, content, processing_time_ms, confidence_score, analysis_type, detail_level } = result;
5702
- return `# \u{1F50D} \u{56FE}\u{7247}\u{5185}\u{5BB9}\u{7406}\u{89E3}\u{5206}\u{6790}\u{62A5}\u{544A}
5703
-
5704
- ## \u{1F4CA} \u{57FA}\u{672C}\u{4FE1}\u{606F}
5705
-
5706
- - **\u{56FE}\u{7247}\u{8DEF}\u{5F84}**: \`${basic_info.path}\`
5707
- - **\u{539F}\u{59CB}\u{6587}\u{4EF6}**: \`${external_path_namespaceObject.basename(imagePath)}\`
5708
- - **\u{56FE}\u{7247}\u{683C}\u{5F0F}**: ${basic_info.format.toUpperCase()}
5709
- - **\u{56FE}\u{7247}\u{5C3A}\u{5BF8}**: ${basic_info.dimensions.width} \xd7 ${basic_info.dimensions.height} \u{50CF}\u{7D20}
5710
- - **\u{6587}\u{4EF6}\u{5927}\u{5C0F}**: ${formatFileSize(basic_info.file_size)}
5711
- - **\u{989C}\u{8272}\u{7A7A}\u{95F4}**: ${basic_info.color_space || "\u672A\u77E5"}
5712
- - **\u{900F}\u{660E}\u{901A}\u{9053}**: ${basic_info.has_alpha ? "\u662F" : "\u5426"}
5713
-
5714
- ## \u{1F3AF} \u{5206}\u{6790}\u{914D}\u{7F6E}
5715
-
5716
- - **\u{5206}\u{6790}\u{7C7B}\u{578B}**: ${getAnalysisTypeLabel(analysis_type)}
5717
- - **\u{8BE6}\u{7EC6}\u{7A0B}\u{5EA6}**: ${getDetailLevelLabel(detail_level)}
5718
- - **\u{5206}\u{6790}\u{8BED}\u{8A00}**: \u{4E2D}\u{6587}
5719
- - **\u{5904}\u{7406}\u{65F6}\u{95F4}**: ${processing_time_ms}ms
5720
- - **\u{7F6E}\u{4FE1}\u{5EA6}**: ${confidence_score ? (100 * confidence_score).toFixed(1) + "%" : "\u672A\u8BC4\u4F30"}
5721
-
5722
- ## \u{1F4DD} \u{5206}\u{6790}\u{7ED3}\u{679C}
5723
-
5724
- ### \u{5185}\u{5BB9}\u{6982}\u{8FF0}
5725
- ${content.summary}
5726
-
5727
- ${content.tags && content.tags.length > 0 ? `
5728
- ### \u{1F3F7}\u{FE0F} \u{5173}\u{952E}\u{6807}\u{7B7E}
5729
- ${content.tags.map((tag)=>`\`${tag}\``).join(" ")}
5730
- ` : ""}
5731
-
5732
- ${content.objects && content.objects.length > 0 ? `
5733
- ### \u{1F3AF} \u{8BC6}\u{522B}\u{7269}\u{4F53}
5734
- ${content.objects.map((obj, index)=>`
5735
- ${index + 1}. **${obj.name}** (\u{7F6E}\u{4FE1}\u{5EA6}: ${(100 * obj.confidence).toFixed(1)}%)
5736
- ${obj.attributes ? Object.entries(obj.attributes).map(([key, value])=>`- ${key}: ${value}`).join("\n ") : ""}
5737
- `).join("")}
5738
- ` : ""}
5739
-
5740
- ${content.text_content && content.text_content.length > 0 ? `
5741
- ### \u{1F4C4} \u{6587}\u{5B57}\u{5185}\u{5BB9}
5742
- ${content.text_content.map((text, index)=>`
5743
- ${index + 1}. "${text.text}" (\u{7F6E}\u{4FE1}\u{5EA6}: ${(100 * text.confidence).toFixed(1)}%)
5744
- ${text.language ? `- \u{8BED}\u{8A00}: ${text.language}` : ""}
5745
- `).join("")}
5746
- ` : ""}
5747
-
5748
- ${content.scene_info ? `
5749
- ### \u{1F30D} \u{573A}\u{666F}\u{4FE1}\u{606F}
5750
- - **\u{5730}\u{70B9}\u{7C7B}\u{578B}**: ${content.scene_info.location_type || "\u672A\u8BC6\u522B"}
5751
- - **\u{73AF}\u{5883}**: ${content.scene_info.environment || "\u672A\u8BC6\u522B"}
5752
- - **\u{5149}\u{7167}**: ${content.scene_info.lighting || "\u672A\u8BC6\u522B"}
5753
- ${content.scene_info.weather ? `- **\u{5929}\u{6C14}**: ${content.scene_info.weather}` : ""}
5754
- ${content.scene_info.time_of_day ? `- **\u{65F6}\u{95F4}**: ${content.scene_info.time_of_day}` : ""}
5755
- ${content.scene_info.mood ? `- **\u{6C1B}\u{56F4}**: ${content.scene_info.mood}` : ""}
5756
- ` : ""}
5757
-
5758
- ${content.people_info && content.people_info.length > 0 ? `
5759
- ### \u{1F465} \u{4EBA}\u{7269}\u{4FE1}\u{606F}
5760
- ${content.people_info.map((person, index)=>`
5761
- ${index + 1}. **\u{4EBA}\u{7269}${index + 1}**
5762
- - \u{6570}\u{91CF}: ${person.count}
5763
- ${person.age_range ? `- \u{5E74}\u{9F84}: ${person.age_range}` : ""}
5764
- ${person.gender ? `- \u{6027}\u{522B}: ${person.gender}` : ""}
5765
- ${person.emotions ? `- \u{60C5}\u{7EEA}: ${person.emotions.join(", ")}` : ""}
5766
- ${person.activities ? `- \u{6D3B}\u{52A8}: ${person.activities.join(", ")}` : ""}
5767
- ${person.clothing ? `- \u{670D}\u{88C5}: ${person.clothing.join(", ")}` : ""}
5768
- `).join("")}
5769
- ` : ""}
5770
-
5771
- ${content.technical_info ? `
5772
- ### \u{1F527} \u{6280}\u{672F}\u{5206}\u{6790}
5773
- #### \u{8272}\u{5F69}\u{5206}\u{6790}
5774
- - **\u{4E3B}\u{8272}\u{8C03}**: ${content.technical_info.color_analysis?.dominant_colors?.join(", ") || "\u672A\u5206\u6790"}
5775
- - **\u{8272}\u{5F69}\u{642D}\u{914D}**: ${content.technical_info.color_analysis?.color_palette?.join(", ") || "\u672A\u5206\u6790"}
5776
- - **\u{4EAE}\u{5EA6}**: ${content.technical_info.color_analysis?.brightness || "\u672A\u5206\u6790"}
5777
- - **\u{5BF9}\u{6BD4}\u{5EA6}**: ${content.technical_info.color_analysis?.contrast || "\u672A\u5206\u6790"}
5778
-
5779
- #### \u{6784}\u{56FE}\u{5206}\u{6790}
5780
- - **\u{4E09}\u{5206}\u{6CD5}\u{5219}**: ${content.technical_info.composition?.rule_of_thirds ? "\u7B26\u5408" : "\u4E0D\u7B26\u5408"}
5781
- - **\u{5BF9}\u{79F0}\u{6027}**: ${content.technical_info.composition?.symmetry ? "\u5BF9\u79F0" : "\u975E\u5BF9\u79F0"}
5782
- - **\u{5F15}\u{5BFC}\u{7EBF}**: ${content.technical_info.composition?.leading_lines ? "\u5B58\u5728" : "\u4E0D\u5B58\u5728"}
5783
-
5784
- #### \u{8D28}\u{91CF}\u{8BC4}\u{4F30}
5785
- - **\u{6E05}\u{6670}\u{5EA6}**: ${content.technical_info.quality_metrics?.sharpness || "\u672A\u8BC4\u4F30"}
5786
- - **\u{566A}\u{70B9}\u{6C34}\u{5E73}**: ${content.technical_info.quality_metrics?.noise_level || "\u672A\u8BC4\u4F30"}
5787
- - **\u{66DD}\u{5149}**: ${content.technical_info.quality_metrics?.exposure || "\u672A\u8BC4\u4F30"}
5788
- ` : ""}
5789
-
5790
- ${content.ui_design_info ? `
5791
- ### \u{1F3A8} UI\u{8BBE}\u{8BA1}\u{5206}\u{6790}
5792
- #### \u{5E03}\u{5C40}\u{7ED3}\u{6784}
5793
- - **\u{5E03}\u{5C40}\u{7C7B}\u{578B}**: ${content.ui_design_info.layout_type}
5794
- - **\u{54CD}\u{5E94}\u{5F0F}\u{8BBE}\u{8BA1}**: ${content.ui_design_info.responsive_design ? "\u652F\u6301" : "\u4E0D\u652F\u6301"}
5795
-
5796
- #### \u{7EC4}\u{4EF6}\u{5206}\u{6790}
5797
- ${content.ui_design_info.components && content.ui_design_info.components.length > 0 ? content.ui_design_info.components.map((comp, index)=>`${index + 1}. **${comp.type}**: ${comp.name}`).join("\n") : "\u672A\u8BC6\u522B\u5230\u5177\u4F53\u7EC4\u4EF6"}
5798
-
5799
- #### \u{8272}\u{5F69}\u{65B9}\u{6848}
5800
- - **\u{4E3B}\u{8272}\u{8C03}**: ${content.ui_design_info.color_scheme?.primary_colors?.join(", ") || "\u672A\u8BC6\u522B"}
5801
- - **\u{8F85}\u{52A9}\u{8272}**: ${content.ui_design_info.color_scheme?.secondary_colors?.join(", ") || "\u672A\u8BC6\u522B"}
5802
- - **\u{80CC}\u{666F}\u{8272}**: ${content.ui_design_info.color_scheme?.background_colors?.join(", ") || "\u672A\u8BC6\u522B"}
5803
-
5804
- #### \u{5BFC}\u{822A}\u{8BBE}\u{8BA1}
5805
- - **\u{5BFC}\u{822A}\u{7C7B}\u{578B}**: ${content.ui_design_info.navigation?.type || "\u672A\u8BC6\u522B"}
5806
- - **\u{5BFC}\u{822A}\u{5143}\u{7D20}**: ${content.ui_design_info.navigation?.elements?.join(", ") || "\u672A\u8BC6\u522B"}
5807
-
5808
- #### \u{8BBE}\u{8BA1}\u{6A21}\u{5F0F}
5809
- ${content.ui_design_info.design_patterns && content.ui_design_info.design_patterns.length > 0 ? content.ui_design_info.design_patterns.map((pattern)=>`- ${pattern}`).join("\n") : "- \u672A\u8BC6\u522B\u5230\u7279\u5B9A\u8BBE\u8BA1\u6A21\u5F0F"}
5810
- ` : ""}
5811
-
5812
- ${content.requirement_info ? `
5813
- ### \u{1F4CB} \u{9700}\u{6C42}\u{5206}\u{6790}
5814
- #### \u{529F}\u{80FD}\u{9700}\u{6C42}
5815
- ${content.requirement_info.functional_requirements && content.requirement_info.functional_requirements.length > 0 ? content.requirement_info.functional_requirements.map((req, index)=>`
5816
- ${index + 1}. **${req.title}** (\u{4F18}\u{5148}\u{7EA7}: ${req.priority})
5817
- - \u{63CF}\u{8FF0}: ${req.description}
5818
- - \u{7C7B}\u{522B}: ${req.category}`).join("") : "\u672A\u8BC6\u522B\u5230\u5177\u4F53\u529F\u80FD\u9700\u6C42"}
5819
-
5820
- #### \u{975E}\u{529F}\u{80FD}\u{9700}\u{6C42}
5821
- ${content.requirement_info.non_functional_requirements && content.requirement_info.non_functional_requirements.length > 0 ? content.requirement_info.non_functional_requirements.map((req, index)=>`
5822
- ${index + 1}. **${req.type}**: ${req.description}`).join("") : "\u672A\u8BC6\u522B\u5230\u975E\u529F\u80FD\u9700\u6C42"}
5823
-
5824
- #### \u{7528}\u{6237}\u{6545}\u{4E8B}
5825
- ${content.requirement_info.user_stories && content.requirement_info.user_stories.length > 0 ? content.requirement_info.user_stories.map((story, index)=>`
5826
- ${index + 1}. \u{4F5C}\u{4E3A} **${story.as_a}**\u{FF0C}\u{6211}\u{5E0C}\u{671B} **${story.i_want}**\u{FF0C}\u{4EE5}\u{4FBF} **${story.so_that}** (\u{4F18}\u{5148}\u{7EA7}: ${story.priority})`).join("") : "\u672A\u8BC6\u522B\u5230\u7528\u6237\u6545\u4E8B"}
5827
-
5828
- #### \u{4E1A}\u{52A1}\u{89C4}\u{5219}
5829
- ${content.requirement_info.business_rules && content.requirement_info.business_rules.length > 0 ? content.requirement_info.business_rules.map((rule)=>`- ${rule}`).join("\n") : "- \u672A\u8BC6\u522B\u5230\u4E1A\u52A1\u89C4\u5219"}
5830
- ` : ""}
5831
-
5832
- ${Object.keys(content.details).length > 0 ? `
5833
- ### \u{1F4CB} \u{8BE6}\u{7EC6}\u{4FE1}\u{606F}
5834
- ${Object.entries(content.details).map(([key, value])=>`
5835
- **${key}**: ${"object" == typeof value ? JSON.stringify(value, null, 2) : value}
5836
- `).join("")}
5837
- ` : ""}
5838
-
5839
- ## \u{1F4A1} \u{5206}\u{6790}\u{603B}\u{7ED3}
5840
-
5841
- \u{57FA}\u{4E8E}${getAnalysisTypeLabel(analysis_type)}\u{FF0C}\u{56FE}\u{7247}\u{5185}\u{5BB9}\u{7406}\u{89E3}\u{5B8C}\u{6210}\u{3002}
5842
- ${confidence_score && confidence_score > 0.8 ? "\u5206\u6790\u7ED3\u679C\u7F6E\u4FE1\u5EA6\u8F83\u9AD8\uFF0C\u53EF\u4FE1\u5EA6\u826F\u597D\u3002" : ""}
5843
-
5844
- **\u{5206}\u{6790}\u{5B8C}\u{6210}\u{65F6}\u{95F4}**: ${new Date().toLocaleString('zh-CN')}
5845
- **\u{62A5}\u{544A}\u{751F}\u{6210}\u{65F6}\u{95F4}**: ${new Date().toLocaleString('zh-CN')}
5846
-
5847
- ---
5848
-
5849
- *\u{62A5}\u{544A}\u{7531}\u{56FE}\u{7247}\u{5185}\u{5BB9}\u{7406}\u{89E3}\u{667A}\u{80FD}\u{4F53}\u{81EA}\u{52A8}\u{751F}\u{6210}*
5850
- `.trim();
5851
- }
5852
- async function getFileSize(filePath) {
5853
- try {
5854
- const stats = await promises_namespaceObject.stat(filePath);
5855
- return formatFileSize(stats.size);
5856
- } catch {
5857
- return "\u672A\u77E5";
5858
- }
5859
- }
5860
- function formatAnalysisResult(result, args) {
5861
- const basic_info = result?.basic_info || {
5862
- path: args.image_path,
5863
- format: 'unknown',
5864
- dimensions: {
5865
- width: 0,
5866
- height: 0
5867
- },
5868
- file_size: 0,
5869
- color_space: 'unknown',
5870
- has_alpha: false
5871
- };
5872
- const content = result?.content || {
5873
- summary: "\u5206\u6790\u7ED3\u679C\u4E0D\u53EF\u7528",
5874
- details: {},
5875
- tags: []
5876
- };
5877
- const processing_time_ms = result?.processing_time_ms || 0;
5878
- const confidence_score = result?.confidence_score || 0;
5879
- return `
5880
- # \u{1F50D} \u{56FE}\u{7247}\u{5185}\u{5BB9}\u{7406}\u{89E3}\u{5206}\u{6790}\u{62A5}\u{544A}
5881
-
5882
- ## \u{1F4CA} \u{57FA}\u{672C}\u{4FE1}\u{606F}
5883
- - **\u{56FE}\u{7247}\u{8DEF}\u{5F84}**: \`${basic_info.path}\`
5884
- - **\u{56FE}\u{7247}\u{683C}\u{5F0F}**: ${basic_info.format.toUpperCase()}
5885
- - **\u{56FE}\u{7247}\u{5C3A}\u{5BF8}**: ${basic_info.dimensions.width} \xd7 ${basic_info.dimensions.height}
5886
- - **\u{6587}\u{4EF6}\u{5927}\u{5C0F}**: ${formatFileSize(basic_info.file_size)}
5887
- - **\u{989C}\u{8272}\u{7A7A}\u{95F4}**: ${basic_info.color_space || "\u672A\u77E5"}
5888
- - **\u{900F}\u{660E}\u{901A}\u{9053}**: ${basic_info.has_alpha ? "\u662F" : "\u5426"}
5889
-
5890
- ## \u{1F3AF} \u{5206}\u{6790}\u{914D}\u{7F6E}
5891
- - **\u{5206}\u{6790}\u{7C7B}\u{578B}**: \u{901A}\u{7528}\u{5206}\u{6790}
5892
- - **\u{8BE6}\u{7EC6}\u{7A0B}\u{5EA6}**: \u{8BE6}\u{7EC6}
5893
- - **\u{5206}\u{6790}\u{8BED}\u{8A00}**: \u{4E2D}\u{6587}
5894
- - **\u{5904}\u{7406}\u{65F6}\u{95F4}**: ${processing_time_ms}ms
5895
- - **\u{7F6E}\u{4FE1}\u{5EA6}**: ${confidence_score ? (100 * confidence_score).toFixed(1) + "%" : "\u672A\u77E5"}
5896
-
5897
- ## \u{1F4DD} \u{5206}\u{6790}\u{7ED3}\u{679C}
5898
-
5899
- ### \u{5185}\u{5BB9}\u{6982}\u{8FF0}
5900
- ${content.summary}
5901
-
5902
- ${content.tags && content.tags.length > 0 ? `
5903
- ### \u{1F3F7}\u{FE0F} \u{5173}\u{952E}\u{6807}\u{7B7E}
5904
- ${content.tags.map((tag)=>`\`${tag}\``).join(" ")}
5905
- ` : ""}
5906
-
5907
- ${content.objects && content.objects.length > 0 ? `
5908
- ### \u{1F3AF} \u{8BC6}\u{522B}\u{7269}\u{4F53}
5909
- ${content.objects.map((obj, index)=>`
5910
- ${index + 1}. **${obj.name}** (\u{7F6E}\u{4FE1}\u{5EA6}: ${(100 * obj.confidence).toFixed(1)}%)
5911
- ${obj.attributes ? Object.entries(obj.attributes).map(([key, value])=>`- ${key}: ${value}`).join("\n ") : ""}
5912
- `).join("")}
5913
- ` : ""}
5914
-
5915
- ${content.text_content && content.text_content.length > 0 ? `
5916
- ### \u{1F4C4} \u{6587}\u{5B57}\u{5185}\u{5BB9}
5917
- ${content.text_content.map((text, index)=>`
5918
- ${index + 1}. "${text.text}" (\u{7F6E}\u{4FE1}\u{5EA6}: ${(100 * text.confidence).toFixed(1)}%)
5919
- ${text.language ? `- \u{8BED}\u{8A00}: ${text.language}` : ""}
5920
- `).join("")}
5921
- ` : ""}
5922
-
5923
- ${content.scene_info ? `
5924
- ### \u{1F30D} \u{573A}\u{666F}\u{4FE1}\u{606F}
5925
- - **\u{5730}\u{70B9}\u{7C7B}\u{578B}**: ${content.scene_info.location_type || "\u672A\u8BC6\u522B"}
5926
- - **\u{73AF}\u{5883}**: ${content.scene_info.environment || "\u672A\u8BC6\u522B"}
5927
- - **\u{5149}\u{7167}**: ${content.scene_info.lighting || "\u672A\u8BC6\u522B"}
5928
- ${content.scene_info.weather ? `- **\u{5929}\u{6C14}**: ${content.scene_info.weather}` : ""}
5929
- ${content.scene_info.time_of_day ? `- **\u{65F6}\u{95F4}**: ${content.scene_info.time_of_day}` : ""}
5930
- ${content.scene_info.mood ? `- **\u{6C1B}\u{56F4}**: ${content.scene_info.mood}` : ""}
5931
- ` : ""}
5932
-
5933
- ${content.people_info && content.people_info.length > 0 ? `
5934
- ### \u{1F465} \u{4EBA}\u{7269}\u{4FE1}\u{606F}
5935
- ${content.people_info.map((person, index)=>`
5936
- ${index + 1}. **\u{4EBA}\u{7269}${index + 1}**
5937
- - \u{6570}\u{91CF}: ${person.count}
5938
- ${person.age_range ? `- \u{5E74}\u{9F84}: ${person.age_range}` : ""}
5939
- ${person.gender ? `- \u{6027}\u{522B}: ${person.gender}` : ""}
5940
- ${person.emotions ? `- \u{60C5}\u{7EEA}: ${person.emotions.join(", ")}` : ""}
5941
- ${person.activities ? `- \u{6D3B}\u{52A8}: ${person.activities.join(", ")}` : ""}
5942
- ${person.clothing ? `- \u{670D}\u{88C5}: ${person.clothing.join(", ")}` : ""}
5943
- `).join("")}
5944
- ` : ""}
5945
-
5946
- ${content.technical_info ? `
5947
- ### \u{1F527} \u{6280}\u{672F}\u{5206}\u{6790}
5948
- #### \u{8272}\u{5F69}\u{5206}\u{6790}
5949
- - **\u{4E3B}\u{8272}\u{8C03}**: ${content.technical_info.color_analysis?.dominant_colors?.join(", ") || "\u672A\u5206\u6790"}
5950
- - **\u{8272}\u{5F69}\u{642D}\u{914D}**: ${content.technical_info.color_analysis?.color_palette?.join(", ") || "\u672A\u5206\u6790"}
5951
- - **\u{4EAE}\u{5EA6}**: ${content.technical_info.color_analysis?.brightness || "\u672A\u5206\u6790"}
5952
- - **\u{5BF9}\u{6BD4}\u{5EA6}**: ${content.technical_info.color_analysis?.contrast || "\u672A\u5206\u6790"}
5953
-
5954
- #### \u{6784}\u{56FE}\u{5206}\u{6790}
5955
- - **\u{4E09}\u{5206}\u{6CD5}\u{5219}**: ${content.technical_info.composition?.rule_of_thirds ? "\u7B26\u5408" : "\u4E0D\u7B26\u5408"}
5956
- - **\u{5BF9}\u{79F0}\u{6027}**: ${content.technical_info.composition?.symmetry ? "\u5BF9\u79F0" : "\u975E\u5BF9\u79F0"}
5957
- - **\u{5F15}\u{5BFC}\u{7EBF}**: ${content.technical_info.composition?.leading_lines ? "\u5B58\u5728" : "\u4E0D\u5B58\u5728"}
5958
-
5959
- #### \u{8D28}\u{91CF}\u{8BC4}\u{4F30}
5960
- - **\u{6E05}\u{6670}\u{5EA6}**: ${content.technical_info.quality_metrics?.sharpness || "\u672A\u8BC4\u4F30"}
5961
- - **\u{566A}\u{70B9}\u{6C34}\u{5E73}**: ${content.technical_info.quality_metrics?.noise_level || "\u672A\u8BC4\u4F30"}
5962
- - **\u{66DD}\u{5149}**: ${content.technical_info.quality_metrics?.exposure || "\u672A\u8BC4\u4F30"}
5963
- ` : ""}
5964
-
5965
- ${content.ui_design_info ? `
5966
- ### \u{1F3A8} UI\u{8BBE}\u{8BA1}\u{5206}\u{6790}
5967
- #### \u{5E03}\u{5C40}\u{7ED3}\u{6784}
5968
- - **\u{5E03}\u{5C40}\u{7C7B}\u{578B}**: ${content.ui_design_info.layout_type}
5969
- - **\u{54CD}\u{5E94}\u{5F0F}\u{8BBE}\u{8BA1}**: ${content.ui_design_info.responsive_design ? "\u652F\u6301" : "\u4E0D\u652F\u6301"}
5970
-
5971
- #### \u{7EC4}\u{4EF6}\u{5206}\u{6790}
5972
- ${content.ui_design_info.components && content.ui_design_info.components.length > 0 ? content.ui_design_info.components.map((comp, index)=>`${index + 1}. **${comp.type}**: ${comp.name}`).join("\n") : "\u672A\u8BC6\u522B\u5230\u5177\u4F53\u7EC4\u4EF6"}
5973
-
5974
- #### \u{8272}\u{5F69}\u{65B9}\u{6848}
5975
- - **\u{4E3B}\u{8272}\u{8C03}**: ${content.ui_design_info.color_scheme?.primary_colors?.join(", ") || "\u672A\u8BC6\u522B"}
5976
- - **\u{8F85}\u{52A9}\u{8272}**: ${content.ui_design_info.color_scheme?.secondary_colors?.join(", ") || "\u672A\u8BC6\u522B"}
5977
- - **\u{80CC}\u{666F}\u{8272}**: ${content.ui_design_info.color_scheme?.background_colors?.join(", ") || "\u672A\u8BC6\u522B"}
5978
-
5979
- #### \u{5BFC}\u{822A}\u{8BBE}\u{8BA1}
5980
- - **\u{5BFC}\u{822A}\u{7C7B}\u{578B}**: ${content.ui_design_info.navigation?.type || "\u672A\u8BC6\u522B"}
5981
- - **\u{5BFC}\u{822A}\u{5143}\u{7D20}**: ${content.ui_design_info.navigation?.elements?.join(", ") || "\u672A\u8BC6\u522B"}
5982
-
5983
- #### \u{8BBE}\u{8BA1}\u{6A21}\u{5F0F}
5984
- ${content.ui_design_info.design_patterns && content.ui_design_info.design_patterns.length > 0 ? content.ui_design_info.design_patterns.map((pattern)=>`- ${pattern}`).join("\n") : "- \u672A\u8BC6\u522B\u5230\u7279\u5B9A\u8BBE\u8BA1\u6A21\u5F0F"}
5985
- ` : ""}
5986
-
5987
- ${content.requirement_info ? `
5988
- ### \u{1F4CB} \u{9700}\u{6C42}\u{5206}\u{6790}
5989
- #### \u{529F}\u{80FD}\u{9700}\u{6C42}
5990
- ${content.requirement_info.functional_requirements && content.requirement_info.functional_requirements.length > 0 ? content.requirement_info.functional_requirements.map((req, index)=>`
5991
- ${index + 1}. **${req.title}** (\u{4F18}\u{5148}\u{7EA7}: ${req.priority})
5992
- - \u{63CF}\u{8FF0}: ${req.description}
5993
- - \u{7C7B}\u{522B}: ${req.category}`).join("") : "\u672A\u8BC6\u522B\u5230\u5177\u4F53\u529F\u80FD\u9700\u6C42"}
5994
-
5995
- #### \u{975E}\u{529F}\u{80FD}\u{9700}\u{6C42}
5996
- ${content.requirement_info.non_functional_requirements && content.requirement_info.non_functional_requirements.length > 0 ? content.requirement_info.non_functional_requirements.map((req, index)=>`
5997
- ${index + 1}. **${req.type}**: ${req.description}`).join("") : "\u672A\u8BC6\u522B\u5230\u975E\u529F\u80FD\u9700\u6C42"}
5998
-
5999
- #### \u{7528}\u{6237}\u{6545}\u{4E8B}
6000
- ${content.requirement_info.user_stories && content.requirement_info.user_stories.length > 0 ? content.requirement_info.user_stories.map((story, index)=>`
6001
- ${index + 1}. \u{4F5C}\u{4E3A} **${story.as_a}**\u{FF0C}\u{6211}\u{5E0C}\u{671B} **${story.i_want}**\u{FF0C}\u{4EE5}\u{4FBF} **${story.so_that}** (\u{4F18}\u{5148}\u{7EA7}: ${story.priority})`).join("") : "\u672A\u8BC6\u522B\u5230\u7528\u6237\u6545\u4E8B"}
6002
-
6003
- #### \u{4E1A}\u{52A1}\u{89C4}\u{5219}
6004
- ${content.requirement_info.business_rules && content.requirement_info.business_rules.length > 0 ? content.requirement_info.business_rules.map((rule)=>`- ${rule}`).join("\n") : "- \u672A\u8BC6\u522B\u5230\u4E1A\u52A1\u89C4\u5219"}
6005
- ` : ""}
6006
-
6007
- ${Object.keys(content.details).length > 0 ? `
6008
- ### \u{1F4CB} \u{8BE6}\u{7EC6}\u{4FE1}\u{606F}
6009
- ${Object.entries(content.details).map(([key, value])=>`
6010
- **${key}**: ${"object" == typeof value ? JSON.stringify(value, null, 2) : value}
6011
- `).join("")}
6012
- ` : ""}
6013
-
6014
- ## \u{1F4A1} \u{5206}\u{6790}\u{603B}\u{7ED3}
6015
-
6016
- \u{57FA}\u{4E8E}\u{901A}\u{7528}\u{5206}\u{6790}\u{FF0C}\u{56FE}\u{7247}\u{5185}\u{5BB9}\u{7406}\u{89E3}\u{5B8C}\u{6210}\u{3002}
6017
- ${confidence_score && confidence_score > 0.8 ? "\u5206\u6790\u7ED3\u679C\u7F6E\u4FE1\u5EA6\u8F83\u9AD8\uFF0C\u53EF\u4FE1\u5EA6\u826F\u597D\u3002" : ""}
6018
-
6019
- **\u{5206}\u{6790}\u{5B8C}\u{6210}\u{65F6}\u{95F4}**: ${new Date().toISOString()}
6020
- `.trim();
6021
- }
6022
5399
  function formatErrorResponse(error) {
6023
5400
  const errorMessages = {
6024
5401
  [types_AnalysisErrorCodes.INVALID_IMAGE_PATH]: "\u65E0\u6548\u7684\u56FE\u7247\u8DEF\u5F84",
@@ -6083,28 +5460,6 @@ ${getErrorSuggestion(error.code)}
6083
5460
  const i = Math.floor(Math.log(bytes) / Math.log(k));
6084
5461
  return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;
6085
5462
  }
6086
- function getAnalysisTypeLabel(type) {
6087
- const labels = {
6088
- general: "\u901A\u7528\u5206\u6790",
6089
- objects: "\u7269\u4F53\u8BC6\u522B",
6090
- text: "\u6587\u5B57\u8BC6\u522B",
6091
- scene: "\u573A\u666F\u5206\u6790",
6092
- people: "\u4EBA\u7269\u5206\u6790",
6093
- technical: "\u6280\u672F\u5206\u6790",
6094
- ui_design: "UI\u8BBE\u8BA1\u7A3F\u5206\u6790",
6095
- requirement: "\u9700\u6C42\u8BC6\u522B\u5206\u6790",
6096
- custom: "\u81EA\u5B9A\u4E49\u5206\u6790"
6097
- };
6098
- return labels[type] || type;
6099
- }
6100
- function getDetailLevelLabel(level) {
6101
- const labels = {
6102
- brief: "\u7B80\u8981",
6103
- detailed: "\u8BE6\u7EC6",
6104
- comprehensive: "\u5168\u9762"
6105
- };
6106
- return labels[level] || level;
6107
- }
6108
5463
  function getErrorSuggestion(errorCode) {
6109
5464
  const suggestions = {
6110
5465
  [types_AnalysisErrorCodes.INVALID_IMAGE_PATH]: "\u8BF7\u68C0\u67E5\u56FE\u7247\u8DEF\u5F84\u662F\u5426\u6B63\u786E",
@@ -6406,6 +5761,7 @@ ${getErrorSuggestion(error.code)}
6406
5761
  output_directory: stringType().optional().describe("\u8F93\u51FA\u76EE\u5F55\uFF0C\u4E0D\u6307\u5B9A\u5219\u5728\u539F\u6587\u4EF6\u76EE\u5F55\u751F\u6210")
6407
5762
  },
6408
5763
  handler: async (args)=>{
5764
+ initializeProjectRoot();
6409
5765
  const converter = new ImageConverter();
6410
5766
  try {
6411
5767
  logger_logger.info("\u56FE\u7247\u683C\u5F0F\u8F6C\u6362\u667A\u80FD\u4F53\u5F00\u59CB\u6267\u884C", {
@@ -7907,12 +7263,13 @@ ${allTextContent || "\u672A\u8BC6\u522B\u5230\u6587\u5B57\u5185\u5BB9"}
7907
7263
  }
7908
7264
  }
7909
7265
  const imageRecognitionAgentTool = {
7910
- name: "\u957F\u56FE\u5185\u5BB9\u8BC6\u522B\u667A\u80FD\u4F53",
7266
+ name: "analyzeLongImage",
7911
7267
  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",
7912
7268
  inputSchema: {
7913
7269
  imagePath: stringType().min(1).describe("\u56FE\u7247\u6587\u4EF6\u8DEF\u5F84")
7914
7270
  },
7915
7271
  handler: async (args)=>{
7272
+ initializeProjectRoot();
7916
7273
  logger_logger.info("\u56FE\u7247\u5185\u5BB9\u8BC6\u522B\u667A\u80FD\u4F53: \u5F00\u59CB\u5904\u7406", {
7917
7274
  args
7918
7275
  });
@@ -7,7 +7,7 @@ export declare class ImageAnalyzer {
7
7
  /**
8
8
  * 分析图片内容
9
9
  */
10
- analyzeImage(imagePath: string): Promise<AnalysisResult>;
10
+ analyzeImage(imagePath: string, context?: string): Promise<AnalysisResult>;
11
11
  /**
12
12
  * 执行AI分析
13
13
  */
@@ -16,30 +16,14 @@ export declare class ImageAnalyzer {
16
16
  * 构建分析prompt
17
17
  */
18
18
  private buildAnalysisPrompt;
19
- /**
20
- * 检测是否为UI设计稿
21
- */
22
- private detectUIDesign;
23
- /**
24
- * 获取详细程度指令
25
- */
26
- private getDetailInstruction;
27
19
  /**
28
20
  * 解析AI响应
29
21
  */
30
22
  private parseAIResponse;
31
23
  /**
32
- * 提取内容概述
33
- */
34
- private extractSummary;
35
- /**
36
- * 提取详细信息
37
- */
38
- private extractDetails;
39
- /**
40
- * 提取章节标题
24
+ * 清理AI响应内容
41
25
  */
42
- private extractSectionTitle;
26
+ private cleanAIResponse;
43
27
  /**
44
28
  * 获取图片基本信息
45
29
  */
@@ -56,18 +40,6 @@ export declare class ImageAnalyzer {
56
40
  * 计算置信度分数
57
41
  */
58
42
  private calculateConfidenceScore;
59
- private extractTags;
60
- private extractObjects;
61
- private extractTextContent;
62
- /**
63
- * 检测语言
64
- */
65
- private detectLanguage;
66
- private extractSceneInfo;
67
- private extractPeopleInfo;
68
- private extractTechnicalInfo;
69
- private extractUIDesignInfo;
70
- private extractRequirementInfo;
71
43
  private extractValue;
72
44
  private extractBoolean;
73
45
  private extractList;
@@ -1 +1 @@
1
- {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../../src/services/image-analysis/analyzer.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,cAAc,EAQf,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,qBAAa,aAAa;IACxB;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAmD9D;;OAEG;YACW,iBAAiB;IAiC/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuC3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAyBtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAY5B;;OAEG;IACH,OAAO,CAAC,eAAe;IA4CvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAsBtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAqBtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAsB3B;;OAEG;YACW,iBAAiB;IAyB/B;;OAEG;YACW,aAAa;IAsC3B;;OAEG;YACW,cAAc;IA0B5B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAchC,OAAO,CAAC,WAAW;IAuDnB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,kBAAkB;IAiC1B;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,sBAAsB;IAe9B,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,6BAA6B;IA2BrC,OAAO,CAAC,gCAAgC;IAqBxC,OAAO,CAAC,kBAAkB;IAwB1B,OAAO,CAAC,cAAc;CASvB"}
1
+ {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../../src/services/image-analysis/analyzer.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,cAAc,EAQf,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,qBAAa,aAAa;IACxB;;OAEG;IACG,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAmDhF;;OAEG;YACW,iBAAiB;IAkC/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwB3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAgCvB;;OAEG;IACH,OAAO,CAAC,eAAe;IAqBvB;;OAEG;YACW,iBAAiB;IAyB/B;;OAEG;YACW,aAAa;IAsC3B;;OAEG;YACW,cAAc;IA0B5B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAahC,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,mBAAmB;IA2B3B,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,6BAA6B;IA2BrC,OAAO,CAAC,gCAAgC;IAqBxC,OAAO,CAAC,kBAAkB;IAwB1B,OAAO,CAAC,cAAc;CASvB"}
@@ -1,13 +1,13 @@
1
1
  import { z } from "zod";
2
2
  declare const ImageAnalysisParamsSchema: z.ZodObject<{
3
3
  image_path: z.ZodString;
4
- output_path: z.ZodOptional<z.ZodString>;
4
+ context: z.ZodOptional<z.ZodString>;
5
5
  }, "strip", z.ZodTypeAny, {
6
6
  image_path: string;
7
- output_path?: string | undefined;
7
+ context?: string | undefined;
8
8
  }, {
9
9
  image_path: string;
10
- output_path?: string | undefined;
10
+ context?: string | undefined;
11
11
  }>;
12
12
  export type ImageAnalysisToolParams = z.infer<typeof ImageAnalysisParamsSchema>;
13
13
  /**
@@ -19,23 +19,16 @@ export declare const read_imageTool: {
19
19
  description: string;
20
20
  inputSchema: {
21
21
  image_path: z.ZodString;
22
- output_path: z.ZodOptional<z.ZodString>;
22
+ context: z.ZodOptional<z.ZodString>;
23
23
  };
24
24
  handler: (args: {
25
25
  image_path: string;
26
- output_path?: string;
26
+ context?: string;
27
27
  }) => Promise<{
28
28
  content: {
29
29
  type: string;
30
30
  text: string;
31
31
  }[];
32
- metadata: {
33
- actions: {
34
- type: string;
35
- path: string;
36
- description: string;
37
- }[];
38
- };
39
32
  isError?: undefined;
40
33
  } | {
41
34
  content: {
@@ -43,7 +36,6 @@ export declare const read_imageTool: {
43
36
  text: string;
44
37
  }[];
45
38
  isError: boolean;
46
- metadata?: undefined;
47
39
  }>;
48
40
  };
49
41
  export declare const imageAnalysisTool: {
@@ -51,23 +43,16 @@ export declare const imageAnalysisTool: {
51
43
  description: string;
52
44
  inputSchema: {
53
45
  image_path: z.ZodString;
54
- output_path: z.ZodOptional<z.ZodString>;
46
+ context: z.ZodOptional<z.ZodString>;
55
47
  };
56
48
  handler: (args: {
57
49
  image_path: string;
58
- output_path?: string;
50
+ context?: string;
59
51
  }) => Promise<{
60
52
  content: {
61
53
  type: string;
62
54
  text: string;
63
55
  }[];
64
- metadata: {
65
- actions: {
66
- type: string;
67
- path: string;
68
- description: string;
69
- }[];
70
- };
71
56
  isError?: undefined;
72
57
  } | {
73
58
  content: {
@@ -75,7 +60,6 @@ export declare const imageAnalysisTool: {
75
60
  text: string;
76
61
  }[];
77
62
  isError: boolean;
78
- metadata?: undefined;
79
63
  }>;
80
64
  };
81
65
  export { ImageAnalyzer } from "./analyzer";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/image-analysis/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,QAAA,MAAM,yBAAyB;;;;;;;;;EAI3B,CAAC;AAEL,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAEhF;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;;;oBASH;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;CA6FnE,CAAC;AAGF,eAAO,MAAM,iBAAiB;;;;;;;oBAhGN;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;CAgGrB,CAAC;AAsmBhD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,YAAY,EACV,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,cAAc,GACf,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,WAAW,GACZ,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/image-analysis/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,QAAA,MAAM,yBAAyB;;;;;;;;;EAI3B,CAAC;AAEL,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAEhF;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;;;oBASH;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;CAqD/D,CAAC;AAGF,eAAO,MAAM,iBAAiB;;;;;;;oBAxDN;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;CAwDjB,CAAC;AA4GhD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,YAAY,EACV,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,cAAc,GACf,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,WAAW,GACZ,MAAM,SAAS,CAAC"}
@@ -4,6 +4,7 @@
4
4
  export interface ImageAnalysisParams {
5
5
  image_path: string;
6
6
  output_path?: string;
7
+ context?: string;
7
8
  }
8
9
  export declare enum AnalysisType {
9
10
  GENERAL = "general",// 通用分析
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/image-analysis/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/image-analysis/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/image-converter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,QAAA,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;EAuB/B,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAC7C,OAAO,2BAA2B,CACnC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;oBA6BP,GAAG;;;;;;;;;;;;;CAqD1B,CAAC;AAsMF,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/image-converter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,QAAA,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;EAuB/B,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAC7C,OAAO,2BAA2B,CACnC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;oBA6BP,GAAG;;;;;;;;;;;;;CAwD1B,CAAC;AAoMF,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EACV,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/image-recognition-agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;;;;;oBAMd,GAAG;;;;;;;;;;;;;CAwD1B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/image-recognition-agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB;;;GAGG;AACH,eAAO,MAAM,yBAAyB;;;;;;oBAMd,GAAG;;;;;;;;;;;;;CA2D1B,CAAC"}
@@ -22,10 +22,10 @@ export declare const IntegratedGeneratorParams: z.ZodObject<{
22
22
  programming_language: string;
23
23
  generation_type: "full_project" | "module_only" | "feature_only";
24
24
  include_examples: boolean;
25
- business_rules?: string[] | undefined;
26
25
  framework?: string | undefined;
27
26
  architecture_pattern?: "microservices" | "monolithic" | "layered" | "event-driven" | undefined;
28
27
  custom_context?: string | undefined;
28
+ business_rules?: string[] | undefined;
29
29
  technical_requirements?: string | undefined;
30
30
  }, {
31
31
  project_name: string;
@@ -33,13 +33,13 @@ export declare const IntegratedGeneratorParams: z.ZodObject<{
33
33
  user_story: string;
34
34
  acceptance_criteria: string[];
35
35
  programming_language: string;
36
- business_rules?: string[] | undefined;
37
36
  include_tests?: boolean | undefined;
38
37
  framework?: string | undefined;
39
38
  architecture_pattern?: "microservices" | "monolithic" | "layered" | "event-driven" | undefined;
40
39
  generation_type?: "full_project" | "module_only" | "feature_only" | undefined;
41
40
  include_examples?: boolean | undefined;
42
41
  custom_context?: string | undefined;
42
+ business_rules?: string[] | undefined;
43
43
  technical_requirements?: string | undefined;
44
44
  }>;
45
45
  export interface IntegratedGeneratorParams {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/pdf2md/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;oBAWG,GAAG;;;;;;;;;;;;;CAmJ5B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/pdf2md/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;oBAWG,GAAG;;;;;;;;;;;;;CAsJ5B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/world2md/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAO9B,CAAC;AAEH,MAAM,WAAW,aAAa;IAC1B,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,WAAW;;;;;;oBAME,GAAG;;;;;;;;;;;;;CA2H5B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/world2md/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAO9B,CAAC;AAEH,MAAM,WAAW,aAAa;IAC1B,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,WAAW;;;;;;oBAME,GAAG;;;;;;;;;;;;;CA8H5B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "intention-coding",
3
- "version": "0.4.8",
3
+ "version": "0.5.0",
4
4
  "description": "软件工程化的需求分析,功能设计,代码编写,测试运行和发布部署",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@10.11.0",
@@ -47,6 +47,7 @@
47
47
  },
48
48
  "devDependencies": {
49
49
  "@antfu/eslint-config": "^4.13.0",
50
+ "@biomejs/biome": "2.2.4",
50
51
  "@esbuild-plugins/tsconfig-paths": "^0.1.2",
51
52
  "@eslint-react/eslint-plugin": "^1.49.0",
52
53
  "@eslint/js": "^9.26.0",
@@ -71,6 +72,7 @@
71
72
  "tsx": "^4.19.4",
72
73
  "typescript": "^5.8.3",
73
74
  "typescript-eslint": "^8.32.1",
75
+ "ultracite": "5.4.4",
74
76
  "vitest": "3.2.3",
75
77
  "zod": "^3.25.76"
76
78
  }