1
0
mirror of https://github.com/misskey-dev/misskey.git synced 2026-07-25 20:14:55 +02:00
Commit Graph

28544 Commits

Author SHA1 Message Date
syuilo
9993393af3 Merge branch 'develop' into testtest 2026-06-20 11:36:53 +09:00
syuilo
77878256a8 fix(dev): follow up of 0956da49e9 2026-06-20 11:36:44 +09:00
syuilo
88a84985ad test 2026-06-20 11:30:56 +09:00
syuilo
cc153432a3 Merge branch 'develop' into testtest 2026-06-20 11:30:12 +09:00
syuilo
662129f414 fix(dev): follow up of 0956da49e9 2026-06-20 11:29:58 +09:00
syuilo
f1e4d4db82 Merge branch 'develop' into testtest 2026-06-20 11:12:49 +09:00
syuilo
4457a75d22 fix(dev): follow up of 0956da49e9 2026-06-20 11:12:39 +09:00
syuilo
76625feaba Update common.ts 2026-06-20 11:03:28 +09:00
syuilo
0956da49e9 feat(dev): フロントエンドのバンドルサイズ比較のAction (#17586)
Create frontend-js-size.yml
2026-06-20 11:00:58 +09:00
anatawa12
21a4f95bd6 fix: the script contains locale json is prefetched (#17585)
This commit upgrades rolldown used by vite to 1.1.0 and set
includeDependenciesRecursively instead of maxSize for
i18n code splitting group.

We unexpectedly prefetched the script file includes locale JSON
before this fix because locale inliner did not remove prefetch
for transitive dependency of i18n global variable.

Current locale inliner assumes the file contains i18n global
variable and the file contains i18n global variable are same file
and only removes prefetch for the file for i18n global variable
and leaves dependency files of the file.
However, in the previous fix for rolldown migration regression,
we set `maxSize: 1` for manual chunk of i18n.
This makes the chunk for i18n global variable (@/i18n.js) and
the chunk includes locale JSON (@@/js/locale.js) distinct chunks.
As a result, only prefetch for i18n global is removed and local
JSON remain in the prefetch file name dictionary (__vite__mapDeps).

There is two ways to fix this problem: 1) make rolldown to bundle
i18n related files into one but leave unrelated files separated
module or 2) update locale inliner to remove transitive dependency
of i18n of __vite__mapDeps.
2nd way is prune to rolldown changes, and it's possible by parsing
each .js file to (re)create module graph in inliner, it's complex.
Therefore, this commit fixes this with 1st way with
includeDependenciesRecursively option on `codeSplitting.groups`
newly added in rolldown 1.1.0.
Since latest vite as of writing (8.0.16) strictly depends on
rolldown 1.0.3, we cannot use it normally. We use overrides
to work around this problem. As far as I checked the vite
repository, upgrading rolldown to 1.1.x includes no code changes
except for package.json, so I hope this upgrade is safe.
2026-06-20 08:59:01 +09:00
github-actions[bot]
1c6e5365d6 Bump version to 2026.6.0-beta.1 2026.6.0-beta.1 2026-06-19 06:06:06 +00:00
SASAPIYO (SASAGAWA Kiyoshi)
ae5d2d40d7 fix(backend): skip inbox activities without an actor instead of throwing TypeError (#17558)
* fix(backend): skip inbox activities without an actor instead of throwing TypeError

- guard getApId() against null/undefined (and fix the 'detemine' typo)
- skip actor-less inbox activities early with Bull.UnrecoverableError

Fixes #17557

* fix(backend): reject actor-less inbox activities at enqueue time

Per review feedback (#17558), move the actor presence check to the inbox
HTTP handler and drop the processor-side guard.

- ActivityPubServerService.inbox(): validate the request body from the
  loose (unknown) type and return 400 for structurally invalid activities
  (non-object / missing actor) instead of enqueueing a job that can never
  be authenticated. Avoids useless retries and TypeError noise.
- InboxProcessorService.process(): remove the actor null guard; IActivity.actor
  is non-null, so the check is unnecessary once enqueue is validated.
- getApId(): widen the parameter to include undefined so the existing null
  guard is type-honest (getOneApId can pass value[0] of an empty array).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 15:00:17 +09:00
かっこかり
e2d2ca54fa docs(agents): Follow-up of #17582 [ci skip] 2026-06-18 21:26:09 +09:00
おさむのひと
7f00846779 fix(backend): consolidate index creation logic and remove redundant migration (#17581) 2026-06-18 21:16:21 +09:00
かっこかり
420d1f0f95 fix(backend): リモートのノートのメンション数制限が実際に解決できたユーザー数になっている問題を修正 (#17576)
* fix(backend): リモートのノートのメンション数制限が実際に解決できたユーザー数になっている問題を修正

* Update Changelog
2026-06-18 20:35:16 +09:00
かっこかり
3693adbb2d docs(agents): エージェント向けのドキュメントを拡充 (#17582)
* docs(agents): エージェント向けのドキュメントを拡充

* Udpate

* update

* Update

* update
2026-06-18 20:23:15 +09:00
syuilo
1679f6c2ee New Crowdin updates (#17555)
* New translations ja-jp.yml (Italian)

[ci skip]

* New translations ja-jp.yml (Indonesian)

[ci skip]

* New translations ja-jp.yml (Indonesian)

[ci skip]

* New translations ja-jp.yml (Indonesian)

[ci skip]

* New translations ja-jp.yml (Chinese Traditional)

[ci skip]

* New translations ja-jp.yml (Spanish)

[ci skip]

* New translations ja-jp.yml (Spanish)

[ci skip]
2026-06-18 18:41:00 +09:00
かっこかり
d7c11a61c5 fix(backend/oauth2): Token Grantエンドポイントのバリデーションを修正 (#17580) 2026-06-18 18:40:37 +09:00
おさむのひと
bbcce5b49d feat(migration): add RecoverNotePinFavoriteIndexes migration for index management (#17577) 2026-06-18 17:14:51 +09:00
Tatsuya_yd
e117456815 fix(frontend): ノートの下書きをリセットする際、未アップロードのファイルについては添付予定が解除されない問題を修正 (#17568)
* fix(frontend): ノートの下書きをリセットする際、未アップロードのファイルについては添付予定が解除されない問題を修正(#17486)

* fix(frontend): useUploader側にresetメソッドを追加し、そちらを呼び出す形に修正

* 現在のdisposeをresetにリネームして`items.value = [];`を追加する形に修正

* tweak

---------

Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2026-06-17 14:26:45 +09:00
github-actions[bot]
23ff411b36 Bump version to 2026.6.0-beta.0 2026.6.0-beta.0 2026-06-17 03:21:46 +00:00
かっこかり
05dd02a463 deps: update dependencies (#17575)
* deps: update security dependencies

* deps: update dependencies

* deps(backend): update juice
2026-06-17 12:13:50 +09:00
syuilo
7bd8f8148b fix(frontend): 画像アップロード時、フレームのキャプション付与が正しく行われないことがある問題を修正
Fix #17518
2026-06-15 17:50:02 +09:00
github-actions[bot]
f46450d857 Bump version to 2026.6.0-alpha.2 2026.6.0-alpha.2 2026-06-14 08:26:32 +00:00
Caleb Gates
b125ce1eb2 fix(backend): route fastify listen/ready/close errors through logger instead of unhandled rejection (#17401)
* fix(backend): route fastify listen/ready/close errors through logger instead of unhandled rejection

* Update CHANGELOG.md

---------

Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2026-06-14 16:54:29 +09:00
renovate[bot]
dc96c35296 fix(deps): update dependency esbuild to v0.28.1 [security] [ci skip] (#17566)
* fix(deps): update dependency esbuild to v0.28.1 [security]

* update

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: kakkokari-gtyih <67428053+kakkokari-gtyih@users.noreply.github.com>
2026-06-13 18:11:56 +09:00
かっこかり
8468a25488 Update CHANGELOG.md 2026-06-13 17:49:44 +09:00
github-actions[bot]
6c7375924c Bump version to 2026.6.0-alpha.1 2026.6.0-alpha.1 2026-06-12 11:52:52 +00:00
Copilot
ec6b1cc6a8 Enhance ActivityPub image attachments with width/height metadata (#17563)
* Initial plan

* enhance(backend): include image dimensions in AP attachments

* fix(backend): guard AP attachment dimension properties

* fix(changelog): move AP dimensions note to 2026.6.0

* Update CHANGELOG.md

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2026-06-12 20:47:12 +09:00
おさむのひと
e093b32aa9 fix(backend): MemoryKVCacheのキャッシュGC処理においてキャッシュが期限切れにならないことがある問題を修正 (#17512)
* fix(backend): MemoryKVCacheのキャッシュGC処理においてキャッシュが期限切れにならないことがある問題を修正

* おためし

* fix

---------

Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2026-06-11 20:03:38 +09:00
かっこかり
0b4764c68b enhance: estree-walkerをoxc-walkerに変更 (#17556)
* enhance: estree-walkerをoxc-walkerに変更

* fix lint [ci skip]
2026-06-09 12:10:15 +09:00
syuilo
5157c277f1 New Crowdin updates (#17377)
* New translations ja-jp.yml (Spanish)

[ci skip]

* New translations ja-jp.yml (Spanish)

[ci skip]

* New translations ja-jp.yml (English)

[ci skip]

* New translations ja-jp.yml (Thai)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Romanian)

[ci skip]

* New translations ja-jp.yml (French)

[ci skip]

* New translations ja-jp.yml (Arabic)

[ci skip]

* New translations ja-jp.yml (Catalan)

[ci skip]

* New translations ja-jp.yml (Czech)

[ci skip]

* New translations ja-jp.yml (German)

[ci skip]

* New translations ja-jp.yml (Italian)

[ci skip]

* New translations ja-jp.yml (Korean)

[ci skip]

* New translations ja-jp.yml (Dutch)

[ci skip]

* New translations ja-jp.yml (Polish)

[ci skip]

* New translations ja-jp.yml (Portuguese)

[ci skip]

* New translations ja-jp.yml (Russian)

[ci skip]

* New translations ja-jp.yml (Slovak)

[ci skip]

* New translations ja-jp.yml (Swedish)

[ci skip]

* New translations ja-jp.yml (Turkish)

[ci skip]

* New translations ja-jp.yml (Ukrainian)

[ci skip]

* New translations ja-jp.yml (Chinese Traditional)

[ci skip]

* New translations ja-jp.yml (Vietnamese)

[ci skip]

* New translations ja-jp.yml (Indonesian)

[ci skip]

* New translations ja-jp.yml (Japanese, Kansai)

[ci skip]

* New translations ja-jp.yml (Korean)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Italian)

[ci skip]

* New translations ja-jp.yml (Spanish)

[ci skip]

* New translations ja-jp.yml (Catalan)

[ci skip]

* New translations ja-jp.yml (Catalan)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Spanish)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Korean)

[ci skip]

* New translations ja-jp.yml (Catalan)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Indonesian)

[ci skip]

* New translations ja-jp.yml (Chinese Traditional)

[ci skip]

* New translations ja-jp.yml (Indonesian)

[ci skip]

* New translations ja-jp.yml (Chinese Traditional)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Spanish)

[ci skip]

* New translations ja-jp.yml (Ukrainian)

[ci skip]

* New translations ja-jp.yml (Ukrainian)

[ci skip]

* New translations ja-jp.yml (Ukrainian)

[ci skip]

* New translations ja-jp.yml (Ukrainian)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Ukrainian)

[ci skip]

* New translations ja-jp.yml (Catalan)

[ci skip]

* New translations ja-jp.yml (Ukrainian)

[ci skip]

* New translations ja-jp.yml (Italian)

[ci skip]

* New translations ja-jp.yml (Korean)

[ci skip]

* New translations ja-jp.yml (Chinese Traditional)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Catalan)

[ci skip]

* New translations ja-jp.yml (Italian)

[ci skip]

* New translations ja-jp.yml (Spanish)

[ci skip]

* New translations ja-jp.yml (Korean)

[ci skip]

* New translations ja-jp.yml (Chinese Traditional)

[ci skip]

* New translations ja-jp.yml (Chinese Traditional)

[ci skip]

* New translations ja-jp.yml (Catalan)

[ci skip]

* New translations ja-jp.yml (Korean)

[ci skip]

* New translations ja-jp.yml (Italian)

[ci skip]

* New translations ja-jp.yml (Spanish)

[ci skip]

* New translations ja-jp.yml (English)

[ci skip]

* New translations ja-jp.yml (Catalan)

[ci skip]

* New translations ja-jp.yml (Korean)

[ci skip]

* New translations ja-jp.yml (Italian)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Chinese Traditional)

[ci skip]

* New translations ja-jp.yml (Chinese Simplified)

[ci skip]

* New translations ja-jp.yml (Catalan)

[ci skip]

* New translations ja-jp.yml (Korean)

[ci skip]

* New translations ja-jp.yml (Spanish)

[ci skip]

* New translations ja-jp.yml (English)

[ci skip]

* New translations ja-jp.yml (Indonesian)

[ci skip]

* New translations ja-jp.yml (Indonesian)

[ci skip]
2026-06-08 17:49:40 +09:00
かっこかり
81b182460e deps: update dependencies (#17477)
* deps: update dependencies

* fix archiver types not updated

* spdx

* update archiver types

* update deps

* fix test
2026-06-07 17:25:43 +09:00
おさむのひと
2aa6d4fc7f fix(frontend): add antenna handling in antenna-column component (#17553)
fix: add antenna handling in antenna-column component
2026-06-06 14:07:51 +09:00
github-actions[bot]
a0889acb2a Bump version to 2026.6.0-alpha.0 2026.6.0-alpha.0 2026-06-05 04:55:33 +00:00
anatawa12
a75f3adc36 fix: we cannot look up user profile url with self hostname (#16488) 2026-06-05 13:51:38 +09:00
anatawa12
67a0ae460d fix(frontend): locale inliner is not working (#17543)
* feat: support facade module

* refactor: migrate typings to ESTree from rolldown/utils

* fix: name conflict from function parameter are not detected correctly

* refactor: migrate typings to ESTree from rolldown/utils

* fix: name conflict from function parameter are not detected correctly

* fix: template literal in member expression not supported

* fix: improve identifier conflict

* feat: add error when no localization are applied by locale inliner

* lint: fix lints

* fix: let rolldown to not hoist i18n modules with other modules

* chore: make error if there is unexpected specifiers

* fix license header
2026-06-05 12:36:44 +09:00
Kissa Ruokanen
312d7c1866 fix(frontend): パスキー登録完了時の認証ダイアログの入力値が使われていない問題を修正 (#17539)
Co-authored-by: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com>
2026-06-04 23:42:02 +09:00
Tatsuya_yd
e215ab1091 fix(frontend): メンションのサジェスト時に表示されるアイコン表示が画像サイズ次第で崩れる問題を修正 (#17542)
* fix(frontend): メンションのサジェスト時に表示されるアイコン表示が画像サイズ次第で崩れる (#17504)

* fix(frontend): メンションのサジェスト時に表示されるアイコン表示が画像サイズ次第で崩れる (#17504)
2026-06-04 22:19:15 +09:00
かっこかり
e2bcd9c2b4 enhance(frontend): 絵文字メニューから直接絵文字パレットに追加できるように (#17420)
* enhance(frontend): 絵文字メニューから直接絵文字パレットに追加できるように

* Update Changelog

* fix lint

* Update Changelog

* enhance: 追加し直す挙動に変更

* ✌️

* fix
2026-06-04 20:50:33 +09:00
syuilo
4ae53440b2 Update .gitignore 2026-06-04 19:40:20 +09:00
SASAPIYO (SASAGAWA Kiyoshi)
3246dad53e fix(chart): PerUserDriveChart.update で userId が null のシステム所有ファイルをスキップ (#17499)
fix(chart): PerUserDriveChart.update で userId が null のシステム所有ファイルをスキップ (#17498)

Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2026-06-04 10:28:26 +09:00
syuilo
2e1594245b fix(frontend): deepEqualの片方がnull/undefinedな場合の判定が正しくないのを修正 2026-06-03 14:51:40 +09:00
かっこかり
e50603e30b fix: サーバー全体のアップロードサイズ上限とロールポリシーのアップロードサイズ上限に関する修正 (#17389)
* fix(backend): ロールポリシーのファイルサイズ制限の上限値をサーバー全体のファイルサイズ制限にする

* fix(frontend): サーバー全体のファイルサイズ制限に関する説明を追加

* fix: ベースロールしか与えられていないときにaggregateが走らない問題を修正

今までは問題なかったけど、maxFIleSizeMbで上限capするようになったため
2026-06-03 09:12:56 +09:00
Kissa Ruokanen
23bb992121 enhance(frontend): scroll position restoration in the drive page and "Files" tab on the user page (#17497)
* fix: ユーザーページのFilesタブでスクロール位置が正しく復元されない問題を修正

* fix: ドライブページでスクロール位置が保持されない問題を修正

* fix: 変更履歴の文言を調整

* fix: 同じファイルを複数ノートに添付した場合にスクロール位置が先頭要素へ戻る問題を修正

* fix: viewPosition の計算誤りと KeepAlive によるスクロール位置消失を修正

* fix: スクロール位置復元が下端要素の見切れを引き起こす問題を修正

* fix: スクロール位置復元がコンテナ高さ変化時にオーバーシュートする問題を修正

* Update CHANGELOG.md

Co-authored-by: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com>

* fix: 最下部スクロール時にスクロール位置のキャプチャが失敗する問題を修正

min-height による空白領域にビューポート中央が入るケースで anchorId が更新
されず、復元が古い位置に飛んでしまう問題を修正した。
アンカー選択条件を「中央を跨ぐ要素のみ」から「上端が中央以下の最も下の要素」
に変更することで、空白領域スクロール時も最後のアイテムを正しくキャプチャできる。

* Update CHANGELOG.md

* fix: MkNoteMediaGrid のスクロールアンカーをノートIDとファイルIDの複合キーに変更

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor: anchorIndex による重複アンカー対応を削除

* refactor: unused になった onUnmounted の import を削除

* refactor: querySelectorAll/querySelector にジェネリクスを渡し型キャストを削除

---------

Co-authored-by: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 09:07:17 +09:00
おさむのひと
eed6c3654f fix: コンパネからパスワードリセットした時に発生したエラーをダイアログで出す (#17513)
Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
2026-06-03 09:04:08 +09:00
おさむのひと
2328ef3737 chore(llm/docs): .claude配下の再構成 (#17514)
* chore(docs): .claude配下の再構成

* fix AGENTS.md

* fix AGENTS.md

* fix review

* 行番号参照の除去

* docs: fix storybook note in vue reviewer agent

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* fix local review

* fix

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-06-03 09:03:10 +09:00
かっこかり
9b362ca761 Update CHANGELOG.md 2026-06-03 08:50:05 +09:00
SASAPIYO (SASAGAWA Kiyoshi)
d5ab42267c fix(backend): NSFW検出モデルが file:// で読み込めない問題を修正 (#17528)
fix(backend): NSFW検出モデルがfile://スキームで読み込めない問題を修正

#17501 で `@tensorflow/tfjs-node` を bundle 外に出した結果、bundle 内の
`nsfwjs` が抱える `@tensorflow/tfjs-core` と external な tfjs-node が使う
tfjs-core が別インスタンスに分裂し、tfjs-node が登録する `file://` IOHandler を
nsfwjs 側が共有できなくなった。このため nsfwjs のモデル読み込みが HTTP handler
(node-fetch) にフォールバックし `URL scheme "file" is not supported` で失敗する。

`nsfwjs` と `@tensorflow/*` も external 化し、単一の tfjs-core インスタンスに
統一することで file:// IOHandler を共有させる。

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 08:48:32 +09:00
Kissa Ruokanen
97a667e422 fix: 「D」キーでモードを切り替えるときにsyncDeviceDarkModeのチェックを行うようにする (#17526)
* fix(frontend): Dキーショートカットでダークモード切り替え時にsyncDeviceDarkModeのチェックを行うように修正

設定ページのトグルではsyncDeviceDarkModeが有効な場合に確認ダイアログを表示し、
同意後にsyncDeviceDarkModeを無効化してからダークモードを切り替える挙動だったが、
Dキーショートカットではこのチェックがバイパスされていた。
ショートカットキー経由でも同じロジックを適用するように修正。

* fix(frontend): CHANGELOGにDキーのsyncDeviceDarkModeバイパス修正を追記
2026-06-02 17:57:47 +09:00