- Move openclaw-personal-ai-assistant.md from windows_specific/ to OPEN_CLAW/
- Add validate-security.sh: cross-platform security scanner with visual output
- 7 check categories: installation, gateway config, file permissions,
network security, API keys, system security, openclaw doctor
- Green ticks (pass), red crosses (fail), yellow warnings
- Numbered recommendations list with fix commands
- Works on macOS, Linux, and WSL2
Covers: what it is, installation on Windows/WSL2 and macOS, channels,
models, configuration, security, HP Z240 as always-on gateway host,
Tailscale remote access, troubleshooting, CLI reference, and skills.
New capabilities/ subfolder with detailed guides:
- 01: GPU inference speed (benchmarks, Ollama tuning, API usage)
- 02: Whisper batch transcription (scripts, Python integration, use cases)
- 03: TTS generation at scale (Orpheus + Qwen3, batch scripts, voice cloning)
- 04: Fine-tuning / training (LoRA, QLoRA, data prep, Ollama export)
- 05: CUDA / TensorRT / ML research (toolchain setup, Triton kernels, profiling)
- 06: Stable Diffusion / image gen (ComfyUI, SDXL, FLUX, batch generation)
- 07: Multi-GPU workloads (scaling path, eGPU, cloud, cost planning)
- README: index with learning order and prerequisites
Each guide covers: what it is, how to use it, benefits, skills to learn
E1: Per-message action bar (copy, regenerate dropdown, rating) on hover
E2: Per-code-block copy button in MarkdownResponse with 'Copied!' feedback
E3: 'Try with other model' — regenerate dropdown shows loaded models
E4: Live streaming metrics (token count + tok/s during stream)
E5: Rating (thumbs up/down) persisted per message in IndexedDB
- add lib/router.ts with task classifier, model hint mapping, resolve fallback chain, and auto-detect defaults
- integrate auto-routing mode in conversation model selector with __auto__ option
- persist/read model defaults from localStorage (llm-model-defaults)
- route prompts to selected/routed model before streaming
- add multi-modal input controls (attach file, image, voice)
- support attachment chips, removal, drag-and-drop file attach
- add audio transcription flow via /api/whisper/transcribe and append result to input
- support sending attachments payload alongside text from InputBar
- add idb dependency and create typed db layer (conversations/messages/agents/etc)
- extend app/lib/types.ts with v4 workspace interfaces
- move existing dashboard to /mission-control route group
- create / workspace route group with sidebar shell and conversation pages
- implement conversation list grouping + search in sidebar
- implement conversation view with streaming via /api/ollama/chat
- add context bar and token/context utilities
- add /api/ollama/title endpoint for auto-title generation
- add v3->v4 migration utility (llm-inference-log + llm-chat-* to indexeddb)
- wire migration in workspace layout and cmd+/ sidebar toggle
Implements roadmap Phase A tasks A1-A8.
F29: Export/import settings — gear icon in header opens settings popover,
export downloads all llm-* localStorage as JSON, import validates
and merges, both with toast feedback
F30: Inference history log — saves prompt/response/model/metrics to
llm-inference-log (capped 100 FIFO), searchable panel with replay
button, count badge in header toggle
F31: Factory reset — confirm dialog clears all llm-* localStorage keys,
resets all component state to defaults
F24: Vision image upload — file picker for vision models, base64 encoding,
passed through stream API to Ollama generate endpoint
F25: Markdown rendering — ReactMarkdown replaces raw <pre> for all
prompt responses and chat assistant messages
F26: Syntax highlighting — Prism-based code blocks with language labels
and oneDark theme via react-syntax-highlighter
F27: <think> block collapse — auto-detect and collapse DeepSeek R1
reasoning traces into expandable details with word count
F28: Ollama library link — button next to Pull input opens ollama.com/library
N11: Persist tok/s per model to localStorage (llm-model-benchmarks),
display on model card as faded accent text
N12: Live countdown to auto-unload — 1s interval, color-coded
(green >5m, yellow 1-5m, red <1m 'Unloading soon')
N13: Session stats per model (prompts + tokens) in expanded details
N14: Co-load suggestions strip below models list showing which
unloaded models fit in remaining free memory
N6: <think> warning badge for DeepSeek R1 and distilled variants
N7: Vision model indicator for llava, bakllava, moondream, qwen-vl, etc.
N8: Architecture/family badge as pill on every model card
N9: Sort dropdown (A-Z, size, params, running, recent) with localStorage persist
N10: Ollama server version fetched from /api/version, shown in stats card
N1: Estimated RAM per model with quant-aware multipliers (Q4=1.2x, Q5=1.25x, Q8=1.1x, F16=1.05x)
N2: Will-it-fit indicator (green/yellow/red dot) next to Load button
N3: Aggregate loaded model VRAM in panel header badge
BN1: Compare buttons now filter to running models only
BN2: AbortController on compare stream, cancel on modal close
BN5: Delete confirmation shows model name + disk reclaim size
- Created DASHBOARD_PRD.md — full updated PRD with current 19-file
architecture, all 10 API routes, UI layout, data flow, localStorage
keys, security model, and v1-v3 changelog.
- Created DASHBOARD_ROADMAP.md — phased implementation plan for N1-N15
improvements across 4 phases: pre-load intelligence, rich metadata,
model intelligence badges, runtime metrics. Includes acceptance
criteria and implementation details per item.
- Updated DASHBOARD_REVIEW.md — refreshed file inventory to 19 files
(~2,930 lines), fixed broken Tier B markdown table, added cross-links.
- Replaced __LOCAL_LLMs/docs/05-mission-control-dashboard.md with
redirect pointer to new dashboard/docs/ location.
Dashboard docs are now co-located at __LOCAL_LLMs/dashboard/docs/:
- DASHBOARD_PRD.md (product requirements)
- DASHBOARD_REVIEW.md (audit + 39 completed items + N1-N15 proposals)
- DASHBOARD_ROADMAP.md (phased implementation plan)
- New 00-developer-guide.md: start-here doc for developers covering:
- Ollama endpoint (http://localhost:11434/v1) and API key
- curl, TypeScript, Python code examples with env var pattern
- Model selection table by task
- Running extraction service evals locally
- JSON output gotchas (parse from string, <think> strip for R1)
- Model management commands
- Troubleshooting quick reference
- Links to all other docs
- Updated index in LOCAL_LLMs_setup_mac_m4_48gb.md to include doc 00
- Add Parameters, Quantization, and Status columns to models table
- qwen2.5-coder:32b: 32.8B params, Q4_K_M, 18.5 GB disk
- llama3.1:8b: 8B params, Q4_K_M, 4.9 GB disk (confirmed via ollama API)
Move extraction service health check from direct browser fetch
(http://localhost:4005/health) to server-side /api/extraction/health
proxy. Eliminates ERR_CONNECTION_REFUSED console errors when the
extraction service is not running locally.
All bugs (11), code quality (6), features (16), performance (5), and
security (3) items are now checked off. Added Sprint 6 (ed93a6f) and
Sprint 7 (8bdd5ee) to commit log. Updated summary to reflect 100%
completion across 7 sprints.
Features:
- F5: Model comparison side-by-side — after a prompt response, click
any other model to compare. Responses display in two-column grid.
- F7: System resource sparklines — memory usage ring buffer (30 points)
with SVG sparkline component in the memory stats card.
- F8: Ollama logs viewer — collapsible terminal-style panel below main
grid. Fetches from /api/ollama/logs route. Color-coded by level.
- F12: Whisper transcription test — file upload button in Whisper panel.
Uploads audio to /api/whisper/transcribe, displays text + latency.
- F13: Responsive mobile layout — p-3/sm:p-6 padding, gap-3/sm:gap-4,
hidden sm:inline for header text, responsive comparison grid.
- F15: Extraction service panel — health check to localhost:4005 on
each refresh. Status card in right column with endpoint + service.
Code quality:
- CQ5: Skeleton shimmer loading UI — 4 skeleton cards shown while
initial data loads. Uses CSS shimmer animation from globals.css.
Security:
- S3: Documented CORS/auth assumption in code comment — dashboard is
local-only, no auth needed for dev tool.
New files:
- components/Sparkline.tsx — reusable SVG sparkline component
- api/ollama/chat/route.ts — streaming chat endpoint (from Sprint 6)
- api/ollama/logs/route.ts — Ollama log file reader
- api/whisper/transcribe/route.ts — Whisper STT test endpoint
Code quality:
- CQ2: Add CSS utility classes (text-primary/secondary/tertiary, bg-*,
btn-*, input-base) to globals.css — reduces inline style repetition
- CQ5: Add skeleton shimmer animation CSS for loading states
- CQ6: Replace manual model name validation with Zod schema
(PostBodySchema) in Ollama API route
Performance:
- P5: Eagerly warm static cache on module load — system_profiler
no longer blocks first dashboard request
Features:
- F4: Chat mode with multi-turn conversation via new /api/ollama/chat
streaming route. Chat bubble layout, system prompt input, message
history. Toggle between prompt/chat modes in modal.
- F10: Dark/light theme toggle with CSS var overrides in :root.light.
Sun/Moon button in header, persisted in localStorage.
- F14: Model tags (coding, chat, fast, vision, reasoning) with
colored toggle badges in expanded model details. Persisted in
localStorage.
- F16: Auto-load preferred model — star toggle in expanded details.
When Ollama is online but no models loaded, auto-loads the starred
model. Persisted in localStorage.
Performance fixes:
- P1: Add fetchingRef guard to fetchAll() — prevents duplicate requests
from rapid Refresh button clicks or overlapping interval ticks
- P2: Add 5-minute TTL to staticCache (chip, GPU, brew packages) —
previously cached indefinitely per server process, now refreshes
after brew upgrades without requiring a restart
- P3: Add 60-second TTL cache for Ollama models disk usage (du command)
— previously traversed ~/.ollama/models on every 15s refresh cycle,
now reuses cached value for 60s
New features:
- F2: Model search/filter — search input above models list (shown when
4+ models installed). Filters by name, family, and quantization level.
Press / to focus the search input.
- F3: Prompt history — saves last 20 prompts to localStorage with model
name and timestamp. History dropdown in prompt modal with one-click
re-run. Toggle via clock icon in textarea.
- F9: Modelfile viewer — expanded model details now fetch and display
the Modelfile via the show action. Collapsible <details> element
with syntax-highlighted pre block.
- F11: Keyboard shortcuts panel — press ? to toggle. Shows all shortcuts:
? (help), R (refresh), / (search), Esc (close/cancel), Cmd+Enter (send).
Shortcuts only fire when not in an input field.
Component extraction (CQ1):
- lib/types.ts: All interfaces (OllamaData, SystemData, Toast, etc.)
- lib/format.ts: formatBytes, formatUptime utilities
- lib/ollama-config.ts: Shared OLLAMA_URL constant
- components/StatusDot.tsx: Status indicator component
- components/ProgressBar.tsx: Progress bar component
- page.tsx: Now imports from extracted modules, reduced from 1180 to
1077 lines (interfaces + utilities + sub-components removed)
Error boundary (CQ4):
- error.tsx: Next.js App Router error boundary with styled error UI,
stack trace preview, and 'Try again' button
Shared config (CQ3):
- All 3 Ollama API routes now import OLLAMA_URL from lib/ollama-config.ts
instead of duplicating the env var fallback
Security (S1):
- Add MODEL_NAME_RE regex validation on POST /api/ollama — rejects
invalid model names before passing to Ollama API
Security (S2):
- Replace exec() with execFile() for brew package version check —
prevents shell injection if targets list ever becomes dynamic