#!/usr/bin/env bash set -euo pipefail KB_URL="${NETGESCON_KB_URL:-http://192.168.0.53:3838}" API_KEY="${NETGESCON_KB_API_KEY:-}" ORCH_BIN="${NETGESCON_ORCHESTRATOR_BIN:-$HOME/netgescon-orchestrator/.venv/bin/agent-orchestrator}" WORK_DIR="${NETGESCON_ORCHESTRATOR_WORKDIR:-$HOME/netgescon-orchestrator}" ENV_FILE="${NETGESCON_KB_ENV_FILE:-$HOME/.config/netgescon/kb.env}" MODE="analyze" BACKLOG_FILE="" TASK_ID="" QUERY_TERMS=() usage() { cat <<'EOF' Usage: scripts/ops/netgescon-orchestrator-kb-run.sh --backlog [options] Required: --backlog Markdown backlog file. Options: --query KB query term. Repeatable. --mode Default: analyze. --task-id Required with --mode execute. --kb-url Override KB URL. --api-key Override KB API key. --orchestrator-bin Override agent-orchestrator binary path. --work-dir Output directory for generated context files. --env-file Optional shell env file to source before execution. --help Show this message. Environment: NETGESCON_KB_URL Default KB URL. NETGESCON_KB_API_KEY Required for KB search. NETGESCON_ORCHESTRATOR_BIN Default local orchestrator binary. NETGESCON_KB_ENV_FILE Optional env file path. Default: ~/.config/netgescon/kb.env EOF } while [[ $# -gt 0 ]]; do case "$1" in --backlog) BACKLOG_FILE="$2" shift 2 ;; --query) QUERY_TERMS+=("$2") shift 2 ;; --mode) MODE="$2" shift 2 ;; --task-id) TASK_ID="$2" shift 2 ;; --kb-url) KB_URL="$2" shift 2 ;; --api-key) API_KEY="$2" shift 2 ;; --orchestrator-bin) ORCH_BIN="$2" shift 2 ;; --work-dir) WORK_DIR="$2" shift 2 ;; --env-file) ENV_FILE="$2" shift 2 ;; --help) usage exit 0 ;; *) echo "Unknown option: $1" usage exit 1 ;; esac done if [[ -f "$ENV_FILE" ]]; then # shellcheck disable=SC1090 source "$ENV_FILE" KB_URL="${NETGESCON_KB_URL:-$KB_URL}" API_KEY="${NETGESCON_KB_API_KEY:-$API_KEY}" ORCH_BIN="${NETGESCON_ORCHESTRATOR_BIN:-$ORCH_BIN}" WORK_DIR="${NETGESCON_ORCHESTRATOR_WORKDIR:-$WORK_DIR}" fi if [[ -z "$BACKLOG_FILE" || ! -f "$BACKLOG_FILE" ]]; then echo "Backlog file not found: $BACKLOG_FILE" exit 1 fi if [[ "$MODE" == "execute" && -z "$TASK_ID" ]]; then echo "--task-id is required when --mode execute" exit 1 fi if [[ -z "$API_KEY" ]]; then echo "NETGESCON_KB_API_KEY is required" echo "Hint: export it in the shell or put it into $ENV_FILE" exit 1 fi if [[ ! -x "$ORCH_BIN" ]]; then echo "agent-orchestrator binary not found or not executable: $ORCH_BIN" exit 1 fi mkdir -p "$WORK_DIR" if [[ ${#QUERY_TERMS[@]} -eq 0 ]]; then QUERY_TERMS=("anagrafica unica" "ticket operativita" "integrazione contabile") fi timestamp="$(date +%Y%m%d-%H%M%S)" brief_file="$WORK_DIR/kb-brief-$timestamp.md" merged_file="$WORK_DIR/backlog-with-kb-$timestamp.md" curl -fsS "$KB_URL/api/v1/health" >/dev/null { echo "# KB Briefing" echo echo "Generato: $(date '+%Y-%m-%d %H:%M:%S')" echo "KB URL: $KB_URL" echo for query in "${QUERY_TERMS[@]}"; do echo "## Query: $query" echo curl -fsS -H "X-API-Key: $API_KEY" \ --get \ --data-urlencode "q=$query" \ "$KB_URL/api/v1/search" echo echo done } > "$brief_file" { cat "$brief_file" echo echo "---" echo cat "$BACKLOG_FILE" } > "$merged_file" echo "KB brief written to: $brief_file" echo "Merged backlog written to: $merged_file" if [[ "$MODE" == "analyze" ]]; then exec "$ORCH_BIN" analyze-backlog "$merged_file" fi exec "$ORCH_BIN" execute-task "$TASK_ID" --agent auto