← back to build-pages
home: top skills + agents rail (fleet-wide tallies surfaced as chips)
83d2712c6a2ebf2381698225f1b6b02613f8a905 · 2026-05-13 17:03:40 -0700 · SteveStudio2
Files touched
M server.jsM test/smoke.js
Diff
commit 83d2712c6a2ebf2381698225f1b6b02613f8a905
Author: SteveStudio2 <stevestudio2@SteveStacStudio.lan>
Date: Wed May 13 17:03:40 2026 -0700
home: top skills + agents rail (fleet-wide tallies surfaced as chips)
---
server.js | 32 ++++++++++++++++++++++++++++++++
test/smoke.js | 1 +
2 files changed, 33 insertions(+)
diff --git a/server.js b/server.js
index 7fb8da8..a224341 100644
--- a/server.js
+++ b/server.js
@@ -357,6 +357,38 @@ app.get('/', async (req, res, next) => {
<p id="bp-recent-meta" class="bp-meta">auto-refreshes every 60s</p>
</section>
+ <section class="bp-section">
+ <h2>Top skills + agents across the fleet</h2>
+ <p class="bp-meta">Auto-extracted from commit messages — how often each skill/agent has been invoked across all 4 build journals.</p>
+ <div class="bp-grid">
+ <div>
+ <h3 style="font-size:15px;margin:0 0 10px;">Skills</h3>
+ <ul class="bp-chips">${(() => {
+ const tallies = new Map();
+ for (const e of entries) {
+ const b = _projectCache.get(e.slug);
+ if (!b) continue;
+ for (const f of b.facets.skills) tallies.set(f.name, (tallies.get(f.name) || 0) + f.count);
+ }
+ return [...tallies.entries()].sort((a,b)=>b[1]-a[1]).slice(0,15).map(([n,c]) => `<li><span>/${esc(n)}</span><b>${c}</b></li>`).join('');
+ })()}</ul>
+ </div>
+ <div>
+ <h3 style="font-size:15px;margin:0 0 10px;">Agents</h3>
+ <ul class="bp-chips">${(() => {
+ const tallies = new Map();
+ for (const e of entries) {
+ const b = _projectCache.get(e.slug);
+ if (!b) continue;
+ for (const f of b.facets.agents) tallies.set(f.name, (tallies.get(f.name) || 0) + f.count);
+ }
+ const out = [...tallies.entries()].sort((a,b)=>b[1]-a[1]).slice(0,15);
+ return out.length ? out.map(([n,c]) => `<li><span>${esc(n)}</span><b>${c}</b></li>`).join('') : '<li class="bp-meta">none detected</li>';
+ })()}</ul>
+ </div>
+ </div>
+ </section>
+
<section class="bp-section">
<h2>Search the whole fleet</h2>
<input id="fleet-q" class="bp-q" type="search" placeholder="search every commit across every project…" autocomplete="off" value="${esc(typeof req.query.q === 'string' ? req.query.q : '')}">
diff --git a/test/smoke.js b/test/smoke.js
index ec363cc..7069136 100644
--- a/test/smoke.js
+++ b/test/smoke.js
@@ -93,6 +93,7 @@ function check(name, cond, hint = '') {
check('home: fleet totals', /\d+ projects · \d+ commits · \d+ design-rationale ideas/.test(r.body));
check('home: recent rail', /Recent across the fleet/.test(r.body));
check('home: theme-color', /name="theme-color"/.test(r.body));
+ check('home: top skills rail', /Top skills \+ agents/.test(r.body));
check('home: canonical', /rel="canonical"/.test(r.body));
check('home: og:title', /property="og:title"/.test(r.body));
check('home: WebSite JSON-LD', /"@type":"WebSite"/.test(r.body));
← 232a253 api: /api/fleet/{agents,skills} — cross-project aggregated f
·
back to build-pages
·
home: velocity counter (commits in last 24h + last 7d) — 200 1af9c2a →