@axiomatic-labs/claudeflow 2.13.31 → 2.13.32

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 -0
  2. package/package.json +1 -1
package/lib/panel.js CHANGED
@@ -405,6 +405,9 @@ function listLogEvents(cwd, { limit = 200, before = null, type = 'all' } = {}) {
405
405
  contentTokens: tokens,
406
406
  tokenStatus: classifyTokens(tokens, thresholds),
407
407
  activeReminderIds: r.activeReminderIds || null,
408
+ capturedFromStdout: r.capturedFromStdout === true,
409
+ stdoutTruncated: r.stdoutTruncated === true,
410
+ parseError: r.parseError || null,
408
411
  });
409
412
  }
410
413
  return { entries, total, thresholds };
@@ -982,6 +985,17 @@ async function viewLogDetail(id) {
982
985
  html += '<h4 style="margin-top:14px">Active reminders at fire time</h4>';
983
986
  html += '<p class="sub">' + ev.activeReminderIds.map(escapeHtml).join(', ') + '</p>';
984
987
  }
988
+ // Provenance: did we authentically capture the hook's stdout, or is the
989
+ // record empty / parsed-failed / truncated? Make this visible at the top
990
+ // of the drawer so the user can trust (or distrust) the content shown.
991
+ if (typeof ev.capturedFromStdout === 'boolean') {
992
+ const provBadge = ev.capturedFromStdout
993
+ ? '<span class="badge ok" title="Bytes captured directly from the hook&#39;s stdout — this is the actual additionalContext that Claude Code received.">✓ stdout-captured</span>'
994
+ : (ev.parseError
995
+ ? '<span class="badge err" title="Hook stdout was captured but JSON.parse failed: ' + escapeHtml(ev.parseError) + '">✗ parse failed</span>'
996
+ : '<span class="badge warn" title="No content was captured — the hook may have crashed before writing or returned null.">⚠ no stdout</span>');
997
+ html += '<h4 style="margin-top:14px">Provenance ' + provBadge + (ev.stdoutTruncated ? ' <span class="badge warn">⚠ truncated</span>' : '') + '</h4>';
998
+ }
985
999
  if (typeof ev.contentBytes === 'number' && ev.contentBytes > 0) {
986
1000
  const tokens = typeof ev.contentTokens === 'number' ? ev.contentTokens : Math.round(ev.contentBytes / 4);
987
1001
  const th = (state.logs && state.logs.thresholds) || { heavy: 8000, high: 20000 };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axiomatic-labs/claudeflow",
3
- "version": "2.13.31",
3
+ "version": "2.13.32",
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"