81 lines
2.8 KiB
Python
81 lines
2.8 KiB
Python
#!/usr/bin/env python3
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
|
|
def _add_lib_path() -> None:
|
|
root = Path(__file__).resolve().parents[3]
|
|
lib_path = root / "lib"
|
|
if str(lib_path) not in sys.path:
|
|
sys.path.insert(0, str(lib_path))
|
|
|
|
|
|
_add_lib_path()
|
|
|
|
from air_runtime.worker import enter_worker, finish_worker, handoff_worker, status_worker
|
|
|
|
|
|
def parse_args() -> argparse.Namespace:
|
|
parser = argparse.ArgumentParser(description="AirDo public worker runtime")
|
|
parser.add_argument("--mode", choices=["enter", "status", "handoff", "finish"], default="status")
|
|
parser.add_argument("--project", default=".")
|
|
parser.add_argument("--task-id", default="")
|
|
parser.add_argument("--result", default="")
|
|
return parser.parse_args()
|
|
|
|
|
|
def main() -> None:
|
|
args = parse_args()
|
|
project_root = Path(args.project).expanduser().resolve()
|
|
|
|
if args.mode == "status":
|
|
status = status_worker(project_root)
|
|
print(f"airdo_mode={'enabled' if status['enabled'] else 'disabled'}")
|
|
print(f"project_root={project_root}")
|
|
print(f"active_task_id={status['activeTaskId']}")
|
|
print(f"known_tasks={','.join(status['taskIds'])}")
|
|
for key, value in status["artifactHealth"].items():
|
|
print(f"{key}={'ok' if value else 'missing'}")
|
|
return
|
|
|
|
if not args.task_id:
|
|
raise SystemExit("--task-id is required for enter, handoff, and finish modes")
|
|
|
|
if args.mode == "enter":
|
|
result = enter_worker(project_root, args.task_id)
|
|
print("airdo_mode=entered")
|
|
print(f"project_root={project_root}")
|
|
print(f"task_id={result['taskId']}")
|
|
print(f"brief_path={result['briefPath']}")
|
|
print(f"handoff_path={result['handoffPath']}")
|
|
print(f"result_path={result['resultPath']}")
|
|
print(f"worker_state_path={result['workerStatePath']}")
|
|
return
|
|
|
|
if args.mode == "handoff":
|
|
result = handoff_worker(project_root, args.task_id)
|
|
print("airdo_mode=handoff-ready")
|
|
print(f"project_root={project_root}")
|
|
print(f"task_id={result['taskId']}")
|
|
print(f"brief_path={result['briefPath']}")
|
|
print(f"handoff_path={result['handoffPath']}")
|
|
print(f"result_path={result['resultPath']}")
|
|
print(f"worker_state_path={result['workerStatePath']}")
|
|
return
|
|
|
|
result_path = Path(args.result).expanduser().resolve() if args.result else None
|
|
finalized = finish_worker(project_root, args.task_id, result_path)
|
|
print("airdo_mode=finished")
|
|
print(f"project_root={project_root}")
|
|
print(f"task_id={finalized['taskId']}")
|
|
print(f"task_status={finalized['status']}")
|
|
print(f"finalized_result_path={finalized['finalizedResultPath']}")
|
|
print(f"worker_state_path={finalized['workerStatePath']}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|