#!/usr/bin/env python3 """plan — clide planning stopgap. Writes to .pql/pql.db. Replaced by `pql` subcommands when pql ships feature parity. See tools/scripts/README.md for the sunset clause. """ from __future__ import annotations import argparse import sys from pathlib import Path # Make "from planning import ..." work when invoked as a script. HERE = Path(__file__).resolve().parent if str(HERE) not in sys.path: sys.path.insert(0, str(HERE)) from planning import cmd_decisions, cmd_ticket, db # noqa: E402 def _build_parser() -> argparse.ArgumentParser: ap = argparse.ArgumentParser( prog="plan", description="clide planning stopgap — decisions + tickets", ) sub = ap.add_subparsers(dest="cmd", required=True) cmd_decisions.add_subparsers(sub) cmd_ticket.add_subparsers(sub) sq = sub.add_parser("sqlite-query", help="run a raw SQL query") sq.add_argument("sql") return ap def main(argv: list[str] | None = None) -> int: ap = _build_parser() args = ap.parse_args(argv) if args.cmd == "decisions": return cmd_decisions.dispatch(args) if args.cmd == "ticket": return cmd_ticket.dispatch(args) if args.cmd == "sqlite-query": conn = db.connect() try: cur = conn.execute(args.sql) if cur.description: cols = [d[0] for d in cur.description] print("\t".join(cols)) for row in cur.fetchall(): print("\t".join(str(v) for v in row)) conn.commit() finally: conn.close() return 0 return 1 if __name__ == "__main__": sys.exit(main())