@plumpslabs/kuma 2.4.2 → 2.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plumpslabs/kuma",
3
- "version": "2.4.2",
3
+ "version": "2.4.3",
4
4
  "description": "Safety-first context & orchestration engine for AI coding agents. MCP server with mandatory research pipeline, knowledge graph, impact analysis, decision memory, and safety guard — works with any MCP client.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -194,7 +194,7 @@ async function getDashboardData() {
194
194
  const verifTotal = first(`SELECT COUNT(*) as c FROM verifications`, "c");
195
195
  const verifPassed = first(`SELECT COUNT(*) as c FROM verifications WHERE passed = 1`, "c");
196
196
  const recentSessions = run(
197
- `SELECT started_at, COALESCE(goal,'') as goal, tool_calls, edits, rollbacks, failures, safety_score
197
+ `SELECT started_at, COALESCE(goal,'') as goal, tool_calls, edits, rollbacks, failures
198
198
  FROM (SELECT * FROM sessions ORDER BY started_at DESC LIMIT 8)`
199
199
  ).map((r) => ({
200
200
  startedAt: Number(r.started_at ?? 0),
@@ -210,7 +210,7 @@ async function getDashboardData() {
210
210
  toolCalls: first(`SELECT COUNT(*) as c FROM tool_calls`, "c"),
211
211
  gotchas: first(`SELECT COUNT(*) as c FROM known_gotchas`, "c"),
212
212
  archFlows: sessionMetrics.recordings.archFlows,
213
- decisions: first(`SELECT COUNT(*) as c FROM (SELECT id FROM decision_log UNION SELECT id FROM nodes WHERE type = 'decision')`, "c"),
213
+ decisions: first(`SELECT COUNT(*) as c FROM nodes WHERE type = 'decision'`, "c"),
214
214
  researchCacheScopes: first(`SELECT COUNT(*) as c FROM research_cache`, "c"),
215
215
  verifications: verifTotal,
216
216
  verificationPassRate: verifTotal > 0 ? Math.round(verifPassed / verifTotal * 100) : null,
@@ -828,8 +828,10 @@ function setupTabs(){
828
828
  function renderFeatures(data) {
829
829
  var items = data.features || [];
830
830
  var el = document.getElementById("panel-features");
831
+ var tab=document.querySelector('[data-tab="features"]');
831
832
  if(!el) return;
832
- if(!items.length){el.innerHTML='<div class="empty">No features recorded yet.<br><br>Use:<br><code style="color:var(--accent)">kuma_memory</code></div>';return;}
833
+ if(!items.length){if(tab)tab.style.display='none';if(tab&&tab.classList.contains('active')){tab.classList.remove('active');var gt=document.querySelector('[data-tab="gotchas"]');if(gt){gt.classList.add('active');}var gp=document.getElementById('panel-gotchas');if(gp){gp.classList.add('active');}el.classList.remove('active');}return;}
834
+ if(tab)tab.style.display='';
833
835
  el.innerHTML = items.map(function(f){
834
836
  var feat = typeof f === 'string' ? JSON.parse(f) : f;
835
837
  var meta = {};