Commit Graph

461 Commits

Author SHA1 Message Date
cosmistack-bot a6593dcbe8 chore(release): 1.31.0-rc.3 [skip ci] 2026-04-03 19:28:13 +00:00
chriscrosstalk 00d63aa87a
feat(maps): add scale bar and location markers (#636)
Add distance scale bar and user-placed location pins to the offline maps viewer.

- Scale bar (bottom-left) shows distance reference that updates with zoom level
- Click anywhere on map to place a named pin with color selection (6 colors)
- Collapsible "Saved Locations" panel lists all pins with fly-to navigation
- Full dark mode support for popups and panel via CSS overrides
- New `map_markers` table with future-proofed columns for routing (marker_type,
  route_id, route_order, notes) to avoid a migration when routes are added later
- CRUD endpoints: GET/POST /api/maps/markers, PATCH/DELETE /api/maps/markers/:id
- VineJS validation on create/update
- MapMarker Lucid model

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-03 12:14:50 -07:00
Jake Turner 8277e793ce
fix(Maps): ensure proper parsing of hostnames (#640) 2026-04-03 12:00:09 -07:00
cosmistack-bot 6cd11b8ccb chore(release): 1.31.0-rc.2 [skip ci] 2026-04-02 22:53:09 +00:00
Jake Turner ae435d3419
docs: update release notes 2026-04-02 22:52:20 +00:00
0xGlitch 64737e513f
fix(downloads): improved handling for large file downloads and user-initiated cancellation (#632)
* fix(downloads): increase retry attempts and backoff for large file downloads
* fix download retry config and abort handling
* use abort reason to detect user-initiated cancels
2026-04-02 22:46:17 +00:00
Jake Turner 60ff677098
fix: cache docker list requests, aiAssistantName fetching, and ensure inertia used properly 2026-04-02 22:45:00 +00:00
Jake Turner 44b09946df
feat: gzip compression by default for all registered routes 2026-04-02 20:56:01 +00:00
Jake Turner dc7c5ca0e0
fix(UI): manual import map for DynamicIcon to avoid huge bundle of Tabler icons 2026-04-02 19:03:39 +00:00
Jake Turner 7218b7458b
feat(KnowledgeBase): support up to 5 files upload of 100mb each per req 2026-04-02 18:31:32 +00:00
cosmistack-bot 70d9a65306 chore(release): 1.31.0-rc.1 [skip ci] 2026-04-02 06:55:22 +00:00
Jake Turner 6660de56de docs: update release notes 2026-04-01 23:54:16 -07:00
Jake Turner 266477b68b docs: update CONTRIBUTING.md 2026-04-01 23:54:16 -07:00
Jake Turner 7faf8ef213 docs: update FAQ 2026-04-01 23:54:16 -07:00
Jake Turner 78a9c43c0d feat(Kiwix): migrate to Kiwix library mode for improved stability (#622) 2026-04-01 23:54:16 -07:00
Henry Estela d5a6b319b4 feat(docs): add simple API reference (#615)
Adds tables with method,path and description in /docs/api-reference/
2026-04-01 23:54:16 -07:00
Jake Turner 55a4af5117 chore(deps): bump yaml, fast-xml-parser, pmtiles, tailwindcss, @types/dockerode 2026-04-01 23:54:16 -07:00
Henry Estela ec6a5b4acc feat(AI): enable flash_attn by default and disable ollama cloud (#616)
New defaults:
OLLAMA_NO_CLOUD=1 - "Ollama can run in local only mode by disabling
Ollama’s cloud features. By turning off Ollama’s cloud features, you
will lose the ability to use Ollama’s cloud models and web search."
https://ollama.com/blog/web-search
https://docs.ollama.com/faq#how-do-i-disable-ollama%E2%80%99s-cloud-features
example output:
```
ollama run minimax-m2.7:cloud
Error: ollama cloud is disabled: remote model details are unavailable
```
This setting can be safely disabled as you have to click on a link to
login to ollama cloud and theres no real way to do that in nomad outside
of looking at the nomad_ollama logs.

This one can be disabled in settings in case theres a model out there
that doesn't play nice. but that doesnt seem necessary so far.
OLLAMA_FLASH_ATTENTION=1 - "Flash Attention is a feature of most modern
models that can significantly reduce memory usage as the context size
grows. "

Tested with llama3.2:
```
docker logs nomad_ollama --tail 1000 2>&1 |grep --color -i flash_attn
llama_context: flash_attn    = enabled
```

And with second_constantine/deepseek-coder-v2 with is based on
https://huggingface.co/lmstudio-community/DeepSeek-Coder-V2-Lite-Instruct-GGUF
which is a model that specifically calls out that you should disable
flash attention, but during testing it seems ollama can do this for you
automatically:
```
docker logs nomad_ollama --tail 1000 2>&1 |grep --color -i flash_attn
llama_context: flash_attn    = disabled
```
2026-04-01 23:54:16 -07:00
Jake Turner 7ea52c2c4f fix(Jobs): improved error handling and robustness 2026-04-01 23:54:16 -07:00
chriscrosstalk ed4c2afc73 feat(UI): add Installed Models section to AI Assistant settings (#612)
Surfaces all installed AI models in a dedicated table between Settings
and Active Model Downloads, so users can quickly see what's installed
and delete models without hunting through the expandable model catalog.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 23:54:16 -07:00
Jake Turner bc0b57efc0 fix(Maps): remove unused import 2026-04-01 23:54:16 -07:00
chriscrosstalk fedee18bd3 feat(downloads): rich progress, friendly names, cancel, and live status (#554)
* feat(downloads): rich progress, friendly names, cancel, and live status

Redesign the Active Downloads UI with four improvements:

- Rich progress: BullMQ jobs now report downloadedBytes/totalBytes instead
  of just a percentage, showing "2.3 GB / 5.1 GB" instead of "78% / 100%"
- Friendly names: dispatch title metadata from curated categories, Content
  Explorer library, Wikipedia selector, and map collections
- Cancel button: Redis-based cross-process abort signal lets users cancel
  active downloads with file cleanup. Confirmation step prevents accidents.
- Live status indicator: green pulsing dot with transfer speed for active
  downloads, orange stall warning after 60s of no data, gray dot for queued

Backward compatible with in-flight jobs that have integer-only progress.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(downloads): fix cancel, dismiss, speed, and retry bugs

- Speed indicator: only set prevBytesRef on first observation to prevent
  intermediate re-renders from inflating the calculated speed
- Cancel: throw UnrecoverableError on abort to prevent BullMQ retries
- Dismiss: remove stale BullMQ lock before job.remove() so cancelled
  jobs can actually be dismissed
- Retry: add getActiveByUrl() helper that checks job state before
  blocking re-download, auto-cleans terminal jobs
- Wikipedia: reset selection status to failed on cancel so the
  "downloading" state doesn't persist

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* feat(downloads): improve cancellation logic and surface true BullMQ job states

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Jake Turner <jturner@cosmistack.com>
2026-04-01 23:54:16 -07:00
0xGlitch ab6096ce04 fix(queue): increase BullMQ lockDuration to prevent download stalls (#604) 2026-04-01 23:54:16 -07:00
David Gross 3ddf85d726 fix(Maps): add x-forwarded-proto support to handle https termination (#600) 2026-04-01 23:54:16 -07:00
Henry Estela 36b260aa29 feat: switch all PNG images to WEBP (#575)
* feat(web): Switch all png except favicon to webp format
* fix(docs): use relative path for README project logo
2026-04-01 23:54:16 -07:00
Sebastion 15df90c90d fix: block IPv4-mapped IPv6 and IPv6 all-zeros in SSRF check (#520)
The assertNotPrivateUrl() function blocked standard loopback and link-local
addresses but could be bypassed using IPv4-mapped IPv6 representations:

  - http://[::ffff:127.0.0.1]:8080/ → loopback bypass
  - http://[::ffff:169.254.169.254]:8080/ → metadata endpoint bypass
  - http://[::]:8080/ → all-interfaces bypass

Node.js normalises these to [::ffff:7f00:1], [::ffff:a9fe:a9fe], and [::]
respectively, none of which matched the existing regex patterns.

Add two patterns to close the gap:
  - /^\[::ffff:/i catches all IPv4-mapped IPv6 addresses
  - /^\[::\]$/ catches the IPv6 all-zeros address

Legitimate RFC1918 LAN URLs (192.168.x, 10.x, 172.16-31.x) remain allowed.
2026-04-01 23:54:16 -07:00
Luís Miguel d3c26acebf fix(security): validate key parameter on settings read endpoint#517
Co-authored-by: Jake Turner <52841588+jakeaturner@users.noreply.github.com>
2026-04-01 23:54:16 -07:00
Jake Turner edc5148c9c feat: support adding labels on dynamic container creation (#620)
Co-authored-by: Benjamin Sanders <ben@benjaminsanders.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 23:54:16 -07:00
chriscrosstalk a93cddea74 fix(UI): constrain install activity feed height with auto-scroll (#611)
The App Installation Activity list on the Easy Setup complete page grew
unboundedly, pushing Active Downloads off-screen. Caps the list at ~8
visible items with overflow scrolling, auto-scrolling to keep the latest
activity visible.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 23:54:16 -07:00
0xGlitch b30598c270 feat(maps): add global map download from Protomaps (#525)
* feat(maps): add global map download from Protomaps
* fix: add path traversal check to global map download
2026-04-01 23:54:16 -07:00
Sam 77f703f0f0 docs(readme): format Quick Install command as multiline bash (#569) 2026-04-01 23:54:16 -07:00
chriscrosstalk 2ab6887635 fix(install): add gpg as a required dependency (#574)
The NVIDIA container toolkit setup requires gpg to dearmor the GPG key,
but minimal Debian/Ubuntu installs may not have it present. Adds gpg to
the dependency check alongside curl so it gets installed automatically.

Closes #522

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 23:54:16 -07:00
Jake Turner 82fc96b06b build: regen lockfile 2026-04-01 23:54:16 -07:00
arn6694 99d69369ad feat(rag): add EPUB file support for Knowledge Base uploads (#257) 2026-04-01 23:54:16 -07:00
Salman Chishti 7f549df4cb ci: upgrade GitHub Actions to latest versions (#362) 2026-04-01 23:54:16 -07:00
dependabot[bot] a519004197 build(deps): bump file-type from 21.3.0 to 21.3.2 in /admin (#283)
Bumps [file-type](https://github.com/sindresorhus/file-type) from 21.3.0 to 21.3.2.
- [Release notes](https://github.com/sindresorhus/file-type/releases)
- [Commits](https://github.com/sindresorhus/file-type/compare/v21.3.0...v21.3.2)

---
updated-dependencies:
- dependency-name: file-type
  dependency-version: 21.3.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-01 23:54:16 -07:00
Henry Estela 42ec172d9d feat(AI): enable remote AI chat host 2026-04-01 23:54:16 -07:00
Jake Turner d25292a713
Revert "feat: support adding labels on dynamic container creation (#610)" (#619)
This reverts commit f32ba3bb51.
2026-04-01 11:04:11 -07:00
Benjamin Sanders f32ba3bb51
feat: support adding labels on dynamic container creation (#610)
Co-authored-by: Jake Turner <jturner@cosmistack.com>
2026-04-01 11:03:44 -07:00
Henry Estela 44ecf41ca6 Add model download to FAQ.md 2026-03-26 23:12:49 -07:00
cosmistack-bot 5c92c89813 docs(release): finalize v1.30.3 release notes [skip ci] 2026-03-25 23:40:34 +00:00
cosmistack-bot f9e3773ec3 chore(release): 1.30.3 [skip ci] 2026-03-25 23:39:41 +00:00
cosmistack-bot e5a7edca03 chore(release): 1.30.3-rc.2 [skip ci] 2026-03-25 16:30:35 -07:00
Jake Turner bd015f4c56 fix(UI): improve version display in Settings sidebar (#547) 2026-03-25 16:30:35 -07:00
Jake Turner 0e60e246e1 ops: remove deprecated sidecar-updater files from install script (#546) 2026-03-25 16:30:35 -07:00
Jake Turner c67653b87a fix(UI): use StyledButton in TierSelectionModal for consistency (#543) 2026-03-25 16:30:35 -07:00
cosmistack-bot 643eaea84b chore(release): 1.30.3-rc.1 [skip ci] 2026-03-25 16:30:35 -07:00
Jake Turner 150134a9fa docs: update release notes 2026-03-25 16:30:35 -07:00
Tom Boucher 6b558531be fix: surface actual error message when service installation fails
Backend returned { error: message } on 400 but frontend expected { message }.
catchInternal swallowed Axios errors and returned undefined, causing a
generic 'An internal error occurred' message instead of the real reason
(already installed, already in progress, not found).

- Fix 400 response shape to { success: false, message } in controller
- Replace catchInternal with direct error handling in installService,
  affectService, and forceReinstallService API methods
- Extract error.response.data.message from Axios errors so callers
  see the actual server message
2026-03-25 16:30:35 -07:00
Bortlesboat 4642dee6ce fix: benchmark scores clamped to 0% for below-average hardware
The log2 normalization formula `50 * (1 + log2(ratio))` produces negative
values (clamped to 0) whenever the measured value is less than half the
reference. For example, a CPU scoring 1993 events/sec against a 5000
reference gives ratio=0.4, log2(0.4)=-1.32, score=-16 -> 0%.

Fix by dividing log2 by 3 to widen the usable range. This preserves the
50% score at the reference value while allowing below-average hardware
to receive proportional non-zero scores (e.g., 28% for the CPU above).

Also adds debug logging for CPU sysbench output parsing to aid future
diagnosis of parsing issues.

Fixes #415
2026-03-25 16:30:35 -07:00