✨ feat: 实现部分aide
This commit is contained in:
110
aide-program/aide/main.py
Normal file
110
aide-program/aide/main.py
Normal file
@@ -0,0 +1,110 @@
|
||||
"""aide 命令行入口。"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
from aide.core import output
|
||||
from aide.core.config import ConfigManager
|
||||
from aide.env.ensure import EnvManager
|
||||
|
||||
|
||||
def main(argv: list[str] | None = None) -> int:
|
||||
parser = build_parser()
|
||||
args = parser.parse_args(argv)
|
||||
if not hasattr(args, "func"):
|
||||
parser.print_help()
|
||||
return 0
|
||||
try:
|
||||
result = args.func(args)
|
||||
except KeyboardInterrupt:
|
||||
output.err("操作已取消")
|
||||
return 1
|
||||
if result is False:
|
||||
return 1
|
||||
return 0
|
||||
|
||||
|
||||
def build_parser() -> argparse.ArgumentParser:
|
||||
parser = argparse.ArgumentParser(prog="aide", description="Aide 工作流辅助工具")
|
||||
subparsers = parser.add_subparsers(dest="command")
|
||||
|
||||
init_parser = subparsers.add_parser("init", help="初始化 .aide 目录与默认配置")
|
||||
init_parser.set_defaults(func=handle_init)
|
||||
|
||||
env_parser = subparsers.add_parser("env", help="环境管理")
|
||||
env_sub = env_parser.add_subparsers(dest="env_command")
|
||||
ensure_parser = env_sub.add_parser("ensure", help="检测并修复运行环境")
|
||||
ensure_parser.add_argument("--runtime", action="store_true", help="仅检查 aide 运行时环境")
|
||||
ensure_parser.set_defaults(func=handle_env_ensure)
|
||||
|
||||
config_parser = subparsers.add_parser("config", help="配置管理")
|
||||
config_sub = config_parser.add_subparsers(dest="config_command")
|
||||
get_parser = config_sub.add_parser("get", help="读取配置值")
|
||||
get_parser.add_argument("key", help="使用点号分隔的键名,如 task.source")
|
||||
get_parser.set_defaults(func=handle_config_get)
|
||||
|
||||
set_parser = config_sub.add_parser("set", help="设置配置值")
|
||||
set_parser.add_argument("key", help="使用点号分隔的键名,如 task.source")
|
||||
set_parser.add_argument("value", help="要写入的值,支持 bool/int/float/字符串")
|
||||
set_parser.set_defaults(func=handle_config_set)
|
||||
|
||||
parser.add_argument("--version", action="version", version="aide dev")
|
||||
return parser
|
||||
|
||||
|
||||
def handle_init(args: argparse.Namespace) -> bool:
|
||||
root = Path.cwd()
|
||||
cfg = ConfigManager(root)
|
||||
cfg.ensure_config()
|
||||
cfg.ensure_gitignore()
|
||||
output.ok("初始化完成,.aide/ 与默认配置已准备就绪")
|
||||
return True
|
||||
|
||||
|
||||
def handle_env_ensure(args: argparse.Namespace) -> bool:
|
||||
if args.env_command != "ensure":
|
||||
output.err("请指定 env 子命令,如: aide env ensure")
|
||||
return False
|
||||
root = Path.cwd()
|
||||
cfg = ConfigManager(root)
|
||||
manager = EnvManager(root)
|
||||
return manager.ensure(runtime_only=args.runtime, cfg=cfg)
|
||||
|
||||
|
||||
def handle_config_get(args: argparse.Namespace) -> bool:
|
||||
root = Path.cwd()
|
||||
cfg = ConfigManager(root)
|
||||
value = cfg.get_value(args.key)
|
||||
if value is None:
|
||||
output.warn(f"未找到配置项 {args.key}")
|
||||
return False
|
||||
output.info(f"{args.key} = {value!r}")
|
||||
return True
|
||||
|
||||
|
||||
def handle_config_set(args: argparse.Namespace) -> bool:
|
||||
root = Path.cwd()
|
||||
cfg = ConfigManager(root)
|
||||
parsed_value = _parse_value(args.value)
|
||||
cfg.set_value(args.key, parsed_value)
|
||||
return True
|
||||
|
||||
|
||||
def _parse_value(raw: str) -> Any:
|
||||
lowered = raw.lower()
|
||||
if lowered in {"true", "false"}:
|
||||
return lowered == "true"
|
||||
try:
|
||||
if "." in raw:
|
||||
return float(raw)
|
||||
return int(raw)
|
||||
except ValueError:
|
||||
return raw
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Reference in New Issue
Block a user