From 8f6f7cabb2168f697188e6202dd2af9006b44d83 Mon Sep 17 00:00:00 2001 From: Mike Swanson Date: Sun, 7 Jun 2026 08:15:11 -0700 Subject: [PATCH] sync: auto-sync from GURU-5070 at 2026-06-07 08:15:08 Author: Mike Swanson Machine: GURU-5070 Timestamp: 2026-06-07 08:15:08 --- .../howard-bootstrap/PROJECT_STATE.md | 20 -- .../msp-tools/howard-bootstrap/README.txt | 42 ----- .../howard-bootstrap/claude-laptop-setup.bat | 168 ----------------- projects/msp-tools/howard-bootstrap/keys.txt | 3 - projects/msp-tools/howard-bootstrap/setup.bat | 176 ------------------ ...06-mike-mcp-gitauth-reinstall-tailscale.md | 64 +++++++ 6 files changed, 64 insertions(+), 409 deletions(-) delete mode 100644 projects/msp-tools/howard-bootstrap/PROJECT_STATE.md delete mode 100644 projects/msp-tools/howard-bootstrap/README.txt delete mode 100644 projects/msp-tools/howard-bootstrap/claude-laptop-setup.bat delete mode 100644 projects/msp-tools/howard-bootstrap/keys.txt delete mode 100644 projects/msp-tools/howard-bootstrap/setup.bat diff --git a/projects/msp-tools/howard-bootstrap/PROJECT_STATE.md b/projects/msp-tools/howard-bootstrap/PROJECT_STATE.md deleted file mode 100644 index 1e268f8..0000000 --- a/projects/msp-tools/howard-bootstrap/PROJECT_STATE.md +++ /dev/null @@ -1,20 +0,0 @@ -# Howard Bootstrap — Project State - -> Last updated: 2026-04-20 - -**Status:** STALLED -**Last Activity:** 2026-04-16 - -Bootstrap/onboarding setup for Howard's workstation and ClaudeTools integration. The directory contains only a README.txt, keys.txt, and setup.bat — minimal scaffolding. No substantive development has occurred. - -## What Was Done - -- Basic directory structure created -- setup.bat and keys.txt staged for Howard's initial machine setup -- No session logs recorded - -## If Resuming - -- Check `README.txt` for any setup instructions captured -- Determine what Howard still needs configured (vault access, git config, identity.json on his machine) -- Follow ONBOARDING.md process in `.claude/` for any new-machine setup steps diff --git a/projects/msp-tools/howard-bootstrap/README.txt b/projects/msp-tools/howard-bootstrap/README.txt deleted file mode 100644 index 47c42ec..0000000 --- a/projects/msp-tools/howard-bootstrap/README.txt +++ /dev/null @@ -1,42 +0,0 @@ -AZ Computer Guru - ClaudeTools Setup -===================================== - -This package sets up the Claude Code workspace on your machine. - -WHAT'S INCLUDED: - setup.bat - Run this first. It installs everything. - keys.txt - Vault decryption key (if Mike included it) - README.txt - This file - -WHAT IT DOES: - 1. Checks for prerequisites (git, claude, python, sops) - - Auto-installs missing ones via winget - 2. Clones the shared ClaudeTools repo from Gitea - 3. Clones the encrypted credential vault - 4. Sets up the decryption key for vault access - 5. Creates a "ClaudeTools" shortcut on your desktop - -HOW TO RUN: - 1. Extract this zip to any drive (e.g., D:\) - 2. Double-click setup.bat - 3. Follow the prompts (you'll be asked for your Gitea - password on first clone - ask Mike) - 4. After setup, double-click "ClaudeTools" on your desktop - 5. Claude will introduce itself and walk you through everything - -YOUR GITEA ACCOUNT: - URL: https://git.azcomputerguru.com - Username: howard - Password: Ask Mike (you'll change it on first login) - -IF SOMETHING GOES WRONG: - - Close and re-run setup.bat (it's safe to run multiple times) - - If git clone fails: check network/VPN/Tailscale connection - - If vault fails: make sure keys.txt is at - %APPDATA%\sops\age\keys.txt - - Ask Mike or ask Claude (once it's running) - -AFTER SETUP: - Your workspace lives at :\claudetools - Credentials vault at :\vault - Everything syncs to Gitea automatically via /sync command diff --git a/projects/msp-tools/howard-bootstrap/claude-laptop-setup.bat b/projects/msp-tools/howard-bootstrap/claude-laptop-setup.bat deleted file mode 100644 index 117b7e3..0000000 --- a/projects/msp-tools/howard-bootstrap/claude-laptop-setup.bat +++ /dev/null @@ -1,168 +0,0 @@ -@echo off -setlocal EnableExtensions -title AZ Computer Guru - ClaudeTools Laptop Fix -color 0B - -rem ============================================================ -rem ClaudeTools - Laptop Fix (Howard) -rem ------------------------------------------------------------ -rem 1) Installs the programs Claude needs (git, node, claude, -rem python, sops). -rem 2) Stops the "Claude hangs then closes when opened from the -rem claudetools folder" bug by disabling the grepai MCP -rem server (its binary, grepai.exe, is missing on this PC). -rem 3) Makes a desktop launcher that stays open on errors. -rem -rem Safe to run more than once. Targets C:\claudetools. -rem ============================================================ - -set "BASE=C:\claudetools" -set "SCRIPT_DIR=%~dp0" -set "NEEDS_RESTART=0" - -echo ============================================ -echo ClaudeTools - Laptop Fix -echo ============================================ -echo. -echo Installs required programs and stops the -echo hang-then-close problem when opening Claude. -echo. -echo Press any key to start, or close to cancel. -pause >nul - -echo. -echo [1/4] Installing required programs... - -where winget >nul 2>&1 -if errorlevel 1 echo [WARNING] winget missing. Install "App Installer" from the Microsoft Store, then re-run. - -rem --- git (also provides Git Bash, used by the repo) --- -where git >nul 2>&1 -if errorlevel 1 ( - echo [..] installing git... - winget install --id Git.Git -e --accept-package-agreements --accept-source-agreements - set "NEEDS_RESTART=1" -) else ( - echo [OK] git -) - -rem --- node (Claude Code runs on Node) --- -where node >nul 2>&1 -if errorlevel 1 ( - echo [..] installing Node.js LTS... - winget install --id OpenJS.NodeJS.LTS -e --accept-package-agreements --accept-source-agreements - set "NEEDS_RESTART=1" -) else ( - echo [OK] node -) - -rem --- python --- -where py >nul 2>&1 -if errorlevel 1 ( - where python >nul 2>&1 - if errorlevel 1 ( - echo [..] installing Python... - winget install --id Python.Python.3.12 -e --accept-package-agreements --accept-source-agreements - set "NEEDS_RESTART=1" - ) else ( - echo [OK] python - ) -) else ( - echo [OK] python -) - -rem --- sops (vault decryption) --- -where sops >nul 2>&1 -if errorlevel 1 ( - echo [..] installing SOPS... - winget install --id Mozilla.sops -e --accept-package-agreements --accept-source-agreements -) else ( - echo [OK] sops -) - -if "%NEEDS_RESTART%"=="1" ( - echo. - echo ============================================ - echo New programs were installed. CLOSE this - echo window and RUN THIS SCRIPT AGAIN so they - echo are on PATH. The second run finishes up. - echo ============================================ - echo. - pause - exit /b 0 -) - -echo. -echo [2/4] Installing / updating Claude Code... -call npm install -g @anthropic-ai/claude-code -if errorlevel 1 ( - echo [WARNING] Claude Code install reported an error - continuing. -) else ( - echo [OK] Claude Code installed/updated -) - -echo. -echo [3/4] Installing grepai + configuring MCP ^(stops the hang^)... -if not exist "%BASE%" ( - echo [WARNING] %BASE% not found. Make sure ClaudeTools is at %BASE%, then re-run. - goto :launcher -) - -rem --- install grepai.exe shipped alongside this script --- -if exist "%SCRIPT_DIR%grepai.exe" ( - copy /Y "%SCRIPT_DIR%grepai.exe" "%BASE%\grepai.exe" >nul - echo [OK] grepai.exe copied to %BASE% -) else ( - echo [..] grepai.exe not in this package - will disable the MCP server instead -) - -if not exist "%BASE%\.claude" ( - echo [WARNING] %BASE%\.claude not found. - echo Make sure ClaudeTools is at %BASE%, then re-run. - goto :launcher -) - -set "SL=%BASE%\.claude\settings.local.json" -if exist "%SL%" copy /Y "%SL%" "%SL%.bak" >nul - -if exist "%BASE%\grepai.exe" ( - > "%SL%" echo { - >>"%SL%" echo "env": { "CLAUDETOOLS_ROOT": "C:/claudetools" } - >>"%SL%" echo } - echo [OK] grepai.exe present - left enabled -) else ( - > "%SL%" echo { - >>"%SL%" echo "env": { "CLAUDETOOLS_ROOT": "C:/claudetools" }, - >>"%SL%" echo "disabledMcpjsonServers": ["grepai"] - >>"%SL%" echo } - echo [OK] grepai MCP server disabled - Claude will no longer hang -) -if exist "%SL%.bak" echo ^(old settings backed up to settings.local.json.bak^) - -:launcher -echo. -echo [4/4] Creating desktop launcher... -set "SHORTCUT=%USERPROFILE%\Desktop\ClaudeTools.bat" -> "%SHORTCUT%" echo @echo off ->>"%SHORTCUT%" echo title ClaudeTools - AZ Computer Guru ->>"%SHORTCUT%" echo cd /d C:\claudetools ->>"%SHORTCUT%" echo claude %%* ->>"%SHORTCUT%" echo if errorlevel 1 ( ->>"%SHORTCUT%" echo echo. ->>"%SHORTCUT%" echo echo [WARNING] Claude exited with an error - window kept open so you can read it. ->>"%SHORTCUT%" echo pause ->>"%SHORTCUT%" echo ^) -echo [OK] created %SHORTCUT% - -echo. -echo ============================================ -echo Done -echo ============================================ -echo. -where claude >nul 2>&1 && claude --version || echo [WARNING] claude not on PATH yet - open a NEW window. -echo. -echo Open a NEW window, then double-click "ClaudeTools" -echo on your Desktop. It should open without hanging. -echo. -pause -endlocal diff --git a/projects/msp-tools/howard-bootstrap/keys.txt b/projects/msp-tools/howard-bootstrap/keys.txt deleted file mode 100644 index 5893fdf..0000000 --- a/projects/msp-tools/howard-bootstrap/keys.txt +++ /dev/null @@ -1,3 +0,0 @@ -# created: 2026-03-30T13:53:19-07:00 -# public key: age1qz7ct84m50u06h97artqddkj3c8se2yu4nxu59clq8rhj945jc0s5excpr -AGE-SECRET-KEY-1DE3V6V0ZLLZ45A7GA77M79CTN4LZQMTRCURP8VRGNLV6T2FSZEEQXUW2EU diff --git a/projects/msp-tools/howard-bootstrap/setup.bat b/projects/msp-tools/howard-bootstrap/setup.bat deleted file mode 100644 index 715c3fc..0000000 --- a/projects/msp-tools/howard-bootstrap/setup.bat +++ /dev/null @@ -1,176 +0,0 @@ -@echo off -setlocal EnableDelayedExpansion -title AZ Computer Guru - ClaudeTools Setup -color 0A - -echo ============================================ -echo AZ Computer Guru - ClaudeTools Bootstrap -echo ============================================ -echo. -echo This sets up the Claude Code workspace on -echo this machine. Takes about 5 minutes. -echo. -echo Press any key to start, or Ctrl+C to cancel. -pause >nul - -:: Determine target drive (same drive as this script) -set "DRIVE=%~d0" -set "BASE=%DRIVE%\claudetools" -set "VAULT=%DRIVE%\vault" -set "AGE_DIR=%APPDATA%\sops\age" -set "SCRIPT_DIR=%~dp0" - -echo. -echo [1/7] Checking prerequisites... - -:: Check git -where git >nul 2>&1 -if %ERRORLEVEL% neq 0 ( - echo [!] git not found. Installing via winget... - winget install --id Git.Git -e --accept-package-agreements --accept-source-agreements - echo [!] Please close and reopen this script after git installs. - pause - exit /b 1 -) -echo [OK] git found - -:: Check claude -where claude >nul 2>&1 -if %ERRORLEVEL% neq 0 ( - echo [!] Claude Code not found. Installing... - winget install --id Anthropic.ClaudeCode -e --accept-package-agreements --accept-source-agreements 2>nul - if %ERRORLEVEL% neq 0 ( - echo [!] winget install failed. Try: npm install -g @anthropic-ai/claude-code - echo OR download from https://claude.ai/download - pause - exit /b 1 - ) -) -echo [OK] Claude Code found - -:: Check sops -where sops >nul 2>&1 -if %ERRORLEVEL% neq 0 ( - echo [!] SOPS not found. Installing via winget... - winget install --id Mozilla.sops -e --accept-package-agreements --accept-source-agreements -) -echo [OK] SOPS found - -:: Check python -where python >nul 2>&1 -if %ERRORLEVEL% neq 0 ( - echo [!] Python not found. Installing via winget... - winget install --id Python.Python.3.12 -e --accept-package-agreements --accept-source-agreements - echo [!] Please close and reopen this script after Python installs. - pause - exit /b 1 -) -echo [OK] Python found - -echo. -echo [2/7] Setting up age decryption key... - -if not exist "%AGE_DIR%" mkdir "%AGE_DIR%" -if exist "%SCRIPT_DIR%keys.txt" ( - copy /Y "%SCRIPT_DIR%keys.txt" "%AGE_DIR%\keys.txt" >nul - echo [OK] Age key installed from bootstrap package -) else if exist "%AGE_DIR%\keys.txt" ( - echo [OK] Age key already present -) else ( - echo [!!] Age decryption key not found! - echo. - echo Ask Mike for the keys.txt file and place it at: - echo %AGE_DIR%\keys.txt - echo. - echo Without this file, credential vault access won't work. - echo Setup will continue but vault commands will fail until - echo the key is in place. - echo. - pause -) - -echo. -echo [3/7] Cloning ClaudeTools repo... - -if not exist "%BASE%\.git" ( - git clone https://howard@git.azcomputerguru.com/azcomputerguru/claudetools.git "%BASE%" - if %ERRORLEVEL% neq 0 ( - echo [!] Clone failed. Check your Gitea credentials. - echo Username: howard - echo Password: ask Mike for initial password - pause - exit /b 1 - ) - echo [OK] Cloned to %BASE% -) else ( - echo [OK] Already exists, pulling latest... - cd /d "%BASE%" && git pull -) - -echo. -echo [4/7] Cloning Vault repo... - -if not exist "%VAULT%\.git" ( - git clone https://howard@git.azcomputerguru.com/azcomputerguru/vault.git "%VAULT%" - if %ERRORLEVEL% neq 0 ( - echo [!] Vault clone failed. Check credentials. - pause - exit /b 1 - ) - echo [OK] Cloned to %VAULT% -) else ( - echo [OK] Already exists, pulling latest... - cd /d "%VAULT%" && git pull -) - -echo. -echo [5/7] Configuring git identity... - -cd /d "%BASE%" -git config user.name "Howard Enos" -git config user.email "howard@azcomputerguru.com" -cd /d "%VAULT%" -git config user.name "Howard Enos" -git config user.email "howard@azcomputerguru.com" -echo [OK] Git identity set to Howard Enos - -echo. -echo [6/7] Creating desktop shortcut... - -set "SHORTCUT=%USERPROFILE%\Desktop\ClaudeTools.bat" -( -echo @echo off -echo title ClaudeTools - AZ Computer Guru -echo cd /d "%BASE%" -echo claude -) > "%SHORTCUT%" -echo [OK] Created: %SHORTCUT% - -echo. -echo [7/7] Verifying setup... - -echo Repo: %BASE% -echo Vault: %VAULT% -echo Age key: %AGE_DIR%\keys.txt -if exist "%AGE_DIR%\keys.txt" ( - echo Vault: [OK] key present - cd /d "%BASE%" - bash "%VAULT%/scripts/vault.sh" list 2>nul | find /c ".sops.yaml" >nul 2>&1 && echo Decrypt: [OK] vault accessible || echo Decrypt: [!] vault test failed -) else ( - echo Vault: [!] key missing - ask Mike -) - -echo. -echo ============================================ -echo Setup Complete! -echo ============================================ -echo. -echo Next steps: -echo 1. Double-click "ClaudeTools" on your desktop -echo 2. Claude will ask who you are - say "Howard" -echo 3. Claude will walk you through the system -echo. -echo If you need the vault key, ask Mike. -echo Your Gitea login: howard / (ask Mike for password) -echo. -pause diff --git a/session-logs/2026-06-06-mike-mcp-gitauth-reinstall-tailscale.md b/session-logs/2026-06-06-mike-mcp-gitauth-reinstall-tailscale.md index c42a3fc..9f1bcf6 100644 --- a/session-logs/2026-06-06-mike-mcp-gitauth-reinstall-tailscale.md +++ b/session-logs/2026-06-06-mike-mcp-gitauth-reinstall-tailscale.md @@ -163,3 +163,67 @@ Ran the **3-way Multi-AI review** (Gemini via `agy` + Grok + Claude Code Review - Real second-model backends: `@google/gemini-cli` (`gemini` npm, v0.45.2, Google OAuth) via `ask-gemini.sh`; grok 0.2.22 via `ask-grok.sh`. Both verified `OK`. - Memory added: `reference_antigravity_agy_not_headless.md`. - ff.py: `.claude/scripts/ff.py`, daemon `localhost:9333`, profile `~/.claude/ff-profile`. + +--- + +## Update: 2026-06-07 08:13 PDT — GuruRMM beta dashboard: alert-count fix (prod) + 3 sidebar features (rail expand, light-mode theming, resizable spine) + +### Summary + +Merged the prior session's infra-spine hitbox + pin branch to gururmm `main` (auto-built to beta). Mike then reported the Alerts page summary chips disagreed with the lists they open. Diagnosed TWO predicate mismatches making the list >= the chip: (1) the Critical/Warning chips counted `status != 'resolved'` but clicked `status:""` (all statuses incl. resolved), and (2) `get_alert_summary` scoped counts to the last 7 days while the alert list has NO time window. Fixed both — chips now click `status:"unresolved"`, and dropped the 7-day window from the summary SQL so all four chips deterministically equal their lists. Code Review APPROVED. Merged `6b4cee4`: the dashboard half to beta, the server `get_alert_summary` change to the SHARED API (= prod immediately). + +Mike reported Warning still wrong post-deploy. Diagnosed via the live API + a `gururmm` RMM-agent tail of `/var/log/gururmm-build.log` as DEPLOY TIMING, not a bug: the fast Vite dashboard deployed first while the slow Rust server didn't restart with the dropped window until **14:31:33 UTC** (after he looked). Confirmed corrected: `summary.warning` 2->4, `total` 104->152 (the 2 "missing" warnings were just >7 days old; 0 resolved). + +Built three sidebar features (Howard/Mike requests), each Coding-Agent-built + reviewed, each on its own branch -> build-verify -> merge to beta: +- **Rail expand** (`a6d355f`): the far-left FunctionRail gets a persistent toggle (localStorage `gururmm.rail.expanded`, cross-tab) widening it w-12->w-52 with inline labels; expanded mode inlines the "More" items; collapsed unchanged. Code Review APPROVED. +- **Sidebar light-mode theming** (`d2c9236`): the left panes were hardcoded always-dark. Gave the light theme a soft-grey `--sidebar-bg` (95%) / border (88%) and swapped sidebar-surface `text-white/N` -> `text-foreground/N` (1:1 opacity) across FunctionRail/InfrastructureSpine/ContextTree, PRESERVING the white-on-red alert badges + the dark hover tooltip. Dark mode unchanged. +- **Resizable spine** (`3c210e0`): drag the spine's right edge (180-480px, persisted `gururmm.spine.width`); width via inline style, transition off mid-drag; `setPointerCapture` + a teardown ref close the release-outside-window and unmount-mid-drag edge cases; keyboard arrows on the handle. Code Review APPROVED + the 2 robustness fixes applied. + +### Key Decisions + +- **Alert fix Part 2 = Option B (drop the 7-day window), Mike-approved despite prod impact** (the summary SQL is on the shared API; there is no separate beta API server). `status:"unresolved"` == the summary's `status != 'resolved'` because only 3 statuses exist (active/acknowledged/resolved — verified against schema + every write path). +- **Each sidebar feature is self-contained in its component** (FunctionRail/InfrastructureSpine self-manage state; no Layout.tsx change), reflowing via the existing flex row. +- **Theming preserves white-on-colored** (badge, tooltip) — only sidebar-surface text/bg/border became `foreground` tokens. +- **Did NOT promote beta -> prod** (Mike still reviewing); only the unavoidable server alert-count change is live on prod. +- Deferred the review's FunctionRail DRY (hoist PRIMARY_ITEMS) + `aria-current` nits to a future sidebar touch. + +### Problems Encountered + +- **Warning chip stale post-deploy** — deploy timing (slow Rust server restart at 14:31:33 UTC after the fast dashboard), not a logic bug. Confirmed via live API + RMM build-log tail. +- **First RMM dispatch failed** (`jq: Invalid numeric literal`) from nested JSON escaping in the command payload; rebuilt with `jq -n --arg` per the /rmm skill. +- Every feature branch needed a rebase onto `main` (CI version-bump commits advance `main` after each merge); each was a clean ff/rebase. + +### Configuration Changes (submodule `projects/msp-tools/guru-rmm`, repo `azcomputerguru/gururmm` — NOT the claudetools repo) + +- `dashboard/src/pages/Alerts.tsx` + `server/src/db/alerts.rs` — `6b4cee4` (alert chips + drop 7-day window) +- `dashboard/src/components/FunctionRail.tsx` — `a6d355f` (rail expand) +- `dashboard/src/index.css` + `FunctionRail.tsx`/`InfrastructureSpine.tsx`/`ContextTree.tsx` — `d2c9236` (theming) +- `dashboard/src/components/InfrastructureSpine.tsx` — `3c210e0` (resizable) +- All on `origin/main` (gururmm), deployed to beta; the `alerts.rs` change also on prod. The claudetools submodule pointer is left at pinned `226ba9f` (lagging — expected; not bumped). + +### Infrastructure & Servers + +- gururmm server `172.16.3.30:3001`; webhook build pipeline -> version bumps -> dashboard (beta web root `/var/www/gururmm/dashboard-beta`) + server (shared API restart). Server restarted **14:31:33 UTC** for the alert fix. +- `gururmm` RMM agent id `5e5a7ebc-95ea-40c8-b965-6ec15d63e157` (the server's own agent; used to tail the build log with no SSH). +- Alert data snapshot (2026-06-07): total 152, critical 23, warning 4 (3 active + 1 acknowledged), 0 resolved warnings. + +### Commands & Outputs + +- Alert diag: `GET /api/alerts/summary`, `GET /api/alerts?severity=warning&status=unresolved&limit=500` (JWT from vault `infrastructure/gururmm-server.sops.yaml credentials.gururmm-api.*`). +- RMM build-log tail: `POST /api/agents//command` with a `jq -n --arg`-built shell payload, then poll `/api/commands/`. +- Per feature: `git checkout -b` -> Coding Agent -> Code Review Agent -> `npm run build` (exit 0) -> `git push origin :main` (ff) -> beta. + +### Pending / Incomplete Tasks + +- **Promote dashboard beta -> prod** (`sudo /opt/gururmm/promote-dashboard.sh --confirm` on `.30`) when Mike's happy — ships the whole redesign + these 4 dashboard changes. The server alert-count change is already on prod. +- FunctionRail DRY refactor (hoist `PRIMARY_ITEMS`) + `aria-current` (deferred review nits). +- Light-sidebar shade (95%) is a default — tweak after Mike's visual review on beta. +- `ff.py` visual verification of the light-mode sidebar offered (needs that Firefox profile logged into beta). +- Alert list `limit:200` pagination edge (a bucket >200 would show a chip number larger than the visible list) — pre-existing, noted. +- Carried: dev_admin re-login for credential reveal; Robert Wolkin printer type; vault GuruRMM `DATABASE_URL`; SPEC-018 errors; rotate MSP360 key. + +### Reference Information + +- gururmm `origin/main` this segment: `6b4cee4` alerts, `a6d355f` rail expand, `d2c9236` theming, `3c210e0` resizable spine (on top of prior `fa495ed`/`82e91c8` spine pin/hitbox, also merged this segment). +- New localStorage keys: `gururmm.rail.expanded`, `gururmm.spine.width` (+ `gururmm.spine.pins` from prior). +- beta `https://rmm-beta.azcomputerguru.com`; prod `https://rmm.azcomputerguru.com`.