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": "遅延 (ms)",
"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": " m/日",
"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": "応答上限 (ms)",
"input.suggestion.latency": "前回の応答: {{ms}}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": "1日平均",
"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": "m/日",
"input.unit.meters": "m",
"input.unit.ms": "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}} · 1日 {{minutes}}分アクティブ · 編集 {{friction}}%",
"input.friction.title": "編集の摩擦",
"input.friction.value": "100文字あたり {{count}} 回",
"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}}ms",
"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}} を除外に追加できませんでした。"
}