@axiomatic-labs/claudeflow 2.13.79 → 2.13.81
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/lib/panel.js +26 -14
- package/package.json +1 -1
package/lib/panel.js
CHANGED
|
@@ -1037,6 +1037,16 @@ function severityFor(id) {
|
|
|
1037
1037
|
if (s.observer.servers && s.observer.servers.some((sr) => sr.status === 'unhealthy' || sr.status === 'exited')) return 'warn';
|
|
1038
1038
|
return 'ok';
|
|
1039
1039
|
}
|
|
1040
|
+
case 'validators': {
|
|
1041
|
+
if (!s.validators || !s.validators.available) return 'info';
|
|
1042
|
+
// Block > error > pass > skip. Block is the actionable state — the
|
|
1043
|
+
// hook actually halted the agent. Surface it the same way Observer
|
|
1044
|
+
// surfaces unresolved incidents (warn = amber dot in the nav).
|
|
1045
|
+
if (s.validators.stats && s.validators.stats.block > 0) return 'warn';
|
|
1046
|
+
if (s.validators.stats && s.validators.stats.error > 0) return 'warn';
|
|
1047
|
+
if (s.validators.stats && s.validators.stats.pass > 0) return 'ok';
|
|
1048
|
+
return 'info';
|
|
1049
|
+
}
|
|
1040
1050
|
case 'setupContext': return !s.setupContext.exists ? 'err' : (s.setupContext.toolingComplete ? 'ok' : 'warn');
|
|
1041
1051
|
case 'activeRun': return s.activeRun.active ? 'info' : 'info';
|
|
1042
1052
|
case 'doctor': return s.doctor.issueCount > 0 ? 'warn' : 'ok';
|
|
@@ -1669,19 +1679,23 @@ function renderValidators() {
|
|
|
1669
1679
|
|
|
1670
1680
|
const validators = [...new Set(v.runs.map((r) => r.validator))].sort();
|
|
1671
1681
|
const scopes = [...new Set(v.runs.map((r) => r.scope))].sort();
|
|
1682
|
+
// Reuse the observer-filter CSS class so the Validators tab matches
|
|
1683
|
+
// the visual language of the Observer tab. Pre-v2.13.80 the pills used
|
|
1684
|
+
// a non-existent pill class, falling back to default browser button
|
|
1685
|
+
// styling — light buttons on dark background.
|
|
1672
1686
|
const validatorPill = (label, value, count) => {
|
|
1673
1687
|
const a = (validatorsFilter === value);
|
|
1674
|
-
const cls = a ? '
|
|
1688
|
+
const cls = a ? 'observer-filter active' : 'observer-filter';
|
|
1675
1689
|
return \`<button class="\${cls}" data-validators-filter="\${escapeHtml(value)}">\${escapeHtml(label)}<span class="muted" style="margin-left:6px;font-size:11px;">\${count}</span></button>\`;
|
|
1676
1690
|
};
|
|
1677
1691
|
const statusPill = (label, value, count) => {
|
|
1678
1692
|
const a = (validatorsStatusFilter === value);
|
|
1679
|
-
const cls = a ? '
|
|
1693
|
+
const cls = a ? 'observer-filter active' : 'observer-filter';
|
|
1680
1694
|
return \`<button class="\${cls}" data-validators-status-filter="\${escapeHtml(value)}">\${escapeHtml(label)}<span class="muted" style="margin-left:6px;font-size:11px;">\${count}</span></button>\`;
|
|
1681
1695
|
};
|
|
1682
1696
|
const scopePill = (label, value, count) => {
|
|
1683
1697
|
const a = (validatorsScopeFilter === value);
|
|
1684
|
-
const cls = a ? '
|
|
1698
|
+
const cls = a ? 'observer-filter active' : 'observer-filter';
|
|
1685
1699
|
return \`<button class="\${cls}" data-validators-scope-filter="\${escapeHtml(value)}">\${escapeHtml(label)}<span class="muted" style="margin-left:6px;font-size:11px;">\${count}</span></button>\`;
|
|
1686
1700
|
};
|
|
1687
1701
|
|
|
@@ -1738,21 +1752,19 @@ function renderValidators() {
|
|
|
1738
1752
|
? 'Clear all history'
|
|
1739
1753
|
: \`Clear "\${escapeHtml(validatorsScopeFilter)}" history\`;
|
|
1740
1754
|
|
|
1755
|
+
const filterRow = (label, pillsHtml) => \`<div style="display:flex;align-items:center;gap:10px;margin:6px 0;flex-wrap:wrap;">
|
|
1756
|
+
<span class="muted" style="font-size:11px;text-transform:uppercase;letter-spacing:0.5px;min-width:74px;">\${label}</span>
|
|
1757
|
+
<div style="display:flex;gap:6px;flex-wrap:wrap;">\${pillsHtml}</div>
|
|
1758
|
+
</div>\`;
|
|
1759
|
+
|
|
1741
1760
|
return \`<h2>Validators
|
|
1742
1761
|
<button id="clear-validators" class="btn btn-ghost" style="float:right;font-size:12px;" data-scope="\${escapeHtml(validatorsScopeFilter)}">\${clearLabel}</button>
|
|
1743
1762
|
</h2>
|
|
1744
1763
|
<p class="muted" style="margin-top:0;">Last updated \${formatRelativeTime(v.updated_at)} · \${v.stats.total} total run(s): \${v.stats.pass} pass, \${v.stats.block} block, \${v.stats.skip} skip, \${v.stats.error} error.</p>
|
|
1745
|
-
<div style="margin:12px 0;">
|
|
1746
|
-
|
|
1747
|
-
\${
|
|
1748
|
-
|
|
1749
|
-
<div style="margin:12px 0;">
|
|
1750
|
-
<div style="margin-bottom:6px;"><span class="muted" style="font-size:11px;text-transform:uppercase;">Scope</span></div>
|
|
1751
|
-
\${scopePills}
|
|
1752
|
-
</div>
|
|
1753
|
-
<div style="margin:12px 0;">
|
|
1754
|
-
<div style="margin-bottom:6px;"><span class="muted" style="font-size:11px;text-transform:uppercase;">Status</span></div>
|
|
1755
|
-
\${statusPills}
|
|
1764
|
+
<div class="card" style="padding:10px 14px;margin:12px 0;">
|
|
1765
|
+
\${filterRow('Validator', validatorPills)}
|
|
1766
|
+
\${filterRow('Scope', scopePills)}
|
|
1767
|
+
\${filterRow('Status', statusPills)}
|
|
1756
1768
|
</div>
|
|
1757
1769
|
<div class="card" style="padding:0;">\${runRows || '<p class="muted" style="padding:12px;">No runs match the current filter.</p>'}</div>\`;
|
|
1758
1770
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@axiomatic-labs/claudeflow",
|
|
3
|
-
"version": "2.13.
|
|
3
|
+
"version": "2.13.81",
|
|
4
4
|
"description": "Claudeflow — AI-powered development toolkit for Claude Code. Skills, agents, hooks, and quality gates that ship production apps.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"claudeflow": "./bin/cli.js"
|