40 lines
1.3 KiB
Python
40 lines
1.3 KiB
Python
|
|
"""Persona orientation via kaizen-agentic (ADR-005 prepare step).
|
||
|
|
|
||
|
|
The ADR-005 contract for a scheduled run is `kaizen-agentic schedule
|
||
|
|
prepare <agent>` 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"
|