With the ruflo CLI option on npx, a confirmed action ran a cold online npx under the 90 s default and aborted with 'still running after 90000ms'. Resolve ruflo on PATH, a project-local bin or the cached npx copy first; give a cold download a 300 s limit and a first-run label; turn a timeout or ENOTCACHED into an error naming the fix. Console 0.40.1; ADR-407 update.
Co-Authored-By: RuFlo <ruv@ruv.net>
Default-off Settings rows: a read-only claude -p consult (asked first, exact argv, turn budget, mission spend cap) before a plan locks, when the same check fails twice in a row, and before done; a third failure pauses the mission. Honest about not being the in-session advisor tool. Console 0.40.0.
Co-Authored-By: RuFlo <ruv@ruv.net>
The mission goal was cut at 500 characters and drawn on one clipped line; the host Input is one line and hides the rest. A live mirror
under every field shows all lines, views draw text in full with an explicit marker, limits are checked before sending with the exact
count, and every silent slice/plain cap on typed text is removed or made a counted refusal. console 0.39.1.
Co-Authored-By: RuFlo <ruv@ruv.net>
One dependency-free policy (canonical in ruflo-mods, byte-identical copies in console,
swarm and protector, checked by scripts/sync-toast-policy.mjs and each smoke.sh): level
prefixes, one washed line of at most 120 characters, 60 s de-duplication, four toasts a
minute per source with errors held and counted, the person's all/important/off setting and
per-source mute (console Settings, mirrored to a file the others read), and a digest of
every toast kept for the console's Events page. All call sites migrated; new toasts for a
mission that finishes or fails and a swarm subagent that fails or a loop that is stuck.
Versions: console 0.37.0, swarm 0.3.4, protector 0.1.1, mods 0.3.16.
Co-Authored-By: RuFlo <ruv@ruv.net>
- plugin.json declares eventsPersist (default true); version 0.36.0 in plugin.json, version.ts, smoke.sh
- data/append-argv.ts: one dd argv (bs=1M iflag=fullblock) shared by the Events store and the autopilot journal; real-dd 8-writer test fails on the old argv
- history decoders and Events/Timeline displays use #3874's timeOf/countOf/isoOf, so a hostile time or count cannot throw
- cli init: .claude-flow/.gitignore template lists console/
- ADR-474 updated to the reviewed behaviour and the open low items
Co-Authored-By: RuFlo <ruv@ruv.net>
A transcript that grew is parsed from where its last parse ended, not from its
first line: checked resume (head + anchor), unfinished last line taken back,
bounded ring and id set, LRU memo, tail windows by unique anchor. Reference
parsers untouched and used as the oracle by a seeded property test plus
mutation checks. Refresh warms the parse memo for the search (400k chars a tick).
scripts/kit-seq.sh runs the 25 kit tests one file at a time in a temp copy;
scripts/typecheck.sh makes tsc find the ambient types in a fresh worktree; the
specs' type errors are fixed (sources of other lanes listed in the report).
Co-Authored-By: RuFlo <ruv@ruv.net>
Learning Lab explains a recall from the hook's recall log (scores as recorded,
recomputation kept as the labelled fallback) and shows real surfaced counts.
The memory map reads stored vectors (memory list --embeddings, int8+scale) and
drops 'NOT similarity' only when they drove the layout. Memory health judges
stale by the log where it can speak and adds similar-by-meaning clusters when
vectors were read. ADR-472 documents the log schema, privacy, vector path and
rollback.
Co-Authored-By: RuFlo <ruv@ruv.net>
The Control tab's Stop asks first and calls TaskStop; it is unverified for a
workflow run's own id, so the text names Claude Code's Workflows panel as the
sure way. Found by looking at the demo GIF frames.
Co-Authored-By: RuFlo <ruv@ruv.net>
Measured: the 3-8 kit-test timeouts on this branch are the engine transpiling and scanning the larger value-reachable module graph (189 -> 265 modules, 248k -> 353k AST nodes) on every test's plugin load; plugin-side start, refresh and render are unchanged. The engine refuses dynamic import(), so the graph cannot be loaded lazily.
Co-Authored-By: RuFlo <ruv@ruv.net>
Registers the control tab, Conversation board and autopilot panel; wireWfControl/wireWfConvo/wireAutopilot in wf-wire; convoTargets option; /ruflo autopilot command; smoke step 5 now allows the conversation bridge's one extra send; ap-core spec split for the 500-line limit.
Co-Authored-By: RuFlo <ruv@ruv.net>
The band now announces approvals, alerts, finished missions, long turns
ending and Anatole blocks on a notice row (linked, dismissable, 20s),
colours its border by state, can go compact, and labels subagents by a
short id instead of the raw one.
Co-Authored-By: RuFlo <ruv@ruv.net>
The two-row band above the prompt now carries three live signals, each shown only while it has something to say:
- "▶ Claude working 41s": how long the current turn has run (the turn's start is now recorded at turn.start);
- a sparkline of tool calls per minute over the last ten minutes ("·▃▅·▃█▃▅█▅ tool calls, 10m"), so an unattended session's rhythm is
visible at a glance; silent for fewer than three calls, and it counts only what the console observed;
- "ctx 83%" from the session's context fill: quiet under 60%, plain to 79%, amber from 80%, "· /compact soon" from 85%.
Also fixed: the standing row began "↳ · …" with a doubled separator.
Co-Authored-By: RuFlo <ruv@ruv.net>
A new kit test belongs on scripts/ci-test-excluded.txt (the baseline only shrinks), which step 12 did not know about.
Co-Authored-By: RuFlo <ruv@ruv.net>
Sentry "▶ start" confirmed but created no loop: the console sent "/loop …" with $.prompt.submit, which gives the model a message that merely
looks like a command. It now runs as the /loop command ($.command.run, as if typed); mid-turn it is placed in the prompt box and says so;
a refusal is reported. The Security page shows the outcome under the sentries as a card (✓/✗, title, age, wrapped detail, next step).
Results in general: every view's Result panel (Security, Dev Tools, Automate, Evolve, Memory lab, MetaHarness lab, Vector, x.ruv, Plugin
catalog) is now one round border coloured by how the run went (green, red, amber while running, dim when idle). The CLI's ASCII tables
had lost their padding by the time they were shown; they are read back as cells and drawn again with box characters and aligned columns
at the one place results are stored (runner.ts), and blank-line runs are collapsed.
Co-Authored-By: RuFlo <ruv@ruv.net>
The confirm that every ask-first action shows was a stack of loose lines: a header, a long "Confirm: …?" line clipped mid-sentence, the
command, the note, and the buttons hard against them. It is now one round bordered box in the warning colour: "▶ CONFIRM NEEDED" with
"click Yes or press y" beside it, a rule, the question, the exact command ("runs: …", wrapped so all of it shows), the note labelled
"Effect:" (wrapped, alarm colour for money or models), and the buttons set apart by a blank line. Text inside is clipped to the width
within the border. Every string the existing kit tests read is unchanged.
Co-Authored-By: RuFlo <ruv@ruv.net>
At the owner's request the four console_* tools are available by default at the read level: Claude can open pages and read console state,
and cannot act. A missing confirm mode is now ask; a saved "off" stays off and a saved "auto" stays auto. ADR-444 and ADR-450 record it and
resolve the open "default to ask" decision.
Co-Authored-By: RuFlo <ruv@ruv.net>
#3788: Claude's confirm gate re-derived the action class from English words and ignored each Dev Tools entry's declared cost, so the
network entry dt-prov-test read as a plain write and could auto-run at write + auto. The entry's cost now travels with the ask
(`declared`) and the gate takes the stricter of the two classes. Live drive: at level write the entry is now refused as a network
action (needs manage); before, it was not asked about.
#3789: jsonAfter sliced to the LAST } or ] in the output, so a trailing log line holding one dropped valid JSON. It now finds the
bracket that closes the first one, skipping strings.
Co-Authored-By: RuFlo <ruv@ruv.net>
Registers a directory marketplace and installs the named plugin inside the isolated config only, so the Settings view's plugin option rows can be driven live. The real plugins and settings are never touched.
Co-Authored-By: RuFlo <ruv@ruv.net>
console_open gains an optional chip (settings only), validated against the
Plugin options chips that exist and routed through the same action a chip
press uses. It stays a read: no setting is written and no write class changes.
Co-Authored-By: RuFlo <ruv@ruv.net>
Show toolHints, agentTrim, agentTrimKeep and deliveryScreen at the simple level of Settings with a one-line honest note each; changes stay the same confirm-gated plugin option write, in the install class.
Co-Authored-By: RuFlo <ruv@ruv.net>