auto-coder-web 0.1.86__py3-none-any.whl → 0.1.87__py3-none-any.whl

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.
auto_coder_web/proxy.py CHANGED
@@ -19,7 +19,7 @@ import sys
19
19
  from auto_coder_web.terminal import terminal_manager
20
20
  from autocoder.common import AutoCoderArgs
21
21
  from auto_coder_web.auto_coder_runner_wrapper import AutoCoderRunnerWrapper
22
- from auto_coder_web.routers import todo_router, settings_router, auto_router, commit_router, chat_router, coding_router, index_router, config_router, upload_router, rag_router, editable_preview_router, mcp_router, direct_chat_router
22
+ from auto_coder_web.routers import todo_router, settings_router, auto_router, commit_router, chat_router, coding_router, index_router, config_router, upload_router, rag_router, editable_preview_router, mcp_router, direct_chat_router, rules_router
23
23
  from auto_coder_web.expert_routers import history_router
24
24
  from auto_coder_web.common_router import completions_router, file_router, auto_coder_conf_router, chat_list_router, file_group_router, model_router, compiler_router
25
25
  from auto_coder_web.common_router import active_context_router
@@ -107,6 +107,7 @@ class ProxyServer:
107
107
  self.app.include_router(mcp_router.router)
108
108
  self.app.include_router(active_context_router.router)
109
109
  self.app.include_router(direct_chat_router.router)
110
+ self.app.include_router(rules_router.router)
110
111
 
111
112
  @self.app.on_event("shutdown")
112
113
  async def shutdown_event():
@@ -73,6 +73,10 @@ class UserResponseRequest(BaseModel):
73
73
  class CancelTaskRequest(BaseModel):
74
74
  event_file_id: str
75
75
 
76
+ # 添加新的响应模型用于返回prompt
77
+ class PromptResponse(BaseModel):
78
+ prompt: str
79
+
76
80
  # --- Dependencies ---
77
81
 
78
82
  async def get_project_path(request: Request) -> str:
@@ -288,13 +292,13 @@ async def analyze_rules(
288
292
  # --- Analysis Logic ---
289
293
  args = get_final_config() # Gets config potentially influenced by project settings
290
294
  llm = get_single_llm(args.model, product_mode=args.product_mode)
291
- auto_learn = AutoLearn(llm=llm, args=args, project_root=project_path) # Pass project_path
295
+ auto_learn = AutoLearn(llm=llm, args=args) # Pass project_path
292
296
 
293
297
  # TODO: Determine how to get 'current_files' in the web context.
294
298
  # This might need state management or explicit file list in request.
295
299
  # Using a placeholder or assuming indexer provides files for now.
296
300
  # Let's try fetching from memory first, might be empty in web context.
297
- memory = get_memory(project_path) # Get memory specific to project
301
+ memory = get_memory() # Get memory specific to project
298
302
  files = memory.get("current_files", {}).get("files", [])
299
303
 
300
304
  if not files:
@@ -383,7 +387,7 @@ async def analyze_commit_rules(
383
387
  args = get_final_config()
384
388
  llm = get_single_llm(args.model, product_mode=args.product_mode)
385
389
  # Ensure AutoLearn uses the correct project path context
386
- auto_learn = AutoLearn(llm=llm, args=args, project_root=project_path)
390
+ auto_learn = AutoLearn(llm=llm, args=args)
387
391
 
388
392
  event_manager.write_event(EventContentCreator.create_message(f"Fetching changes for commit: {request_data.commit_id}").to_dict())
389
393
  changes, _ = auto_learn.get_commit_changes(request_data.commit_id)
@@ -599,3 +603,86 @@ async def cancel_rule_task(request: CancelTaskRequest, project_path: str = Depen
599
603
  # @router.post("/api/rules/save-history")
600
604
  # @router.get("/api/rules/history")
601
605
  # @router.get("/api/rules/task/{task_id}")
606
+
607
+ @router.post("/api/rules/context/prompt", response_model=PromptResponse)
608
+ async def get_context_prompt(
609
+ request_data: RuleAnalyzeRequest,
610
+ project_path: str = Depends(get_project_path)
611
+ ):
612
+ """
613
+ 生成并返回基于当前文件和规则的分析提示,不执行分析任务
614
+ """
615
+ logger.info(f"生成分析提示,项目路径: {project_path}")
616
+
617
+ try:
618
+ # 获取配置和LLM
619
+ args = get_final_config()
620
+ llm = get_single_llm(args.model, product_mode=args.product_mode)
621
+ auto_learn = AutoLearn(llm=llm, args=args)
622
+
623
+ # 获取内存中的文件
624
+ memory = get_memory()
625
+ files = memory.get("current_files", {}).get("files", [])
626
+
627
+ if not files:
628
+ raise HTTPException(status_code=400, detail="没有找到活跃的文件,请指定文件或使用其他机制")
629
+
630
+ sources = SourceCodeList([])
631
+ for file in files:
632
+ file_abs_path = os.path.join(project_path, file) if not os.path.isabs(file) else file
633
+ if not os.path.exists(file_abs_path):
634
+ logger.warning(f"文件未找到: {file_abs_path}, 跳过")
635
+ continue
636
+ try:
637
+ with open(file_abs_path, "r", encoding="utf-8") as f:
638
+ source_code = f.read()
639
+ sources.sources.append(SourceCode(module_name=file, source_code=source_code))
640
+ except Exception as e:
641
+ logger.error(f"读取文件 {file_abs_path} 错误: {e}")
642
+ continue
643
+
644
+ if not sources.sources:
645
+ raise HTTPException(status_code=400, detail="没有有效的源文件可以分析")
646
+
647
+ # 生成分析提示文本
648
+ prompt_text = auto_learn.analyze_modules.prompt(sources=sources, query=request_data.query)
649
+
650
+ return PromptResponse(prompt=prompt_text)
651
+
652
+ except Exception as e:
653
+ logger.exception(f"生成分析提示时出错: {e}")
654
+ raise HTTPException(status_code=500, detail=f"生成提示失败: {str(e)}")
655
+
656
+ @router.post("/api/rules/commit/prompt", response_model=PromptResponse)
657
+ async def get_commit_prompt(
658
+ request_data: RuleCommitRequest,
659
+ project_path: str = Depends(get_project_path)
660
+ ):
661
+ """
662
+ 生成并返回基于特定git提交的分析提示,不执行分析任务
663
+ """
664
+ logger.info(f"生成提交分析提示,提交ID: {request_data.commit_id},项目路径: {project_path}")
665
+
666
+ try:
667
+ # 获取配置和LLM
668
+ args = get_final_config()
669
+ llm = get_single_llm(args.model, product_mode=args.product_mode)
670
+ auto_learn = AutoLearn(llm=llm, args=args)
671
+
672
+ # 获取提交变更
673
+ changes, _ = auto_learn.get_commit_changes(request_data.commit_id)
674
+
675
+ if not changes:
676
+ raise HTTPException(status_code=400, detail=f"无法获取提交ID的变更: {request_data.commit_id}。请确保这是一个有效的提交。")
677
+
678
+ # 生成提交分析提示文本
679
+ prompt_text = auto_learn.analyze_commit.prompt(
680
+ querie_with_urls_and_changes=changes,
681
+ new_query=request_data.query
682
+ )
683
+
684
+ return PromptResponse(prompt=prompt_text)
685
+
686
+ except Exception as e:
687
+ logger.exception(f"生成提交分析提示时出错: {e}")
688
+ raise HTTPException(status_code=500, detail=f"生成提示失败: {str(e)}")
auto_coder_web/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.1.86"
1
+ __version__ = "0.1.87"