新增用户意图确认功能

This commit is contained in:
likun committed 2026-05-13 14:36:44 +08:00
1 parent cf2e4bdd9c
commit b8926f00d7
574 files changed
+97664 -97208

No files matched your search

+101
View File
@@ -0,0 +1,101 @@
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
BACKEND_DIR="${ROOT_DIR}/offline-backend-20260512/backend"
FRONTEND_DIR="${ROOT_DIR}/frontend-web"
RUNTIME_DIR="${ROOT_DIR}/.runtime"
LOG_DIR="${RUNTIME_DIR}/logs"
PID_DIR="${RUNTIME_DIR}/pids"
BACKEND_HOST="${BACKEND_HOST:-0.0.0.0}"
BACKEND_PORT="${BACKEND_PORT:-8001}"
FRONTEND_HOST="${FRONTEND_HOST:-0.0.0.0}"
FRONTEND_PORT="${FRONTEND_PORT:-5174}"
detect_host_ip() {
if command -v hostname >/dev/null 2>&1; then
hostname -I 2>/dev/null | awk '{print $1}'
fi
}
HOST_IP="${HOST_IP:-$(detect_host_ip)}"
HOST_IP="${HOST_IP:-127.0.0.1}"
BACKEND_PUBLIC_BASE_URL="${BACKEND_PUBLIC_BASE_URL:-http://${HOST_IP}:${BACKEND_PORT}}"
FRONTEND_PUBLIC_BASE_URL="${FRONTEND_PUBLIC_BASE_URL:-http://${HOST_IP}:${FRONTEND_PORT}}"
GATEWAY_CORS_ORIGINS="${GATEWAY_CORS_ORIGINS:-http://localhost:${FRONTEND_PORT},http://127.0.0.1:${FRONTEND_PORT},http://${HOST_IP}:${FRONTEND_PORT}}"
mkdir -p "${LOG_DIR}" "${PID_DIR}"
is_running() {
local pid_file="$1"
[[ -f "${pid_file}" ]] || return 1
local pid
pid="$(cat "${pid_file}" 2>/dev/null || true)"
[[ -n "${pid}" ]] || return 1
kill -0 "${pid}" >/dev/null 2>&1
}
stop_by_pid_file() {
local name="$1"
local pid_file="$2"
if ! [[ -f "${pid_file}" ]]; then
echo "${name} is not running (no pid file)."
return 0
fi
local pid
pid="$(cat "${pid_file}" 2>/dev/null || true)"
if [[ -z "${pid}" ]] || ! kill -0 "${pid}" >/dev/null 2>&1; then
echo "${name} is not running (stale pid file removed)."
rm -f "${pid_file}"
return 0
fi
echo "Stopping ${name} (pid ${pid})..."
# Services are started with setsid, so the pid is also the process group id.
# Stop the whole group to avoid leaving Vite/esbuild/uvicorn child processes.
kill "-${pid}" >/dev/null 2>&1 || true
kill "${pid}" >/dev/null 2>&1 || true
for _ in {1..30}; do
if ! kill -0 "${pid}" >/dev/null 2>&1; then
rm -f "${pid_file}"
echo "${name} stopped."
return 0
fi
sleep 0.2
done
echo "${name} did not stop gracefully; killing..."
kill -9 "-${pid}" >/dev/null 2>&1 || true
kill -9 "${pid}" >/dev/null 2>&1 || true
rm -f "${pid_file}"
echo "${name} stopped."
}
stop_by_pattern() {
local name="$1"
local pattern="$2"
if ! command -v pgrep >/dev/null 2>&1; then
return 0
fi
local pids
pids="$(pgrep -f "${pattern}" || true)"
if [[ -z "${pids}" ]]; then
return 0
fi
echo "Stopping ${name} processes matching: ${pattern}"
while IFS= read -r pid; do
[[ -n "${pid}" ]] || continue
[[ "${pid}" != "$$" ]] || continue
kill "${pid}" >/dev/null 2>&1 || true
done <<<"${pids}"
}
+7
View File
@@ -0,0 +1,7 @@
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
"${SCRIPT_DIR}/stop-all.sh"
"${SCRIPT_DIR}/start-all.sh"
+7
View File
@@ -0,0 +1,7 @@
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
"${SCRIPT_DIR}/stop-backend.sh"
"${SCRIPT_DIR}/start-backend.sh"
+7
View File
@@ -0,0 +1,7 @@
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
"${SCRIPT_DIR}/stop-frontend.sh"
"${SCRIPT_DIR}/start-frontend.sh"
+7
View File
@@ -0,0 +1,7 @@
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
"${SCRIPT_DIR}/start-backend.sh"
"${SCRIPT_DIR}/start-frontend.sh"
+34
View File
@@ -0,0 +1,34 @@
#!/usr/bin/env bash
set -euo pipefail
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/env.sh"
PID_FILE="${PID_DIR}/backend.pid"
LOG_FILE="${LOG_DIR}/backend.log"
if is_running "${PID_FILE}"; then
echo "Backend is already running (pid $(cat "${PID_FILE}"))."
echo "URL: http://${HOST_IP}:${BACKEND_PORT}"
exit 0
fi
rm -f "${PID_FILE}"
echo "Starting backend..."
echo "Log: ${LOG_FILE}"
setsid bash -c '
cd "$0" || exit 1
exec env \
GATEWAY_CORS_ORIGINS="$1" \
PYTHONPATH=. \
uv run uvicorn app.gateway.app:app \
--host "$2" \
--port "$3" \
--reload
' "${BACKEND_DIR}" "${GATEWAY_CORS_ORIGINS}" "${BACKEND_HOST}" "${BACKEND_PORT}" \
>"${LOG_FILE}" 2>&1 &
echo "$!" >"${PID_FILE}"
echo "Backend started (pid $(cat "${PID_FILE}"))."
echo "URL: http://${HOST_IP}:${BACKEND_PORT}"
+33
View File
@@ -0,0 +1,33 @@
#!/usr/bin/env bash
set -euo pipefail
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/env.sh"
PID_FILE="${PID_DIR}/frontend.pid"
LOG_FILE="${LOG_DIR}/frontend.log"
if is_running "${PID_FILE}"; then
echo "Frontend is already running (pid $(cat "${PID_FILE}"))."
echo "URL: ${FRONTEND_PUBLIC_BASE_URL}"
exit 0
fi
rm -f "${PID_FILE}"
echo "Starting frontend..."
echo "Log: ${LOG_FILE}"
setsid bash -c '
cd "$0" || exit 1
exec env \
VITE_BACKEND_BASE_URL="$1" \
VITE_LANGGRAPH_BASE_URL="$1/api" \
pnpm exec vite \
--host "$2" \
--port "$3"
' "${FRONTEND_DIR}" "${BACKEND_PUBLIC_BASE_URL}" "${FRONTEND_HOST}" "${FRONTEND_PORT}" \
>"${LOG_FILE}" 2>&1 &
echo "$!" >"${PID_FILE}"
echo "Frontend started (pid $(cat "${PID_FILE}"))."
echo "URL: ${FRONTEND_PUBLIC_BASE_URL}"
+25
View File
@@ -0,0 +1,25 @@
#!/usr/bin/env bash
set -euo pipefail
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/env.sh"
print_status() {
local name="$1"
local pid_file="$2"
local url="$3"
local pattern="$4"
if is_running "${pid_file}"; then
echo "${name}: running (pid $(cat "${pid_file}"))"
echo " ${url}"
elif command -v pgrep >/dev/null 2>&1 && pgrep -f "${pattern}" >/dev/null 2>&1; then
echo "${name}: running (unmanaged by scripts)"
echo " ${url}"
else
echo "${name}: stopped"
fi
}
print_status "Backend" "${PID_DIR}/backend.pid" "http://${HOST_IP}:${BACKEND_PORT}" "${BACKEND_DIR}.*uvicorn app.gateway.app:app.*--port ${BACKEND_PORT}"
print_status "Frontend" "${PID_DIR}/frontend.pid" "${FRONTEND_PUBLIC_BASE_URL}" "${FRONTEND_DIR}.*vite.*--port ${FRONTEND_PORT}"
echo "Logs: ${LOG_DIR}"
+7
View File
@@ -0,0 +1,7 @@
#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
"${SCRIPT_DIR}/stop-frontend.sh"
"${SCRIPT_DIR}/stop-backend.sh"
+7
View File
@@ -0,0 +1,7 @@
#!/usr/bin/env bash
set -euo pipefail
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/env.sh"
stop_by_pid_file "Backend" "${PID_DIR}/backend.pid"
stop_by_pattern "Backend" "${BACKEND_DIR}.*uvicorn app.gateway.app:app.*--port ${BACKEND_PORT}"
+7
View File
@@ -0,0 +1,7 @@
#!/usr/bin/env bash
set -euo pipefail
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/env.sh"
stop_by_pid_file "Frontend" "${PID_DIR}/frontend.pid"
stop_by_pattern "Frontend" "${FRONTEND_DIR}.*vite.*--port ${FRONTEND_PORT}"