- INTENT.md: three-layer model (blueprint/instance/harness), single shared runtime, never-become boundaries - ADR-001 (accepted): DEC-2026-002 resolution — one harness repo for all projects; instances are declarative state in consuming repos - docs/architecture.md: components, contracts (manifest, tool profiles, completion events, credential lanes), deployment shape - agent_harness/: executor-worker prototype adopted and renamed (6/6 tests green); HARNESS-WP-0001 initial workplan (7 tasks) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
39 lines
1.3 KiB
Python
39 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"
|