chore: push all design docs, V2 plan specs, and current working state
Includes AirPlan design documents, AircOding-alpha1-plan, AirPlanV2, AirPlan-ParaV2, AirPlan-Para V1 reference docs, and all working code changes across packages. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
184
AirPlan/docs/spec/AirPlan-ParaV2/plugins/aireng/scripts/aireng_mode.py
Executable file
184
AirPlan/docs/spec/AirPlan-ParaV2/plugins/aireng/scripts/aireng_mode.py
Executable file
@@ -0,0 +1,184 @@
|
||||
#!/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.engine import (
|
||||
build_engine_plan,
|
||||
dispatch_worker_group,
|
||||
enter_engine,
|
||||
intervene_engine,
|
||||
merge_worker_result,
|
||||
monitor_engine,
|
||||
run_engine_once,
|
||||
status_engine,
|
||||
)
|
||||
from air_runtime.paths import todo_path as workflow_todo_path
|
||||
from air_runtime.project_bootstrap import ensure_project_bootstrap
|
||||
|
||||
|
||||
def parse_args() -> argparse.Namespace:
|
||||
parser = argparse.ArgumentParser(description="AirEng public scheduler runtime")
|
||||
parser.add_argument(
|
||||
"--mode",
|
||||
choices=["enter", "status", "plan", "dispatch", "merge", "monitor", "run", "intervene"],
|
||||
default="status",
|
||||
)
|
||||
parser.add_argument("--project", default=".")
|
||||
parser.add_argument("--todo", default="")
|
||||
parser.add_argument("--result", default="")
|
||||
parser.add_argument("--dispatch-group", default="")
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
def main() -> None:
|
||||
args = parse_args()
|
||||
project_root = Path(args.project).expanduser().resolve()
|
||||
ensure_project_bootstrap(project_root)
|
||||
|
||||
if args.mode == "enter":
|
||||
state_path, health = enter_engine(project_root)
|
||||
print("aireng_mode=enabled")
|
||||
print(f"project_root={project_root}")
|
||||
print(f"state_path={state_path}")
|
||||
for key, value in health.items():
|
||||
print(f"{key}={'ok' if value else 'missing'}")
|
||||
return
|
||||
|
||||
if args.mode == "status":
|
||||
state = status_engine(project_root)
|
||||
print(f"aireng_mode={'enabled' if state.get('enabled') else 'disabled'}")
|
||||
print(f"project_root={project_root}")
|
||||
print(f"engine_mode={state.get('engineMode', '')}")
|
||||
print(f"active_wave_id={state.get('activeWaveId', '')}")
|
||||
print(f"active_dispatch_path={state.get('activeDispatchPath', '')}")
|
||||
print(f"active_worker_count={len(state.get('activeWorkers', []))}")
|
||||
print(f"merged_results={len(state.get('mergedResults', []))}")
|
||||
print(f"pending_global_updates={len(state.get('pendingGlobalUpdates', []))}")
|
||||
print(f"planning_source={state.get('planningSource', '')}")
|
||||
print(f"xdb_sessions={len(state.get('xdbSessions', []))}")
|
||||
print(f"xdb_policy_enabled={state.get('xdbPolicy', {}).get('enabled')}")
|
||||
print(f"debug_sessions={len(state.get('debugSessions', []))}")
|
||||
print(f"debug_policy_enabled={state.get('debugPolicy', {}).get('enabled')}")
|
||||
print(f"repair_attempts={len(state.get('repairAttempts', []))}")
|
||||
print(f"active_repairs={state.get('activeRepairCount', 0)}")
|
||||
print(f"repair_policy_enabled={state.get('repairPolicy', {}).get('enabled')}")
|
||||
print(f"monitor_interval_seconds={state.get('monitoringPolicy', {}).get('checkIntervalSeconds', 0)}")
|
||||
print(f"last_loop_at={state.get('lastLoopAt', '')}")
|
||||
print(f"last_intervention_at={state.get('lastInterventionAt', '')}")
|
||||
print(f"next_action={state.get('nextAction', '')}")
|
||||
for key, value in state.get("artifactHealth", {}).items():
|
||||
print(f"{key}={'ok' if value else 'missing'}")
|
||||
return
|
||||
|
||||
if args.mode == "plan":
|
||||
current_todo_path = Path(args.todo).expanduser().resolve() if args.todo else workflow_todo_path(project_root)
|
||||
result = build_engine_plan(project_root, current_todo_path)
|
||||
print("aireng_mode=planned")
|
||||
print(f"project_root={project_root}")
|
||||
print(f"todo_path={current_todo_path}")
|
||||
print(f"plan_path={result['planPath']}")
|
||||
print(f"plan_markdown_path={result['planMarkdownPath']}")
|
||||
print(f"review_json_path={result['reviewJsonPath']}")
|
||||
print(f"review_markdown_path={result['reviewMarkdownPath']}")
|
||||
print(f"planning_source={result['planningSource']}")
|
||||
print(f"review_source_path={result['reviewSourcePath']}")
|
||||
print(f"selected_tasks={','.join(result['selectedTasks'])}")
|
||||
print(f"parallel_group_count={result['parallelGroupCount']}")
|
||||
print(f"conflict_count={result['conflictCount']}")
|
||||
return
|
||||
|
||||
if args.mode == "dispatch":
|
||||
result = dispatch_worker_group(project_root, args.dispatch_group)
|
||||
print("aireng_mode=dispatched")
|
||||
print(f"project_root={project_root}")
|
||||
print(f"dispatch_path={result['dispatchPath']}")
|
||||
print(f"group_name={result['groupName']}")
|
||||
print(f"wave_id={result['waveId']}")
|
||||
print(f"task_ids={','.join(result['taskIds'])}")
|
||||
print(f"recommended_concurrency={result['recommendedConcurrency']}")
|
||||
return
|
||||
|
||||
if args.mode == "monitor":
|
||||
result = monitor_engine(project_root)
|
||||
print("aireng_mode=monitored")
|
||||
print(f"project_root={project_root}")
|
||||
print(f"engine_mode={result['engineMode']}")
|
||||
print(f"active_worker_count={result['activeWorkerCount']}")
|
||||
print(f"ready_to_merge_count={result['readyToMergeCount']}")
|
||||
print(f"merged_count={result['mergedCount']}")
|
||||
print(f"stalled_count={result['stalledCount']}")
|
||||
print(f"intervention_count={result['interventionCount']}")
|
||||
print(f"blocked_task_count={result['blockedTaskCount']}")
|
||||
print(f"repair_queue_path={result['repairQueuePath']}")
|
||||
print(f"next_action={result['nextAction']}")
|
||||
return
|
||||
|
||||
if args.mode == "intervene":
|
||||
result = intervene_engine(project_root)
|
||||
print("aireng_mode=intervened")
|
||||
print(f"project_root={project_root}")
|
||||
print(f"engine_mode={result['engineMode']}")
|
||||
print(f"stalled_count={result['stalledCount']}")
|
||||
print(f"intervention_count={result['interventionCount']}")
|
||||
print(f"blocked_task_count={result['blockedTaskCount']}")
|
||||
print(f"next_action={result['nextAction']}")
|
||||
return
|
||||
|
||||
if args.mode == "run":
|
||||
current_todo_path = Path(args.todo).expanduser().resolve() if args.todo else workflow_todo_path(project_root)
|
||||
result = run_engine_once(project_root, current_todo_path)
|
||||
print("aireng_mode=ran")
|
||||
print(f"project_root={project_root}")
|
||||
print(f"action={result['action']}")
|
||||
print(f"steps={','.join(result['steps'])}")
|
||||
print(f"plan_path={result['planPath']}")
|
||||
print(f"engine_mode={result['engineMode']}")
|
||||
print(f"next_action={result['nextAction']}")
|
||||
if 'dispatchPath' in result:
|
||||
print(f"dispatch_path={result['dispatchPath']}")
|
||||
if 'waveId' in result:
|
||||
print(f"wave_id={result['waveId']}")
|
||||
if 'taskIds' in result:
|
||||
print(f"task_ids={','.join(result['taskIds'])}")
|
||||
if 'activeWorkerCount' in result:
|
||||
print(f"active_worker_count={result['activeWorkerCount']}")
|
||||
return
|
||||
|
||||
if not args.result:
|
||||
raise SystemExit("--result is required for merge mode")
|
||||
|
||||
result_path = Path(args.result).expanduser().resolve()
|
||||
merged = merge_worker_result(project_root, result_path)
|
||||
print("aireng_mode=merged")
|
||||
print(f"project_root={project_root}")
|
||||
print(f"task_id={merged['taskId']}")
|
||||
print(f"task_status={merged['status']}")
|
||||
print(f"archived_result_path={merged['archivedResultPath']}")
|
||||
print(f"pending_global_update_count={merged['pendingGlobalUpdateCount']}")
|
||||
print(f"doc_queue_path={merged['docQueuePath']}")
|
||||
print(f"repair_queue_path={merged['repairQueuePath']}")
|
||||
print(f"todo_path={merged['todoPath']}")
|
||||
print(f"applied_doc_path_count={merged['appliedDocPathCount']}")
|
||||
print(f"xdb_session_count={merged['xdbSessionCount']}")
|
||||
print(f"debug_session_count={merged['debugSessionCount']}")
|
||||
print(f"repair_attempt_count={merged['repairAttemptCount']}")
|
||||
print(f"repair_prepared={merged['repairPrepared']}")
|
||||
print(f"repair_dispatch_path={merged['repairDispatchPath']}")
|
||||
print(f"next_action={merged['nextAction']}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user