Commit Graph
287 Commits
Author SHA1 Message Date
Gmer4Lfe d4c19baa32 Folding the Scheduler dock into the shared chat left its scope behind, so the troubleshooter has been diagnosing without the log tail for whatever was open 2026-08-26 17:25:28 -04:00
Gmer4Lfe 128172d3a8 The row counts below four columns were the naive division, not what the board does 2026-08-25 17:21:20 -04:00
Gmer4Lfe 820e8325a6 Docs: the row-height cap is conditional now, and the board's narrow-screen behaviour was nowhere in the page help 2026-08-25 17:15:20 -04:00
Gmer4Lfe 9553ecb16a The two functions the row-overflow hatch added were not in EXPORTS 2026-08-25 17:01:10 -04:00
Gmer4Lfe fb104bf05a Monitor: a rung taller than one screen sizes rows to content, since the page scrolls there anyway and the cap only clipped cards 2026-08-25 16:54:19 -04:00
Gmer4Lfe 1be259b66d Two AI includes documented themselves under names nothing else uses 2026-08-25 16:31:43 -04:00
Gmer4Lfe 2c3c88d067 Say what the include layer exports and what it reads from conf 2026-08-25 16:29:57 -04:00
Gmer4Lfe eda411c0be Give the PHP layer somewhere to record what it swallowed 2026-08-24 18:51:36 -04:00
Gmer4Lfe 9da2760a42 A localStorage guard was covering the layout restore it wrapped 2026-08-24 18:42:34 -04:00
Gmer4Lfe 9333334b7b Bound the two tailscale lookups that were missed when the others were 2026-08-24 18:33:40 -04:00
Gmer4Lfe 206a119a4b Show each container's fallback tier on the Monitor board
The row's left border carries it rather than the status dot, which already means running or
stopped.
2026-08-23 16:38:58 -04:00
Gmer4Lfe 671e7ea5a4 Make fallback coverage something that can actually happen, and say so on the page
fallback.sh starts covered containers with docker start and never creates them, so a coverage list
the partner has never been sent is a promise nothing can keep — all twelve were missing. Adds the
push and remove paths, a readiness card that checks rather than infers, and the fallback state the
assistant needs to answer for it.
2026-08-23 16:38:58 -04:00
Gmer4Lfe fd1ab58598 Declare the Monitor board in one place, so a card's width and position stop living in eighteen inline styles and four media queries 2026-08-23 00:44:30 -04:00
Gmer4Lfe 15d802ae3d Preview mode that survives a reboot, and a fallback log that survives one too 2026-08-22 13:52:34 -04:00
Gmer4Lfe ac17be2cd9 Say fallback, not failover — the synonym was silently matching nothing in three renderers, plus retrying probes and a 2-minute handback window 2026-08-22 13:43:30 -04:00
Gmer4Lfe 5d42a28d34 Each assistant card remembers its own conversation instead of every card resuming the newest one 2026-08-22 08:46:35 -04:00
Gmer4Lfe e5f4ede3f2 Coverage and settings above the chat, tier delays and the probe target alongside them, coverage in three columns 2026-08-22 01:43:07 -04:00
Gmer4Lfe 8ce8f0dfbe The Monitor fallback card described a state file without saying whether anything still writes it 2026-08-22 01:11:00 -04:00
Gmer4Lfe 13c221244e A partner's conf is in the RAM cache, not CONF_DIR, and a commented-out template entry is not configuration 2026-08-22 01:06:24 -04:00
Gmer4Lfe a89b704fa1 Watchdog and Monitor looked the partner up by exact key, and the remote probe passed a quote to cut as a filename 2026-08-22 00:59:24 -04:00
Gmer4Lfe 0f228020ef State-file age is time since the last transition, not staleness, and a preview's state is the one being decided 2026-08-22 00:52:38 -04:00
Gmer4Lfe da15cc7531 Rebuild the Fallback tab around what the daemon is actually doing, not what its last state file said 2026-08-22 00:44:35 -04:00
Gmer4Lfe 5924aae1c0 Fallback read the peer list by exact key, so a partner whose tailnet name differs by one character rendered as UNREACHABLE 2026-08-22 00:34:33 -04:00
Gmer4Lfe 387382ec9f Media Stack called every node local, and a host whose watchdogs never ran reported all clear 2026-08-21 22:50:09 -04:00
Gmer4Lfe 4808a57289 Monitor's partner card read phase flags that only ever describe the mirror, so the owner rendered as not provisioned on the mirror 2026-08-21 21:43:00 -04:00
Gmer4Lfe 96b907acbc Say what Varaverk itself is using on the System card
The card described the machine and said nothing about the thing whose dashboard
it is. Cache size matters most: VV_CACHE_ROOT is under /tmp, which on Unraid is
RAM, so it is shown against the rootfs percentage it counts against. Jobs are
locks with a live process — four lock files were sitting there and one job was
actually running.
2026-08-21 09:39:52 -04:00
Gmer4Lfe 146be2d0ad Report every failed fetch instead of discarding it
Twenty-four fetch chains ended in an empty catch, which is not error handling
but error deletion: the request fails, nothing renders, nothing is logged, and
the surface sits on Loading forever. That is how the mesh chat's ReferenceError
read as a slow load for as long as it did.
2026-08-21 09:23:51 -04:00
Gmer4Lfe 906375dc23 Share the font map with the function that renders it
_vvNcStyle referenced a const declared inside vvNcRender, so with the
formatting toggle on every mesh transcript threw ReferenceError and drew
nothing. The plain-render early return skipped the line, which is why it looked
like a slow load rather than a broken one.
2026-08-21 09:05:21 -04:00
Gmer4Lfe e1cdf03d40 Say why mesh chat failed instead of retrying a minute later
Every fetch ended in an empty catch, so a failed channel list was
indistinguishable from a slow one: nothing rendered, nothing was logged, and
the next attempt was a backoff tick away. Errors now land in the card's status
line and the console, a failure retries in two seconds, and opening the pane
before the list has arrived asks for it rather than waiting.
2026-08-21 09:00:19 -04:00
Gmer4Lfe 8041da5424 Stop starting Unraid's Node CLI on every Partnership render
`unraid-api apikey` costs 1.98s and ran once per render just to answer whether
a key exists. Cached for a minute — still read from the key store, so a
deletion still shows, a minute later rather than instantly. Partner probes are
multiplexed at the same time.
2026-08-21 08:53:29 -04:00
Gmer4Lfe 7c4f881b57 Render an answer in full instead of folding it behind a control
The fold saved a scroll and cost a click on every long answer, and what it hid
was usually the part worth reading. Follow already handles holding your place
while an answer arrives.
2026-08-21 08:44:08 -04:00
Gmer4Lfe 81abc5adee Add a mesh scope to the Streams card
Local stays the default and the cheap path; mesh asks each partner for its own
sessions over SSH, live rather than cached, because a stream is true for
minutes and a cached one would be confidently wrong about the only thing the
card exists to say.
2026-08-21 08:38:37 -04:00
Gmer4Lfe 331b7b6b13 Resolve a peer from tailscale status before falling back to DNS
MagicDNS does not work on this mesh, so `tailscale ip -4` missed and blocked on
a system DNS lookup until it timed out: 5.04s per call against 0.010s for the
status parse, paid by every mesh operation on both hosts. Exact match first, so
no precision is traded for the speed.
2026-08-21 08:38:37 -04:00
Gmer4Lfe fe23c59e0c Stop the process-list pipeline writing broken-pipe noise to stderr 2026-08-21 08:26:28 -04:00
Gmer4Lfe 666e1ebab2 Silence the sampler pipeline's broken-pipe chatter 2026-08-21 08:24:55 -04:00
Gmer4Lfe 3d05276312 Reach the integrated-graphics check on a box with no nvidia-smi 2026-08-21 08:24:20 -04:00
Gmer4Lfe 00fdee5649 Detect Intel integrated graphics, which nvidia-smi cannot see
HOST2 has UHD Graphics 730 and reported no GPU at all. An iGPU has no VRAM,
no sensor of its own and no encode/decode split, so it is drawn from the
per-engine busy figures Intel actually publishes and the fields it lacks are
null rather than a confident zero.
2026-08-21 08:23:14 -04:00
Gmer4Lfe 4a29e7bc99 Read the CPU temperature instead of the alarm threshold beside it
lm-sensors prints high= and crit= on the same line as the reading, so scraping
the line for its largest number reported a flat 100C on Intel while the shell's
last-field parse got a bare ")" and never fired at all. One parse in the
adapter now, preferring Tdie over Tctl since Tctl carries a +27C offset.
2026-08-21 08:17:36 -04:00
Gmer4Lfe aa16fbaa8b Stop calling an empty parity slot an emulated disk
mdNumDisabled counts a slot that was never populated, so HOST2 reported
"Emulating 1 disk" for a parity2 slot with no disk in it. Emulation is a
data-disk state, and an assigned identity is what separates a slot that lost
its disk from one that never had one.
2026-08-21 08:07:38 -04:00
Gmer4Lfe 9c15df8e22 Report the owner's model and index on a mirror's Monitor card
A mirror was probing an Ollama it does not have and an index it never builds,
so the card read "unreachable / not built" about the wrong machine while the
model it actually uses was up. The card now names whose figures it is showing.
2026-08-21 07:59:50 -04:00
Gmer4Lfe 111c70d6b4 Bill a turn to the node that asked, not the node that generated
Every turn runs on the AI owner now, so the ledger's per-host column had
collapsed to a single name and the fleet breakdown said nothing. The asking
node travels with the request and is validated before it is written, which
also retires ai_token_sync.sh — a partner ledger is empty by construction.
2026-08-20 20:04:08 -04:00
Gmer4Lfe 0621f66889 Share one AI across the mesh instead of confining it to the owner
Curated state copied to every node is state that can disagree, so the index,
the model and the shared memory stay on the owner and each node reaches them
over the SSH trust onboarding already builds. Chats stay on the node that had
them; memory and bug reports stay the owner's to write.
2026-08-20 19:53:28 -04:00
Gmer4Lfe 4accd6b67e Raise the assistant's mark 2026-08-17 18:09:34 -04:00
Gmer4Lfe 63ec110177 Place the assistant's mark with a transform, not a background percentage
The image is wider than the transcript is tall, so as a background it overflowed and percentage positioning ran backwards — nudging it down visibly raised it.
2026-08-17 18:08:27 -04:00
Gmer4Lfe a27bb41b42 Nudge the mark: lower in the assistant, higher in the mesh 2026-08-17 18:06:52 -04:00
Gmer4Lfe eaa78452bc Enter asks, Ctrl+Enter breaks the line — in both chat modes
Almost every message here is one line, so the common action takes the bare key. Shift+Enter also breaks a line, because that is the reflex people arrive with.
2026-08-17 18:04:13 -04:00
Gmer4Lfe 4eb0a9c608 Offer the assistant the same formatting the mesh composer has, and drop the mark lower
Colour is chosen by name and mapped to a fixed value here, so the model never writes a style property — the same closed-set rule the mesh store uses.
2026-08-17 18:01:45 -04:00
Gmer4Lfe 2e646f82b4 Sync expand state between the two chat modes, and soften the mark
To the operator there is one box on screen, so expanding while reading the assistant and finding the mesh collapsed reads as the card forgetting.
2026-08-17 17:56:32 -04:00
Gmer4Lfe 74bd40ba78 Carry expand/collapse to the mesh chat, same corner and same glyphs
Both heights ride on the pane as data attributes so the card's mount options decide how big 'more room' is.
2026-08-17 17:52:57 -04:00
Gmer4Lfe 4f99efcf2c Varaverk mark behind every conversation, assistant and mesh, and larger
On the positioned wrapper rather than the scroller — a background on the transcript is anchored to its padding box and drifts as it scrolls.
2026-08-17 17:49:23 -04:00