#!/usr/bin/env bash set -euo pipefail ENGINE="${1:-}" PROJECT_DIR="${2:-}" TASK="${3:-}" DRY_RUN="${4:-}" AIDER_BIN="${AIDER_BIN:-${GOOSE_AIDER_BIN:-/root/aider/.venv/bin/aider}}" if [[ -z "$ENGINE" || -z "$PROJECT_DIR" || -z "$TASK" ]]; then echo "Usage: coding_router.sh [--dry-run]" exit 1 fi if [[ ! -d "$PROJECT_DIR" ]]; then echo "Project dir not found: $PROJECT_DIR" exit 1 fi choose_engine() { case "$ENGINE" in aider) echo "aider" ;; goose) echo "goose" ;; auto) if echo "$TASK" | grep -qE '修复|bug|Bug|BUG|重构|跨文件|实现|新增|改造|兼容|报错|测试失败|commit|提交|代码修改|开发|feature|refactor|fix'; then echo "aider" else echo "goose" fi ;; *) echo "Unknown engine: $ENGINE" exit 1 ;; esac } SELECTED_ENGINE="$(choose_engine)" echo "Selected engine: $SELECTED_ENGINE" if [[ "$DRY_RUN" == "--dry-run" ]]; then exit 0 fi cd "$PROJECT_DIR" echo "===== git status before =====" git status --short || true case "$SELECTED_ENGINE" in aider) if [[ ! -x "$AIDER_BIN" ]]; then echo "Aider not executable: $AIDER_BIN" exit 1 fi "$AIDER_BIN" --yes-always --message "$TASK" echo "===== git status after =====" git status --short || true ;; goose) echo "Goose developer tools handle this task in-session: $TASK" exit 2 ;; esac