auto-coder-web 0.1.85__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 +2 -1
- auto_coder_web/routers/rules_router.py +90 -3
- auto_coder_web/version.py +1 -1
- auto_coder_web/web/assets/main-DpFfkJ8A.css +32 -0
- auto_coder_web/web/assets/main.js +284 -284
- auto_coder_web/web/index.html +1 -1
- {auto_coder_web-0.1.85.dist-info → auto_coder_web-0.1.87.dist-info}/METADATA +2 -2
- {auto_coder_web-0.1.85.dist-info → auto_coder_web-0.1.87.dist-info}/RECORD +11 -11
- auto_coder_web/web/assets/main-RHMBGd__.css +0 -32
- {auto_coder_web-0.1.85.dist-info → auto_coder_web-0.1.87.dist-info}/WHEEL +0 -0
- {auto_coder_web-0.1.85.dist-info → auto_coder_web-0.1.87.dist-info}/entry_points.txt +0 -0
- {auto_coder_web-0.1.85.dist-info → auto_coder_web-0.1.87.dist-info}/top_level.txt +0 -0
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
|
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(
|
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
|
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.
|
1
|
+
__version__ = "0.1.87"
|