a2acalling 0.6.63 → 0.6.65

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,375 @@
1
+ # A2A-49: Dark Theme Polish for Remaining Tabs — Implementation Plan
2
+
3
+ > **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
4
+
5
+ **Goal:** Apply consistent dark theme styling to Contacts, Calls, Invites, Logs, and Health tabs so the entire dashboard matches the dark visual language from A2A-47.
6
+
7
+ **Architecture:** Pure CSS additions + minor app.js class name changes. A2A-47 already established dark CSS vars, Shoelace dark theme, and dark table/card base styles. This ticket fills in the gaps: table hover states, clickable row cursors, status accent colors, glass-panel on cards, filter area backgrounds, and consistent monospace styling. No API/route/data changes.
8
+
9
+ **Tech Stack:** CSS custom properties, Shoelace dark theme, existing render functions in app.js
10
+
11
+ ---
12
+
13
+ ## What A2A-47 Already Handles (DO NOT duplicate)
14
+
15
+ - `:root` dark vars (`--bg`, `--panel`, `--ink`, `--ink-muted`, `--line`, `--accent`, `--card-bg`)
16
+ - `sl-card::part(base)` dark background + border
17
+ - `th` dark header background
18
+ - `#logs-table tr:hover td` hover highlight
19
+ - `#notice` dark toast styling
20
+ - `.transcript` dark background
21
+ - `.summary` pre styling
22
+ - All Shoelace form components (`sl-input`, `sl-select`, `sl-button`, `sl-badge`) via `sl-theme-dark`
23
+
24
+ ## What Needs Adding (This Ticket)
25
+
26
+ ### CSS gaps:
27
+ 1. Table hover for ALL tables (not just logs)
28
+ 2. Clickable row cursor for calls-table and contacts tables
29
+ 3. Contact status accent dots (colored inline badges)
30
+ 4. Subtle filter area background
31
+ 5. Log level color coding in table cells
32
+ 6. Health pass/fail status color reinforcement
33
+ 7. Monospace `<code>` element dark styling
34
+ 8. `sl-details` dark summary/header styling
35
+ 9. Responsive sidebar collapse: hide `.perm-sidebar` below breakpoint (already done)
36
+
37
+ ### app.js gaps:
38
+ 1. Add `data-status` attribute to contact status cells for CSS color targeting
39
+ 2. Add `data-level` attribute to log level cells for CSS color coding
40
+ 3. Add `data-clickable` or cursor class to clickable table rows
41
+
42
+ ---
43
+
44
+ ## Task 1: CSS — Universal table hover + clickable rows
45
+
46
+ **Files:**
47
+ - Modify: `src/dashboard/public/style.css` (after existing `#logs-table tr:hover td` rule ~line 294)
48
+
49
+ **Step 1: Add universal table row hover and clickable cursor styles**
50
+
51
+ Add these CSS rules after the existing `#logs-table` hover rule:
52
+
53
+ ```css
54
+ /* A2A-49: Universal dark table row hover for all tabs.
55
+ Uses 0.04 to match the existing logs hover opacity from A2A-47. */
56
+ table tbody tr:hover td {
57
+ background: rgba(255, 255, 255, 0.04);
58
+ }
59
+
60
+ /* A2A-49: Contacts rows use buttons inside cells (not full-row click),
61
+ so they don't get cursor:pointer — only calls rows do. */
62
+
63
+ /* A2A-49: Clickable table rows get pointer cursor */
64
+ #calls-table tbody tr {
65
+ cursor: pointer;
66
+ }
67
+
68
+ #calls-table tbody tr:hover td {
69
+ background: rgba(59, 130, 246, 0.08);
70
+ }
71
+ ```
72
+
73
+ **Step 2: Remove the now-redundant `#logs-table` specific hover rule**
74
+
75
+ The universal `table tbody tr:hover td` covers logs. Remove lines 292-295:
76
+ ```css
77
+ /* REMOVE: A2A-47: Dark hover for log rows replacing light #f6fbff */
78
+ #logs-table tr:hover td {
79
+ background: rgba(255, 255, 255, 0.04);
80
+ }
81
+ ```
82
+
83
+ **Step 3: Run tests**
84
+
85
+ Run: `npm test`
86
+ Expected: All 339 tests pass (CSS-only change, no backend impact)
87
+
88
+ **Step 4: Commit**
89
+
90
+ ```bash
91
+ git add src/dashboard/public/style.css
92
+ git commit -m "style(A2A-49): universal dark table hover and clickable row cursor"
93
+ ```
94
+
95
+ ---
96
+
97
+ ## Task 2: CSS — Contact status dots + log level colors
98
+
99
+ **Files:**
100
+ - Modify: `src/dashboard/public/style.css` (add new section)
101
+ - Modify: `src/dashboard/public/app.js` (renderContacts, renderLogs)
102
+
103
+ **Step 1: Add status dot and log level CSS**
104
+
105
+ Append to style.css:
106
+
107
+ ```css
108
+ /* A2A-49: Contact status colored badges */
109
+ .contact-status {
110
+ display: inline-flex;
111
+ align-items: center;
112
+ gap: 0.35rem;
113
+ font-size: 0.82rem;
114
+ }
115
+
116
+ .contact-status::before {
117
+ content: '';
118
+ width: 6px;
119
+ height: 6px;
120
+ border-radius: 50%;
121
+ flex-shrink: 0;
122
+ }
123
+
124
+ .contact-status[data-status="online"]::before {
125
+ background: #10B981;
126
+ box-shadow: 0 0 6px rgba(16, 185, 129, 0.6);
127
+ }
128
+
129
+ .contact-status[data-status="offline"]::before {
130
+ background: #EF4444;
131
+ box-shadow: 0 0 6px rgba(239, 68, 68, 0.4);
132
+ }
133
+
134
+ .contact-status[data-status="unknown"]::before {
135
+ background: #6B7280;
136
+ }
137
+
138
+ /* A2A-49: Log level color coding */
139
+ .log-level {
140
+ font-size: 0.78rem;
141
+ font-weight: 600;
142
+ text-transform: uppercase;
143
+ }
144
+
145
+ .log-level[data-level="error"] {
146
+ color: #F87171;
147
+ }
148
+
149
+ .log-level[data-level="warn"] {
150
+ color: #FBBF24;
151
+ }
152
+
153
+ .log-level[data-level="info"] {
154
+ color: #60A5FA;
155
+ }
156
+
157
+ .log-level[data-level="debug"] {
158
+ color: #A78BFA;
159
+ }
160
+
161
+ .log-level[data-level="trace"] {
162
+ color: #6B7280;
163
+ }
164
+ ```
165
+
166
+ **Step 2: Update renderContacts() status cell in app.js**
167
+
168
+ In `renderContacts()` (app.js ~line 441), change the status cell from:
169
+ ```js
170
+ <td>${esc(c?.status || '-')}</td>
171
+ ```
172
+ to:
173
+ ```js
174
+ <td><span class="contact-status" data-status="${esc(c?.status || 'unknown')}">${esc(c?.status || '-')}</span></td>
175
+ ```
176
+
177
+ **Step 3: Update renderLogs() level cell in app.js**
178
+
179
+ In `renderLogs()` (app.js ~line 1110), change:
180
+ ```js
181
+ <td>${esc(row.level || '-')}</td>
182
+ ```
183
+ to:
184
+ ```js
185
+ <td><span class="log-level" data-level="${esc(row.level || '')}">${esc(row.level || '-')}</span></td>
186
+ ```
187
+
188
+ **Step 4: Run tests**
189
+
190
+ Run: `npm test`
191
+ Expected: All 339 tests pass
192
+
193
+ **Step 5: Commit**
194
+
195
+ ```bash
196
+ git add src/dashboard/public/style.css src/dashboard/public/app.js
197
+ git commit -m "style(A2A-49): contact status dots and log level color coding"
198
+ ```
199
+
200
+ ---
201
+
202
+ ## Task 3: CSS — Filter area, code elements, and sl-details refinements
203
+
204
+ **Files:**
205
+ - Modify: `src/dashboard/public/style.css`
206
+
207
+ **Step 1: Replace `.filters` rule and add new styles**
208
+
209
+ REPLACE the existing `.filters` block at style.css lines 178-183 with this merged version (keeps grid layout, adds dark polish):
210
+
211
+ ```css
212
+ .filters {
213
+ display: grid;
214
+ grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
215
+ gap: 0.6rem;
216
+ margin-bottom: 0.9rem;
217
+ /* A2A-49: Subtle background for filter areas */
218
+ background: rgba(255, 255, 255, 0.02);
219
+ border: 1px solid var(--line);
220
+ border-radius: 10px;
221
+ padding: 0.8rem;
222
+ }
223
+ ```
224
+
225
+ Then APPEND these new rules to the end of style.css (before the responsive media queries):
226
+
227
+ ```css
228
+ /* A2A-49: Dark monospace code elements */
229
+ code {
230
+ background: rgba(255, 255, 255, 0.06);
231
+ border: 1px solid rgba(255, 255, 255, 0.1);
232
+ border-radius: 4px;
233
+ padding: 0.1em 0.35em;
234
+ font-size: 0.85em;
235
+ color: #E2E8F0;
236
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
237
+ }
238
+
239
+ /* A2A-49: pre.summary gets dark background. This SUPPLEMENTS the existing
240
+ .summary rule (max-width + white-space) — do NOT remove .summary. */
241
+ pre.summary {
242
+ background: rgba(255, 255, 255, 0.03);
243
+ border: 1px solid var(--line);
244
+ border-radius: 6px;
245
+ padding: 0.75em;
246
+ color: var(--ink);
247
+ }
248
+
249
+ /* A2A-49: sl-details summary bar dark polish */
250
+ sl-details::part(summary) {
251
+ font-weight: 500;
252
+ color: var(--ink);
253
+ }
254
+
255
+ sl-details::part(base) {
256
+ background: var(--card-bg);
257
+ border-color: var(--line);
258
+ }
259
+ ```
260
+
261
+ **Step 2: Run tests**
262
+
263
+ Run: `npm test`
264
+ Expected: All 339 tests pass
265
+
266
+ **Step 3: Commit**
267
+
268
+ ```bash
269
+ git add src/dashboard/public/style.css
270
+ git commit -m "style(A2A-49): filter area background, code elements, sl-details polish"
271
+ ```
272
+
273
+ ---
274
+
275
+ ## Task 4: CSS — Health tab status colors
276
+
277
+ **Files:**
278
+ - Modify: `src/dashboard/public/style.css`
279
+
280
+ **Step 1: Add health-specific styles**
281
+
282
+ Append to style.css:
283
+
284
+ ```css
285
+ /* A2A-49: Health card gets glass-panel treatment via CSS (not index.html).
286
+ The acceptance criterion requires glass-panel styling on #health-latest.
287
+ We target the sl-card shadow DOM part directly. */
288
+ #health-latest::part(base) {
289
+ background: rgba(30, 41, 59, 0.4);
290
+ backdrop-filter: blur(12px);
291
+ border-color: rgba(255, 255, 255, 0.08);
292
+ border-radius: 10px;
293
+ }
294
+
295
+ /* A2A-49: Health tab — step icons and status reinforcement.
296
+ Shoelace badge variants (success/danger/warning) already provide
297
+ green/red/yellow colors in dark theme — no override needed. */
298
+ #health-latest details ul {
299
+ list-style: none;
300
+ padding-left: 0;
301
+ }
302
+
303
+ #health-latest details li {
304
+ padding: 0.3rem 0;
305
+ border-bottom: 1px solid rgba(255, 255, 255, 0.04);
306
+ font-size: 0.85rem;
307
+ }
308
+
309
+ #health-latest details li:last-child {
310
+ border-bottom: none;
311
+ }
312
+
313
+ /* A2A-49: Native <details> dark styling inside health cards */
314
+ #health-latest details > summary {
315
+ cursor: pointer;
316
+ color: var(--ink-muted);
317
+ font-size: 0.85rem;
318
+ padding: 0.3rem 0;
319
+ }
320
+
321
+ #health-latest details > summary:hover {
322
+ color: var(--ink);
323
+ }
324
+ ```
325
+
326
+ **Step 2: Run tests**
327
+
328
+ Run: `npm test`
329
+ Expected: All 339 tests pass
330
+
331
+ **Step 3: Commit**
332
+
333
+ ```bash
334
+ git add src/dashboard/public/style.css
335
+ git commit -m "style(A2A-49): health tab step list and details styling"
336
+ ```
337
+
338
+ ---
339
+
340
+ ## Task 5: Final visual verification + merge commit
341
+
342
+ **Step 1: Run full test suite**
343
+
344
+ Run: `npm test`
345
+ Expected: All 339 tests pass
346
+
347
+ **Step 2: Check diff size**
348
+
349
+ Run: `git diff main --stat`
350
+ Expected: 2 files changed, under 200 lines added. Well within 500-line limit.
351
+
352
+ **Step 3: Verify no backend files changed**
353
+
354
+ Run: `git diff main --name-only`
355
+ Expected: Only `src/dashboard/public/style.css` and `src/dashboard/public/app.js`
356
+
357
+ ---
358
+
359
+ ## Acceptance Criteria Mapping
360
+
361
+ | Criterion | Addressed In |
362
+ |-----------|-------------|
363
+ | Contacts tab: dark backgrounds, status dots | Task 2 (status dots) + existing sl-card dark styling |
364
+ | Contacts tab: Add Contact form dark theme | Already handled by Shoelace sl-theme-dark |
365
+ | Calls tab: dark header and row styling | Task 1 (universal hover) + existing th dark styling |
366
+ | Calls tab: call detail/transcript dark cards | Task 3 (pre.summary) + existing .transcript styling |
367
+ | Invites tab: form and table dark theme | Already handled by Shoelace + Task 1 (hover) |
368
+ | Logs tab: filter inputs dark theme | Task 3 (filter area background) + Shoelace |
369
+ | Logs tab: dark styling with hover | Task 1 (universal hover replaces logs-specific) |
370
+ | Logs tab: trace detail dark card | Already handled by sl-card dark styling |
371
+ | Health tab: glass-panel styling | Task 4 (health details) + existing sl-card dark |
372
+ | Health tab: dark history table | Task 1 (universal hover) + existing th/td dark |
373
+ | All Shoelace components render correctly | Already handled by sl-theme-dark from A2A-47 |
374
+ | No visual inconsistencies | Consistent use of CSS vars throughout |
375
+ | Tests pass | Verified in each task |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "a2acalling",
3
- "version": "0.6.63",
3
+ "version": "0.6.65",
4
4
  "description": "Agent-to-agent calling for OpenClaw - A2A agent communication",
5
5
  "main": "src/index.js",
6
6
  "bin": {