@goodandready/dsh-russian-lang 0.2.26 → 0.3.0

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.
Files changed (37) hide show
  1. package/lib/client.js +112 -19
  2. package/lib/locales/plugins/01-token-dashboard.json +1 -1
  3. package/lib/locales/plugins/10-kanban.json +1 -1
  4. package/lib/locales/plugins/13-agent-teams.json +1 -1
  5. package/lib/locales/plugins/16-usage-stats.json +1 -1
  6. package/lib/locales/plugins/23-moa.json +1 -1
  7. package/lib/locales/plugins/24-personal-directive.json +1 -1
  8. package/lib/locales/plugins/33-messenger-gateway.json +1 -1
  9. package/lib/locales/plugins/35-gitea.json +1 -1
  10. package/lib/locales/plugins/36-cost-meter.json +1 -1
  11. package/lib/locales/plugins/37-time-machine.json +1 -1
  12. package/lib/locales/plugins/38-context-lens.json +1 -1
  13. package/lib/locales/plugins/39-shadow-auditor.json +1 -1
  14. package/lib/locales/plugins/40-clinebot.json +1 -1
  15. package/lib/locales/plugins/41-lanmode.json +1 -1
  16. package/lib/locales/plugins/42-plugin-console.json +1 -1
  17. package/lib/locales/plugins/46-memory-brain.json +1 -1
  18. package/lib/locales/plugins/49-dsml-guard.json +1 -1
  19. package/lib/locales/plugins/49-usage-guard.json +1 -1
  20. package/lib/locales/plugins/50-automode.json +1 -1
  21. package/lib/locales/plugins/54-workshop-market.json +1 -1
  22. package/lib/locales/plugins/57-live-canvas.json +1 -1
  23. package/lib/locales/plugins/58-grok-xsearch.json +1 -1
  24. package/lib/locales/plugins/59-goal.json +1 -1
  25. package/lib/locales/plugins/62-model-search.json +1 -1
  26. package/lib/locales/plugins/63-agent-orchestrator.json +1 -1
  27. package/lib/locales/plugins/64-key-limits.json +1 -1
  28. package/lib/locales/plugins/66-tts.json +1 -1
  29. package/lib/locales/plugins/67-voice.json +1 -1
  30. package/lib/locales/plugins/68-image-gen.json +1 -1
  31. package/lib/locales/plugins/69-plugin-notify.json +1 -1
  32. package/lib/locales/plugins/71-memory-meter.json +1 -1
  33. package/lib/locales/plugins/72-server-monitor.json +1 -70
  34. package/lib/locales/plugins/75-test-pilot.json +1 -0
  35. package/lib/locales/plugins/76-visualize.json +1 -0
  36. package/package.json +3 -3
  37. package/lib/locales/plugins/44-goal.json +0 -1
package/lib/client.js CHANGED
@@ -863,7 +863,12 @@ const exportSessionToMarkdown = (session, options = {}) => {
863
863
  'Visualization streaming preview': 'Предпросмотр визуализации',
864
864
  'Security Auditor Shield': 'Защитный щит аудитора',
865
865
  'Shield: Safe': 'Щит: Безопасно',
866
- 'Shield: Alert': 'Щит: Тревога'
866
+ 'Shield: Alert': 'Щит: Тревога',
867
+ 'e.g. Implement report export and cover with unit tests': 'Например: Реализовать экспорт отчёта и покрыть юнит-тестами',
868
+ 'e.g. Implement report export and cover with unit tests...': 'Например: Реализовать экспорт отчёта и покрыть юнит-тестами…',
869
+ 'e.g. Implement user profile settings card with theme tokens': 'Например: Реализовать карточку настроек профиля с токенами темы',
870
+ 'Detailed functional specs, acceptance criteria, constraints...': 'Детальная функциональная спецификация, критерии приёмки, ограничения…',
871
+ 'Specific instructions, questions, or requirements for this specialist...': 'Конкретные инструкции, вопросы или требования для данного специалиста…',
867
872
  }
868
873
  const DOM_EN_TEXT = {
869
874
  'Scheduled tasks': 'Задачи по расписанию',
@@ -905,6 +910,83 @@ const exportSessionToMarkdown = (session, options = {}) => {
905
910
  'SSH: Remote': 'SSH: Удалённо',
906
911
  '7/7 rot': '7/7 рот.',
907
912
  'Smoke chat': 'Тестовый чат',
913
+ 'Quick Launch Goal': 'Быстрый запуск цели',
914
+ 'Define the objective for the agent in autonomous mode:': 'Сформулируйте задачу для автономной работы агента:',
915
+ 'Fix Bug': 'Исправление бага',
916
+ 'Refactor (YAGNI)': 'Рефакторинг (YAGNI)',
917
+ 'Tests & Coverage': 'Тесты и покрытие',
918
+ 'Code Review': 'Ревью кода',
919
+ 'New Feature': 'Новая функция',
920
+ 'Security Audit': 'Аудит безопасности',
921
+ 'Docs & Contract': 'Документация и контракт',
922
+ 'Upgrade Deps': 'Обновление зависимостей',
923
+ 'Dead Code': 'Мёртвый код',
924
+ 'Performance': 'Производительность',
925
+ 'Start Goal': 'Запустить цель',
926
+
927
+ 'Launch Multi-Agent Orchestrator': 'Запуск мультиагентного оркестратора',
928
+ 'Full DAG Pipeline': 'Полный DAG-пайплайн',
929
+ 'Direct Specialist Subagent': 'Прямой субагент-специалист',
930
+ 'Objective Title': 'Название задачи',
931
+ 'Scope & Requirements': 'Объём и требования',
932
+ 'Topology Scenario': 'Топологический сценарий',
933
+ 'Auto (Infer based on prompt complexity)': 'Авто (определить по сложности задачи)',
934
+ 'Hotfix (1 Stage: Triage & Minimal Fix)': 'Хотфикс (1 этап: анализ и точечный фикс)',
935
+ 'Simple (2 Stages: Spec + Exec)': 'Простой (2 этапа: ТЗ + реализация)',
936
+ 'Medium (4 Stages: Spec -> Design -> Code -> QA)': 'Средний (4 этапа: ТЗ -> Дизайн -> Код -> Тестирование)',
937
+ 'Complex (6 Stages: Full Engineering Lifecycle)': 'Сложный (6 этапов: полный инженерный цикл)',
938
+ 'Enterprise (7 Stages: R&D Spike -> Fullstack -> Gate)': 'Enterprise (7 этапов: R&D исследование -> Фулстек -> Гейт приёмки)',
939
+ 'Target Specialist Role': 'Роль целевого специалиста',
940
+ 'UI/UX Interface Designer': 'UI/UX дизайнер интерфейсов',
941
+ 'System Architect (DESIGN.md / ADR)': 'Системный архитектор (DESIGN.md / ADR)',
942
+ 'Technical Spec Analyst': 'Аналитик технических спецификаций',
943
+ 'Senior Frontend Developer': 'Ведущий frontend-разработчик',
944
+ 'Senior Backend Developer': 'Ведущий backend-разработчик',
945
+ 'QA Automation Engineer': 'Инженер автоматизации тестирования',
946
+ 'Refactoring & Complexity Specialist': 'Специалист по рефакторингу и сложности',
947
+ 'Hotfix & Diagnostic Engineer': 'Инженер хотфиксов и диагностики',
948
+ 'Documentation Specialist': 'Технический писатель / Документация',
949
+ 'Spike & R&D Researcher': 'Исследователь R&D и прототипирования',
950
+ 'DevOps & Tooling Specialist': 'DevOps и инфраструктурный специалист',
951
+ 'Instructions for Subagent': 'Инструкции для субагента',
952
+ 'Start Pipeline': 'Запустить пайплайн',
953
+ 'Delegate Subagent': 'Делегировать субагенту',
954
+ 'Dispatching...': 'Отправка…',
955
+
956
+ 'Discounted rate active': 'Действует сниженный тариф',
957
+ 'off-peak': 'непиковый',
958
+ 'peak': 'пиковый',
959
+ 'Context cache saved:': 'Сэкономлено на кэше:',
960
+ '1M tokens, $': '1 млн токенов, $',
961
+ 'Input (cache hit)': 'Ввод (попадание в кэш)',
962
+ 'Input (cache miss)': 'Ввод (промах кэша)',
963
+ 'Output': 'Вывод',
964
+ 'SESSION TOKENS': 'ТОКЕНЫ СЕССИИ',
965
+ 'SPEND BY MODEL': 'РАСХОД ПО МОДЕЛЯМ',
966
+ 'Session total:': 'Всего за сессию:',
967
+ 'Copy Summary': 'Скопировать сводку',
968
+
969
+ 'Context Lens': 'Линза контекста',
970
+ 'Saved tokens': 'Сэкономлено токенов',
971
+ '% Saved': '% экономии',
972
+ 'ops': 'операций',
973
+ 'Budget': 'Бюджет',
974
+ 'Active focus': 'Активный фокус',
975
+ 'No focus paths set': 'Пути фокусировки не заданы',
976
+
977
+ 'Status': 'Статус',
978
+ 'Graph & CI': 'Граф и CI',
979
+ 'Events & PRs': 'События и PR',
980
+ 'Branch': 'Ветка',
981
+ 'Sync': 'Синхронизация',
982
+ 'Up to date with remote (@{upstream})': 'Синхронизировано с удалённым репозиторием (@{upstream})',
983
+ 'Up to date with remote': 'Синхронизировано с удалённым репозиторием',
984
+ 'Clean': 'Чисто',
985
+ 'No modified or untracked files in the working directory.': 'В рабочем каталоге нет изменённых или неотслеживаемых файлов.',
986
+ 'RECENT COMMITS': 'ПОСЛЕДНИЕ КОММИТЫ',
987
+
988
+ 'Active jobs': 'Активные задачи',
989
+ 'No active jobs': 'Нет активных задач',
908
990
  'Register in Models': 'Зарегистрировать в моделях',
909
991
  'Base URL': 'Базовый URL',
910
992
  'API key env / credential name': 'Имя переменной окружения / ключа API',
@@ -1298,9 +1380,10 @@ const exportSessionToMarkdown = (session, options = {}) => {
1298
1380
  layoutHintEl = document.createElement('div')
1299
1381
  layoutHintEl.dataset.russianLangLayout = '1'
1300
1382
  Object.assign(layoutHintEl.style, {
1301
- position: 'fixed', zIndex: '99999', background: '#fff', color: '#000',
1302
- border: '1px solid #888', borderRadius: '8px', padding: '6px 10px',
1303
- fontSize: '13px', boxShadow: '0 2px 8px rgba(0,0,0,.2)', cursor: 'pointer'
1383
+ position: 'fixed', zIndex: '99999', background: 'var(--dsw-alias-bg-layer-3)',
1384
+ color: 'var(--dsw-alias-label-primary)',
1385
+ border: '1px solid var(--dsw-alias-border-l2)', borderRadius: '8px', padding: '6px 10px',
1386
+ fontSize: '13px', boxShadow: 'var(--dsw-alias-shadow-l2)', cursor: 'pointer'
1304
1387
  })
1305
1388
  const label = direction === 'cyr2lat' ? 'Команда, не та раскладка' : 'Не та раскладка'
1306
1389
  layoutHintEl.textContent = label + ': ' + converted
@@ -1329,8 +1412,8 @@ const exportSessionToMarkdown = (session, options = {}) => {
1329
1412
  layoutBadgeEl.type = 'button'
1330
1413
  layoutBadgeEl.dataset.russianLangLayoutBadge = '1'
1331
1414
  Object.assign(layoutBadgeEl.style, {
1332
- position: 'fixed', zIndex: '99998', background: 'var(--dsw-alias-bg-layer-3, #fff)',
1333
- color: 'var(--dsw-alias-label-secondary, #666)', border: '1px solid var(--dsw-alias-border-l2, #888)',
1415
+ position: 'fixed', zIndex: '99998', background: 'var(--dsw-alias-bg-layer-3)',
1416
+ color: 'var(--dsw-alias-label-secondary)', border: '1px solid var(--dsw-alias-border-l2)',
1334
1417
  borderRadius: '6px', padding: '1px 6px', fontSize: '11px', cursor: 'pointer',
1335
1418
  fontFamily: 'monospace', lineHeight: '1.4', fontWeight: '600'
1336
1419
  })
@@ -1524,6 +1607,16 @@ const exportSessionToMarkdown = (session, options = {}) => {
1524
1607
  } catch (err) { console.warn('dsh-russian-lang: toggle failed', err) }
1525
1608
  }
1526
1609
  try {
1610
+ ctx.slots.inject('plugins.item', () =>
1611
+ ctx.slots.register({
1612
+ name: 'plugins.item',
1613
+ id: SETTINGS_NS_NAME,
1614
+ order: 60,
1615
+ label: () => 'Russian language',
1616
+ locale: SETTINGS_NS_NAME,
1617
+ inject: () => ({ scope, runtime, toggleRu }),
1618
+ }, SettingsCard),
1619
+ )
1527
1620
  ctx.slots.inject('plugins.row.config', () =>
1528
1621
  ctx.slots.register({
1529
1622
  name: 'plugins.row.config',
@@ -1700,7 +1793,7 @@ const exportSessionToMarkdown = (session, options = {}) => {
1700
1793
  const [loading, setLoading] = React.useState(false)
1701
1794
  const [open, setOpen] = React.useState(false)
1702
1795
  const [upStatus, setUpStatus] = React.useState({
1703
- currentVersion: '0.2.25',
1796
+ currentVersion: '0.2.26',
1704
1797
  latestVersion: undefined,
1705
1798
  updateAvailable: false
1706
1799
  })
@@ -1860,7 +1953,7 @@ const exportSessionToMarkdown = (session, options = {}) => {
1860
1953
  '<button type="button" class="rl-trans-btn rl-btn-close" title="Закрыть">✕</button>' +
1861
1954
  '</div>' +
1862
1955
  '</div>' +
1863
- '<div class="rl-trans-body"' + (isErr ? ' style="color: var(--dsw-alias-color-warning, #eab308); font-size: 13px;"' : '') + '></div>'
1956
+ '<div class="rl-trans-body"' + (isErr ? ' style="color: var(--dsw-alias-state-warning-primary); font-size: 13px;"' : '') + '></div>'
1864
1957
  box.querySelector('.rl-trans-body').textContent = displayText
1865
1958
 
1866
1959
  const copyBtn = box.querySelector('.rl-btn-copy')
@@ -2147,9 +2240,9 @@ const exportSessionToMarkdown = (session, options = {}) => {
2147
2240
  React.createElement('div', { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', flexWrap: 'wrap', gap: '8px' } },
2148
2241
  React.createElement('div', null,
2149
2242
  React.createElement('div', { style: { fontWeight: 600, color: 'var(--dsw-alias-label-primary)' } },
2150
- t('updaterCurrent').replace('{version}', upStatus.currentVersion || '0.2.25')),
2243
+ t('updaterCurrent').replace('{version}', upStatus.currentVersion || '0.2.26')),
2151
2244
  upStatus.updateAvailable
2152
- ? React.createElement('div', { style: { color: 'var(--dsw-alias-color-warning, #eab308)', marginTop: '2px', fontWeight: 500 } },
2245
+ ? React.createElement('div', { style: { color: 'var(--dsw-alias-state-warning-primary)', marginTop: '2px', fontWeight: 500 } },
2153
2246
  t('updaterLatest').replace('{version}', upStatus.latestVersion || ''))
2154
2247
  : React.createElement('div', { style: { color: 'var(--dsw-alias-label-secondary)', marginTop: '2px' } },
2155
2248
  t('updaterUpToDate'))
@@ -2171,8 +2264,8 @@ const exportSessionToMarkdown = (session, options = {}) => {
2171
2264
  upMsg ? React.createElement('div', {
2172
2265
  style: {
2173
2266
  marginTop: '10px', padding: '8px 12px', borderRadius: '8px',
2174
- background: upMsg.type === 'ok' ? 'rgba(34, 197, 94, 0.12)' : 'rgba(239, 68, 68, 0.12)',
2175
- color: upMsg.type === 'ok' ? '#16a34a' : '#dc2626', fontSize: '12px', fontWeight: 500
2267
+ background: upMsg.type === 'ok' ? 'color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent)' : 'color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent)',
2268
+ color: upMsg.type === 'ok' ? 'var(--dsw-alias-state-success-primary)' : 'var(--dsw-alias-state-error-primary)', fontSize: '12px', fontWeight: 500
2176
2269
  }
2177
2270
  }, upMsg.text) : null
2178
2271
  )
@@ -2208,8 +2301,8 @@ const exportSessionToMarkdown = (session, options = {}) => {
2208
2301
  value.translateEngine === 'google' ? React.createElement('div', {
2209
2302
  style: {
2210
2303
  marginTop: '10px', padding: '8px 12px', borderRadius: '8px',
2211
- background: 'rgba(234, 179, 8, 0.12)', border: '1px solid rgba(234, 179, 8, 0.3)',
2212
- color: 'var(--dsw-alias-color-warning, #eab308)', fontSize: '12px', fontWeight: 500, lineHeight: 1.4
2304
+ background: 'color-mix(in srgb, var(--dsw-alias-state-warning-primary) 12%, transparent)', border: '1px solid color-mix(in srgb, var(--dsw-alias-state-warning-primary) 30%, transparent)',
2305
+ color: 'var(--dsw-alias-state-warning-primary)', fontSize: '12px', fontWeight: 500, lineHeight: 1.4
2213
2306
  }
2214
2307
  }, t('googleWarn')) : null,
2215
2308
  value.translateEngine === 'local' ? React.createElement('div', {
@@ -2230,8 +2323,8 @@ const exportSessionToMarkdown = (session, options = {}) => {
2230
2323
  transMsg ? React.createElement('div', {
2231
2324
  style: {
2232
2325
  marginTop: '6px', padding: '8px 12px', borderRadius: '8px',
2233
- background: transMsg.type === 'ok' ? 'rgba(34, 197, 94, 0.12)' : 'rgba(239, 68, 68, 0.12)',
2234
- color: transMsg.type === 'ok' ? '#16a34a' : '#dc2626', fontSize: '12px', fontWeight: 500
2326
+ background: transMsg.type === 'ok' ? 'color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent)' : 'color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent)',
2327
+ color: transMsg.type === 'ok' ? 'var(--dsw-alias-state-success-primary)' : 'var(--dsw-alias-state-error-primary)', fontSize: '12px', fontWeight: 500
2235
2328
  }
2236
2329
  }, transMsg.text) : null
2237
2330
  ) : null
@@ -2260,7 +2353,7 @@ const exportSessionToMarkdown = (session, options = {}) => {
2260
2353
  ),
2261
2354
  React.createElement('div', { className: 'rl-actions-row' },
2262
2355
  React.createElement('a', {
2263
- href: makeIssueUrl({}, '0.2.25'),
2356
+ href: makeIssueUrl({}, '0.2.26'),
2264
2357
  target: '_blank',
2265
2358
  rel: 'noopener noreferrer',
2266
2359
  className: 'rl-btn rl-btn-primary'
@@ -2292,8 +2385,8 @@ const exportSessionToMarkdown = (session, options = {}) => {
2292
2385
  '.rl-grid-2{display:grid;grid-template-columns:repeat(auto-fit, minmax(280px, 1fr));gap:10px}',
2293
2386
  '.rl-grid-3{display:grid;grid-template-columns:repeat(auto-fit, minmax(140px, 1fr));gap:10px}',
2294
2387
  '.rl-badge{font-size:11px;padding:2px 8px;border-radius:999px;border:1px solid var(--dsw-alias-border-l2);display:inline-flex;align-items:center;gap:4px;font-weight:500}',
2295
- '.rl-badge-ok{border-color:var(--dsw-alias-state-success-primary);color:var(--dsw-alias-state-success-primary);background:rgba(16,185,129,0.08)}',
2296
- '.rl-badge-warn{border-color:var(--dsw-alias-state-warning-primary);color:var(--dsw-alias-state-warning-primary);background:rgba(245,158,11,0.08)}',
2388
+ '.rl-badge-ok{border-color:var(--dsw-alias-state-success-primary);color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 8%, transparent)}',
2389
+ '.rl-badge-warn{border-color:var(--dsw-alias-state-warning-primary);color:var(--dsw-alias-state-warning-primary);background:color-mix(in srgb, var(--dsw-alias-state-warning-primary) 8%, transparent)}',
2297
2390
  '.rl-badge-dim{border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-3)}',
2298
2391
  '.rl-item-card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:8px;padding:10px 12px;display:flex;flex-direction:column;gap:4px}',
2299
2392
  '.rl-item-head{display:flex;align-items:center;justify-content:space-between;gap:8px}',
@@ -1 +1 @@
1
- {"usageDashboard":{"buckets.cacheRead":"Чтение кэша","buckets.cacheWrite":"Запись в кэш","buckets.caption":"Четыре непересекающиеся корзины тарификации · всего {total} ток","buckets.output":"Выход","buckets.title":"Состав токенов","buckets.uncachedInput":"Вход мимо кэша","composition.caption":"Оценка по эвристике, не по счёту; в сумму занятости не сойдётся","composition.messages":"Сообщения","composition.system":"Системный промпт","composition.title":"Состав контекста","composition.tools":"Схемы инструментов","efficiency.llm":"Время модели","efficiency.steps":"Шаги","efficiency.stepsValue":"{steps}","efficiency.throughput":"Скорость выдачи","efficiency.title":"Эффективность запросов","efficiency.tool":"Время инструментов","efficiency.ttft":"Первый токен, среднее","efficiency.ttftOver":"шагов: {steps}","efficiency.turns":"Ходы","efficiency.turnsValue":"{turns}","empty.usage":"Расхода токенов пока нет","empty.usageHint":"Цифры появятся, когда сессия сделает первый запрос к модели.","overview.billedInput":"Оплаченный вход","overview.billedInputSub":"мимо кэша {uncached} · из кэша {cached}","overview.cacheHit":"Попадания в кэш","overview.cacheHitSub":"прочитано {read} из {total} ток","overview.context":"Контекст занят","overview.contextSub":"{used} из {window} ток","overview.contextUnknown":"Размер окна модели неизвестен","overview.output":"Выход","overview.outputSub":"всего {total} ток","scope.aria":"Охват статистики","scope.session":"Эта сессия","scope.sessions":"Все сессии","sessions.currentTag":"Текущая","sessions.detail.noData":"Данные по этой сессии загружаются или их нет","sessions.detail.title":"Подробности сессии","sessions.empty":"Расход по сессиям не записан","sessions.inactive":"Простаивает","sessions.running":"Работает","sessions.selectHint":"Выберите строку, чтобы посмотреть сессию","sessions.subagentTag":"Субагент","sessions.summary.input":"Оплаченный вход, всего","sessions.summary.output":"Выход, всего","sessions.summary.sessions":"Сессий с расходом","sessions.summary.sessionsValue":"{count}","sessions.summary.totalValue":"всего сессий: {count}","sessions.summary.turns":"Ходов всего","sessions.summary.turnsValue":"{turns}","sessions.table.cacheHit":"Попаданий в кэш","sessions.table.input":"Оплаченный вход","sessions.table.output":"Выход","sessions.table.session":"Сессия","sessions.table.status":"Состояние","sessions.table.turns":"Ходы","sessions.table.updated":"Изменена","steps.cacheRead":"Кэш Ч","steps.cacheWrite":"Кэш З","steps.caption":"Только загруженное окно, новые сверху; итог считает то же окно","steps.done":"Готово","steps.empty":"В загруженном окне шагов нет","steps.input":"Вход","steps.interrupted":"Прервано","steps.model":"Модель","steps.output":"Выход","steps.reasoning":"Рассуждения","steps.sortBy":"Сортировать по «{column}»","steps.status":"Состояние","steps.title":"Подробности по шагам","steps.tps":"ток/с","steps.ttft":"Первый токен","steps.turn":"Ход.шаг","steps.windowTotal":"Итог по окну","time.daysAgo":"{n} дн назад","time.hoursAgo":"{n} ч назад","time.justNow":"только что","time.minutesAgo":"{n} мин назад","view.usage":"Статистика"}}
1
+ {"@dsh-external/dsh-token-dashboard":{"buckets.cacheRead":"Чтение кэша","buckets.cacheWrite":"Запись в кэш","buckets.caption":"Четыре непересекающиеся корзины тарификации · всего {total} ток","buckets.output":"Выход","buckets.title":"Состав токенов","buckets.uncachedInput":"Вход мимо кэша","composition.caption":"Оценка по эвристике, не по счёту; в сумму занятости не сойдётся","composition.messages":"Сообщения","composition.system":"Системный промпт","composition.title":"Состав контекста","composition.tools":"Схемы инструментов","efficiency.llm":"Время модели","efficiency.steps":"Шаги","efficiency.stepsValue":"{steps}","efficiency.throughput":"Скорость выдачи","efficiency.title":"Эффективность запросов","efficiency.tool":"Время инструментов","efficiency.ttft":"Первый токен, среднее","efficiency.ttftOver":"шагов: {steps}","efficiency.turns":"Ходы","efficiency.turnsValue":"{turns}","empty.usage":"Расхода токенов пока нет","empty.usageHint":"Цифры появятся, когда сессия сделает первый запрос к модели.","overview.billedInput":"Оплаченный вход","overview.billedInputSub":"мимо кэша {uncached} · из кэша {cached}","overview.cacheHit":"Попадания в кэш","overview.cacheHitSub":"прочитано {read} из {total} ток","overview.context":"Контекст занят","overview.contextSub":"{used} из {window} ток","overview.contextUnknown":"Размер окна модели неизвестен","overview.output":"Выход","overview.outputSub":"всего {total} ток","scope.aria":"Охват статистики","scope.session":"Эта сессия","scope.sessions":"Все сессии","sessions.currentTag":"Текущая","sessions.detail.noData":"Данные по этой сессии загружаются или их нет","sessions.detail.title":"Подробности сессии","sessions.empty":"Расход по сессиям не записан","sessions.inactive":"Простаивает","sessions.running":"Работает","sessions.selectHint":"Выберите строку, чтобы посмотреть сессию","sessions.subagentTag":"Субагент","sessions.summary.input":"Оплаченный вход, всего","sessions.summary.output":"Выход, всего","sessions.summary.sessions":"Сессий с расходом","sessions.summary.sessionsValue":"{count}","sessions.summary.totalValue":"всего сессий: {count}","sessions.summary.turns":"Ходов всего","sessions.summary.turnsValue":"{turns}","sessions.table.cacheHit":"Попаданий в кэш","sessions.table.input":"Оплаченный вход","sessions.table.output":"Выход","sessions.table.session":"Сессия","sessions.table.status":"Состояние","sessions.table.turns":"Ходы","sessions.table.updated":"Изменена","steps.cacheRead":"Кэш Ч","steps.cacheWrite":"Кэш З","steps.caption":"Только загруженное окно, новые сверху; итог считает то же окно","steps.done":"Готово","steps.empty":"В загруженном окне шагов нет","steps.input":"Вход","steps.interrupted":"Прервано","steps.model":"Модель","steps.output":"Выход","steps.reasoning":"Рассуждения","steps.sortBy":"Сортировать по «{column}»","steps.status":"Состояние","steps.title":"Подробности по шагам","steps.tps":"ток/с","steps.ttft":"Первый токен","steps.turn":"Ход.шаг","steps.windowTotal":"Итог по окну","time.daysAgo":"{n} дн назад","time.hoursAgo":"{n} ч назад","time.justNow":"только что","time.minutesAgo":"{n} мин назад","view.usage":"Статистика"},"dsh-token-dashboard":{"buckets.cacheRead":"Чтение кэша","buckets.cacheWrite":"Запись в кэш","buckets.caption":"Четыре непересекающиеся корзины тарификации · всего {total} ток","buckets.output":"Выход","buckets.title":"Состав токенов","buckets.uncachedInput":"Вход мимо кэша","composition.caption":"Оценка по эвристике, не по счёту; в сумму занятости не сойдётся","composition.messages":"Сообщения","composition.system":"Системный промпт","composition.title":"Состав контекста","composition.tools":"Схемы инструментов","efficiency.llm":"Время модели","efficiency.steps":"Шаги","efficiency.stepsValue":"{steps}","efficiency.throughput":"Скорость выдачи","efficiency.title":"Эффективность запросов","efficiency.tool":"Время инструментов","efficiency.ttft":"Первый токен, среднее","efficiency.ttftOver":"шагов: {steps}","efficiency.turns":"Ходы","efficiency.turnsValue":"{turns}","empty.usage":"Расхода токенов пока нет","empty.usageHint":"Цифры появятся, когда сессия сделает первый запрос к модели.","overview.billedInput":"Оплаченный вход","overview.billedInputSub":"мимо кэша {uncached} · из кэша {cached}","overview.cacheHit":"Попадания в кэш","overview.cacheHitSub":"прочитано {read} из {total} ток","overview.context":"Контекст занят","overview.contextSub":"{used} из {window} ток","overview.contextUnknown":"Размер окна модели неизвестен","overview.output":"Выход","overview.outputSub":"всего {total} ток","scope.aria":"Охват статистики","scope.session":"Эта сессия","scope.sessions":"Все сессии","sessions.currentTag":"Текущая","sessions.detail.noData":"Данные по этой сессии загружаются или их нет","sessions.detail.title":"Подробности сессии","sessions.empty":"Расход по сессиям не записан","sessions.inactive":"Простаивает","sessions.running":"Работает","sessions.selectHint":"Выберите строку, чтобы посмотреть сессию","sessions.subagentTag":"Субагент","sessions.summary.input":"Оплаченный вход, всего","sessions.summary.output":"Выход, всего","sessions.summary.sessions":"Сессий с расходом","sessions.summary.sessionsValue":"{count}","sessions.summary.totalValue":"всего сессий: {count}","sessions.summary.turns":"Ходов всего","sessions.summary.turnsValue":"{turns}","sessions.table.cacheHit":"Попаданий в кэш","sessions.table.input":"Оплаченный вход","sessions.table.output":"Выход","sessions.table.session":"Сессия","sessions.table.status":"Состояние","sessions.table.turns":"Ходы","sessions.table.updated":"Изменена","steps.cacheRead":"Кэш Ч","steps.cacheWrite":"Кэш З","steps.caption":"Только загруженное окно, новые сверху; итог считает то же окно","steps.done":"Готово","steps.empty":"В загруженном окне шагов нет","steps.input":"Вход","steps.interrupted":"Прервано","steps.model":"Модель","steps.output":"Выход","steps.reasoning":"Рассуждения","steps.sortBy":"Сортировать по «{column}»","steps.status":"Состояние","steps.title":"Подробности по шагам","steps.tps":"ток/с","steps.ttft":"Первый токен","steps.turn":"Ход.шаг","steps.windowTotal":"Итог по окну","time.daysAgo":"{n} дн назад","time.hoursAgo":"{n} ч назад","time.justNow":"только что","time.minutesAgo":"{n} мин назад","view.usage":"Статистика"},"usageDashboard":{"buckets.cacheRead":"Чтение кэша","buckets.cacheWrite":"Запись в кэш","buckets.caption":"Четыре непересекающиеся корзины тарификации · всего {total} ток","buckets.output":"Выход","buckets.title":"Состав токенов","buckets.uncachedInput":"Вход мимо кэша","composition.caption":"Оценка по эвристике, не по счёту; в сумму занятости не сойдётся","composition.messages":"Сообщения","composition.system":"Системный промпт","composition.title":"Состав контекста","composition.tools":"Схемы инструментов","efficiency.llm":"Время модели","efficiency.steps":"Шаги","efficiency.stepsValue":"{steps}","efficiency.throughput":"Скорость выдачи","efficiency.title":"Эффективность запросов","efficiency.tool":"Время инструментов","efficiency.ttft":"Первый токен, среднее","efficiency.ttftOver":"шагов: {steps}","efficiency.turns":"Ходы","efficiency.turnsValue":"{turns}","empty.usage":"Расхода токенов пока нет","empty.usageHint":"Цифры появятся, когда сессия сделает первый запрос к модели.","overview.billedInput":"Оплаченный вход","overview.billedInputSub":"мимо кэша {uncached} · из кэша {cached}","overview.cacheHit":"Попадания в кэш","overview.cacheHitSub":"прочитано {read} из {total} ток","overview.context":"Контекст занят","overview.contextSub":"{used} из {window} ток","overview.contextUnknown":"Размер окна модели неизвестен","overview.output":"Выход","overview.outputSub":"всего {total} ток","scope.aria":"Охват статистики","scope.session":"Эта сессия","scope.sessions":"Все сессии","sessions.currentTag":"Текущая","sessions.detail.noData":"Данные по этой сессии загружаются или их нет","sessions.detail.title":"Подробности сессии","sessions.empty":"Расход по сессиям не записан","sessions.inactive":"Простаивает","sessions.running":"Работает","sessions.selectHint":"Выберите строку, чтобы посмотреть сессию","sessions.subagentTag":"Субагент","sessions.summary.input":"Оплаченный вход, всего","sessions.summary.output":"Выход, всего","sessions.summary.sessions":"Сессий с расходом","sessions.summary.sessionsValue":"{count}","sessions.summary.totalValue":"всего сессий: {count}","sessions.summary.turns":"Ходов всего","sessions.summary.turnsValue":"{turns}","sessions.table.cacheHit":"Попаданий в кэш","sessions.table.input":"Оплаченный вход","sessions.table.output":"Выход","sessions.table.session":"Сессия","sessions.table.status":"Состояние","sessions.table.turns":"Ходы","sessions.table.updated":"Изменена","steps.cacheRead":"Кэш Ч","steps.cacheWrite":"Кэш З","steps.caption":"Только загруженное окно, новые сверху; итог считает то же окно","steps.done":"Готово","steps.empty":"В загруженном окне шагов нет","steps.input":"Вход","steps.interrupted":"Прервано","steps.model":"Модель","steps.output":"Выход","steps.reasoning":"Рассуждения","steps.sortBy":"Сортировать по «{column}»","steps.status":"Состояние","steps.title":"Подробности по шагам","steps.tps":"ток/с","steps.ttft":"Первый токен","steps.turn":"Ход.шаг","steps.windowTotal":"Итог по окну","time.daysAgo":"{n} дн назад","time.hoursAgo":"{n} ч назад","time.justNow":"только что","time.minutesAgo":"{n} мин назад","view.usage":"Статистика"}}
@@ -1 +1 @@
1
- {"dsh-kanban":{"DEFAULT_BOARDS.main.title":"Проектная доска","DEFAULT_BOARDS.simple.title":"Простая доска","acceptance.accept":"Принять (Выполнено)","acceptance.acceptAndMerge":"Принять и смержить ветку","acceptance.merging":"Выполняется слияние ветки…","acceptance.reject":"Вернуть на доработку","acceptance.rejectReasonPlaceholder":"Укажите, что необходимо исправить или доработать...","acceptance.rejectSubmit":"Отправить на доработку","acceptance.rejectTitle":"Возврат на доработку","acceptance.rejectedAlert":"Возвращено на доработку: {reason}","acceptance.rejectedBadge":"На доработке","acceptance.title":"Приёмка и проверка задачи","action.exportCsv":"Экспорт доски в CSV","action.resume":"Возобновить выполнение","archive.empty":"В архиве пусто.","archive.hint":"Карточки, отстоявшие свой срок в «Выполнено». Ничего не удалено: возвращённая карточка встаёт в ту же колонку, откуда ушла.","archive.restore":"Вернуть на доску","archive.since":"в архиве {ago}","archiveAfterDays":"Через сколько дней в колонке «Выполнено» карточка уходит в архив. Ноль — не убирать.","batch.hint":"Одна сессия на все. Задачи приходят по очереди: агент берёт следующую, закончив текущую. В «В работе» уезжает только первая — остальные ждут своей очереди там, где лежат.","batch.start":"Запустить","batch.title":"Запустить {n} задач в одном чате","board.allRepos":"Все репозитории","board.archive":"Архив","board.back":"В чат","board.backHint":"Закрыть доску и вернуться в разговор","board.clearFilters":"Снять отборы","board.collapse":"Свернуть колонку","board.empty":"Задач пока нет.","board.expand":"Развернуть колонку","board.export":"Скачать","board.exportHint":"Экспортировать всю доску в файл JSON","board.import":"Импорт","board.imported":"Импортировано {n} задач","board.limit":"предел {n}","board.loading":"Доска загружается…","board.metrics":"Метрики","board.mine":"Мои: {n}","board.mineHint":"Задачи, назначенные на {who}","board.newTask":"Задача","board.noMatch":"Ничего не найдено.","board.noRepo":"без проекта","board.overdueCount":"Просрочено: {n}","board.overdueHint":"Показать только просроченные задачи","board.pickArchive":"В архив","board.pickMove":"Перенести…","board.pickNone":"Снять выбор","board.pickStart":"Запустить выбранные","board.pickUnqueue":"Снять с очереди","board.pickedCount":"выбрано {n}","board.refresh":"Обновить","board.repo":"репозиторий","board.search":"Поиск","board.shown":"показано {shown} из {total}","board.someFailed":"Сделано у {done} из {total}, остальные отказали.","board.sync":"Сверить с Gitea","board.syncing":"Сверяю…","board.waitCount":"Ждут ответа: {n}","board.waitCountHint":"Задачи, где агент задал вопрос или просит разрешения.","board.waiting":"нужен человек","boardName.main":"Проектная доска","boardName.simple":"Простая доска","boardToolEnabled":"Разрешить агенту двигать карточки инструментом board_move.","card.assigneeHint":"Кто взял задачу","card.attach":"Прикрепить файл","card.checklist":"Чеклист","card.comments":"Комментарии","card.created":"Создано {date}","card.deadline":"Срок выполнения","card.deleteConfirm":"Удалить эту карточку?","card.description":"Описание задачи","card.due":"срок {date}","card.dueDate":"Крайний срок","card.edit":"Редактировать","card.labels":"Метки","card.move":"Переместить в колонку","card.pack":"пачка {at} из {total}","card.packHint":"Запущены вместе, одной сессией; агент берёт их в этом порядке.","card.pick":"Отметить для группового запуска","card.priority":"Приоритет","card.progress":"Прогресс","card.queue":"в очередь...","card.revive":"Восстановить","card.stop":"остановить","card.tags":"Теги","card.title":"Название карточки","card.toChat":"перейти в чат","card.unqueue":"снять с очереди","checklist.add":"Добавить","checklist.empty":"Критерии готовности ещё не настроены.","checklist.evidence":"Подтверждение: {text}","checklist.placeholder":"Новый критерий готовности...","checklist.progress":"DoD: {done} из {total}","checklist.required":"Обязательно","checklist.title":"Критерии готовности (DoD)","chip.moveTo":"Перенести в","chip.note":"Оставить заметку","chip.noteHint":"Заметка дописывается в тело задачи. Тело уходит агенту первым сообщением, поэтому заметка до запуска попадёт в работу, а после запуска — нет.","chip.noteSave":"Дописать","chip.openCard":"Перейти к карточке","column.addCard":"+ Добавить карточку","column.backlog":"Бэклог","column.cleanup":"Уборка","column.clear":"Очистить колонку","column.collapse":"Свернуть колонку","column.delete":"Удалить колонку","column.deploy":"Выкатка","column.done":"Выполнено","column.empty":"В этой колонке нет задач","column.expand":"Развернуть колонку","column.in-progress":"В работе","column.limit":"Лимит WIP: {n}","column.rename":"Переименовать колонку","column.review":"Ревью","column.title":"Название колонки","columnNames":"Свои названия колонок парами «идентификатор=Название» через запятую. Пусто — обычные названия.","comments.add":"Опубликовать комментарий","comments.authorAgent":"Агент","comments.authorUser":"Пользователь","comments.empty":"Комментариев пока нет.","comments.placeholder":"Добавьте заметку или отзыв...","comments.title":"Обсуждение и комментарии","console.empty":"Вывод агента пока не записан.","console.tab":"Живая консоль","defaultProjectRoot":"Корень, в котором лежат рабочие копии проектов. Пусто — рабочая папка харнесса.","dialog.archived":"архив","dialog.bodyHint":"Уйдёт агенту первым сообщением при запуске задачи.","dialog.cancel":"Отмена","dialog.create":"Создать","dialog.fromGitea":"Из Gitea","dialog.imported":"уже на доске","dialog.kind":"Какая это задача","dialog.kindPlain":"Не проект","dialog.kindPlainHint":"Заметка, не относящаяся ни к какому репозиторию. Живёт на простой доске и в Gitea не попадает.","dialog.kindProject":"Проект","dialog.kindProjectHint":"В Gitea заводится issue, карточка привязывается к нему и живёт на проектной доске.","dialog.labelsHint":"через запятую","dialog.loadingRepos":"Репозитории загружаются…","dialog.noIssues":"Открытых issue не найдено.","dialog.noRepos":"Репозиториев нет","dialog.own":"Своя задача","dialog.pickRepo":"Выберите репозиторий","dialog.repo":"Репозиторий","dialog.repoNamePlaceholder":"имя нового репозитория, латиницей","dialog.repoNew":"— новый репозиторий —","dialog.repoNewHint":"Будет создан в организации: приватный и пустой, без README и заготовок. Создание репозитория отсюда не отменить.","dialog.taskBody":"Описание","dialog.taskColumn":"Колонка","dialog.taskLabels":"Метки","dialog.taskTitle":"Заголовок","dialog.title":"Новая задача","diff.additions":"Добавлено","diff.author":"Автор","diff.branch":"Ветка: {name}","diff.cherryPick":"Перенести коммит (Cherry-pick)","diff.commits":"Коммиты задачи ({n})","diff.date":"Дата","diff.deletions":"Удалено","diff.empty":"Нет коммитов или изменений файлов для этой задачи.","diff.filesChanged":"Изменено файлов: {n}","diff.hash":"Хеш","diff.hide":"Скрыть просмотр diff","diff.loadFailed":"Не удалось загрузить изменения: {error}","diff.loading":"Загрузка коммитов и diff…","diff.mergeConflict":"Обнаружены конфликты слияния","diff.mergeFailed":"Сбой слияния ветки: {error}","diff.mergeSuccess":"Ветка успешно смержена в основную","diff.message":"Сообщение коммита","diff.resolveConflicts":"Разрешить конфликты","diff.revert":"Откатить коммит","diff.show":"Показать просмотр diff","diff.staged":"Подготовленные изменения","diff.title":"Изменения в ветке задачи","diff.truncated":"Дифф обрезан (превышен лимит)","diff.uncommitted":"Незакоммиченные изменения","diff.view":"Просмотр изменений","discard":"Отменить","epic.addSubtask":"Добавить подзадачу","epic.badge":"Эпик","epic.createGiteaIssues":"Также создать связанные задачи в Gitea","epic.noSubtasks":"Подзадач пока нет.","epic.progress":"Подзадач: {done}/{total}","epic.subtasks":"Подзадачи","epic.triage":"Декомпозировать","epic.triageHelp":"Введите по одному названию подзадачи в строке. Дочерние задачи будут привязаны к этому эпику.","epic.triageSubmit":"Создать подзадачи","epic.triageTitle":"Декомпозиция задачи на подзадачи","error.bad-repo-name":"В имени репозитория допустимы только латинские буквы, цифры, точка, дефис и подчёркивание.","error.badImport":"Неверный формат файла импорта","error.crossSite":"Запрос отклонён как межсайтовый.","error.gitea-unreachable":"Сервер Gitea недоступен","error.giteaAbsent":"Плагин Gitea не установлен, импорт недоступен.","error.giteaUnconfigured":"Сначала настройте Gitea в карточке плагина Gitea.","error.issue-not-created":"Issue не заведён. Если репозиторий был новым, он остался — ничего не удалено.","error.issueNotFound":"Issue не найден.","error.modelNotSelected":"Модель не выбрана — задайте её в настройках или укажите здесь.","error.no-live-sessions":"Нет ни одной идущей сессии, в очередь ставить некуда.","error.permission-refused":"Уровень доступа не принят, задача не запущена.","error.permission-unavailable":"В этой сборке уровней доступа нет — задача не запущена, чтобы не пойти с бо́льшими правами, чем просили.","error.repo-not-created":"Репозиторий не создан; больше ничего не сделано.","error.repo-required":"Выберите репозиторий или назовите новый.","error.session-not-live":"Эта сессия больше не идёт.","error.sessionNotOpened":"Сессия поднята ({id}), но эта сборка не умеет в неё переключиться. Найдите её в списке сессий.","error.startFailed":"Не удалось поднять сессию.","error.task-not-queued":"Задача не стоит в очереди.","error.taskHasNoIssue":"За этой задачей нет issue в Gitea.","error.taskNotFound":"Задача не найдена.","error.titleRequired":"Нужен заголовок.","error.unknown":"Запрос не выполнен.","facet.assignee":"Исполнитель","facet.author":"Автор","facet.priority":"Приоритет","facet.release":"Выпуск","facet.repo":"Репозиторий","facet.risk":"Риск","facet.scope":"Область","facet.signal":"Сигнал","facet.status":"Статус","facet.type":"Тип","field.announceToAgent":"Уведомлять агента об изменениях","field.archiveAfterDays":"Убирать в архив из «Выполнено» через, дней","field.autoSyncSessions":"Автосинхронизация внешних сессий чата","field.boardToolEnabled":"Разрешить агенту двигать карточки","field.columnNames":"Свои названия колонок","field.cronEnabled":"Включить планировщик задач","field.defaultProjectRoot":"Корень проектов","field.giteaOwner":"Организация Gitea","field.giteaTokenRef":"Имя учётной записи","field.giteaUrl":"Адрес инстанса","field.maxConcurrentSessions":"Макс. параллельных сессий агентов","field.permissionGateEnabled":"Контроль прав доступа к доске","field.preventIdleSleep":"Предотвращать засыпание при активных задачах","field.progressDumpEnabled":"Дамп прогресса выполнения","field.pushToGitea":"Закрывать issue в Gitea","field.replyInstruction":"Постоянная приписка","field.sessionDefaultPermission":"Права доступа сессии по умолчанию","field.staleAfterMin":"Считать задачу молчащей после, минут","field.startPrompt":"Шаблон первого сообщения","field.syncIntervalSec":"Сверяться с Gitea раз в, секунд","field.watchRepos":"Сузить подхват до репозиториев","field.webhookSecretRef":"Имя учётной записи для вебхука","field.wipInProgress":"Предел «В работе»","field.wipReview":"Предел «Ревью»","field.workspaceClaimBoundaries":"Границы захвата рабочей области","field.worktreeIsolation":"Изоляция рабочих деревьев (worktree)","field.worktreeRoot":"Корневой каталог worktree","filter.active":"Активные","filter.all":"Все задачи","filter.assignee":"Исполнитель","filter.epics":"Эпики","filter.label":"Метка","filter.overdue":"Просроченные","filter.priority":"Приоритет","filter.review":"На проверке","filter.search":"Поиск задач…","filter.stale":"Без активности","giteaOwner":"Организация Gitea, чьи репозитории смотрит доска. Пусто — определяется сама, если организация одна.","giteaTokenRef":"ИМЯ учётной записи DSH, в которой лежит токен. Сам токен сюда не вводить.","giteaUrl":"Адрес инстанса Gitea или Forgejo, например https://gitea.example.com. Пусто — импорт недоступен.","group.assignee":"По исполнителям","group.general":"Общее","group.gitea":"Gitea","group.limits":"Пределы колонок","group.nobody":"Без исполнителя","group.repo":"По репозиториям","group.sync":"Автоперемещение","hint.announceToAgent":"Автоматически отправлять агенту сообщения о перемещении карточек","hint.archiveAfterDays":"Считается с попадания карточки в «Выполнено». Ноль — оставлять всё на доске.","hint.autoSyncSessions":"Автоматически создавать карточки на доске для стандартных диалогов чата DSH.","hint.boardToolEnabled":"Выключено, пока скилл воркфлоу запрещает этому CLI трогать канбан.","hint.columnNames":"Пары «идентификатор=Название» через запятую, например «backlog=Идеи, review=Проверка». Пусто — обычные названия.","hint.cronEnabled":"Запуск фоновых периодических проверок статусов задач","hint.defaultProjectRoot":"Где лежат рабочие копии проектов. Пусто — рабочая папка харнесса.","hint.giteaOwner":"Чьи репозитории смотрит доска. Пусто — определится сама, пока у токена ровно одна организация.","hint.giteaTokenRef":"ИМЯ учётной записи DSH, в которой лежит токен. Сам токен сюда не вводить.","hint.giteaUrl":"Например https://gitea.example.com. Пусто — импорт недоступен.","hint.label":"Пусто — метка для этой колонки не ставится.","hint.limit":"Ноль — без предела. Превышение подсвечивается, но не запрещается.","hint.permissionGateEnabled":"Требовать подтверждения при выполнении деструктивных операций","hint.preventIdleSleep":"Не усыплять фоновый процесс DSH, пока есть незавершённые задачи","hint.progressDumpEnabled":"Периодически сохранять прогресс выполнения в файл progress.md","hint.pushToGitea":"Карточка, дошедшая до «Выполнено», закрывает свой issue. Меток доска не ставит: стадия и так видна по ветке и pull request.","hint.replyInstruction":"Дописывается к каждому первому сообщению — например язык ответа. Пусто — ничего не добавляется.","hint.sessionDefaultPermission":"Уровень прав, выдаваемый сессиям без явных настроек","hint.staleAfterMin":"Помечаются только задачи с сессией. Ноль отключает отметку.","hint.startPrompt":"Шаблон первого сообщения агенту. Пусто — встроенный шаблон.","hint.syncIntervalSec":"Ноль отключает сверку. Меньше пятнадцати секунд поднимается до пятнадцати.","hint.watchRepos":"Через запятую, «владелец/репо» или просто «репо». Пусто — все репозитории организации, где есть открытые задачи.","hint.webhookSecretRef":"ИМЯ учётной записи DSH с секретом вебхука Gitea. Пусто — остаётся только опрос.","hint.worktreeIsolation":"Создавать отдельный git worktree для каждой задачи","hint.worktreeRoot":"Каталог, в котором создаются временные изолированные worktree","import.error":"Ошибка импорта JSON доски","import.success":"Доска успешно импортирована","label.assigned":"Назначено","label.blocked":"Заблокировано","label.completed":"Выполнено","label.inProgress":"В работе","label.pending":"В очереди","label.review":"На проверке","metrics.columns":"Время в колонках","metrics.completed":"Завершено задач: {n}","metrics.cycleTime":"Среднее время выполнения: {days} дн.","metrics.empty":"Переходов ещё не было — измерять нечего.","metrics.hint":"{n} задач на доске • выполнено за неделю: {week} • за месяц: {month}","metrics.leadTime":"Общее время от создания: {days} дн.","metrics.leadTimeAvg":"Средний Lead Time","metrics.mean":"среднее {time}","metrics.median":"медиана {time}","metrics.noStale":"Ни одна задача не задерживалась так долго.","metrics.stale":"Без движения дольше {days} дн.","metrics.throughput":"Пропускная способность","metrics.total":"Всего задач: {n}","metrics.wip":"Задач в работе (WIP): {n}","metrics.wipLimit":"Лимит задач в работе (WIP)","modal.confirmDelete":"Подтверждение удаления","modal.createTask":"Создание новой задачи","modal.editTask":"Редактирование задачи","move.backlog":"Работа по задаче останавливается: идущий ход агента будет прерван. Если сессии нет, карточка просто переедет.","move.cleanup":"Агент удалит ветку в Gitea, worktree и локальную ветку и запишет это в issue.","move.confirm":"Перенести","move.deploy":"Агент вольёт pull request и выкатит. Сам перенос в эту колонку И ЕСТЬ ваше «ок» на deploy — второй раз агент спрашивать не станет.","move.done":"Задача считается завершённой. Это решение человека: сам агент карточку сюда не переносит.","move.in-progress":"Агент получит команду начать или продолжить реализацию.","move.review":"Агент доведёт работу до ревью: снимет с pull request пометку черновика и запросит проверку.","move.title":"Перенести в «{column}»?","nav.all":"Все доски","nav.back":"Назад к доске","nav.settings":"Настройки доски","order.manual":"Как разложено","order.new":"Сначала новые","order.old":"Сначала старые","panel.agentPreset":"Профиль агента","panel.archive":"В архив","panel.assignDrop":"Отказаться","panel.assignMe":"Взять себе","panel.assignee":"взял {who}","panel.author":"завёл {who}","panel.bodyLoading":"читаю описание…","panel.cleanupWorktree":"Очистить worktree","panel.close":"Закрыть","panel.continue":"Продолжить","panel.continueHint":"У задачи один чат: открывается прежняя сессия, а не новая.","panel.created":"заведена {ago} назад","panel.delete":"Удалить","panel.deleteConfirm":"Удалить «{title}»? Отменить будет нельзя.","panel.due":"Срок","panel.issue":"Issue","panel.labels":"Метки","panel.log":"Переходы","panel.message":"Сообщение агенту","panel.messageHint":"Правьте перед отправкой. Пустое — уйдёт встроенный текст.","panel.model":"Модель","panel.noLog":"Переходов пока нет.","panel.noModels":"У этого провайдера нет моделей","panel.noProviders":"Провайдеров нет","panel.openChat":"Открыть чат","panel.permission":"Уровень доступа","panel.pickModel":"Выберите модель","panel.pickProvider":"Выберите провайдера","panel.pickProviderFirst":"Сначала выберите провайдера","panel.presetDefault":"Как в харнессе по умолчанию","panel.priority":"Приоритет","panel.priorityNone":"Без приоритета","panel.provider":"Провайдер","panel.refresh":"Обновить из Gitea","panel.saveEdit":"Сохранить","panel.start":"Начать","panel.startHint":"Откроется отдельная сессия агента по этой задаче. Ветку и worktree заводит агент после preflight, а не отсюда.","panel.starting":"Запускается…","panel.updated":"последнее изменение {ago} назад","panel.workDir":"Рабочая папка: {path}","panel.workDirHint":"Корень проекта не указан в настройках, поэтому используется эта папка.","panel.worktree":"Worktree: {path}","panel.worktreeDirty":"Незакоммиченные изменения в worktree: {files}","plan.counter":"{done} из {total}","plan.title":"План агента","pr.create":"Создать PR в Gitea","pr.created":"PR #{n} создан","pr.creating":"Создание PR…","pr.view":"Открыть PR","priority.high":"Высокий","priority.highest":"Критический","priority.low":"Низкий","priority.lowest":"Минимальный","priority.medium":"Средний","priority.normal":"Обычный","priority.urgent":"Срочный","queue.add":"В очередь","queue.hint":"Задача встанет в очередь сессии: агент возьмёт её, закончив текущую работу. До этого карточка остаётся там, где лежит.","queue.option":"{title} - задач: {n}","queue.session":"Сессия","queue.title":"Поставить в очередь идущей сессии","reasoning.default":"По умолчанию (модель)","reasoning.high":"Высокое (глубокие рассуждения)","reasoning.label":"Глубина рассуждений","reasoning.low":"Низкая (быстро / экономно)","reasoning.medium":"Средняя (сбалансировано)","replyInstruction":"Постоянная приписка к первому сообщению — например язык ответа. Пусто — ничего не добавляется.","report.artifacts":"Артефакты","report.changedFiles":"Изменённые файлы","report.checksRun":"Проверки и тесты","report.risks":"Риски и примечания","report.summary":"Сводка","report.title":"Отчёт о выполнении","revive.fresh":"Предыдущая сессия завершена, поэтому запущена новая; старый чат больше недоступен.","revive.same":"Предыдущая сессия восстановлена — чат на том месте, где вы остановились.","save":"Сохранить","section.label":"Канбан","settings.autoArchive":"Автоархивация завершённых задач","settings.autoArchiveHint":"Перемещать завершённые задачи в архив через указанное число дней","settings.boardName":"Название доски","settings.columns":"Колонки доски","settings.description":"Описание канбан-доски","settings.general":"Основные настройки","settings.integrations":"Интеграции","settings.loading":"Загрузка настроек доски…","settings.readOnly":"Настройки в этой сессии доступны только для чтения.","settings.save":"Сохранить настройки","settings.saveFailed":"Не сохранены поля: {fields}","settings.saved":"Настройки сохранены","settings.saving":"Сохранение настроек…","settings.unavailable":"Хост не знает пространство настроек dsh-kanban. Перезапустите веб-интерфейс после установки плагина.","slash.hint":"Введите / для списка команд и навыков","staleAfterMin":"После скольких минут молчания задача с сессией помечается тревожно. Ноль — не помечать.","startPrompt":"Шаблон первого сообщения агенту. Пусто — встроенный шаблон.","state.queued":"в очереди · {n}","state.running":"в работе","state.stopped":"остановился","status.active":"Активна","status.archived":"В архиве","status.closed":"Закрыта","status.open":"Открыта","stop.idle":"Агент не работал, останавливать было нечего.","stop.no-session":"У задачи нет сессии.","subtitle":"Доска задач: issue из Gitea и отдельная сессия под задачу","sync.failed":"сверка не проходит","sync.lastSeen":"последняя удачная сверка {ago} назад","sync.never":"сверки с Gitea ещё не было","sync.neverSeen":"удачной сверки с запуска харнесса не было","sync.okAgo":"сверено {ago} назад","sync.running":"сверяемся с Gitea…","syncIntervalSec":"Как часто сверяться с Gitea, в секундах. Ноль — не сверяться.","task.confirmPermission":"Подтвердить права","task.cron":"Расписание Cron","task.nextRun":"Следующий запуск: {date}","task.noRuns":"Запусков ещё не было","task.permissionConfirmed":"Права подтверждены","task.permissionGateWarning":"Требуется подтверждение повышенных прав ({permission})","task.progressDump":"Дамп прогресса (Handover)","task.runs":"История выполнений","template.bugfix":"Исправление бага (Bugfix)","template.feature":"Новая функция (Feature)","template.label":"Шаблон задачи","template.none":"Без шаблона (пусто)","template.refactor":"Рефакторинг (Refactor)","template.release":"Релиз (Подготовка выпуска)","template.security":"Безопасность (Аудит и CVE)","time.day":"{n} дн","time.hour":"{n} ч","time.min":"{n} мин","time.now":"только что","title":"Канбан","view.analytics":"Аналитика","view.archive":"Архив","view.board":"Доска","view.calendar":"Календарь","view.gantt":"Диаграмма Ганта","view.list":"Список","view.table":"Таблица","watchRepos":"Сузить подхват до этих репозиториев, через запятую. Пусто — все репозитории организации, где есть открытые задачи.","wipInProgress":"Предел числа карточек в колонке «В работе». Ноль — без предела.","wipReview":"Предел числа карточек в колонке «Ревью». Ноль — без предела."}}
1
+ {"dsh-kanban":{"DEFAULT_BOARDS.main.title":"Проектная доска","DEFAULT_BOARDS.simple.title":"Простая доска","acceptance.accept":"Принять (Выполнено)","acceptance.acceptAndMerge":"Принять и смержить ветку","acceptance.merging":"Выполняется слияние ветки…","acceptance.reject":"Вернуть на доработку","acceptance.rejectReasonPlaceholder":"Укажите, что необходимо исправить или доработать...","acceptance.rejectSubmit":"Отправить на доработку","acceptance.rejectTitle":"Возврат на доработку","acceptance.rejectedAlert":"Возвращено на доработку: {reason}","acceptance.rejectedBadge":"На доработке","acceptance.title":"Приёмка и проверка задачи","action.exportCsv":"Экспорт доски в CSV","action.resume":"Возобновить выполнение","archive.empty":"В архиве пусто.","archive.hint":"Карточки, отстоявшие свой срок в «Выполнено». Ничего не удалено: возвращённая карточка встаёт в ту же колонку, откуда ушла.","archive.restore":"Вернуть на доску","archive.since":"в архиве {ago}","archiveAfterDays":"Через сколько дней в колонке «Выполнено» карточка уходит в архив. Ноль — не убирать.","batch.hint":"Одна сессия на все. Задачи приходят по очереди: агент берёт следующую, закончив текущую. В «В работе» уезжает только первая — остальные ждут своей очереди там, где лежат.","batch.start":"Запустить","batch.title":"Запустить {n} задач в одном чате","board.allRepos":"Все репозитории","board.archive":"Архив","board.back":"В чат","board.backHint":"Закрыть доску и вернуться в разговор","board.clearFilters":"Снять отборы","board.collapse":"Свернуть колонку","board.empty":"Задач пока нет.","board.expand":"Развернуть колонку","board.export":"Скачать","board.exportHint":"Экспортировать всю доску в файл JSON","board.import":"Импорт","board.imported":"Импортировано {n} задач","board.limit":"предел {n}","board.loading":"Доска загружается…","board.metrics":"Метрики","board.mine":"Мои: {n}","board.mineHint":"Задачи, назначенные на {who}","board.newTask":"Задача","board.noMatch":"Ничего не найдено.","board.noRepo":"без проекта","board.overdueCount":"Просрочено: {n}","board.overdueHint":"Показать только просроченные задачи","board.pickArchive":"В архив","board.pickMove":"Перенести…","board.pickNone":"Снять выбор","board.pickStart":"Запустить выбранные","board.pickUnqueue":"Снять с очереди","board.pickedCount":"выбрано {n}","board.refresh":"Обновить","board.repo":"репозиторий","board.search":"Поиск","board.shown":"показано {shown} из {total}","board.someFailed":"Сделано у {done} из {total}, остальные отказали.","board.sync":"Сверить с Gitea","board.syncing":"Сверяю…","board.waitCount":"Ждут ответа: {n}","board.waitCountHint":"Задачи, где агент задал вопрос или просит разрешения.","board.waiting":"нужен человек","boardName.main":"Проектная доска","boardName.simple":"Простая доска","boardToolEnabled":"Разрешить агенту двигать карточки инструментом board_move.","card.assigneeHint":"Кто взял задачу","card.attach":"Прикрепить файл","card.checklist":"Чеклист","card.comments":"Комментарии","card.created":"Создано {date}","card.deadline":"Срок выполнения","card.deleteConfirm":"Удалить эту карточку?","card.description":"Описание задачи","card.due":"срок {date}","card.dueDate":"Крайний срок","card.edit":"Редактировать","card.labels":"Метки","card.move":"Переместить в колонку","card.pack":"пачка {at} из {total}","card.packHint":"Запущены вместе, одной сессией; агент берёт их в этом порядке.","card.pick":"Отметить для группового запуска","card.priority":"Приоритет","card.progress":"Прогресс","card.queue":"в очередь...","card.revive":"Восстановить","card.stop":"остановить","card.tags":"Теги","card.title":"Название карточки","card.toChat":"перейти в чат","card.unqueue":"снять с очереди","checklist.add":"Добавить","checklist.empty":"Критерии готовности ещё не настроены.","checklist.evidence":"Подтверждение: {text}","checklist.placeholder":"Новый критерий готовности...","checklist.progress":"DoD: {done} из {total}","checklist.required":"Обязательно","checklist.title":"Критерии готовности (DoD)","chip.moveTo":"Перенести в","chip.note":"Оставить заметку","chip.noteHint":"Заметка дописывается в тело задачи. Тело уходит агенту первым сообщением, поэтому заметка до запуска попадёт в работу, а после запуска — нет.","chip.noteSave":"Дописать","chip.openCard":"Перейти к карточке","column.addCard":"+ Добавить карточку","column.backlog":"Бэклог","column.cleanup":"Уборка","column.clear":"Очистить колонку","column.collapse":"Свернуть колонку","column.delete":"Удалить колонку","column.deploy":"Выкатка","column.done":"Выполнено","column.empty":"В этой колонке нет задач","column.expand":"Развернуть колонку","column.in-progress":"В работе","column.limit":"Лимит WIP: {n}","column.rename":"Переименовать колонку","column.review":"Ревью","column.title":"Название колонки","columnNames":"Свои названия колонок парами «идентификатор=Название» через запятую. Пусто — обычные названия.","comments.add":"Опубликовать комментарий","comments.authorAgent":"Агент","comments.authorUser":"Пользователь","comments.empty":"Комментариев пока нет.","comments.placeholder":"Добавьте заметку или отзыв...","comments.title":"Обсуждение и комментарии","console.empty":"Вывод агента пока не записан.","console.tab":"Живая консоль","defaultProjectRoot":"Корень, в котором лежат рабочие копии проектов. Пусто — рабочая папка харнесса.","dialog.archived":"архив","dialog.bodyHint":"Уйдёт агенту первым сообщением при запуске задачи.","dialog.cancel":"Отмена","dialog.create":"Создать","dialog.fromGitea":"Из Gitea","dialog.imported":"уже на доске","dialog.kind":"Какая это задача","dialog.kindPlain":"Не проект","dialog.kindPlainHint":"Заметка, не относящаяся ни к какому репозиторию. Живёт на простой доске и в Gitea не попадает.","dialog.kindProject":"Проект","dialog.kindProjectHint":"В Gitea заводится issue, карточка привязывается к нему и живёт на проектной доске.","dialog.labelsHint":"через запятую","dialog.loadingRepos":"Репозитории загружаются…","dialog.noIssues":"Открытых issue не найдено.","dialog.noRepos":"Репозиториев нет","dialog.own":"Своя задача","dialog.pickRepo":"Выберите репозиторий","dialog.repo":"Репозиторий","dialog.repoNamePlaceholder":"имя нового репозитория, латиницей","dialog.repoNew":"— новый репозиторий —","dialog.repoNewHint":"Будет создан в организации: приватный и пустой, без README и заготовок. Создание репозитория отсюда не отменить.","dialog.taskBody":"Описание","dialog.taskColumn":"Колонка","dialog.taskLabels":"Метки","dialog.taskTitle":"Заголовок","dialog.title":"Новая задача","diff.additions":"Добавлено","diff.author":"Автор","diff.branch":"Ветка: {name}","diff.cherryPick":"Перенести коммит (Cherry-pick)","diff.commits":"Коммиты задачи ({n})","diff.date":"Дата","diff.deletions":"Удалено","diff.empty":"Нет коммитов или изменений файлов для этой задачи.","diff.filesChanged":"Изменено файлов: {n}","diff.hash":"Хеш","diff.hide":"Скрыть просмотр diff","diff.loadFailed":"Не удалось загрузить изменения: {error}","diff.loading":"Загрузка коммитов и diff…","diff.mergeConflict":"Обнаружены конфликты слияния","diff.mergeFailed":"Сбой слияния ветки: {error}","diff.mergeSuccess":"Ветка успешно смержена в основную","diff.message":"Сообщение коммита","diff.resolveConflicts":"Разрешить конфликты","diff.revert":"Откатить коммит","diff.show":"Показать просмотр diff","diff.staged":"Подготовленные изменения","diff.title":"Изменения в ветке задачи","diff.truncated":"Дифф обрезан (превышен лимит)","diff.uncommitted":"Незакоммиченные изменения","diff.view":"Просмотр изменений","discard":"Отменить","epic.addSubtask":"Добавить подзадачу","epic.badge":"Эпик","epic.createGiteaIssues":"Также создать связанные задачи в Gitea","epic.noSubtasks":"Подзадач пока нет.","epic.progress":"Подзадач: {done}/{total}","epic.subtasks":"Подзадачи","epic.triage":"Декомпозировать","epic.triageHelp":"Введите по одному названию подзадачи в строке. Дочерние задачи будут привязаны к этому эпику.","epic.triageSubmit":"Создать подзадачи","epic.triageTitle":"Декомпозиция задачи на подзадачи","error.bad-repo-name":"В имени репозитория допустимы только латинские буквы, цифры, точка, дефис и подчёркивание.","error.badImport":"Неверный формат файла импорта","error.crossSite":"Запрос отклонён как межсайтовый.","error.gitea-unreachable":"Сервер Gitea недоступен","error.giteaAbsent":"Плагин Gitea не установлен, импорт недоступен.","error.giteaUnconfigured":"Сначала настройте Gitea в карточке плагина Gitea.","error.issue-not-created":"Issue не заведён. Если репозиторий был новым, он остался — ничего не удалено.","error.issueNotFound":"Issue не найден.","error.modelNotSelected":"Модель не выбрана — задайте её в настройках или укажите здесь.","error.no-live-sessions":"Нет ни одной идущей сессии, в очередь ставить некуда.","error.permission-refused":"Уровень доступа не принят, задача не запущена.","error.permission-unavailable":"В этой сборке уровней доступа нет — задача не запущена, чтобы не пойти с бо́льшими правами, чем просили.","error.repo-not-created":"Репозиторий не создан; больше ничего не сделано.","error.repo-required":"Выберите репозиторий или назовите новый.","error.session-not-live":"Эта сессия больше не идёт.","error.sessionNotOpened":"Сессия поднята ({id}), но эта сборка не умеет в неё переключиться. Найдите её в списке сессий.","error.startFailed":"Не удалось поднять сессию.","error.task-not-queued":"Задача не стоит в очереди.","error.taskHasNoIssue":"За этой задачей нет issue в Gitea.","error.taskNotFound":"Задача не найдена.","error.titleRequired":"Нужен заголовок.","error.unknown":"Запрос не выполнен.","facet.assignee":"Исполнитель","facet.author":"Автор","facet.priority":"Приоритет","facet.release":"Выпуск","facet.repo":"Репозиторий","facet.risk":"Риск","facet.scope":"Область","facet.signal":"Сигнал","facet.status":"Статус","facet.type":"Тип","field.announceToAgent":"Уведомлять агента об изменениях","field.archiveAfterDays":"Убирать в архив из «Выполнено» через, дней","field.autoSyncSessions":"Автосинхронизация внешних сессий чата","field.boardToolEnabled":"Разрешить агенту двигать карточки","field.columnNames":"Свои названия колонок","field.cronEnabled":"Включить планировщик задач","field.defaultProjectRoot":"Корень проектов","field.giteaOwner":"Организация Gitea","field.giteaTokenRef":"Имя учётной записи","field.giteaUrl":"Адрес инстанса","field.maxConcurrentSessions":"Макс. параллельных сессий агентов","field.permissionGateEnabled":"Контроль прав доступа к доске","field.preventIdleSleep":"Предотвращать засыпание при активных задачах","field.progressDumpEnabled":"Дамп прогресса выполнения","field.pushToGitea":"Закрывать issue в Gitea","field.replyInstruction":"Постоянная приписка","field.sessionDefaultPermission":"Права доступа сессии по умолчанию","field.staleAfterMin":"Считать задачу молчащей после, минут","field.startPrompt":"Шаблон первого сообщения","field.syncIntervalSec":"Сверяться с Gitea раз в, секунд","field.watchRepos":"Сузить подхват до репозиториев","field.webhookSecretRef":"Имя учётной записи для вебхука","field.wipInProgress":"Предел «В работе»","field.wipReview":"Предел «Ревью»","field.workspaceClaimBoundaries":"Границы захвата рабочей области","field.worktreeIsolation":"Изоляция рабочих деревьев (worktree)","field.worktreeRoot":"Корневой каталог worktree","filter.active":"Активные","filter.all":"Все задачи","filter.assignee":"Исполнитель","filter.epics":"Эпики","filter.label":"Метка","filter.overdue":"Просроченные","filter.priority":"Приоритет","filter.review":"На проверке","filter.search":"Поиск задач…","filter.stale":"Без активности","giteaOwner":"Организация Gitea, чьи репозитории смотрит доска. Пусто — определяется сама, если организация одна.","giteaTokenRef":"ИМЯ учётной записи DSH, в которой лежит токен. Сам токен сюда не вводить.","giteaUrl":"Адрес инстанса Gitea или Forgejo, например https://gitea.example.com. Пусто — импорт недоступен.","group.assignee":"По исполнителям","group.general":"Общее","group.gitea":"Gitea","group.limits":"Пределы колонок","group.nobody":"Без исполнителя","group.repo":"По репозиториям","group.sync":"Автоперемещение","hint.announceToAgent":"Автоматически отправлять агенту сообщения о перемещении карточек","hint.archiveAfterDays":"Считается с попадания карточки в «Выполнено». Ноль — оставлять всё на доске.","hint.autoSyncSessions":"Автоматически создавать карточки на доске для стандартных диалогов чата DSH.","hint.boardToolEnabled":"Выключено, пока скилл воркфлоу запрещает этому CLI трогать канбан.","hint.columnNames":"Пары «идентификатор=Название» через запятую, например «backlog=Идеи, review=Проверка». Пусто — обычные названия.","hint.cronEnabled":"Запуск фоновых периодических проверок статусов задач","hint.defaultProjectRoot":"Где лежат рабочие копии проектов. Пусто — рабочая папка харнесса.","hint.giteaOwner":"Чьи репозитории смотрит доска. Пусто — определится сама, пока у токена ровно одна организация.","hint.giteaTokenRef":"ИМЯ учётной записи DSH, в которой лежит токен. Сам токен сюда не вводить.","hint.giteaUrl":"Например https://gitea.example.com. Пусто — импорт недоступен.","hint.label":"Пусто — метка для этой колонки не ставится.","hint.limit":"Ноль — без предела. Превышение подсвечивается, но не запрещается.","hint.permissionGateEnabled":"Требовать подтверждения при выполнении деструктивных операций","hint.preventIdleSleep":"Не усыплять фоновый процесс DSH, пока есть незавершённые задачи","hint.progressDumpEnabled":"Периодически сохранять прогресс выполнения в файл progress.md","hint.pushToGitea":"Карточка, дошедшая до «Выполнено», закрывает свой issue. Меток доска не ставит: стадия и так видна по ветке и pull request.","hint.replyInstruction":"Дописывается к каждому первому сообщению — например язык ответа. Пусто — ничего не добавляется.","hint.sessionDefaultPermission":"Уровень прав, выдаваемый сессиям без явных настроек","hint.staleAfterMin":"Помечаются только задачи с сессией. Ноль отключает отметку.","hint.startPrompt":"Шаблон первого сообщения агенту. Пусто — встроенный шаблон.","hint.syncIntervalSec":"Ноль отключает сверку. Меньше пятнадцати секунд поднимается до пятнадцати.","hint.watchRepos":"Через запятую, «владелец/репо» или просто «репо». Пусто — все репозитории организации, где есть открытые задачи.","hint.webhookSecretRef":"ИМЯ учётной записи DSH с секретом вебхука Gitea. Пусто — остаётся только опрос.","hint.worktreeIsolation":"Создавать отдельный git worktree для каждой задачи","hint.worktreeRoot":"Каталог, в котором создаются временные изолированные worktree","import.error":"Ошибка импорта JSON доски","import.success":"Доска успешно импортирована","label.assigned":"Назначено","label.blocked":"Заблокировано","label.completed":"Выполнено","label.inProgress":"В работе","label.pending":"В очереди","label.review":"На проверке","metrics.columns":"Время в колонках","metrics.completed":"Завершено задач: {n}","metrics.cycleTime":"Среднее время выполнения: {days} дн.","metrics.empty":"Переходов ещё не было — измерять нечего.","metrics.hint":"{n} задач на доске • выполнено за неделю: {week} • за месяц: {month}","metrics.leadTime":"Общее время от создания: {days} дн.","metrics.leadTimeAvg":"Средний Lead Time","metrics.mean":"среднее {time}","metrics.median":"медиана {time}","metrics.noStale":"Ни одна задача не задерживалась так долго.","metrics.stale":"Без движения дольше {days} дн.","metrics.throughput":"Пропускная способность","metrics.total":"Всего задач: {n}","metrics.wip":"Задач в работе (WIP): {n}","metrics.wipLimit":"Лимит задач в работе (WIP)","modal.confirmDelete":"Подтверждение удаления","modal.createTask":"Создание новой задачи","modal.editTask":"Редактирование задачи","move.backlog":"Работа по задаче останавливается: идущий ход агента будет прерван. Если сессии нет, карточка просто переедет.","move.cleanup":"Агент удалит ветку в Gitea, worktree и локальную ветку и запишет это в issue.","move.confirm":"Перенести","move.deploy":"Агент вольёт pull request и выкатит. Сам перенос в эту колонку И ЕСТЬ ваше «ок» на deploy — второй раз агент спрашивать не станет.","move.done":"Задача считается завершённой. Это решение человека: сам агент карточку сюда не переносит.","move.in-progress":"Агент получит команду начать или продолжить реализацию.","move.review":"Агент доведёт работу до ревью: снимет с pull request пометку черновика и запросит проверку.","move.title":"Перенести в «{column}»?","nav.all":"Все доски","nav.back":"Назад к доске","nav.settings":"Настройки доски","order.manual":"Как разложено","order.new":"Сначала новые","order.old":"Сначала старые","panel.agentPreset":"Профиль агента","panel.archive":"В архив","panel.assignDrop":"Отказаться","panel.assignMe":"Взять себе","panel.assignee":"взял {who}","panel.author":"завёл {who}","panel.bodyLoading":"читаю описание…","panel.cleanupWorktree":"Очистить worktree","panel.close":"Закрыть","panel.continue":"Продолжить","panel.continueHint":"У задачи один чат: открывается прежняя сессия, а не новая.","panel.created":"заведена {ago} назад","panel.delete":"Удалить","panel.deleteConfirm":"Удалить «{title}»? Отменить будет нельзя.","panel.due":"Срок","panel.issue":"Issue","panel.labels":"Метки","panel.log":"Переходы","panel.message":"Сообщение агенту","panel.messageHint":"Правьте перед отправкой. Пустое — уйдёт встроенный текст.","panel.model":"Модель","panel.noLog":"Переходов пока нет.","panel.noModels":"У этого провайдера нет моделей","panel.noProviders":"Провайдеров нет","panel.openChat":"Открыть чат","panel.permission":"Уровень доступа","panel.pickModel":"Выберите модель","panel.pickProvider":"Выберите провайдера","panel.pickProviderFirst":"Сначала выберите провайдера","panel.presetDefault":"Как в харнессе по умолчанию","panel.priority":"Приоритет","panel.priorityNone":"Без приоритета","panel.provider":"Провайдер","panel.refresh":"Обновить из Gitea","panel.saveEdit":"Сохранить","panel.start":"Начать","panel.startHint":"Откроется отдельная сессия агента по этой задаче. Ветку и worktree заводит агент после preflight, а не отсюда.","panel.starting":"Запускается…","panel.updated":"последнее изменение {ago} назад","panel.workDir":"Рабочая папка: {path}","panel.workDirHint":"Корень проекта не указан в настройках, поэтому используется эта папка.","panel.worktree":"Worktree: {path}","panel.worktreeDirty":"Незакоммиченные изменения в worktree: {files}","plan.counter":"{done} из {total}","plan.title":"План агента","pr.create":"Создать PR в Gitea","pr.created":"PR #{n} создан","pr.creating":"Создание PR…","pr.view":"Открыть PR","priority.high":"Высокий","priority.highest":"Критический","priority.low":"Низкий","priority.lowest":"Минимальный","priority.medium":"Средний","priority.normal":"Обычный","priority.urgent":"Срочный","queue.add":"В очередь","queue.hint":"Задача встанет в очередь сессии: агент возьмёт её, закончив текущую работу. До этого карточка остаётся там, где лежит.","queue.option":"{title} - задач: {n}","queue.session":"Сессия","queue.title":"Поставить в очередь идущей сессии","reasoning.default":"По умолчанию (модель)","reasoning.high":"Высокое (глубокие рассуждения)","reasoning.label":"Глубина рассуждений","reasoning.low":"Низкая (быстро / экономно)","reasoning.medium":"Средняя (сбалансировано)","replyInstruction":"Постоянная приписка к первому сообщению — например язык ответа. Пусто — ничего не добавляется.","report.artifacts":"Артефакты","report.changedFiles":"Изменённые файлы","report.checksRun":"Проверки и тесты","report.risks":"Риски и примечания","report.summary":"Сводка","report.title":"Отчёт о выполнении","revive.fresh":"Предыдущая сессия завершена, поэтому запущена новая; старый чат больше недоступен.","revive.same":"Предыдущая сессия восстановлена — чат на том месте, где вы остановились.","save":"Сохранить","section.label":"Канбан","settings.autoArchive":"Автоархивация завершённых задач","settings.autoArchiveHint":"Перемещать завершённые задачи в архив через указанное число дней","settings.boardName":"Название доски","settings.columns":"Колонки доски","settings.description":"Описание канбан-доски","settings.general":"Основные настройки","settings.integrations":"Интеграции","settings.loading":"Загрузка настроек доски…","settings.readOnly":"Настройки в этой сессии доступны только для чтения.","settings.save":"Сохранить настройки","settings.saveFailed":"Не сохранены поля: {fields}","settings.saved":"Настройки сохранены","settings.saving":"Сохранение настроек…","settings.subtitle":"Канбан-доска для сессий и задач","settings.unavailable":"Хост не знает пространство настроек dsh-kanban. Перезапустите веб-интерфейс после установки плагина.","slash.hint":"Введите / для списка команд и навыков","staleAfterMin":"После скольких минут молчания задача с сессией помечается тревожно. Ноль — не помечать.","startPrompt":"Шаблон первого сообщения агенту. Пусто — встроенный шаблон.","state.queued":"в очереди · {n}","state.running":"в работе","state.stopped":"остановился","status.active":"Активна","status.archived":"В архиве","status.closed":"Закрыта","status.open":"Открыта","stop.idle":"Агент не работал, останавливать было нечего.","stop.no-session":"У задачи нет сессии.","subtitle":"Доска задач: issue из Gitea и отдельная сессия под задачу","sync.failed":"сверка не проходит","sync.lastSeen":"последняя удачная сверка {ago} назад","sync.never":"сверки с Gitea ещё не было","sync.neverSeen":"удачной сверки с запуска харнесса не было","sync.okAgo":"сверено {ago} назад","sync.running":"сверяемся с Gitea…","syncIntervalSec":"Как часто сверяться с Gitea, в секундах. Ноль — не сверяться.","task.confirmPermission":"Подтвердить права","task.cron":"Расписание Cron","task.nextRun":"Следующий запуск: {date}","task.noRuns":"Запусков ещё не было","task.permissionConfirmed":"Права подтверждены","task.permissionGateWarning":"Требуется подтверждение повышенных прав ({permission})","task.progressDump":"Дамп прогресса (Handover)","task.runs":"История выполнений","template.bugfix":"Исправление бага (Bugfix)","template.feature":"Новая функция (Feature)","template.label":"Шаблон задачи","template.none":"Без шаблона (пусто)","template.refactor":"Рефакторинг (Refactor)","template.release":"Релиз (Подготовка выпуска)","template.security":"Безопасность (Аудит и CVE)","time.day":"{n} дн","time.hour":"{n} ч","time.min":"{n} мин","time.now":"только что","title":"Канбан","updater.check":"Проверить обновления","updater.checking":"Проверка…","updater.current":"Текущая версия","updater.failed":"Ошибка проверки обновлений: ","updater.latest":"Последняя версия","updater.success":"Плагин успешно обновлен! Пожалуйста, перезапустите сервис DSH.","updater.title":"Обновления плагина","updater.upToDate":"Актуальная версия","updater.updateNow":"Обновить до v{version}","updater.updating":"Обновление…","view.analytics":"Аналитика","view.archive":"Архив","view.board":"Доска","view.calendar":"Календарь","view.gantt":"Диаграмма Ганта","view.list":"Список","view.table":"Таблица","watchRepos":"Сузить подхват до этих репозиториев, через запятую. Пусто — все репозитории организации, где есть открытые задачи.","wipInProgress":"Предел числа карточек в колонке «В работе». Ноль — без предела.","wipReview":"Предел числа карточек в колонке «Ревью». Ноль — без предела."}}