Asides in fleet tree, Wispr dictation, logging, SuperGrok cost off - #60
Merged
Conversation
Extract pure ToolSummary.summariseInput preferring query/path/command and nested tool_input over Object.keys joins; hermetic tests in make test-web.
…exit SIGHUP (or JEVONS_UPGRADE_EXIT=1) exits without registry.StopAll and writes ~/.jevons/upgrade-handles.json (session_id handoff). Hermetic tests pin ModeUpgrade does not stop agents. Process survival remains residual until claudia connect-mode; drill exits 2; T40 stays converging.
Add toolbar on rendered .mermaid-diagram: Open (bottom-right panel distinct from chat scroll; New tab popout), Copy source (text/plain), and Copy image (PNG via canvas; multi-MIME image/png+text/plain when ClipboardItem is available). Pure helpers in mermaid_actions.js with hermetic unit + Playwright smoke coverage. Bubble scaling unchanged. Co-Authored-By: Grok jv-t83 <noreply@x.ai>
…path Root overseer RHS rows no longer show ~/.jevons/<name>. Aside-purpose agents (and attention chips) get a 💡 title and no path column so descriptions cannot bleed into path chrome; work agents keep T84 paths. Hermetic coverage: web/scripts/fleet_row_test.js and fleet-tree-test UI.
Productize the 2026-08-02 multi-agent failure modes (🎯T111 + children): - T111.2: PushEvent uses Deliver so fleet agents by name work (no "no thread" when agents.json has the target); Participants wired on butler - T111.1: jevons_agent_send queues when prompt in flight; interrupt=true cancels then sends; drain on terminal stop (no kill-only dead-end) - T111.3: thread_spawn / fleet.Launch record Parent for /api/agents tree - T111.4: persona, agents-guide, fleet brief multi-slice fan-out doctrine; agent_list surfaces zero-children PO/boss hint Hermetic oracles: butler push agent/thread, agent_send busy/queue, fan-out hints, parent dual-write, persona/guide greps.
Show purpose on agent_list rows (T114 dual-write visibility) and retire T111.2 with Deliver/Participants attestation (SHA 0cc5720).
Wire the jwork observability surface in the activity pane: style worker rows, poll GET /api/workers, and reconnect via EventSource /api/workers/events so active/completed status, tokens, outcomes, and policy decisions show without a full page reload.
…rred successor Owner reopened T8.3 because silent doit absorption was not a backend choice. Record writ-vs-doit decision: product goal stands; doit gates jwork spawn + audit today; writ is preferred OS-level successor when integrated.
Full durable transcript progressively resident in the browser; content windowed by shell+content (size cache, lazy measure, recent-first). Jump-to-bottom FAB/hotkey; no jump-to-top. Hermetic oracles cover acceptance; progressive hydrate supersedes scroll-as-data-throttle. Co-Authored-By: Grok <noreply@x.ai>
Inventory material Grok Build/CLI capabilities and classify each for Jevons as absorb / light ceremony / leave / reject under a voice-first constraint (no slash-command zoo). Maps goals, loops, workflows, subagents, sessions, skills, MCP, progress, cancel, and high-use intents onto persona, fleet, bullseye, chat chrome, and journeys; calls out impatience/multi-agent gaps (T90, T118, T31, T98).
Reuse #mermaid-viz-panel as always-available project graph surface: Agents "Open viz", empty state, pin last (localStorage), Load last, and Paste/Render for bullseye Mermaid exports. Chat Open still pins. Manual refresh only; no fleet/T29 rewrite. Hermetic unit + Playwright coverage for open/persist/paste paths.
… (🎯T117) Collector only understood Claude Code message.usage lines, so after the Grok migration the ticker stayed at $0/hr while the fleet spent tokens. Parse turn_completed usage from updates.jsonl (costUsdTicks → USD), prefer provider cost over the rate table, skip non-usage session sidecars, and hermetically assert synthetic Grok burn yields non-zero global+fleet rates. Co-Authored-By: Grok <noreply@x.ai>
…nt path Same-workdir fan-out workers use glanceable status/progress (ACP tool steps, phase, running/stopped) as the secondary line; path stays for roots, POs with children, and agents whose workdir differs from parent. Server tracks progress from agent events and exposes phase/step/progress on GET /api/agents. Hermetic: fleet_row_test + fleet-tree-test + Go hub/API. Co-Authored-By: Grok <noreply@x.ai>
As-is map of jLog/slog/chatlog/usage/workers/agents; gaps ranked by decision-opacity (T99 route first); target architecture with correlation IDs; proposed T120 children oracles; privacy rules. Instrumentation owned by jv-log-impl. Co-Authored-By: Grok <noreply@x.ai>
…120) Client: DecisionLog formatters (route/composer/send/focus) with ~120-char draft truncation and secret-key redaction; jLog preserves component/ decision/corr; send() always logs ThreadRoute hits (T99 opacity), composer outcomes, SendQueue actions, and focus transitions. Cost/fleet poll failures jLog warn. Server: handleBrowserLog structured slog (component default browser) + append to state_dir/logs events.jsonl; agent_send slog name/status/ queued/rehydrated; GET /api/logs + MCP tail for introspection. Oracles: decision_log_test.js, TestHandleBrowserLog*, agent_send slog fields, eventlog Append/Tail, make test-web green. Co-Authored-By: Grok <noreply@x.ai>
Greenfield re-audit of slog/jLog/eventlog coverage for long-tail production debugging. Verdict: not aggressive enough; T120 residual deferred fleet lifecycle and browser-only journal. Files program under T128–T128.4. Audit only — no instrumentation. Co-Authored-By: Grok <noreply@x.ai>
Hard doctrine: same-turn bullseye file on product gaps / standing rules (triggers: standing rule, going forward, from now on, we should always…); ceremony jevons_target_file / bullseye_commit. Overseer routes Build to jevons-po only (parent≠jevons). Surfaces: persona, AGENTS, agents-guide, FleetStandingBrief. Hermetic greps in config + fleet_brief tests.
Raise busy-defer from Debug to Info; log enqueue/drain/defer with component=notify_queue, depth, deferred/drained, and err_class. Hermetic slog capture covers the drain re-queue path. Co-Authored-By: Grok <noreply@x.ai>
Log no_session, read_error, and zero_turns on GET /api/agents/{name}/transcript
with structured slog empty_reason (component=agent_transcript) and best-effort
event journal dual-write so operators can rg empty_reason after an empty RHS pane.
Hermetic TestHandleAgentTranscriptEmptyReasons covers all three reasons.
Add eventlog.Log/LogEvent helper that slog-mirrors and Appends source=server rows to state_dir/logs/events.jsonl when a journal is open. Wire Server.LogEvent, mcpserver SetEventLogger/SetEventJournal, and jevonsd so fleet MCP lifecycle (agent_start/stop/kill, thread_spawn, event_push) and soft-empty transcript fingerprints share GET /api/logs and jevons_logs_tail with browser decisions. Hermetic tests: journal + GET /api/logs?component=agent_lifecycle&source=server.
Bridge a11y context so dictation into #input gets capitalised, punctuated sentences (incl. ?). Live #wispr-context region (aria-describedby with input-hint) exposes recent transcript excerpts; empty-composer seed flips document mode and is stripped before wire. Pure helper + hermetic Node tests; no post-hoc grammar fixers on send.
Keep sentence-shaped seed for Wispr document mode; apply .composer-seed-only (transparent text, visible caret) when seed-only. Toggle class on input/seed refresh; Backspace clears whole seed once. prepareWireText strip path unchanged. Hermetic class/state + key policy.
Default send() always keeps main draft on main. ThreadRoute still runs and DecisionLog still records the hit, but auto-match never calls pursue or formatAsideWire. Opt-in "Continue in: «title»" on the user bubble interrupts main and delivers to the suggested thread only when clicked. Hermetic RouteSuggest.planAutoRouteAction always returns steal:false; route_suggest_test.js is wired into make test-web.
Pure helpers for chrome cap/overflow, bulk clearChromeNoise, capture dedupe, and open-only routeCandidates. ThreadRoute.isRouteable skips done/archive ghosts. Hermetics cover stack bound, filing auto-close, and route honesty. index.html chrome wiring already on master (T135).
Close T114/T124 residual: top #attention-bar no longer hosts open/parked aside chips. aside:/capture:/target: dual-writes purpose=aside via POST /api/asides (register-only), RHS auto-select + T124 inspect. - chromeStack() always empty; renderAttention never shows bar - AgentDef.Description surfaces as 💡 title in fleet tree - Vocabulary: aside (not thread) in owner-visible chrome labels - Hermetic: attention_threads/agent_transcript + Go asides tests
T136 path called renderAttention()/updateComposerPlaceholder before `let selectedAgent`, which threw TDZ and aborted the main script so applyTheme and connect never ran. CSS default is dark; chat never attached. Declare selectedAgent with fleet tree state; hermetic order oracle in agent_transcript_test.
…cker) When budget pause (or any overseer death) left proc !Alive, handleChat still replayed history then Closed the socket. The resilient UI reconnected every ~50–400ms, wiping #messages and replaying ~10k stream frames each time — uncontrollable flicker. After history replay, hold the connection: serve pings, nack turns with the T54 error, poll until CurrentProcess is alive again, then attach the live stream. Do not close on "overseer not running".
Owner: API-equivalent $/hr paused the overseer despite SuperGrok (no marginal $). budget.json disabled=true skips cost guard entirely; /api/cost stays unset; cost ticker and worker $ rows off. File 🎯T137 to redesign clamp/reporting for subscription reality later.
Insert a blank line before ``` / ```lang when glued to preceding prose so marked always opens a real code block. Hermetic Node fixture + paintBody / measureCollapse / voice paths use parseAssistantMarkdown.
Drop local replace ../claudia so CI can resolve the module. Requires claudia 3f9daa5 (AgentDef.Description/Purpose) on origin/master.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Week-of-use batch on local master since v0.8.0: fleet asides in the RHS tree, Wispr document-mode dictation, logging/telemetry, chat UX (routing, composer, history windowing), and SuperGrok-safe cost clamp off.
Added
POST /api/asides); no top chip wallevents.jsonl, dual-write logging path/focuses composerChanged / Fixed
/ws/chatwhen overseer is down (no reconnect flicker storm)selectedAgent(boot TDZ → empty chat + stuck dark theme)budget.json disabled=true— no clamp pause, no $ ticker UIDeferred (filed, not shipping as done)
Test plan
go test -tags "sqlite_preupdate_hook sqlite_fts5" ./...(CI-identical)make test-webgreen locallybatch-t109-test(T88 rewind Enter) still fails locally; not in CIgo testpath — residualRelease
Cuts v0.9.0 after squash-merge +
gh release create.