Skip to content

Commit 602bde6

Browse files
committed
refactor: migrate config implementation under pure_auto_codeql
Move LLM provider code into pure_auto_codeql.config while keeping repo-root config/ for keys.toml UX and thin re-export shims. Load keys via get_repo_root()/config/keys.toml and route the configuration facade through the canonical package.
1 parent 378c9b2 commit 602bde6

15 files changed

Lines changed: 1112 additions & 1023 deletions

config/__init__.py

Lines changed: 28 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,51 @@
1-
"""
2-
PureAutoCodeQL LLM 配置系统
1+
"""Legacy config package.
32
4-
统一的配置导出模块,保持向后兼容性
3+
Implementation lives under ``pure_auto_codeql.config``. User secrets remain at
4+
repository-root ``config/keys.toml`` / ``config/keys.example.toml``.
55
"""
66

7-
# 核心数据类和枚举
8-
from .core import (
9-
LLMRole,
7+
from pure_auto_codeql.config import (
8+
CHAT_CONFIG,
9+
THINK_CONFIG,
10+
LLMConfig,
1011
LLMProvider,
12+
LLMRole,
1113
ProviderConfig,
12-
LLMConfig,
1314
ProviderRegistry,
14-
get_llm_config,
15-
get_think_config,
16-
get_chat_config,
17-
THINK_CONFIG,
18-
CHAT_CONFIG,
19-
)
20-
21-
# 展示函数
22-
from .display import (
23-
display_providers_status,
24-
display_provider_detail,
2515
display_all_providers,
26-
validate_provider,
16+
display_provider_detail,
17+
display_providers_status,
2718
display_validation_result,
28-
)
29-
30-
# 向后兼容函数(精简)
31-
from .legacy import (
32-
list_available_providers,
19+
get_chat_config,
20+
get_llm_config,
3321
get_llm_config_by_provider,
3422
get_resilient_llm_config,
35-
list_siliconflow_models,
3623
get_siliconflow_models,
24+
get_think_config,
25+
list_available_providers,
26+
list_siliconflow_models,
27+
validate_provider,
3728
)
3829

39-
# 导出列表
4030
__all__ = [
41-
# 核心类和枚举
42-
"LLMRole",
31+
"CHAT_CONFIG",
32+
"THINK_CONFIG",
33+
"LLMConfig",
4334
"LLMProvider",
35+
"LLMRole",
4436
"ProviderConfig",
45-
"LLMConfig",
4637
"ProviderRegistry",
47-
48-
# 核心配置函数
49-
"get_llm_config",
50-
"get_think_config",
51-
"get_chat_config",
52-
53-
# 全局配置实例
54-
"THINK_CONFIG",
55-
"CHAT_CONFIG",
56-
57-
# 展示函数
58-
"display_providers_status",
59-
"display_provider_detail",
6038
"display_all_providers",
61-
"validate_provider",
39+
"display_provider_detail",
40+
"display_providers_status",
6241
"display_validation_result",
63-
64-
# 向后兼容函数
65-
"list_available_providers",
42+
"get_chat_config",
43+
"get_llm_config",
6644
"get_llm_config_by_provider",
6745
"get_resilient_llm_config",
68-
"list_siliconflow_models",
6946
"get_siliconflow_models",
47+
"get_think_config",
48+
"list_available_providers",
49+
"list_siliconflow_models",
50+
"validate_provider",
7051
]
71-

config/__main__.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
"""
2-
使 config 模块可以通过 python -m config 直接运行
3-
"""
1+
"""python -m config entry point."""
42

5-
from .cli import main
3+
from pure_auto_codeql.config.cli import main
64

75
if __name__ == "__main__":
86
main()
9-

config/cli.py

Lines changed: 4 additions & 130 deletions
Original file line numberDiff line numberDiff line change
@@ -1,132 +1,6 @@
1-
"""
2-
命令行工具模块
1+
"""Legacy re-export of `pure_auto_codeql.config.cli`."""
32

4-
提供完整的 CLI 功能
5-
"""
6-
7-
from pathlib import Path
8-
from .core import ProviderRegistry
9-
from .display import (
10-
console,
11-
display_providers_status,
12-
display_provider_detail,
13-
display_validation_result,
14-
)
15-
16-
17-
def _cli_list_providers(args) -> None:
18-
"""CLI: 列出所有服务商"""
19-
validate = getattr(args, 'validate', False)
20-
if validate:
21-
console.print("[yellow]⏳ 正在验证API Keys...(这可能需要几秒钟)[/yellow]\n")
22-
display_providers_status(
23-
show_unavailable=not args.available_only,
24-
validate_keys=validate
25-
)
26-
27-
28-
def _cli_show_provider(args) -> None:
29-
"""CLI: 显示服务商详情"""
30-
display_provider_detail(args.name)
31-
32-
33-
def _cli_test_provider(args) -> None:
34-
"""CLI: 测试服务商连接"""
35-
display_validation_result(args.name)
36-
37-
38-
def _cli_setup_wizard(args) -> None:
39-
"""CLI: 交互式配置向导"""
40-
console.print("[bold cyan]🚀 LLM 配置向导[/bold cyan]\n")
41-
42-
# 显示当前状态
43-
console.print("[bold]📊 当前服务商状态:[/bold]")
44-
display_providers_status(show_unavailable=False)
45-
46-
# 检查是否有可用服务商
47-
available = ProviderRegistry.list_available()
48-
49-
if available:
50-
console.print(f"[green]✅ 发现 {len(available)} 个可用服务商[/green]\n")
51-
console.print("[bold]推荐配置:[/bold]")
52-
console.print(f" • 当前使用的服务商: {available[0].display_name}")
53-
console.print(" • 配置文件: config/keys.toml")
54-
else:
55-
console.print("[yellow]⚠️ 没有可用的服务商,请配置 API Key[/yellow]\n")
56-
console.print("[bold]配置步骤:[/bold]")
57-
console.print("1. 复制 config/keys.example.toml 为 config/keys.toml")
58-
console.print("2. 编辑 config/keys.toml,填入你的 API Keys")
59-
console.print("3. 重新运行 python config.py setup 验证配置")
60-
61-
62-
def main():
63-
"""命令行入口"""
64-
import argparse
65-
66-
parser = argparse.ArgumentParser(
67-
description="PureAutoCodeQL 配置管理工具",
68-
formatter_class=argparse.RawDescriptionHelpFormatter,
69-
epilog="""
70-
示例:
71-
# 列出所有服务商
72-
python -m config.cli list
73-
74-
# 仅显示可用的服务商
75-
python -m config.cli list --available-only
76-
77-
# 显示服务商详情
78-
python -m config.cli show siliconflow
79-
80-
# 测试服务商连接
81-
python -m config.cli test deepseek
82-
83-
# 运行配置向导
84-
python -m config.cli setup
85-
"""
86-
)
87-
88-
subparsers = parser.add_subparsers(dest="command", help="可用命令")
89-
90-
# list 命令
91-
parser_list = subparsers.add_parser("list", help="列出所有服务商")
92-
parser_list.add_argument(
93-
"--available-only", "-a",
94-
action="store_true",
95-
help="仅显示可用的服务商"
96-
)
97-
parser_list.add_argument(
98-
"--validate", "-v",
99-
action="store_true",
100-
help="真实验证API Key(较慢但准确)"
101-
)
102-
parser_list.set_defaults(func=_cli_list_providers)
103-
104-
# show 命令
105-
parser_show = subparsers.add_parser("show", help="显示服务商详情")
106-
parser_show.add_argument("name", help="服务商名称")
107-
parser_show.set_defaults(func=_cli_show_provider)
108-
109-
# test 命令
110-
parser_test = subparsers.add_parser("test", help="测试服务商连接")
111-
parser_test.add_argument("name", help="服务商名称")
112-
parser_test.set_defaults(func=_cli_test_provider)
113-
114-
# setup 命令
115-
parser_setup = subparsers.add_parser("setup", help="运行配置向导")
116-
parser_setup.set_defaults(func=_cli_setup_wizard)
117-
118-
args = parser.parse_args()
119-
120-
if not args.command:
121-
parser.print_help()
122-
return
123-
124-
if hasattr(args, "func"):
125-
args.func(args)
126-
else:
127-
parser.print_help()
128-
129-
130-
if __name__ == "__main__":
131-
main()
3+
from importlib import import_module
4+
import sys as _sys
1325

6+
_sys.modules[__name__] = import_module("pure_auto_codeql.config.cli")

0 commit comments

Comments
 (0)