Commit Graph

222 Commits

Author SHA1 Message Date
Chris Sherwood
812d13c3da fix(System): correct memory usage percentage calculation
The percentage was using (total - available) / total which excludes
reclaimable buffers/cache, but the displayed "Used RAM" value uses
mem.used which includes them. This mismatch showed 14% alongside
22 GB / 62 GB. Now uses mem.used / mem.total so the percentage
matches the displayed numbers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 13:23:39 -08:00
Chris Sherwood
b0be99700d fix(System): show host OS, hostname, GPU instead of container info
Inside Docker, systeminformation reports the container's Alpine Linux
distro, container ID as hostname, and no GPU. This enriches the System
Information page with actual host details via the Docker API:

- Distribution and kernel version from docker.info()
- Real hostname from docker.info().Name
- GPU model and VRAM via nvidia-smi inside the Ollama container
- Graphics card in System Details (Model, Vendor, VRAM)
- Friendly uptime display (days/hours/minutes instead of minutes only)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 13:23:39 -08:00
Jake Turner
f8117ede68 fix(AI Assistant): inline code rendering 2026-02-08 13:20:10 -08:00
Jake Turner
6745dbf3d1 feat: move KB UI into AI Assistant UI 2026-02-08 13:20:10 -08:00
Jake Turner
8726700a0a feat: zim content embedding 2026-02-08 13:20:10 -08:00
Chris Sherwood
c2b6e079af fix(Downloads): sort active downloads by progress descending
Items actively downloading now appear at the top of the download list
instead of the bottom. Sorts by progress percentage descending so the
item furthest along is always first, and queued items (0%) are last.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-08 13:14:04 -08:00
Jake Turner
12286b9d34 feat: display model download progress 2026-02-06 16:22:23 -08:00
Jake Turner
2e0ab10075 feat: cron job for system update checks 2026-02-06 15:40:30 -08:00
dependabot[bot]
40741530fd build(deps): bump @adonisjs/bodyparser from 10.1.2 to 10.1.3 in /admin
Bumps [@adonisjs/bodyparser](https://github.com/adonisjs/bodyparser) from 10.1.2 to 10.1.3.
- [Release notes](https://github.com/adonisjs/bodyparser/releases)
- [Commits](https://github.com/adonisjs/bodyparser/compare/v10.1.2...v10.1.3)

---
updated-dependencies:
- dependency-name: "@adonisjs/bodyparser"
  dependency-version: 10.1.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-06 14:41:47 -08:00
Chris Sherwood
1a95b84a8c feat(docs): polish docs rendering with desert-themed components
Add custom Markdoc renderers for images, links, paragraphs, code blocks,
inline code, and horizontal rules. Restyle existing heading, table, and
list components to match the desert tactical color palette. Add 8
screenshots to docs with polished image presentation (rounded corners,
shadow, captions). Constrain content width for readability.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 14:41:30 -08:00
Chris Sherwood
8b8e00de8b fix(docs): remove double period after LLC on about page
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 14:41:30 -08:00
Chris Sherwood
f3c16c674c fix(docs): display FAQ as uppercase in sidebar
Add title override map so 'faq' displays as 'FAQ' instead of 'Faq'.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 14:41:30 -08:00
Chris Sherwood
184e96df06 docs: note that Wikipedia selection replaces previous download
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 14:41:30 -08:00
Chris Sherwood
c4730511c9 docs: remove installation section from getting-started
Users reading in-app docs already have NOMAD installed. Remove
install instructions, system requirements, and security/privacy
sections that duplicate the README. Start directly with Easy Setup.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 14:41:30 -08:00
Chris Sherwood
a8f41298fd docs: remove minimum specs, align recommended specs with website
Drop minimum specs section — NOMAD is a premium resource designed
for robust hardware. Align recommended storage to 500 GB+ SSD to
match projectnomad.us. Add Internet-in-a-Box mention for users
seeking a lightweight alternative.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 14:41:30 -08:00
Chris Sherwood
ceaba61574 fix(docs): point Wikipedia/reference link to Content Explorer
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 14:41:30 -08:00
Chris Sherwood
aadaac8169 fix(docs): point Wikipedia Selector refs to /settings/zim/remote-explorer
The Wikipedia Selector lives at Content Explorer
(/settings/zim/remote-explorer), not Content Manager (/settings/zim).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 14:41:30 -08:00
Chris Sherwood
d9ed8e9602 fix(docs): correct broken internal links to match actual routes
Fix links verified against routes.ts:
- /settings → /settings/system
- /settings/updates → /settings/update (singular)
- /settings/maps-manager → /settings/maps
- /settings/wikipedia-selector → /settings/zim
- /settings/zim-manager → /settings/zim
Replace Wikipedia Selector references with Content Manager to
match sidebar labels in SettingsLayout.tsx.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 14:41:30 -08:00
Chris Sherwood
efb4db4fa8 fix(docs): correct Install Apps link to /settings/apps
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 14:41:30 -08:00
Chris Sherwood
3dde0c149b docs: overhaul in-app documentation and add sidebar ordering
Update all 6 documentation files and docs_service.ts:

- home.md: Add AI Chat, Knowledge Base, and Benchmark sections;
  replace Open WebUI references with built-in AI Chat links;
  expand Quick Links table with new features

- getting-started.md: Update Easy Setup steps to match current
  wizard (Capabilities/Maps/Content/Review); replace Open WebUI
  section with AI Assistant and Knowledge Base sections; add
  Wikipedia Selector and System Benchmark docs; update GPU specs

- faq.md: Add AI, Knowledge Base, Benchmark, and curated tier
  FAQ entries; add troubleshooting for AI Chat, Knowledge Base
  uploads, and benchmark submission; update all references from
  Open WebUI to built-in AI Chat; add Discord community link

- use-cases.md: Add Knowledge Base mentions across Emergency Prep,
  Homeschooling, Remote Work, Privacy, and Academic Research use
  cases; add "Upload Relevant Documents" setup step; update
  privacy section to emphasize built-in AI

- about.md: Fix "ultime" typo, add project evolution paragraph,
  add community links section

- release-notes.md: Add all versions from v1.11.0 through v1.23.0
  with accurate dates and changes from git history; consolidate
  patch versions; update Support section with Discord link

- docs_service.ts: Replace alphabetical sidebar sort with custom
  ordering (Home > Getting Started > Use Cases > FAQ > About >
  Release Notes)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 14:41:30 -08:00
Jake Turner
36b6d8ed7a fix: rework content tier system to dynamically determine install status
Removes the InstalledTier model and instead checks presence of files on-the-fly. Avoid broken state by handling on the server-side vs. marking as installed by client-side API call
2026-02-04 22:58:21 -08:00
Jake Turner
fcc749ec57 feat: improve global error reporting with user notifs 2026-02-04 22:58:21 -08:00
Jake Turner
52e90041f4 feat(Maps): maps use full page by default 2026-02-04 21:54:36 -08:00
Jake Turner
c3278efc01 fix(AI): add cloud flag to fallback models 2026-02-04 21:35:18 -08:00
Jake Turner
6b17e6ff68 fix(Curated Collections): ensure resources are not duplicated on fetch-latest 2026-02-04 21:35:18 -08:00
Jake Turner
d63c5bc668 feat: add back to home link on standard header 2026-02-04 21:10:31 -08:00
Jake Turner
5e584eb5d0 fix(Kiwix): avoid restarting container while download jobs running 2026-02-04 17:58:50 -08:00
Jake Turner
cc61fbea3b fix(Docs): add pretty rendering for tables 2026-02-04 17:05:47 -08:00
Jake Turner
bfc6c3d113 fix(Docker): ensure containers fully removed on failed service install 2026-02-04 17:05:34 -08:00
Jake Turner
a91c13867d fix: filter cloud models from API response 2026-02-04 17:05:20 -08:00
Jake Turner
d4cbc0c2d5 feat(AI): add fuzzy search to models list 2026-02-04 16:45:12 -08:00
Jake Turner
fa8300b5df fix(Maps): ensure asset urls resolve correctly 2026-02-03 23:34:32 -08:00
Jake Turner
42568a9e7e fix(Settings): rename port column in Apps Settings 2026-02-03 23:33:49 -08:00
Jake Turner
ab07551719 feat: auto add NOMAD docs to KB on AI install 2026-02-03 23:15:54 -08:00
Jake Turner
907982062f feat(Ollama): cleanup model download logic and improve progress tracking 2026-02-03 23:15:54 -08:00
Jake Turner
5de3c5f261 fix: hide chat button and page unless AI Assistant installed 2026-02-03 23:15:39 -08:00
Chris Sherwood
18e55c747a fix(Wikipedia): prevent loading spinner overlay during download
The LoadingSpinner component defaults to fullscreen mode which renders
a Semantic UI dimmer overlay with "Loading" text. This was overlapping
with the blue "Downloading Wikipedia" status banner.

Changed to use fullscreen={false} iconOnly to render just the spinner
icon inline within the banner.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 23:15:16 -08:00
Chris Sherwood
738b57e854 fix(EasySetup): scroll to top when navigating between steps
Adds a useEffect that smoothly scrolls the window to the top whenever
the wizard step changes. This ensures users always see the beginning
of each step content rather than remaining scrolled down from the
previous step.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 23:14:50 -08:00
Chris Sherwood
2c4fc59428 feat(ContentManager): Display friendly names instead of filenames
Content Manager now shows Title and Summary columns from Kiwix metadata
instead of just raw filenames. Metadata is captured when files are
downloaded from Content Explorer and stored in a new zim_file_metadata
table. Existing files without metadata gracefully fall back to showing
the filename.

Changes:
- Add zim_file_metadata table and model for storing title, summary, author
- Update download flow to capture and store metadata from Kiwix library
- Update Content Manager UI to display Title and Summary columns
- Clean up metadata when ZIM files are deleted

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 23:14:28 -08:00
Jake Turner
9731ce839d fix(Docker): pin Qdrant and Ollama versions 2026-02-02 00:26:26 +00:00
Jake Turner
a697d930fe feat(AI): add Ollama support for NVIDIA and AMD GPUs 2026-02-02 00:24:10 +00:00
Jake Turner
d1f40663d3 feat(RAG): initial beta with preprocessing, embedding, semantic retrieval, and ctx passage 2026-02-01 23:59:21 +00:00
Jake Turner
1923cd4cde feat(AI): chat suggestions and assistant settings 2026-02-01 07:24:21 +00:00
Jake Turner
029c2176f7 fix(Chat): sidebar display 2026-02-01 05:48:23 +00:00
Jake Turner
31c671bdb5 fix: service name defs and ollama ui location 2026-02-01 05:46:23 +00:00
Jake Turner
4584844ca6 refactor(Benchmarks): cleanup api calls 2026-02-01 05:23:11 +00:00
Jake Turner
a2aa33168d fix: remove heroicons references and unused icons 2026-01-31 21:00:51 -08:00
Chris Sherwood
68f374e3a8 feat: Add dedicated Wikipedia Selector with smart package management
Adds a standalone Wikipedia selection section that appears prominently in both
the Easy Setup Wizard and Content Explorer. Features include:

- Six Wikipedia package options ranging from Quick Reference (313MB) to Complete
  Wikipedia with Full Media (99.6GB)
- Card-based radio selection UI with clear size indicators
- Smart replacement: downloads new package before deleting old one
- Status tracking: shows Installed, Selected, or Downloading badges
- "No Wikipedia" option for users who want to skip or remove Wikipedia

Technical changes:
- New wikipedia_selections database table and model
- New /api/zim/wikipedia and /api/zim/wikipedia/select endpoints
- WikipediaSelector component with consistent styling
- Integration with existing download queue system
- Callback updates status to 'installed' on successful download
- Wikipedia removed from tiered category system to avoid duplication

UI improvements:
- Added section dividers and icons (AI Models, Wikipedia, Additional Content)
- Consistent spacing between major sections in Easy Setup Wizard
- Content Explorer gets matching Wikipedia section with submit button

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 21:00:51 -08:00
Chris Sherwood
f6db05bed2 fix(benchmark): Detect Intel Arc Graphics on Core Ultra processors
When running in Docker, the systeminformation library cannot see the
host's GPU hardware. This adds a fallback to detect Intel integrated
graphics from the CPU model name, similar to how we handle AMD APUs
with Radeon graphics.

Intel Core Ultra processors (Meteor Lake, Arrow Lake) include Intel
Arc Graphics integrated. This change detects "Core Ultra" in the CPU
brand and reports "Intel Arc Graphics (Integrated)" as the GPU model.

Note: This is for display purposes only - Ollama does not support
Intel integrated graphics for AI acceleration.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 20:43:41 -08:00
Chris Sherwood
b9ebc6c54e fix(EasySetup): Remove built-in System Benchmark from wizard
System Benchmark is a built-in feature that doesn't require installation,
so it shouldn't appear in the Easy Setup Wizard where users select things
to install. Users can access the benchmark through Settings > Benchmark.

- Removed benchmark entry from ADDITIONAL_TOOLS array
- Removed unused isBuiltInCapability helper and related dead code
- Simplified renderCapabilityCard by removing built-in specific styling
- Removed unused IconArrowRight import

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 20:41:35 -08:00
Jake Turner
adf76d272e fix: remove Open WebUI 2026-01-31 20:39:49 -08:00
Jake Turner
0da050c5a3 fix(UI): switch to tabler icons only for consistency 2026-01-31 20:39:49 -08:00
Jake Turner
243f749090 feat: [wip] native AI chat interface 2026-01-31 20:39:49 -08:00
Jake Turner
50174d2edb feat(RAG): [wip] RAG capabilities 2026-01-31 20:39:49 -08:00
Jake Turner
c78736c8da feat(Docker): avoid repulling existing images 2026-01-31 20:39:49 -08:00
Jake Turner
cb85785cb1 feat(Ollama): fallback list of recommended models if API down 2026-01-28 15:54:15 -08:00
Chris Sherwood
2921017191 feat(collections): Expand curated categories and improve tier modal UX
- Add 3 new curated categories: DIY & Repair, Agriculture & Food, Computing & Technology
- Reorganize content logically (moved DIY/food content from Survival to appropriate new categories)
- Update tier selection modal to show only each tier's own resources
- Add "(plus everything in X)" text for inherited tier content
- Reduces visual redundancy and makes tiers easier to compare

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 13:47:01 -08:00
Chris Sherwood
9a93fc9e04 feat: Expand Legal Notices and move to bottom of Settings sidebar
- Move Legal Notices to bottom of Settings sidebar (below System)
- Add Third-Party Software Attribution section (Kiwix, Kolibri, Open WebUI, Ollama, CyberChef, FlatNotes)
- Add Privacy Statement (zero telemetry, local-first, no accounts, offline-capable)
- Add Content Disclaimer for third-party content
- Add Medical and Emergency Information Disclaimer
- Add Data Storage section with installation paths

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 13:45:43 -08:00
Chris Sherwood
08f9722b59 fix(migrations): Fix timestamp ordering for builder_tag migration
The migration file used a 10-digit timestamp (1769324448) while all other
migrations use 13-digit timestamps. When sorted numerically, this caused
the builder_tag ALTER TABLE migration to run before the benchmark_results
CREATE TABLE migration, breaking fresh installs.

Renamed: 1769324448 -> 1769324448000 (append 000 to match 13-digit format)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 13:43:21 -08:00
Jake Turner
8cfe490b57 feat: subscribe to release notes 2026-01-27 23:22:26 -08:00
Jake Turner
c8de767052 feat(Maps): automatically download base assets if missing 2026-01-27 20:49:56 -08:00
Chris Sherwood
e7336f2a8e fix(SystemInfo): Fall back to fsSize when disk array is empty
The Storage Devices section on System Information showed "No storage
devices detected" because the disk info file (/storage/nomad-disk-info.json)
returned an empty array. The fsSize data from systeminformation was
available but not used as a fallback.

Applies the same fallback pattern from the Easy Setup wizard (PR #90):
- Try disk array first, filtering to entries with totalSize > 0
- Fall back to fsSize data when disk array is empty
- Deduplicate fsSize entries by size (same disk mounted multiple places)
- Filter to real block devices (/dev/), excluding virtual filesystems
- Update Storage Devices count in System Status to match

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 20:28:45 -08:00
chriscrosstalk
7a5a254dd5
feat(benchmark): Require full benchmark with AI for community sharing (#99)
* feat(benchmark): Require full benchmark with AI for community sharing

Only allow users to share benchmark results with the community leaderboard
when they have completed a full benchmark that includes AI performance data.

Frontend changes:
- Add AI Assistant installation check via service API query
- Show pre-flight warning when clicking Full Benchmark without AI installed
- Disable AI Only button when AI Assistant not installed
- Show "Partial Benchmark" info alert for non-shareable results
- Only display "Share with Community" for full benchmarks with AI data
- Add note about AI installation requirement with link to Apps page

Backend changes:
- Validate benchmark_type is 'full' before allowing submission
- Require ai_tokens_per_second > 0 for community submission
- Return clear error messages explaining requirements

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(benchmark): UI improvements and GPU detection fix

- Fix GPU detection to properly identify AMD discrete GPUs
- Fix gauge colors (high scores now green, low scores red)
- Fix gauge centering (SVG size matches container)
- Add info tooltips for Tokens/sec and Time to First Token

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix(benchmark): Extract iGPU from AMD APU CPU name as fallback

When systeminformation doesn't detect graphics controllers (common on
headless Linux), extract the integrated GPU name from AMD APU CPU model
strings like "AMD Ryzen AI 9 HX 370 w/ Radeon 890M".

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(benchmark): Add Builder Tag system for community leaderboard

- Add builder_tag column to benchmark_results table
- Create BuilderTagSelector component with word dropdowns + randomize
- Add 50 adjectives and 50 nouns for NOMAD-themed tags (e.g., Tactical-Llama-1234)
- Add anonymous sharing option checkbox
- Add builder tag display in Benchmark Details section
- Add Benchmark History section showing all past benchmarks
- Update submission API to accept anonymous flag
- Add /api/benchmark/builder-tag endpoint to update tags

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat(benchmark): Add HMAC signing for leaderboard submissions

Sign benchmark submissions with HMAC-SHA256 to prevent casual API abuse.
Includes X-NOMAD-Timestamp and X-NOMAD-Signature headers.

Note: Since NOMAD is open source, a determined attacker could extract
the secret. This provides protection against casual abuse only.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 00:24:31 -08:00
Jake Turner
1b31c6f80d fix(Open WebUI): install status indicator 2026-01-24 15:37:09 -08:00
Chris Sherwood
5afc3a270a feat: Improve curated collections UX with persistent tier selection
- Add installed_tiers table to persist user's tier selection per category
- Change tier selection behavior: clicking a tier now highlights it locally,
  user must click "Submit" to confirm (previously clicked = immediate download)
- Remove "Recommended" badge and asterisk (*) from tier displays
- Highlight installed tier instead of recommended tier in CategoryCard
- Add "Click to choose" hint when no tier is installed
- Save installed tier when downloading from Content Explorer or Easy Setup
- Pass installed tier to modal as default selection

Database:
- New migration: create installed_tiers table (category_slug unique, tier_slug)
- New model: InstalledTier

Backend:
- ZimService.listCuratedCategories() now includes installedTierSlug
- New ZimService.saveInstalledTier() method
- New POST /api/zim/save-installed-tier endpoint

Frontend:
- TierSelectionModal: local selection state, "Close" → "Submit" button
- CategoryCard: highlight based on installedTierSlug, add "Click to choose"
- Content Explorer: save tier after download, refresh categories
- Easy Setup: save tiers on wizard completion

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 15:33:50 -08:00
Jake Turner
64e6e11389 feat(Docker): container URL resolution util and networking improvs 2026-01-24 15:27:56 -08:00
Chris Sherwood
e31f956289 fix(benchmark): Fix AI benchmark connectivity and improve error handling
- Add OLLAMA_API_URL environment variable for Docker networking
- Use host.docker.internal to reach Ollama from NOMAD container
- Add extra_hosts config in compose for Linux compatibility
- Add downloading_ai_model status with clear progress indicator
- Show model download progress on first AI benchmark run
- Fail AI-only benchmarks with clear error if AI unavailable
- Display benchmark errors to users via Alert component
- Improve error messages with error codes for debugging

Fixes issue where AI benchmark silently failed due to NOMAD container
being unable to reach Ollama at localhost:11434.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 15:27:56 -08:00
Jake Turner
8ae47e03d8 fix(Notifications): improve styling 2026-01-23 22:25:18 +00:00
Chris Sherwood
b94deef437 feat: Update Settings nomenclature and add tiered content collections
- Rename 'Models Manager' to 'AI Model Manager'
- Rename 'ZIM Manager' to 'Content Manager'
- Rename 'ZIM Remote Explorer' to 'Content Explorer'
- Rename 'Curated ZIM Collections' to 'Curated Content Collections'
- Add tiered category collections (Essential/Standard/Comprehensive) to
  Content Explorer, matching the Easy Setup Wizard Step 3 for consistency
- Reorganize Settings sidebar alphabetically

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 14:22:04 -08:00
Chris Sherwood
42a18c8dc6 fix(EasySetup): select valid primary disk for storage projection bar
The storage projection bar was blindly using disk[0], which on systems
with multiple drives (like the Minisforum AI X1 Pro) could be an empty
or uninitialized drive (e.g., sda showing N/A / N/A).

Now the disk selection:
1. Filters out disks with totalSize === 0 (invalid/empty drives)
2. Prefers disk containing root (/) or /storage mount point
3. Falls back to largest valid disk if no root mount found

This fixes the NaN% and 0 Bytes display on multi-drive systems.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 14:20:11 -08:00
Jake Turner
4ef954c9b5 fix(UI): remove splash screen 2026-01-23 14:17:25 -08:00
Jake Turner
f49b9abb81 fix(Maps): static path resolution 2026-01-23 14:17:25 -08:00
Jake Turner
d5db024eee feat(Queues): support working all queues with single command 2026-01-23 11:07:47 -08:00
Jake Turner
a42b6b85f6 fix(Benchmark): use node:crypto IFO uuid package 2026-01-22 21:48:12 -08:00
Jake Turner
525eecbbde fix(Benchmark): icon definitions 2026-01-22 21:48:12 -08:00
Jake Turner
8092fb58d8 fix(Benchmark): remove unused seeder definition 2026-01-22 21:48:12 -08:00
Jake Turner
438d683bac fix(Benchmark): cleanup types for SSOT 2026-01-22 21:48:12 -08:00
Chris Sherwood
6efd049424 fix(benchmark): Add settings nav link, fix submission bug, improve UX
- Add Benchmark to Settings sidebar navigation
- Fix Luxon DateTime bug when saving submission timestamp
- Add privacy explanation text before Share button
- Add error handling and display for failed submissions
- Show "Submitting..." state and success confirmation
- Add link to view leaderboard after successful submission

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 21:48:12 -08:00
Chris Sherwood
755807f95e feat: Add system benchmark feature with NOMAD Score
Add comprehensive benchmarking capability to measure server performance:

Backend:
- BenchmarkService with CPU, memory, disk, and AI benchmarks using sysbench
- Database migrations for benchmark_results and benchmark_settings tables
- REST API endpoints for running benchmarks and retrieving results
- CLI commands: benchmark:run, benchmark:results, benchmark:submit
- BullMQ job for async benchmark execution with SSE progress updates
- Synchronous mode option (?sync=true) for simpler local dev setup

Frontend:
- Benchmark settings page with circular gauges for scores
- NOMAD Score display with weighted composite calculation
- System Performance section (CPU, Memory, Disk Read/Write)
- AI Performance section (tokens/sec, time to first token)
- Hardware Information display
- Expandable Benchmark Details section
- Progress simulation during sync benchmark execution

Easy Setup Integration:
- Added System Benchmark to Additional Tools section
- Built-in capability pattern for non-Docker features
- Click-to-navigate behavior for built-in tools

Fixes:
- Docker log multiplexing issue (Tty: true) for proper output parsing
- Consolidated disk benchmarks into single container execution

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 21:48:12 -08:00
dependabot[bot]
6bee84f367 build(deps): bump lodash from 4.17.21 to 4.17.23 in /admin
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-22 16:44:10 -08:00
Chris Sherwood
24f10ea3d5 feat: Use friendly app names on Dashboard with open source attribution
Updates the Dashboard to use the same user-friendly names as the Easy Setup
Wizard, giving credit to the open source projects powering each capability:

- Kiwix → Information Library (Powered by Kiwix)
- Kolibri → Education Platform (Powered by Kolibri)
- Open WebUI → AI Assistant (Powered by Open WebUI + Ollama)
- FlatNotes → Notes (Powered by FlatNotes)
- CyberChef → Data Tools (Powered by CyberChef)

Also reorders Dashboard cards to prioritize Core Capabilities first, with
Maps promoted to Core Capability status, followed by Additional Tools,
then system items (Easy Setup, Install Apps, Docs, Settings).

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 16:43:32 -08:00
Chris Sherwood
6c650a0ded fix(docs): Remove broken service links that pointed to invalid routes
Services like Kiwix, Kolibri, and Open WebUI run on separate ports,
not as paths under the Command Center. Links like /kiwix, /kolibri,
and /openwebui don't exist - users must launch these from the Apps
page or home screen.

- Update home.md to direct users to Apps page or home screen
- Update getting-started.md with correct launch instructions
- Keep /maps link (Maps is embedded in Command Center)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 16:32:03 -08:00
dependabot[bot]
6236b29e1c build(deps): bump tar from 7.5.3 to 7.5.6 in /admin
Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.3 to 7.5.6.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.5.3...v7.5.6)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.6
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-22 16:31:21 -08:00
Jake Turner
9bb4ff5afc feat: force-reinstall option for apps 2026-01-19 22:50:15 -08:00
Jake Turner
04e169fe7b fix(Easy Setup): add selected model size to storage projection 2026-01-19 22:50:15 -08:00
Jake Turner
937da5d869 feat(Open WebUI): manage models via Command Center 2026-01-19 22:15:52 -08:00
Jake Turner
b3ef977484 feat: [wip] Open WebUI manipulation 2026-01-19 22:15:52 -08:00
Jake Turner
b6e6e10328 fix(CuratedCategories): improve fetching from Github 2026-01-19 14:41:51 -08:00
copilot-swe-agent[bot]
f905871392 Add NOMAD_STORAGE_PATH schema definition to start/env.ts
Co-authored-by: jakeaturner <52841588+jakeaturner@users.noreply.github.com>
2026-01-19 10:29:24 -08:00
Chris Sherwood
d86c78dba5 feat: Add Windows Docker Desktop support for local development
- Detect Windows platform and use named pipe (//./pipe/docker_engine)
  instead of Unix socket for Docker Desktop compatibility
- Add NOMAD_STORAGE_PATH environment variable for configurable
  storage paths across different platforms
- Update seeder to use environment variable with Linux default
- Document new environment variable in .env.example

This enables local development on Windows machines with Docker Desktop
while maintaining Linux production compatibility.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 10:29:24 -08:00
dependabot[bot]
15aa1f3598 build(deps): bump tar from 7.5.2 to 7.5.3 in /admin
Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.2 to 7.5.3.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.5.2...v7.5.3)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.3
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-19 10:28:58 -08:00
chriscrosstalk
59b45a745a
feat: Redesign Easy Setup wizard Step 1 with user-friendly categories (#65)
- Replace technical app names with user-friendly capability categories:
  - "Information Library" (Kiwix) - offline Wikipedia, medical refs, etc.
  - "Education Platform" (Kolibri) - Khan Academy, K-12 content
  - "AI Assistant" (Open WebUI + Ollama) - local AI chat
- Add bullet point feature lists for each core capability
- Move secondary apps (Notes, Data Tools) to collapsible "Additional Tools"
- Show already-installed capabilities with "Installed" badge and disabled state
- Update terminology: "capabilities" instead of "apps", "content packs" instead of "ZIM collections"
- Update Review step to show capability names with technical names in parentheses

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: Jake Turner <52841588+jakeaturner@users.noreply.github.com>
2026-01-19 10:22:46 -08:00
Chris Sherwood
f414d9e1c0 chore: Rename step 3 label from 'ZIM Files' to 'Content'
More user-friendly terminology for non-technical users.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 10:15:20 -08:00
Chris Sherwood
7bf3f25c47 feat: Add storage projection bar to easy setup wizard
Adds a dynamic storage projection bar that shows users how their
selections will impact disk space:

- Displays current disk usage and projected usage after installation
- Updates in real-time as users select maps, ZIM collections, and tiers
- Color-coded warnings (green→tan→orange→red) based on projected usage
- Shows "exceeds available space" warning if selections exceed capacity
- Works on both Linux (disk array) and Windows (fsSize array)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 10:15:20 -08:00
Chris Sherwood
1027bd8e0f chore: Switch categories URL to raw GitHub for dev reliability
jsDelivr CDN was aggressively caching old data during development.
Raw GitHub URLs provide more immediate updates when pushing changes
to the feature branch.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 10:15:20 -08:00
Chris Sherwood
c9c29955ee chore: Add cache-busting parameter to categories URL
jsDelivr aggressively caches branch references. Adding version
parameter ensures fresh data is fetched when categories are updated.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 10:15:20 -08:00
Chris Sherwood
8e6e44e688 fix: Use jsDelivr CDN for categories JSON to avoid CORS issues
GitHub raw URLs don't allow cross-origin requests from localhost.
Using jsDelivr CDN which serves GitHub content with proper CORS headers.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 10:15:20 -08:00
Chris Sherwood
3cb5dceb1d feat: Add tiered collection categories UI
- Add kiwix-categories.json with Medicine category and 3 tiers
- Create CategoryCard component for displaying category cards
- Create TierSelectionModal for tier selection UI
- Integrate categories into Easy Setup wizard (Step 3)
- Add TypeScript types for categories and tiers
- Fallback to legacy flat collections if categories unavailable

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 10:15:20 -08:00
Chris Sherwood
6f0c829d36 fix: Notification auto-dismiss not working due to stale closure
The removeNotification function was using a stale reference to the
notifications array from the closure scope, causing the setTimeout
callback to filter against an outdated state.

Changed to use functional update pattern (prev => prev.filter(...))
which correctly references the current state when the timeout fires.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 10:06:44 -08:00
Chris Sherwood
109bad9b6e docs: Add installation instructions and CLI maintenance commands
- Add Installation section to getting-started.md with system requirements
- Add install commands, post-install access info
- Add privacy and security notes
- Add Command-Line Maintenance section to FAQ with helper scripts

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 10:05:59 -08:00