Commit Graph
21 Commits
Author SHA1 Message Date
ruv 146febd999 feat(mods): shared toast system with levels, dedupe, persistence and Settings (ADR-477)
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>
2026-10-07 12:50:30 -04:00
ruv 38c30b1120 chore(mods): ruflo-mods 0.3.15 so marketplace users receive the #3791-#3805 fixes
The fixes merged in #3873 without a version bump, so 'claude plugin update'
saw no new version.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-07 03:51:38 -04:00
ruv 06d38d059a feat(ruflo-protector): Project Anatole plugin, tests, corpus gate, bench, fleet registration
ruflo-mods 0.3.14: /ruflo-mods shows one protector row from .claude-flow/protector-mod/status.json.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 15:06:42 -04:00
ruv 408c3e502a fix(ruflo-mods): trust gate counts prompt.submit and agent.spawn as risky; ranked context drops control and bidi characters (0.3.13)
#3787: under modTrust=refuse-risky a user-tier mod whose only hook was prompt.submit (the documented injection path at that tier) or
agent.spawn loaded, because neither was in the risk sets. Both are now named and refused; observe still only names them.

#3790: the [INTELLIGENCE] block put remembered entries into the prompt cut to 80 characters but otherwise as they were. They now pass
through the same control and bidi cleaning the research guard uses.

Both new tests fail without the change.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 11:54:51 -04:00
ruv ecb0c0bfa6 fix(ruflo-mods): reject a legacy or unknown-mode policy projection as unreadable; report shows the mode (ADR-450 T10), 0.3.12
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 05:44:23 -04:00
ruv 5f717842b4 docs(ruflo-mods): complete the option table, one row per userConfig key, with a smoke guard (0.3.11)
Adds the missing toolHints, agentTrim and agentTrimKeep rows, evidence pointers, drops the stale console 'pending' line, and adds smoke step 13. 0.3.11 chosen because loop/probe-label (0.3.10) is not merged yet.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 04:47:20 -04:00
ruv e1589e5d86 feat(ruflo-mods): compactCarry option carries swarm and claims state through compaction (ADR-451 item 7, 0.3.9)
session.compact appends one bounded (600 char) block of validated words and ids to the
compaction instructions: live swarm id/topology/agent count, open claim ids with status,
last route agent, budget and policy words. Default off, framed as data, screened for
secret shapes and injection phrases, skipped for subagent compactions, fails open.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 04:11:43 -04:00
ruv 477622b97d chore(ruflo-mods): 0.3.7 for the capability probe (0.3.6 went to the wording fix)
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 03:22:31 -04:00
ruv 32b6c33008 feat(ruflo-mods): capabilityProbe option records engine version and events fired (default off), ADR-451 item 5; 0.3.6
Observability only: one pass-through hook on every event counts which of the
events the mod registered fired; /ruflo-mods gains a bounded probe line and
the heartbeat lists the engine version and registered events. Never denies,
rewrites or delays; fails open.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 03:13:05 -04:00
ruv 6029b0aa2c chore(mods): drop provably unused hasSecret/tidy, swarm PLUGIN_NAME, ruos parseProbe; fix guidance screen header
Review 2026-10 #13. Patch bumps: ruflo-mods 0.3.5, ruflo-swarm 0.3.3, ruflo-ruos 0.1.1.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 02:28:30 -04:00
ruv 576672ea44 fix(ruflo-mods): 0.3.4 budget rung once per session, no guidance observations without route ownership, report dropped tool ids
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 01:46:59 -04:00
ruv cd01a4aea3 feat(ruflo-mods): deliveryScreen option hooks session.receive/send (default off), ADR-451 item 3; 0.3.3
Drops peer/relay deliveries with injection phrasing and refuses outgoing
messages carrying a secret shape or SSN. In-process, tighten-only, fail
open; the person's own Remote Control prompts are never screened.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 01:13:51 -04:00
ruv ebe2f82146 ruflo-mods 0.3.2: live validation of toolHints/agentTrim/status, correct the agentTrim option text
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-05 00:25:30 -04:00
ruv 33a60c715f feat(ruflo-mods): agentTrim option hooks agent.offer (default off), ADR-451 item 2; 0.3.1
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-04 23:28:44 -04:00
ruv 549f66b0dc chore(ruflo-mods): 0.3.0 (toolHints option)
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-04 21:38:27 -04:00
ruv a6486f371f feat(ruflo-mods): toolHints option hooks tool.describe (default off); ADR-451 mod capability roadmap and API coverage table
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-04 21:24:14 -04:00
rUv 9161994613 test(mods): verify configured native guidance and provenance recovery
Add reproducible legacy engine fixture, typed candidate records, corrupt queue recovery, and displayed version attribution.
2026-10-04 13:19:09 -07:00
rUv b6731e4234 feat(mods): add versioned advisory guidance and observation review
Refs #3701; ADR-447. Candidate observations never train or promote.
2026-10-04 13:11:03 -07:00
ruv d9a6258895 chore: bump ruflo-console 0.28.0, ruflo-goals 0.3.0, ruflo-mods 0.1.1; baseline research.test.ts
Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-04 00:28:33 -04:00
ruv 8a1e11f3bd feat(mods): $.ruflo noun, status segments, mod trust gate, refusal-tolerant $ (ADR-404)
- engine.create adds a flat $.ruflo noun (types/index.d.ts, plugin.json
  "types"): segment({id,text}), lastRoute(), snapshot(). Other mods (ruOS,
  ruflo-ruos) contribute status segments instead of drawing a second bar.
  Segments are untrusted: id token, control/bidi stripped, 48 chars, max 8,
  sorted by id. One drawer for the status line, from the $ beneath.
- plugin.register trust gate: names what a later-registering user-tier mod
  can do (process.run, http.fetch, env.set; tool.check, tool.call, *,
  classic.*, plugin.register, prompt.compose), from the host scan.
  userConfig modTrust: observe (default) | refuse-risky | off, plus
  modTrustAllow. Under refuse-risky a gate failure refuses.
- every ui.status/log/toast call tolerates refusal (admins can withhold $)
- tsconfig extends the types Claude Code >= 2.1.287 writes on load
- kit tests: 15/15 on Claude Code 2.1.287, incl. two tighten-only tool.check
  mods composing, trust refusal at load, budget ladder with options
- vitest: 95/95 (noun/segment and trust suites added)
- CI ratchet baseline: the four engine-kit files (claude-code/testing is not
  resolvable by root vitest), as #3605/#3607 do

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-01 18:09:25 -04:00
ruv d48897fb34 feat(mods): ruflo-mods plugin — ruflo as a Claude Code mod (ADR-404)
An opt-in hooks module (Claude Code function hooks, early access) with
in-process equivalents of the classic per-event hooks:

- prompt.submit: router.cjs routing + ranked-memory context, text identical
  to hook-handler.cjs route; #3567 no-match semantics
- tool.check: tighten-only (stricter of chain and ruflo), pre-bash list and
  the claude-code.* rules of ruflo policy; fails closed by one step
- tool.call/turn.complete/session.end: edit records in recordEdit's format
- session.measure/agent.spawn: cost-tracker budget ladder (opt-in)
- session.start: ownership handshake (RUFLO_MODS_OWNS), /ruflo-mods

Owns route/post-edit only where the classic hook-handler hands them over.
Kit tests (claude plugin test, 7/7 in the real engine), static security
smoke (9/9), marketplace entry.

Co-Authored-By: RuFlo <ruv@ruv.net>
2026-10-01 17:51:02 -04:00