Verity

更新履歴

Verity - cnのバージョン更新履歴。

v3.5.3

2026-11-01最新

インベントリ内ピクセル音楽プレイヤー・アップデート確認・Web 本文読み取り・DeepSeek 検索

新規作成

  • インベントリ左側に縦並びのタブ(インベントリ / 音楽)を追加:インベントリ左上のレシピブックボタンのバニラテクスチャをそのまま使い、パネル左端に沿って縦に並べ、中にはピクセル調のインベントリと音符のアイコンが入ります。音符タブを押すとインベントリ画面がその場でピクセル調のミニプレイヤーに切り替わり(別ウィンドウは開きません)、インベントリタブで元に戻ります。プレイヤーは原寸 1:1 で描画され、インベントリと一緒に拡大縮小します。再生・コメント・歌詞の 3 ページがあり、曲名・アーティスト・アルバムが長いとマーキーで流れ、歌詞は行をクリックするとその行へ移動します。再生中は下部バーにプラットフォームの公式アイコンと名前が表示されます。
  • 設定 → アカウントページにプラットフォームアイコンを追加:左上のアカウント選択ボタンと展開したアカウント一覧が、それぞれのプラットフォームの公式アイコン(NetEase Cloud / Kugou コンセプト版 / QQ Music)になり、選択中のプラットフォームが一目で分かります。
  • NetEase Cloud のアカウントカードにアカウント年数と会員ランクを表示:アカウント名の下に「N 年 / N 日」(登録日数から換算)を表示し、右側の会員ラベルで VIP と SVIP を区別します(SVIP は金色)。ニックネームの色もランクに応じて変化し、非会員は白、VIP はコーラルレッド、SVIP は金色になります。
  • 「バージョン情報」ページでアップデートを確認できるようになりました:バージョン番号の右に「アップデートを確認」ボタンを追加し、確認中は「確認中…」と表示されて再クリックできません。新しいバージョンが見つかると現在の画面に重ねて通知が出て(背景はぼかした現在の UI で、真っ黒ではありません)、「更新へ」で公式ダウンロードページを開き、「キャンセル」または枠外をクリックするとそのまま使い続けられます。あわせて「設定 → バージョン情報」の上部に「起動時に自動でアップデートを確認」スイッチ(既定でオン)を追加し、オンのときはメインメニューに入るたびに静かに 1 回確認します。
  • 初回起動時に利用規約を表示:何も設定する必要がなくなり、規約を読んで「同意」を押せばメインメニューに入れます。「同意せず終了」を押すとゲームがそのまま終了します。規約の要点:本 MOD はプライバシー情報を一切収集せず、設定とログイン情報はすべてローカルにのみ保存します。外部に送るのは音楽 API の呼び出し統計(プラットフォーム / エンドポイント、成功・失敗、所要時間)だけで、アカウント、Cookie、Token、プレイリスト、再生履歴は含みません。
  • Verity が Web ページを開いて本文を読めるようになりました:検索結果の要約では足りないとき(具体的な数値・日付・表・文書)や、URL を直接送ったときに、そのページを開いて本文を読んでから答えます。この機能は Web 検索とは独立しており、Key の入力は不要で、Web 検索がオフでも使えます。安全のため、ローカルおよびイントラネットのアドレスは開きません。
  • Web 検索に DeepSeek チャンネルを追加:「設定 → AI 設定 → Web 検索」で DeepSeek の API Key を入力すると有効になり、空欄なら無効です。Key 未入力や呼び出し失敗のときは、これまでどおりゲーム内で理由を表示します。

変更

  • 初回起動時の「初期設定」画面を削除:メインメニューに入っても設定ガイドは出ず、オープニング映像を見終えるかスキップしてもそのままメインメニューに戻ります。設定はすべて「設定」画面で変更できます。
  • Kugou コンセプト版のアカウントカードで会員状態を表示しないように変更:このプラットフォームの会員状態 API が取得できないため、ログイン後はニックネームとレベルだけを表示し、「VIP 会員 / 非会員」は表示しません。アカウント自体はこれまでどおりアカウント選択で使えます。

修復

  • 初回起動時の利用規約ページで「同意せず終了」を押しても反応しない問題を修正し、正常にゲームが終了するようになりました。
  • セルフチェックページの TTS / STT カードの 2 つのボタンが同時に「検出中」になるように:検出中は「再生テスト」「録音テスト」もグレー表示で押せなくなり、検出と再生・録音が重ならなくなりました。
  • 複数プラットフォームの曲指定が混ざらなくなりました:検索・プレイリスト・アルバム・お気に入り・おすすめのたびに固有の結果番号が振られ、以前検索したプラットフォームも元の番号で再生できます(プレイヤーごとに直近 5 件を保持)。別の曲を再生したり、番号が範囲外になることはありません。
  • Kugou / QQ の曲 ID をそのまま指定できるように:これらの ID を NetEase Cloud の数値 ID として扱わなくなりました。song_id で再生するときに platform を添えられ、省略時も ID の形からプラットフォームを自動判別します。
  • 再生できる曲が「再生できません」と誤って報告されなくなりました:事前チェックは標準 → 高 → 最高と順に確認し、本当に URL が取得できないときだけエラーにします。開始が遅いときは「まだバッファリング中」と表示します。
  • あるプラットフォームで再生できないときは別のプラットフォームに自動で切り替え:VIP や権利の都合で元のプラットフォームから URL が取れない場合、曲名+アーティストで他の 2 社から同じ曲を探し(同名かつアーティスト一致のときだけ切り替え)、返答で切り替えたことを伝えます。

v3.5.2

2026-10-25

Fish Audio 音声・プラットフォーム別楽曲検索・TTS 再生テスト・Shiftcore Recalling v2

新規作成

  • 音声合成の内蔵サービスに Fish Audio を追加:Key・モデル名・音声 ID を個別に入力でき、モデル名の横に「モデルドキュメント」ボタン、音声 ID の横に「音声IDを検索」ボタンがあり、キーワードで検索してページ送り表示、クリックで自動入力されます。直結できない場合は「プロキシを有効化」をオンにすると Fish Audio のリクエストがすべてプロキシ経由になり、オフにすると直結に戻ります
  • キャラクターがプラットフォーム別に楽曲を検索するようになりました:NetEase Cloud・Kugou コンセプト版・QQ Music が 3 つの独立した検索に分かれ、「NetEase Cloud で探して…」と言えばそのプラットフォームで検索し、指定がない場合はログイン中または有効なものを使用し、確信が持てないときは一言尋ねます。各曲には引き続きプラットフォームのタグが付き、再生は結果の番号で行います
  • 「お気に入りの曲を再生」は NetEase Cloud Music の楽曲 ID であることが明記され、Kugou や QQ Music の ID と誤解されなくなりました
  • セルフチェックページの TTS に「再生テスト」を追加:クリックすると現在の設定で「こんにちは、Verity です。これは音声再生のテストです。」と実際に再生し、音が聞こえれば設定完了です。再生中は「再生テスト」と「検出」がどちらもグレー表示で「再生中…」になり、終わると自動で戻ります
  • LLM の内蔵サービスに Shiftcore Recalling v2 を追加:Key を入力し「モデル一覧を取得」でモデルを選ぶだけ、標準の OpenAI 互換インターフェースです

修復

  • Fish Audio が「検出は通るのに音が聞こえない」:再生と検出が同じ方式で完全な音声を取得するようになり、切り詰められた一部だけを取得することがなくなりました
  • 再生テストの失敗時に理由を表示:HTTP ステータス、応答が空、オーディオデバイスが使用不可などの具体的な理由を表示し、「30 秒以内に再生が始まりません」だけではなくなりました
  • Fish Audio がプロキシ有効化後に 403 にならない:合成・セルフチェック・音声検索のすべてに通常のブラウザー識別子を付けるようになり、プロキシのオン/オフどちらでも通ります
  • 「再生テスト」が初回しか音が出ない問題:初回の合成に成功するとそのサンプル音声を記憶し、同じ設定で再度クリックするとそのまま再生し、Key・エンドポイント・参照音声を変更すると自動で再合成します
  • 再生テストが検出状態も更新:音が聞こえた後、TTS カードが「未検出」から「✓ 再生テスト合格」に変わり、30 秒間音が出なければ「✗ 再生テストで音が出ません」と表示されます
  • 音色クローンモードで再生テストの音が出ない問題:参照音声を `data:audio/mpeg;base64,` プレフィックス付きの正しい形式にし、再生テストもバックグラウンドで実行するようになったため、画面が固まらなくなりました
  • MiMo の音色クローンが復旧:Xiaomi に送るリクエストのモデルと参照音声の形式を公式インターフェースに合わせて修正し、音色クローンが再び使えるようになりました
  • クローン失敗時に「静かに音が出ない」ことがなくなりました:Key 未入力、参照音声が大きすぎる、ネットワークエラー、応答に音声がない場合などは、通知バーで具体的な理由を知らせます
  • 参照音声が使えないときの通知を修正:「Base URL モードに切り替えました」から「デフォルト音色に切り替えました」に変更
  • 効果のなかった音色クローンの「話速」オプションを削除:セーブ内の古い値は次回保存時に自動で消去されます

v3.5.1

2026-10-19

Cloudflare Workers AI・NetEase Cloud QRコードログイン・Key不要のネット検索・ワールド別プレイモード

新規作成

  • NetEase Cloud Music が QRコードログインに対応:アカウントページの NetEase Cloud カードをクリックするとコードが表示され、スマホの NetEase Cloud アプリで読み取ってスマホ側で認可を確認すると、ニックネーム・アイコン・VIP 状態・レベルが自動同期されます。従来の Cookies ログインも残っています
  • ネット検索に Bing チャンネルを追加。内蔵・Key不要ですぐ使えるため、その行は説明文のみで入力欄はありません
  • 音声認識の内蔵プロバイダに AssemblyAI / Gladia / Speechmatics を追加。いずれも Key 1つだけで、Model 行は表示されず、セルフチェックページは各社のプロトコルで実際に認識を1回実行します
  • 内蔵の小米(Xiaomi)音声認識モデルは `mimo-v2.5-asr` に固定され、Model 行は表示されず、リクエストに空のモデルが入ることもなくなりました
  • セルフチェックページの STT に「録音チェック」を追加:話した内容を録音して STT に送り、結果エリアに認識されたテキストがそのまま表示されるので、マイクや言語設定の問題が一目で分かります
  • 音声合成の内蔵プロバイダに Deepgram を追加:Key と音色 ID(「音色IDを取得」ボタンで取得可能)を入力するだけで、Model 行は表示されず、公式のストリーミング API を使用します
  • 音声合成の内蔵プロバイダに ElevenLabs を追加:Model は `eleven_multilingual_v2` に固定、音色 ID はクリックで選択でき、公式のストリーミング API を使用します
  • 音声合成の内蔵プロバイダに Cartesia を追加:Model は `sonic-3.6` に固定、音色 ID はクリックで選択でき、公式のストリーミング API を使用します
  • MiMo の音色をクリックで選べるようになりました:「音色を選択」ボタンで Bingtang、Moli、Suda、Baihua、Mia、Chloe、Milo、Dean をワンクリックで入力できます
  • 内蔵プロバイダに Cloudflare Workers AI を追加:Account ID と API Token を入力するだけで使え、「モデル一覧を取得」も可能で、返答は文字単位でストリーミング出力されます
  • プレイモードがワールドごとの保存に変更:ワールド作成画面のモードボタンは作成するワールドにだけ作用し、ワールド選択リストには各ワールド自身のモードが表示され、既存のセーブは初回進入時にその時点のデフォルトモードが記録されます

変更

  • 個人アカウントページを全面的に作り直し:カード型レイアウトになり、アカウント選択は左上のコンパクトなドロップダウンに、アカウント情報は1枚のプロフィールカードに集約、NetEase Cloud の「サービスアドレス」は独立したカードに、さらに「お気に入りの音楽」「マイプレイリスト」の件数カードを追加。変更は即時反映されます
  • 音楽アカウントのログイン体験を補完:QRコードログインに完全な状態遷移(コード表示 → 読み取り待ち → 読み取り済み・認可待ち → ログイン中)を実装し、失敗時はすぐに QRコードを停止、電話番号コードログインはコード取得後にカウントダウンします
  • 音楽の再生と検索がより便利に:各プラットフォームの再生は標準音質に統一、VIP / 有料楽曲では通知が表示され、AI の楽曲検索にはどのプラットフォームの曲かが付き、「再生停止」などの通知は曲名を表示、楽曲情報 / マイプレイリスト / お気に入りの音楽の検索を追加、歌詞は優先的に一文字ずつ表示されます
  • モデルのダウンロードがより安定:HuggingFace への直結でタイムアウトしがちだったダウンロードは、より安定した中継チャンネル経由に変更され、モデル詳細カードに余分な中継プレフィックスは表示されなくなりました
  • 音色クローンが小米(Xiaomi)自身のスイッチに変更:内蔵プロバイダで MiMo を選ぶとパネルに「音色クローン」スイッチが現れ、既存の設定は自動移行され、他社プロバイダではこのスイッチは表示されません
  • 「セルフチェック」ページを刷新:各チェック項目が独立したカードになり、失敗時は完全なエラー(原因チェーンを含む)が展開されてクリックでコピーでき、結果は1行ずつ展開され、チェック中は経過秒数が表示されます
  • 小さいウィンドウでの設定ページのレイアウト:854×480 などのウィンドウで、タイトルとサブタイトル、ラベルとグレーの説明、入力欄の高さ、左側ナビゲーション、アバウトページのカードをまとめて修正しました
  • すべての AI リクエストをストリーミングに統一:コンテキスト圧縮とセルフチェックも同じチャンネルを通り、「会話は使えるのに圧縮やセルフチェックが失敗する」ことはなくなりました
  • 音声合成から「ストリーミング応答を有効化」スイッチを削除:常にストリーミングとなり、設定ファイルの `ttsStream` 項目も削除されました
  • ログページの長いログが切り捨てられなくなりました:自動折り返しで完全表示され、スクロールはピクセル単位で計算されるため行を間違えてクリックしたり行き過ぎたりせず、行をクリックすると従来どおり全文がコピーされます

修復

  • 「カスタム」音声を設定しても音が出ない問題:入力したアドレスに OpenAI 互換形式(`/audio/speech`)でリクエストを送るようになりました
  • Cartesia の音声がセルフチェックを通るのにゲーム内で音が出ない問題:長さ不明のストリーミング WAV は実際に受け取ったバイト数で再生するようになり、解析や再生に失敗した場合はログページに明確なエラーが残ります
  • Kugou コンセプト版の QRコード認可後に画面が反応しない問題:認可完了後にアカウント情報を正常に取得して表示します
  • Kugou の QRコードで「偽ログイン」(一瞬ログインしてすぐ未ログインに戻る)が起きる問題:スマホ側で本当に認可が確認された場合のみログイン成功と判定します
  • NetEase Cloud の QRコードログイン後に「セッションが無効 / 期限切れ」と表示される問題:ログイン状態に本当に必要な認証情報のフィールドだけを保持するようになり、ゲームを再起動しても有効なままです
  • QQ Music を WeChat ログインするとアイコンがペンギンのままになる問題:WeChat チャンネルは対応するチャンネルのプレースホルダーアイコンと名前を使い、アカウント種別ラベルも実際のチャンネルに従います
  • セーブを終了してもチャットパネル(CLI)が更新されない問題:ワールド退出 / 切断 / 新しいワールドへの進入で、パネル内容・スクロール位置・コンテキスト数がすべてクリアされ、新しい内容が届くまでパネルは折りたたまれたままになります
  • 「チャットバーを引き継ぐ = オフ」でメッセージが余分にポップアップする問題:オフでは一切引き継がずバニラのチャットバーのみを使用し、「ミックス」モードではパネルが実際に表示されている間だけ通知を転送します
  • 「モデル一覧を取得」が回り続けてパネルが永遠に出ない問題(Our Free Model):まず一覧を即座に表示し、バックグラウンドで1つずつ実測して「実測中 5/12」の進捗を表示、使えないモデルは除外するか「地域制限」と表示します
  • 内蔵プロバイダ「Our Free Model」のリクエストがすべて失敗する問題:上流が接続方式を変更したため、本モッド側で追従し復旧しました
  • Cloudflare の認証情報を入力しても `HTTP 401 · api key 無効` と表示される問題:リクエストが誤って他社プロバイダに送られていたのを修正しました
  • モデルダウンロードカードを開いても下の「保存 / リセット」が押せてカードの上に重なる問題:カードを開いている間はレイヤー全体が本当に遮られ、クリックもホバーもできなくなりました
  • 「HuggingFace リアルタイムデータ」がたびたび `request timed out` になりモデルもダウンロードできない問題:タイムアウトを 20 秒に緩和し最大 3 回自動リトライ、ダウンロードもリトライ対応でレジュームにも引き続き対応します
  • セーブは CN 版なのに返答がホラー調で、極限暗黒もそのまま有効になる問題:原因はモードがセーブに追従していなかったことで、「プレイモードがワールドごとの保存」で修正されました
  • 設定ページで「リセット」や「保存せず終了」を押すとプレイモードが原版に戻る問題:修正され、この2つはプレイモードに触れなくなりました
  • メインメニューの「ブラックアウト」オプションを選んでも効果がない問題:修正され、本当に暗くなります
  • ワールド作成画面に「(新規)」の文字が残り、説明文に `**` のアスタリスクが露出する問題:ボタンは「Verity モード:CN版」に簡略化され、ツールチップは2つのモードの違いだけを説明します

既知の問題

  • 既存のワールドはまだゲーム内でモードを変更できず、`saves/<ワールド名>/verity/mode.txt` を削除してデフォルト値で再記録させるしかありません。後日ゲーム内の入口を追加します
  • Cloudflare の無料プランではすべてのモデルが使えるわけではなく、一部のモデルは `403 not available on the Workers Free plan` を返します。これは上流の制限なので別のモデルを選んでください

v3.5

2026-09-13

自己塗装構成インターフェース・依存前ゼロ・知覚アップグレード・内蔵ペンギンTTS

新規作成

  • `mods.toml` の `[[mods]]` `updateJSONURL`。リポジトリ直下の `update.json` の raw リンクを指す
  • `update.json`。`homepage` と `promos`(`1.20.1-latest` / `1.20.1-recommended` はいずれも `3.5`)を含む
  • `VerityLog` の `warn(String, Throwable)` / `warn(Throwable)` オーバーロード
  • jar 直下に `logo.png` と `icon.png` を追加(`smiley_icon_transparent.png` を 512² に縮小)
  • モデル「使用許諾」ダイアログに約 170ms の退場アニメーションを追加(`mdlModalP` を再利用)、再生後に動作を実行
  • 確認ダイアログに入場/退場アニメーションを追加(`openConfirm` / `closeConfirm` / `confirmP`、入場 220ms・退場 170ms)
  • リセット成功の通知:`resetAllConfig()` の書き込み後にトースト「既定の設定にリセットしました」を表示
  • 右上の「保存」の左に「リセット」ボタン `resetBtnBox` を追加。クリックで自前描画の確認(`confirmKind = 3`、キャンセル/リセット、リセットは危険色 `C_DESTR`)
  • リセットの意味:即時項目以外は `ConfigValue.getDefault()` に戻したうえで直接 `SPEC.save()` し、スナップショットを更新
  • 許諾文にスクロールバーを追加。ホイールとドラッグに対応(`drawBar` を再利用、幾何は `mdlDiscGeom` に統一)
  • `同意しない`(枠線)/`同意してダウンロード`(主色)の 2 つのボタン
  • 保存成功のトースト「設定を保存しました」。`doSaveAll()` の「保存して終了」「保存してエディタへ」の経路でも同様に有効
  • 未保存の変更がある状態で「歌詞エフェクト編集」を押すと三択の確認を追加:キャンセル/保存してエディタへ/保存せずエディタへ
  • ヘッダー帯の最右端に「保存」ボタンを追加。変更がないときは灰色で無効
  • 未保存で終了する際の自前描画の確認ダイアログ:キャンセル/保存して終了/終了(変更を破棄)
  • `PersonaEditorScreen` で Ctrl+A/C/V/X と Shift + 方向キー / Home / End の範囲選択に対応(選択範囲のハイライト付き)
  • `VerityConfig.Mem`。`ConfigValue` と同名の `get()` / `set()` を公開し、実行時のメモリ値を保持
  • 一般ページに「機能ヒント」スイッチを追加(設定キー `functionalHint`、既定はオン)。機能が有効でない場合とルールが一致しない場合のトーストを一括制御
  • `VerityEntity.bounceOffEntities` がモブに当たった際の水平反射(弾性 0.6)と、飛翔物が命中した際に飛行方向へ加わる衝量に対応
  • 5 tick のクールダウンと水平速度の上限 2.0 を追加。重なり合っている間に何度も発火したり、弾むたびに速くなったりするのを防止
  • `VerityLlmSession` の `actualContextChars`、`setActualContextChars()`、`actualContextTokens()`
  • `VerityLlmSession` の `sessionChars` が `contextChars` に取って代わる。ワールドに入ると 0 に戻し、保存済みメッセージの長さで加算
  • 設定ページの「バニラ(ホラー)モード」に「極限の暗闇」スイッチを追加(バニラでのみ有効と注記)
  • NCM の `ncm_playlist_songs` アクション。プレイリスト id で曲一覧を取得し、`ncm_play` にそのまま渡せる `song_id` を返す
  • `ncm_playlist_songs` の引数 `playlist_id` / `limit`(既定 100、上限 200)。マルチでは無効、未ログイン時は cookie の入力を促す
  • `get_player_health` の戻り値を体力/最大値、満腹度(n/20)、すべてのステータス効果(名前、レベル、残り秒数)へ拡張
  • AI 設定・その他に「Verity にコマンド実行を許可」スイッチ(`VerityConfig.ALLOW_COMMANDS`、既定はオフ)
  • このスイッチをオンにしたときだけツール一覧に `run_command` が現れる。プレイヤー自身の `CommandSourceStack` で実行し、権限は追加されない
  • CLI パネルがマウスホイールでの履歴スクロールに対応(1 ノッチ 3 行、オフセットは `[0, total-cap]` にクランプ)。`ChatScreenMixin` が `mouseScrolled` を転送
  • 下部バーのコンテキストリングが、流れ出し中の内容も計上(`liveTokens()` を追加、約 4 文字/token で見積もり)
  • 思考内容に省略記号の先導記号(1px の点 3 つ)を追加。ツール呼び出しは従来どおり 3x3 の小ブロック
  • CN 版に「カスタムペルソナ」スイッチと `PersonaEditorScreen` エディタを追加(自前描画の複数行入力、自動折り返しと内容に応じた高さ)
  • CN 版専用の設定 `CORES_CUSTOM_PERSONA` と `CORES_CUSTOM_PERSONA_ENABLED` を追加。バニラの `CUSTOM_PERSONA` とは独立
  • カスタムペルソナが有効かつ空でない場合、内蔵の中立アシスタント人格を置き換える。そのテキスト内のホラー要素は遮断しない
  • ワールド作成画面の「チートを許可」の下に「Verity モード:バニラ/CN版」の切り替えボタンを追加し、`VerityConfig.PLAY_MODE` に書き込む
  • AI 設定に「その他・ゲーム内の見た目」グループを追加し、「落下時の鳴き声」セレクタを移設
  • `PersonaHelper.karmaDisposition()` の共通ヘルパー。2 系統の人格プロンプトで共用
  • 思考中に Esc を 2 回押すと思考を停止。1 回目はパネルにヒントを出し、2 秒以内にもう一度押すと有効になり、ポーズメニューは開かない
  • 一般ページに「CLI パネル」ドロップダウンを追加:オフ/混合(既定)/常時
  • 「常時」モードに `ClientChatHook` を追加。チャットメッセージの名前プレフィックスを外してパネルへミラーし、重複を除去
  • `Kind.SYSTEM` と `VerityLlmSession.proactive()`。Verity から主体的に始めた会話をマーク
  • 内蔵プロバイダに Kilo を追加(ゲートウェイ `https://api.kilo.ai/api/gateway`、既定モデル `kilo-auto/free`、キー不要)
  • Kilo は汎用の OpenAI リクエスト経路(chat/completions + 三段フォールバック)を通る。選択後は設定欄を空のままでもそのまま使える
  • About ページの「特別な感謝」に dsh-our-free-model リポジトリのリンクを追加
  • 内蔵プロバイダに Our Free Model を追加(ゲートウェイ `https://opencode.ai/zen/v1`、キー不要、一覧は `GET /models`)
  • `OurFreeModel` クラス。このプロバイダの定数、エンドポイント振り分け、フィンガープリントヘッダー、chat/responses 2 系統の SSE 解析を収容
  • 段階タイプ `ThinkKind.BUDGET`(簡潔/均衡/熟考)と、唯一入力が必要な設定 `LLM_BUILTIN_OURFREE_MODEL`
  • `checkLlmOurFree()` と `compressWithOurFree()`。セルフチェックとコンテキスト圧縮で `OurFreeModel.send()` を再利用
  • `send()` の `quiet` オーバーロード。サイドチャネルのリクエストがチャットパネルへストリーム内容を流さなくなる
  • START/SYNC パケットに `timestampMs` を追加(START はさらに `durationMs`)。位置の意味を「ある時刻の曲の進捗」に変更
  • `streamPlay` を本物の HTTP Range Seek に変更。ファイル全長を調べたうえで比例換算してバイト開始位置を求め、その手前に安全域を確保
  • Range 応答が 206 でない場合は自動で全体ストリーム再生に戻す。Range 非対応の CDN でのクラッシュを回避
  • JIP 全経路のログ(サーバー側の再送、Range のストリーム開始、フレーム校正など 10 行)をゲーム内ログページ `VerityLog` へミラー
  • クライアントは同期パケットを受信するたびに DEBUG ログを 1 行追加:`[ncm] 同期ずれ Nms(自機 X / サーバー Y)`
  • `NcmClientPlayer` に「START を受信」「クライアント側の経路をスキップ」「ストリーム開始に失敗」の 3 行の `VerityLog` を追加
  • 音楽ブロックの初回描画時に INFO の幾何ログを 1 行出力(`musicTop / blockH / ph / foldT / guiW / guiH`)
  • `EmojiGlyphProvider` / `EmojiFonts` / `FontManagerMixin`:`minecraft:default` と `verity:terminal` にシステム emoji の字形プロバイダを追加(stb が glyf 輪郭を焼き込み、単色)
  • ビルド時の依存 fastutil-8.5.9.jar を `dev/tools/libs/forge/` に配置(コンパイル時のみ、パッケージには含めない)
  • 歌詞の空行を 3 つの点に変更:水平に並ぶ真円(20 分割の頂点ファンで構成)、点の半径は歌詞の文字サイズに追従、空行を引き起こす歌詞行にアンカー
  • ミリ秒単位の 4 段アニメーション:フェードイン 180ms → 3 点が順に pulse → 900ms の呼吸 → 300ms のフェードアウト。空きが 1600ms 未満なら圧縮した時間割で進行
  • 空行の丸点しきい値設定 `ncmLyricGapDotThresholdMs`、既定 1500ms
  • `LyricEditorScreen.drawPreviewLyric` が同じ `drawGapDotsPublic` を再利用し、エディタとゲーム内の見え方が一致
  • 2 行の歌詞の空きが 4s 以上あるとき、中央に縦並びの 3 点を描き、待機の進捗に応じて順にフェードイン(`GAP_DOT_THRESHOLD_MS=4000`)
  • HUD(`LyricHudRenderer`)とエディタのプレビュー(`drawPreviewLyric`)が `drawGapDots` の同じ実装を共用
  • `LyricHudRenderer.prevNonEmpty/nextNonEmpty`。空テキスト行をまたいで本当の前の句と次の句を特定
  • `SkinManager.restoreBuiltinTextures()`。内蔵スキンに戻す際に 16 個のエンティティテクスチャ RL を復元
  • `probeCookieValid()` が `/login/status` を調べ、cookie 有効/明確に無効/判定不能の三態で区別
  • 再生中に歌詞が取得できないときは統一的に「(インスト)」のプレースホルダを表示(待機色、不透明度 0.75)
  • 広屏/狭屏の切り替えを `wideT` の補間による再レイアウトアニメーションに変更。静止時の幾何は変更前と一致
  • `NcmHelper.parseYrc()` が逐字歌詞を解析。逐字を含む曲だけ自動で有効化し、設定項目には出さない
  • `LyricLine.wordStart[]/wordChar[]` と同期パケットの圧縮文字列 `encodeWords`/`decodeWords`。32000 バイトを超えると逐字を捨てて行全体を再送
  • 逐字描画 `drawLyricLineW/drawScaledTextW`。エディタのプレビューは `drawLineWordPublic` を通り HUD と同源
  • `matchYrc()` がテキスト完全一致で逐字を lrc 行に紐付け、同一テキスト行は 1500ms のウィンドウで曖昧さを解消
  • アクティブ色/待機色にそれぞれ「グラデーションスイッチ」と「グラデーション終点色」を追加。描画に `LyricHudRenderer.drawLyricLineG` を追加し、逐字を横方向にグラデーション
  • パネルのタイトル行の右端に「広屏/狭屏」ボタンを追加。広屏ではパラメータ行を 2 列に再配置し、画面に収まらない場合は列幅全体を縮小
  • 設定 `ncmLyricActiveGradient`、`ncmLyricActiveColor2`、`ncmLyricPreviewGradient`、`ncmLyricPreviewColor2`
  • 設定 `ncmLyricInfoNameColor`(A1A1AA)、`ncmLyricInfoArtistColor`(71717A)。曲名/アーティストの色を設定可能に
  • エディタの行テーブルを固定の `ROWS` 定数から動的生成の `buildRowKinds()` に変更。カラーピッカーの対象を 6 個に拡張
  • パネル下部の折りたたみバー。折りたたむとタイトル行だけになり、パネル高さは 330 → 66(`shownRows()`/`paramsBlockH()` に集約)
  • 新しいオプション「曲情報を表示」と「情報の文字サイズ」スライダー。曲名が上、アーティストが下で、この 2 行は判定枠の対象外
  • 設定 `ncmLyricShowInfo`(bool、false)/ `ncmLyricInfoFontSize`(int、60)
  • ID 入力欄の既定値 `570340213`。灰色のヒントとして表示し、入力すると消える
  • `NcmHelper.active*()`。再生状態を読む 9 つの統一入口
  • `SpeedHelper.setConfigValueNow(name, value)`:同期リフレクションで書き込み、デバウンス待ち行列を通さない
  • `LyricHudRenderer.advanceState()` と `sampleStatePublic()`。エディタが毎フレーム能動的に呼び出すため
  • `SpeedHelper.configReadOk()` と、開いた時点の設定スナップショット `opened`
  • ID 入力欄をバニラの `EditBox` で受け持たせ、自前描画の shadcn 外枠は維持
  • `setFilter` が ID を 20 桁以下の数字に制限。貼り付けも同様にフィルタ
  • ID 欄のキー割り当て:Enter で選曲、Tab/Esc でフォーカス解除、それ以外は `EditBox` へ転送
  • 歌詞ドラッグ時の x/y のガイド線:吸着軸は `C_OK` の緑の実線に変えて太くし、吸着しきい値 `SNAP_PX = 6`(`s()` を通す)
  • パネル下部の簡易音楽コントロール:再生/一時停止、`曲名 · アーティスト`、ドラッグできる進捗バーと時間、ID 入力欄と「選曲」
  • `NcmHelper.uiStatus() / uiTogglePause() / uiSeek(ms) / uiPlayById(id)` のファサード。ゲーム内の選曲と同じ実装
  • 歌詞編集画面に入るときのトースト:シングルでは一時停止した旨、マルチでは一時停止しない旨を表示
  • `LyricHudRenderer.isAnimatingPublic() / animProgressPublic() / prevLineIndexPublic() / easeInOutPublic()`
  • カラーピッカー下部の編集可能なフィールド:HEX は `0-9A-F` のみ(6 文字以内)、RGB は数字のみ(0-255)を受け付け、1 文字ごとに HSV を即時更新
  • バックスペース、Enter/Tab での確定、Esc の二段階キャンセル(まずフィールドのフォーカスを外し、次にカラーピッカーを閉じる)
  • `TOP_PAD = 6`。行高は「使用可能な高さ − TOP_PAD − PAD」を均等割りし、以降の行は全体を上へ移動
  • `SpeedHelper.flushPendingConfig()`。デバウンス書き込みキューを空にし、パラメータ変更後すぐの永続化に使う
  • `SpeedHelper.currentNcmLyricParseColor(hex, fallback)`。エディタとゲーム内の HEX 解析規則を統一
  • `dev/tools/probe_download.py`。`--apply` で実測し、宣言サイズをエントリへ書き戻す
  • `/cnvtt` テストコマンド群(selector / compress / block / toast / center)。UI のみで実際の効果は出さない
  • セルフチェックページの「ファイルを選択…」ボタン。LWJGL の tinyfd で OS ネイティブのファイル選択ダイアログを開く
  • About ページの「特別な感謝」カード。GeckoLib と NeteaseCloudMusicApiEnhanced を掲載
  • ローカル LLM のストリーミング出力。`LlmOutput.streamMessage()` で確定済みの台詞だけを取り出しエスケープを復元
  • TTS の合成しながら再生(`openPcmSink` / `writePcm` / `closePcm`)。サンプルレートは `OfflineTts.getSampleRate()` から取得
  • Android の OpenAL バッファキューによるストリーミング再生。24 ブロックのバックプレッシャー、120 秒のウォッチドッグ、解放前の unqueue を含む
  • jar 内に `varmite/jna/android-aarch64/` と `android-x86-64/` のリソースを追加し、`jnidispatch.path` を設定
  • GUI 空間のサイズ変更時の診断ログ。サイドバーと内容の幅を直接出力し、表示切れの特定を容易にする
  • コンテキスト不足の選択画面。方向キー、数字キー、マウスで「今回は閉じる」または 3 種類の圧縮元を選べる
  • RuntimeSmoke の「LLM プロンプトプレフィックス再利用」アサーション。スイッチの有無で出力が 1 文字も変わらないことを検証
  • LocalInferRuntime.historyCharCapacity()/contextBudgetChars()。n_ctx から文字数の予算を換算
  • LocalCompress。ローカルモードの圧縮は純粋なアルゴリズムクラスを通り、Minecraft に依存しない
  • モデル読み込みログに n_ctx / n_batch / 返答上限の出力を追加
  • persona_sample.py と ProbePersona.java。プロンプトの token 数と余裕をワンクリックで計測
  • RuntimeSmoke の静的アサーション。プロンプトの余裕が 5000 token を下回るとエラー
  • LlamaCpp.complete() の decodeChunked()。長いプロンプトを ≤ n_batch で分割して投入
  • スモークテストに「LLM 長文プロンプトの分割デコード」「大コンテキスト長文プロンプト」「連続マルチターン」の 3 ケースを追加
  • stage_runtime.py の write_manifests()。組み立ての最後に各プラットフォームの FILES.txt を一括で書き直す
  • NativeRuntime.ownJar() の退避経路。自クラスの .class リソースから jar を逆算
  • run.sh の `--restricted` モード。Forge が自身の jar を取得できない状況を再現
  • dev/tools/jna_repack.py。3 通りの書き方と 8 プラットフォームの等長置換をカバー
  • dev/tools/pack_conflict_check.py。成果物と libraries の 462 個の jar のパッケージ名を照合
  • verify_shade.py の第 8 節「モジュール層の安全性」静的アサーション
  • stage_runtime.py の組み立て前の prune_stale クリーンアップ。死んだクラスの残留を防止
  • `ggml_backend_load_all_from_path()` の呼び出し。公式パッケージのプラグインバックエンドを登録
  • ローカル推論のネイティブライブラリをすべて mod に同梱。LLM / TTS / STT がデスクトップと Android arm64 をカバーし、Windows x86 と Android x86_64 の LLM は未対応
  • NativeRuntime.java。プラットフォームを検出して自動で解包し、依存順に System.load
  • VoskNative.java。Android 対応のため vosk C API の JNA バインディングを自作
  • dev/tools/stage_runtime.py と native_check.py による JNI シンボル互換性の検証
  • dev/_smoke/ のデスクトップ側スモークテスト。スタブクラスで Minecraft を迂回し実際のネイティブライブラリを実行
  • CPU 命令セットのゲート。AVX2/FMA のない CPU ではローカル LLM を読み込まず、UI で説明する
  • モデルライブラリページのグリッドスクロールバー。`drawBar` + `thumbGeom` を再利用し、幾何を `mdlSb*` フィールドに格納して命中判定とドラッグが同じ値を使う
  • グリッド右側に 14px を固定で確保してスクロールバーに充てる(`mdlGrid()`)。バーの出現・消滅でカードが再配置されるのを回避
  • 詳細/ダウンロード管理ダイアログの退場アニメーション:170ms の逆方向スケール+沈み込み+オーバーレイのフェードアウト。退場中はクリックとホバーを吸収
  • セルフチェックが「ローカル推論」モードで実際に最小限の推論を 1 回実行:LLM は `LocalInferRuntime.chat()`(最大 32 tokens)、TTS は `synthesize()`、STT は `transcribe()`
  • セルフチェックで `chat()` が `[ローカル推論] …` のメッセージ列を返した場合は失敗として扱う
  • 詳細ダイアログに「モデル紹介」を追加。30 モデルそれぞれに極めて簡潔な Markdown 紹介を用意し、HF のリアルタイムデータと同じスクロール領域に置く
  • LLM/TTS/STT の「モード選択」を「推論モード」に改称し、「ローカル推論」モードを追加
  • LLM ローカル推論:モデルのドロップダウン(ダウンロード済み GGUF のみ)、推論デバイス、最大返答長(256/512/1024/2048)、温度、繰り返し抑制、スレッド数(既定 2)
  • TTS ローカル推論はモデルのドロップダウン+推論デバイス+推論スレッド、STT ローカル推論はモデルのドロップダウンのみ
  • 左側に「モデルダウンロード」TAB を追加(セルフチェックの上):初回に「ローカルモデルのダウンロードと利用にあたって」を表示し、同意後は表示しない
  • 30 個のモデルカードを内蔵(Qwen2.5 全系、Llama-3.2/3.1-8B、Mistral-Nemo-12B、DeepSeek-R1-Distill-7B、vits/matcha/zipvoice、vosk)。種類/構成レベル/ダウンロード済みかどうかで絞り込み可能
  • モデル詳細カード:基本情報はハードコードし、ダウンロード数/いいね/更新日時/ファイル一覧は HuggingFace(hf-mirror.com ミラー)からリアルタイム取得
  • 右上の「ダウンロード管理」:一時停止/再開/削除、リアルタイムの進捗と通信速度。モデルは `config/verity/models` に保存し、レジュームと再起動後の復元に対応
  • ローカル推論のランタイム層:llama.cpp / sherpa-onnx / vosk の 3 系統の JNI ローダー。ネイティブライブラリを mod 内か `config/verity/models/runtime/` に置けば有効化される
  • セルフチェックと接続性チェックはローカル推論モードでは準備状態の判定(モデルがダウンロード済み+ネイティブライブラリがロード済み)に切り替え、ネットワークリクエストを送らない
  • LLM の内蔵プロバイダとカスタム Model 入力欄の左に「モデル一覧を取得」ボタンを追加。バックグラウンドで OpenAI 互換の `GET /models` を要求し、401 の場合は Key の入力を促す
  • モデル選択のサブメニュー:全画面のぼかし+暗いオーバーレイ、中央のパネルに検索欄と単一選択リスト(ホバー強調、選択時は緑の点がバウンド、スムーズスクロール+スクロールバーのドラッグ)、下部にキャンセル/確定
  • 確定で対応する Model 設定へ書き戻す(内蔵プロバイダはそのプロバイダの Model 項目、カスタムは `LLM_MODEL`)。Enter=確定、ESC/パネル外クリック=キャンセル
  • レベル絞り込み chip 行の右端に「すべてコピー」ボタンを追加。現在の絞り込み結果を一括コピーし、件数をトーストで通知
  • ログ行の背景にゼブラ縞(1 行おきに 4.5% の白)とホバー時の 10% ハイライトを追加し、「行がクリック可能」であることを可視的に示す
  • 検索で一致した部分文字列を WARN の琥珀色でハイライト(大文字小文字は区別しない)
  • 左クリックで行全体をコピー、右クリックで「行全体をコピー/メッセージ内容をコピー」の小メニューを表示
  • 連続する同一レベルかつ同一メッセージテンプレートのログを `メッセージ ×N [展開]` に折りたたみ、展開/折りたたみ可能。グループのキャッシュは絞り込み/検索/revision で無効化
  • スクロールバーをスムーズにし、押したままドラッグ可能(トラックのクリックでジャンプ)。ドラッグから逆算した目標量も同じく緩動を通す
  • 設定ページの「セルフチェック」を自前描画へ再構成(`LCard.selfPage` → `renderSelfPage` / `selfPageClick`)。3 つの対象それぞれに 52px のカードを 1 枚、タイトル行の右に「一括チェック」
  • セルフチェックを実際に最小限の本物のリクエスト送信に変更:`VeritySelfCheck.probe` を `check(Target) → Result{int state; String text}` に
  • LLM のセルフチェックは `POST {base}/chat/completions` を叩き、必ず `AiAPI.applyThinking` を呼ぶ。`content` または `reasoning_content` が空でないことで判定
  • TTS のセルフチェック:プロキシは `POST {base}/audio/speech`、プリセット/カスタムは MiMo 形式の `chat/completions + audio{format:"wav",voice}`、音色クローンはクローン用エンドポイント+実際の参照音声
  • STT のセルフチェック:MiMo のエンドポイントは `chat/completions + input_audio`、それ以外は multipart の `POST /audio/transcriptions`。テスト音声は 1s/16kHz/モノラル/16bit の無音 WAV
  • セルフチェック失敗時の文言はレスポンス本文の `error.message` / `message` / `detail` を取り出す(例 `HTTP 401 · Invalid API key`)。接続タイムアウト 10s、リクエスト 60s
  • ログページのレベル絞り込み chip を再設計:ALL/INFO/WARN/ERROR を角丸の小さな矩形(角丸 5)に変更し、件数部は固定幅で右寄せ、選択項目の左に手描きのチェックマーク、切り替え時は 260ms の減衰サインによる跳ね
  • 「詳細ログ」を「ラベル+スライドスイッチ」の完全なコントロールに変更。枠線、ホバー時の明るさ、右側のミニスイッチを備える
  • ログ一覧の遷移アニメーション:レベル/検索語/クリアの切り替え時、リストが下から 5px 上へスライドしてフェードイン(200ms ease-out)。新しいログの到着では発火しない
  • 検索がログレベルに対応:info/warn/error/debug と入力するとそのレベルだけを抽出し、all で全件
  • toast の連続発火を「入れ替え」アニメーションに変更:古いトーストが上へスライドして消え(240ms)、新しいトーストが下から 10px でせり上がる
  • アカウントページの接続性チェック中は 3 つの結果値に「チェック中…」を表示し、完了前に前回の値を残さない
  • LLM の内蔵プロバイダに「Qwen 開放プラットフォーム」を追加。モデル名は必須で既定値の自動入力はなし
  • TTS / STT の内蔵プロバイダを選択可能なプロバイダ(Mimo / Qwen 開放プラットフォーム)に変更
  • 「ローカルクローン音声」ドロップダウン。`config/verity/sample_audio` 配下の 5〜30 秒の mp3 を一覧表示
  • Qwen の音色クローンの合成モデルは `qwen-audio-3.1-tts-next` に固定
  • 設定画面の左ナビゲーションにスクロールバーを追加。収まらないときだけ自動で現れ、ドラッグとクリックが可能でホバー時に明るくなる
  • `layout_check.py` のスクロールバー幾何の回帰アサーションと `--screen-h` 引数(既定 360)
  • TTS モード「内蔵(湊ペンギン)」。内蔵の CQE 中国語音声モデルを使い、すぐに使えてネットワークもキーも不要
  • 内蔵の湊ペンギンモデル(CQE ONNX + jieba 語彙、約 158MB)を jar に同梱。初回使用時に自動で解包して読み込む
  • TTS 設定の「モード選択」に「内蔵(湊ペンギン)」の選択肢を追加
  • 完全自前描画の設定画面(shadcn/ui のデザイン風格、Cloth Config 依存を完全に排除)
  • 6 つのセクション:一般/バニラ(ホラー)モード/CN版(CORES)モード/AI 設定/Verity アカウント/機能設定
  • AI 設定のグループツリー:LLM / TTS / STT(Verity サイト、内蔵プロバイダ、カスタムの三態)とそれぞれの接続性チェック
  • アカウントの「個人センター」ページ:ポイント残高カード、サーバー側モデル、接続状態、更新/OAuth ログイン/ログアウト
  • 設定画面の自前描画の背景画像(agnes-image-2.5-flash で生成)
  • サブグループの折りたたみは既定で閉じ、L 字の階層線、スキンのドロップダウン選択(skins ディレクトリを読み取る)
  • 内蔵の GeckoLib アニメーションライブラリ:前提 mod を別途インストールする必要がなくなった
  • 落下時の鳴き声を選択可能:なし/TTS に追従/内蔵音声/湊ペンギン
  • Verity の知覚能力を強化:天気(雨/雷雨/バイオーム/昼夜/明るさ)、アイテムの深い読み取り、周囲の構造物の探索
  • 連続したマルチターンのツール呼び出し。複雑な問題でも 1 回の会話で複数種の情報を照会
  • 新しい「About」ページ:バージョン番号、プロジェクト紹介、メンテナンス状況、関連リンク、貢献者への謝辞、オープンソースライセンスの説明
  • デバッグモードのスイッチ:オンにするとすべての動作ログを出力し、問題の切り分けが容易になる

変更

  • 2 つの `mods.toml`(`dev/patches/META-INF/mods.toml` が有効、`dev/work/jarroot/...` は参照用)を同期して更新
  • `updateJSONURL` は `main` ブランチ前提で記述。既定ブランチが `master` の場合は `.../master/update.json` に変更が必要
  • `MemoryHelper`、`NcmHelper`、`Verity`、`ModEvents` などの log4j / slf4j を `VerityLog.getLogger(...)` アダプタに変更し、`latest.log` とコンソールへ書き込まなくなった
  • ログレベルの区分を再編(全庫 400 か所以上を 1 件ずつ突き合わせ、計 56 か所を変更):ERROR→WARN が 10 か所、INFO→WARN が 21 か所、INFO→DEBUG が 25 か所
  • Forge の「設定」エントリを `config_help_1.png` / `config_help_2.png`(854×480、画面幅に応じて自動調整)の並列表示に変更
  • `issueTrackerURL` を GitHub リポジトリのアドレスに変更し、`[[mods]] displayURL` と `[properties] homepage`/`github` を公式サイトのアドレスに変更
  • トップレベルの `[properties]` `veritycn`(Verity 新生公式サイト)。`[[mods]]` より前に書く必要がある
  • `mods.toml` のバージョンと設定ページの `ABOUT_VER` バッジを `3.5-beta` / `v3.5-beta` から `v3.5` に統一
  • 終了、歌詞エディタへの移動、リセットの 3 つの確認シーンで同じアニメーションと幾何を共用
  • 確認ダイアログのパネル高さとボタン位置を `confirmLabels().length` に応じた自動調整に変更し、3 行のハードコードを廃止
  • 宣言ダイアログの寸法を全面的に `scaleI()`(`rowScale` に追従)に変更し、統一シェル `mdlModalChrome` を再利用
  • 文言を「モデルのダウンロードと利用に関する声明」全文に変更。`第X条` と `特別説明` を自動で太字の小見出しとして認識
  • タイトルカード(第 166〜211 フレーム)の「Verity JE」を「Verity-CN」に変更。セル 13.82px、字形 6×8 でピクセル単位に複製
  • 元のフレームは `intro_video/_orig_title/` にバックアップし、修正した 52 フレームを `dev/patches/assets/verity/textures/intro/` に注入
  • 保存ボタンをヘッダー内で垂直中央(`by = (headerH()-bh)/2`)に配置し、「Settings」行の中線にぶら下がらないようにした
  • 保存ボタンの外観を統一描画 `drawBtn` の再利用に変更:変更ありは主色 `V_PRIMARY`、変更なしは枠線の灰色 `V_OUTLINE`
  • 保存ボタンのサイズを `76×26` → `64×24`(GUI スケールに追従)に変更し、1.25 倍のラベルを廃止
  • 保存ボタンを `52×18` → `76×26`(GUI スケールに追従)に変更し、角丸も同時に拡大、ラベルは 1.25 倍
  • 「保存せずエディタへ」は先に `discardAll()` を実行してからエディタへ入るように変更し、ダイアログ文言に「(保存しないと破棄されます)」を追加
  • 歌詞エフェクト編集の `NCM_LYRIC_*` 16 項目を遅延保存のスナップショットから除外し、保存ボタンを点灯させず破棄による復元も行わない
  • アカウントページの `verityBridgeKey` を遅延保存から除外し、入力または変更で即座に永続化
  • 設定画面を遅延保存に変更。変更はメモリのみに書き、`dirty()` はスナップショットを 1 項目ずつ比較し、「保存」を押したときだけ `SPEC.save()` する
  • `PersonaEditorScreen` の終了時に自前で永続化せず、設定ページと一括で保存するように変更
  • 入力欄は `...` を描かず、はみ出しは文字単位で裁切。未フォーカスは先頭から表示し、フォーカス時はカーソルが端を越えたときだけウィンドウをスライド
  • マウスのクリックはカーソルをクリックした文字へ置くだけで、ウィンドウは変更しない
  • 入力欄のウィンドウ起点を `visS` に変更し、カーソルによってのみ押し出される。裁切の端を越えたときだけ最小ステップで移動
  • 未フォーカス時の超長表示を `clipMid` の中間省略に変更し、ウィンドウ両側の隠れた内容にそれぞれ `...` を表示
  • `["AI 設定"."LLM"]` を画面の 4 パネルに合わせて再配置し、「プロバイダを選択」の直下に対応する設定項目を並べた
  • LLM / 音楽 / CN版のキー名を UI ラベル名に統一し、`llm`、`ncm`、`cores` の呼び出し点接頭辞を除去
  • `config/verity-client.toml` を新しいキー名とグループに合わせて再配置。Key の値は保持し、旧ファイルは `verity-client.toml.pre_llm_reorg.bak` にバックアップ
  • `LlmMode.PRESET_FREE`、`TtsMode.MIMO`、`SttMode.MIMO` を `BUILTIN` に統一改名
  • `llmFree*Key` を `llmBuiltin*Key` に統合し、`LLM_FREE_PROVIDER` を `LLM_BUILTIN_PROVIDER` に変更
  • 既存の `config/verity-client.toml` は同期的に改名/削除済みで、Key の値は保持
  • `VerityConfig` の各項目の `.define(...)` 既定値を現在有効な値に変更(Key、`MUSIC_U`、歌詞エフェクトの値を除く)
  • 設定グループをゲーム内 UI ページに合わせて再配置し、既存の `verity-client.toml` も同期して再配置、`verity-client.toml.pre_reorg.bak` にバックアップ
  • アカウントページは `verityBridgeKey` を除き、ユーザー名/メール/ポイント/サーバー側モデル/接続性をメモリ値に変更し、設定へは書き込まない
  • このスイッチをオフにすると、LLM/TTS/STT の未有効化と返答ルール未一致の通知が静かになる。スイッチとルール自体は従来どおり機能する
  • tick スキャンの `bounceOffEntities` は `LivingEntity` のみを処理するように変更し、飛翔物は毎 tick の点スキャンに参加しない
  • `PersonaHelper.buildCoresPrompt` の Allowed Faces を中性/喜び/真剣から全表情へ拡張
  • CN では `VerityEntity` が落下ブロックに当たったときの反応を友好的なフィードバック `playCallSound("いたた")` に変更。バニラは元の激怒台詞を維持
  • 着地時の水平反発係数を `1.35 → 1.6`、上限を `0.8 → 1.0` に変更(`VerityEntity.lambda$causeFallDamage$2`)
  • 着地時に水平速度にも弾性を付与(係数 1.35、上限 0.8)。水平速度が 0.02 以下のときは処理しない
  • `VerityEntity` の壁衝突時の水平反発係数を `0.6 → 0.8` に変更(X/Z 各 1 か所)
  • 着地の跳ね上げ力を `min(sqrt(落差)*0.22, 0.7)` から `min(sqrt(落差)*0.32, 1.0)` に変更
  • リングの軌道色を `FAINT` に戻し、アクティブ区間は純白を維持、最小可視弧は引き続き 26°
  • リングの軌道色 `FAINT` を `DIM` に変更し、最小可視弧 `RING_MIN_SWEEP` を 14° → 26° に変更
  • ワールドに入ると実コンテキストを表示:`onPlayerJoinWorld` が `MemoryHelper.primeContextEstimate()` を呼び `actualContextChars` に書き込む
  • 着地、スニーク右クリックでの投擲、マグマ、サボテン、爆発を `VerityEntity.playCallSound` に統一し、「落下時の鳴き声」設定に従って発声
  • 3 種類の「破壊された」台詞を中性的な中国語に変更し、チャット欄へ放送せず CLI パネルのプレイヤー行動と最終返答の 2 行に書き込むように変更
  • 下部バーのリングと数値を `actualContextTokens()` / `contextCapacity()` に統一し、実際に LLM へ送られる完全なコンテキストの割合を表すように変更
  • 数値は引き続き `contextTokens()`(今回のセッションでの増分)を使い、リングは `actualContextTokens() / contextCapacity()` に変更。`begin()` は `contextCapacity` を消さなくなった
  • 「返答条件」のチェックマークをさらに右へ 1px(オフセット `+1` → `+2`)
  • 「返答条件」のチェックマークを右へ 1px(`ckX = cx + (17 - tw("✓"))/2` にさらに 1 を加算)
  • `VeritySpawnScheduler` のチェスト内イースターエッグを、プレイヤー行動と最終返答「へへ、おれを閉じ込めておけると思うなよ~」の両方を CLI パネルに記録するように変更
  • `VeritySpawnScheduler` と `ChestCloseHandler` の CN ガードを撤回し、チェスト内イースターエッグが CN でも発動。台詞は「へへ、おれを閉じ込めておけると思うなよ~」に変更
  • CN 版設定ページ上部の説明を 1 文に簡略化:バニラの設定を踏襲し、ホラー変身も夜の訪れもなく、人格は中性的な Minecraft アシスタント
  • CN では変身、一掃、極限の暗闇、窓外の悪魔、村人の一掃、激怒台詞、チェストのイースターエッグなどホラー行為のそれぞれに `!isCores()` ガードを追加
  • `PersonaHelper.buildToolRules` は CN で `transform_following_day`、`forgive`、`transform_back` の動作を削除
  • AI 設定のグループ順を「記憶→返答ルール→その他→スキン」から「記憶→返答ルール→スキン→その他」に変更
  • `ClientChatHook` はチャットをパネルへミラーしなくなり、実績、コマンドフィードバック、システムメッセージ、他人の発言はすべて `VerityToast` へ回す
  • 初回ワールド入場時の 3 つの無料案内を「本模組永久無料 · 課金はすべて詐欺! · B站 @xzy4260」の 1 行に簡略化
  • 下部バーを「所要時間+速度+キャッシュ+コンテキスト」から「所要時間+コンテキスト」に簡略化(`RING_SEG=1`)
  • コンテキストリングの進入区間を純白に変更し、最小可視弧 `RING_MIN_SWEEP=14°` を追加
  • プレイヤーメッセージの先導記号を `>` からピクセル画の塗りつぶし右三角 `▸` に変更
  • CN版の主体的返答の「システム上書き」プロンプトを中性的な表現に変更(`PersonaHelper.isCores()` の分岐)
  • CN の人格プロンプトから「怪物に変身しない、世界を暗くしない」などの逆説的な記述を削除し、中性的な身元と関係の傾向のみを残した
  • 「必ず名前を呼ぶ」を単独行から「返答条件」グループの 4 番目のチェック項目(`REQUIRE_VERITY`)に変更
  • CN版の人格プロンプトを中性的な Minecraft アシスタントとして再構成(`PersonaHelper.buildCoresPrompt()`)。ホラー的な記述の分岐は関与しない
  • CN版の人格は語気を規定せず、感情値は従来どおり関係の傾向に影響する
  • 設定画面の CN版セクションを説明文に変更:現在はすべてバニラ(ホラー)モードの設定を継承し、専用設定は後日独立させる
  • バニラモードのセクションを `LLM/TTS/STT 有効化`、黒化日数、村人の殺害、旧版アイテム機構の 4 項目に収束
  • 「必ず名前を呼ぶ」をバニラモードから AI 設定・返答ルールへ移し、`ckG` のチェック項目(`REQUIRE_VERITY`)に変更
  • ローカル推論時はモデル名に「ローカル推論 ·」の接頭辞を付けず、ローカルモデル名そのものを表示
  • 「常時」モードのパネル不透明度をバニラチャット欄の 200 tick のリズムに変更:180 tick は全輝度、その後 20 tick で線形にフェードアウト
  • パネルの表示リズムを `VerityLlmSession.contentSerial` と `ModClientEvents.onClientTick` で駆動するように変更
  • 主体的返答はトリガー時に `begin()` でセッションを開始し、思考、ツール呼び出し、返答をすべてスクロール表示。最後の 1 文は引き続き SYSTEM として記録
  • 思考中に届いた新しいチャットメッセージはそのまま破棄し、toast「Verity は考え中です。少々お待ちください」を表示。CLI パネルのスイッチとは無関係
  • 「常時」モードはバニラチャット欄の点灯タイミングに追従(チャット欄を開く/セレクタ/会話中/10 秒以内に内容がある)
  • 「常時」モードでは `begin()` がログを消さなくなり、再点灯時は既存の内容を引き続き表示
  • Verity の会話返答は「常時」モードではバニラのチャット欄へ放送されなくなった(`VerityLlmSession.alwaysHooked`)
  • 「常時」は純粋なシングルでのみ有効。マルチ環境では自動で「混合」に降格し、設定内の表示値は書き換えない
  • LLM/TTS/STT/音楽の 4 つの有効化スイッチをバニラ専用キー `vanilla*` に変更し、CN版は今後 `cores*` を使って互いに干渉しないようにした
  • 4 つのスイッチは改名によりアップグレードで既定値に戻る(LLM/TTS/STT はオン、音楽はオフ)。もう一度切り替えればよい
  • AI 設定の TTS/STT グループから「有効化」の総合スイッチを外し、実際の TTS オプション `TTS_STREAM` を残した
  • キー不要プロバイダのセルフチェックで `keyState` に「キー不要」を表示し、共通の `checkLlm` を通す
  • 無料一覧から id に `-free` を含むモデルを除外し、Anthropic 系を通る `union-alpha` も除外
  • モデル検出の判定:名指しの拒否または 404 は除外、403 は「(地域制限)」と表示、429/5xx/タイムアウトは保持、1 巡すべて拒否ならすべて保持
  • キー不要のレーンでは Key の入力を促さず Key 欄も表示しない。地域制限の行を設定へ書き戻す際は注記を自動で剥がす
  • `AiAPI` のリクエスト経路は `OurFreeModel.isCurrent()` の分岐を 1 つ追加しただけで、他の 9 社のコードは変更していない
  • SYNC の補正を `seekOffsetMs` の変更のみから、偏差 >800ms かつ前回の再同期から >3s のとき `seekTo()` で実際にストリームを開き直す方式に変更
  • `streamPlay` はクロックを書き戻さなくなり、自機のクロックがサーバー側のタイムラインへ直接マッピングされる
  • サーバー側の放送、JIP の再送、SYNC tick が統一してアンカーの timestamp を運ぶように変更
  • オーディオラインを先に `open` し、校正完了後に `start()` するように変更
  • `resumeSong` をローカルの `line.start()` から、サーバー位置を取得して `doSeek` でストリームを開き直す方式に変更。全員が同じ位置から入流する
  • ログページのリスト位移動アニメーションの key に `logDebugShown()` を追加し、「詳細ログ」の切り替えと ALL/INFO/WARN/ERROR の切り替えが同じアニメーションを通るようにした
  • `/cnv mplay`(id なし)のメッセージを「再生開始」から「再生を再開」に変更
  • `CnvCommand.musicMsg` が曲名に統一して『』を付け、「『XXX』 再生開始」のように表示
  • 「一番好きな曲」を内蔵 mp3 から NetEase Cloud Music の 2115551659 に変更し、`playFavouriteSongEntry` は `playSongById` へ転送
  • `/cnv mplay mygal | favorite | fav` を同じ id にマッピングし、人格プロンプトは `ncm_play` で再生するよう誘導するように変更
  • お気に入り曲のローカルデコード経路をサーバー側プッシュの経路に統一し、専用サーバー側にオーディオデバイスを開くコードを一切残さない
  • `VerityLog.debug()` を「スイッチが書き込み前に掛かる」から「常に記録し、スイッチは表示のみを制御する」に変更。バッファの淘汰は最古の DEBUG を優先的に破棄
  • `VerityToast.show` は行頭の 12 文字以内の `[TAG]` を剥がし、`[网易云]` / `[联网搜索]` のリテラルを削除
  • マルチでは `LyricEditorScreen` が音楽コントロールブロックを描画しなくなり、`paramsBlockH()` は 0 を返しマウス命中はブロック全体をスキップ
  • 歌詞エディタの「保存」を `close(true)` から `saveNow()` に分割し、設定の書き込み+永続化+toast のみを行い画面を終了しないように変更
  • マルチの案内文を「ゲームは一時停止しました」から「マルチプレイ · ゲーム時間は進行中(ワールドは一時停止しません)」に変更
  • `/cnv` の全サブコマンドと `/recoververity`、`/changekarma` のフィードバックを `CnvCommand.feedback()` に変更:プレイヤーには toast、コマンドブロックとコンソールは引き続きチャット欄へ
  • `VerityToastRenderer` を再制作:GUI の高さに応じてスケール(≥480 は等倍、≤240 は 0.88 に縮小)。超長文はコードポイント単位で折り返し、行数を制限
  • toast アニメーション:単行↔単行は共通接頭辞でスライド。どちらかが折り返す場合はボックス全体のクロスフェードに退化
  • 歌詞 emoji の垂直オフセット `SHIFT_Y` を 3.0 から 2.2 に変更
  • カラーピッカーのドラッグと入力がスナップショット `p` へリアルタイムに書き込む(`pkLiveApply`)。空白クリックでの閉じも確定クリックも設定を書かず、「保存して終了」だけが永続化
  • 終了確認ダイアログのカード面の不透明度を `C_CARD 0.88f` に変更し、タイトル行の左に `drawWarnIcon` の三角警告アイコンを追加
  • 本模組の状態とエラー通知をすべて `VerityToast.show` に変更。キャラクターの台詞、コマンド出力、リンク付きのお知らせは引き続きチャット欄に残す
  • emoji 描画パラメータ:`SIZE` 9.0 → 7.0、`SHIFT_Y` 1.0 → 4.5 → 3.0、`SHIFT_X` 0.0 → -0.9
  • emoji 字形をホワイトリストのコードポイント(`231A-23FA` / `2600-27BF` / `2B00-2BFF` / `1F000-1FAFF` など)に制限し、emoji 以外は null を返す
  • 歌詞描画を「前の句が下がり、次の句が下に止まる」に戻し、空行をまたいで非空句を取る `nextNonEmpty` と「(インスト)」のプレースホルダを維持
  • ドットの見た目:色 `0xFFFFFF` → `0xF9E9C5`、1px の黒い下敷きを削除、間隔係数 1.8 → 1.3、呼吸周期 900 → 1500ms
  • ドットの位置を、前の句の下の行で垂直中央に置き、前の句の方向へ `max(1, round(textH*0.2))` だけ微移動するよう変更
  • `hasUnsavedChanges()` から残留していた `dragLive` 条件を外し、`pLoaded && !sameAsOpened()` のみを残した
  • ドットを 2px の灰色 `0xAAAAAA` 0.6 から 3px の白 `0xFFFFFF` 0.85 に変更し、点の間隔を広げた
  • 設定のテキスト入力欄を行ごとに上限を区分:cookie 行は 8192、その他の行は 255(`textCap()`)。Ctrl+V の経路も含む
  • `/song/url/v1` に `Cookie: MUSIC_U=…` リクエストヘッダーを追加送信。クエリパラメータは維持
  • 逐字彩色のフェードアウトする旧行に `Long.MAX_VALUE` を渡していたのを、実際の再生位置を渡すように変更
  • 逐字歌詞を文字ごとのカラオケ式の連続彩色に変更。`LyricLine` に `wordEnd[]` を追加し、同期パケットの単語あたりの数値を 2 個から 3 個に変更
  • toast の表示時間 `VerityToast.SHOW_MS` を 1800 から 3000 に変更し、設定画面の toast も同期
  • 翻訳行はタイムスタンプの厳密な対応付けを維持し、「最近の時刻+1500ms のウィンドウ」方式を撤回
  • 歌詞インターフェースを `/lyric` から `/lyric/new` 優先に変更し、失敗時は `/lyric` に戻す
  • YRC の行頭正規表現が `[start,dur]` と `[start,dur,0]` の両方に対応。単語の時刻は絶対ミリ秒で解析し、相対表記にも対応
  • `parseLrc` が `/lyric/new` の JSON 形式のメタデータ行(作詞/作曲/編曲)に対応
  • パネルの折りたたみ/展開をハードジャンプから `foldT` の指数緩動+クリップに変更し、幾何は常に展開状態で計算
  • 曲情報スイッチの明度を hover 駆動から `onT` 状態駆動(`drawSwitch`)に変更し、オン後は常にほぼ白を維持
  • `dev/tools/editor_geom_check.py` を 9 段階の解像度 × 広/狭 × 4 種のパラメータ行数の計 72 通りに書き直し
  • 「文字サイズ」を「歌詞の文字サイズ」に改名し、行構成を再配置(行数は引き続き 8、パネル高さは不変)
  • 垂直/水平の間隔を判定枠の枠線と四隅のドラッグで調整するように変更。枠内のドラッグは引き続き位置
  • フェードアウトする旧行をアクティブ色を保ったままフェードアウトするように変更し、末尾の二乗減衰は維持
  • 再生アドレスの事前チェックを `stopCurrentPlayback()` より前に移動し、アドレスが取れない場合は `vip_or_unavailable` を返して旧曲に触れない
  • 長さを `PlaybackTask.realStreamDurationMs`(試聴の終点または size÷br)に変更し、パネルが時刻同期のたびに更新
  • パネルの再生/一時停止/シーク/選曲をすべてバックグラウンドスレッドに移し、応答は `mc.execute` で toast を表示
  • ID エラー、試聴のみ、VIP 試聴での再生開始の toast 文言を短くし、区別できるようにした
  • HUD、エディタパネル、プレビューが再生状態を `active*()` から読むように変更
  • 長さは優先的にローカル再生タスクのミリ秒値を取り、取れない場合は状態インターフェースに戻すように変更
  • 整列のガイド線の配色をシアン `0xFF22D3EE` に変更:吸着時は 2px の実線、非吸着時は同色 35% の破線
  • スライダー、歌詞のドラッグ、色の取得はメモリ上のスナップショット `p` のみを変更し、離しても設定を書かなくなった
  • 書き込みのタイミングを閉じる時に集約:`applyToConfig()` が 8 項目を書いた直後に `SPEC.save()`
  • 未保存の判定を `p != opened`(開いた時点のスナップショット)という口径に回帰
  • 「終了(保存しない!)」は直接画面を閉じるように変更——設定は終始変更されていないため、ロールバックは不要
  • 再生ボタンの三角アイコンを、中線が最長で上下対称に減少する完全な ▶ に変更
  • SV の照準を「半径 5 の塗りつぶし円+2px の黒いリング」から「半径 `s(3)` +1px の外リング」に縮小
  • パネルは極小の GUI 空間で超過量に応じて行高を均等に圧縮し、下限は `s(11)`
  • カラーピッカーの幅 `pkW()` を `pkPad()*2 + pkSv()` から逆算するよう変更し、SV の正方形と自然に同じ幅になった
  • 下部のフィールド行を利用可能な幅の比率で配分:色ブロック 13%、HEX 26%、3 つの RGB が残りを均等割り
  • パネルのアクティブ色/待機色のレイアウトを `R,G,B #RRGGBB` に変更し、狭い画面では HEX を優先
  • 編集画面の歌詞を `currentLineIndexPublic()` から取るように変更し、HUD と同源にして上へスライドしてフェードするアニメーションを複製
  • 「サンプル(再生していません)」の判定を `realLineIndex() >= 0` に変更
  • 選曲失敗の通知は `CnvCommand.musicMsg` の口径を再利用:試聴/VIP なしと曲が存在しない場合にそれぞれ対応する文言を出す
  • カード面の `C_CARD` の alpha を不透明から `0x8C` に下げ、枠線を半透明の `C_BORDER_H(0.55)` に変更
  • 全画面オーバーレイを `0x50101014` から `0x30101014` に下げた
  • カラーピッカーを 3 本の水平カラーバンドから標準的な HSV ピッカーに作り直し:色相バー+SV スクエア+垂直の明度バー
  • 終了確認の 3 つの選択肢の文言を「キャンセル/保存して終了/終了(保存しない!)」に確定
  • 確認ダイアログのボタン幾何を `cfBtnW/H/Gap/X/Y` に抽出し、描画と命中判定が同じ 1 つの値を使うように変更
  • `isPauseScreen()` を常に false から `Minecraft.isSingleplayer()` を返すように変更:シングルは一時停止、マルチは一時停止しない
  • 歌詞の進捗は `System.currentTimeMillis()` に基づき、シングルの一時停止中も実際の再生に追従して進む
  • エディタの幾何をハードコードのピクセルから統一的に `rowScale()` を通すスケールに変更し、パネル、行高、内側の余白、スライダー、カラーピッカー、確認ボックス、四隅のハンドルをカバー
  • スライダーの塗りの右端とつまみの中心を統一して `sx + sw * t` で位置決めし、`applySlider()` と厳密に互逆にした
  • プレビューの左右のずれを、第 0 行を左にずらすハードコードから `LyricHudRenderer.currentLineIndexPublic()` を読んで実際の行番号を取るように変更
  • エディタの配色とコントロールの形態を `VerityConfigScreen` の shadcn 風格に合わせ、カード面の角丸、3 段階のボタン、スライダー、カラーピッカーを含む
  • すべての hover を `ease(cur,target,dt,speed)` の指数緩動に変更し、フレームレートに依存しなくなった
  • 判定枠を、ドラッグ中のみ表示し曲全体で最も広い行から推定する方式から、毎フレーム現在の 2 行の和集合を常時表示する方式に変更。翻訳行と実際の行間を含む
  • ダウンロードの完全性チェックを、宣言値 ×0.98 からサーバーの `Content-Length` を基準にする方式に変更。宣言値はあくまで補助で、許容差も半分未満に緩めた
  • 進捗の総量を実際の値で補正し、プログレスバーが 95% で止まってから突然完了に跳ぶのを回避
  • コンテキスト圧縮を、ローカルとクラウドのどちらも閾値に達したら選択ダイアログを出すように変更。「今は圧縮しない」を選ぶと履歴がさらに 8% 伸びてから再び問い合わせる
  • 圧縮中にメッセージを送ると拒否され toast が出る。パネル上部に「コンテキスト圧縮中」のバナーが常駐
  • 圧縮 UI は圧縮対象のテキストと LLM へ送るリクエストを表示しなくなり、閾値の案内、選択肢、分割の進捗のみを残した
  • 圧縮セレクタを下部固定に変更し高さを予約。待機中は下部のタイマーを凍結しパネルを表示したままにする
  • ゲーム内 toast を `height-78`(GUI 空間の固定値)へ移動し、ホットバー、経験値バー、チャット入力欄と重ならないようにした
  • toast の描画を `gui/VerityToastRenderer` に抽出し、ゲーム内と設定画面で同じ実装を共用、低 alpha 時の描画スキップも補った
  • 圧縮オプションの文言を「今は圧縮しない」に変更し、`MemoryHelper.compressOptions()` に切り出して `/cnvtt selector` と同源にした
  • Android のネイティブライブラリの解包先を外部ストレージから内部ストレージ優先(`org.lwjgl.librarypath` / tmpdir / user.home)に変更
  • `shortMsg` の切り詰め上限を 220 から 480 に変更し、dlopen エラーの重要な半句が切られないようにした
  • 狭い画面のレイアウト:サイドバーのハードコード下限 132 を画面幅の最大 34% に変更、カード幅 `max(240,…)` を `max(80,…)` に、ダイアログの余白 `sw-80` を `sw-32` に変更
  • ヘッダーの高さ、余白、下端の余白を画面の高さに応じて縮小。600×270 で内容領域の高さが 144 → 195
  • ネイティブライブラリの読み込み失敗をそれぞれ 1 行ずつ記録(REPORTED で重複排除)し、グループの「1 つでも成功すれば準備完了」で覆い隠されなくなった
  • `stage_runtime.py` の Android 用 jnidispatch を `verity-runtime/<plat>/` と `varmite/jna/android-<arch>/` の両方に書き込むように変更
  • ローカル推論の出力を、事後の LlmOutput.salvage による救済から、サンプリング前に GBNF 文法制約を読み込む方式に変更
  • LlmParams.jsonMode は既定の false を維持し、AiAPI の対話経路でのみ明示的にオンにする
  • 既知のコスト:文法による強制エスケープでは台詞に引用符が含まれると切り詰められる可能性があるが、形式は常に正当
  • JSON 解析失敗時はプレーンテキストを message として扱い actions を空にし、会話はそのまま使えるように変更
  • PersonaHelper の [PlayerName] 注記を読み取り専用にし、その語を出力しないように変更
  • 圧縮のトリガー点を、ローカルは換算値の +85%、クラウドは 131072 + 80% を維持するように変更
  • 圧縮の成果物を least.md の本文形式に変更し、直近の会話はそのまま保持してモデルに言い換えさせない
  • コンテキストと返答の長さをハードコードに変更。CTX_SIZE を 8192 から 12288 に、MAX_REPLY_TOKENS = 1024
  • 毎回の対話の前に llama_memory_clear で KV キャッシュを消去するように変更
  • 超長時は最古の非 system メッセージを 1 件ずつ破棄するように変更し、人格設定を保持
  • decode 失敗の情報に実際のプロンプト token 数と n_batch / n_ctx を含めるように変更
  • モデル詳細ダイアログの右下の主操作を、未ダウンロード/処理中/準備完了の三態に変更
  • ダイアログの主操作ボタンの幅を文言に応じて自動調整 `max(96, tw(label) + 22)` に変更
  • ハードコードのフォールバック一覧に ggml-cpu-* の各グレード名を追加
  • JNA パッケージ全体を varmite/jna と varmite.jna に再配置し、jnidispatch は等長のバイナリ置換を実施
  • デスクトップ側はグローバルな jna.boot.library.path を設定しなくなり、jnidispatch は jar のプライベートリソースパスに置くように変更
  • ローカル LLM をサードパーティの JNI バインディングから、公式 llama.cpp CPU パッケージ+自作の LlamaCpp.java に変更
  • チャットは GGUF に同梱の対話テンプレート llama_chat_apply_template を適用するように変更
  • CPU 命令セットのゲートは UI のグレード表示にのみ使うように変更し、CPU が古いことを理由にローカル LLM を無効化しなくなった
  • stage_runtime.py を dev/_vendor/lc/ の公式パッケージを使うように変更し、プラットフォームごとに CPU 変種を絞り込む
  • LocalInferRuntime の 3 つの入口を各ライブラリの Java API を実際に呼ぶように変更し、モデルインスタンスをモデルごとにキャッシュ
  • m_88315_ のグループアニメーションと再配置の全体を try/catch で包み、例外はログに記録するだけでそのフレームの描画をスキップしなくなった
  • 詳細/ダウンロード管理ダイアログのオーバーレイ層 `mdlModalChrome` を書き直し:メインフレームバッファを読んでのぼかしをやめ、純粋な `fill`/`rr` の 4 層スタック(暗転→中心スポットライト→投影→浮き上がった表面+枠線+ハイライト)に変更
  • 「モデルを選択」サブメニュー `renderModelModal` は引き続きフレームバッファのぼかしを保持(同じ 3 つの欠陥は未対応)
  • `renderModelModal` のぼかしバッファを再利用する保持ロジックを削除し、`!mmOpen` のときバッファを直接解放するように変更
  • 「モデル詳細」ダイアログを全面的に作り直し:種類/等級の pill+状態 pill、モデル名を 1.25 倍に拡大、4 マスのスペック小カード、HF データを 3 マスの指標カードに、ファイル一覧を自動折り返しの chip に変更
  • 「ダウンロード管理」ダイアログを全面的に作り直し:タイトル行→概要バー→タスクカード一覧(1 枚 88px、状態の縦バー、角丸のプログレスバー、一時停止/再開/削除を含む)。空状態は中央のアイコン+2 行の案内に変更
  • 2 つのダイアログの幾何を `mdlDetailGeom` / `mdlMgrGeom` に収束し、命中判定は描画時に埋めたボタンのフィールドを直接読むように変更
  • 詳細ダイアログの内容項目を文字列の接頭辞から構造化された `DLn`(kind + 固定高さのテーブル)に変更し、測定と描画が同じテーブルを使うようにした
  • パネル外のクリック=閉じるに変更し、「モデルを選択」ダイアログと同じ挙動にした
  • クリックの波紋を、実際に押した位置を中心に四隅へ広がる円形の波に変更。ボタン内でクリップし、すべてのボタンで統一的に機能
  • 詳細/ダウンロード管理ダイアログの入場を、背景のぼかし+暗いオーバーレイ+パネル中心のスケール/上へスライド(220ms easeOutCubic)の再利用に変更
  • 左側の TAB を再配置:「機能設定」と「Verity アカウント」の位置を入れ替え、「セルフチェック」の上に「モデルダウンロード」を追加
  • セルフチェックと接続性チェックに 3 層のフォールバックを追加:描画側のウォッチドッグが 90s(接続性は 150s)を超えると強制的に「✗ チェックがタイムアウト」と判定しボタンを復帰
  • バックグラウンドのチェックは全体で Throwable を捕捉し、アカウントページの `connBusy` の復帰を finally の意味論に変更。例外でボタンが「チェック中…」に固定されなくなった
  • 各セルフチェックの完了後にログを書くように変更(例 `[verity-config] self-check LLM -> …`)。latest.log からの特定が容易になった
  • `VeritySelfCheck` は単一の HttpClient(クラスレベルのシングルトン)を再利用し、複数回のチェック後の selector スレッドの蓄積を回避
  • `VerityAccountBridge` の 3 つの test* メソッドの catch を Exception から Throwable に緩和
  • Mimo の音色クローンのモデル名を `mimo-v2.5-tts-voiceclone` から `mimo-v2.5-tts` に修正(AiAPI / VoiceCloneHelper / セルフチェック / 設定画面の 4 か所で統一)
  • ダイアログを開いている間は下層のホバー/押下のハイライトが透けなくなった。選択点を緑から白に変更。確定後は自動で Model 入力欄へ反映
  • 行ごとのスタッガードフェードインを削除(長いリストをスクロールすると行がどんどん薄くなりついには消える根本原因)
  • ダイアログのスクロールバーがトラック全体をつかんでドラッグできるようになり、押しても変位しない
  • 折りたたみ可能なグループは、閉じているとき「クリックで展開」、開いた後は「クリックで折りたたみ」を表示し、常に「クリックで展開」を表示しなくなった
  • ログ一覧のスクロールバーはページと同じ実装を再利用(`thumbGeom` でつまみの最小 24px、`drawBar` の見た目、トラック全体をつかめる)。自作の細いつまみ版は廃止
  • 右クリックの「メッセージ内容をコピー」メニューを削除し、左クリックで行の任意の位置をクリックすると `[レベル] 時刻 メッセージ` の行全体をコピーするように変更
  • ログ一覧を 2 段階のトランジションに変更:第 1 段(220ms)は消える行がその場でフェードアウトし残る行は動かない。第 2 段(430ms)は残る行が揺れてから落下(約 6.6% のオーバーシュートで跳ね返り)、新しい行が上へ移動してフェードイン
  • セルフチェックページの LLM/TTS/STT の名称、モード・詳細、右側の結果の 3 か所の y オフセットを by+10 に統一し、マイク行も同期して整列
  • chip の幅をチェックマーク/テキスト/件数と同じフレームで同源に計算し、テキストと数字の間隔を 5px に固定
  • ログ一覧の移動を ease-out-back(収束係数 1.2)に変更。透明度は引き続き線形
  • レベル絞り込み chip のチェックマークの展開と幅の再配置の緩動速度を約 1.7 倍に上げた
  • ログ一覧のトランジションを全体的に線形に変更:残る行は FLIP、新しい行は上へ移動してフェードイン、離脱する行はその場でフェードアウト
  • toast の旧差異テキストを「ボックスの縁に沿って 1 文字ずつ縮んで消える」方式に変更。ボックス幅が縮むとき右縁が掃く文字は描画せず、縁に近い文字が先に薄くなる
  • レベル絞り込み chip を動的な幅+水平方向の再配置に変更(チェックマークが最初の子要素で、未選択時は width/opacity が 0 に、右側の chip が前段の幅に追従して平行移動)。垂直方向の変位はゼロ
  • 離脱するログ行を 0.7 行高だけ下へ移動しながらフェードアウト(260ms ease-out)するように変更。離脱行を先に描き、残る行をその上に重ねる
  • toast を共有要素/FLIP のトランジションに変更:新旧の文言の最長共通接頭辞で補間スライドし、差異の部分をクロスフェード(ease-out 260ms)。同じ値で再発火したときは完全に静止
  • レベル chip のチェックマークを `m_280509_` の塗りつぶし矩形から 1 ピクセルずつの線描に変更し、左側の 8x8 のチェックマーク用スロットへ再配置
  • ログ一覧を行レベルの FLIP に変更:`entry.time` を key とし、残る行は新しい位置へ補間、新しい行は下からスライドイン、消える行はその場でフェードアウト(260ms ease-out)
  • セルフチェックページの `checkResult` を `Map<String,String>` から `ConcurrentHashMap<String, VeritySelfCheck.Result>` に変更し、`runCheck` は `put(name, Result.running())` の後でバックグラウンドで 1 つずつ `check()` するように変更
  • アカウントページはログイン状態の期限切れで自動ログアウト:`doFetch` がアカウント情報を取得する際、サーバーが明確に無効と確認したときだけ `logout()` する。HTTP 401/403/404 またはレスポンス本文が無効/期限切れ/未認可を明示した場合を根拠とする
  • 設定ページへの進入(`VerityConfigScreen.init`)とアカウント Tab への切り替え時にログイン状態を自動検証(4s のスロットリング `refreshSync`)。ログインのポーリング成功後に更新
  • `doFetch` を `TRUST_ALL_HTTP` に変更(testLLM/TTS/STT と一致)。`autoLogoutOnServerExpired` に再入防止のガードを追加
  • ボタンコンポーネントに Flutter の InkWell 風の動効を追加:押下時に 5% の押し込みスケール、命中後に 420ms の白い波紋を再生。`m_6375_`/`m_6348_` がタイムスタンプと座標を記録
  • ログページ上部の「本模組のみ · メモリ N 件 · 絞り込み後 N 件」のテキスト行を削除し、chip 行を全体として上へ移動
  • セルフチェックページ/ログページのカード内の重複した「セルフチェック」「ログ」の見出しを削除
  • ログページの状態通知を toast に変更(`logStatusSet` を `showToast` に退化、フィールドは `logStatus/logStatusAt`)
  • 「詳細ログ」スイッチが実際に Bridge の更新ログを制御するように変更:アカウント検証の高頻度な 4 本のフローログを `VerityLog.debug` に降格
  • TTS 内蔵プロバイダパネルのモード選択を最初の行へ移動し、Model と Key の表示内容を決めるようにした
  • Model 行はプリセット時は必須の入力欄だが、音色クローン時は固定値の表示に変更し入力欄を与えない
  • ドロップダウンは新しい値を選択したときにフェードインとわずかな上へスライドのトランジションを追加
  • 参照音色をクリックで循環からドロップダウン(Verity / 阿神と同款 / 老牧師 / カスタム)に変更
  • 「ローカルクローン音声」を「カスタム音声」に改名し、参照音色で「カスタム」を選んだときだけ表示されるように変更。「(使用しない)」を削除
  • TTS / STT 内蔵プロバイダの配置を LLM と揃え、余分なタイトル付きのグループ層を 1 つ削除
  • 音色行の表示名を `ttsVoiceUI` から「モード選択」に修正し、選択肢「冰糖」を「プリセット」に変更
  • mod のバージョン番号を `v3.5-beta` に変更し、`VerityConfigScreen.ABOUT_VER` と `META-INF/mods.toml` の `version=` を同期
  • 内蔵の GeckoLib と mclib の 271 クラスを全面的にプライベートな名前空間へ改名し、外部と重複するクラス数を 271 から 0 にした
  • ネットワークチャンネルを `geckolib:main` から `verity_geckolib:main` に変更
  • `AnimatableIdCache` のセーブキーを `geckolib_id_cache` / `geckolib_ids` から `verity_geckolib_*` に変更
  • アイテムアニメーション ID の NBT キーを `GeckoLibID` から `VerityGeckoLibID` に変更
  • Mixin の設定とアクセス変換子を同期して改名(`geckolib.mixins.json` → `verity_geckolib.mixins.json`)
  • 設定画面の入口を Mod マネージャーからゲーム設定へ移行(Mixin 注入)
  • 設定画面を静的なプレビューから実際の設定の読み書きに変更し、変更は即座に保存

修復

  • 起動時に「有効な Mod ファイルではありません」と表示:`mods.toml` のバージョン `v3.5` が Forge の `^\d+.*` 検証に一致しないため `3.5` に変更
  • 左側 TAB のスクロールバーの下端が戻るボタンに届かない:`navBot` を `h - scaleI(50) - 10` に変更し、トラック `navViewH` は全区間を取るようにした
  • 「モデル使用宣言」に同意した後で保存ボタンが明るくなり、終了時に「未保存」が出る:`isImmediateKey` に統合して即時永続化
  • 宣言のスクロールバーとページのスクロールバーのつかみ領域が重なってページが誤スクロールする:`m_6375_` で `scGrabArea` より先に横取りするようにした
  • 同意後に永続化されず次回起動で再度問い合わせる:`MODELS_DISCLAIMER_OK` を `SPEC.save()` +スナップショット更新に変更
  • 「保存せずエディタへ」を選んだ後も変更が歌詞エディタの `SPEC.save()` でディスクに書かれる
  • `discardAll()` が行内入力欄の一時テキスト `this.txt` を消さず、復元後も古い値が表示される
  • アカウントの License Key を永続化した後でスナップショットが更新されず、保存ボタンが「未保存の変更あり」と表示される
  • 入力欄の切り詰め `...` が消える:未フォーカスは先頭から右側を省略、フォーカス時は両側に `...` を 1 つずつ描画
  • 再フォーカスまたは行が `buildCards()` で再構築された後でウィンドウが先頭に戻る:入力欄ごとに `inputWin` でウィンドウ起点を記録
  • 設定ページのスライダーを離した後で塗りが古い位置からアニメーションを再生する。ドラッグ中は瞬間速度で `av` 緩動を呼ぶように変更
  • 飛翔物の反発判定で誤って `m_7639_`(getEntity)を使い射手を取得:`m_7640_`(getDirectEntity)に変更し `m_7639_` をフォールバックに
  • `VerityEntity` の衝突箱と可視球がずれる:`m_142242_()` を球心が `pos.y + 0.25` にある 0.5 の立方体を返すように変更
  • `SphereRenderHelper` の可視球心が衝突箱の中心より 0.125 高い:最初の区間の変位を `0.5 → 0.375` にして球心を `pos.y + 0.25` に戻した
  • 弓矢が球に命中しても反発が発動しない:飛翔物を `VerityEntity.m_6469_` の命中コールバックに掛け、飛行方向に沿って弾くように変更
  • マグマ/爆発/サボテンと落下ブロックの命中などのローカルフィードバックが CLI パネルにしか書かれない:`addMessageToHistory` の user/assistant 記録を追加
  • コンテキストリングの白い弧が分母 `contextCapacity` が 0 のため描画されない:`ModEvents.onPlayerJoinWorld` で分母も設定するようにした
  • 爆発とサボテンの効果音が無音:`playCallSound` をサーバー側ワールド `m_5594_` から再生するように変更し、TTS モードでは近くの Verity エンティティに優先的に掛ける
  • プレイヤー自身のチャットのエコーが重複して toast になる:`ClientChatHook` の `isOwnEcho()` でスキップ
  • コンテキストリングの計測位置が messages の組み立てより前:`setContextChars()` を `messages.add(userMsg)` の後へ移動
  • コンテキストリングがワールド再入場で 0 に戻る:`AiAPI.askLLM` が組み立てた messages の各条の文字数の合計から推定するように変更
  • CLI パネルをホイールでスクロールすると余分な行がログ領域の上に描画される(`cap` 行のみを描画し下端に揃えるよう変更)
  • 「返答条件」のチェックマークが枠の中心にない:垂直オフセットを `scaleI(2)` から `scaleI(4)` に変更
  • 初回の CLI 表示時に下部バーのモデル名が空:セッションがないときは現在の設定モデルをフォールバック表示(`AiAPI.currentModelLabel()`、1 秒キャッシュ)
  • 「思考を停止」が即座に効かない:`requestCancel()` が登録済みのアクティブストリームを直接閉じるようにし、思考の打ち切りは `discardLive()` で破棄するように変更
  • `builtinKey()` / `builtinModel()` に `case OUR_FREE_MODEL` がなく、モデル名が NVIDIA のフィールドに書かれて HTTP 401 になる
  • セルフチェックページが Our Free Model に対して誤って「Model が未設定」と報告する(キー不要のレーンは未入力の Key で止めない)
  • 一時停止中に参加したプレイヤーが勝手に再生を始める:サーバーが一時停止中に個々のプレイヤーへ裸の PAUSE を再送するようにした
  • 一時停止中に参加して再開すると一時停止の時間全体が飛ぶ:フレーム校正の目標を `NcmClientPlayer.getCurrentPositionMs()` に変更
  • 途中参加時に約 7400ms の安定した偏差が出る:`handleStart` の時間アンカーを客機がパケットを受信した時点の自機クロックに変更
  • `handleSyncPosition` がマシンをまたいで壁時計を減算していた:SYNC は受信した権威位置 `positionMs()` のみを取るように変更
  • サーバーが送る `timestampMs` はパケット内に保持し、自機の時刻推算には参加させないように変更
  • `doSeek` が新規作成した PlaybackTask に server が設定されず `signalStarted()` が即 return し、シークと再開の放送が出ない
  • 放送側に `pausedDurationMs` / `pauseAtMs` の記帳を追加し、途中入場のプレイヤーの位置が一時停止時間を余分に数えて先行するのを修正
  • `NcmNetwork.sendToAll` が hostPlayerUUID をスキップし、客機が再生を開始したときに自分が START を受け取れない:全員へ送るように変更
  • 発声するかどうかをクライアント側で判断するように変更(`NcmClientPlayer.handleStart` はローカルがサーバーホストのときスキップ)
  • 専用サーバーでローカルのオーディオデバイスを開くと例外になり START の放送が出ない:`streamUrlToSpeaker` が先に `DedicatedServer` を判定するように変更
  • ホストの JVM がサーバー側とクライアント側の両経路で再生して音が重なる:`handleStart` はローカルがサーバーホストのときクライアント側の経路をスキップ
  • `m_7043_()` が誤って `m_91091_()`(`hasSingleplayerServer`)を使い LAN ルームが一時停止画面と見なされる:`m_257720_()` に変更
  • `drawMusicBlock` の全体を try/catch で包み `VerityLog.error` を書くように変更し、例外でマルチ時に音楽ブロック全体が描画されなくなるのを回避
  • 展開アニメーション終了後にクリップ領域の下端が音楽ブロックの下端まで伸び、パネルの高さが内容より数ピクセル足りないときの無言の裁切を覆うようにした
  • `queryDurationMs()` が時刻同期の周期ごとに描画スレッドで同期 HTTP を送る:15s のレート制限を追加
  • 純粋な間奏(空のテキスト行)のとき前の句が消えて次の句も表示されない:通常どおり次の句を表示し、空きには白いドットを描くように変更
  • AI 設定でスキンを切り替えるのに再起動が必要:`setSel()` が `VerityConfig.SKIN` に命中したとき即座に `setSkin()` を呼ぶように変更
  • 翻訳歌詞が設定/インベントリ/チャットなどの半透明画面の下から透ける:HUD 層全体を Screen がないときだけ描画するように変更
  • MUSIC_U が無言で 255 文字に切り詰められ、サーバーが試聴クリップしか返さない
  • 曲名/アーティストが Screen を開いているときに他の画面から透けて表示される
  • 垂直間隔 `vs` を 0 までドラッグでき 2 行が重なる:読み取り側とドラッグ側の両方で ≥ 26(`NCM_LYRIC_V_SPACING_MIN`)にクランプ
  • 判定枠の高さがアニメーションで膨らむ:`fitBox()` を静止位置の現在行+次の行の和集合のみで取るように変更
  • ID 入力欄の既定値(hint)が白で表示される:フレームごとに textColor を切り替え、ヒント表示時は `0xFF71717A`、それ以外は `0xFFF4F4F5`
  • 旧行のアニメーションの立ち上がりで横に跳ぶ(エディタのプレビューのずれ記号が HUD と逆符号)うえ、フェードアウト時にアクティブ色から待機色へ急変する
  • `NcmHelper.getCurrentPlaybackMs()` のローカルクロックが無限に累加し、プログレスバーの時刻が無限に進む:実際のストリーム長にクランプ
  • 上へ移動すべきアニメーションが立ち上がりで一瞬光る:`alpha` を `f2` から `0.6 + 0.4 × f2` に変更
  • フェードアウトの末尾で色の alpha が 64 未満になり強制的に不透明で描画されて光る:`f*255 < 64` のときは描画しないように変更
  • ローカル再生時にパネルが未再生を示し、再生ボタンが常に ▶、クリックで再再生になり、プログレスバーが動かない
  • 編集画面の歌詞が「サンプル歌詞」で止まる——`advanceState()` の再生中の判定を `activePlaying()` に変更
  • ID 入力欄のテキストが中央に寄らない——バニラの枠線を切った後に 4px の左パディングと垂直中央揃えを補った
  • `musicToggle()` の分岐:再生中なら一時停止/再開、未再生なら ID で選曲、空の ID には明確な案内を出す
  • カラーピッカー全体が missing テクスチャとして表示される——`getTexture()` が常に null を返さないため、登録を無条件呼び出しに変更
  • 編集画面の歌詞が進まない——行番号の進行を描画経路から `advanceState()` へ分離
  • ドラッグ後に設定がリセットされる——エディタは開いたときに 1 度だけ読み、毎フレーム反射で読み返さないように変更
  • 保存と「終了(保存しない!)」が効かない——`diskDirty` の判定に変更:前者は永続化してフラグを消し、後者は開いた時点のスナップショットへロールバック
  • `flushPendingConfig()` の競合:キューを空にしてから 1 件ずつ set する間の空白で、直後の `save()` が古い値を書いてしまう
  • toast がマルチで 2 回描画される——`LyricEditorScreen.isOpen()` のとき HUD 側は toast をスキップ
  • ウィンドウや GUI スケールの変更後に toast が再表示される——画面入場の案内に `entryToastShown` の一度きりのガードを追加
  • ID 入力欄のカーソルが灰色のプレースホルダのヒントの末尾に付いていく
  • ID 入力欄が Ctrl+A/C/V/X、Home/End、Delete、左右の方向キーに対応していない
  • 項目をドラッグまたは押し続けているとき、マウスが通過した他のコントロールにまだ hover フィードバックが出る——`hovLock` があるときは hover 座標を凍結
  • SV スクエアの右側が黒くなる——列ごとの再サンプリングで行間に隙間が残るため、`drawSvSquare` の行単位生成に変更
  • カラーピッカーが GUI スケールに追従しない——設計値をすべて `s()` に通し、`pkSv()` を利用可能な高さと幅で二重にクランプ(下限 `s(88)`)
  • 極端に狭い画面で内容があふれる——`layout()` の末尾でパネルの高さと利用可能な高さを比較し、超えていれば全体を上へ移動して余白を圧縮
  • 歌詞をドラッグして離すと一瞬元の位置に戻る——`commitAt` と `COMMIT_GRACE_MS(120ms)` の猶予ウィンドウ内では設定の読み返しをスキップ
  • 設定を調整した後でワールドが再読み込みされたように見える——`ConfigEventHandler.onConfigReload` から `levelRenderer.allChanged()` を削除
  • パネル上部に空白が溜まり、下の内容が窮屈になる
  • `isPauseScreen()` が 1.20.1 で常に true になりエディタを開くとワールドが凍結する:シングルのときだけ一時停止するように変更
  • ドラッグ中に毎フレーム `sample()` で設定を読み返してメモリ上の値を上書きし、ドラッグできない:ドラッグ期間はサンプリングをスキップ
  • `LyricEditorScreen.active` が一度も代入されず歌詞が HUD とエディタで二重に描画される:init で登録し removed で解除するように変更
  • カラーピッカーの幾何が `drawPicker` / `pickerClick` / `pickerDrag` でそれぞれ絶対ピクセルで複製され、スケール画面ではここに描いて別のバーに命中する
  • 「保存」を押したとき `SPEC.save()` がデバウンス書き込みより早く走り、終了して再入場すると古い値に戻る:保存前に flush してから save するように変更
  • 未再生時にエディタを開くと真っ白:どの 2 行を描くかを自分で決めて `drawLinePublic` を再利用し、歌詞がないときはサンプルを表示するように変更
  • カラーピッカーがスケール画面で描画と命中がずれ、ダイアログの高さが 150 に固定されてプレビューブロックと「確定」が押し出される
  • 狭いウィンドウで 8 行目の「待機色」が切れる:行高を利用可能な高さに応じて下限 16 まで縮小し、パネル幅をクランプ
  • 宣言サイズが実際と異なり完全なファイルが不完全と判定される:10 項目を実測値に変更し、全 26 項目 57 ファイルが 2% 以内に収まった
  • TTS マニフェストに `tokens.txt` と 4 つの FST などが欠けて中国語音色の合成が失敗:約 2.4 MB × 6 項目を追加
  • エンジンの読み込み失敗が null を返すだけ:`LocalInferRuntime.lastTtsError()` が欠けているファイルを名指しするように変更(`espeak-ng-data/` を含む)
  • 小さいウィンドウで圧縮セレクタの選択肢 4/5 と操作の案内がステータスバーからあふれる:パネルを高くし、実際の高さに応じて案内行、説明行の順に犠牲にする
  • Screen を開いているときも HUD オーバーレイが描画されてログが二重に見える:セレクタの間は `askBegin/askEnd` で HUD を保留
  • `java.awt.FileDialog` が `java.awt.headless=true` のため HeadlessException を投げる:tinyfd のリフレクション呼び出しに変更
  • tinyfd のリフレクション呼び出しは `tinyfd_openFileDialog` の 5 引数のシグネチャに厳密に一致する必要があり、そうでないと AWT に戻って再び HeadlessException を投げる
  • Android のネイティブライブラリが noexec の外部ストレージへ解包され、llama / sherpa / vosk の dlopen がすべて失敗する
  • Android の JNA が改名されていない jnidispatch を取得して `FindClass` が失敗し、LLM / STT の初期化が UnsatisfiedLinkError を報告する
  • `download` が enqueue 時に待機スレッドを起こさず、進捗がキューのまま止まる
  • `remove` がダウンロードスレッドの書き込み中にディレクトリを削除し、`.part` が残って「ファイルが不完全」と報告される
  • キューにある id がタスク表にないときダウンロードスレッドが空回りして 1 コアを焼き切る
  • ローカル推論のコンテキストが不足したとき最古のメッセージを無言で捨て、突然の記憶喪失になる
  • MC がマウスをロックして HUD オーバーレイがクリックを受け取れない:ワールドを一時停止しない Screen で CLI パネルを再描画する方式に変更
  • 0.5B モデルが JSON を出力しないと 1 巡全体が失敗と判定され、エラー文言が返答として扱われる
  • モデルがプロンプト中の [PlayerName] をリテラルとしてそのまま出力する
  • 圧縮の閾値が固定の 131072 文字のままで、ローカル推論では圧縮が一度も発動しない
  • requestCompression が一律に SpeedHelper.resolveLlmConfig を通り、ローカルの圧縮がクラウドへ飛ぶ
  • 1 回の投入 token 数が n_batch を超えてアサーションが発動し JVM 全体が abort する
  • KV キャッシュが会話をまたいで消えず、n_ctx が埋まると毎文が失敗する
  • プロンプト+生成長が n_ctx を超えて llama_decode が -1 を返す
  • チャット欄がローカル推論でもクラウドのモデル名を表示する:モードごとにモデル名と段階を取るように変更
  • FILES.txt が半分しか書かれず ggml-cpu-*.dll が解包されず、バックエンドの登録が 0 になる
  • モデルの読み込み失敗が曖昧な文言だけ:バックエンド数も併せて報告し、欠けている dll を案内するように変更
  • 同梱の JNA と Forge libraries 内の jna が同じ名前のパッケージをエクスポートし、モジュール解決に失敗する
  • prepare() が「新しいファイルを解包したか」で成功を判定し、2 回目の起動でローカル推論が使えなくなる
  • Linux / macOS のネイティブライブラリを endswith('.so') で絞り込み、本体のファイルがすべて失われる
  • TTS のサンプルレートが 22050 に固定され音程と速度が変わる:モデルの実際のサンプルレートで再生するように変更
  • ライブラリが欠けているとき一律の案内だったのを、具体的なファイルと失敗した手順を報告するように変更
  • isDownloaded() が「.part だけが残っている」状態をダウンロード済みと判定し、カードが早くもめくれる
  • ローカル推論パネルの入場アニメーションが進まず、ブロック全体が見えない状態で止まる
  • 詳細ダイアログの「リポジトリ」行が指標カードの下端に接する:7px の間隔を追加
  • ドロップダウンが未設定のとき「なし」しか表示されない:「未選択 · クリックして選択」に変更
  • セルフチェックが未選択、未完了、ネイティブライブラリ欠如を 1 つの usable な案内に混ぜている
  • ローカル推論のネイティブライブラリが欠けているときに「内蔵のフォールバックを使用します」と偽る:利用できない旨を正直に説明するように変更
  • モデル紹介が 2 回表示される:描画時に本文中のすべての `## ` 行をスキップ
  • 太字の後ろのテキストが押し上げられる:`mdlMdLine` の太字区間を `tw("§l" + 区間)` で進めるように変更
  • 小見出しの縦バーがテキストより 2px 長く垂れる:テキストと厳密に同じ高さに変更し、行高 20 → 16、グループ間隔 9 → 12
  • グリッドのスクロールが 1 目盛りずつ跳ぶ:`mdlScrollAnim` の緩動を追加し、描画と命中判定が統一して `mdlSc()` の整数値を取るように変更
  • モデルダウンロードページの詳細/ダウンロード管理/使用宣言の各ダイアログが内容領域のクリップ枠で左側が切れる:3 つのダイアログを統一して `renderAll` のクリップ枠の外で描画するように変更
  • 使用上の注意の宣言ダイアログも設定ページへの初回進入時に同様に切れる:併せてクリップ枠の外へ移動
  • `renderModelsPage` は「ダイアログを開いているとき下層が hover に反応しない」抑制ロジックのみを残した
  • オーバーレイから透ける画面がページと一致しない:フレームバッファを取得するときそのフレームの GUI がまだ flush されていないため、整数座標の描画プリミティブのみに依存し、ページと同じバッチと同じ行列にするよう変更
  • ぼかし半径をフレームバッファのピクセルで計算しながら GUI 単位として使い、GUI スケールで割られていた:新しい実装はぼかしを使わない
  • オーバーレイが裸の Tesselator のグローバル modelview を通り、GuiGraphics の 2 系統の行列とで全体がずれる:GuiGraphics に統一
  • タスクカードのボタンが内容を押し、通信速度のテキストとボタンがぶつかる:内容領域の幅からボタン領域を明示的に差し引き(`MDL_MGR_RIGHT = 148`)、常に 4px の間隔を確保
  • 狭いパネルでラベル同士が押し合う:状態 pill、概要 pill、タイトルとサブタイトルが先に残りの幅を計算し、入らなければ描画しないか裁切するように変更
  • 低いウィンドウや GUI スケール 4 でダイアログ内部の文字が重なる:パネルの高さに下限を追加(詳細 170 / ダウンロード 140)、詳細が 256 未満のときはスペック小カードを省く
  • ダウンロードページのダイアログが誤って「モデルを選択」パネルを起動する:モデル一覧のダイアログは自身が開いているときだけ描画するように復元
  • ダイアログを開いているとき下層のカードのハイライトが透ける:詳細/ダウンロード管理ダイアログを開いている間は下層が hover に反応しないように変更
  • ダウンロード管理のボタンが押せない:クリック判定の幾何からタイトル行の高さが抜けていた。修正後は正常に開く
  • モデルカードの名前とサイズが重なる:ダウンロード状態を右寄せに変更し、モデル名を状態の左まで裁切
  • ログのスクロールバーの向きが全体として鏡像になる:`logTop` と `thumbGeom` の座標系が逆だったため、統一して文書座標系に換算(`cur = (maxTop − logTop) × 行高`)
  • `MicrophoneManager.scanForMicrophones` の Skipping mic ログのレベルを ERROR から WARN に下げ、例外クラス名を付記
  • toast/リストのフェードアウトの末尾でちらつく:MC のフォントレンダラは alpha < 64 を強制的に不透明で描画するため、テキストの統一入口で alpha < 0.25 のとき描画をスキップするように変更
  • 裸の `0xFFFFFF` 呼び出しが 1 か所あったので alpha を補完
  • toast の末尾がちらつく:旧差異の全体をロールバックしてフェードアウトする方式に戻した(alpha はトランジションの進捗に応じて減衰)。共通接頭辞と全体が同じ透明度
  • アカウントページの「⟳ 更新」アイコンが約 12px 左に寄る:描画を命中領域の中心 `(rfb.x + 12, avY + 17)` を基準にするよう変更
  • `user/info` が HTTP 200 を返しても `success=false` のときは直接ログイン状態の失効と見なし自動ログアウトするように変更。キーワードから文言を推測しなくなった
  • `isAuthExpiredSignal` を拡張:HTTP 404 を直接判定に含め、キーワードに「停用/注销/撤销/禁用/已删除/找不到」および NOT FOUND / REVOKED / SUSPENDED / DISABLED などを追加
  • `loggedIn()` を `VERITY_BRIDGE_KEY` と `VERITY_USERNAME` の両方が非空であることを要求するよう戻し、key は消えたが username が残る汚れた状態を修正
  • アカウントデータを取得しても画面が更新されない:`doFetch` がデータを書いた後に統一して `VerityClient.refreshScreen()` を呼ぶように変更
  • アカウントページがすべて `-` を表示する:`findRow` が生の key と `assignRowIds()` が付ける「カード番号|」の接頭辞で不一致になるため、`idBase` も併せて比較するように変更
  • ログイン状態の検証が全過程で可視化:`doFetch` のたびに `[Bridge] ログイン状態を検証 …`、`user/info HTTP …`、`検証通過` などのメモリログを書くように変更
  • `layout_check.py` の `NAV_N` を 8 から 9 に修正
  • TTS モードを変更したとき、すでに展開されている STT のモード選択行のアニメーションが再生される:id を「カード番号+グループ添字チェーン|元の label」に変更
  • モードやプロバイダを切り替えたときに画面が押し上げられる:新しく切り出したグループが `layoutGroup()` の戻り値 `iy` を圧縮しなくなった
  • モード切り替え時にパネルがアニメーションなしで硬く跳ぶ:すべてのグループを統一して `gKey()` の展開進捗を通すように変更
  • Key / Model 行の名称が垂直中央にない:`desc` が空文字列のときはサブタイトルなしと同義とし、単一行として中央揃えにするように変更
  • 音色の「プリセット」をクリックすると「Verity 新生サイト」へ飛ぶ:`TtsMode` / `SttMode` の `CUSTOM` 値とし UI カウンタを削除
  • About ページのバージョン番号が左側の "Verity-cn" のベースラインと一致しない(元は 4px 低い):タイトルの視覚的な中線を統一して取るように変更
  • 謝辞の下の大きな空白:カードの高さをハードコードの 540 から内容に応じた実測に変更
  • 右側のスクロールバーはポインタをつまみの左に置かないと反応しない:命中領域を中心線 `cx ± 7` に変更し、3 か所で `scGrabArea()` を共用
  • 命中領域の左縁が内容領域の右 8px を覆い、右端付近の行とスクロールバーのクリックを奪う
  • 「戻る」を押しても反応しない、または TAB を誤って切り替える:戻るキーを最優先に変更し、命中判定と描画が同じクリップ境界を共用するようにした
  • 内容をスクロールした後で見えない行がまだクリックできる:命中判定を統一して「見えているときだけクリック可能」に変更
  • スクロールバーのつまみがトラックの溝に収まらない:トラックとつまみを統一して中心線 `barCx()` で描画し、つまみを 6px に広げた
  • 内蔵の GeckoLib と外部の geckolib-forge.jar の同名クラスの衝突による `ClassCastException` / `NoSuchMethodError`
  • 潜在的なヌルポインタの問題
  • 設定画面に入るときのクラッシュ
  • 更新または接続性チェックの後に誤って「一般」ページへ戻る
  • アカウントページの全体的なレイアウトが拡大される
  • サブグループの項目が見出しに合わせて内側へずれず、展開後に下と重なる
  • ホイールのスクロール方向、スクロールが上部の区切り線を越える、左ナビが窮屈でスクロールできない
  • Verity に話しかけてもときどき全く反応せず案内も出ない問題(ブロックされたときは理由を明確に伝える)
  • 歓迎の挨拶と AI の返答の発話モーションのタイミングが違う(実際に音声が始まってから動作するよう変更)
  • Verity が話しているまたは考えているときに持ち上げられない(現在はいつでも持ち上げられ、音声に影響しない)
  • 前提コンポーネントの欠如によるゲーム起動時のクラッシュ
  • Xiaomi の音声合成が非ストリーミングモードで完全に無音
  • 設定画面のマウススクロールが遅すぎる
  • 戻るボタンとバージョン番号のテキストが垂直中央にない、入力欄のカーソル、選択範囲、キーボード編集の表示

最適化

  • オープニングアニメーションの 248 フレームの PNG を `1920×1080` から `1280×720` にダウンサンプリング(71.3 MB → 32.9 MB、コード変更不要)
  • 25 個の Android/Linux ネイティブライブラリからデバッグ情報を除去(57.2 MB 削減、`libllama.so` 31.8 → 3.2 MB)。Windows の natives は未変更
  • `BuildV3714` のパッケージ圧縮レベルを既定の 6 から `Deflater.BEST_COMPRESSION`(9)に変更
  • アイコンとロゴを 512² から 256² に変更
  • jar サイズ `216,504,021 B`(206.5 MB)→ `161,210,665 B`(153.7 MB)、55.3 MB 削減(−25.5%)
  • コスト:オープニングアニメーションは 1080p で 1.5 倍のアップサンプリングによりやや甘くなり、ネイティブライブラリはシンボル除去後にクラッシュをシンボル化できない
  • カラーピッカーのテクスチャが毎秒無条件に再送される:`upload` の前に冪等な `TextureUtil.prepareImage()` を追加
  • 色相バーと SV スクエアを 1 枚の `DynamicTexture` に焼き込み(128 幅、上の 6 行が色相バー)、1 フレームあたり約 8500 回の `fill` を 2 回の `blit` に削減
  • ピクセル口径は ABGR(`setPixelRGBA` の約束)を採用し、テクスチャパス `dynamic/verity_lyric_picker` はリソースパックの再読み込みをスキップ
  • 色相は 128 段階で量子化し、段階をまたぐときだけ焼き直し、同じ `NativeImage` オブジェクトを再利用
  • テクスチャの登録またはアップロードに失敗したときは行単位の `fill` の旧経路に戻す
  • SV スクエアの毎フレームの塗りを「96 列 × 48 区間で穴あり」から「176 行 × 48 区間で連続」に変更し、列間の 1px の隙間を解消
  • 色相バーの描画結果をキャッシュして再利用。SV スクエアは 96×96 のグリッドキャッシュに変更し、色相が変わったときだけ再構築
  • `currentLines()` は元リストの `identityHashCode + size` で変換結果をキャッシュし、さらにフレーム単位のスナップショット `frameLines` を追加。サンプル歌詞は静的定数に昇格
  • パラメータのスナップショット `P` を導入し、毎フレーム `sample()` を 1 回だけ行い、毎フレーム 20 回以上のリフレクションによる設定読み取りを置き換え
  • ドラッグ中はメモリ上のスナップショットのみを変更し、離したときの `m_6348_()` で `commitAll()` して、保存済みの値と異なる項目だけを書くように変更
  • 色相バーを毎フレーム 208 回の fill から `ensureHueRow()` で 1 度計算して `int[]` に格納し再利用する方式に変更
  • ステータスバーの脱落順を変更し、段階とモデル名は決して落とさない。入りきらないときは token/キャッシュ/速度を先に落とし、その後でモデル名を短縮
  • 新しいラウンドの開始時にモデル名を消さなくなり、常時表示にした
  • 新規ダウンロードの前に残留した .part を消去し、「続行」を押したときだけレジュームの起点として使う
  • 圧縮に失敗したときは具体的なエラー理由をそのまま表示して再び問い合わせ、成功したらその場で永続化
  • プロンプトの接頭辞を token レベルの KV キャッシュ再利用に変更し、1 ラウンドの所要時間を 101s から約 3s に短縮
  • seq_rm または再利用の経路で decode に失敗したときは、そのラウンドを全量投入に戻す
  • 要約が原文より 4% 短いだけならモデルに要約能力なしと判定し、幻覚のない抽出的圧縮に戻す
  • リクエストのコンテキストがモデルのネイティブ上限を超えるときは明確な警告を出すが、実行は妨げない
  • 生成時に pos >= n_ctx - 2 で正常に切り上げ、最後の decode を失敗させなくなった
  • [LLM] proxy / model のデバッグログをローカルとクラウドで分けて出力するように変更
  • ダウンロード進捗の集計を、開始前に 1 度ベースラインを計算してから純粋にメモリ上で累加する方式に変更し、64KB ごとにディレクトリを走査しなくなった
  • パネルの入場アニメーションに 2.5s のフォールバックを追加し、期限が来たらそのまま定位置に落とす
  • マイクのレベルバーをインラインの手描きに変更
  • AI の返答に Markdown の組版記号が現れなくなり、生のクエリデータをそのままプレイヤーに投げることもなくなった
  • 発話モーションの振幅が音声の感情(ラウドネス、ピッチ)に応じて変化し、より生き生きと

削除

  • メインメニューの「Mod by Varmite」ボタン、および `TitleScreenMixin` で 24px 下へ譲るロジック
  • `mods.toml` の `[properties]` `veritycn`(Verity 新生公式サイト)
  • 呼び出し元のない `NCM_USE_AUTHOR_SERVICE` 設定キー、および `SpeedHelper` の 2 つの死んだメソッド
  • `TtsMode.BUILT_IN`(旧「内蔵 TTS 設定」。内蔵プロバイダと重複)
  • `SpeedHelper` の呼び出し元のない `getCurrentFree*` 6 メソッド
  • CN では「孤独」の演出を削除(`ModEvents` の loneliness ブロックに `!isCores()` ガードを追加)。台詞の放送と好感度の減算を行わなくなった
  • 爆発分岐の `SoundEvents.f_11922_` とサボテン分岐の `ModSounds.BONE_0` に残っていた固定効果音
  • `VerityLlmSession.sessionChars`、`addSessionChars()`、`contextTokens()` および履歴の累加など「今回のセッションでの増分」口径の実装
  • `AiAPI` が messages の量から `contextChars` を書く統計コード
  • 「音楽を有効化」の総合スイッチ(`VANILLA_NCM_ENABLED`)。音楽は既定でオンになり、`setCurrentNcmEnabled` は空操作に
  • `playFavouriteSongStream`、`onFavouriteSyncTick`、`pauseFavouriteSong`、`resumeFavouriteSong`、`loadFavouriteLyrics`(約 260 行)
  • 内蔵の `assets/verity/sounds/favorite_song.mp3` と付随する lrc。jar のサイズが約 5.6 MB 減少
  • `LyricHudRenderer` のドット小節全体(`GAP_*` 定数、`drawGapDotsPublic` / `drawGapDots` / `fillDisc` など)とエディタ側の鏡像ブロック
  • `VerityConfig` / `SpeedHelper` のドットしきい値 `ncmLyricGapDotThresholdMs` フィールド、builder の定義、get/set アクセサ
  • 「垂直間隔 / 水平間隔」の 2 つのパラメータ行
  • パネル右上の「サンプル(再生していません)」ラベル
  • 編集中にリアルタイムで設定を書くデバウンスキューとバックグラウンド書き込みスレッド
  • `diskDirty` の判定と、書き込み専用の `saved` スナップショット
  • カラーピッカー右側の垂直の明度バー。明度は SV スクエア自身が担うように変更
  • About ページの「本模組は GeckoLib を内蔵…」の灰色の小文字(定数、カードの高さ、描画の 3 か所)。謝辞は「特別な感謝」に統合済み
  • タスクをバックグラウンド削除に変更し、まずタスクを一覧から消してからスレッドにディレクトリを明け渡させる
  • 画面の温度と繰り返し抑制の設定。ハードコードの 0.7 / 1.1 に変更
  • llmLocalTemperature / llmLocalRepeatPenalty の設定項目。古い設定は無視され無害
  • 「最大返答長」のドロップダウンと llmLocalMaxTokens の設定項目
  • de/kherud/llama、com/fasterxml/**、META-INF/versions/** の残留を整理
  • 個人アカウント配下の「再生位置」オプションと `musicPlayLocation` の設定項目、および SpeedHelper の一度も消費されなかった 4 つの読み書きメソッド
  • `K_METER` 行タイプの死んだコード(定数宣言、`geom()`/`drawRow()` の case、`kbCollect()` のフィルタ)
  • セルフチェックページの 4 つの `K_RT` 行(Base URL / モデル / Key / 接続性)と各対象の「チェック」ボタン行
  • ソースツリーで参照ゼロの死んだコードメソッド:`VerityClient.createYACLScreen / originalParent / preserveConnTest`、`VerityAccountBridge.fetchValues / fetchFromConfig / checkNow / testAllModels`、`VerityConfigScreen.bt / selE / selS / sldD`
  • 「カスタムクローン音声を使用」スイッチ。参照音色に新設した「カスタム」項目で決まるように変更
  • 初期設定ページの「AI 自動入力」入口を削除(プライバシーに関わるためまず非表示に)
  • Xiaomi v1 バックエンド TTS の特殊フィールドの結合規則。OpenAI 互換形式に統一
  • フレンドリーモード。既定でバニラのホラーモードに
  • Cloth Config と GeckoLib の外部依存の宣言。前提条件が大幅に減少
  • 内蔵 TTS 音声モデル。mod のサイズが大幅に縮小し、音声は Xiaomi MiMo / Base URL / 音色クローン / 公式プロキシのいずれかのモードを使用

v3.4

2026-08-21

NCMミュージックシステム+ネットワーク検索+マルチプレイヤーパフォーマンス最適化

NCMミュージックシステム(新規)

  • 曲の検索と再生: ncm_searchは番号付きの結果を返し、AIは番号を返すだけでそれらを再生できます。検索結果は元のIDを非表示にし、LLMが曲を作るのを防ぎます
  • song_idを直接再生するようにしておきます。ユーザーがIDを明示的に提供した場合でも利用可能です
  • マルチプレイヤーの同期:コンソールオーディオの重複排除、新しいプレイヤーは自動同期の進行状況に参加し、歌詞を途中で、世界を出て自動的にプレイを停止します
  • 音楽音量ダッキング: TTSが再生されているときは300 msが15 %にフェード、TTS後は800 msが遅いリカバリ

ネットワーク検索構成(新規)

  • スイッチを個別に有効/無効にするための「ネットワーク検索」設定タブを追加
  • Tavily、Brave、AnySearch検索エンジンのAPIキー管理

Androidプラットフォームの適応

  • NCMミュージックウォークOpenAL再生:ストリームバッファPCMをWAV再生に戻し、ステレオ/モノラルフォーマットを動的に選択
  • alGenBuffersの残留エラーによる再生エラーを修正
  • AndroidはストリーミングTTSフォールバックの非ストリーミングパスをスキップします。歌詞の位置はOpenAL再生中に正確に同期されます

パフォーマンスの最適化

  • マルチプレイヤーモードのカートンの根本原因を修正:メモリモジュールはティックごとに世界のエンティティをスキャンし、現在は40ティックスロットリングに変更され、最近のプレイヤー結果をキャッシュし、スキャン頻度は98.75 %減少します

歌詞&マウスアニメーション

  • 歌詞の点滅修正:空の歌詞は行インデックスをリセットしなくなりました。行インデックスは進行状況が変動した場合にのみ前方にジャンプし、前後にジャンプしないでください
  • 口アニメーションはTTSによってのみトリガーされ、歌を聴くことはもはや口を動かすことはありません。口の形を止めることができないように、残りの時間が十分でない場合にのみ延長されます

コマンドシステム

  • /cnv locate tp :ワンクリックでVerityの場所(バックパックプレイヤーの場所、物理→的な→エンティティの座標)にテレポートします
  • /cnv mplay <songid>:指定された曲IDを直接再生

安定修理

  • マイク16000 Hzがサポートされていない場合、44100 Hzを自動的にダウングレードし、一部のデバイスのクラッシュを修正
  • チャンネル数によって動的に選択されたOpenALオーディオフォーマット。音楽が停止したときにOpenAL再生を完全にクリーンアップします

技術的な改善

  • NCM同期システムが追加されました: NcmNetwork/NcmBroadcastHelper/NcmClientPlayer/NcmSyncS 2 CPacket/NcmClientExit
  • 新しいパッチ: PatchMicrophoneFallback/PatchVerityPlatformOpenAl (OpenALエラークリア)/PatchNcmClientPlayerAndroid (Androidの歌詞位置)
  • NcmHelper (番号付き検索+インデックス再生)、VerityPlatform (フルOpenAL再生)、LyricHudRenderer、VerityTalkState、MemoryHelper、PersonaHelper、CnvCommandなどのコアファイルをリファクタリングします。

v3.3

2026-08

フレンドリーモード+ゲーム内ツール呼び出し+設定照合

フレンドリーモード( FRIENDLY_MODE・CN版専用)

  • すべての悪魔の変換ロジックとホラーコンテンツをブロックする
  • 完全にカルマによって動かされる性格: < 7寒さ、7 -14ニュートラル、14 -20フレンドリー、> 20非常にフレンドリー、≥ 9000エンジェル
  • すべてのエンティティ(村人を含む)の殺害を強制的に防ぎ、真に「ゲームアシスタント」になる
  • まだベータ版です。フィードバックを歓迎します

ゲーム内ツールの呼び出し

  • レシピクエリGET_RECIPE :プレイヤーが合成/書き込みを要求すると、LLMが強制的に呼び出され、実際のゲームレシピがリアルタイムで返されます
  • インストールされているモッドプローブget_all_mods :現在のゲームにインストールされているすべてのモッドを一覧表示します

レガシーアイテム提供メカニズム( DROP_ITEM_LEGACY_MODE )

  • @に埋もれた悲しみによって、復興を提案し、猛烈に要求する能力
  • スイッチがオンの場合、LLMはitem_idを指定してさまざまなアイテムを与えることができます。スイッチがオフの場合(デフォルト)、土だけを与えることができます

カスタムクローンオーディオスイッチ

  • トーンクローニングはカスタムリファレンスオーディオをサポートしています
  • USE_CUSTOM_CLONE_AUDIOスタンドアロンスイッチを追加
  • カスタムオーディオディレクトリ: config/verity/sample_audio/

安定修理

  • 永続的なブロックを防ぐために、LLM要求が60秒間タイムアウトしました
  • オーディオチャンネルミューテックス管理:一度に1つのサウンドのみを再生
  • TTSインスタント割り込み:再生中のTTSをすぐに交換する新しいリクエスト
  • 接続を解除すると、自動的にサウンドが停止します

技術的な改善

  • VerityModFlagsスタンドアロンフラグビット管理の追加
  • PersonaHelper動的人設定補助クラスを追加
  • ModEventsMixin/VerityEntityMixin Mixinインジェクションを追加
  • v3.3以降のYACL依存関係の削除

v3.2

2026-07-28

音声ボタン+ストリーミング応答+カスタムトーン+ブラックスクリーンスイッチ

TTS音声速度ボタン制御

  • スライダーからボタンへのサイクルスイッチ7番目のギア:非常に→スロー→スロー自分自身を→わずかに→ →速く速く→速く速く
  • MiMoモデルのみに適合し、オーディオタグを介して音声速度を制御します
  • SpeedLevel列挙とSpeedHelperブリッジクラスを追加

MiMoストリーミング応答

  • 再生中のストリーミング:最初のSSEチャンクを受信するとすぐに再生が開始されます
  • MiMoエンドポイントのみが有効になり、設定場所:ベースURLグループの下部にある「ストリーミング応答を有効にする」

カスタムトーンクローン

  • mp 3サンプルオーディオをconfig/verity/sample_audio/ディレクトリに置きます
  • 使用するファイル名(サフィックスなし)を入力し、空白のままにしてプリセットトーンに戻します
  • オーディオ提案8〜30秒、単一の言語を話す単一の人

メインメニュー黒い画面の背景スイッチ

  • 「メインメニュー黒画面背景」設定を追加し、表示モジュールの黒画面背景をオンにし、元のMCパノラマの復元をオフにしました
  • Mixin Longが読み込まれていない問題を修正

v3.1

2026-07-24

「修復+設定の初期化」ウィザード

初めて構成ウィザードを初期化する

  • オープニングアニメーション後に全画面初期化設定画面がポップアップ表示されます
  • Verity Mod認証のヒントとモデル選択のヒント
  • OAuth認証プロセス: 5秒フルスクリーンプロンプト→自動開くブラウザ→2分タイムアウト
  • 承認に成功した後、モデルの接続を検出する

修復

  • フォールアウトコールスイッチの修復: FALL_SOUND_ENABLEDがcauseFallDamageを上書き
  • OAuth認証ステータス判定修復:代わりにステータスを確認==完了
  • LLM/STT/プロキシはデフォルトで有効

v3.0

2026-07-24

Verity Modウェブサイトの深い統合

Verity Modサイトの深い統合(コアアップデート)

  • ブリッジサービスアーキテクチャ:有効にすると、すべてのLLM/TTS/STT要求がVerity Bridgeサービスを統合します
  • ライセンスキー認証システム:キーはconfig/verity-client.tomlに保存されます
  • 信頼できるすべてのSSLクライアント:自己署名証明書およびさまざまなプロキシ環境と互換性があります
  • LLMリクエスト60秒タイムアウト

TTS音声システムの機能強化

  • インスタント割り込みメカニズム:再生中の音声を即座に割り込み、置き換えるための新しいTTS要求
  • OpenAL再生パス修復
  • メインメニューに戻る/切断すると自動的に再生を停止します

チャットメッセージのローカライゼーション

  • ひとりぼっち...→ひとりぼっち...どこに行ってたの?
  • 「アヨチャット…→ねぇねぇねぇねぇなんでこんな風に消えちゃったんだろう」
  • → 暗闇は...消えてしまった。ありがとう。

v2.75

2026-07-21

モデルのカスタマイズ+スキンシステム

TTS/STTモデル名設定可能

  • TTSモデル名:ユーザー手動入力、デフォルトmimo-v2.5-tts
  • STTモデル名:ユーザー手動入力、デフォルトmimo-v2.5-asr

カスタムスキンシステム

  • 16種類のバリアントマップ( 1024 x 1024 PNG )をconfig/verity/skins/に圧縮してパッケージ化
  • GUIにZIPファイル名を入力して切り替えると、切り替えは即座に有効になります
  • スマートフォールバック:スキン名が無効な場合は、組み込みのデフォルトスキンを自動的に使用します

v2.5

2026-07-21

中国化再建

AI構成システムのリファクタリング

  • LLM/TTS/STTの3つのセクションの独立した構成
  • LLM :任意のOpenAI互換API ( DeepSeek、Tongyi Qianwen、SiliconFlowなど)をサポート
  • TTS : 3つのモード—内蔵パイパー/ベースURL/MiMoトーンクローン
  • STT : 2つのモード—ローカルウィスパー/ベースURL

MiMoディープインテグレーション

  • mimo-v2.5-tts + mimo-v2.5-tts-voiceclone + mimo-v2.5-asr
  • リファレンスオーディオのプリセット3グループ: Verityデフォルト、Ashen同じスタイル、オールドプリースト

インターフェースが完全に書き換えられました

  • YACL GUI完全な中国語:グループタイトル、オプション名、説明はすべてローカライズされています
  • TTS/STTモードのドロップダウンメニューに表示される中国語名

v2.0

2026-07

Androidアダプテーション

TTS音声合成

  • Android : OpenSLバックエンド用LWJGL OpenAL経由でMiMo TTSオーディオを再生
  • デスクトップ: javax.sound.SourceDataLineを同じに保つ

STT音声認識

  • Android : LWJGL JNI経由で直接マイクを取得
  • ランチャーサポート: ZalithLauncher 2.4.9+、PojavLauncher、FCL、HMCL - PE

v1.0

2026-07

中国語初版

システムのリファクタリングを構成する

  • 新しいVerityConfig.java :完全なLLM/TTS/STT 3ブロック構成システム
  • オリジナルのハードコーディングされたGroq APIキーとOpenRouter構成を削除する
  • AiProvider列挙を追加: OpenAI準拠のAPIをサポートするカスタムオプションを追加

インターフェースの中国化

  • YACL構成GUIフルカルチャー
  • zh_cn.json言語ファイルは、モジュール内のすべての表示テキストを上書きします
  • AIシステムプロンプトが中国語に変更されました

修復

  • 中国語ユーザー名マイクのクラッシュ修復
  • TTSモデルの減圧パス修復を初めて開始する