dsh-coding-sidebar 1.0.1 → 1.0.2

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.
@@ -302,6 +302,8 @@ export declare const zh: {
302
302
  subagentDiagUnsupported: string;
303
303
  subagentDiagUnavailable: string;
304
304
  subagentThinking: string;
305
+ subagentShowHistory: string;
306
+ subagentHideHistory: string;
305
307
  sideChat: string;
306
308
  sideChatNew: string;
307
309
  sideChatUntitled: string;
@@ -329,6 +331,8 @@ export declare const zh: {
329
331
  jobs: string;
330
332
  jobsCount: string;
331
333
  jobsCountRunning: string;
334
+ jobsShowHistory: string;
335
+ jobsHideHistory: string;
332
336
  jobStatusRunning: string;
333
337
  jobStatusStopping: string;
334
338
  jobStatusCompleted: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-coding-sidebar",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "DSH web plugin: a VSCode-like right sidebar (explorer / editor / terminal / git / browser), isolated per conversation session. Exposes the betterSidebar service for other plugins to register sidebar tabs and file viewers. KCoder-maintained fork of DSH-better-sidebar 0.17.2 (bottom panel removed, upstream-decoupled release line).",
5
5
  "type": "module",
6
6
  "repository": {
@@ -274,6 +274,47 @@
274
274
  color: var(--dsw-alias-label-primary);
275
275
  }
276
276
 
277
+ /* ── History collapse toggle (shared: topology levels + jobs list) ─────── */
278
+
279
+ /* The "show earlier rows" disclosure between the header and the collapsed
280
+ rows; full-width like a row, but visually quieter (tertiary, small). */
281
+ .historyToggle {
282
+ display: flex;
283
+ align-items: center;
284
+ gap: 5px;
285
+ width: 100%;
286
+ box-sizing: border-box;
287
+ min-height: 26px;
288
+ padding: 3px 8px 3px 11px;
289
+ border: none;
290
+ border-radius: 8px;
291
+ background: transparent;
292
+ font: var(--dsw-font-xxxs-strong-11);
293
+ color: var(--dsw-alias-label-tertiary);
294
+ text-align: left;
295
+ cursor: pointer;
296
+ outline: none;
297
+ }
298
+
299
+ .historyToggle:hover {
300
+ background: var(--dsw-alias-interactive-bg-hover);
301
+ color: var(--dsw-alias-label-secondary);
302
+ }
303
+
304
+ .historyToggle:focus-visible {
305
+ background: var(--dsw-alias-interactive-bg-hover);
306
+ color: var(--dsw-alias-label-secondary);
307
+ }
308
+
309
+ .historyToggle svg {
310
+ flex: none;
311
+ }
312
+
313
+ /* The jobs section's toggle sits right under its list. */
314
+ .jobs .historyToggle {
315
+ margin-top: 2px;
316
+ }
317
+
277
318
  /* ── Background-job section (below the topology tree) ────────────────── */
278
319
 
279
320
  .jobs {
@@ -12,6 +12,12 @@
12
12
  * highlighted in place. Every branch is expanded automatically (lazy
13
13
  * catalogs hydrate on demand and consume live membership while visible).
14
14
  *
15
+ * To keep long histories browsable, each catalog level shows only its
16
+ * LATEST {@link SUBAGENT_VISIBLE} children by default — earlier rows fold
17
+ * behind a history toggle — and the jobs section shows its latest
18
+ * {@link JOBS_VISIBLE} rows the same way. Collapsing is view-only: the
19
+ * header counts, the output dock and live observation still see every row.
20
+ *
15
21
  * Each node card carries live status (state dot, durable label, mode and
16
22
  * activity); while a child RUNS, its card additionally shows the LAST text
17
23
  * output and LAST tool call pulled from its history tail, auto-refreshing
@@ -23,6 +29,7 @@ import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent }
23
29
  import { useSyncExternalStore } from 'react'
24
30
  import clsx from 'clsx'
25
31
  import {
32
+ IconChevronDownOutline14, IconChevronRightOutline14,
26
33
  IconRefreshOutline14, StateDot,
27
34
  } from '@deepseek-ai/dsh-client-ui-primitives'
28
35
  import type {
@@ -65,6 +72,15 @@ const ARGS_PREVIEW = 60
65
72
  const JOB_POLL_MS = 2000
66
73
  /** How long the kill button stays armed before it needs re-confirming. */
67
74
  const JOB_KILL_ARM_MS = 3000
75
+ /**
76
+ * How many of the LATEST rows stay visible by default before the earlier
77
+ * (history) rows collapse behind a toggle: {@link SUBAGENT_VISIBLE} for the
78
+ * topology's child rows, {@link JOBS_VISIBLE} for the background-job list.
79
+ * Collapsing is view-only — counts, the output dock and live observation
80
+ * keep seeing every entry.
81
+ */
82
+ const SUBAGENT_VISIBLE = 5
83
+ const JOBS_VISIBLE = 3
68
84
 
69
85
  /** The direct subagent children of one parent (durable `origin` rows;
70
86
  * Side Chat threads ride the same origin but are tab-strip conversations,
@@ -244,7 +260,12 @@ interface RowsProps {
244
260
  refresh: (parentSessionId: string) => void
245
261
  }
246
262
 
247
- /** Render one topology level; branches are always expanded (lazy catalogs). */
263
+ /**
264
+ * Render one topology level; branches are always expanded (lazy catalogs).
265
+ * When a level lists more than {@link SUBAGENT_VISIBLE} children, only the
266
+ * LATEST ones render by default — the earlier rows collapse behind a
267
+ * history toggle (per-level state; a fresh catalog page collapses again).
268
+ */
248
269
  function CatalogRows({
249
270
  parentSessionId, catalog, catalogs, byId, level, currentSessionId, live,
250
271
  openChild, refresh,
@@ -258,6 +279,10 @@ function CatalogRows({
258
279
  if (entry.kind === 'child') return !(entry.label?.startsWith(SIDE_LABEL_PREFIX) ?? false)
259
280
  return !(byId[entry.id]?.displayTitle.startsWith(SIDE_LABEL_PREFIX) ?? false)
260
281
  })
282
+ const [historyOpen, setHistoryOpen] = useState(false)
283
+ const historyCount = visibleEntries.length - SUBAGENT_VISIBLE
284
+ const collapsed = historyCount > 0 && !historyOpen
285
+ const renderEntries = collapsed ? visibleEntries.slice(-SUBAGENT_VISIBLE) : visibleEntries
261
286
  return (
262
287
  <>
263
288
  {emptyLoading && (
@@ -276,7 +301,18 @@ function CatalogRows({
276
301
  </button>
277
302
  </div>
278
303
  )}
279
- {visibleEntries.map((entry) => {
304
+ {historyCount > 0 && (
305
+ <button
306
+ type="button"
307
+ className={css.historyToggle}
308
+ aria-expanded={historyOpen}
309
+ onClick={() => { setHistoryOpen(open => !open) }}
310
+ >
311
+ {historyOpen ? <IconChevronDownOutline14 /> : <IconChevronRightOutline14 />}
312
+ {historyOpen ? t('subagentHideHistory') : t('subagentShowHistory', { count: historyCount })}
313
+ </button>
314
+ )}
315
+ {renderEntries.map((entry) => {
280
316
  if (entry.kind === 'diagnostic') {
281
317
  return (
282
318
  <div key={entry.id} className={css.subagentNode}>
@@ -467,10 +503,12 @@ function JobOutputPane(props: {
467
503
  /**
468
504
  * The background-job section of the Subagent page: every job of the whole
469
505
  * current tree (main agent + subagents, owner-labeled), fed by the harness
470
- * `session/jobs` push mirror. Clicking a row feeds its model-read output to
471
- * the shared bottom dock (event replay never the model's cursor); live
472
- * rows carry a two-click-confirm kill button. Renders nothing while the
473
- * tree has no jobs.
506
+ * `session/jobs` push mirror. When more than {@link JOBS_VISIBLE} jobs
507
+ * exist, only the head of the standard order (live rows, then newest
508
+ * settled) stays visible earlier rows collapse behind a history toggle.
509
+ * Clicking a row feeds its model-read output to the shared bottom dock
510
+ * (event replay — never the model's cursor); live rows carry a
511
+ * two-click-confirm kill button. Renders nothing while the tree has no jobs.
474
512
  */
475
513
  function JobsSection(props: {
476
514
  byId: SidebarSessionList['byId']
@@ -485,6 +523,7 @@ function JobsSection(props: {
485
523
  [byId, jobsBySession, rootId],
486
524
  )
487
525
  const [selectedId, setSelectedId] = useState<string | undefined>(undefined)
526
+ const [historyOpen, setHistoryOpen] = useState(false)
488
527
  const [armedId, setArmedId] = useState<string | undefined>(undefined)
489
528
  const [killingId, setKillingId] = useState<string | undefined>(undefined)
490
529
  const [killErrorId, setKillErrorId] = useState<string | undefined>(undefined)
@@ -547,6 +586,12 @@ function JobsSection(props: {
547
586
  ? t('jobsCountRunning', { count: rows.length, running: liveCount })
548
587
  : t('jobsCount', { count: rows.length })
549
588
 
589
+ // Collapsed view: the head of the standard order stays visible (all live
590
+ // rows up to the cap, then newest settled); the header count still
591
+ // reports the full totals, and a hidden job's dock keeps working.
592
+ const historyCount = rows.length - JOBS_VISIBLE
593
+ const visibleRows = historyCount > 0 && !historyOpen ? rows.slice(0, JOBS_VISIBLE) : rows
594
+
550
595
  return (
551
596
  <>
552
597
  <section className={css.jobs} aria-label={t('jobs')}>
@@ -555,7 +600,7 @@ function JobsSection(props: {
555
600
  <span className={css.jobsCount}>{countLabel}</span>
556
601
  </div>
557
602
  <ul className={css.jobsList} aria-label={t('jobs')}>
558
- {rows.map((row) => {
603
+ {visibleRows.map((row) => {
559
604
  const { job } = row
560
605
  const live = isJobLive(job)
561
606
  const selected = selectedId === job.id
@@ -617,6 +662,17 @@ function JobsSection(props: {
617
662
  )
618
663
  })}
619
664
  </ul>
665
+ {historyCount > 0 && (
666
+ <button
667
+ type="button"
668
+ className={css.historyToggle}
669
+ aria-expanded={historyOpen}
670
+ onClick={() => { setHistoryOpen(open => !open) }}
671
+ >
672
+ {historyOpen ? <IconChevronDownOutline14 /> : <IconChevronRightOutline14 />}
673
+ {historyOpen ? t('jobsHideHistory') : t('jobsShowHistory', { count: historyCount })}
674
+ </button>
675
+ )}
620
676
  </section>
621
677
  {selectedRow !== undefined && (
622
678
  <JobOutputPane
@@ -297,6 +297,8 @@ export const ar: Record<string, string> = {
297
297
  subagentDiagUnsupported: 'غير مدعوم',
298
298
  subagentDiagUnavailable: 'غير متاح',
299
299
  subagentThinking: 'جارٍ التفكير…',
300
+ subagentShowHistory: 'عرض {count} من الوكلاء الفرعيين الأقدم',
301
+ subagentHideHistory: 'طي الوكلاء الفرعيين الأقدم',
300
302
  sideChat: 'محادثة جانبية (تجريبية)',
301
303
  sideChatNew: 'خيط جديد',
302
304
  sideChatUntitled: 'خيط جديد',
@@ -324,6 +326,8 @@ export const ar: Record<string, string> = {
324
326
  jobs: 'المهام الخلفية',
325
327
  jobsCount: '{count} مهمة خلفية',
326
328
  jobsCountRunning: '{count} مهمة خلفية · {running} قيد التشغيل',
329
+ jobsShowHistory: 'عرض {count} من المهام الخلفية الأقدم',
330
+ jobsHideHistory: 'طي المهام الخلفية الأقدم',
327
331
  jobStatusRunning: 'قيد التشغيل',
328
332
  jobStatusStopping: 'جارٍ الإيقاف',
329
333
  jobStatusCompleted: 'اكتمل',
@@ -282,6 +282,8 @@ export const de: Record<string, string> = {
282
282
  subagentDiagUnsupported: 'Nicht unterstützt',
283
283
  subagentDiagUnavailable: 'Nicht verfügbar',
284
284
  subagentThinking: 'Denkt nach…',
285
+ subagentShowHistory: '{count} ältere Subagenten anzeigen',
286
+ subagentHideHistory: 'Ältere Subagenten einklappen',
285
287
  sideChat: 'Seitenchat (beta)',
286
288
  sideChatNew: 'Neuer Thread',
287
289
  sideChatUntitled: 'Neuer Thread',
@@ -309,6 +311,8 @@ export const de: Record<string, string> = {
309
311
  jobs: 'Hintergrundaufgaben',
310
312
  jobsCount: '{count} Hintergrundaufgaben',
311
313
  jobsCountRunning: '{count} Hintergrundaufgaben · {running} läuft',
314
+ jobsShowHistory: '{count} ältere Hintergrundaufgaben anzeigen',
315
+ jobsHideHistory: 'Ältere Hintergrundaufgaben einklappen',
312
316
  jobStatusRunning: 'Läuft',
313
317
  jobStatusStopping: 'Wird beendet',
314
318
  jobStatusCompleted: 'Abgeschlossen',
@@ -289,6 +289,8 @@ export const fr: Record<string, string> = {
289
289
  subagentDiagUnsupported: 'Entrée non prise en charge',
290
290
  subagentDiagUnavailable: 'Indisponible',
291
291
  subagentThinking: 'Réflexion…',
292
+ subagentShowHistory: 'Afficher {count} sous-agents plus anciens',
293
+ subagentHideHistory: 'Réduire les sous-agents plus anciens',
292
294
  sideChat: 'Discussion latérale (bêta)',
293
295
  sideChatNew: 'Nouvelle discussion',
294
296
  sideChatUntitled: 'Nouvelle discussion',
@@ -316,6 +318,8 @@ export const fr: Record<string, string> = {
316
318
  jobs: 'Tâches d’arrière-plan',
317
319
  jobsCount: '{count} tâche(s) d’arrière-plan',
318
320
  jobsCountRunning: '{count} tâche(s) d’arrière-plan · {running} en cours',
321
+ jobsShowHistory: 'Afficher {count} tâches d’arrière-plan plus anciennes',
322
+ jobsHideHistory: 'Réduire les tâches d’arrière-plan plus anciennes',
319
323
  jobStatusRunning: 'En cours',
320
324
  jobStatusStopping: 'Arrêt en cours',
321
325
  jobStatusCompleted: 'Terminée',
@@ -296,6 +296,8 @@ export const hi: Record<string, string> = {
296
296
  subagentDiagUnsupported: 'असमर्थित',
297
297
  subagentDiagUnavailable: 'अनुपलब्ध',
298
298
  subagentThinking: 'सोच रहा…',
299
+ subagentShowHistory: 'पुराने {count} सबएजेंट दिखाएँ',
300
+ subagentHideHistory: 'पुराने सबएजेंट छिपाएँ',
299
301
  sideChat: 'साइड चैट (बीटा)',
300
302
  sideChatNew: 'नया थ्रेड',
301
303
  sideChatUntitled: 'नया थ्रेड',
@@ -323,6 +325,8 @@ export const hi: Record<string, string> = {
323
325
  jobs: 'बैकग्राउंड कार्य',
324
326
  jobsCount: '{count} बैकग्राउंड कार्य',
325
327
  jobsCountRunning: '{count} बैकग्राउंड कार्य · {running} चल रहे',
328
+ jobsShowHistory: 'पुराने {count} बैकग्राउंड कार्य दिखाएँ',
329
+ jobsHideHistory: 'पुराने बैकग्राउंड कार्य छिपाएँ',
326
330
  jobStatusRunning: 'चल रहा',
327
331
  jobStatusStopping: 'रुक रहा',
328
332
  jobStatusCompleted: 'पूर्ण',
@@ -294,6 +294,8 @@ export const id: Record<string, string> = {
294
294
  subagentDiagUnsupported: 'Tidak didukung',
295
295
  subagentDiagUnavailable: 'Tidak tersedia',
296
296
  subagentThinking: 'Berpikir…',
297
+ subagentShowHistory: 'Tampilkan {count} subagen sebelumnya',
298
+ subagentHideHistory: 'Ciutkan subagen sebelumnya',
297
299
  sideChat: 'Side Chat (beta)',
298
300
  sideChatNew: 'Thread baru',
299
301
  sideChatUntitled: 'Thread baru',
@@ -321,6 +323,8 @@ export const id: Record<string, string> = {
321
323
  jobs: 'Tugas latar',
322
324
  jobsCount: '{count} tugas latar',
323
325
  jobsCountRunning: '{count} tugas latar · {running} berjalan',
326
+ jobsShowHistory: 'Tampilkan {count} tugas latar sebelumnya',
327
+ jobsHideHistory: 'Ciutkan tugas latar sebelumnya',
324
328
  jobStatusRunning: 'Berjalan',
325
329
  jobStatusStopping: 'Menghentikan',
326
330
  jobStatusCompleted: 'Selesai',
@@ -287,6 +287,8 @@ export const it: Record<string, string> = {
287
287
  subagentDiagUnsupported: 'Non supportato',
288
288
  subagentDiagUnavailable: 'Non disponibile',
289
289
  subagentThinking: 'In pensiero…',
290
+ subagentShowHistory: 'Mostra {count} sottoagenti precedenti',
291
+ subagentHideHistory: 'Comprimi sottoagenti precedenti',
290
292
  sideChat: 'Chat laterale (beta)',
291
293
  sideChatNew: 'Nuova conversazione',
292
294
  sideChatUntitled: 'Nuova conversazione',
@@ -314,6 +316,8 @@ export const it: Record<string, string> = {
314
316
  jobs: 'Attività in background',
315
317
  jobsCount: '{count} attività in background',
316
318
  jobsCountRunning: '{count} attività in background · {running} in esecuzione',
319
+ jobsShowHistory: 'Mostra {count} attività in background precedenti',
320
+ jobsHideHistory: 'Comprimi attività in background precedenti',
317
321
  jobStatusRunning: 'In esecuzione',
318
322
  jobStatusStopping: 'Arresto in corso',
319
323
  jobStatusCompleted: 'Completata',
@@ -296,6 +296,8 @@ export const ja: Record<string, string> = {
296
296
  subagentDiagUnsupported: '未サポートのエントリ',
297
297
  subagentDiagUnavailable: '利用不可',
298
298
  subagentThinking: '思考中…',
299
+ subagentShowHistory: '前のサブエージェント {count} 件を表示',
300
+ subagentHideHistory: '前のサブエージェントを折りたたむ',
299
301
  sideChat: 'サイドチャット(beta)',
300
302
  sideChatNew: '新規スレッド',
301
303
  sideChatUntitled: '新規スレッド',
@@ -323,6 +325,8 @@ export const ja: Record<string, string> = {
323
325
  jobs: 'バックグラウンドタスク',
324
326
  jobsCount: '{count} 個のバックグラウンドタスク',
325
327
  jobsCountRunning: '{count} 個のバックグラウンドタスク ・ {running} 個実行中',
328
+ jobsShowHistory: '前のバックグラウンドタスク {count} 件を表示',
329
+ jobsHideHistory: '前のバックグラウンドタスクを折りたたむ',
326
330
  jobStatusRunning: '実行中',
327
331
  jobStatusStopping: '停止中',
328
332
  jobStatusCompleted: '完了',
@@ -288,6 +288,8 @@ export const ko: Record<string, string> = {
288
288
  subagentDiagUnsupported: '지원되지 않는 항목',
289
289
  subagentDiagUnavailable: '사용할 수 없음',
290
290
  subagentThinking: '생각하는 중…',
291
+ subagentShowHistory: '이전 서브 에이전트 {count}개 표시',
292
+ subagentHideHistory: '이전 서브 에이전트 접기',
291
293
  sideChat: '사이드 채팅(beta)',
292
294
  sideChatNew: '새 대화',
293
295
  sideChatUntitled: '새 대화',
@@ -315,6 +317,8 @@ export const ko: Record<string, string> = {
315
317
  jobs: '백그라운드 작업',
316
318
  jobsCount: '백그라운드 작업 {count}개',
317
319
  jobsCountRunning: '백그라운드 작업 {count}개 · {running} 실행 중',
320
+ jobsShowHistory: '이전 백그라운드 작업 {count}개 표시',
321
+ jobsHideHistory: '이전 백그라운드 작업 접기',
318
322
  jobStatusRunning: '실행 중',
319
323
  jobStatusStopping: '종료 중',
320
324
  jobStatusCompleted: '완료됨',
@@ -294,6 +294,8 @@ export const nl: Record<string, string> = {
294
294
  subagentDiagUnsupported: 'Niet ondersteund',
295
295
  subagentDiagUnavailable: 'Niet beschikbaar',
296
296
  subagentThinking: 'Nadenken…',
297
+ subagentShowHistory: '{count} eerdere subagents weergeven',
298
+ subagentHideHistory: 'Eerdere subagents samenvouwen',
297
299
  sideChat: 'Side Chat (bèta)',
298
300
  sideChatNew: 'Nieuwe thread',
299
301
  sideChatUntitled: 'Nieuwe thread',
@@ -321,6 +323,8 @@ export const nl: Record<string, string> = {
321
323
  jobs: 'Achtergrondtaken',
322
324
  jobsCount: '{count} achtergrondtaken',
323
325
  jobsCountRunning: '{count} achtergrondtaken · {running} actief',
326
+ jobsShowHistory: '{count} eerdere achtergrondtaken weergeven',
327
+ jobsHideHistory: 'Eerdere achtergrondtaken samenvouwen',
324
328
  jobStatusRunning: 'Actief',
325
329
  jobStatusStopping: 'Stoppen',
326
330
  jobStatusCompleted: 'Voltooid',
@@ -298,6 +298,8 @@ export const pl: Record<string, string> = {
298
298
  subagentDiagUnsupported: 'Nieobsługiwany',
299
299
  subagentDiagUnavailable: 'Niedostępny',
300
300
  subagentThinking: 'Myśli…',
301
+ subagentShowHistory: 'Pokaż {count} starszych podagentów',
302
+ subagentHideHistory: 'Zwiń starszych podagentów',
301
303
  sideChat: 'Czat boczny (beta)',
302
304
  sideChatNew: 'Nowy wątek',
303
305
  sideChatUntitled: 'Nowy wątek',
@@ -325,6 +327,8 @@ export const pl: Record<string, string> = {
325
327
  jobs: 'Zadania w tle',
326
328
  jobsCount: '{count} zadań w tle',
327
329
  jobsCountRunning: '{count} zadań w tle · {running} działa',
330
+ jobsShowHistory: 'Pokaż {count} starszych zadań w tle',
331
+ jobsHideHistory: 'Zwiń starsze zadania w tle',
328
332
  jobStatusRunning: 'Działa',
329
333
  jobStatusStopping: 'Zatrzymywanie',
330
334
  jobStatusCompleted: 'Ukończono',
@@ -279,6 +279,8 @@ export const pt: Record<string, string> = {
279
279
  subagentDiagUnsupported: 'Não suportado',
280
280
  subagentDiagUnavailable: 'Indisponível',
281
281
  subagentThinking: 'Pensando…',
282
+ subagentShowHistory: 'Mostrar {count} subagentes anteriores',
283
+ subagentHideHistory: 'Recolher subagentes anteriores',
282
284
  sideChat: 'Chat lateral (beta)',
283
285
  sideChatNew: 'Novo tópico',
284
286
  sideChatUntitled: 'Novo tópico',
@@ -306,6 +308,8 @@ export const pt: Record<string, string> = {
306
308
  jobs: 'Tarefas em segundo plano',
307
309
  jobsCount: '{count} tarefas em segundo plano',
308
310
  jobsCountRunning: '{count} tarefas em segundo plano · {running} executando',
311
+ jobsShowHistory: 'Mostrar {count} tarefas em segundo plano anteriores',
312
+ jobsHideHistory: 'Recolher tarefas em segundo plano anteriores',
309
313
  jobStatusRunning: 'Executando',
310
314
  jobStatusStopping: 'Parando',
311
315
  jobStatusCompleted: 'Concluída',
@@ -294,6 +294,8 @@ export const ru: Record<string, string> = {
294
294
  subagentDiagUnsupported: 'Не поддерживается',
295
295
  subagentDiagUnavailable: 'Недоступен',
296
296
  subagentThinking: 'Размышляет…',
297
+ subagentShowHistory: 'Показать {count} более ранних субагентов',
298
+ subagentHideHistory: 'Свернуть более ранних субагентов',
297
299
  sideChat: 'Боковой чат (бета)',
298
300
  sideChatNew: 'Новый поток',
299
301
  sideChatUntitled: 'Новый поток',
@@ -321,6 +323,8 @@ export const ru: Record<string, string> = {
321
323
  jobs: 'Фоновые задачи',
322
324
  jobsCount: '{count} фоновых задач',
323
325
  jobsCountRunning: '{count} фоновых задач · {running} выполняется',
326
+ jobsShowHistory: 'Показать {count} более ранних фоновых задач',
327
+ jobsHideHistory: 'Свернуть более ранние фоновые задачи',
324
328
  jobStatusRunning: 'Выполняется',
325
329
  jobStatusStopping: 'Останавливается',
326
330
  jobStatusCompleted: 'Завершено',
@@ -279,6 +279,8 @@ export const sv: Record<string, string> = {
279
279
  subagentDiagUnsupported: 'Stöds ej',
280
280
  subagentDiagUnavailable: 'Otillgänglig',
281
281
  subagentThinking: 'Tänker…',
282
+ subagentShowHistory: 'Visa {count} tidigare subagenter',
283
+ subagentHideHistory: 'Fäll ihop tidigare subagenter',
282
284
  sideChat: 'Sidochatt (beta)',
283
285
  sideChatNew: 'Ny tråd',
284
286
  sideChatUntitled: 'Ny tråd',
@@ -306,6 +308,8 @@ export const sv: Record<string, string> = {
306
308
  jobs: 'Bakgrundsjobb',
307
309
  jobsCount: '{count} bakgrundsjobb',
308
310
  jobsCountRunning: '{count} bakgrundsjobb · {running} kör',
311
+ jobsShowHistory: 'Visa {count} tidigare bakgrundsjobb',
312
+ jobsHideHistory: 'Fäll ihop tidigare bakgrundsjobb',
309
313
  jobStatusRunning: 'Kör',
310
314
  jobStatusStopping: 'Stoppar',
311
315
  jobStatusCompleted: 'Klar',
@@ -296,6 +296,8 @@ export const th: Record<string, string> = {
296
296
  subagentDiagUnsupported: 'ไม่รองรับ',
297
297
  subagentDiagUnavailable: 'ไม่พร้อมใช้งาน',
298
298
  subagentThinking: 'กำลังคิด…',
299
+ subagentShowHistory: 'แสดงตัวแทนย่อยก่อนหน้า {count} รายการ',
300
+ subagentHideHistory: 'ย่อตัวแทนย่อยก่อนหน้า',
299
301
  sideChat: 'แชทด้านข้าง (เบต้า)',
300
302
  sideChatNew: 'เธรดใหม่',
301
303
  sideChatUntitled: 'เธรดใหม่',
@@ -323,6 +325,8 @@ export const th: Record<string, string> = {
323
325
  jobs: 'งานเบื้องหลัง',
324
326
  jobsCount: '{count} งานเบื้องหลัง',
325
327
  jobsCountRunning: '{count} งานเบื้องหลัง · {running} กำลังทำงาน',
328
+ jobsShowHistory: 'แสดงงานเบื้องหลังก่อนหน้า {count} รายการ',
329
+ jobsHideHistory: 'ย่องานเบื้องหลังก่อนหน้า',
326
330
  jobStatusRunning: 'กำลังทำงาน',
327
331
  jobStatusStopping: 'กำลังหยุด',
328
332
  jobStatusCompleted: 'เสร็จสิ้น',
@@ -296,6 +296,8 @@ export const tr: Record<string, string> = {
296
296
  subagentDiagUnsupported: 'Desteklenmiyor',
297
297
  subagentDiagUnavailable: 'Kullanılamıyor',
298
298
  subagentThinking: 'Düşünüyor…',
299
+ subagentShowHistory: 'Önceki {count} alt aracıyı göster',
300
+ subagentHideHistory: 'Önceki alt araçları daralt',
299
301
  sideChat: 'Yan sohbet (beta)',
300
302
  sideChatNew: 'Yeni iş parçacığı',
301
303
  sideChatUntitled: 'Yeni iş parçacığı',
@@ -323,6 +325,8 @@ export const tr: Record<string, string> = {
323
325
  jobs: 'Arka plan işleri',
324
326
  jobsCount: '{count} arka plan işi',
325
327
  jobsCountRunning: '{count} arka plan işi · {running} çalışıyor',
328
+ jobsShowHistory: 'Önceki {count} arka plan işini göster',
329
+ jobsHideHistory: 'Önceki arka plan işlerini daralt',
326
330
  jobStatusRunning: 'Çalışıyor',
327
331
  jobStatusStopping: 'Durduruluyor',
328
332
  jobStatusCompleted: 'Tamamlandı',
@@ -296,6 +296,8 @@ export const vi: Record<string, string> = {
296
296
  subagentDiagUnsupported: 'Không hỗ trợ',
297
297
  subagentDiagUnavailable: 'Không khả dụng',
298
298
  subagentThinking: 'Đang suy nghĩ…',
299
+ subagentShowHistory: 'Hiện {count} tác nhân con cũ hơn',
300
+ subagentHideHistory: 'Thu gọn tác nhân con cũ hơn',
299
301
  sideChat: 'Chat bên (beta)',
300
302
  sideChatNew: 'Luồng mới',
301
303
  sideChatUntitled: 'Luồng mới',
@@ -323,6 +325,8 @@ export const vi: Record<string, string> = {
323
325
  jobs: 'Tác vụ nền',
324
326
  jobsCount: '{count} tác vụ nền',
325
327
  jobsCountRunning: '{count} tác vụ nền · {running} đang chạy',
328
+ jobsShowHistory: 'Hiện {count} tác vụ nền cũ hơn',
329
+ jobsHideHistory: 'Thu gọn tác vụ nền cũ hơn',
326
330
  jobStatusRunning: 'Đang chạy',
327
331
  jobStatusStopping: 'Đang dừng',
328
332
  jobStatusCompleted: 'Đã hoàn thành',
@@ -311,6 +311,8 @@ export const zhHK: Record<string, string> = {
311
311
  subagentDiagUnsupported: '不支援的條目',
312
312
  subagentDiagUnavailable: '不可用',
313
313
  subagentThinking: '思考中…',
314
+ subagentShowHistory: '展開較早的 {count} 個子代理',
315
+ subagentHideHistory: '收起較早的子代理',
314
316
  sideChat: '側邊對話(beta)',
315
317
  sideChatNew: '新增對話',
316
318
  sideChatUntitled: '新對話',
@@ -338,6 +340,8 @@ export const zhHK: Record<string, string> = {
338
340
  jobs: '背景任務',
339
341
  jobsCount: '{count} 個背景任務',
340
342
  jobsCountRunning: '{count} 個背景任務 · {running} 執行中',
343
+ jobsShowHistory: '展開較早的 {count} 個背景任務',
344
+ jobsHideHistory: '收起較早的背景任務',
341
345
  jobStatusRunning: '執行中',
342
346
  jobStatusStopping: '終止中',
343
347
  jobStatusCompleted: '已完成',
@@ -311,6 +311,8 @@ export const zhMO: Record<string, string> = {
311
311
  subagentDiagUnsupported: '不支援的條目',
312
312
  subagentDiagUnavailable: '不可用',
313
313
  subagentThinking: '思考中…',
314
+ subagentShowHistory: '展開較早的 {count} 個子代理',
315
+ subagentHideHistory: '收起較早的子代理',
314
316
  sideChat: '側邊對話(beta)',
315
317
  sideChatNew: '新增對話',
316
318
  sideChatUntitled: '新對話',
@@ -338,6 +340,8 @@ export const zhMO: Record<string, string> = {
338
340
  jobs: '背景任務',
339
341
  jobsCount: '{count} 個背景任務',
340
342
  jobsCountRunning: '{count} 個背景任務 · {running} 執行中',
343
+ jobsShowHistory: '展開較早的 {count} 個背景任務',
344
+ jobsHideHistory: '收起較早的背景任務',
341
345
  jobStatusRunning: '執行中',
342
346
  jobStatusStopping: '終止中',
343
347
  jobStatusCompleted: '已完成',
@@ -311,6 +311,8 @@ export const zhTW: Record<string, string> = {
311
311
  subagentDiagUnsupported: '不支援的條目',
312
312
  subagentDiagUnavailable: '不可用',
313
313
  subagentThinking: '思考中…',
314
+ subagentShowHistory: '展開較早的 {count} 個子代理',
315
+ subagentHideHistory: '收起較早的子代理',
314
316
  sideChat: '側邊對話(beta)',
315
317
  sideChatNew: '新增對話',
316
318
  sideChatUntitled: '新對話',
@@ -338,6 +340,8 @@ export const zhTW: Record<string, string> = {
338
340
  jobs: '背景任務',
339
341
  jobsCount: '{count} 個背景任務',
340
342
  jobsCountRunning: '{count} 個背景任務 · {running} 執行中',
343
+ jobsShowHistory: '展開較早的 {count} 個背景任務',
344
+ jobsHideHistory: '收起較早的背景任務',
341
345
  jobStatusRunning: '執行中',
342
346
  jobStatusStopping: '終止中',
343
347
  jobStatusCompleted: '已完成',
@@ -303,6 +303,8 @@ export const zh = {
303
303
  subagentDiagUnsupported: '不支持的条目',
304
304
  subagentDiagUnavailable: '不可用',
305
305
  subagentThinking: '思考中…',
306
+ subagentShowHistory: '展开更早的 {count} 个子代理',
307
+ subagentHideHistory: '收起更早的子代理',
306
308
  sideChat: '侧边对话(beta)',
307
309
  sideChatNew: '新建对话',
308
310
  sideChatUntitled: '新对话',
@@ -330,6 +332,8 @@ export const zh = {
330
332
  jobs: '后台任务',
331
333
  jobsCount: '{count} 个后台任务',
332
334
  jobsCountRunning: '{count} 个后台任务 · {running} 运行中',
335
+ jobsShowHistory: '展开更早的 {count} 个后台任务',
336
+ jobsHideHistory: '收起更早的后台任务',
333
337
  jobStatusRunning: '运行中',
334
338
  jobStatusStopping: '终止中',
335
339
  jobStatusCompleted: '已完成',
@@ -655,6 +659,8 @@ export const en: Record<keyof typeof zh, string> = {
655
659
  subagentDiagUnsupported: 'Unsupported',
656
660
  subagentDiagUnavailable: 'Unavailable',
657
661
  subagentThinking: 'Thinking…',
662
+ subagentShowHistory: 'Show {count} earlier subagents',
663
+ subagentHideHistory: 'Collapse earlier subagents',
658
664
  sideChat: 'Side Chat (beta)',
659
665
  sideChatNew: 'New thread',
660
666
  sideChatUntitled: 'New thread',
@@ -682,6 +688,8 @@ export const en: Record<keyof typeof zh, string> = {
682
688
  jobs: 'Background jobs',
683
689
  jobsCount: '{count} background jobs',
684
690
  jobsCountRunning: '{count} background jobs · {running} running',
691
+ jobsShowHistory: 'Show {count} earlier jobs',
692
+ jobsHideHistory: 'Collapse earlier jobs',
685
693
  jobStatusRunning: 'Running',
686
694
  jobStatusStopping: 'Stopping',
687
695
  jobStatusCompleted: 'Completed',