#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" OUT_BASE="$ROOT_DIR/.diagnostics" TS="$(date +%Y%m%d_%H%M%S)" OUT_DIR="$OUT_BASE/diag_$TS" mkdir -p "$OUT_DIR" log() { printf '[collect-diagnostics] %s\n' "$1" } capture_cmd() { local name="$1" shift { echo "# $name" echo "# cmd: $*" "$@" } >"$OUT_DIR/$name.txt" 2>&1 || true } log "output: $OUT_DIR" capture_cmd "env_uname" uname -a capture_cmd "env_node_version" node --version capture_cmd "env_npm_version" npm --version capture_cmd "env_git_status" git -C "$ROOT_DIR" status --short capture_cmd "env_git_head" git -C "$ROOT_DIR" rev-parse --short HEAD if [[ -f "$ROOT_DIR/webview.log" ]]; then cp "$ROOT_DIR/webview.log" "$OUT_DIR/webview.log" || true fi if [[ -f "$ROOT_DIR/backend.log" ]]; then cp "$ROOT_DIR/backend.log" "$OUT_DIR/backend.log" || true fi if [[ -f "$ROOT_DIR/frontend/package.json" ]]; then capture_cmd "frontend_lint" bash -lc "cd '$ROOT_DIR/frontend' && npm run -s lint" capture_cmd "frontend_build" bash -lc "cd '$ROOT_DIR/frontend' && npm run -s build" fi PY="" for p in \ "$ROOT_DIR/.venv312/bin/python3.12" \ "$ROOT_DIR/.venv312/bin/python" \ "$ROOT_DIR/.venv/bin/python3" \ "$ROOT_DIR/.venv/bin/python" \ "$ROOT_DIR/venv/bin/python3" \ "$ROOT_DIR/venv/bin/python"; do if [[ -x "$p" ]]; then PY="$p" break fi done if [[ -n "$PY" ]]; then capture_cmd "backend_python_version" "$PY" --version capture_cmd "backend_health_check" "$PY" -c "import importlib; importlib.import_module('backend.main'); print('backend import OK')" fi capture_cmd "list_recent_files" find "$ROOT_DIR" -maxdepth 2 -type f | head -n 200 if command -v tar >/dev/null 2>&1; then tar -czf "$OUT_DIR.tar.gz" -C "$OUT_BASE" "diag_$TS" log "archive: $OUT_DIR.tar.gz" fi log "done"