Commit Graph
523 Commits
Author SHA1 Message Date
Gmer4Lfe 76faf0f9f8 Let an installation add its own tabs without the repo having to name them 2026-08-22 16:37:37 -04:00
Gmer4Lfe 61b7d2a96a Partnership stacks are the owner's declaration, so a mirror must read them from the owner's conf 2026-08-22 14:03:57 -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 b17cc3a09d Say on each node card whose containers the tiers are, since they are the other host's 2026-08-22 09:49:43 -04:00
Gmer4Lfe 1c38abe1d0 Fallback coverage: colour the wait, group by tier, and lock the stacks the partner already runs 2026-08-22 09:33:06 -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 ce613bcf9d Rehome the failover coverage picker on the Fallback tab, five days after it was dropped from Partnership for belonging here 2026-08-22 01:32:08 -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 8454d3d0a2 A dry run does not refresh live state, so say that rather than showing its age as stale 2026-08-22 00:48:16 -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 20998c8c31 The Streams scope was reset to this host on every page load, on a dashboard that is never reloaded by choice 2026-08-21 21:58:24 -04:00
Gmer4Lfe f5d6edd9d0 The mirrored folder layout never reached the container card, which reads Varaverk's own store and not folder.view3's 2026-08-21 21:50:22 -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 d9c37ac763 Add a checker for the two JS faults this plugin has actually shipped
A cross-scope identifier and a fetch chain ending in an empty catch both pass
php -l and node --check, and together they turned a ReferenceError into what
looked like a slow load for hours. --self-test asserts both detectors still
find a known fault, because a checker that silently stops working reports a
confident zero.
2026-08-21 09:32:04 -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 a07019e3aa Fix the parity card referencing a variable the previous commit removed 2026-08-21 08:11:19 -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
Gmer4Lfe be10e78c7a Swap the banner's checkboxes with the mode, and put the mark behind the mesh transcript
The mesh had its own row inside the pane while the banner kept showing the assistant's three, so switching mode left controls on screen that governed nothing visible.
2026-08-17 17:46:29 -04:00
Gmer4Lfe b6a677a710 Toggle reads Mesh Chat 2026-08-17 17:41:53 -04:00
Gmer4Lfe 53d7784d5d Mesh header mirrors the assistant's three checkboxes; composer controls move below and centre
Fixed pane height inherited from the card, so switching mode no longer resizes it.
2026-08-17 17:19:29 -04:00