Releases: Anirudhx7/marbor
Releases · Anirudhx7/marbor
Release list
v0.20.0
Changelog
- 32ed2f6 Merge remote-tracking branch 'marbor-new/main' into new-name
- f954dba branding: capitalize Marbor + improve banner styling
- d7ca35a build(deps): bump lucide-react from 1.27.0 to 1.33.0 in /ui (#81)
- 589c519 build(deps): bump modernc.org/sqlite from 1.56.0 to 1.57.0 (#77)
- 8f69d5e build(deps-dev): bump @vitejs/plugin-react from 6.0.5 to 6.1.0 in /ui (#80)
- 188eac8 build(deps-dev): bump eslint-plugin-react-refresh in /ui (#79)
- 8165c2e build(deps-dev): bump vite from 8.2.1 to 8.2.2 in /ui (#78)
- ec6c270 chore(release): v0.20.0
- 1d5a8cb chore(rename): complete Phase 1 hard-cutover codebase rename to marbor
- 3182923 chore: complete remaining mesh -> marbor rename (UI, internal, CLI, configs, docs)
- d1e0851 chore: complete residual mesh -> marbor rename
- 9edd2fd chore: regenerate marbor.demo.db for marbor_agent schema rename
- ed6b455 ci(pages): add timeout to deploy job
- 7e96f10 docs(bench/ui): purge dead BENCH-RUNBOOK.md pointers, rename-era MESH_URL vars, real ui README
- 74580b4 docs(readme): centered hero header with marbor branding
- 7ca5b5b docs(runtime): document why MLX is indistinguishable from llama.cpp
- 1cee94b feat(activity): unified fleet activity feed with kind taxonomy and CLI parity
- 784849e feat(admin): expose agent-stale flag on the nodes API
- b82fb12 feat(dashboard): pair Saved-vs-Cloud with Fleet Capacity above the fold
- 56b7b74 feat(dashboard): restructure around fleet health and capacity
- 2a4949e feat(demo): Cloud Providers card fully interactive on /demo/
- 5482666 feat(ui): collapsible sidebar nav with persisted desktop toggle
- 04f2400 fix(admin): bound HF config.json architecture fields against int64 overflow
- 0df1529 fix(admin): check crypto/rand errors, serialize schedule writes, encode JSON properly, audit login/reset
- fdc6722 fix(admin): close login role/status enumeration oracle
- 5e5c043 fix(admin): decode settings body outside the shared config lock
- 09e4fc0 fix(admin): distinguish unreadable system memory from a genuine 0 MB reading
- b5ecda2 fix(admin): eliminate settings-PATCH map aliasing and lost-update races
- ddcfc35 fix(admin): extend P131 overflow guard to the GGUF/Ollama arch input path
- d44ee05 fix(admin): gofmt SystemInfo struct field alignment
- 09fd943 fix(admin): make benchmark job ID collision-proof
- 3a5f207 fix(admin): stop fabricating "all RAM free" when MemAvailable is exhausted
- 38e27b6 fix(admin): stop mislabeling agent/api VRAM readings as nvidia-smi
- 4d70a12 fix(admin): surface ErrUnloadUnsupported as a clear 4xx, not an opaque 502
- 1bf9b83 fix(admin): validate HF repoID, default runtime to node's declared value, cap config cache
- 0c12ac8 fix(agent): add HTTP server timeouts to close slowloris exposure
- 03b82f1 fix(agent): add missing argv terminator to unload command
- 811b62f fix(agent): cap request body size on model pull/delete/unload handlers
- 7f9af74 fix(agent): correct process-liveness detection across three drivers
- 6c6f9f1 fix(agent): explicit --enroll always takes precedence over an existing token
- 98f4226 fix(agent): reject a service Config with only one of CertPath/KeyPath set
- 4aee270 fix(agent): reject leading-dash model names and add argv terminators
- c764ffe fix(agent): reject pid<=0 in readPIDFile
- a2c9145 fix(agent): remove ineffective liveProc PID-reuse guard
- c87addc fix(agent): require admin scope for arbitrary runtime commands
- f6117c6 fix(agent): retain live process handle to close a PID-reuse window
- ae8a760 fix(agent): retry transient runtime-version failures, recover refresh panics
- b9dc518 fix(ansible): register-gpus.yml asserted pre-rename mesh_url var, breaking every run
- 57b231a fix(ansible): remove duplicate register key breaking retry/health-poll
- dbd774d fix(ansible/docs): agent enrollment sent the runtime port as the AGENT's port
- eda6cb9 fix(audit): log a rate-limited warning when AppendAuditLog fails
- b88d6cb fix(auth): hold the lock across Refund's limiter lookup-plus-refund
- 5e6317f fix(auth): make Reload's key-map swap atomic
- b0531f6 fix(auth): parse date-form expires_at in local time, not UTC
- e25ed77 fix(bench): normalize --target trailing slash, drop racy drain goroutine, fix rounding
- 1999334 fix(bench): validate N, check prerequisites, fix scratch-file cleanup and error paths
- cf0efa1 fix(bench): verify actual VRAM eviction before firing a cold TTFT sample
- 02f8a19 fix(ci): add timeout-minutes to the four jobs missing one
- 8f601be fix(ci): fail release job loudly on Pages-deploy dispatch error
- 12b2cd6 fix(ci): register QEMU emulation for arm64 docker release builds
- 01c335d fix(ci): scope pages.yml permissions to the job that needs them
- f713bdc fix(cli): classify 404/405/409/422 as user errors on read-only GET paths
- 89a8e8b fix(cli): fail non-zero when the completion script write fails
- 31b1798 fix(cli): gate 503 passthrough on the health-check path only
- ea5f1b8 fix(cli): local session read failure is a user error, not a server error
- 2d425b3 fix(cli): repair bash/zsh completion after a positional argument, and its syntax entirely
- c5b1462 fix(cli): surface terminal-restore errors, restore echo on SIGINT
- bbffdfe fix(cli): write the session file atomically via temp-then-rename
- 5cdc188 fix(compose): bind Grafana to loopback by default in the monitoring overlay
- b721ad9 fix(config): avoid octal misinterpretation in numeric-IP SSRF guard
- 3a1c27c fix(config): close SSRF gap on cloud providers/webhook, reject duplicate key tokens
- 23c6f85 fix(config): close SSRF guard bypass via integer-encoded hosts
- 15aeaa9 fix(config): extend port-collision check to admin, validate session-affinity TTL, dedupe repeat wildcard-bind warning
- 4326a6b fix(demo): hash the seeded demo admin session token
- b54b584 fix(demo): honor stream:false, bind listeners before printing the banner
- 2069739 fix(demo): inline the demo database so the standalone compose file is self-contained
- 06603ae fix(demo): opt demotraffic into its own non-localhost guard for the compose network
- c40fb06 fix(demo): strip seeded mlx-node row, bind admin/metrics to loopback
- cfe831a fix(demotraffic): distinguish a truncated stream from a genuine 0 tokens
- e7a566a fix(demotraffic): mark synthetic traffic and require opt-in for non-localhost
- 6ea8160 fix(docs): aggregate mismatched labels in the cloud-fallback-rate alert
- 252616f fix(docs): correct grammar left over from mesh -> marbor rename
- 420ced2 fix(gen-docs): mark required flags in group-page FLAGS section
- d1ee4d8 fix(infra): CI hardening, image pinning, arm64 docker, install.ps1 TLS (P365-P374)
- 49f40fd fix(infra): installer sudo -E exit handling for agent role
- 3a817e4 fix(infra): installer/gate/smoke hardening, docs-site URL scheme allowlist (P375-P386)
- 58b4ac7 fix(install): default to a per-user path for non-elevated Windows installs
- c93e8c7 fix(install): disable crash-looping systemd unit before nohup fallback
- 67abce5 fix(install): quote systemd unit paths so a space doesn't break parsing
- f47e776...
v0.19.3
Changelog
- 6b7665c Merge fix/node-agent-scheme-decoupling: decouple Node Agent TLS scheme from runtime URL
- 0c1ca6b chore(demo-db): regenerate mesh.demo.db for new node_agent.scheme column
- 782a4b8 chore(deps): bump framer-motion from 12.42.2 to 13.1.0 in /ui (#75)
- eb15319 chore(deps): bump golang.org/x/crypto from 0.54.0 to 0.55.0 (#71)
- 8a065d2 chore(deps-dev): bump @types/react-dom from 19.2.3 to 19.2.4 in /ui (#72)
- ca6f1e7 chore(deps-dev): bump typescript-eslint from 8.65.0 to 8.67.0 in /ui (#74)
- 3b2cfe2 chore(release): v0.19.3
- 57c46dd feat(model-advisor): context-length feasibility advice (P71)
- e37fbe6 fix(model-advisor): harden P71 context-feasibility correctness
- a3880c4 fix(nodeagent): update stale ollama-mesh-agent invocation strings in agent.go
- 8620c7b fix(router,admin): decouple Node Agent TLS scheme from runtime URL
- 1a85258 fix(ui): add confirm dialog to Regenerate Token (R10)
- f60ca49 fix(ui): address code-review findings on Agent modal restructuring
- 3e8eeed fix(ui): align Agent Port, HTTPS, and Save Connection on one row
- 6366680 fix(ui): box the Agent Connection/TLS Certificate sections in Manage Agent modal
- 74aa7dd fix(ui): don't show plain green Enabled for an unusable HTTPS Agent
- 080231e fix(ui): move Regenerate Token / Disable Agent next to Health Check
- 91e0007 fix(ui): remove redundant status line above the Agent Connection card
- 2d9fb7c fix(ui): separate Runtime and Node Agent config on GPU Nodes page (P90)
- 94ab50f refactor(model-advisor): cache P71 HF/node lookups, dedupe HF fetch, simplify recommendation
v0.19.2
Changelog
- 51b6d70 Merge remote-tracking branch 'origin/main'
- 1315f3c chore(release): v0.19.2
- f589b8a feat(ansible): first-party fleet registration playbook
- 0c9c983 feat(ansible): split fleet enrollment into two independent playbooks
- 0c02937 feat(nodeagent): split Node Agent into a separate ollama-mesh-agent binary
- fffbc5c fix(admin): parse hourly analytics retention keys as UTC
- 9ef57bb fix(admin): reject benchmark runs when proxy port is unconfigured
- 48aafe7 fix(admin): restore per-key policy fields dropped on config reload
- 20a057e fix(admin): use writeJSONError for handleModelRepo's missing-id error
- d389cd4 fix(admin): use writeJSONError instead of hand-built JSON error strings
- 79e98a1 fix(admin,ui): update stale ollama-mesh agent invocation strings
- 09c96df fix(bench): true median calculation, preserve evict/parse error detail
- 4044027 fix(demo): poll for proxy readiness instead of a fixed 500ms sleep
- 9ffbbec fix(demotraffic): stop silently clamping REQUEST_COUNT, flag missing eval_count
- e91a2fd fix(docs): correct fleet-enrollment guide auth model, wire copy buttons on doc site
- a6c4080 fix(loadtest): compute RPS from actual elapsed time, not nominal duration
- bb515c9 fix(mocknode): deterministic OpenAI token-family matching, honor stream:false
- bc827c9 fix(router): POST /admin/nodes upserts by name instead of duplicating live capacity
- ebe3cb9 fix(ttft): drain response body synchronously instead of racing Close()
v0.19.1
Changelog
- 9b24a4e chore(deps): bump modernc.org/sqlite from 1.54.0 to 1.56.0 (#66)
- 9ea8ea6 chore(deps): bump react-router-dom from 7.18.1 to 7.18.2 in /ui (#58)
- 590ce01 chore(deps): bump recharts from 3.10.0 to 3.10.1 in /ui (#57)
- 1afe73d chore(deps-dev): bump @types/node from 24.13.2 to 26.2.0 in /ui (#59)
- 6d892d6 chore(deps-dev): bump eslint from 10.7.0 to 10.8.1 in /ui (#60)
- 291db20 chore(deps-dev): bump vite from 8.1.5 to 8.2.1 in /ui (#61)
- 9b4ad4e chore(release): v0.19.1
- 241856e feat(cli): add "ollama-mesh uninstall" and error on unknown subcommands
- fca1102 feat(ui): click-to-copy on truncated Request Log values (Request ID, Key, Model)
- 0754a45 fix(cli): registry-driven CLI dispatch, strict arg validation, help/docs generation (P83+)
- 83dfd7a fix(install): add Node Agent install dir to PATH on Windows
- 2c60aa0 fix(nodeagent): reject unrecognized agent subcommand instead of silently running foreground
- 519d732 fix(nodeagent): stop agent service status from showing a stale TLS fingerprint
- b9c6fb2 fix(ui): give Request Log table an explicit width instead of implicit auto
- c3f2987 fix(ui): make Request Log Key badge hug its text, not its column width
- 06c48a1 fix(ui): make Request Log table fill its card with calibrated proportions
- 057298e fix(ui): replace click-to-copy with in-place scroll for long Request Log values
- 66a6f4c fix(ui): stop Request Log columns ballooning on wide viewports
- 121e370 fix(ui): stop Request Log table overflowing on long key/id/model values
- 1b8b770 fix(ui): stop Request Log's card wrapper stretching past the table
- 3f56b4d fix: strip internal roadmap phase tag (P24) from public --help/usage text
- 376d7fc test(admin): prove tls_fingerprint null is a no-op, not a clear (P24)
v0.19.0
Changelog
- 364a28a Merge branch 'claude/deprecate-plaintext-token-cli-858c38'
- 91f4370 Merge pull request #54 from Anirudhx7/claude/model-advisor-pull-runtimes-827f51
- 5cea93c Merge pull request #55 from Anirudhx7/claude/mlx-demo-pull-capability
- f3f6447 Merge pull request #62 from Anirudhx7/claude/ollama-mesh-release-consolidation-1bfb43
- 0892dbe Merge pull request #63 from Anirudhx7/feature/p66-local-only-spill
- 8663c17 Merge pull request #64 from Anirudhx7/feature/p67-local-degradation-chain
- 2b22bbb Merge pull request #65 from Anirudhx7/feature/p67-per-key-degradation-policy
- 8c54602 Merge pull request #67 from Anirudhx7/p54-node-agent-token-scoping
- 33e94ae Merge pull request #69 from Anirudhx7/feature/p24-node-agent-tls
- 61dd2d6 Merge pull request #70 from Anirudhx7/feature/p41-routing-explainability
- 0422875 chore(db): regenerate mesh.demo.db for allow_local_degradation column
- 653d08e chore(demo): regenerate mesh.demo.db for P66 schema (spill_counters, local_only)
- 4d4fa92 chore(release): v0.19.0
- d71fd24 chore: regenerate mesh.demo.db for P41 routing_reason/routing_detail columns
- bc32b56 chore: regenerate mesh.demo.db for node_agent.scope column (P54)
- 808ad05 chore: regenerate mesh.demo.db for node_overrides.gpu_indices column
- 707dbb3 chore: regenerate mesh.demo.db for node_overrides.tls_fingerprint (P24)
- f24644c docs(admin): correct P70's CLI-parity claim, note namespaced-tag ambiguity inline
- 10a0f7c docs(config): fix stale header references in local-degradation doc comments
- 52aaff2 feat(admin): TLS fingerprint validation and tls-probe endpoint (P24)
- 4aa2df7 feat(admin): expose local_only + spill counters through the admin API
- b465240 feat(auth): add per-key local_only policy field
- 597ae4d feat(auth): replace client header with per-key allow_local_degradation policy
- b22c264 feat(bench): add SQLite write-path load sweep tool, publish capacity numbers (P53)
- 349fbbb feat(cli): add login/logout/whoami with a persisted session file
- 2319b14 feat(cli): add mesh key set-local-only and mesh spill
- 8f62757 feat(cli): add nodes confirm-tls subcommand (P24)
- ff47718 feat(cli): close CLI parity gaps for models and runtime Group 2 actions
- 54cdbb8 feat(nodeagent): TLS certificate generation and TLS listener (P24)
- 0fc143a feat(proxy): fail closed on local_only keys, wire spill accounting
- f9d8dea feat(router): TLS fingerprint pinning and dial-time verification (P24)
- 40c8bd0 feat(router): hard per-node in-flight cap that sheds instantly (P64) (#68)
- 721fb7d feat(router,admin,cli,ui): per-request routing explainability (P41)
- 4951169 feat(routing): local-first degradation chain before cloud egress (P67)
- 6d5313b feat(store): add TLS fingerprint column with downgrade-safe upsert (P24)
- fbe0d35 feat(store): add spill_counters table and per-key local_only column
- 85239ad feat(ui): TLS fingerprint pinning UI (P24)
- 2bd9e93 feat(ui): add MB/GB unit selector for VRAM total override
- d53b69a feat(ui): local_only toggle on API keys, Cloud Spill section on Analytics
- c854db1 feat(ui): optional paste-to-verify for TLS fingerprint pinning
- ca685cf feat(ui): searchable dropdown for the fallback-chain alternates field
- e211494 feat(ui): searchable model-name dropdown for Settings config cards
- a9d27af fix(admin): close HF search-layer runtime asymmetry for vllm/tgi/mlx (P77)
- dbc9889 fix(admin): declare per-node GPU scope to fix Advisor double-counting and disclose unknown GPU counts (P75 Gaps B/C/D)
- ff9a687 fix(admin): exclude mmproj vision-projector files from GGUF variant list
- 86b9ebd fix(admin): exclude sharded multi-part GGUF files from variant list
- 81e71e3 fix(admin): extract shared disk-telemetry guard, document P73 in CHANGELOG
- 4c853c7 fix(admin): fix multi-GPU VRAM fit for handleModelFit and largest-basis free calc
- 348172c fix(admin): gate Model Advisor catalog fit and pull on runtime/format compatibility (P70)
- a0b1ec1 fix(admin): hard-block model pulls with unknown size on thin disk headroom (P73)
- 5397aa8 fix(admin): patch declared-GPU-scope edge cases found in P75 code review
- b7d9d61 fix(admin): serialize handlePatchNode's TLS validate-to-mutate transaction
- 9c5bd65 fix(admin): size Model Advisor fit against all local GPUs, not GPU 0 only (P69)
- 40302f2 fix(admin): stop excluding vision-language models from vllm/tgi/mlx search (P77 follow-up)
- fbac14a fix(admin): validate resulting TLS pin on URL moves
- 0712e6d fix(admin,ui): make multi-fetch search concurrent/partial-tolerant, fix pipeline_tag badge display (P77 audit)
- c966076 fix(admin,ui): show Model Advisor Pull button for agent-capable non-Ollama nodes
- 05d6363 fix(agent): agent service start/stop --help ignored args, ran the real action
- dc60a77 fix(agent): agent service status --help also ignored args, ran the real check
- c6e7c32 fix(bench): cap loadtest concurrency, correct README env-var claim
- 0000f71 fix(ci): rebuild mesh.demo.db from a clean main checkout
- 8067e95 fix(ci): regenerate demo admin password hash to actually match "admin"
- 0e41dcd fix(ci): update smoke test CLI check for removed --token flag
- a89f4ef fix(cli): address code-review findings on login/logout/whoami
- 86e0645 fix(cli): bench/agent --help now writes to stdout instead of stderr
- 22e075f fix(cli): kill env-secret leak via --help, and 3 more auth findings
- 4ccc088 fix(cli): reject unknown models actions instead of silently listing all models
- da55604 fix(cli): tab-align help tables, add real per-subcommand action help, fix --help exit code
- 6e0f4cc fix(cli): update top-level --help banner for new commands and stale tagline
- 4e02f4b fix(config): reject reserved local/blocked cloud provider names
- 646097e fix(demo): regenerate mesh.demo.db against the fixed admin password hash
- 9fe27cd fix(nodeagent): add per-action token scoping (P54)
- 26b92ec fix(nodeagent): collapse repeated CLI progress lines to one error message
- faaa81a fix(nodeagent): fail closed on unrecognized dotted token scope prefix
- efb7626 fix(nodeagent): fix flaky disk-stats test; expose docker_deployed flag
- 50d23c8 fix(nodeagent,admin): check container's real disk space before a Docker pull
- 30db5fd fix(proxy): harden cloud fallback for /api/embeddings and /api/embed (P78 Phase 1)
- 42f239b fix(proxy): stop truncating unbounded single-JSON responses and clamping unavailable tokens to zero (P80)
- f9f1d31 fix(proxy,admin): preserve real HTTP status through request logging (P82)
- 81145db fix(router): add hard model-identity eligibility filter (P79)
- 884e61e fix(router): preserve/re-derive NodeState.Host across UpdateNodeURL
- 2a3ab01 fix(routing): enforce single-hop local degradation, per-key allow-list, and affinity safety
- bda49dc fix(security): close Node Agent token leak paths (P68)
- 8291b02 fix(security): deprecate plaintext --token CLI args for Node Agent enrollment
- 12b86b7 fix(security): harden UserSession.Token with json:"-"
- ddd5c14 fix(security): remove plaintext --token CLI flag from admin CLI
- 5b772c0 fix(ui): add chevron toggle to the fallback-chain alternates combobox
- b8f806e...
v0.18.8
v0.18.7
Changelog
- 88c91b8 chore(demo): regenerate mesh.demo.db to match current schema
- bb75935 chore(demo-db): regenerate mesh.demo.db for runtime_nodes.host column
- 31f6724 chore(deps-dev): bump typescript-eslint from 8.62.0 to 8.65.0 in /ui (#52)
- 8d753ad docs(changelog): record audit-driven placement/persistence fixes
- f57ba69 feat(router,admin,ui): surface warmup suppression state on the dashboard
- a008766 fix(admin,audit): move hot-path audit-log and local-stat writes off request path
- 6c88a31 fix(nodeagent,router,admin): make Node Agent host-scoped, not runtime-scoped
- 82f2489 fix(router): detect model-name/digest collisions in warm-residency scoring
- 871b5b8 fix(router): drain must block warmup pings and scheduled WarmModels
- b928534 fix(router): interpret free VRAM per-runtime, not universally as free bytes
- fa91606 fix(router): narrow VRAM reservation race in findBestByScore
- 4e01d8d fix(router): penalize stale telemetry in placement scoring
- cb33159 fix(router): predictive warmup engine must respect unload suppression
- 4b3a8d4 fix(router,store): fix node-agent host-scoping gaps from 6c88a31
- 85d3738 fix(router,store): persist session affinity across restart
- ad36139 fix: pause console on Windows fatal exit instead of closing instantly
v0.18.6
v0.18.5
Changelog
- f3d0f18 Merge branch 'feature/p58-runtime-logs' into main
- 0c01d28 Merge remote-tracking branch 'origin/main' into feature/p58-runtime-logs
- 7f5aa9d chore(deps): bump github.com/prometheus/client_golang (#47)
- 8c99319 chore(deps): bump lucide-react from 1.24.0 to 1.27.0 in /ui (#50)
- a43ba07 chore(deps-dev): bump @vitejs/plugin-react from 5.2.0 to 6.0.4 in /ui (#48)
- e12c2b7 chore(deps-dev): bump globals from 16.5.0 to 17.8.0 in /ui (#49)
- c25dfd8 chore(deps-dev): bump vite from 8.1.4 to 8.1.5 in /ui (#51)
- 04dfadf feat(admin): add runtime.logs Admin API dispatch (P58)
- 538f9d9 feat(cli): add mesh runtime logs command (P58)
- d16ee37 feat(nodeagent): add runtime.logs ControlDriver capability (P58)
- 21fc349 feat(ui): add View Logs button to Runtime Control panel (P58)
- 8a68aed fix(auth): recreate rate limiter on Reload and clean up key_counters on delete
- da704cf fix(nodeagent): fix Windows service reinstall race and install.ps1 window close
v0.18.4
Changelog
- dace3d3 fix(nodeagent): handle Windows SCM service control dispatcher via sys/windows/svc to fix error 1053