netgescon-day0/scripts/ops/netgescon-orchestrator-kb-run.sh

165 lines
3.8 KiB
Bash
Executable File

#!/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 <file> [options]
Required:
--backlog <file> Markdown backlog file.
Options:
--query <text> KB query term. Repeatable.
--mode <analyze|execute> Default: analyze.
--task-id <id> Required with --mode execute.
--kb-url <url> Override KB URL.
--api-key <key> Override KB API key.
--orchestrator-bin <path> Override agent-orchestrator binary path.
--work-dir <path> Output directory for generated context files.
--env-file <path> 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