← back to Ventura Claw
/changelog updated + ● Prime cache UI button on admin
d6f1881f42f1c46287f090fa1a7bcbcf36c5a94a · 2026-05-06 05:50:34 -0700 · Steve Abrams
- /changelog top entry now reflects what actually shipped overnight (admin endpoint, sequential prime fix, /feed, /faq, /docs, etc.)
- /admin/connectors filter bar gets a ● Prime cache button that calls /api/admin/cache/prime, shows primed N/5 + cache size
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Files touched
M server/public/admin-connectors.htmlM server/server.js
Diff
commit d6f1881f42f1c46287f090fa1a7bcbcf36c5a94a
Author: Steve Abrams <info@agentabrams.com>
Date: Wed May 6 05:50:34 2026 -0700
/changelog updated + ● Prime cache UI button on admin
- /changelog top entry now reflects what actually shipped overnight (admin endpoint, sequential prime fix, /feed, /faq, /docs, etc.)
- /admin/connectors filter bar gets a ● Prime cache button that calls /api/admin/cache/prime, shows primed N/5 + cache size
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---
server/public/admin-connectors.html | 29 +++++++++++++++++++++++++++++
server/server.js | 13 +++++++++----
2 files changed, 38 insertions(+), 4 deletions(-)
diff --git a/server/public/admin-connectors.html b/server/public/admin-connectors.html
index 1634cef..eefecdd 100644
--- a/server/public/admin-connectors.html
+++ b/server/public/admin-connectors.html
@@ -50,6 +50,8 @@
<div class="glass" style="padding:18px;margin-bottom:18px;display:flex;gap:14px;align-items:center;flex-wrap:wrap">
<input id="filter" placeholder="filter connectors…" style="flex:1;min-width:200px" />
<select id="cat-filter" style="min-width:160px"><option value="">all categories</option></select>
+ <button id="prime-btn" type="button" class="btn" style="font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;padding:8px 14px;border:1px solid var(--gold);color:var(--gold);background:transparent;border-radius:2px;cursor:pointer" title="Re-fire the 5 preset cache primes — useful when Mac1 has evicted qwen3 and visitors are eating cold-loads">● Prime cache</button>
+ <span id="prime-status" role="status" aria-live="polite" style="font-family:var(--mono);font-size:10px;color:var(--ink-mute);min-width:80px"></span>
<select id="status-filter" style="min-width:140px">
<option value="">all status</option>
<option value="live">live API</option>
@@ -156,6 +158,33 @@ const filter = document.getElementById('filter'),
filter.addEventListener('input', draw);
catFilter.addEventListener('change', draw);
statusFilter.addEventListener('change', draw);
+// Prime cache button — calls POST /api/admin/cache/prime, shows result inline.
+document.getElementById('prime-btn').addEventListener('click', async (e) => {
+ const btn = e.currentTarget;
+ const status = document.getElementById('prime-status');
+ const orig = btn.textContent;
+ btn.disabled = true; btn.textContent = '● priming…';
+ status.textContent = ''; status.style.color = 'var(--ink-mute)';
+ try {
+ const r = await fetch('/api/admin/cache/prime', { method: 'POST' });
+ const d = await r.json();
+ if (r.ok) {
+ btn.textContent = `✓ primed ${d.primed}/${d.total}`;
+ status.textContent = `cache size: ${d.cache_size}`;
+ status.style.color = 'var(--good)';
+ } else {
+ btn.textContent = '✗ failed';
+ status.textContent = (d.error || 'unknown error').slice(0, 40);
+ status.style.color = 'var(--bad)';
+ }
+ } catch (err) {
+ btn.textContent = '✗ network error';
+ status.style.color = 'var(--bad)';
+ } finally {
+ setTimeout(() => { btn.textContent = orig; btn.disabled = false; }, 5000);
+ }
+});
+
document.getElementById('logout').addEventListener('click', async e => {
e.preventDefault(); await fetch('/api/auth/logout', { method: 'POST' }); location.href = '/login';
});
diff --git a/server/server.js b/server/server.js
index 1640586..9023049 100644
--- a/server/server.js
+++ b/server/server.js
@@ -1043,16 +1043,21 @@ set-cookie: cc_session=…; HttpOnly; Secure; SameSite=Lax
// Public changelog — append entries here as work ships. Most-recent first.
const CHANGELOG = [
- { date: "2026-05-06", title: "Public surface hardening overnight", items: [
- "Branded 404 page (HTML for browsers, JSON for /api/*)",
+ { date: "2026-05-06", title: "Overnight loop — public surface polish", items: [
+ "Admin POST /api/admin/cache/prime + ● Prime cache button on /admin/connectors (re-fires preset cache when Mac1 evicts qwen3)",
+ "Sequential preset cache prime on boot — 4/5 fills (was 2/3 with parallel) · presets serve in 20ms",
+ "/changelog page (this one) · /feed RSS · auto-discovery <link rel=alternate>",
+ "Branded 404 (HTML for browsers, JSON for /api/*)",
"Favicon — gold connector-graph SVG · served at .ico/.svg/apple-touch-icon paths",
"/healthz?format=json exposes uptime, mem, demo cache size, LLM endpoints",
"Allowlist env loader extended for OLLAMA_FALLBACK_URL + CC_KEY_ID",
"robots.txt cleanup — removed dead duplicate handler",
"/docs page · 5 curl examples for public + auth API surface",
- "/faq page (separate URL) with FAQPage JSON-LD for Google rich-result eligibility",
+ "/faq dedicated page with FAQPage JSON-LD for Google rich-result eligibility",
"/privacy /terms /about — required SaaS pages",
- "Initial git commit · 88 files · secrets clean",
+ "<noscript> graceful fallback · theme-color #0e0e10 · <link rel=prefetch href=/connectors>",
+ "esc() XSS sweep on chat.html + brand.html — all 5 user-facing HTML pages now hardened",
+ "Initial git commit (61cfcb1) · 88 files · secrets clean · gitignore covers all data/*.json",
]},
{ date: "2026-05-05 (evening)", title: "Public homepage shipped", items: [
"/ now serves a real public homepage (was login redirect)",
← 320d50b Add POST /api/admin/cache/prime endpoint
·
back to Ventura Claw
·
Externalize homepage inline CSS to /static/homepage.css d9e7a6c →