Files

107 lines
3.0 KiB
Python
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Git 与 session 上下文工具。
入口 shim——委托给 session_context 和 packages_context。
提供:
output_json - 以 JSON 格式输出上下文
output_text - 以文本格式输出上下文
"""
from __future__ import annotations
import json
from .git import run_git
from .session_context import (
get_context_json,
get_context_text,
get_context_record_json,
get_context_text_record,
output_json,
output_text,
)
from .packages_context import (
get_context_packages_text,
get_context_packages_json,
)
from .trellis_config import read_trellis_config
from .workflow_phase import (
filter_platform,
get_phase_index,
get_step,
resolve_effective_platform,
)
# 向后兼容别名——外部模块会导入此名称。
_run_git_command = run_git
# =============================================================================
# 主入口
# =============================================================================
def main() -> None:
"""CLI 入口。"""
import argparse
parser = argparse.ArgumentParser(description="获取 AI agent 的 session 上下文")
parser.add_argument(
"--json",
"-j",
action="store_true",
help="以 JSON 格式输出(适用于所有 --mode)",
)
parser.add_argument(
"--mode",
"-m",
choices=["default", "record", "packages", "phase"],
default="default",
help="输出模式:default(完整上下文)、record(record-session)、packages(仅 package 信息)、phase(提取 workflow 步骤)",
)
parser.add_argument(
"--step",
help="--mode phase 的步骤 ID,例如 1.1、2.2;省略时输出 Phase Index。",
)
parser.add_argument(
"--platform",
help="--mode phase 的平台名称,例如 cursor、claude-code;用于筛选平台标记块。",
)
args = parser.parse_args()
if args.mode == "record":
if args.json:
print(json.dumps(get_context_record_json(), indent=2, ensure_ascii=False))
else:
print(get_context_text_record())
elif args.mode == "packages":
if args.json:
print(json.dumps(get_context_packages_json(), indent=2, ensure_ascii=False))
else:
print(get_context_packages_text())
elif args.mode == "phase":
content = get_step(args.step) if args.step else get_phase_index()
if not content.strip():
if args.step:
parser.exit(2, f"找不到步骤:{args.step}\n")
else:
parser.exit(2, "workflow.md 中找不到 Phase Index 段落。\n")
if args.platform:
effective = resolve_effective_platform(
args.platform, read_trellis_config()
)
content = filter_platform(content, effective)
print(content, end="")
else:
if args.json:
output_json()
else:
output_text()
if __name__ == "__main__":
main()