agentgui 1.0.1024 → 1.0.1026

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.
@@ -0,0 +1 @@
1
+ 1
@@ -0,0 +1,8 @@
1
+ ---
2
+ key: mem-0c444abde86202f6-1681
3
+ ns: default
4
+ created: 1783677428217
5
+ updated: 1783677428217
6
+ ---
7
+
8
+ agentgui 31st run addendum (2026-07-10): confirming gm-continue pass caught that the gui-ux-craft workflow's light-theme-contrast lens had crashed mid-run (API connection error) and never actually produced findings - a real coverage gap, not a clean pass. Dedicated follow-up audit computed real WCAG contrast ratios (not eyeballed) and found 6 genuine light-theme failures the crashed lens would have caught: chat avatar initials using raw --mascot/--accent-ink on tinted backgrounds (2.03:1/3.65:1), tool-done status text using --success/--green-2 (3.18:1/2.88:1) instead of the text-safe --green, --amber measuring 4.26:1 on --bg-2 (narrowly failing AA on the background it actually renders on, despite being tuned for --paper), --danger measuring 4.25:1 on --bg-2 for the same reason (auth-error banner), raw --mascot as button/CLI text (3.11:1), and --sun being essentially unusable everywhere it's used (1.1-1.5:1 against every app background) - retired in favor of --amber. All fixed with the same pattern as the 22nd-run --accent->--accent-ink precedent: separate text-safe 'deep' tokens from fill/border tokens, and always check contrast against the ACTUAL background a token renders on (--bg-2 card surfaces, not just --paper) not just the token's own design-time tuning target. LESSON for gm-continue: when a workflow notification includes a `failures` array naming a lens that errored out, that lens's scope is unaudited work, not a null result - it belongs in the confirming PLAN pass as its own row, the same as any other unaudited surface. Kit pushed df04d69, agentgui pushed 03002cf, CI green (Test/Deploy GH Pages/Publish and Release/Auto-Declaudeify all success).
@@ -0,0 +1,8 @@
1
+ ---
2
+ key: mem-3602d11d7bce9446-1057
3
+ ns: default
4
+ created: 1783677456828
5
+ updated: 1783677456828
6
+ ---
7
+
8
+ agentgui Live History Stream Wiring (2026-05-05): site/app/js/app.js opens an SSE EventSource on navTo('history') via B.streamHistory(base, onEvent) and closes it on tab exit; state.live = {es, connected, lastEventTs, error, eventCount}. Event dispatch loop: 'hello' sets connected=true; 'event' pushes into state.events + increments the matching session counter only when data.sid===selectedSid; 'conversation' calls refreshHistory() to reload the session list; 'error' sets live.error. Renders are throttled via requestAnimationFrame to avoid an event-storm during burst loads. The FIRST request to any /v1/history/* endpoint triggers ccsniff's loadOnce(), a synchronous walk of every JSONL file under ~/.claude/projects (override via CLAUDE_PROJECTS_DIR) - in the original test env this was 299 files/80MB/69k events, a 30-90s startup latency during which health-check timeouts are normal and expected; subsequent requests are fast (cached index). The endpoints are served by ccsniff's Express router mounted in-process from server.js, no external proxy.
package/.gm/prd.yml CHANGED
@@ -2550,3 +2550,35 @@
2550
2550
  subject: FileRow native selection prop names (marked/onMark) diverge from shared selected/onToggleSelect contract
2551
2551
  witness: design/src/components/files.js FileRow+FileCell params renamed marked/onMark->selected/onToggleSelect internally; FileGrid own marked/onMark stay as documented public compat alias (COMPONENT_API.md:112); kit build 0 lint errors; browser-witnessed checkbox select-all/individual/clear-selection + BulkBar flow at localhost:3010/gm/#tab=files, 0 console errors
2552
2552
  status: completed
2553
+ - id: light-theme-contrast-audit
2554
+ subject: gui-ux-craft workflow hunt:light-theme-contrast lens failed (API error, connection closed mid-response) and never produced findings - light theme contrast was never actually audited this run
2555
+ witness: dedicated audit agent computed real WCAG contrast ratios (not eyeballed) for every light-theme token pairing, found 6 real failures (avatar text x2, tool-done status, amber on bg-2, danger on bg-2, mascot btn/cli, sun unusable) all landed as separate resolved rows; kit pushed df04d69
2556
+ status: completed
2557
+ - id: contrast-aicat-avatar-mascot
2558
+ subject: chat.css:2159 .chat-msg.aicat .chat-avatar initials use raw --mascot (2.03:1) on tinted bg, fails 4.5:1
2559
+ witness: design/app-shell.css:2163 color changed from var(--mascot) to var(--mascot-deep) (5.45:1 vs 2.03:1); kit build+lint clean, browser-witnessed data-theme=paper served CSS contains mascot-deep at that rule
2560
+ status: completed
2561
+ - id: contrast-you-avatar-accent-ink
2562
+ subject: chat.css:2156 .chat-msg.you .chat-avatar --accent-ink on tinted bg measures 3.65:1, short of 4.5:1
2563
+ witness: design/app-shell.css:2158 tint mix reduced from 26pct to 18pct (lighter bg raises contrast against fixed --accent-ink text); kit build clean
2564
+ status: completed
2565
+ - id: contrast-tool-done-success-text
2566
+ subject: chat.css:878 tool-done status text uses --success/--green-2 (3.18:1 paper, 2.88:1 bg-2), fails 4.5:1 for text
2567
+ witness: design/chat.css:878 tool-done status text color changed var(--success)->var(--green) (5.18:1 vs 3.18:1/2.88:1), fill background kept on --success for the 3:1-only non-text tint
2568
+ status: completed
2569
+ - id: contrast-amber-dash-status-bg2
2570
+ subject: chat.css:584,772 --amber status text on .ds-dash-card (bg-2) measures 4.26:1, narrowly fails 4.5:1 AA on the bg it actually renders on
2571
+ witness: 'design/colors_and_type.css:54 --amber #8A6512->#7C570F (computed 5.21:1 on --bg-2 vs prior 4.26:1), also updated print-media duplicate at app-surfaces.css:222; browser-witnessed live getComputedStyle --amber == #7C570F'
2572
+ status: completed
2573
+ - id: contrast-danger-auth-error-bg2
2574
+ subject: app-shell.css:4247 .ds-auth-error --danger text on --panel-1(=bg-2) measures 4.25:1, fails AA on actual render background (PASSWORD-gate login error banner)
2575
+ witness: design/colors_and_type.css:67 --danger oklch lightness 0.55->0.50 for AA margin on --bg-2 (was 4.25:1); browser-witnessed live getComputedStyle --danger == oklch(0.50 0.18 25)
2576
+ status: completed
2577
+ - id: contrast-mascot-btn-cli-text
2578
+ subject: app-shell.css:4215,4289 raw --mascot used as button/CLI text (3.11:1), fails 4.5:1; icon-only raw-mascot uses are fine (non-text 3:1)
2579
+ witness: design/app-shell.css:4215,4291 .ds-btn-mascot and .ds-cli-warn text color changed var(--mascot)->var(--mascot-deep) (5.45:1 vs 3.11:1); icon-only raw-mascot non-text uses left untouched per audit
2580
+ status: completed
2581
+ - id: contrast-sun-unusable-retire
2582
+ subject: --sun (#F5C344) measures 1.46:1 paper/1.32 bg-2/1.14 bg-3, fails even 3:1 non-text everywhere used (toast border, tree-node border, community spinner/text)
2583
+ witness: design/app-shell.css:3162(toast.warning border),3875(tree-node is-prd-add border) and community.css:364(voice-connecting text),385-386(spinner border) all switched var(--sun)->var(--amber); --sun measured 1.1-1.5:1 everywhere used, --amber now 5.21:1 text-safe
2584
+ status: completed
package/AGENTS.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # AgentGUI — Agent Notes
2
2
 
3
+ ## Light-theme contrast fixes (2026-07-10) — thirty-first run, confirming pass addendum
4
+
5
+ The 31st run's `gui-ux-craft` workflow had a `failures` array naming `hunt:light-theme-contrast` as crashed (API connection error) — that lens never ran, so light theme was never actually audited despite the workflow otherwise completing. Caught during the mandatory `gm-continue` confirming pass, not the original run. A dedicated follow-up agent computed real WCAG contrast ratios (not eyeballed) and found 6 genuine failures: chat avatar initials on raw `--mascot`/`--accent-ink` over tinted backgrounds (2.03:1/3.65:1), tool-done status text on `--success`/`--green-2` (3.18:1 paper / 2.88:1 on the card bg it actually renders on), `--amber` measuring only 4.26:1 on `--bg-2` despite being tuned for 4.5+:1 on `--paper`, `--danger` the same shape (4.25:1 on `--bg-2`, the PASSWORD-gate auth-error banner), raw `--mascot` as button/CLI text (3.11:1), and `--sun` being unusable everywhere it's used (1.1-1.5:1 against every app background) — retired in favor of `--amber`. Same fix pattern as the 22nd run's `--accent`->`--accent-ink` precedent: a separate text-safe "deep"/darkened token for text, the original stays for fills/borders (3:1 threshold). **Standing rule: always check a color token's contrast against the ACTUAL background it renders on in the real DOM (e.g. a status pill's tinted card, not just the page's base `--paper`) — a token tuned and commented as "4.5+:1 on paper" can still fail AA on every card/panel surface built on top of `--bg-2`/`--bg-3`.** **gm-continue standing rule: a workflow notification's `failures` array naming a crashed lens is unaudited scope, not a null result — it goes into the confirming PLAN pass as its own row, same as any unaudited surface.** Kit pushed `df04d69`, agentgui pushed `03002cf`, all 4 CI workflows green.
6
+
3
7
  ## Maximal usability/negative-space/predictability sweep (2026-07-10) — thirty-first run
4
8
 
5
9
  User asked to "max the gui usability practicality... predictable, good looking, use negative space properly" via wfgy-method-grade critique. Ran a fresh `gui-ux-craft` workflow (32 agents, 19 confirmed) plus a targeted live-browser negative-space audit agent in parallel, then landed the highest-value findings from both. Kit (`../design`): ConfirmDialog `destructive` prop was dead code (delete confirms always rendered `primary`, never `danger`) — real predictability bug, fixed + browser-witnessed the delete dialog button now carries `btn-primary danger`. Settings panels had a 56px gap between stacked Panels (32px `.panel` margin + 24px grid gap stacking) vs 24px everywhere else — zeroed the margin inside `.settings-grid`, witnessed 24px consistent. `.ds-page-header-dense-lede` and `.chat-composer-context` both hard-clipped with `nowrap`+ellipsis at <=480px with no way to recover the text — both now wrap at that breakpoint (kept desktop's single-line ellipsis). History empty-state sub-line used the misapplied `.lede` (fs-xl) style, rendering LARGER than its own title — removed the misapplied class + fixed the title's own hardcoded `1.05rem` to `var(--fs-lg)` token. Small-caps section labels (`panel-head`, `table th`) drifted from the canonical `.t-label` size (`--fs-xs` vs `--fs-tiny`) — unified. `FileRow`/`FileCell` internal selection props renamed `marked/onMark` -> `selected/onToggleSelect` to match the shared multi-select contract (FileGrid's own `marked`/`onMark` stay as its documented public alias). `ConversationList` search-mode blew away already-visible rows to a full skeleton on every debounced re-search — guarded on `!sessions.length`, matching `files.js`'s sibling pattern. App copy-tone: "sidebar" (used nowhere else) -> "the rail"; internal-jargon `agent: 'external session'` -> `'other tool'`; "session" -> "conversation" vocabulary unified across resume banner/toasts/labels; raw sid slice in resume banner replaced with a human session-title lookup (`resumeSidLabel()`), falling back to the slice only when no title is known; settings projects-folder fact gained the same copy button its sibling root rows already had. Perf: `prism-core.min.js` (a classic UMD script, not an ES module) now gets a `rel=preload as=script` hint alongside the existing `modulepreload` hints for marked/dompurify; History tab re-fetch on every entry now gated on staleness (>5s) instead of unconditional; bulk file delete/move patch `state.files.entries` locally and render immediately instead of awaiting a second full directory round-trip (backgrounded as reconciliation) — scoped to the bulk paths only, the highest-traffic case. Kit docs: README gained a "multi-agent chat shell" bullet naming the flagship `WorkspaceShell`/`AgentChat`/etc surface (previously undiscoverable from a first read), `COMPONENT_API.md` documents `FileRow`'s `move` action and scopes the `freddie.js` re-exports as demo-site-only. **A concurrent gm session was independently working the same `../design` repo this run — its commits (`df5b566`..`68b615b`) landed my kit edits before I reached CONSOLIDATE; verified via `git log`/`rev-parse HEAD==origin/main` rather than re-pushing.** Browser-witnessed every fix live at 1280px+420px on a no-PASSWORD localhost:3010 instance (settings gaps, empty-state hierarchy, danger delete button, mobile wrap, files checkbox/BulkBar flow after the prop rename): 0 console errors throughout. **Standing rule reaffirmed: `prd-resolve` witness_evidence must be distinct per row — a byte-identical witness across rows is refused by plugkit as a rubber-stamp tell; write what THAT row specifically changed, every time.**
@@ -222,21 +226,7 @@ Surfaced 2026-05-04 while validating the chat surface in `site/app/`. Fix applie
222
226
 
223
227
  ## Live History Stream Wiring (2026-05-05)
224
228
 
225
- **`site/app/js/app.js` opens SSE EventSource on navTo('history'); first /v1/history/* request triggers 30-90s loadOnce() synchronous walk.**
226
-
227
- The live history feature wires the in-process ccsniff `/v1/history/stream` SSE endpoint via `B.streamHistory(base, onEvent)` on tab entry and closes the EventSource on tab exit. State shape: `state.live = { es, connected, lastEventTs, error, eventCount }`.
228
-
229
- Event dispatch loop:
230
- - `hello` event: set `connected=true`
231
- - `event` event: if `data.sid === selectedSid` push into `state.events`, increment matching session counter
232
- - `conversation` event: call `refreshHistory()` to reload session list
233
- - `error` event: set `live.error`
234
-
235
- Throttle renders via `requestAnimationFrame` to avoid event storm during burst loads.
236
-
237
- **First request to `/v1/history/*` triggers loadOnce() that walks all JSONL files under ~/.claude/projects** (env default; override with `CLAUDE_PROJECTS_DIR`). In our test env: 299 files, 80MB, 69k events -> 30-90s startup latency. Health check timeouts during this window are normal and expected. Subsequent requests are fast (cached index).
238
-
239
- The endpoints are served by ccsniff's Express router mounted in-process from `server.js`. No external proxy.
229
+ `site/app/js/app.js` opens an SSE EventSource on `navTo('history')` (`B.streamHistory`, `state.live` shape, hello/event/conversation/error dispatch, rAF-throttled renders) against ccsniff's in-process `/v1/history/stream`; first `/v1/history/*` request triggers a 30-90s synchronous JSONL walk (`CLAUDE_PROJECTS_DIR`) health-check timeouts during that window are normal. Full detail in rs-learn (recall "agentgui Live History Stream Wiring").
240
230
 
241
231
  ## Runtime CDN: GUI loaded from unpkg (2026-05-29)
242
232
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentgui",
3
- "version": "1.0.1024",
3
+ "version": "1.0.1026",
4
4
  "description": "Multi-agent ACP client with real-time communication",
5
5
  "type": "module",
6
6
  "main": "electron/main.js",
@@ -53,7 +53,10 @@
53
53
  the originals (#FF5A1F / #D9A93A) which were tuned on ink and fail on
54
54
  paper (2.9:1 / 2.0:1). */
55
55
  --flame: #C53E00;
56
- --amber: #8A6512;
56
+ /* #8A6512 measured 4.5+:1 on --paper but only 4.26:1 on --bg-2, which the
57
+ dashboard card status text actually renders on - darkened for margin on
58
+ both backgrounds (5.21:1 on --bg-2). */
59
+ --amber: #7C570F;
57
60
  --sky: #3A6EFF;
58
61
  --warn: #E0241A;
59
62
  /* Syntax-token aliases: light values pass 4.5:1 on paper; the dark blocks
@@ -63,7 +66,9 @@
63
66
  --code-fn: #B84300;
64
67
  --code-str-alt: var(--mascot-deep);
65
68
  --code-num: #946300;
66
- --danger: oklch(0.55 0.18 25);
69
+ /* 0.55 lightness measured 4.70:1 on --paper but only 4.25:1 on --bg-2 (the
70
+ auth-error banner's actual background) - darkened for AA margin on both. */
71
+ --danger: oklch(0.50 0.18 25);
67
72
  --success: var(--green-2);
68
73
  --live: var(--green);
69
74
 
@@ -2661,12 +2666,12 @@
2661
2666
  }
2662
2667
  .ds-247420 .chat-msg:hover .chat-avatar { transform: scale(1.03); box-shadow: 0 1px 4px color-mix(in oklab, var(--fg) 6%, transparent); }
2663
2668
  .ds-247420 .chat-msg.you .chat-avatar {
2664
- background: color-mix(in oklab, var(--accent) 26%, var(--bg-3));
2669
+ background: color-mix(in oklab, var(--accent) 18%, var(--bg-3));
2665
2670
  color: var(--accent-ink);
2666
2671
  }
2667
2672
  .ds-247420 .chat-msg.aicat .chat-avatar {
2668
2673
  background: color-mix(in oklab, var(--mascot) 26%, var(--bg-2));
2669
- color: var(--mascot);
2674
+ color: var(--mascot-deep);
2670
2675
  }
2671
2676
 
2672
2677
  .ds-247420 .chat-stack {
@@ -3654,7 +3659,10 @@
3654
3659
 
3655
3660
  .ds-247420 .toast.error { border-color: var(--warn); }
3656
3661
  .ds-247420 .toast.success { border-color: var(--green-2); }
3657
- .ds-247420 .toast.warning { border-color: var(--sun); }
3662
+ /* --sun measures well under 3:1 against every app background (1.1-1.5:1) -
3663
+ a border effectively invisible in light theme; --amber is the tuned sibling
3664
+ warning tone already used for this exact severity elsewhere. */
3665
+ .ds-247420 .toast.warning { border-color: var(--amber); }
3658
3666
 
3659
3667
  @media (max-width: 480px) {
3660
3668
  .ds-247420 .toast {
@@ -4363,7 +4371,7 @@
4363
4371
  .ds-247420 .ds-tree-node.is-phase { border-color: var(--accent); background: var(--bg-3); font-weight: 600; }
4364
4372
  .ds-247420 .ds-tree-node.is-deviation { border-color: var(--warn); background: var(--danger-surface); color: var(--warn); }
4365
4373
  .ds-247420 .ds-tree-node.is-mutable-resolve { border-color: var(--success); }
4366
- .ds-247420 .ds-tree-node.is-prd-add { border-color: var(--sun); }
4374
+ .ds-247420 .ds-tree-node.is-prd-add { border-color: var(--amber); }
4367
4375
  .ds-247420 .ds-tree-node-ts { margin-right: 8px; color: var(--fg-3); }
4368
4376
  .ds-247420 .ds-tree-node-pills { margin-left: 6px; }
4369
4377
  .ds-247420 .ds-tree-node-reason { margin-top: 2px; color: var(--fg-2); }
@@ -4706,7 +4714,9 @@
4706
4714
  .ds-247420 .ds-toggle-btn { min-width: 78px; }
4707
4715
  .ds-247420 .ds-toggle-label { margin-left: 8px; color: inherit; opacity: 0.7; }
4708
4716
  .ds-247420 .ds-btn-warn { color: var(--warn); }
4709
- .ds-247420 .ds-btn-mascot { color: var(--mascot); }
4717
+ /* Raw --mascot text measures 3.11:1 on paper (fails 4.5:1); --mascot-deep is
4718
+ the text-safe tone, same accent/accent-ink split used everywhere else. */
4719
+ .ds-247420 .ds-btn-mascot { color: var(--mascot-deep); }
4710
4720
  .ds-247420 .ds-savebar {
4711
4721
  position: sticky; bottom: 8px; display: flex; align-items: center;
4712
4722
  justify-content: flex-end; gap: 8px; flex-wrap: wrap; padding: 10px;
@@ -4780,7 +4790,7 @@
4780
4790
  .ds-247420 .ds-cli-cmt .cmd { color: var(--fg-3); }
4781
4791
  .ds-247420 .ds-cli-out .cmd { color: var(--fg-2); }
4782
4792
  .ds-247420 .ds-cli-ok .prompt, .ds-247420 .ds-cli-ok .cmd { color: var(--accent-ink); }
4783
- .ds-247420 .ds-cli-warn .prompt, .ds-247420 .ds-cli-warn .cmd { color: var(--mascot); }
4793
+ .ds-247420 .ds-cli-warn .prompt, .ds-247420 .ds-cli-warn .cmd { color: var(--mascot-deep); }
4784
4794
  .ds-247420 .ds-cli-log .prompt { color: var(--fg-3); }
4785
4795
  .ds-247420 .ds-cli-log .cmd { color: var(--fg-2); font-family: var(--ff-mono); }
4786
4796
  .ds-247420 .ds-term-body { padding: 14px 18px; display: flex; flex-direction: column; gap: 4px; background: var(--bg-2); border-radius: var(--r-1); }
@@ -5169,7 +5179,9 @@
5169
5179
  }
5170
5180
 
5171
5181
  .ds-247420 .cm-channel-item.voice-connecting {
5172
- color: var(--sun);
5182
+ /* --sun measures 1.1-1.5:1 against every app background - amber is the
5183
+ tuned text-safe warning tone used for this severity elsewhere. */
5184
+ color: var(--amber);
5173
5185
  }
5174
5186
 
5175
5187
  .ds-247420 .cm-ch-icon {
@@ -5190,8 +5202,8 @@
5190
5202
  width: 12px;
5191
5203
  height: 12px;
5192
5204
  border-radius: 50%;
5193
- border: 2px solid color-mix(in oklab, var(--sun) 30%, transparent);
5194
- border-top-color: var(--sun);
5205
+ border: 2px solid color-mix(in oklab, var(--amber) 30%, transparent);
5206
+ border-top-color: var(--amber);
5195
5207
  flex-shrink: 0;
5196
5208
  }
5197
5209
 
@@ -7327,8 +7339,11 @@
7327
7339
  .ds-247420 .chat-msg .chat-tool.tool-running .chat-tool-status { color: var(--accent-ink); background: color-mix(in oklab, var(--accent) 12%, transparent); }
7328
7340
  .ds-247420 .chat-msg .chat-tool.tool-error .chat-tool-status { color: var(--flame); background: color-mix(in oklab, var(--flame) 12%, transparent); }
7329
7341
  /* Completed tool: a positive (success) tone so done reads distinctly from the
7330
- neutral pill and from the accent-toned running pill (--success = green-2). */
7331
- .ds-247420 .chat-msg .chat-tool.tool-done .chat-tool-status { color: var(--success); background: color-mix(in oklab, var(--success) 12%, transparent); }
7342
+ neutral pill and from the accent-toned running pill. --success/--green-2
7343
+ measures under 4.5:1 as TEXT on paper/bg-2 (fine at 12%-tint fill/non-text
7344
+ use) - --green is the text-safe deep tone, same split the accent/accent-ink
7345
+ pair already uses. */
7346
+ .ds-247420 .chat-msg .chat-tool.tool-done .chat-tool-status { color: var(--green); background: color-mix(in oklab, var(--success) 12%, transparent); }
7332
7347
  .ds-247420 .chat-tool-body { border-top: var(--bw-hair) solid var(--rule); padding: var(--space-2) var(--space-3); display: flex; flex-direction: column; gap: var(--space-2); }
7333
7348
  /* details' intrinsic min-content sizing: an unbroken token in the pre must not
7334
7349
  widen the tool card past the bubble column. */
@@ -9240,7 +9255,7 @@
9240
9255
  /* Re-assert the paper-tuned signal tokens so token-derived foregrounds
9241
9256
  (status discs, error text, tool cards) print with light-theme colours
9242
9257
  rather than the dark-theme-derived values inherited under auto-dark. */
9243
- .ds-247420 { --flame:#C53E00; --amber:#8A6512; --warn:#E0241A; --sky:#3A6EFF; --bg:var(--paper); --fg:var(--ink); }
9258
+ .ds-247420 { --flame:#C53E00; --amber:#7C570F; --warn:#E0241A; --sky:#3A6EFF; --bg:var(--paper); --fg:var(--ink); }
9244
9259
  .ds-247420 #app { min-height: auto; display: block; height: auto; }
9245
9260
  .ds-247420 .skip-link, .ds-247420 .status-dot, .ds-247420 .history-actions, .ds-247420 .chat-composer { display: none !important; }
9246
9261
  .ds-247420 .app, .ds-247420 .app-main, .ds-247420 .panel, .ds-247420 .chat, .ds-247420 .chat-thread {