Add QQ gateway runtime support

This commit is contained in:
zenord
2026-08-15 16:56:58 +08:00
parent d79264b11a
commit d59c4a654f
14 changed files with 549 additions and 34 deletions
Executable
+148
View File
@@ -0,0 +1,148 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
GORI_AGENT_HOME="${GORI_AGENT_HOME:-$ROOT_DIR}"
STATE_DIR="$GORI_AGENT_HOME/state"
LOG_DIR="$GORI_AGENT_HOME/logs"
CONFIG_FILE="${GORI_GATEWAY_CONFIG:-$ROOT_DIR/config.json}"
PID_FILE="$STATE_DIR/gori-agent.pid"
LOG_FILE="$LOG_DIR/gori-agent.log"
usage() {
cat <<EOF
Usage: $0 <command> [--config path]
Commands:
setup Run interactive setup
start Start gateway in foreground
start-daemon Start gateway in background
stop Stop background gateway
restart Restart background gateway
status Show gateway status
doctor Check configuration and local agents
logs Follow gateway log
discover-agents List detected local CLI agents
Environment:
GORI_GATEWAY_CONFIG Config path, default: $CONFIG_FILE
EOF
}
ensure_build() {
if [[ ! -f "$ROOT_DIR/dist/cli.js" ]]; then
echo "dist/cli.js not found; building..."
npm run build --prefix "$ROOT_DIR"
fi
}
ensure_state() {
mkdir -p "$STATE_DIR" "$LOG_DIR"
}
is_running() {
[[ -f "$PID_FILE" ]] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null
}
start_daemon() {
ensure_build
ensure_state
if is_running; then
echo "gori-agent already running, pid $(cat "$PID_FILE")"
exit 0
fi
nohup node "$ROOT_DIR/dist/cli.js" start --config "$CONFIG_FILE" >>"$LOG_FILE" 2>&1 &
echo $! >"$PID_FILE"
echo "gori-agent started, pid $(cat "$PID_FILE")"
echo "log: $LOG_FILE"
}
stop_daemon() {
if ! is_running; then
rm -f "$PID_FILE"
echo "gori-agent is not running"
exit 0
fi
local pid
pid="$(cat "$PID_FILE")"
kill "$pid"
rm -f "$PID_FILE"
echo "gori-agent stopped, pid $pid"
}
if [[ $# -lt 1 ]]; then
usage
exit 1
fi
COMMAND="$1"
shift
while [[ $# -gt 0 ]]; do
case "$1" in
--config)
CONFIG_FILE="$2"
shift 2
;;
--help|-h)
usage
exit 0
;;
*)
echo "Unknown argument: $1" >&2
usage >&2
exit 1
;;
esac
done
case "$COMMAND" in
setup)
ensure_build
exec node "$ROOT_DIR/dist/cli.js" setup --config "$CONFIG_FILE"
;;
start)
ensure_build
exec node "$ROOT_DIR/dist/cli.js" start --config "$CONFIG_FILE"
;;
start-daemon)
start_daemon
;;
stop)
stop_daemon
;;
restart)
stop_daemon
start_daemon
;;
status)
ensure_build
if is_running; then
echo "gori-agent process: running, pid $(cat "$PID_FILE")"
else
echo "gori-agent process: not running"
fi
exec node "$ROOT_DIR/dist/cli.js" status --config "$CONFIG_FILE"
;;
doctor)
ensure_build
exec node "$ROOT_DIR/dist/cli.js" doctor --config "$CONFIG_FILE"
;;
discover-agents)
ensure_build
exec node "$ROOT_DIR/dist/cli.js" discover-agents --config "$CONFIG_FILE"
;;
logs)
ensure_state
touch "$LOG_FILE"
exec tail -f "$LOG_FILE"
;;
--help|-h|help)
usage
;;
*)
echo "Unknown command: $COMMAND" >&2
usage >&2
exit 1
;;
esac