release: ship v1.5.0 with on-device writing suggestions
Some checks failed
deploy-site / deploy (push) Failing after 33s
portable-unsigned / portable-windows (push) Failing after 4m7s
release / release-windows (push) Failing after 3m16s

Adds next-sentence suggestions while typing, weekly input insights and a
personal phrase memory to the desktop app, and fixes custom instructions so
they process the text instead of inserting the instruction's own wording.
Local model requests are now bounded and individually cancellable.

Bumps the product version to 1.5.0 (Android/iOS build 1050000), refreshes the
landing and web download links, and records the new INPUT feature rows and the
open verification gaps in the infrastructure map.
This commit is contained in:
Yun Chan 2026-09-23 16:04:27 +09:00
parent 99f06c253c
commit 5c11ee2fde
104 changed files with 14410 additions and 174 deletions

View file

@ -325,5 +325,192 @@
"keybinding.ui.recordHint": "Введите сочетание клавиш (например: Ctrl+Shift+Q) или одну клавишу (например: F5)",
"keybinding.ui.recordAgain": "Ввести снова",
"keybinding.ui.saveFailed": "Не удалось сохранить сочетание клавиш",
"keybinding.ui.globalEnabled": "Использовать глобальные горячие клавиши"
"keybinding.ui.globalEnabled": "Использовать глобальные горячие клавиши",
"input.tab": "Ввод",
"input.consent.title": "Сбор данных о вводе",
"input.consent.description": "Необязательно. Мы считаем нажатия клавиш и щелчки и измеряем путь мыши, чтобы показать ваши привычки ввода. Какие именно клавиши вы нажимаете, не сохраняется.",
"input.consent.collect": "Собирать статистику клавиатуры и мыши",
"input.consent.running": "Идёт сбор.",
"input.consent.stopped": "Сбор отключён. Ничего не записывается.",
"input.consent.pause": "Приостановить сбор",
"input.consent.learnText": "Изучать текст, который я набираю",
"input.consent.learnTextHint": "Читает активное поле ввода, чтобы изучить ваши формулировки. Поля паролей всегда пропускаются.",
"input.consent.excludedApps": "Исключённые приложения",
"input.consent.excludedAppsPlaceholder": "keepassxc.exe, 1password.exe",
"input.consent.excludedAppsHint": "Имена исполняемых файлов через запятую. В этих приложениях ничего не читается и не считается.",
"input.consent.clearAll": "Удалить собранные данные",
"input.suggestion.title": "Подсказки следующего предложения",
"input.suggestion.description": "Предсказывает предложение, которое вы собираетесь написать, и показывает его рядом с курсором. Примите, чтобы вставить.",
"input.suggestion.enabled": "Показывать подсказки при вводе",
"input.suggestion.modelReady": "Локальная модель готова.",
"input.suggestion.modelMissing": "Локальная модель не запущена — подсказки отключены.",
"input.suggestion.delay": "Задержка (мс)",
"input.suggestion.minPrefix": "Минимум символов",
"input.suggestion.modelDefault": "Использовать модель по умолчанию",
"input.suggestion.overlayInteractive": "Разрешить клик по окну подсказки",
"input.suggestion.overlayVisible": "Подсказка на экране",
"input.suggestion.keyHint": "Принять, переключить и закрыть — глобальные сочетания клавиш; измените их в Настройки > Сочетания.",
"input.suggestion.requestNow": "Подсказать сейчас",
"input.suggestion.usage": "Сегодня использовано {{requests}} из {{budget}} запросов",
"input.suggestion.lastSkip": "Последняя причина пропуска: {{reason}}",
"input.insights.title": "Последние {{days}} дней",
"input.insights.keystrokes": "Нажатия",
"input.insights.clicks": "Щелчки",
"input.insights.words": "Набрано слов",
"input.insights.sentences": "Предложения",
"input.insights.mouseDistance": "Путь мыши",
"input.insights.perDayMeters": " м/день",
"input.insights.phrases": "Личные фразы",
"input.insights.empty": "Активность пока не собрана.",
"input.insights.topApps": "Где вы печатаете больше всего",
"input.insights.appRow": "{{keystrokes}} клавиш · {{clicks}} щелчков",
"input.insights.privacyNote": "На этом устройстве хранятся только счётчики и расстояния. Содержимое нажатий никогда не сохраняется.",
"input.phrases.title": "Личные фразы",
"input.phrases.description": "Фразы, изученные из вашего набора текста и диктовки, используются для подстройки под стиль.",
"input.phrases.empty": "Пока ничего не изучено.",
"input.phrases.delete": "Удалить фразу",
"input.feedback.excludedSaved": "Исключения сохранены.",
"input.feedback.cleared": "Собранные данные удалены.",
"popup.suggestion.hintAccept": "Принять",
"popup.suggestion.hintNext": "Далее",
"popup.suggestion.hintDismiss": "Закрыть",
"popup.suggestion.loading": "Генерация…",
"keybinding.ui.sectionInput": "Подсказки ввода",
"keybinding.action.suggestionAccept": "Принять подсказку",
"keybinding.action.suggestionAccept.desc": "Вставляет предложенную фразу в активное приложение.",
"keybinding.action.suggestionNext": "Следующая подсказка",
"keybinding.action.suggestionNext.desc": "Переходит к следующему варианту.",
"keybinding.action.suggestionDismiss": "Закрыть подсказку",
"keybinding.action.suggestionDismiss.desc": "Скрывает текущую подсказку.",
"input.suggestion.timeout": "Лимит ответа (мс)",
"input.suggestion.latency": "Последний ответ: {{ms}} мс",
"input.suggestion.slowWarning": "Медленнее набора — попробуйте меньшую модель.",
"input.diagnostics.title": "Диагностика",
"input.diagnostics.app": "Активное приложение: {{app}}",
"input.diagnostics.unknownApp": "(неизвестно)",
"input.diagnostics.noSnapshot": "Поле ещё не прочитано — щёлкните по текстовому полю и наберите текст.",
"input.diagnostics.readable": "Поле читается ({{source}}, {{length}} символов) — подсказки возможны.",
"input.diagnostics.notReadable": "Приложение не отдаёт текст поля — прочитать нельзя, подсказка не создаётся.",
"input.diagnostics.password": "Поле пароля — чтение блокируется по замыслу.",
"input.diagnostics.caretFallback": "Позиция курсора недоступна; используется конец документа.",
"input.diagnostics.composing": "Идёт композиция IME — подсказка появится чуть позже.",
"input.suggestion.onScreenLabel": "Состояние оверлея",
"input.suggestion.onScreen": "На экране",
"input.suggestion.offScreen": "Скрыт",
"input.suggestion.generating": "Генерация…",
"input.kbView.knowledge": "База знаний",
"input.kbView.insights": "Аналитика ввода",
"input.insights.tabs.overview": "Обзор",
"input.insights.tabs.keyboard": "Клавиатура",
"input.insights.tabs.mouse": "Мышь",
"input.insights.tabs.apps": "Приложения",
"input.insights.tabs.phrases": "Фразы · подсказки",
"input.insights.chars": "Введено символов",
"input.insights.wordChars": "Символы",
"input.insights.backspaces": "Удаления",
"input.insights.shortcuts": "Горячие клавиши",
"input.insights.doubleClicks": "Двойные клики",
"input.insights.scrollTicks": "Прокрутка",
"input.insights.activeMinutes": "Активное время",
"input.insights.activeDays": "Дней записано",
"input.insights.streak": "Макс. серия",
"input.insights.peakDay": "Самый активный день",
"input.insights.perDayAverage": "В среднем за день",
"input.insights.mouseDistanceTotal": "Общий путь мыши",
"input.insights.hourlyTitle": "По часам (0-23)",
"input.insights.dailyTitle": "Динамика по дням",
"input.insights.wordsDailyTitle": "Слов в день",
"input.insights.distanceDailyTitle": "Путь мыши за день",
"input.insights.topHoursHint": "Busiest hours: {{hours}}",
"input.insights.mouseNote": "Mouse travel is the sum of per-axis absolute deltas (Manhattan), the same measure ActivityWatch uses.",
"input.insights.appsHint": "Top apps by typing volume. The bar is that app’s share of all keystrokes.",
"input.insights.suggestions": "Подсказки",
"input.insights.suggestionsTotal": "Создано",
"input.insights.suggestionsAccepted": "Принято",
"input.insights.acceptRate": "Доля принятых",
"input.insights.avgLatency": "Средний отклик",
"input.insights.suggestionHistory": "Последние подсказки",
"input.insights.accepted": "принята",
"input.insights.notAccepted": "не принята",
"input.insights.noSuggestions": "No suggestions recorded yet.",
"input.insights.samplesNote": "{{count}} learned samples.",
"input.insights.collectedAt": "Last capture {{at}}",
"input.insights.rangeLabel": "Период",
"input.insights.rangeDays": "{{days}} дн.",
"input.insights.headerSummary": "Last {{days}} days · {{keys}} keystrokes · {{apps}} apps",
"input.insights.disabledHint": "Input collection is off. Turn it on in Settings > Input and statistics will collect here.",
"input.insights.statsMovedHint": "Подробная статистика: База знаний > Аналитика ввода.",
"input.chart.max": "макс. {{value}}",
"input.chart.noData": "Данных пока нет.",
"input.unit.perDay": "/день",
"input.unit.perDayMeters": "м/день",
"input.unit.meters": "м",
"input.unit.ms": "мс",
"input.unit.percent": "%",
"popup.suggestion.warming": "Подготовка модели…",
"popup.suggestion.hintGenerating": "Генерация…",
"keybinding.action.suggestionPrev": "Предыдущая подсказка",
"keybinding.action.suggestionPrev.desc": "Перейти к предыдущему варианту.",
"input.insights.tabs.graph": "Граф",
"input.graph.description": "Your sentences are stored as nodes and their relations as edges (what follows what, which share terms) so suggestions can pull personal context. Local only.",
"input.graph.nodes": "Узлы-предложения",
"input.graph.followsEdges": "Связи «продолжение»",
"input.graph.sharesEdges": "Связи по терминам",
"input.graph.topEdges": "Сильнейшие связи",
"input.graph.recentNodes": "Недавние узлы",
"input.graph.searchLabel": "Поиск предложения",
"input.graph.searchPlaceholder": "e.g. meeting schedule",
"input.graph.searchAction": "Найти",
"input.graph.neighbors": "Связанные предложения",
"input.graph.empty": "The graph is empty. Enable \"Learn the text I type\" in Settings > Input and it fills up.",
"input.graph.kindFollows": "продолжение",
"input.graph.kindShares": "общие термины",
"popup.suggestion.generating": "Генерация… ({{seconds}} с)",
"keybinding.ui.auditClear": "Нет конфликтов или недопустимых сочетаний клавиш.",
"keybinding.ui.auditIssues": "Проблем с сочетаниями: {{count}}",
"keybinding.ui.auditInvalid": "{{action}}: {{reason}}",
"keybinding.ui.auditConflict": "{{action}} конфликтует с {{conflicts}}",
"keybinding.ui.auditUnknown": "Неизвестная проблема",
"input.flow.title": "Вероятные часы концентрации",
"input.flow.empty": "Пока недостаточно почасовых данных ввода.",
"input.flow.hour": "{{hour}}:00",
"input.flow.window": "Оценка {{score}} · {{minutes}} активных мин/день · {{friction}}% правок",
"input.friction.title": "Трение редактирования",
"input.friction.value": "{{count}} на 100 символов",
"input.friction.band.steady": "Стабильно",
"input.friction.band.watch": "Наблюдать",
"input.friction.band.high": "Высокое",
"input.appQuality.title": "Качество подсказок по приложениям",
"input.appQuality.empty": "Пока нет истории подсказок по приложениям.",
"input.appQuality.row": "Принято {{accepted}}/{{total}} · {{rate}}% · {{latency}} мс",
"input.phrases.metadata": "{{source}} · {{count}}× · {{app}}",
"input.phrases.appUnknown": "Общее",
"input.privacy.title": "Квитанция локальных данных",
"input.privacy.localOnly": "Эти данные остаются на этом устройстве.",
"input.privacy.rawKeys": "Отдельные события и коды клавиш не сохраняются. Образцы изученного введённого текста указаны ниже отдельно.",
"input.privacy.activityRetention": "Хранение активности",
"input.privacy.suggestionRetention": "Хранение подсказок",
"input.privacy.learnedRetention": "Хранение изученного текста",
"input.privacy.activityBuckets": "Блоки активности",
"input.privacy.typingSamples": "Образцы ввода",
"input.privacy.personalPhrases": "Личные фразы",
"input.privacy.suggestions": "Записи подсказок",
"input.privacy.days": "{{days}} дней",
"input.privacy.untilDeleted": "До удаления",
"input.exclusion.recommendation": "В {{app}} было {{samples}} повторных нечитаемых вводов ({{reason}}).",
"input.exclusion.reason.repeated-unreadable": "повторно нечитаемо",
"input.exclusion.reason.repeated-empty": "повторно пусто",
"input.exclusion.addButton": "Добавить {{app}} в исключения",
"input.feedback.recommendationSaved": "{{app}} добавлено в исключения.",
"popup.suggestion.sourceModel": "Локальная модель",
"popup.suggestion.sourceMemory": "Локальная память",
"popup.suggestion.continuations": "продолжения",
"popup.suggestion.related": "связанные",
"popup.suggestion.phrases": "фразы",
"popup.suggestion.appPhrases": "фразы приложения",
"input.privacy.typingSamplesRetention": "Хранение образцов введённого текста",
"input.privacy.unavailable": "Квитанция локальных данных сейчас недоступна. Количества и сроки хранения не показаны.",
"input.feedback.clearFailed": "Не удалось удалить собранные данные.",
"input.feedback.excludedFailed": "Не удалось сохранить исключения.",
"input.feedback.recommendationFailed": "Не удалось добавить {{app}} в исключения."
}