diff --git a/.claude/skills/api-contract-guard/SKILL.md b/.claude/skills/api-contract-guard/SKILL.md index 731cbc4..4435301 100644 --- a/.claude/skills/api-contract-guard/SKILL.md +++ b/.claude/skills/api-contract-guard/SKILL.md @@ -1,4 +1,5 @@ --- + name: api-contract-guard description: detect-images の応答形・エラーコード・HTTP ステータス・エラー優先順位・部分成功不変条件に後方互換を壊す変更が無いかを検査する。PR 前や API 周辺を変更した後に使う。 disable-model-invocation: true diff --git a/.claude/skills/native-deps-guard/SKILL.md b/.claude/skills/native-deps-guard/SKILL.md index 4d5c3b4..be7189f 100644 --- a/.claude/skills/native-deps-guard/SKILL.md +++ b/.claude/skills/native-deps-guard/SKILL.md @@ -1,4 +1,5 @@ --- + name: native-deps-guard description: onnxruntime-node / Node / Docker ベースイメージなどネイティブ ML スタック依存を上げる前に、glibc・Docker runtime の Node22 との整合を確認する。依存のバージョンを上げる時に使う。 disable-model-invocation: true diff --git a/.claude/skills/preflight/SKILL.md b/.claude/skills/preflight/SKILL.md index 67f6350..b333e8f 100644 --- a/.claude/skills/preflight/SKILL.md +++ b/.claude/skills/preflight/SKILL.md @@ -1,4 +1,5 @@ --- + name: preflight description: PR・コミット前に CI 相当のローカル関門(typecheck / lint / unit / integration / docker build)を順に通し、落ちた所だけ報告する。CI が未整備の間の関門であり、のちの CI 仕様でもある。 disable-model-invocation: true @@ -10,9 +11,9 @@ allowed-tools: Bash, Read リポジトリルートで以下を順に実行する。**途中で落ちても残りは続行**し、最後に 「どこが緑/赤か」を一覧にする。すべて緑なら「PR 可」と明言する。 -1. `pnpm run typecheck` — core を build してから各 package を `tsc --noEmit`。 -2. `pnpm run lint` — `biome check .`。 -3. `pnpm run test:unit` — 純粋ロジック。 +1. `pnpm run typecheck` — core を build してから各 package を `tsc --noEmit`。 +2. `pnpm run lint` — `biome check .`。 +3. `pnpm run test:unit` — 純粋ロジック。 4. `pnpm run test:integration` — 実モデルロード+実 classify。 **モデル不在なら自動 skip** される(その場合は「skip」と明示し、緑とは区別する)。 CPU/arch 非対応(x64 / arm64 以外)は skip ではなく失敗として扱う。 @@ -22,12 +23,12 @@ allowed-tools: Bash, Read ## 報告フォーマット -| step | 結果 | -| --- | --- | -| typecheck | ✅ / ❌ | -| lint | ✅ / ❌ | -| test:unit | ✅ / ❌ | +| step | 結果 | +| ---------------- | ---------------- | +| typecheck | ✅ / ❌ | +| lint | ✅ / ❌ | +| test:unit | ✅ / ❌ | | test:integration | ✅ / ❌ / ⏭ skip | -| docker build | ✅ / ❌ | +| docker build | ✅ / ❌ | 赤があれば、そのコマンドの末尾出力から原因行を引用し、最小の修正方針を添える。 diff --git a/.claude/skills/scope-guard/SKILL.md b/.claude/skills/scope-guard/SKILL.md index 2bd5c18..e4e79c5 100644 --- a/.claude/skills/scope-guard/SKILL.md +++ b/.claude/skills/scope-guard/SKILL.md @@ -1,4 +1,5 @@ --- + name: scope-guard description: sensitive-detector に機能を足す時の判断軸と、生予測値サービスとしての不変条件。コードを書く・レビューする・新機能を検討する時に常に適用する。 user-invocable: false @@ -15,7 +16,7 @@ HTTP サイドカーに切り出したもの。切り出して嬉しいのは ** 新機能・新エンドポイントを検討する時は、まず次を問う: 1. **ネイティブ ML スタックの隔離に必要か?** 必要なら足してよい(例: 将来の detect-file 構想、 - モデル情報の公開など)。「`/v1/detect-images` 1 本のみ」は *現状の数* であって固定ルールではない。 + モデル情報の公開など)。「`/v1/detect-images` 1 本のみ」は _現状の数_ であって固定ルールではない。 2. **「正規化済み入力 → 推論 → 生予測値」に徹しているか?** 3. **正規化・しきい値・集約を持ち込んでいないか?** diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index 5dfbadb..e90bdfb 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -4,7 +4,7 @@ description: Setup pnpm, Node.js 22, install dependencies, and build runs: using: composite steps: - - uses: pnpm/action-setup@v6.0.9 + - uses: pnpm/action-setup@v6.1.0 - uses: actions/setup-node@v7.1.0 with: node-version: 22 diff --git a/README.md b/README.md index ab36dcc..b059b36 100644 --- a/README.md +++ b/README.md @@ -13,11 +13,11 @@ Misskey 本体の `AiService.detectSensitive`(NSFW 推論)を切り出した 複数の正規化済み画像を一括推論する。詳しい入出力仕様、型、エラー、実装例は [docs/api-detect-images.md](docs/api-detect-images.md) を参照。 -| | | -| --- | --- | -| Content-Type | `multipart/form-data` | -| Authorization | `Bearer `(`config.apiKey` 設定時のみ要求) | -| Body | 各パートに画像バイナリ(フィールド名は任意、順序を保持)。パートの Content-Type は `image/png` | +| | | +| ------------- | ---------------------------------------------------------------------------------------------- | +| Content-Type | `multipart/form-data` | +| Authorization | `Bearer `(`config.apiKey` 設定時のみ要求) | +| Body | 各パートに画像バイナリ(フィールド名は任意、順序を保持)。パートの Content-Type は `image/png` | 成功(200): @@ -45,13 +45,13 @@ Misskey 本体の `AiService.detectSensitive`(NSFW 推論)を切り出した 全体失敗(4xx/5xx)はリクエスト全体に問題がある場合のみ: -| code | status | 意味 | -| --- | --- | --- | -| `AUTHENTICATION_REQUIRED` | 401 | トークン欠落 / 不一致 | -| `INVALID_REQUEST` | 400 | パーツなし / multipart パース失敗 | -| `UNSUPPORTED_MEDIA_TYPE` | 415 | Content-Type が `multipart/form-data` 以外 | -| `REQUEST_TOO_LARGE` | 413 | リクエストボディが `maxBodySize` 超過、またはパーツ数が `maxParts` 超過 | -| `DETECTION_FAILED` | 500 | リクエスト処理パイプラインの想定外エラー | +| code | status | 意味 | +| ------------------------- | ------ | ----------------------------------------------------------------------- | +| `AUTHENTICATION_REQUIRED` | 401 | トークン欠落 / 不一致 | +| `INVALID_REQUEST` | 400 | パーツなし / multipart パース失敗 | +| `UNSUPPORTED_MEDIA_TYPE` | 415 | Content-Type が `multipart/form-data` 以外 | +| `REQUEST_TOO_LARGE` | 413 | リクエストボディが `maxBodySize` 超過、またはパーツ数が `maxParts` 超過 | +| `DETECTION_FAILED` | 500 | リクエスト処理パイプラインの想定外エラー | パーツ個別の失敗(画像 dimensions 上限超過による `REQUEST_TOO_LARGE`、`IMAGE_DECODE_FAILED` 等)は `results[i].error.code` に入り、HTTP は 200。 diff --git a/biome.jsonc b/biome.jsonc index 34f3ce2..de836ef 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.4.16/schema.json", + "$schema": "https://biomejs.dev/schemas/2.6.4/schema.json", "vcs": { "enabled": true, "clientKind": "git", @@ -19,7 +19,7 @@ "linter": { "enabled": true, "rules": { - "recommended": true + "preset": "recommended" } }, "javascript": { diff --git a/docs/api-detect-images.md b/docs/api-detect-images.md index 1557131..d6a00d7 100644 --- a/docs/api-detect-images.md +++ b/docs/api-detect-images.md @@ -16,32 +16,32 @@ Authorization: Bearer ### ヘッダー -| Header | 型 | 必須 | 説明 | -| --- | --- | --- | --- | -| `Content-Type` | `multipart/form-data` | はい | JSON や単一画像バイナリではなく、必ず multipart で送る。`boundary` は HTTP クライアントに生成させる。 | -| `Authorization` | `Bearer ` | 条件付き | `config.apiKey` 設定時のみ必要。欠落または不一致の場合は 401。 | -| `X-Request-Id` | `string` | いいえ | ログ相関用。英数字、`-`、`_`、`.` の有効な値ならレスポンスにも同じ値が返る。不正または未指定ならサーバーが生成する。 | +| Header | 型 | 必須 | 説明 | +| --------------- | --------------------- | -------- | -------------------------------------------------------------------------------------------------------------------- | +| `Content-Type` | `multipart/form-data` | はい | JSON や単一画像バイナリではなく、必ず multipart で送る。`boundary` は HTTP クライアントに生成させる。 | +| `Authorization` | `Bearer ` | 条件付き | `config.apiKey` 設定時のみ必要。欠落または不一致の場合は 401。 | +| `X-Request-Id` | `string` | いいえ | ログ相関用。英数字、`-`、`_`、`.` の有効な値ならレスポンスにも同じ値が返る。不正または未指定ならサーバーが生成する。 | ### multipart body 各パートに画像ファイルを入れる。フィールド名は任意で、レスポンスの `results` はリクエストパートの順序に対応する。 -| 項目 | 型 | 必須 | 説明 | -| --- | --- | --- | --- | -| field name | `string` | はい | 任意。例: `image0`、`image1`。同じ名前を繰り返してもよいが、呼び出し元では順序で対応付ける。 | -| filename | `string` | 任意 | API の判定には使わない。 | -| part `Content-Type` | `image/png` \| `image/jpeg` \| `image/gif` \| `image/bmp` | はい | これ以外はそのパートだけ `UNSUPPORTED_MEDIA_TYPE` になる。 | -| part body | binary | はい | 正規化済み画像バイト。空ボディはそのパートだけ `INVALID_REQUEST` になる。 | +| 項目 | 型 | 必須 | 説明 | +| ------------------- | --------------------------------------------------------- | ---- | -------------------------------------------------------------------------------------------- | +| field name | `string` | はい | 任意。例: `image0`、`image1`。同じ名前を繰り返してもよいが、呼び出し元では順序で対応付ける。 | +| filename | `string` | 任意 | API の判定には使わない。 | +| part `Content-Type` | `image/png` \| `image/jpeg` \| `image/gif` \| `image/bmp` | はい | これ以外はそのパートだけ `UNSUPPORTED_MEDIA_TYPE` になる。 | +| part body | binary | はい | 正規化済み画像バイト。空ボディはそのパートだけ `INVALID_REQUEST` になる。 | ### 入力制限 設定値は [config.example.mjs](../config.example.mjs) を参照。 -| 制限 | 対象 | 超過時 | -| --- | --- | --- | -| `maxBodySize` | リクエスト全体 | HTTP 413。`success: false` の全体エラー。 | -| `maxParts` | multipart パート数 | HTTP 413。`success: false` の全体エラー。 | -| `maxBinarySize` | 各画像パートのバイト数 | HTTP 200 のまま、該当 `results[i]` が `REQUEST_TOO_LARGE`。 | +| 制限 | 対象 | 超過時 | +| ----------------------------------------------------- | --------------------------- | ----------------------------------------------------------- | +| `maxBodySize` | リクエスト全体 | HTTP 413。`success: false` の全体エラー。 | +| `maxParts` | multipart パート数 | HTTP 413。`success: false` の全体エラー。 | +| `maxBinarySize` | 各画像パートのバイト数 | HTTP 200 のまま、該当 `results[i]` が `REQUEST_TOO_LARGE`。 | | `maxImageWidth` / `maxImageHeight` / `maxImagePixels` | デコード後の画像 dimensions | HTTP 200 のまま、該当 `results[i]` が `REQUEST_TOO_LARGE`。 | 既定値では 299x299 までの正規化済み画像を想定している。 @@ -96,31 +96,31 @@ type DetectErrorCode = #### 成功パート -| Field | 型 | 説明 | -| --- | --- | --- | -| `success` | `true` | パート単位の推論に成功したことを表す。 | -| `predictions` | `Prediction[]` | 推論モデルの生出力。サービス側ではしきい値判定やクラスの集約をしない。 | -| `predictions[].className` | `string` | クラス名。現在同梱しているモデルでは `Drawing`、`Hentai`、`Neutral`、`Porn`、`Sexy`。API 型としては将来のモデル差し替えに備えて `string`。 | -| `predictions[].probability` | `number` | 確率。通常は `0` 以上 `1` 以下。 | +| Field | 型 | 説明 | +| --------------------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | +| `success` | `true` | パート単位の推論に成功したことを表す。 | +| `predictions` | `Prediction[]` | 推論モデルの生出力。サービス側ではしきい値判定やクラスの集約をしない。 | +| `predictions[].className` | `string` | クラス名。現在同梱しているモデルでは `Drawing`、`Hentai`、`Neutral`、`Porn`、`Sexy`。API 型としては将来のモデル差し替えに備えて `string`。 | +| `predictions[].probability` | `number` | 確率。通常は `0` 以上 `1` 以下。 | #### 失敗パート -| Field | 型 | 説明 | -| --- | --- | --- | -| `success` | `false` | そのパートだけ処理に失敗したことを表す。 | -| `error.code` | `DetectErrorCode` | 呼び出し元が分岐に使う安定したコード。 | -| `error.message` | `string` | 人間向けの診断テキスト。内容は API 契約として固定しない。 | +| Field | 型 | 説明 | +| --------------- | ----------------- | --------------------------------------------------------- | +| `success` | `false` | そのパートだけ処理に失敗したことを表す。 | +| `error.code` | `DetectErrorCode` | 呼び出し元が分岐に使う安定したコード。 | +| `error.message` | `string` | 人間向けの診断テキスト。内容は API 契約として固定しない。 | パート単位で返り得る主な `error.code`: -| code | 意味 | -| --- | --- | -| `INVALID_REQUEST` | パートがファイルではない、または空ボディ。 | -| `UNSUPPORTED_MEDIA_TYPE` | パートの `Content-Type` が未対応。 | -| `REQUEST_TOO_LARGE` | パートサイズまたは画像 dimensions が上限超過。 | -| `IMAGE_DECODE_FAILED` | 画像バイトを読み取れない、または画像 dimensions を読めない。 | -| `MODEL_UNAVAILABLE` | モデルが利用できない。CPU 非対応、モデルロード失敗など。 | -| `DETECTION_FAILED` | 推論処理の失敗、タイムアウト、想定外エラー。 | +| code | 意味 | +| ------------------------ | ------------------------------------------------------------ | +| `INVALID_REQUEST` | パートがファイルではない、または空ボディ。 | +| `UNSUPPORTED_MEDIA_TYPE` | パートの `Content-Type` が未対応。 | +| `REQUEST_TOO_LARGE` | パートサイズまたは画像 dimensions が上限超過。 | +| `IMAGE_DECODE_FAILED` | 画像バイトを読み取れない、または画像 dimensions を読めない。 | +| `MODEL_UNAVAILABLE` | モデルが利用できない。CPU 非対応、モデルロード失敗など。 | +| `DETECTION_FAILED` | 推論処理の失敗、タイムアウト、想定外エラー。 | ### 全体エラー: HTTP 4xx / 5xx @@ -136,13 +136,13 @@ type ErrorResponse = { }; ``` -| status | code | 主な原因 | -| --- | --- | --- | -| 400 | `INVALID_REQUEST` | multipart パース失敗、パートなし。 | -| 401 | `AUTHENTICATION_REQUIRED` | `config.apiKey` 設定時に Bearer token が欠落または不一致。 | -| 413 | `REQUEST_TOO_LARGE` | リクエスト全体の `maxBodySize` 超過、または `maxParts` 超過。 | -| 415 | `UNSUPPORTED_MEDIA_TYPE` | リクエストの `Content-Type` が `multipart/form-data` ではない。 | -| 500 | `DETECTION_FAILED` | リクエスト処理パイプラインの想定外エラー。 | +| status | code | 主な原因 | +| ------ | ------------------------- | --------------------------------------------------------------- | +| 400 | `INVALID_REQUEST` | multipart パース失敗、パートなし。 | +| 401 | `AUTHENTICATION_REQUIRED` | `config.apiKey` 設定時に Bearer token が欠落または不一致。 | +| 413 | `REQUEST_TOO_LARGE` | リクエスト全体の `maxBodySize` 超過、または `maxParts` 超過。 | +| 415 | `UNSUPPORTED_MEDIA_TYPE` | リクエストの `Content-Type` が `multipart/form-data` ではない。 | +| 500 | `DETECTION_FAILED` | リクエスト処理パイプラインの想定外エラー。 | このエンドポイントの通常処理では、画像デコード失敗の `IMAGE_DECODE_FAILED` とモデル利用不可の `MODEL_UNAVAILABLE` は全体エラーではなく、HTTP 200 の `results[i].error.code` に入る。 @@ -168,14 +168,8 @@ import { readFile } from 'node:fs/promises'; const form = new FormData(); -form.append( - 'image0', - new File([await readFile('frame1.png')], 'frame1.png', { type: 'image/png' }), -); -form.append( - 'image1', - new File([await readFile('frame2.png')], 'frame2.png', { type: 'image/png' }), -); +form.append('image0', new File([await readFile('frame1.png')], 'frame1.png', { type: 'image/png' })); +form.append('image1', new File([await readFile('frame2.png')], 'frame2.png', { type: 'image/png' })); const res = await fetch('http://127.0.0.1:3000/v1/detect-images', { method: 'POST', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3bf876e..c723730 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -165,29 +165,29 @@ settings: catalogs: default: '@biomejs/biome': - specifier: 2.5.0 - version: 2.5.0 + specifier: 2.6.4 + version: 2.6.4 '@hono/node-server': - specifier: 2.1.3 - version: 2.1.3 + specifier: 2.1.5 + version: 2.1.5 '@types/node': - specifier: 22.19.21 - version: 22.19.21 + specifier: 22.20.5 + version: 22.20.5 '@types/pngjs': specifier: 6.0.5 version: 6.0.5 hono: - specifier: 4.13.11 - version: 4.13.11 + specifier: 4.13.14 + version: 4.13.14 onnxruntime-node: - specifier: 1.27.0 - version: 1.27.0 + specifier: 1.31.1 + version: 1.31.1 pino: - specifier: 10.3.1 - version: 10.3.1 + specifier: 10.4.0 + version: 10.4.0 pino-pretty: - specifier: 13.1.3 - version: 13.1.3 + specifier: 13.2.0 + version: 13.2.0 pngjs: specifier: 7.0.0 version: 7.0.0 @@ -195,14 +195,14 @@ catalogs: specifier: 0.23.4 version: 0.23.4 tsx: - specifier: 4.22.4 - version: 4.22.4 + specifier: 4.23.15 + version: 4.23.15 typescript: specifier: 7.0.2 version: 7.0.2 vitest: - specifier: 4.1.11 - version: 4.1.11 + specifier: 4.1.12 + version: 4.1.12 importers: @@ -210,47 +210,47 @@ importers: devDependencies: '@biomejs/biome': specifier: 'catalog:' - version: 2.5.0 + version: 2.6.4 '@types/node': specifier: 'catalog:' - version: 22.19.21 + version: 22.20.5 tsdown: specifier: 'catalog:' - version: 0.23.4(tsx@4.22.4)(typescript@7.0.2) + version: 0.23.4(tsx@4.23.15)(typescript@7.0.2) tsx: specifier: 'catalog:' - version: 4.22.4 + version: 4.23.15 typescript: specifier: 'catalog:' version: 7.0.2 vitest: specifier: 'catalog:' - version: 4.1.11(@types/node@22.19.21)(vite@8.0.16(@types/node@22.19.21)(esbuild@0.28.0)(tsx@4.22.4)) + version: 4.1.12(@types/node@22.20.5)(vite@8.0.16(@types/node@22.20.5)(esbuild@0.28.0)(tsx@4.23.15)) apps/server: dependencies: '@hono/node-server': specifier: 'catalog:' - version: 2.1.3(hono@4.13.11) + version: 2.1.5(hono@4.13.14) '@misskey-sensitive-detector/core': specifier: workspace:* version: link:../../packages/core hono: specifier: 'catalog:' - version: 4.13.11 + version: 4.13.14 pino: specifier: 'catalog:' - version: 10.3.1 + version: 10.4.0 devDependencies: pino-pretty: specifier: 'catalog:' - version: 13.1.3 + version: 13.2.0 packages/core: dependencies: onnxruntime-node: specifier: 'catalog:' - version: 1.27.0 + version: 1.31.1 pngjs: specifier: 'catalog:' version: 7.0.0 @@ -261,59 +261,71 @@ importers: packages: - '@biomejs/biome@2.5.0': - resolution: {integrity: sha512-4kURkd9hAPrdDM3C9n82ycYgx8hvQcW6MjKTEejruj8rK0N8P3OPpdy8BvI8kt3KWY4ycF5XtDOrktetEfhfuw==} + '@biomejs/biome@2.6.4': + resolution: {integrity: sha512-8sKKwaNW4ot22awZ3lBjwWLHnUFXgXnrBPYS2gNlBAXRbDC++7kqjK2H7dR/FgCDtPvO1xfKpgEhJkGxAKYkxA==} engines: {node: '>=14.21.3'} hasBin: true - '@biomejs/cli-darwin-arm64@2.5.0': - resolution: {integrity: sha512-Mn3Fwi3SA5fgmfCPqmzpWF2DLZnms3BVAhM088nTnGrTZmHS3wwIjcoZPqpXeNgd3DrrLH6xp8vTLIBuJoZiXw==} + '@biomejs/cli-android-arm64@2.6.4': + resolution: {integrity: sha512-jwrwigP4tBcHxzuV8izioX/BOUhJL/4e2rNSOE5nCjBkVC018LQAQUGiH+CNkFYvLtQ1dcZo5/xXERmaAGc7JQ==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [android] + + '@biomejs/cli-android-x64@2.6.4': + resolution: {integrity: sha512-HdGInPJ4nZFwHxzvEtcp2nmSBtUyJrurmtIK43upFckuS3+ZqVM05HtsxQWnqGsuy/pxckIAjyKWlEKRlBXUyA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [android] + + '@biomejs/cli-darwin-arm64@2.6.4': + resolution: {integrity: sha512-0VvcUz46wbg59Q4TZ59KkIjDJrxEyu4Eoe79+F4SChxoWe+W7AEyIp6F5r72C9+p6MsB6dIovnZt1D30lGM3XA==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [darwin] - '@biomejs/cli-darwin-x64@2.5.0': - resolution: {integrity: sha512-rg3VPL5P8mYro6pqlXYXuJWph21slVp3SZtAqWSrkZs40d2gTzYmHF8E/X1iTID25btmNKltNDJ926sqVBp7DQ==} + '@biomejs/cli-darwin-x64@2.6.4': + resolution: {integrity: sha512-fxmvkF81srlS3DiMyfm+aG3J0eG+6/BjaxRyjy57KbLSafnq0PO+hHfVWmtH2ty0S7nm6yDXBRwySfFeaRJKRQ==} engines: {node: '>=14.21.3'} cpu: [x64] os: [darwin] - '@biomejs/cli-linux-arm64-musl@2.5.0': - resolution: {integrity: sha512-vQdM4oSGaf7ZNeGO9w5+Y8SBtyser9M6znxYbm7Ec8wInxJu1WiKxFYZW5Auj2d80bcVvefuGGRxoFOE0eee8g==} + '@biomejs/cli-linux-arm64-musl@2.6.4': + resolution: {integrity: sha512-31ZaH/MHqPX+O+evRwRrCHQ8W5/9adY+/eMytGGWZnRx1T41QsWIF09+/WujynLBhWZUxNGS5CtsWLwgOFTAyg==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [musl] - '@biomejs/cli-linux-arm64@2.5.0': - resolution: {integrity: sha512-tl+LW8fdD96/xdeWtWwc82LIOc5CoY7N2AsogLTp5R4ECErYt+8Jl/N68ezN9vzSiqPTxw6vjcihoLPYKZHrlw==} + '@biomejs/cli-linux-arm64@2.6.4': + resolution: {integrity: sha512-6+bK1Y/evmIUiJr7auertuMbiaYVicJhqA1bZyL47lCMWugv8l0gFQCqvR/gN1vZMHYm+HwoTKgeMxdNFCoQTg==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [linux] libc: [glibc] - '@biomejs/cli-linux-x64-musl@2.5.0': - resolution: {integrity: sha512-+9hIcMngJ+yGUahXqZuZ8CoWKJE9SAZsFsM3QDvXpNsLbXZ9lqVzgBhOk/jTSYkOA0GLP9eu3teukqpLUojHMg==} + '@biomejs/cli-linux-x64-musl@2.6.4': + resolution: {integrity: sha512-bomSa2XdQAGGj6Cwdm4M13qE+lN9+AOlW8KtI4hdyVyRRF/Z71qPAi95T4wtdZK0QpBbkTW8hgbZZCwPi4xzIw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [musl] - '@biomejs/cli-linux-x64@2.5.0': - resolution: {integrity: sha512-zpEGf4RQbFEh8Vt7OmavLyyOzRbtcE9osCqrS1kfvt8jDvxwhKXLSf7n0ebr/ov0RJ9ssP+lhs6C8a9WwFvrQA==} + '@biomejs/cli-linux-x64@2.6.4': + resolution: {integrity: sha512-tbFZMdL6dP/ws4edXxYG9WhvaVa1ZDzL4G5DzahnWW7Psib9H+VTdyU4XXVxpJk5j/nYZroSbvSNyYlpW3yCIw==} engines: {node: '>=14.21.3'} cpu: [x64] os: [linux] libc: [glibc] - '@biomejs/cli-win32-arm64@2.5.0': - resolution: {integrity: sha512-jB0wAvTLI4itx5VidqVUejPQFhRUxiZ9l9FvZ26D5fl6t3qme+ZB4PD3bTSeL1vZ8NI2Rx/zj6H9zcESuGHKGw==} + '@biomejs/cli-win32-arm64@2.6.4': + resolution: {integrity: sha512-eCsqt8Ma3eVap+oyJCDnJZH60SIU464B66n3y38EUTJdM1T/HfZol1FJC9vb+sHToX0ix8XzqPcwJnOzyAJz0g==} engines: {node: '>=14.21.3'} cpu: [arm64] os: [win32] - '@biomejs/cli-win32-x64@2.5.0': - resolution: {integrity: sha512-VT/lF+GId+67j8aDfLkxdxNoVApsPSTbyAtB3jJq0IWTrY77WXfbPfpngxq0bA6JCEv/7k8C9qWjDRKRznDlyw==} + '@biomejs/cli-win32-x64@2.6.4': + resolution: {integrity: sha512-pYsMy5AThiHFOZAsngg8qN4PurM6nInKBhVX7sbj3eNpRQqo1Hb0MgCwPL7VqVMrmcEEMj9Ks3qbkallR65e8g==} engines: {node: '>=14.21.3'} cpu: [x64] os: [win32] @@ -483,11 +495,11 @@ packages: cpu: [x64] os: [win32] - '@hono/node-server@2.1.3': - resolution: {integrity: sha512-TA//nWMqPhbfdfneACk6t5a9eqbS9lABEPyKn0/xZTah3H3U2XaVg85rJFl0/Fyit0I552YDHgXGVSf3GwqbUw==} + '@hono/node-server@2.1.5': + resolution: {integrity: sha512-MgP/I06GdvsilDspMk/qmRzpk8LOUStP6jFAbSRi40W09DhoyUn+Mj7eyKICPqeYKybOjVFLVIAQzvu1bfIa7Q==} engines: {node: '>=20'} peerDependencies: - hono: ^4 + hono: ^4 || ^5.0.0-0 '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} @@ -719,8 +731,8 @@ packages: '@types/estree@1.0.9': resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==} - '@types/node@22.19.21': - resolution: {integrity: sha512-VMeFBSCKQKmm2swI2kW51SFusDqekC6q9trBCvJ/JliDchFSuoYYKN7yVNjPthP1HKZcx3U1gI/wTcEBjEFKTA==} + '@types/node@22.20.5': + resolution: {integrity: sha512-U2+DNr+wSjpsTS/wZGYHq7GcwfuSmKiKvoPvK22zwTlRhU91yOniN4qRR5KhIjvif7ysw/dz/hKmfDH0Ris4aA==} '@types/pngjs@6.0.5': resolution: {integrity: sha512-0k5eKfrA83JOZPppLtS2C7OUtyNAl2wKNxfyYl9Q5g9lPkgBl/9hNyAu6HuEH2J4XmIv2znEpkDd0SaZVxW6iQ==} @@ -845,11 +857,11 @@ packages: cpu: [x64] os: [win32] - '@vitest/expect@4.1.11': - resolution: {integrity: sha512-VX2x5vNJXET47KAFzwERI+KRMtTTCSWTfSMKsW7JsUsXV4psq++e3DvZpuTDOpHcxytiDs6p2nhVb2tVDiiUYw==} + '@vitest/expect@4.1.12': + resolution: {integrity: sha512-vFlTt+YEu9WBpNjdGayNmlMVzrWPi1+sv853/7t2FU7hpO5gAFBKHzQmkCq5Xjpr+evegF2994LQT3hF3mRlqQ==} - '@vitest/mocker@4.1.11': - resolution: {integrity: sha512-2XJVD55d1o5AZous5CCGKS74g/riOj9odEt2bQpCVZeblHyHdnMeFl4jl0XjU21stf4mbjUkew2eXQZt65g5CQ==} + '@vitest/mocker@4.1.12': + resolution: {integrity: sha512-fKShNpKZzupWZuY0z7egydvL0sqW4INEZBEExMBMAa6izlENEVHwoXgdaTCaBZ5fwlr4xf2o1wXC83n9RpO+NA==} peerDependencies: msw: ^2.4.9 vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -859,20 +871,20 @@ packages: vite: optional: true - '@vitest/pretty-format@4.1.11': - resolution: {integrity: sha512-yiZzPbGTS9Sr/JpFl8zHrcIkAofNbFV6k21vIgQN/cY/oxZeXhJv5sc/MBJ5jFKWmWs+oJHw0UXLZjmf931+Vw==} + '@vitest/pretty-format@4.1.12': + resolution: {integrity: sha512-XW9O8+Mxx4VpCtkYdMJLZQQwsVryP9wk7cPKDxtXFfwSak6yRh5+2fep/Y0XF/ElBvJHq8bcYdi6aeuai0opZA==} - '@vitest/runner@4.1.11': - resolution: {integrity: sha512-LztvUgdwMNJMIkj3hQnnxiC2Xy1zNxq928W/xhjCLaNCzqTZOudjwbQf6v9IntZGPw132i2Lq2rgTRZHD3JHNw==} + '@vitest/runner@4.1.12': + resolution: {integrity: sha512-NKlVKCr5QnCe8jijdMnmkpHHU+WTqiLFR6G0pHji9uRjXK9xJl1k1nTw6F3pOOj2PDcsDt2GKQMI7wIsaT491w==} - '@vitest/snapshot@4.1.11': - resolution: {integrity: sha512-pN7ikn1ON7h8ee4gIAp4AzyK+zBtJPzVbqOgu5LCEh4VaJVbPQcgYQYJIMGQPXVeJJq1fnfazis7a5pFNPahog==} + '@vitest/snapshot@4.1.12': + resolution: {integrity: sha512-ko1y1Qgb/slzQ9mr+b89Cuqud8WG1TKtsPD8r7ZUBdvVOGt85Af2HwCqHujrhwJq95hs/9RM7fcAPg57o1vlzw==} - '@vitest/spy@4.1.11': - resolution: {integrity: sha512-apNa/prQy2qCeywhnixOHPRCgGNhvg7T4Dapfl1GahLp/R+uhBm5cPyFoNVyqsNd2h1nJxL6BqqdIjiABL60YA==} + '@vitest/spy@4.1.12': + resolution: {integrity: sha512-RGq9x4JNGNTZHEJxvN0oSiJjeSCExm0n2gZKKJZHY9cX5AVA6M7VJILBT3ZJ/tJ/0J9uWT7fETV9/btoi//vSg==} - '@vitest/utils@4.1.11': - resolution: {integrity: sha512-zTCVGpyFsGWBhllOyKlTw/vnr6D9qxsfSDyfbyZmTyjHw5N/VuvzHpHoQjm2ZJzn4RJgx5w4r7V0er69CmLgPQ==} + '@vitest/utils@4.1.12': + resolution: {integrity: sha512-Q3awXrwOfEV+qc3WmO5ONyE0yO7Q1gQ9/oyHxGLZ/pl7N3NO/ZztqQwKLuwMkV+CA1JYSIeO3gkHnRDIo4AVaA==} '@yuku-core/binding-android-arm64@0.19.0': resolution: {integrity: sha512-wdL2XmTiZixAOaHk9Z0JJZ8u9Qm8d333Zjpc6gaxXFX+UR5BlsfxZ7a2+2Rm71pamppsPYGUGFq2oVLbh6DISw==} @@ -943,9 +955,9 @@ packages: '@yuku-toolchain/types@0.19.0': resolution: {integrity: sha512-tFkNbsP4WXX9UMUC5syJGdK9dPMLK0PPaIuXCcCYH75sZ8MrebfBZ2XvCILRTw8AgLivSSCfDa4R67iYBDa4Kg==} - adm-zip@0.5.17: - resolution: {integrity: sha512-+Ut8d9LLqwEvHHJl1+PIHqoyDxFgVN847JTVM3Izi3xHDWPE4UtzzXysMZQs64DMcrJfBeS/uoEP4AD3HQHnQQ==} - engines: {node: '>=12.0'} + adm-zip@0.6.1: + resolution: {integrity: sha512-Xwrja8nx9e5o2N1my4DsKCeKpdrnACyr1wtbPxBDgGzKzKyE9kRtBFA8mWldI+RVlD7CBZNWY/wQ2+ydwOR6kQ==} + engines: {node: '>=14.0'} assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} @@ -1072,8 +1084,8 @@ packages: help-me@5.0.0: resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} - hono@4.13.11: - resolution: {integrity: sha512-/SMX/RQNJn7oNmFwH6DtwDqcrzZU2otm1FD6OJe2cWF6cfy/F8hq0XVBv7xW3FTJshRQwuBnXHDq2kNsdZnshg==} + hono@4.13.14: + resolution: {integrity: sha512-yhRLQ21U6qa9Hsu2N7Qcbh8tE+WKEcoErjIo56LeSGiGXGp9sA7UpE86Ui9uexb61KakiGwuHMn2QdV7w6i6kQ==} engines: {node: '>=16.9.0'} hookable@6.1.2: @@ -1195,11 +1207,11 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - onnxruntime-common@1.27.0: - resolution: {integrity: sha512-3KxL5wIVqa8Ex08jxSzncm9CMgw8CjOFyOQ7SxvG9o0cVLlhTNKXyIQuTbtX4tGPJEf73OER2xrjt4HJSBL4ow==} + onnxruntime-common@1.31.1: + resolution: {integrity: sha512-F+nnYNiQtmNJ95V6R/isBJqiVpdANCrsMEg1OaF+Bkbl3GAtzWLR7Ng17Ld0QtYtYJyotOHPJzOQn1Y6PLZjpg==} - onnxruntime-node@1.27.0: - resolution: {integrity: sha512-QEzGwrvNBgv4uPVdnbHsOGG4G6T96mdlcFI8aAKPjMU8wOPpVocPXb6k3QGkaZagVTv2G9Bnnbo6Z3JdXr1fQw==} + onnxruntime-node@1.31.1: + resolution: {integrity: sha512-ijnSghbDHVWaQ2nDPmVccPlCHI8kH1Mx1aJ4a/qzRP16bBcVs4E3EqZQKZCkhWnbqN1tuQWxagimFtDpbPYYQw==} os: [win32, darwin, linux] pathe@2.0.3: @@ -1219,15 +1231,15 @@ packages: pino-abstract-transport@3.0.0: resolution: {integrity: sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==} - pino-pretty@13.1.3: - resolution: {integrity: sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==} + pino-pretty@13.2.0: + resolution: {integrity: sha512-jjghD1ML+Di/WxjJDz6j6Y4FT7hIXOlb8h27AyJ+ohtAXJXH4PS/xkv7si+RCCIW59HMgZsMKTDgzdr0RhuRrg==} hasBin: true pino-std-serializers@7.1.0: resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==} - pino@10.3.1: - resolution: {integrity: sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==} + pino@10.4.0: + resolution: {integrity: sha512-bk1ZMTwG/Vymx+zPoa28MhNzucFvXJWp3csrSuxuHPSMeUettaCoQ5Jvg07mtC4JGNpcfTwz41oVCnNgBK9+vA==} hasBin: true pngjs@7.0.0: @@ -1250,10 +1262,6 @@ packages: quick-format-unescaped@4.0.4: resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} - real-require@0.2.0: - resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} - engines: {node: '>= 12.13.0'} - real-require@1.0.0: resolution: {integrity: sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g==} @@ -1314,6 +1322,9 @@ packages: sonic-boom@4.2.1: resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==} + sonic-boom@5.0.2: + resolution: {integrity: sha512-/JEruzo6yhNVhsLblTRchgTQHIt7SsdJP0YyrfWaNKjIOQDfrdZv9gwYraYCAsmKV39/LAdV31FLL5NCDpoL/A==} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -1339,10 +1350,6 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@1.2.4: - resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} - engines: {node: '>=18'} - tinyexec@1.3.1: resolution: {integrity: sha512-GCvB3aoys96IuDFBMcTB46JOR6mdMtAToqwiW8JlWhsoh1mhHi/xn9ss/Dg7N555GiJyEt2qzoG/NHCwM6h1EA==} engines: {node: '>=18'} @@ -1395,8 +1402,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.22.4: - resolution: {integrity: sha512-X8EX+XV4QR5xCsrgxaED954zTDfY8KqlDtskKEL0cHhyS/P8b4IFOvGDQpsC9Q1XnLq915wEfwwY/zzskCtmhg==} + tsx@4.23.15: + resolution: {integrity: sha512-Yiex1Ovn8z2xPpOWckIiysV1SSyRMY9BkLF++q0yKiDxCqRhosKfMg3janKkiLBwZ5c/YryloKwGZcrEmtwxKw==} engines: {node: '>=18.0.0'} hasBin: true @@ -1462,20 +1469,20 @@ packages: yaml: optional: true - vitest@4.1.11: - resolution: {integrity: sha512-fhACrNXUidIbGSBr5FlbuBkO7VWC1ZyLl0DO4CU2DrQoAPxX84Ysxs+HeGQpii5lZWV1Q4gBZTTu49mF+A6Edw==} + vitest@4.1.12: + resolution: {integrity: sha512-5eWdz2yb3ajxWF3C8C4TjkXl7FGm3n2E/VlazALrQHzK7nYMSGFnCZto0bbPNl77AwkOZVLk0YnBAejUu0NiWA==} engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@opentelemetry/api': ^1.9.0 '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.1.11 - '@vitest/browser-preview': 4.1.11 - '@vitest/browser-webdriverio': 4.1.11 - '@vitest/coverage-istanbul': 4.1.11 - '@vitest/coverage-v8': 4.1.11 - '@vitest/ui': 4.1.11 + '@vitest/browser-playwright': 4.1.12 + '@vitest/browser-preview': 4.1.12 + '@vitest/browser-webdriverio': ^4.1.11 + '@vitest/coverage-istanbul': 4.1.12 + '@vitest/coverage-v8': 4.1.12 + '@vitest/ui': 4.1.12 happy-dom: '*' jsdom: '*' vite: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -1529,39 +1536,47 @@ packages: snapshots: - '@biomejs/biome@2.5.0': + '@biomejs/biome@2.6.4': optionalDependencies: - '@biomejs/cli-darwin-arm64': 2.5.0 - '@biomejs/cli-darwin-x64': 2.5.0 - '@biomejs/cli-linux-arm64': 2.5.0 - '@biomejs/cli-linux-arm64-musl': 2.5.0 - '@biomejs/cli-linux-x64': 2.5.0 - '@biomejs/cli-linux-x64-musl': 2.5.0 - '@biomejs/cli-win32-arm64': 2.5.0 - '@biomejs/cli-win32-x64': 2.5.0 + '@biomejs/cli-android-arm64': 2.6.4 + '@biomejs/cli-android-x64': 2.6.4 + '@biomejs/cli-darwin-arm64': 2.6.4 + '@biomejs/cli-darwin-x64': 2.6.4 + '@biomejs/cli-linux-arm64': 2.6.4 + '@biomejs/cli-linux-arm64-musl': 2.6.4 + '@biomejs/cli-linux-x64': 2.6.4 + '@biomejs/cli-linux-x64-musl': 2.6.4 + '@biomejs/cli-win32-arm64': 2.6.4 + '@biomejs/cli-win32-x64': 2.6.4 + + '@biomejs/cli-android-arm64@2.6.4': + optional: true - '@biomejs/cli-darwin-arm64@2.5.0': + '@biomejs/cli-android-x64@2.6.4': optional: true - '@biomejs/cli-darwin-x64@2.5.0': + '@biomejs/cli-darwin-arm64@2.6.4': optional: true - '@biomejs/cli-linux-arm64-musl@2.5.0': + '@biomejs/cli-darwin-x64@2.6.4': optional: true - '@biomejs/cli-linux-arm64@2.5.0': + '@biomejs/cli-linux-arm64-musl@2.6.4': optional: true - '@biomejs/cli-linux-x64-musl@2.5.0': + '@biomejs/cli-linux-arm64@2.6.4': optional: true - '@biomejs/cli-linux-x64@2.5.0': + '@biomejs/cli-linux-x64-musl@2.6.4': optional: true - '@biomejs/cli-win32-arm64@2.5.0': + '@biomejs/cli-linux-x64@2.6.4': optional: true - '@biomejs/cli-win32-x64@2.5.0': + '@biomejs/cli-win32-arm64@2.6.4': + optional: true + + '@biomejs/cli-win32-x64@2.6.4': optional: true '@emnapi/core@1.10.0': @@ -1658,9 +1673,9 @@ snapshots: '@esbuild/win32-x64@0.28.0': optional: true - '@hono/node-server@2.1.3(hono@4.13.11)': + '@hono/node-server@2.1.5(hono@4.13.14)': dependencies: - hono: 4.13.11 + hono: 4.13.14 '@jridgewell/sourcemap-codec@1.5.5': {} @@ -1793,13 +1808,13 @@ snapshots: '@types/estree@1.0.9': {} - '@types/node@22.19.21': + '@types/node@22.20.5': dependencies: undici-types: 6.21.0 '@types/pngjs@6.0.5': dependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.5 '@typescript/typescript-aix-ppc64@7.0.2': optional: true @@ -1861,44 +1876,44 @@ snapshots: '@typescript/typescript-win32-x64@7.0.2': optional: true - '@vitest/expect@4.1.11': + '@vitest/expect@4.1.12': dependencies: '@standard-schema/spec': 1.1.0 '@types/chai': 5.2.3 - '@vitest/spy': 4.1.11 - '@vitest/utils': 4.1.11 + '@vitest/spy': 4.1.12 + '@vitest/utils': 4.1.12 chai: 6.2.2 tinyrainbow: 3.1.0 - '@vitest/mocker@4.1.11(vite@8.0.16(@types/node@22.19.21)(esbuild@0.28.0)(tsx@4.22.4))': + '@vitest/mocker@4.1.12(vite@8.0.16(@types/node@22.20.5)(esbuild@0.28.0)(tsx@4.23.15))': dependencies: - '@vitest/spy': 4.1.11 + '@vitest/spy': 4.1.12 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.0.16(@types/node@22.19.21)(esbuild@0.28.0)(tsx@4.22.4) + vite: 8.0.16(@types/node@22.20.5)(esbuild@0.28.0)(tsx@4.23.15) - '@vitest/pretty-format@4.1.11': + '@vitest/pretty-format@4.1.12': dependencies: tinyrainbow: 3.1.0 - '@vitest/runner@4.1.11': + '@vitest/runner@4.1.12': dependencies: - '@vitest/utils': 4.1.11 + '@vitest/utils': 4.1.12 pathe: 2.0.3 - '@vitest/snapshot@4.1.11': + '@vitest/snapshot@4.1.12': dependencies: - '@vitest/pretty-format': 4.1.11 - '@vitest/utils': 4.1.11 + '@vitest/pretty-format': 4.1.12 + '@vitest/utils': 4.1.12 magic-string: 0.30.21 pathe: 2.0.3 - '@vitest/spy@4.1.11': {} + '@vitest/spy@4.1.12': {} - '@vitest/utils@4.1.11': + '@vitest/utils@4.1.12': dependencies: - '@vitest/pretty-format': 4.1.11 + '@vitest/pretty-format': 4.1.12 convert-source-map: 2.0.0 tinyrainbow: 3.1.0 @@ -1940,7 +1955,7 @@ snapshots: '@yuku-toolchain/types@0.19.0': {} - adm-zip@0.5.17: {} + adm-zip@0.6.1: {} assertion-error@2.0.1: {} @@ -2058,7 +2073,7 @@ snapshots: help-me@5.0.0: {} - hono@4.13.11: {} + hono@4.13.14: {} hookable@6.1.2: {} @@ -2139,13 +2154,13 @@ snapshots: dependencies: wrappy: 1.0.2 - onnxruntime-common@1.27.0: {} + onnxruntime-common@1.31.1: {} - onnxruntime-node@1.27.0: + onnxruntime-node@1.31.1: dependencies: - adm-zip: 0.5.17 + adm-zip: 0.6.1 global-agent: 4.1.3 - onnxruntime-common: 1.27.0 + onnxruntime-common: 1.31.1 pathe@2.0.3: {} @@ -2159,7 +2174,7 @@ snapshots: dependencies: split2: 4.2.0 - pino-pretty@13.1.3: + pino-pretty@13.2.0: dependencies: colorette: 2.0.20 dateformat: 4.6.3 @@ -2172,12 +2187,12 @@ snapshots: pino-abstract-transport: 3.0.0 pump: 3.0.4 secure-json-parse: 4.1.0 - sonic-boom: 4.2.1 + sonic-boom: 5.0.2 strip-json-comments: 5.0.3 pino-std-serializers@7.1.0: {} - pino@10.3.1: + pino@10.4.0: dependencies: '@pinojs/redact': 0.4.0 atomic-sleep: 1.0.0 @@ -2186,7 +2201,7 @@ snapshots: pino-std-serializers: 7.1.0 process-warning: 5.0.0 quick-format-unescaped: 4.0.4 - real-require: 0.2.0 + real-require: 1.0.0 safe-stable-stringify: 2.5.0 sonic-boom: 4.2.1 thread-stream: 4.2.0 @@ -2210,8 +2225,6 @@ snapshots: quick-format-unescaped@4.0.4: {} - real-require@0.2.0: {} - real-require@1.0.0: {} resolve-pkg-maps@1.0.0: {} @@ -2288,6 +2301,10 @@ snapshots: dependencies: atomic-sleep: 1.0.0 + sonic-boom@5.0.2: + dependencies: + atomic-sleep: 1.0.0 + source-map-js@1.2.1: {} split2@4.2.0: {} @@ -2304,8 +2321,6 @@ snapshots: tinybench@2.9.0: {} - tinyexec@1.2.4: {} - tinyexec@1.3.1: {} tinyglobby@0.2.17: @@ -2317,7 +2332,7 @@ snapshots: tinyrainbow@3.1.0: {} - tsdown@0.23.4(tsx@4.22.4)(typescript@7.0.2): + tsdown@0.23.4(tsx@4.23.15)(typescript@7.0.2): dependencies: cac: 7.1.0 defu: 6.1.7 @@ -2334,7 +2349,7 @@ snapshots: unconfig-core: 7.5.0 verkit: 0.5.0 optionalDependencies: - tsx: 4.22.4 + tsx: 4.23.15 typescript: 7.0.2 transitivePeerDependencies: - '@typescript/native-preview' @@ -2346,7 +2361,7 @@ snapshots: tslib@2.8.1: optional: true - tsx@4.22.4: + tsx@4.23.15: dependencies: esbuild: 0.28.0 optionalDependencies: @@ -2386,43 +2401,43 @@ snapshots: verkit@0.5.0: {} - vite@8.0.16(@types/node@22.19.21)(esbuild@0.28.0)(tsx@4.22.4): + vite@8.0.16(@types/node@22.20.5)(esbuild@0.28.0)(tsx@4.23.15): dependencies: lightningcss: 1.32.0 - picomatch: 4.0.5 + picomatch: 4.0.7 postcss: 8.5.15 rolldown: 1.0.3 tinyglobby: 0.2.17 optionalDependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.5 esbuild: 0.28.0 fsevents: 2.3.3 - tsx: 4.22.4 + tsx: 4.23.15 - vitest@4.1.11(@types/node@22.19.21)(vite@8.0.16(@types/node@22.19.21)(esbuild@0.28.0)(tsx@4.22.4)): + vitest@4.1.12(@types/node@22.20.5)(vite@8.0.16(@types/node@22.20.5)(esbuild@0.28.0)(tsx@4.23.15)): dependencies: - '@vitest/expect': 4.1.11 - '@vitest/mocker': 4.1.11(vite@8.0.16(@types/node@22.19.21)(esbuild@0.28.0)(tsx@4.22.4)) - '@vitest/pretty-format': 4.1.11 - '@vitest/runner': 4.1.11 - '@vitest/snapshot': 4.1.11 - '@vitest/spy': 4.1.11 - '@vitest/utils': 4.1.11 + '@vitest/expect': 4.1.12 + '@vitest/mocker': 4.1.12(vite@8.0.16(@types/node@22.20.5)(esbuild@0.28.0)(tsx@4.23.15)) + '@vitest/pretty-format': 4.1.12 + '@vitest/runner': 4.1.12 + '@vitest/snapshot': 4.1.12 + '@vitest/spy': 4.1.12 + '@vitest/utils': 4.1.12 es-module-lexer: 2.1.0 expect-type: 1.3.0 magic-string: 0.30.21 obug: 2.1.4 pathe: 2.0.3 - picomatch: 4.0.5 + picomatch: 4.0.7 std-env: 4.1.0 tinybench: 2.9.0 - tinyexec: 1.2.4 + tinyexec: 1.3.1 tinyglobby: 0.2.17 tinyrainbow: 3.1.0 - vite: 8.0.16(@types/node@22.19.21)(esbuild@0.28.0)(tsx@4.22.4) + vite: 8.0.16(@types/node@22.20.5)(esbuild@0.28.0)(tsx@4.23.15) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.19.21 + '@types/node': 22.20.5 transitivePeerDependencies: - msw diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 7ff865c..4acd544 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,6 +1,6 @@ packages: - - 'packages/*' - - 'apps/*' + - "packages/*" + - "apps/*" allowBuilds: core-js: true @@ -8,24 +8,24 @@ allowBuilds: onnxruntime-node: true catalog: - '@biomejs/biome': 2.5.0 - '@hono/node-server': 2.1.3 - '@types/node': 22.19.21 - '@types/pngjs': 6.0.5 - hono: 4.13.11 - onnxruntime-node: 1.27.0 - pino: 10.3.1 - pino-pretty: 13.1.3 + "@biomejs/biome": 2.6.4 + "@hono/node-server": 2.1.5 + "@types/node": 22.20.5 + "@types/pngjs": 6.0.5 + hono: 4.13.14 + onnxruntime-node: 1.31.1 + pino: 10.4.0 + pino-pretty: 13.2.0 pngjs: 7.0.0 tsdown: 0.23.4 - tsx: 4.22.4 + tsx: 4.23.15 typescript: 7.0.2 - vitest: 4.1.11 + vitest: 4.1.12 # onnxruntime-node はプラットフォーム別のネイティブバイナリを含む。 # pnpm 10 はデフォルトで依存のビルドスクリプトを実行しないため、明示的に許可する。 onlyBuiltDependencies: - - '@biomejs/biome' + - "@biomejs/biome" - core-js - esbuild - onnxruntime-node