personal memory agent
at main 65 lines 1.7 kB view raw
1# SPDX-License-Identifier: AGPL-3.0-only 2# Copyright (c) 2026 sol pbc 3 4import argparse 5import os 6import sys 7from pathlib import Path 8 9from .prompts import load_prompt 10from .utils import setup_cli 11 12 13def _load_prompt() -> str: 14 """Return system instruction text for planning.""" 15 prompt_content = load_prompt("planner", base_dir=Path(__file__).parent) 16 return prompt_content.text 17 18 19def generate_plan(request: str) -> str: 20 """Return a detailed agent plan for ``request`` using configured provider.""" 21 from think.models import generate 22 23 return generate( 24 contents=request, 25 context="planner.generate", 26 temperature=0.3, 27 max_output_tokens=4096, 28 thinking_budget=4096, 29 system_instruction=_load_prompt(), 30 ) 31 32 33def parse_args() -> argparse.ArgumentParser: 34 parser = argparse.ArgumentParser( 35 description="Generate an agent plan using configured provider" 36 ) 37 parser.add_argument( 38 "task", 39 nargs="?", 40 help="Path to .txt file with the request or '-' for stdin", 41 ) 42 parser.add_argument("-q", "--query", help="Request text directly") 43 return parser 44 45 46def main() -> None: 47 parser = parse_args() 48 args = setup_cli(parser) 49 if args.query: 50 request = args.query 51 elif args.task is None: 52 parser.error("request not provided") 53 elif args.task == "-": 54 request = sys.stdin.read() 55 else: 56 if not os.path.isfile(args.task): 57 parser.error(f"File not found: {args.task}") 58 request = Path(args.task).read_text(encoding="utf-8") 59 60 plan = generate_plan(request) 61 print(plan) 62 63 64if __name__ == "__main__": # pragma: no cover - manual execution 65 main()