@enigmax/dashboard 0.1.105 → 0.1.107

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.
Files changed (2) hide show
  1. package/assets/index.html +33 -15
  2. package/package.json +1 -1
package/assets/index.html CHANGED
@@ -88,6 +88,11 @@
88
88
  }
89
89
  @keyframes caret { 0%, 50% { opacity: 1; } 50.01%, 100% { opacity: 0; } }
90
90
  .sub { font-family: var(--mono); color: var(--muted); font-size: 10.5px; text-transform: uppercase; letter-spacing: 1.6px; }
91
+ /* Explanatory prose. `.sub` is a label style - uppercase, mono, wide tracking - and
92
+ a paragraph set in it is unreadable and looks generated. Sentences get a sentence
93
+ face, a real line-height, and a measure that stops before the eye loses the line. */
94
+ .lede { color: var(--muted); font-size: 13px; line-height: 1.55; max-width: 78ch; }
95
+ .lede b { color: var(--text); font-weight: 600; }
91
96
  /* Sections as a vertical rail: the sidebar is already the surface, so the active
92
97
  entry is a filled pill and the rest are plain rows. */
93
98
  .tabs { display: flex; flex-direction: column; gap: 2px; }
@@ -115,7 +120,12 @@
115
120
  .live { display: flex; align-items: center; gap: 8px; color: var(--muted); font-size: 12px; font-family: var(--mono); padding: 5px 12px; background: rgba(0,0,0,0.25); border: 1px solid var(--border-soft); border-radius: 999px; }
116
121
  .dot { width: 7px; height: 7px; border-radius: 50%; background: var(--good); box-shadow: 0 0 8px var(--good); }
117
122
  .dot.stale { background: var(--muted); box-shadow: none; }
118
- .grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(166px, 1fr)); gap: 14px; margin-bottom: 22px; }
123
+ /* Four columns, not auto-fill. auto-fill packed as many 166px cards per row as fit,
124
+ which left whatever did not divide evenly as dead space on the right - and letting
125
+ them grow into it instead produced 580px cards containing the digit 0. A fixed
126
+ four with the hero spanning two divides exactly, and the cards get a readable size
127
+ rather than the smallest one that fits. */
128
+ .grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; margin-bottom: 22px; }
119
129
  .card {
120
130
  position: relative; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius);
121
131
  padding: 18px; box-shadow: var(--shadow-1); overflow: hidden;
@@ -183,7 +193,10 @@
183
193
  .bar-fill { height: 100%; border-radius: 999px; transition: width .4s cubic-bezier(.4,0,.2,1); }
184
194
  .bar-row .num { width: 90px; text-align: right; font-family: var(--mono); font-variant-numeric: tabular-nums; }
185
195
  .bar-row .money { width: 78px; text-align: right; color: var(--good); font-family: var(--mono); font-variant-numeric: tabular-nums; }
186
- .empty { color: var(--muted); font-size: 14px; text-align: center; padding: 40px 0; }
196
+ /* Spans every column: an empty state dropped into a grid container was sitting in
197
+ the first cell, so "Status unavailable." read as left-aligned in a full-width
198
+ panel. Ignored outside a grid, so one rule covers both. */
199
+ .empty { grid-column: 1 / -1; color: var(--muted); font-size: 14px; text-align: center; padding: 32px 0; }
187
200
  .tbl { width: 100%; border-collapse: collapse; font-size: 13px; }
188
201
  .tbl th { position: sticky; top: 0; z-index: 1; text-align: left; background: var(--surface); color: var(--muted); font-family: var(--mono); font-weight: 600; font-size: 10.5px; text-transform: uppercase; letter-spacing: 0.6px; padding: 8px 10px; border-bottom: 1px solid var(--border); }
189
202
  .tbl td { padding: 8px 10px; border-bottom: 1px solid var(--border-soft); font-variant-numeric: tabular-nums; }
@@ -570,7 +583,7 @@
570
583
  }
571
584
  @media (max-width: 720px) {
572
585
  .content { padding: 16px; }
573
- .grid { grid-template-columns: repeat(2, 1fr); }
586
+ .grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
574
587
  header { gap: 12px; }
575
588
  .nav { margin-left: auto; flex-wrap: wrap; gap: 10px; }
576
589
  /* A settings row is label + controls side by side, and the control cluster is
@@ -895,7 +908,7 @@
895
908
  <button id="updateBtn" type="button" class="toggle on">Check &amp; update</button>
896
909
  </div>
897
910
  </div>
898
- <div class="sub" style="margin-bottom:14px">Only Context Compression and (opt-in) real tool-usage are measured for savings below. The rest is shown as state: enigma can't measure their effect because they run inside the agent, not through enigma - so it reports their configuration honestly instead of inventing a number.</div>
911
+ <div class="lede" style="margin-bottom:14px">Only Context Compression and (opt-in) real tool-usage are measured for savings below. The rest is shown as state: enigma can't measure their effect because they run inside the agent, not through enigma - so it reports their configuration honestly instead of inventing a number.</div>
899
912
  <div id="systems" class="sys-grid"><div class="empty" style="padding:16px 0">Loading...</div></div>
900
913
  <div id="updateNote" class="set-note"></div>
901
914
  <div id="fixPathResult" class="fixres"></div>
@@ -989,7 +1002,7 @@
989
1002
  </div>
990
1003
  <div class="panel" id="usagePanel" style="display:none">
991
1004
  <h2 style="margin:0 0 4px">Usage limits <small>same windows Claude Code shows</small></h2>
992
- <div class="sub" style="margin-bottom:12px">Cards marked <span class="tag meas">live</span> show the <b>real % and reset</b> Anthropic reports (the same as Claude's own UI). Turn on <code>enigma config usage-api on</code> to fetch them with your local Claude Code login - no proxy or plan limit needed. (The proxy also captures them from <code>enigma claude</code> traffic.) Until live data lands, the card falls back to tokens used, or a % against a plan limit you set (on the card, or <code>enigma config plan-weekly-limit &lt;tokens&gt;</code>). Per-model live data appears only when Anthropic sends it.</div>
1005
+ <div class="lede" style="margin-bottom:12px">Cards marked <span class="tag meas">live</span> show the <b>real % and reset</b> Anthropic reports (the same as Claude's own UI). Turn on <code>enigma config usage-api on</code> to fetch them with your local Claude Code login - no proxy or plan limit needed. (The proxy also captures them from <code>enigma claude</code> traffic.) Until live data lands, the card falls back to tokens used, or a % against a plan limit you set (on the card, or <code>enigma config plan-weekly-limit &lt;tokens&gt;</code>). Per-model live data appears only when Anthropic sends it.</div>
993
1006
  <div id="uWindows"></div>
994
1007
  <div class="grid" style="margin-bottom:16px">
995
1008
  <div class="card"><div class="label">Est. Cost</div><div id="uCost" class="value accent">-</div><div class="foot">All sessions, per-model pricing</div></div>
@@ -1009,7 +1022,7 @@
1009
1022
  <div>Projected <b id="uBlockProj">-</b></div>
1010
1023
  </div>
1011
1024
  </div>
1012
- <div id="uProviders" class="sub" style="margin:4px 0 0"></div>
1025
+ <div id="uProviders" class="lede" style="margin:4px 0 0"></div>
1013
1026
  <div id="uByAccountWrap">
1014
1027
  <h2 style="margin:18px 0 10px">By Account <small>per Claude login</small></h2>
1015
1028
  <div id="uByAccount"></div>
@@ -1023,11 +1036,11 @@
1023
1036
  </div>
1024
1037
  <div class="panel" id="usageHint" style="display:none">
1025
1038
  <h2 style="margin-bottom:8px">Real tool usage <small>opt-in</small></h2>
1026
- <div class="sub">Turn on <b>Real tool-usage stats</b> in <a href="#/settings">Settings</a> to read your Claude Code sessions for token consumption and cost. enigma reads only your local session transcripts; nothing is sent anywhere.</div>
1039
+ <div class="lede">Turn on <b>Real tool-usage stats</b> in <a href="#/settings">Settings</a> to read your Claude Code sessions for token consumption and cost. enigma reads only your local session transcripts; nothing is sent anywhere.</div>
1027
1040
  </div>
1028
1041
  <div class="panel" id="usageUnavail" style="display:none">
1029
1042
  <h2 id="unavailTitle" style="margin-bottom:8px">No local usage data</h2>
1030
- <div class="sub" id="unavailBody"></div>
1043
+ <div class="lede" id="unavailBody"></div>
1031
1044
  </div>
1032
1045
  </section>
1033
1046
 
@@ -1140,7 +1153,7 @@
1140
1153
 
1141
1154
  <div class="panel" id="gateSetPanel">
1142
1155
  <div class="set-cat-h">Pipeline settings</div>
1143
- <div class="sub" style="margin-bottom:10px">What the daemon runs and how hard it tries. Model and auto-fix limits are what a run's duration and token cost actually hang on.</div>
1156
+ <div class="lede" style="margin-bottom:10px">What the daemon runs and how hard it tries. Model and auto-fix limits are what a run's duration and token cost actually hang on.</div>
1144
1157
  <div class="set-grid">
1145
1158
  <div class="set-row">
1146
1159
  <div class="set-meta"><div class="set-name">Agent</div><div class="set-hint" id="gateAgentHint">which coding agent the pipeline drives</div></div>
@@ -1164,7 +1177,7 @@
1164
1177
  </div>
1165
1178
  </div>
1166
1179
  <div class="set-cat-h" style="margin-top:18px">Findings</div>
1167
- <div class="sub" style="margin-bottom:10px">Who decides what happens to something the review turns up.</div>
1180
+ <div class="lede" style="margin-bottom:10px">Who decides what happens to something the review turns up.</div>
1168
1181
  <div class="set-grid">
1169
1182
  <div class="set-row span">
1170
1183
  <div class="set-meta"><div class="set-name">When the gate finds something</div><div class="set-hint" id="gateFixHint"></div></div>
@@ -1172,13 +1185,13 @@
1172
1185
  </div>
1173
1186
  </div>
1174
1187
  <div class="set-cat-h" style="margin-top:18px">Auto-fix attempts</div>
1175
- <div class="sub" style="margin-bottom:10px">Follow-up rounds a step gets before it pauses for you. Every round is another full agent pass over the diff, so this is the setting that multiplies a run's cost. 0 pauses immediately.</div>
1188
+ <div class="lede" style="margin-bottom:10px">Follow-up rounds a step gets before it pauses for you. Every round is another full agent pass over the diff, so this is the setting that multiplies a run's cost. 0 pauses immediately.</div>
1176
1189
  <div class="set-grid" id="gateAutoFix"></div>
1177
1190
  </div>
1178
1191
 
1179
1192
  <div class="panel" id="gateRepoPanel" style="display:none">
1180
1193
  <div class="set-cat-h">Repository configuration</div>
1181
- <div class="sub" style="margin-bottom:10px">Committed with the repository and merged over the global config. Only the fields the gate trusts from a branch take effect.</div>
1194
+ <div class="lede" style="margin-bottom:10px">Committed with the repository and merged over the global config. Only the fields the gate trusts from a branch take effect.</div>
1182
1195
  <textarea id="gateRepoCfg" class="linput gate-yaml" spellcheck="false" autocapitalize="none" autocorrect="off" aria-label="Repository gate configuration"></textarea>
1183
1196
  <div class="ladd" style="gap:8px;align-items:center">
1184
1197
  <button id="gateRepoCfgSave" type="button" class="toggle on" disabled title="No changes to save">Save</button>
@@ -2458,7 +2471,7 @@ export {
2458
2471
  // Friendly names for known MCP clients / content types; unknown -> title-cased raw.
2459
2472
  const SOURCE_LABELS = {
2460
2473
  "claude-code": "Claude Code", "claude": "Claude Code", "claude-desktop": "Claude Desktop",
2461
- "opencode": "OpenCode", "codex": "Codex", "codex-cli": "Codex",
2474
+ "opencode": "OpenCode", "codex": "Codex", "codex-cli": "Codex", "kimi-code": "Kimi Code", "kimi": "Kimi Code",
2462
2475
  "cli": "CLI (enigma compress)", "unknown": "Unattributed",
2463
2476
  };
2464
2477
  function prettySource(k) { return SOURCE_LABELS[k] || String(k).replace(/[-_]/g, " ").replace(/\b\w/g, (c) => c.toUpperCase()); }
@@ -2553,6 +2566,7 @@ export {
2553
2566
  claude: { label: "Claude Code", status: "https://status.claude.com/api/v2/status.json", viewHref: "https://claude.ai/settings/usage", viewLabel: "View in Claude" },
2554
2567
  codex: { label: "Codex", status: "https://status.openai.com/api/v2/status.json", viewHref: "https://platform.openai.com/usage", viewLabel: "View in OpenAI" },
2555
2568
  opencode: { label: "OpenCode", status: null, viewHref: "https://opencode.ai", viewLabel: "View OpenCode" },
2569
+ kimi: { label: "Kimi Code", status: null, viewHref: "https://www.kimi.com/code", viewLabel: "View Kimi Code" },
2556
2570
  };
2557
2571
  let usageData = null; // the latest /api/stats usage report (null when opt-in is off)
2558
2572
  let usageProvider = "claude";
@@ -3523,15 +3537,16 @@ export {
3523
3537
  // App-specific settings (per-agent approval bypass) get the app's logo prefixed to
3524
3538
  // the label, so the Permissions list reads at a glance. AGENT_ICONS is defined below
3525
3539
  // but only referenced at render time, so it is initialised by then.
3526
- const AGENT_LABEL_BY_NAME = { claude: "Claude Code", codex: "OpenAI Codex", opencode: "OpenCode" };
3540
+ const AGENT_LABEL_BY_NAME = { claude: "Claude Code", codex: "OpenAI Codex", opencode: "OpenCode", kimi: "Kimi Code" };
3527
3541
  const GH_ICON = '<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23A11.52 11.52 0 0 1 12 5.803c1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222 0 1.606-.014 2.898-.014 3.293 0 .322.216.694.825.576C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg>';
3528
3542
  // Map a setting key to the app/service logo prefixed to its label (per-agent bypass,
3529
3543
  // the Claude-specific toggles, and the GitHub telemetry toggle).
3530
3544
  function settingIcon(key) {
3531
3545
  key = key || "";
3532
3546
  let svg = "", title = "";
3533
- const bp = /^bypass-(claude|codex|opencode)$/.exec(key);
3547
+ const bp = /^bypass-(claude|codex|opencode|kimi)$/.exec(key);
3534
3548
  if (bp) { svg = (typeof AGENT_ICONS !== "undefined" && AGENT_ICONS[bp[1]]) || ""; title = AGENT_LABEL_BY_NAME[bp[1]]; }
3549
+ else if (key === "kimi-trust") { svg = (typeof AGENT_ICONS !== "undefined" && AGENT_ICONS.kimi) || ""; title = "Kimi Code"; }
3535
3550
  else if (key === "claude-attribution" || key === "claude-survey" || key === "claude-trust" || key === "proxy") { svg = (typeof AGENT_ICONS !== "undefined" && AGENT_ICONS.claude) || ""; title = "Claude Code"; }
3536
3551
  else if (key === "gh-telemetry") { svg = GH_ICON; title = "GitHub"; }
3537
3552
  return svg ? '<span class="aicon set-ic" title="' + esc(title) + '" aria-hidden="true">' + svg + "</span>" : "";
@@ -3941,6 +3956,8 @@ export {
3941
3956
  claude: '<svg viewBox="0 0 100 100" fill="currentColor" aria-hidden="true"><path d="m19.6 66.5 19.7-11 .3-1-.3-.5h-1l-3.3-.2-11.2-.3L14 53l-9.5-.5-2.4-.5L0 49l.2-1.5 2-1.3 2.9.2 6.3.5 9.5.6 6.9.4L38 49.1h1.6l.2-.7-.5-.4-.4-.4L29 41l-10.6-7-5.6-4.1-3-2-1.5-2-.6-4.2 2.7-3 3.7.3.9.2 3.7 2.9 8 6.1L37 36l1.5 1.2.6-.4.1-.3-.7-1.1L33 25l-6-10.4-2.7-4.3-.7-2.6c-.3-1-.4-2-.4-3l3-4.2L28 0l4.2.6L33.8 2l2.6 6 4.1 9.3L47 29.9l2 3.8 1 3.4.3 1h.7v-.5l.5-7.2 1-8.7 1-11.2.3-3.2 1.6-3.8 3-2L61 2.6l2 2.9-.3 1.8-1.1 7.7L59 27.1l-1.5 8.2h.9l1-1.1 4.1-5.4 6.9-8.6 3-3.5L77 13l2.3-1.8h4.3l3.1 4.7-1.4 4.9-4.4 5.6-3.7 4.7-5.3 7.1-3.2 5.7.3.4h.7l12-2.6 6.4-1.1 7.6-1.3 3.5 1.6.4 1.6-1.4 3.4-8.2 2-9.6 2-14.3 3.3-.2.1.2.3 6.4.6 2.8.2h6.8l12.6 1 3.3 2 1.9 2.7-.3 2-5.1 2.6-6.8-1.6-16-3.8-5.4-1.3h-.8v.4l4.6 4.5 8.3 7.5L89 80.1l.5 2.4-1.3 2-1.4-.2-9.2-7-3.6-3-8-6.8h-.5v.7l1.8 2.7 9.8 14.7.5 4.5-.7 1.4-2.6 1-2.7-.6-5.8-8-6-9-4.7-8.2-.5.4-2.9 30.2-1.3 1.5-3 1.2-2.5-2-1.4-3 1.4-6.2 1.6-8 1.3-6.4 1.2-7.9.7-2.6v-.2H49L43 72l-9 12.3-7.2 7.6-1.7.7-3-1.5.3-2.8L24 86l10-12.8 6-7.9 4-4.6-.1-.5h-.3L17.2 77.4l-4.7.6-2-2 .2-3 1-1 8-5.5Z"/></svg>',
3942
3957
  codex: '<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"/></svg>',
3943
3958
  opencode: '<svg viewBox="0 0 240 300" fill="currentColor" aria-hidden="true"><path d="M180 240H60V120H180V240Z" opacity=".55"/><path fill-rule="evenodd" d="M180 60H60V240H180V60ZM240 300H0V0H240V300Z"/></svg>',
3959
+ // Kimi Code is Moonshot AI's agent; the mark is Kimi's own, monochrome upstream.
3960
+ kimi: '<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M21.765.351C22.998.351 24 1.353 24 2.586S22.998 4.82 21.765 4.82h-1.974c-.15 0-.26-.12-.26-.26V2.586A2.237 2.237 0 0 1 21.765.35M9.41 13.388l8.447-8.377c.16-.16.07-.471-.14-.471h-4.55s-.1.02-.14.06l-9.099 9.029c-.14.14-.35.02-.35-.21V4.81c0-.15-.1-.27-.221-.27H.22c-.12 0-.22.12-.22.27v18.57c0 .15.1.27.22.27h3.137c.12 0 .22-.12.22-.27v-3.79c0-.08.03-.16.08-.21l2.826-2.796c.07-.07.16-.08.241-.03l7.546 5.551a8.9 8.9 0 0 0 4.018 1.493c.12.01.23-.11.23-.27V19.76c0-.14-.08-.25-.19-.26a5.8 5.8 0 0 1-2.355-.942l-6.533-4.73c-.14-.09-.15-.32-.03-.441"/></svg>',
3944
3961
  // Rovo Dev is Atlassian's agent (it is driven through `acli rovodev`), so it carries
3945
3962
  // the Atlassian mark - there is no separate Rovo Dev glyph to use.
3946
3963
  rovodev: '<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M7.12 11.084a.683.683 0 00-1.16.126L.075 22.974a.703.703 0 00.63 1.018h8.19a.678.678 0 00.63-.39c1.767-3.65.696-9.203-2.406-12.52zM11.434.386a15.515 15.515 0 00-.906 15.317l3.95 7.9a.703.703 0 00.628.388h8.19a.703.703 0 00.63-1.017L12.63.38a.664.664 0 00-1.196.006z"/></svg>',
@@ -3961,6 +3978,7 @@ export {
3961
3978
  const agentName = (label) => {
3962
3979
  const s = String(label || "").trim().toLowerCase();
3963
3980
  if (s === "pi") return "pi";
3981
+ if (s.includes("kimi")) return "kimi";
3964
3982
  return s.includes("claude") ? "claude"
3965
3983
  : s.includes("opencode") ? "opencode"
3966
3984
  : s.includes("codex") ? "codex"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@enigmax/dashboard",
3
- "version": "0.1.105",
3
+ "version": "0.1.107",
4
4
  "description": "Local browser dashboard UI for enigma: the static page and chart assets enigma serves on its loopback dashboard (savings, real tool usage, in-browser settings). Installed on demand by enigma-cli; not a runtime dependency.",
5
5
  "type": "module",
6
6
  "files": [