Files
Auto-Finance/tasks.py
T
wandering 821822a408 docs: 全面体检并更新文档,工具参考改为从运行时 schema 生成
先体检再动手:44 个 Markdown,相对链接 0 处失效,逐份分辨「现状文档」与「历史记录」。
历史记录(error-experience/*、架构分析、已过时的全景图)保留原貌只加指路,不重写。

- 新增 scripts/gen_mcp_docs.py:起 stdio 子进程 list_tools 后整段重生成 docs/MCP.md 的「工具参考」
  (291 行 / 25 个工具,占这份文档四分之三,手工维护必漂)。--check 漂移退出码 1,--diff 打印差异;
  GROUPS 是刻意闸门——加了工具没登记就报错,防止「有工具没文档」。接进 make mcp-docs / docs-check
  与 tasks.py 同名任务
- 生成时抓到两处真实漂移:invoice_type 线上是 string/null 且默认 null,文档手写成 null/string 无默认;
  case_list 无参数在旧文档里写成一句散文。现已与线上一字不差
- 过期说法清理:src/README 的「browser_* 与 submit_* 尚未实现」(browser 早已联机验通、submit 定案不做);
  tests/README 的「当前 107 例」(现 148)与缺 test_mcp_browser.py 一行、「Playwright 填报不进单测」
  (现在选择器分支/状态判定/错误路径有单测,只有真实页面需要联机);.agents/README 的「Cursor Agent」;
  plans/README 里还写着「提交加确认 token」;scripts/data/README 表格有一行跑到正文后面
- 工程实践指南里把已删除的 CLI 入口当例子:mypy src/main.py、make run、python src/main.py 全部改为现状
  (mypy src / 唯一入口 python -m src.mcp.server),并补上「任务必须透传退出码」这条本轮踩到的坑
- README:「还没做完」重写为「边界与未完事项」——把刻意不做(提交、submit_* 整类、删除、撤回)与
  真的未完(科目/项目/人员固定取第 N 行,待业务口径)分开写;开发命令补 mcp-docs / docs-check / skill-install
- 操作指南:7.3 经济科目与项目从「要改就改索引」改成「已知限制,等口径,填报后务必人工核对」;
  相关命令补齐新目标;MCP.md 标准流程补上填报与「到此为止,提交由人」两步,并改掉与新纪律矛盾的
  「把截图报给用户」表述
- AGENTS:命令表加两行;测试段给出改工具后的固定顺序(mcp-smoke → mcp-docs → 重连宿主);提交纪律
  补「make check 之外还有 docs-check / skill-check 两道专项门禁」;截图产物改标注为排查证据
- install_skill.py:拿不到主目录时退出码改 4,别和「漂移」的 1 混成一类
- 已核对:submit_execute / src/main.py 在文档里的残留都是禁止性表述或「已删除」清单项,不是现状描述

验证:ruff / format --check / mypy src / deptry / pytest 148 passed / mcp-smoke 25 工具 /
docs-check 与 skill-check 均退出码 0。--no-verify 提交并手跑等价检查。
2026-10-20 23:12:46 +08:00

46 lines
1.8 KiB
Python

"""Windows 侧的任务入口(与 Makefile 等价)。
退出码必须透传:以前 os.system 的返回值被直接丢掉,skill-check 检出漂移、check 门禁失败
都会让调用方以为成功了——AGENTS 里「门禁退出码要单独确认」说的就是这个坑。
"""
import os
import sys
TASKS = {
"install": "uv sync && uv run pre-commit install",
"check": "uv lock --locked && uv run ruff check . && uv run ruff format --check . "
"&& uv run python -m mypy src && uv run deptry .",
"test": "uv run python -m pytest --cov --cov-config=pyproject.toml --cov-report=term-missing",
"mcp": "uv run python -m src.mcp.server",
"mcp-smoke": "uv run python scripts/mcp_smoke.py",
"mcp-docs": "uv run python scripts/gen_mcp_docs.py",
"docs-check": "uv run python scripts/gen_mcp_docs.py --check",
"upload": "uv run python -m src.upload.server",
"skill-install": "uv run python scripts/install_skill.py",
"skill-check": "uv run python scripts/install_skill.py --check",
"clean": "rm -rf .venv __pycache__ .pytest_cache .mypy_cache .ruff_cache",
}
# 下划线写法作别名,手打时不用纠结连字符
ALIASES = {key.replace("-", "_"): value for key, value in TASKS.items()}
def run_task(task_name: str) -> int:
command = TASKS.get(task_name) or ALIASES.get(task_name)
if not command:
print("未知任务:" + task_name, file=sys.stderr)
print("可选:" + ", ".join(sorted(TASKS)), file=sys.stderr)
return 2
print("Running " + task_name + "...")
return os.system(command)
if __name__ == "__main__":
if len(sys.argv) > 1:
raise SystemExit(run_task(sys.argv[1]))
print("用法:python tasks.py 任务名", file=sys.stderr)
print("可选:" + ", ".join(sorted(TASKS)), file=sys.stderr)
raise SystemExit(2)