@ash-qw/dsh-theme-prts 0.1.102 → 1.0.1

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ash-qw/dsh-theme-prts",
3
- "version": "0.1.102",
3
+ "version": "1.0.1",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Unofficial Arknights P.R.T.S.-inspired UI theme for DeepSeek Harness Web",
@@ -68,7 +68,7 @@
68
68
  },
69
69
  "engines": {
70
70
  "node": ">=18",
71
- "dsh": ">=0.1.2-rc.1 <0.1.3-0 || >=0.1.5-rc.1 <0.1.6-0"
71
+ "dsh": "0.1.7-rc.2"
72
72
  },
73
73
  "devDependencies": {
74
74
  "@playwright/test": "1.55.1",
@@ -175,7 +175,8 @@ export function createAssistantGlassAdapter({ document, window, avatarImage = ''
175
175
  }
176
176
 
177
177
  function processStep(step) {
178
- if (!step?.isConnected || !step.matches?.(STEP_SELECTOR)) {
178
+ if (!step?.isConnected || !step.matches?.(STEP_SELECTOR)
179
+ || step.getAttribute('data-chat-group-part') === 'reasoning') {
179
180
  releaseStep(step)
180
181
  return
181
182
  }
@@ -263,7 +264,7 @@ export function createAssistantGlassAdapter({ document, window, avatarImage = ''
263
264
  subtree: true,
264
265
  childList: true,
265
266
  attributes: true,
266
- attributeFilter: ['class', 'data-chat-flow-kind', 'data-markdown', 'data-slot'],
267
+ attributeFilter: ['class', 'data-chat-flow-kind', 'data-chat-group-part', 'data-markdown', 'data-slot'],
267
268
  })
268
269
  },
269
270
  dispose() {
@@ -91,6 +91,8 @@ export function applyPrtsPlugin(ctx, environment) {
91
91
  window,
92
92
  sessions: contextService(ctx, 'sessions'),
93
93
  workspaces: contextService(ctx, 'workspaces'),
94
+ getSessionStatus: () => contextService(ctx, 'uiSession')?.sessionStatus,
95
+ getUiWorkspace: () => contextService(ctx, 'uiWorkspace'),
94
96
  })
95
97
  const floatingGlass = createFloatingGlassAdapter({ document, window })
96
98
  const adapter = createRc7Adapter({ document })
@@ -13,6 +13,7 @@ const OWNED_ATTRIBUTES = [
13
13
  'data-prts-workspace-create',
14
14
  'data-prts-session-row',
15
15
  'data-prts-session-actions',
16
+ 'data-prts-session-quick-actions',
16
17
  'data-prts-session-menu-anchor',
17
18
  'data-prts-session-menu',
18
19
  'data-prts-session-time',
@@ -29,6 +30,11 @@ const OWNED_ATTRIBUTES = [
29
30
  ]
30
31
 
31
32
  const SESSION_STATES = Object.freeze(['warning', 'ongoing', 'error', 'done'])
33
+ const PENDING_LABELS = Object.freeze({
34
+ approval: '待授权',
35
+ 'plan-review': '待审阅',
36
+ question: '待回答',
37
+ })
32
38
 
33
39
  function snapshotOf(source) {
34
40
  try {
@@ -61,17 +67,27 @@ function resolveSectionHeader(root) {
61
67
  return {}
62
68
  }
63
69
 
64
- function visibleSessionSummaries(sessions, workspaces) {
70
+ function visibleSessionSummaries(sessions, workspaces, sessionStatus) {
65
71
  const list = snapshotOf(sessions?.list)
66
72
  if (!list?.byId) return []
73
+ const statuses = snapshotOf(sessionStatus)
67
74
  const workspaceList = snapshotOf(workspaces?.list)
68
75
  const archived = new Set(workspaceList?.archivedSessionIds ?? [])
69
76
  const ids = Array.isArray(list.ids) ? list.ids : Object.keys(list.byId)
70
77
  return ids.flatMap(id => {
71
78
  const summary = list.byId[id]
72
79
  if (!summary || summary.blank || summary.origin === 'subagent' || archived.has(id)) return []
73
- if (summary.running) return [{ id, title: summary.displayTitle || id, state: 'ongoing' }]
74
- if (summary.completed === true) return [{ id, title: summary.displayTitle || id, state: 'done' }]
80
+ const status = statuses?.get?.(id)
81
+ const pendingLabel = PENDING_LABELS[status?.pendingInteraction?.kind]
82
+ if (pendingLabel) return [{ id, title: summary.displayTitle || id, state: 'warning', statusLabel: pendingLabel }]
83
+ const runningSubagent = list.projectionsBySession?.[id]?.values?.subagentCatalog?.some(child =>
84
+ (statuses?.get?.(child.id)?.running ?? list.byId[child.id]?.running) === true)
85
+ if ((status?.running ?? summary.running) || runningSubagent) {
86
+ return [{ id, title: summary.displayTitle || id, state: 'ongoing' }]
87
+ }
88
+ if (status ? status.completionUnread === true : summary.completed === true) {
89
+ return [{ id, title: summary.displayTitle || id, state: 'done' }]
90
+ }
75
91
  return []
76
92
  })
77
93
  }
@@ -90,7 +106,10 @@ function resolveRowControls(row, kind) {
90
106
  const create = kind === 'workspace'
91
107
  ? actions.querySelector(':scope > button[type="button"]')
92
108
  : undefined
93
- return { actions, anchor, create, menu }
109
+ const quickActions = kind === 'session'
110
+ ? Array.from(actions.children).filter(child => child !== anchor && child.querySelector('button'))
111
+ : []
112
+ return { actions, anchor, create, menu, quickActions }
94
113
  }
95
114
 
96
115
  function resolveRowTitle(row, kind, actions) {
@@ -135,11 +154,11 @@ function resolveSessionTime(row, title, actions) {
135
154
  && node !== actions
136
155
  && !node.hasAttribute('data-prts-facility-face')
137
156
  && !node.hasAttribute('data-prts-row-projection')
138
- && node.getAttribute('aria-hidden') !== 'true'
139
157
  && !node.querySelector('button')
140
158
  && node.textContent.trim()
141
159
  ))
142
- return candidates.find(node => node.matches('[class*="time" i], time, [data-session-time]')) ?? candidates.at(-1)
160
+ return candidates.find(node => node.matches('[class*="time" i], time, [data-session-time]'))
161
+ ?? candidates.filter(node => node.getAttribute('aria-hidden') !== 'true' && !node.querySelector('[data-state]')).at(-1)
143
162
  }
144
163
 
145
164
  function ensureFacilityFace(document, row, kind, next) {
@@ -170,7 +189,7 @@ function ensureFacilitySpine(document, row, kind, next) {
170
189
  }
171
190
 
172
191
 
173
- export function createSidebarControlAdapter({ document, window, sessions, workspaces }) {
192
+ export function createSidebarControlAdapter({ document, window, sessions, workspaces, getSessionStatus, getUiWorkspace }) {
174
193
  let observer
175
194
  let resizeObserver
176
195
  let resizeFrame
@@ -178,6 +197,8 @@ export function createSidebarControlAdapter({ document, window, sessions, worksp
178
197
  let scanFrame
179
198
  let stopSessionList = () => {}
180
199
  let stopWorkspaceList = () => {}
200
+ let stopSessionStatus = () => {}
201
+ let sessionStatus
181
202
  let statusSourcesStarted = false
182
203
  let summaryRoot
183
204
  let summarySignature = ''
@@ -187,15 +208,30 @@ export function createSidebarControlAdapter({ document, window, sessions, worksp
187
208
  const vectorSizes = new WeakMap()
188
209
  const lifelineAnimator = createSessionLifelineAnimator({ document, window })
189
210
 
211
+ function connectSessionStatus() {
212
+ const source = getSessionStatus?.()
213
+ if (source === sessionStatus) return
214
+ stopSessionStatus()
215
+ sessionStatus = source
216
+ stopSessionStatus = source?.subscribe?.(queueScan) ?? (() => {})
217
+ }
218
+
190
219
  function openSession(sessionId) {
191
220
  try {
221
+ const uiWorkspace = getUiWorkspace?.()
222
+ if (typeof uiWorkspace?.openSession === 'function') {
223
+ uiWorkspace.openSession(sessionId)
224
+ return
225
+ }
192
226
  if (typeof sessions?.open === 'function') {
193
227
  sessions.open(sessionId)
194
228
  return
195
229
  }
196
230
  } catch {}
197
231
  const row = Array.from(document.querySelectorAll('[data-prts-session-row]')).find(candidate => (
198
- candidate.querySelector('[data-prts-row-title]')?.textContent.trim() === sessionId
232
+ candidate.getAttribute('data-row-key') === `session:${sessionId}`
233
+ || candidate.getAttribute('data-session-id') === sessionId
234
+ || candidate.querySelector('[data-prts-row-title]')?.textContent.trim() === sessionId
199
235
  ))
200
236
  row?.click?.()
201
237
  }
@@ -243,6 +279,13 @@ export function createSidebarControlAdapter({ document, window, sessions, worksp
243
279
  const title = document.createElement('span')
244
280
  title.textContent = item.title
245
281
  button.append(title)
282
+ if (item.statusLabel) {
283
+ const detail = document.createElement('small')
284
+ detail.setAttribute('data-prts-session-summary-item-status', '')
285
+ detail.textContent = item.statusLabel
286
+ button.append(detail)
287
+ button.setAttribute('aria-label', `${item.title},${item.statusLabel}`)
288
+ }
246
289
  button.addEventListener('click', event => {
247
290
  event.stopPropagation()
248
291
  openSession(item.id)
@@ -265,16 +308,30 @@ export function createSidebarControlAdapter({ document, window, sessions, worksp
265
308
  label.setAttribute('data-prts-session-summary-label', '')
266
309
  next.add(header)
267
310
  next.add(label)
268
- const fromService = visibleSessionSummaries(sessions, workspaces)
269
- const rows = fromService.length ? fromService : Array.from(root.querySelectorAll('[data-prts-session-row]')).flatMap(row => {
311
+ const fromService = visibleSessionSummaries(sessions, workspaces, sessionStatus)
312
+ const nativeRows = Array.from(root.querySelectorAll('[data-prts-session-row]')).flatMap(row => {
270
313
  const state = row.getAttribute('data-prts-session-state')
271
- if (state !== 'ongoing' && state !== 'done') return []
314
+ if (state !== 'warning' && state !== 'ongoing' && state !== 'done') return []
272
315
  const title = row.querySelector('[data-prts-row-title]')?.textContent.trim()
273
- return title ? [{ id: title, title, state }] : []
316
+ const rowKey = row.getAttribute('data-row-key')
317
+ const id = row.getAttribute('data-session-id') || (rowKey?.startsWith('session:') ? rowKey.slice(8) : title)
318
+ return title ? [{ id, title, state }] : []
274
319
  })
320
+ const rows = [...fromService]
321
+ const statePriority = { done: 1, ongoing: 2, warning: 3 }
322
+ for (const nativeRow of nativeRows) {
323
+ const index = rows.findIndex(item => item.id === nativeRow.id || item.title === nativeRow.title)
324
+ if (index === -1) {
325
+ rows.push(nativeRow)
326
+ } else if (statePriority[nativeRow.state] > statePriority[rows[index].state]) {
327
+ rows[index] = { ...rows[index], state: nativeRow.state }
328
+ }
329
+ }
330
+ const warning = rows.filter(item => item.state === 'warning')
275
331
  const ongoing = rows.filter(item => item.state === 'ongoing')
276
332
  const done = rows.filter(item => item.state === 'done')
277
333
  const signature = JSON.stringify({
334
+ warning: warning.map(item => [item.id, item.title, item.statusLabel]),
278
335
  ongoing: ongoing.map(item => [item.id, item.title]),
279
336
  done: done.map(item => [item.id, item.title]),
280
337
  })
@@ -290,10 +347,11 @@ export function createSidebarControlAdapter({ document, window, sessions, worksp
290
347
  }
291
348
  const labelHidden = Array.from(label.classList).some(name => /hidden/i.test(name))
292
349
  summaryRoot.toggleAttribute('data-prts-summary-search-hidden', labelHidden)
293
- summaryRoot.hidden = ongoing.length === 0 && done.length === 0
350
+ summaryRoot.hidden = warning.length === 0 && ongoing.length === 0 && done.length === 0
294
351
  if (signature === summarySignature) return
295
352
  summarySignature = signature
296
353
  summaryRoot.replaceChildren()
354
+ if (warning.length) summaryRoot.append(buildSummaryGroup('warning', '等待处理的会话', warning))
297
355
  if (ongoing.length) summaryRoot.append(buildSummaryGroup('ongoing', '运行中的会话', ongoing))
298
356
  if (done.length) summaryRoot.append(buildSummaryGroup('done', '完成未查看', done))
299
357
  }
@@ -362,6 +420,7 @@ export function createSidebarControlAdapter({ document, window, sessions, worksp
362
420
  }
363
421
 
364
422
  function scan() {
423
+ connectSessionStatus()
365
424
  const root = document?.querySelector?.('[data-prts-region="sessions"] [data-slot="sidebar.workspaces"]')
366
425
  const next = new Set()
367
426
  const nextVectorOwners = new Set()
@@ -418,6 +477,7 @@ export function createSidebarControlAdapter({ document, window, sessions, worksp
418
477
  row.toggleAttribute('data-prts-row-menu-open', controls.menu?.getAttribute('aria-expanded') === 'true'
419
478
  || row.classList.contains('menuOpen'))
420
479
  markSidebarNode(controls.actions, 'data-prts-session-actions', next)
480
+ for (const action of controls.quickActions ?? []) markSidebarNode(action, 'data-prts-session-quick-actions', next)
421
481
  markSidebarNode(controls.anchor, 'data-prts-session-menu-anchor', next)
422
482
  markSidebarNode(controls.menu, 'data-prts-session-menu', next)
423
483
  registerVector(controls.menu, { kind: 'button' }, next, nextVectorOwners)
@@ -504,6 +564,9 @@ export function createSidebarControlAdapter({ document, window, sessions, worksp
504
564
  stopSessionList = () => {}
505
565
  stopWorkspaceList()
506
566
  stopWorkspaceList = () => {}
567
+ stopSessionStatus()
568
+ stopSessionStatus = () => {}
569
+ sessionStatus = undefined
507
570
  statusSourcesStarted = false
508
571
  if (scanFrame !== undefined) {
509
572
  if (window?.cancelAnimationFrame) window.cancelAnimationFrame(scanFrame)
@@ -104,6 +104,11 @@ html[data-dsh-prts] [data-prts-session-summary-group="ongoing"] {
104
104
  color: var(--prts-summary-state-color);
105
105
  }
106
106
 
107
+ html[data-dsh-prts] [data-prts-session-summary-group="warning"] {
108
+ --prts-summary-state-color: var(--dsw-alias-state-warn-primary, var(--prts-yellow));
109
+ color: var(--prts-summary-state-color);
110
+ }
111
+
107
112
  html[data-dsh-prts] [data-prts-session-summary-group="done"] {
108
113
  --prts-summary-state-color: var(--dsw-alias-state-success-primary, var(--prts-green));
109
114
  color: var(--prts-summary-state-color);
@@ -148,6 +153,24 @@ html[data-dsh-prts] [data-prts-session-summary-signal="done"]::before {
148
153
  clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%);
149
154
  }
150
155
 
156
+ html[data-dsh-prts] [data-prts-session-summary-signal="warning"]::before {
157
+ content: "";
158
+ position: absolute;
159
+ inset: 0;
160
+ border: 1px solid currentColor;
161
+ }
162
+
163
+ html[data-dsh-prts] [data-prts-session-summary-signal="warning"]::after {
164
+ content: "";
165
+ position: absolute;
166
+ top: 2px;
167
+ left: 4px;
168
+ width: 1px;
169
+ height: 3px;
170
+ background: currentColor;
171
+ box-shadow: 0 3px currentColor;
172
+ }
173
+
151
174
  html[data-dsh-prts] [data-prts-session-summary-popover] {
152
175
  position: absolute;
153
176
  z-index: 40;
@@ -241,6 +264,13 @@ html[data-dsh-prts] [data-prts-session-summary-item] > span:not([data-prts-sessi
241
264
  white-space: nowrap;
242
265
  }
243
266
 
267
+ html[data-dsh-prts] [data-prts-session-summary-item-status] {
268
+ flex: 0 0 auto;
269
+ margin-left: auto;
270
+ color: var(--prts-summary-state-color);
271
+ font: 700 9px/1 var(--prts-mono);
272
+ }
273
+
244
274
  html[data-dsh-prts] [data-prts-session-summary-item]:is(:hover, :focus-visible) {
245
275
  background: color-mix(in srgb, currentColor 9%, transparent);
246
276
  }
@@ -976,6 +976,10 @@ html[data-dsh-prts] [data-prts-row-title] {
976
976
  white-space: nowrap;
977
977
  }
978
978
 
979
+ html[data-dsh-prts] [data-prts-session-row] > span:has(> [data-state]) {
980
+ padding-left: 0 !important;
981
+ }
982
+
979
983
  html[data-dsh-prts] [data-prts-session-row] [data-prts-row-title]::before {
980
984
  content: attr(data-prts-session-index);
981
985
  margin-right: 8px;
@@ -1010,7 +1014,15 @@ html[data-dsh-prts] [data-prts-workspace-actions] {
1010
1014
  }
1011
1015
 
1012
1016
  html[data-dsh-prts] [data-prts-session-actions] {
1013
- width: 28px;
1017
+ position: relative;
1018
+ inset: auto;
1019
+ width: auto;
1020
+ flex: 0 0 auto;
1021
+ margin-left: auto !important;
1022
+ }
1023
+
1024
+ html[data-dsh-prts] [data-prts-session-quick-actions] {
1025
+ display: none !important;
1014
1026
  }
1015
1027
 
1016
1028
  html[data-dsh-prts] [data-prts-workspace-actions] > *,
@@ -1145,7 +1157,7 @@ html[data-dsh-prts][data-prts-conversation-style="native"] [data-chat-flow-kind=
1145
1157
 
1146
1158
  html[data-dsh-prts][data-prts-conversation-style="deck-chat"] :is(
1147
1159
  [data-chat-flow-kind="user"],
1148
- [data-chat-flow-kind="assistant-step"]
1160
+ [data-chat-flow-kind="assistant-step"]:not([data-chat-group-part="reasoning"])
1149
1161
  ) {
1150
1162
  position: relative;
1151
1163
  box-sizing: border-box;
@@ -1157,13 +1169,13 @@ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-ki
1157
1169
  color: var(--prts-ink);
1158
1170
  }
1159
1171
 
1160
- html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="assistant-step"] {
1172
+ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="assistant-step"]:not([data-chat-group-part="reasoning"]) {
1161
1173
  --prts-chat-link-x: 22px;
1162
1174
  padding-inline-start: 56px;
1163
1175
  color: var(--prts-ink);
1164
1176
  }
1165
1177
 
1166
- html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="assistant-step"]::after,
1178
+ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="assistant-step"]:not([data-chat-group-part="reasoning"])::after,
1167
1179
  html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-message-role="assistant"]::after {
1168
1180
  content: "";
1169
1181
  position: absolute;
@@ -1180,7 +1192,7 @@ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-message-role
1180
1192
  pointer-events: none;
1181
1193
  }
1182
1194
 
1183
- html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="assistant-step"]::before,
1195
+ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="assistant-step"]:not([data-chat-group-part="reasoning"])::before,
1184
1196
  html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="user"]::after,
1185
1197
  html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-message-role="assistant"]::before,
1186
1198
  html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-message-role="user"]::after {
@@ -1201,7 +1213,7 @@ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-message-role
1201
1213
  pointer-events: none;
1202
1214
  }
1203
1215
 
1204
- html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="assistant-step"]::before,
1216
+ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="assistant-step"]:not([data-chat-group-part="reasoning"])::before,
1205
1217
  html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-message-role="assistant"]::before {
1206
1218
  content: "";
1207
1219
  left: 0;
@@ -1280,7 +1292,7 @@ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-message-role
1280
1292
  left: -56px;
1281
1293
  }
1282
1294
 
1283
- html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="assistant-step"] [class$="_body"]:has(:is([data-markdown], [data-slot*="markdown" i], .markdown-body)),
1295
+ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="assistant-step"]:not([data-chat-group-part="reasoning"]) [class$="_body"]:has(:is([data-markdown], [data-slot*="markdown" i], .markdown-body)),
1284
1296
  html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-prts-ai-surface] {
1285
1297
  box-sizing: border-box;
1286
1298
  width: fit-content;
@@ -1770,12 +1782,12 @@ html[data-dsh-prts-settings] .prts-plugin-settings button[role='switch']:disable
1770
1782
  padding-inline: 8px 50px;
1771
1783
  }
1772
1784
 
1773
- html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="assistant-step"] {
1785
+ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="assistant-step"]:not([data-chat-group-part="reasoning"]) {
1774
1786
  padding-inline: 0 8px;
1775
1787
  padding-inline-start: 50px;
1776
1788
  }
1777
1789
 
1778
- html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="assistant-step"]::before,
1790
+ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="assistant-step"]:not([data-chat-group-part="reasoning"])::before,
1779
1791
  html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-message-role="assistant"]::before {
1780
1792
  left: 8px;
1781
1793
  width: 34px;
@@ -1798,7 +1810,7 @@ html[data-dsh-prts-settings] .prts-plugin-settings button[role='switch']:disable
1798
1810
  border-radius: 16px 5px 16px 16px !important;
1799
1811
  }
1800
1812
 
1801
- html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="assistant-step"] [class$="_body"]:has(:is([data-markdown], [data-slot*="markdown" i], .markdown-body)),
1813
+ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="assistant-step"]:not([data-chat-group-part="reasoning"]) [class$="_body"]:has(:is([data-markdown], [data-slot*="markdown" i], .markdown-body)),
1802
1814
  html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-prts-ai-surface],
1803
1815
  html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-message-role="assistant"] {
1804
1816
  padding: 13px 16px !important;
@@ -1823,7 +1835,7 @@ html[data-dsh-prts-settings] .prts-plugin-settings button[role='switch']:disable
1823
1835
  left: -42px;
1824
1836
  }
1825
1837
 
1826
- html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="assistant-step"]::after,
1838
+ html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-chat-flow-kind="assistant-step"]:not([data-chat-group-part="reasoning"])::after,
1827
1839
  html[data-dsh-prts][data-prts-conversation-style="deck-chat"] [data-message-role="assistant"]::after {
1828
1840
  display: none;
1829
1841
  }
@@ -98,7 +98,7 @@ html[data-dsh-prts] [data-prts-workspace-actions] {
98
98
  }
99
99
 
100
100
  html[data-dsh-prts] [data-prts-session-actions] {
101
- width: 28px !important;
101
+ width: auto !important;
102
102
  }
103
103
 
104
104
  html[data-dsh-prts] [data-prts-workspace-actions] button,