"""Tiny command-line front end for the demo task app. Run it: python cli.py add "write the lesson" python cli.py list State is kept in tasks.json next to this file. It's intentionally minimal; the point of this app is to be a realistic-but-small thing you change with an AI, not a product. """ import json import sys from pathlib import Path from tasks import Task, TaskList STATE = Path(__file__).parent / "tasks.json" def load() -> TaskList: if not STATE.exists(): return TaskList() raw = json.loads(STATE.read_text()) return TaskList(tasks=[Task(**t) for t in raw]) def save(tlist: TaskList) -> None: STATE.write_text(json.dumps([t.__dict__ for t in tlist.tasks], indent=2)) def main(argv: list[str]) -> int: tlist = load() if not argv: print("usage: python cli.py [add | list | done <index> | count]") return 1 command = argv[0] if command == "add": title = " ".join(argv[1:]) tlist.add(title) save(tlist) print(f"added: {title}") elif command == "list": print(tlist.render()) elif command == "done": tlist.complete(int(argv[1])) save(tlist) print("updated") elif command == "count": print(f"{len(tlist.pending())} pending") else: print(f"unknown command: {command}") return 1 return 0 if __name__ == "__main__": raise SystemExit(main(sys.argv[1:]))