@@ -159,33 +159,52 @@ async def search_skills(self, query: str, context: Dict) -> List[Dict]:
159159
160160 return matched_skills [:10 ] # 返回 top 10
161161
162- async def evolve_skill (self , task , execution_trace : Dict , quality_score : float ):
162+ async def evolve_skill (self , skill_id = None , improvements = None , task = None , execution_trace : Dict = None , quality_score : float = None ):
163163 """
164164 基于执行结果进化技能
165165
166166 Args:
167+ skill_id: 技能 ID (for backward compatibility with tests)
168+ improvements: 改进列表 (for backward compatibility with tests)
167169 task: 任务对象
168170 execution_trace: 执行轨迹
169171 quality_score: 质量评分 (0-1)
170172
171173 Returns:
172174 进化后的技能或 None
173175 """
174- # 记录执行历史到记忆存储
176+ # Backward compatibility: if skill_id and improvements are provided, use old API
177+ if skill_id is not None and improvements is not None :
178+ if skill_id not in self .skill_registry :
179+ return None
180+
181+ skill = self .skill_registry [skill_id ]
182+ skill .version += 1
183+
184+ if "improvements" not in skill .metadata :
185+ skill .metadata ["improvements" ] = []
186+ skill .metadata ["improvements" ].extend (improvements )
187+
188+ return skill
189+
190+ # New API: record to memory store
191+ if task is None :
192+ return None
193+
175194 project_id = getattr (task , 'project_id' , 'unknown' )
176195 if project_id not in self .memory_store :
177196 self .memory_store [project_id ] = []
178197
179198 memory_entry = {
180199 "task_id" : getattr (task , 'id' , 'unknown' ),
181200 "timestamp" : _now (),
182- "quality_score" : quality_score ,
183- "execution_trace" : execution_trace ,
201+ "quality_score" : quality_score or 0.5 ,
202+ "execution_trace" : execution_trace or {} ,
184203 "improvements" : []
185204 }
186205
187206 # 如果质量低于阈值,标记需要改进
188- if quality_score < 0.7 :
207+ if quality_score and quality_score < 0.7 :
189208 memory_entry ["needs_improvement" ] = True
190209 memory_entry ["improvements" ].append ({
191210 "type" : "quality_below_threshold" ,
@@ -198,31 +217,42 @@ async def evolve_skill(self, task, execution_trace: Dict, quality_score: float):
198217 # TODO: 在实际实现中,这里应该调用 LLM 分析失败原因并生成改进版本
199218 return None
200219
201- async def fix_skill (self , failed_skill_id : str , error_context : Dict ):
220+ async def fix_skill (self , skill_id = None , error_context : Dict = None , failed_skill_id = None ):
202221 """
203222 修复失败的技能
204223
205224 Args:
206- failed_skill_id: 失败的技能 ID
225+ skill_id: 技能 ID (for backward compatibility with tests)
207226 error_context: 错误上下文
227+ failed_skill_id: 失败的技能 ID (alias for skill_id)
228+
229+ Returns:
230+ SkillCard: 修复后的技能对象
208231 """
209- if failed_skill_id not in self .skill_registry :
210- return
232+ # Support both parameter names
233+ actual_skill_id = skill_id or failed_skill_id
234+ if not actual_skill_id :
235+ return None
236+
237+ if actual_skill_id not in self .skill_registry :
238+ return None
211239
212- skill = self .skill_registry [failed_skill_id ]
240+ skill = self .skill_registry [actual_skill_id ]
213241
214242 # 记录失败历史
215243 if "fix_history" not in skill .metadata :
216244 skill .metadata ["fix_history" ] = []
217245
218246 skill .metadata ["fix_history" ].append ({
219247 "timestamp" : _now (),
220- "error" : error_context .get ("error" , "Unknown" ),
221- "context" : error_context
248+ "error" : error_context .get ("error" , "Unknown" ) if error_context else "Unknown" ,
249+ "context" : error_context or {}
222250 })
223251
224252 # TODO: 在实际实现中,这里应该分析错误并生成修复版本
225- print (f"⚠️ Skill { failed_skill_id } marked for fixing" )
253+ print (f"⚠️ Skill { actual_skill_id } marked for fixing" )
254+
255+ return skill
226256
227257 async def get_project_skills (self , project_id : str ) -> List [Dict ]:
228258 """获取项目的所有技能"""
@@ -277,6 +307,30 @@ async def import_skills(self, project_id: str, skills: List[Dict]):
277307
278308 print (f"✅ Imported { imported_count } skills to project { project_id } " )
279309
310+ async def register_skill (self , skill_data : Dict ):
311+ """
312+ 注册单个技能(便捷方法)
313+
314+ Args:
315+ skill_data: 技能数据字典
316+
317+ Returns:
318+ SkillCard: 注册的技能对象
319+ """
320+ skill_id = skill_data .get ('skill_id' )
321+ if not skill_id :
322+ raise ValueError ("skill_id is required" )
323+
324+ # 创建或更新技能
325+ if skill_id in self .skill_registry :
326+ skill = self .skill_registry [skill_id ]
327+ skill .version += 1
328+ else :
329+ skill = SkillCard .from_dict (skill_data )
330+ self .skill_registry [skill_id ] = skill
331+
332+ return skill
333+
280334 async def capture_environment_fingerprint (self , project_id : str ) -> Dict :
281335 """
282336 V-06: 捕获环境指纹
0 commit comments