Commit Graph
119 Commits
Author SHA1 Message Date
Gmer4Lfe 500f9d92c8 Redact credentials on the way into a stored chat
A stored transcript is replayed into a later prompt when reopened, so a key typed while
changing a setting would be handed back to the model on every subsequent turn.
2026-08-09 19:07:34 -04:00
Gmer4Lfe 67eabdc17c Route every conf writer through the guarded path
Eleven call sites wrote master.conf with tmp+rename and nothing else — no backup, no
parse check, no audit — including the two toggles the UI uses most and the raw editor
that installs a whole hand-edited file.
2026-08-09 19:07:28 -04:00
Gmer4Lfe d9f917ecef Give conf writes a backup, a lock and a read-back before they count
These files are gitignored, so a bad write had nothing to go back to; the escaping order
also stored any value containing a quote truncated but still parseable, which only a
read-back can catch.
2026-08-09 19:07:22 -04:00
Gmer4Lfe c135d46cbc Re-fit once the chat height has finished moving
The transcript animates, so a page measuring it one frame later sized itself from a box caught
mid-collapse and left a dead strip the height the chat was shrinking from.
2026-08-09 13:57:06 -04:00
Gmer4Lfe 4980b62dc2 Pay for the shortcuts list out of the transcript
The toggle joins the other window controls in the banner, and opening the list now costs the
conversation its rows rather than costing the page more height.
2026-08-09 13:28:24 -04:00
Gmer4Lfe d91fa89310 Halve the height of the shut shortcuts strip
A 10px label was inheriting a 1.5 line-height, and its margin duplicated the gap the wrapper
already puts between its children.
2026-08-09 13:19:27 -04:00
Gmer4Lfe d6debc5408 Give the chat shortcuts worth listing, and a place to list them
Four new keys alongside Ctrl+Enter, rendered from the same list the handler reads so the panel
cannot advertise a key that stopped working.
2026-08-09 13:15:58 -04:00
Gmer4Lfe c3ed7262cd Separate whether the chat is expanded from how big expanded is
One is an action taken constantly and the other a preference set once, so the banner names the
size and the composer keeps the toggle.
2026-08-09 12:59:30 -04:00
Gmer4Lfe 1370a29233 Tell the page when the chat changes height
The Scheduler sizes the views above the panel from what the chat leaves, so a chat that resizes
silently grew off the bottom and took its own composer with it.
2026-08-09 12:33:29 -04:00
Gmer4Lfe 6be765a9bf Say there is one chat component, in the places that claimed otherwise
Several headers argued the Scheduler dock was deliberately separate, and the Scheduler's help
never mentioned the assistant at all — including the fix flow that just changed shape.
2026-08-09 12:22:25 -04:00
Gmer4Lfe 8eeb4c3d6c Make the Scheduler panel an instance, not a second chat
It kept its own bar, send loop and poll, which is why a thread there died on reload while the
other two were saved and why its controls had drifted from the same controls everywhere else.
2026-08-09 12:22:07 -04:00
Gmer4Lfe d0ff0c7d5c Teach the chat component what the Scheduler dock needs
Offers, a settable subject, runtime heights and a profile hook — everything the dock does that
the shared component could not, so it can stop being a second implementation.
2026-08-09 11:50:02 -04:00
Gmer4Lfe c431370a68 Put every chat control on one row, the same row everywhere
The picker sat above the transcript and the buttons below it, so the same component read
differently on each surface; size is the only thing a placement should get to choose.
2026-08-09 11:40:01 -04:00
Gmer4Lfe 1afeaf0e15 Give the token ledger its own card on the dashboard
The AI card answers whether the model is healthy now; what it has spent over a month was a
different question crowding it out one line at a time.
2026-08-09 11:00:00 -04:00
Gmer4Lfe 44cf4e7516 Open the dashboard chat collapsed, every time
A size remembered from days ago would push the cards below it down on every load, with nothing
on the page to explain why.
2026-08-09 10:38:21 -04:00
Gmer4Lfe 6cdb0d1eab One profile picker for both surfaces, and open where you left off 2026-08-09 00:56:04 -04:00
Gmer4Lfe d9225d06d9 Route a General Chat question to the profile that fits it 2026-08-09 00:36:13 -04:00
Gmer4Lfe 37784bce6c Offer Troubleshoot as a profile, and say plainly when it has no log 2026-08-09 00:25:52 -04:00
Gmer4Lfe 073352b21e Put the Scheduler dock on the same conversation store as everything else 2026-08-09 00:16:09 -04:00
Gmer4Lfe f4fd17be4d Accept the one retrieval kind the indexer produces and the page offers 2026-08-09 00:08:33 -04:00
Gmer4Lfe f1603349cc Put everything Varaverk persists under one root, state included 2026-08-08 23:26:46 -04:00
Gmer4Lfe d5c36db531 Put every tmpfs path in one place both layers can read 2026-08-08 22:57:29 -04:00
Gmer4Lfe 0f92609425 Give the AI subsystem one profile table and one collection, read everywhere 2026-08-08 22:35:37 -04:00
Gmer4Lfe 0f4d381ac0 Make PHP agree with the clock the rest of the server keeps 2026-08-08 22:35:31 -04:00
Gmer4Lfe 4d00e37ca1 Move the chat into an include, because the second one was going to be a copy 2026-08-08 22:01:06 -04:00
Gmer4Lfe 1e324636e0 Keep conversations, so a useful answer outlives the tab it was asked in 2026-08-08 22:00:58 -04:00
Gmer4Lfe b445ddc2c8 Make a container action tell the truth about what happened
The response was discarded, so a refused stop looked like a completed one, and the payload the
card redraws from is cached for 300s with no invalidation — the container carried on showing as
running until the once-a-minute writer caught up. Stop now confirms; start still does not.
2026-08-07 10:20:11 -04:00
Gmer4Lfe fb50f94ed8 Escape what the monitor page renders, and put the helpers where every page can reach them
The page interpolated media titles, partner hostnames read over the mesh, and docker folder
names straight into innerHTML — its own header claimed otherwise, and the helpers that would
have fixed it were defined in a page it never loads. Container WebUI values now get a scheme
check before they reach window.open().
2026-08-07 10:17:45 -04:00
Gmer4Lfe be306cf86c Let one gate decide every AI surface, so switching AI off actually removes all of it
The Tools card adopted the AI scripts on the host check alone, and api/ai.php only
tested AI_ENABLED in front of ask, so a disabled subsystem still had rows to run and
an endpoint that answered.
2026-08-07 09:49:31 -04:00
Gmer4Lfe bf7a2cc911 Point scripts at the shared host sections, and fix the two reasons those sections could never be found 2026-08-06 23:16:28 -04:00
Gmer4Lfe 4989486f45 Two thirds of the conf was unreachable from the UI, and an empty Config block said nothing about why 2026-08-06 23:08:49 -04:00
Gmer4Lfe 9be6055113 Adopt the AI tools onto the Tools card, but only where the index and the model actually are 2026-08-06 23:02:22 -04:00
Gmer4Lfe 9145a66cef Surface server_reboot.sh on the Tools card without moving it out of the shutdown chain it belongs to 2026-08-06 22:24:30 -04:00
Gmer4Lfe f2d0e18f2c Ask about a run from the row it is on, and stop spending context on health checks when the run was clean 2026-08-06 21:51:55 -04:00
Gmer4Lfe ce0cbd868c Write down the routing every bug so far produced, and check it without asking the model 2026-08-06 21:34:05 -04:00
Gmer4Lfe 917ff43795 Profile permissions belong in one table, because scattered they hid a capability chat was never meant to have 2026-08-06 20:51:19 -04:00
Gmer4Lfe 815ceef276 A question about how a run went should arrive with the run attached, not with directions to the log panel 2026-08-06 18:43:12 -04:00
Gmer4Lfe 269ef9b2de Verify a bug report's component and evidence before filing it 2026-08-05 21:25:00 -04:00
Gmer4Lfe 657ee435d1 Add a copy-out button that formats a report as a pasteable issue 2026-08-05 21:12:40 -04:00
Gmer4Lfe 2c5e412d91 File AI-detected Varaverk defects as deduped reports, surfaced on the AI tab and counted in the coffee report 2026-08-05 20:48:54 -04:00
Gmer4Lfe 714d97dd49 Add an incident journal the troubleshooter reads back, and thinking for diagnosis 2026-08-05 20:26:56 -04:00
Gmer4Lfe 5a813eb4c8 Add a troubleshooting profile with the scoped log, and a deterministic conf-key lookup 2026-08-05 20:18:05 -04:00
Gmer4Lfe aeb8c01370 Show the terse control list when the help block is collapsed 2026-08-05 17:58:29 -04:00
Gmer4Lfe 90eee5674f Guarantee a trailing newline when writing a conf so appends cannot join the last line 2026-08-04 21:20:42 -04:00
Gmer4Lfe 87fa2693f0 Show the reference tables collapsed and the task guide on expand, from one file 2026-08-04 19:45:23 -04:00
Gmer4Lfe 64a28acd64 Keep wrapped list items in their bullet instead of orphaning the continuation 2026-08-04 19:38:58 -04:00
Gmer4Lfe 3ea80ef944 Single-source the scheduler help from markdown the AI index can read 2026-08-04 19:30:38 -04:00
Gmer4Lfe 83508cfb1b Pull partner token ledgers into a RAM cache so fleet totals are fleet-wide 2026-08-04 18:14:38 -04:00
Gmer4Lfe 969a85f303 Record token usage per turn and show daily, weekly and all-time totals by host 2026-08-04 18:04:46 -04:00
Gmer4Lfe b1fdaced9f Restrict the AI tab to HOST1 — the only node with the GPU, Ollama and the index 2026-08-04 17:25:40 -04:00