"""Persona orientation via kaizen-agentic (ADR-005 prepare step). The ADR-005 contract for a scheduled run is `kaizen-agentic schedule prepare ` executed against the target repo: it bundles the agent prompt, project memory, metrics summary, and repo pointers from local `.kaizen/` state — offline-safe, no hub required. The worker treats the bundle as orientation text prepended to the task prompt. Falls back to an empty bundle when the CLI or the repo's schedule state is absent, so a task can still run persona-less (logged in run metadata). """ from __future__ import annotations import subprocess from pathlib import Path def load_persona_bundle(agent: str, target_repo: Path, timeout: int = 60) -> tuple[str, str]: """Return (bundle_text, source) where source is 'prepare' or 'none'.""" try: result = subprocess.run( [ "kaizen-agentic", "schedule", "prepare", agent, "--target", str(target_repo), ], capture_output=True, text=True, timeout=timeout, ) except (FileNotFoundError, subprocess.TimeoutExpired): return "", "none" if result.returncode != 0 or not result.stdout.strip(): return "", "none" return result.stdout, "prepare"