Skip to content

fix: simplify compact activity summaries#1725

Closed
Michaelyklam wants to merge 2 commits intonesquena:masterfrom
Michaelyklam:fix/compact-activity-summary
Closed

fix: simplify compact activity summaries#1725
Michaelyklam wants to merge 2 commits intonesquena:masterfrom
Michaelyklam:fix/compact-activity-summary

Conversation

@Michaelyklam
Copy link
Copy Markdown
Contributor

@Michaelyklam Michaelyklam commented May 5, 2026

Thinking Path

  • Compact Activity rows should reduce transcript noise, not move the noise into the collapsed header.
  • The previous summary repeated thinking state, listed tool names, and showed a redundant count badge.
  • The intended invariant is a terse disclosure row: Activity: N tools, with details available only after expansion.

What Changed

  • Simplified compact Activity summary markup in static/ui.js.
  • Removed the redundant trailing count badge and tool-name list styling from static/style.css.
  • Updated DESIGN.md to document the terse summary rule.
  • Added regression coverage in tests/test_ui_tool_call_cleanup.py for the compact summary invariants.
  • Added before/after UI media under docs/pr-media/1725/.

Why It Matters

This keeps successful tool/thinking activity quiet by default while preserving progressive disclosure for details. The transcript reads more like a chat and less like a debug console.

UI media

Before:

Before compact Activity summary

After:

After compact Activity summary

Verification

  • GitHub Actions: test (3.11), test (3.12), and test (3.13) are passing on commit 443425da.
  • Raw UI media URLs verified HTTP 200.

Risks / Follow-ups

  • Low-risk visual cleanup; expanded Activity details remain available.
  • No backend or persistence behavior changed.

Model Used

OpenAI Codex / GPT-5.5 via Hermes Agent, with terminal/file/browser tooling and maintainer-autopilot PR stewardship.

@nesquena-hermes
Copy link
Copy Markdown
Collaborator

Summary

Pulled the branch and walked the diff. The change is a clean visual simplification of the compact Activity row: drop the redundant tool-name list and trailing count badge, keep just Activity: N tools plus the duration. The DESIGN.md update encodes the new invariant. One coordination note about #1729 below.

Code reference

Reading static/ui.js:3792 on the branch, the new template literal is:

group.innerHTML=`<button type="button" class="tool-call-group-summary" aria-expanded="${collapsed?'false':'true'}" onclick="..."><span class="tool-call-group-chevron">${li('chevron-right',12)}</span><span class="tool-call-group-label">Activity</span><span class="tool-call-group-duration"></span></button><div class="tool-call-group-body"></div>`;

vs origin/master which still has .tool-call-group-list ("tools / thinking" placeholder) and .tool-call-group-count ("0" badge) spans.

The matching _syncToolCallGroupSummary simplification on static/ui.js:4874-4895:

const cards=Array.from(group.querySelectorAll('.tool-card-row .tool-card'));
const toolCount=cards.length;
const label=group.querySelector('.tool-call-group-label');
const durationEl=group.querySelector('.tool-call-group-duration');
if(label){
  if(toolCount) label.textContent=`Activity: ${toolCount} tool${toolCount===1?'':'s'}`;
  else label.textContent='Activity';
}

That drops the thinkingCount query, the uniqueNames extraction, the parts join, and the total = toolCount + thinkingCount accounting. The thinking activity is still rendered on expand (it's inside .tool-call-group-body); just not previewed in the collapsed summary anymore.

Diagnosis

The DESIGN.md edit at DESIGN.md:140-143 is precise about the new invariant:

Summary line uses one disclosure for internals and stays intentionally terse, e.g. Activity: 4 tools. It should not repeat the always-present thinking area, list individual tool names, or add a second trailing count badge.

That language explicitly forbids each of the three things removed. The two static regression tests in tests/test_ui_tool_call_cleanup.py lock in the absence of .tool-call-group-list / .tool-call-group-count from the template, so future changes that try to reintroduce a names list or count badge will trip a test.

The CSS removals in static/style.css:1753-1756 (deleting the rules for .tool-call-group-list and .tool-call-group-count) are clean orphan cleanup since both spans are now gone.

Coordination with #1729

#1729 ("persist compact activity disclosure state") is open right now and edits the same ensureActivityGroup() template with a different shape — it keeps the .tool-call-group-list span and the .tool-call-group-count span, and rewrites the onclick to call _toggleActivityGroup(this). Whichever of these two PRs lands second will need a rebase; mechanically:

I left the same coordination note on #1729. The two changes are conceptually independent (visual cleanup vs. UI-state durability), so neither should block the other — just needs a quick reconciliation pass on whichever rebases.

Verification

CI is green on 3.11/3.12/3.13 at commit 443425d. The before/after media in docs/pr-media/1725/ shows the simplification clearly. Looks good to merge once the #1729 ordering is decided.

@nesquena-hermes
Copy link
Copy Markdown
Collaborator

Thanks @Michaelyklam — this shipped in v0.51.8 (commit 85d0279) as part of a 7-PR full-sweep batch release. Stage rebased your branch onto current master, ran the full pre-release gate (4584 pytest, browser tests, Opus advisor verdict SHIP), and merged via release PR #1737.

GitHub didn't auto-close because the merge commit only references the squash-merged stage branch, not your fork's commit directly — closing manually for hygiene.

Live now on https://get-hermes.ai/ and on existing installs after git pull + restart.

Release notes: https://github.com/nesquena/hermes-webui/releases/tag/v0.51.8

pull Bot pushed a commit to soitun/hermes-webui that referenced this pull request May 6, 2026
pull Bot pushed a commit to soitun/hermes-webui that referenced this pull request May 6, 2026
…p + test-isolation fix

Constituent PRs:
- nesquena#1725 (@Michaelyklam) — simplify compact Activity row summary
- nesquena#1726 (@Michaelyklam) — delegate generic provider catalogs to Hermes CLI (slice of nesquena#1240)
- nesquena#1727 (@Michaelyklam) — link Claude Code OAuth in onboarding (closes nesquena#1362)
- nesquena#1728 (@starship-s) — preserve profile context when starting chats
- nesquena#1729 (@Michaelyklam) — persist compact Activity disclosure state
- nesquena#1730 (@Michaelyklam) — prevent sticky sidebar hover drag state
- nesquena#1732 (@Sanjays2402) — unpin scroll on small upward motion during streaming (closes nesquena#1731)

Plus 2 in-stage absorbed fixes:
- test-isolation fix: monkeypatch.setattr(config, 'cfg', X) survives PR nesquena#1728's
  path/mtime-aware get_config() reload. Mandatory before tag (Opus stage-302).
- Opus SHOULD-FIX #1: _lastScrollTop reset on session switch (nesquena#1732 follow-up).

Tests: 4537 → 4584 passing (+47). 0 regressions. Full suite ~128s. Stably green.

Pre-release verification:
- All 7 PRs CI-green individually + rebased onto master
- pytest 4584 passed, 0 failed (multiple runs)
- node -c clean on all 4 modified .js files
- 11/11 browser API endpoints PASS on isolated port 8789
- 20 QA tests via webui_qa_agent.sh PASS
- Opus advisor: SHIP, 5/5 verification clean, 0 MUST-FIX, 1 SHOULD-FIX absorbed
  (_lastScrollTop reset), 1 SHOULD-FIX deferred (nesquena#1736 — _clear_anthropic_env_values
  race, onboarding-time-only)

Closes nesquena#1362, nesquena#1731.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants