From 8fd061a241c6268fe80677d2479cf7c3298d86d2 Mon Sep 17 00:00:00 2001 From: Chris Phillipson Date: Fri, 29 May 2026 10:48:02 -0700 Subject: [PATCH 1/2] feat(statusline): show installed agentic-qe version on the QE footer line MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The ๐ŸŽ“ Agentic QE footer line now renders the installed agentic-qe package version (e.g. "๐ŸŽ“ Agentic QE V3.10.1"), mirroring how ruflo's native header shows "RuFlo V". Version is read from agentic-qe/package.json โ€” preferring the global install (same path style as the aidefence probe) and falling back to a project-local node_modules copy. Guarded by try/catch so a missing package.json leaves the line unchanged. Updated the footer-format comment and README example/description to match. --- README.md | 4 ++-- shell/ruflo-functions.sh | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index afc813a1..212a336a 100644 --- a/README.md +++ b/README.md @@ -191,13 +191,13 @@ When set up with this kit, a two-line footer is appended **below** ruflo's own s ๐Ÿ“Š AgentDB โ€ฆ โ”˜ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ† the kit's appended footer โ†“ ๐Ÿง  SONA [โ—โ—โ—โ—โ—] 50 patterns ยท 55 traj ยท ฮ”1.32 LoRA ยท โšก HNSW ๐Ÿ›ก aidefence on -๐ŸŽ“ Agentic QE ๐ŸŽ“ 23 patterns ยท ๐Ÿงญ 114 traj ยท ๐Ÿงฌ 543 vecโšก ยท ๐Ÿ’พ 16MB +๐ŸŽ“ Agentic QE V3.10.1 ๐ŸŽ“ 23 patterns ยท ๐Ÿงญ 114 traj ยท ๐Ÿงฌ 543 vecโšก ยท ๐Ÿ’พ 16MB ``` Every field renders only when its data is actually present (numbers above are illustrative): - ๐Ÿง  **SONA** โ€” `[bar]` is a volume gauge (~10 patterns/dot); `patterns`/`traj` from `.claude-flow/neural/stats.json`; `ฮ” LoRA` is shown only after you run `ruflo-neural-train` (it caches the transient MicroLoRA delta, which ruflo doesn't persist); `โšก HNSW` only when a vector index exists. - ๐Ÿ›ก๏ธ **aidefence on** โ€” proactive prompt-injection/PII defense is loaded (ruflo's native line already shows the `CVE n/m` count, so this signals the *other* half). -- ๐ŸŽ“ **Agentic QE** โ€” `๐ŸŽ“ patterns` / `๐Ÿงญ traj` / `๐Ÿงฌ vec` / `๐Ÿ’พ size` from a few guarded `sqlite3` reads of `.agentic-qe/memory.db` (the `vec` count comes from `qe_pattern_embeddings`, falling back to `vectors`/`embeddings` across aqe versions). The branch is already in ruflo's header line, so it's not repeated here. +- ๐ŸŽ“ **Agentic QE** โ€” `V` is the installed `agentic-qe` package version (read from its `package.json`, mirroring `RuFlo V` in ruflo's header); `๐ŸŽ“ patterns` / `๐Ÿงญ traj` / `๐Ÿงฌ vec` / `๐Ÿ’พ size` from a few guarded `sqlite3` reads of `.agentic-qe/memory.db` (the `vec` count comes from `qe_pattern_embeddings`, falling back to `vectors`/`embeddings` across aqe versions). The branch is already in ruflo's header line, so it's not repeated here. --- diff --git a/shell/ruflo-functions.sh b/shell/ruflo-functions.sh index c3faa279..28dc06af 100644 --- a/shell/ruflo-functions.sh +++ b/shell/ruflo-functions.sh @@ -168,7 +168,7 @@ fs.writeFileSync(f,s); # Activation footer: append (below ruflo's native render) a two-line footer that # shows ONLY the features genuinely active in this project: # ๐Ÿง  SONA ยท [ยท โšก HNSW] ๐Ÿ›ก aidefence on - # ๐ŸŽ“ Agentic QE [ยท ] [ยท ] ยท + # ๐ŸŽ“ Agentic QE V [ยท ] [ยท ] ยท # Append-only: never rewrites ruflo's own lines, so it can't break on a ruflo # template change. self-learning + security are fs-only; the agentic-qe line uses # one guarded sqlite3 call only when .agentic-qe/memory.db exists. The injector is @@ -248,7 +248,17 @@ function rufloActivationSegments(cwd){ if (qtj > 0) qp.push("๐Ÿงญ " + qtj + " traj"); if (qv > 0) qp.push("๐Ÿงฌ " + qv + " vec" + G + "โšก" + R); try { var kb = Math.round(fs.statSync(db).size / 1024); qp.push("๐Ÿ’พ " + (kb >= 1024 ? (kb/1024).toFixed(1) + "MB" : kb + "KB")); } catch(e){} - qe = Y + "๐ŸŽ“ Agentic QE" + R + " " + (qp.length ? qp.join(DIM + " ยท " + R) : "on"); + // Installed agentic-qe version โ€” shown next to the label, mirroring "RuFlo V" + // in ruflo's native header. Prefer the global install (matches the aidefence + // probe above); fall back to a project-local node_modules copy. + var qver = ""; + try { + var qpkg = path.join(path.dirname(process.execPath), "..", "lib", "node_modules", "agentic-qe", "package.json"); + if (!fs.existsSync(qpkg)) qpkg = path.join(cwd, "node_modules", "agentic-qe", "package.json"); + var qv2 = JSON.parse(fs.readFileSync(qpkg, "utf8")).version; + if (qv2) qver = " V" + qv2; + } catch(e){} + qe = Y + "๐ŸŽ“ Agentic QE" + qver + R + " " + (qp.length ? qp.join(DIM + " ยท " + R) : "on"); try { fs.mkdirSync(cacheDir, {recursive:true}); fs.writeFileSync(cacheFile, JSON.stringify({ts: Date.now(), line: qe})); } catch(e){} } } From 5b2806bc69f48a7c4f35ab19f9f5796bf10bb26a Mon Sep 17 00:00:00 2001 From: Chris Phillipson Date: Fri, 29 May 2026 10:55:19 -0700 Subject: [PATCH 2/2] feat(statusline): move footer divider between SONA and Agentic QE MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously a 44-char rule sat above the SONA line, separating ruflo's native AgentDB line from the kit's footer. SONA and aidefence are ruflo features, so that rule split the ruflo block awkwardly. Now: no rule above SONA (it sits flush under ruflo's native lines, keeping all ruflo features/metrics together), and the divider is drawn BETWEEN the SONA/ aidefence line and the Agentic QE line. Widened 44->53 to match ruflo's native header divider ('โ”€'.repeat(53)), so the two rules line up. The divider only renders when both halves are present. --- README.md | 8 ++++---- shell/ruflo-functions.sh | 9 +++++++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 212a336a..a9aa01d4 100644 --- a/README.md +++ b/README.md @@ -187,10 +187,10 @@ When set up with this kit, a two-line footer is appended **below** ruflo's own s ``` โ–Š RuFlo V3.10.5 โ— you โ”‚ โ‡ main โ”‚ Opus 4.x โ” -๐Ÿ—๏ธ DDD Domains โ€ฆ ๐Ÿค– Swarm โ€ฆ ๐Ÿ”ง Architecture โ€ฆ โ”œ ruflo's own lines (unchanged) -๐Ÿ“Š AgentDB โ€ฆ โ”˜ -โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ† the kit's appended footer โ†“ -๐Ÿง  SONA [โ—โ—โ—โ—โ—] 50 patterns ยท 55 traj ยท ฮ”1.32 LoRA ยท โšก HNSW ๐Ÿ›ก aidefence on +๐Ÿ—๏ธ DDD Domains โ€ฆ ๐Ÿค– Swarm โ€ฆ ๐Ÿ”ง Architecture โ€ฆ โ”‚ ruflo's own lines + the kit's +๐Ÿ“Š AgentDB โ€ฆ โ”‚ SONA/aidefence line (all ruflo) +๐Ÿง  SONA [โ—โ—โ—โ—โ—] 50 patterns ยท 55 traj ยท ฮ”1.32 LoRA ยท โšก HNSW ๐Ÿ›ก aidefence on โ”˜ +โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ† divider (matches ruflo's header rule) ๐ŸŽ“ Agentic QE V3.10.1 ๐ŸŽ“ 23 patterns ยท ๐Ÿงญ 114 traj ยท ๐Ÿงฌ 543 vecโšก ยท ๐Ÿ’พ 16MB ``` diff --git a/shell/ruflo-functions.sh b/shell/ruflo-functions.sh index 28dc06af..e16ce0e0 100644 --- a/shell/ruflo-functions.sh +++ b/shell/ruflo-functions.sh @@ -263,13 +263,18 @@ function rufloActivationSegments(cwd){ } } } catch(e){} - // โ”€โ”€ assemble: line 1 = learning + security; line 2 = agentic-qe โ”€โ”€ + // โ”€โ”€ assemble: line 1 = learning + security (ruflo features); line 2 = agentic-qe โ”€โ”€ + // No rule above the SONA line โ€” SONA + aidefence are ruflo features and sit flush + // under ruflo's native lines. The divider goes BETWEEN the ruflo block and the + // agentic-qe line, matching ruflo's native header divider width ('โ”€'.repeat(53) in + // statusline.cjs) so the two rules line up. var l1 = []; if (learn) l1.push(learn); if (sec) l1.push(sec); var out = []; if (l1.length) out.push(l1.join(" ")); + if (out.length && qe) out.push(DIM + "โ”€".repeat(53) + R); if (qe) out.push(qe); if (!out.length) return ""; - return "\n" + DIM + "โ”€".repeat(44) + R + "\n" + out.join("\n"); + return "\n" + out.join("\n"); } catch(e){ return ""; } } /* ruflo-seg:END */