64 lines
1.7 KiB
Bash
Executable File
64 lines
1.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
task_file="${1:-}"
|
|
if [[ -z "$task_file" || ! -f "$task_file" ]]; then
|
|
echo "[orchestrator-worker] missing task file argument" >&2
|
|
exit 1
|
|
fi
|
|
|
|
worker_exec="${MOSAIC_WORKER_EXEC:-}"
|
|
if [[ -z "$worker_exec" ]]; then
|
|
if command -v codex >/dev/null 2>&1; then
|
|
worker_exec="codex -p"
|
|
elif command -v opencode >/dev/null 2>&1; then
|
|
worker_exec="opencode -p"
|
|
else
|
|
echo "[orchestrator-worker] set MOSAIC_WORKER_EXEC to your worker command (example: 'codex -p' or 'opencode -p')" >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
prompt="$(python3 - "$task_file" <<'PY'
|
|
import json
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
task = json.loads(Path(sys.argv[1]).read_text(encoding="utf-8"))
|
|
task_id = str(task.get("id", "TASK"))
|
|
title = str(task.get("title", ""))
|
|
description = str(task.get("description", ""))
|
|
meta = task.get("metadata", {}) or {}
|
|
issue = str(meta.get("issue", ""))
|
|
repo = str(meta.get("repo", ""))
|
|
branch = str(meta.get("branch", ""))
|
|
depends = task.get("depends_on", [])
|
|
if isinstance(depends, list):
|
|
depends_str = ", ".join(str(x) for x in depends)
|
|
else:
|
|
depends_str = str(depends)
|
|
|
|
print(
|
|
f"""Read ~/.config/mosaic/STANDARDS.md, then AGENTS.md and SOUL.md (if present).
|
|
Complete this queued task fully.
|
|
|
|
Task ID: {task_id}
|
|
Title: {title}
|
|
Description: {description}
|
|
Issue: {issue}
|
|
Repo hint: {repo}
|
|
Branch hint: {branch}
|
|
Depends on: {depends_str}
|
|
|
|
Requirements:
|
|
- Implement and verify the task end-to-end.
|
|
- Keep changes scoped to this task.
|
|
- Run project checks and tests relevant to touched code.
|
|
- Return with a concise summary of what changed and verification results.
|
|
"""
|
|
)
|
|
PY
|
|
)"
|
|
|
|
PROMPT="$prompt" bash -lc "$worker_exec \"\$PROMPT\""
|