@axiomatic-labs/claudeflow 2.13.32 → 2.13.33

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/lib/panel.js +14 -3
  2. package/package.json +1 -1
package/lib/panel.js CHANGED
@@ -606,6 +606,11 @@ details[open] summary { padding-bottom: 8px; border-bottom: 1px solid var(--bord
606
606
  .logs-table tr.token-normal td:first-child { border-left: 3px solid var(--border); }
607
607
  .logs-table tr.token-heavy td:first-child { border-left: 3px solid var(--warn); }
608
608
  .logs-table tr.token-high td:first-child { border-left: 3px solid var(--err); }
609
+ .logs-table tr.silenced { opacity: 0.78; }
610
+ .logs-table tr.silenced .logs-handler { text-decoration: line-through; text-decoration-color: rgba(248,81,73,0.5); }
611
+ .logs-status { font-family: var(--mono); font-size: 12px; white-space: nowrap; }
612
+ .logs-status.injected { color: #58a6ff; }
613
+ .logs-status.silenced { color: var(--err); font-weight: 600; }
609
614
  .token-badge { display: inline-block; padding: 1px 7px; border-radius: 999px; font-size: 10px; font-family: var(--mono); margin-left: 6px; vertical-align: middle; }
610
615
  .token-badge.heavy { background: rgba(210,153,34,0.18); color: var(--warn); }
611
616
  .token-badge.high { background: rgba(248,81,73,0.20); color: var(--err); }
@@ -1059,9 +1064,13 @@ function renderLogs() {
1059
1064
  const thresholds = (state.logs && state.logs.thresholds) || { heavy: 8000, high: 20000 };
1060
1065
  const rows = logsState.entries.map((e) => {
1061
1066
  const isReminder = e.type.startsWith('reminder');
1067
+ const isSilenced = e.type === 'enforcement-silenced';
1062
1068
  const badge = isReminder
1063
1069
  ? '<span class="badge info" style="background:rgba(88,166,255,0.18); color:#58a6ff">REMINDER</span>'
1064
1070
  : '<span class="badge err">ENFORCEMENT</span>';
1071
+ const statusCell = isSilenced
1072
+ ? '<span class="logs-status silenced" title="Master Enforcement OFF silenced this hook — it did NOT run. Claude Code received no output for this event.">✗ SILENCED</span>'
1073
+ : '<span class="logs-status injected" title="Hook ran and emitted additionalContext to Claude Code">✓ injected</span>';
1065
1074
  const tokenStatus = e.tokenStatus || 'none';
1066
1075
  const tokenBadge = tokenStatus === 'high'
1067
1076
  ? '<span class="token-badge high" title="High — exceeds the high-water threshold (' + thresholds.high.toLocaleString() + ' tokens). Consider trimming.">⚠ HIGH</span>'
@@ -1074,10 +1083,12 @@ function renderLogs() {
1074
1083
  const bytesStr = e.contentBytes ? fmtBytes(e.contentBytes) : '';
1075
1084
  const tokensTitle = e.contentBytes
1076
1085
  ? \`≈\${e.contentTokens} tokens (chars/4 heuristic) · \${fmtBytes(e.contentBytes)} raw · status: \${tokenStatus}\`
1077
- : 'No content (enforcement-silenced)';
1078
- return \`<tr class="token-\${tokenStatus}">
1086
+ : 'No content (hook was silenced — never ran)';
1087
+ const rowCls = \`token-\${tokenStatus}\${isSilenced ? ' silenced' : ''}\`;
1088
+ return \`<tr class="\${rowCls}">
1079
1089
  <td class="logs-time"><span title="\${escapeHtml(e.timestamp)}">\${escapeHtml(fmtLocalTime(e.timestamp))}</span><br><span class="muted" style="font-size:11px">\${fmtRelativeTime(e.timestamp)}</span></td>
1080
1090
  <td>\${badge}</td>
1091
+ <td>\${statusCell}</td>
1081
1092
  <td class="logs-handler"><span class="muted">\${escapeHtml(e.event)}</span><br>\${escapeHtml(e.handler)}\${e.matcher ? \` <span class="muted">(\${escapeHtml(e.matcher)})</span>\` : ''}</td>
1082
1093
  <td class="logs-size" title="\${escapeHtml(tokensTitle)}">\${tokensStr}\${tokenBadge}\${bytesStr ? \`<br><span class="muted" style="font-size:11px">\${bytesStr}</span>\` : ''}</td>
1083
1094
  <td><button class="logs-view" data-log-id="\${escapeHtml(e.id)}">View</button></td>
@@ -1104,7 +1115,7 @@ function renderLogs() {
1104
1115
  <button id="logs-reload">Reload</button>
1105
1116
  </div>
1106
1117
  \${empty || \`<table class="logs-table">
1107
- <thead><tr><th>Time</th><th>Type</th><th>Handler</th><th title="Approximate token count (chars/4 heuristic, ±10–15% vs Claude's real tokenizer). Heavy ≥\${thresholds.heavy.toLocaleString()} → yellow border. High ≥\${thresholds.high.toLocaleString()} → red border. Anthropic does not publish official thresholds for per-turn additionalContext.">≈ Tokens</th><th></th></tr></thead>
1118
+ <thead><tr><th>Time</th><th>Type</th><th title="Did the hook actually run? ✓ injected = hook ran and emitted to Claude Code · ✗ SILENCED = master Enforcement OFF blocked the hook from running.">Status</th><th>Handler</th><th title="Approximate token count (chars/4 heuristic, ±10–15% vs Claude's real tokenizer). Heavy ≥\${thresholds.heavy.toLocaleString()} → yellow border. High ≥\${thresholds.high.toLocaleString()} → red border. Anthropic does not publish official thresholds for per-turn additionalContext.">≈ Tokens</th><th></th></tr></thead>
1108
1119
  <tbody>\${rows}</tbody>
1109
1120
  </table>\`}
1110
1121
  \${logsState.allLoaded || logsState.entries.length === 0 ? '' : '<div style="margin-top:12px"><button id="logs-load-more">Load older</button></div>'}\`;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axiomatic-labs/claudeflow",
3
- "version": "2.13.32",
3
+ "version": "2.13.33",
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"