diff --git a/.gitignore b/.gitignore index 45aae92..f9fd7ef 100644 --- a/.gitignore +++ b/.gitignore @@ -11,7 +11,6 @@ coverage/ .nyc_output/ playwright-report/ test-results/ -.eslintcache # Environment .env diff --git a/.oxfmtrc.json b/.oxfmtrc.json new file mode 100644 index 0000000..a3e95cd --- /dev/null +++ b/.oxfmtrc.json @@ -0,0 +1,15 @@ +{ + "$schema": "./node_modules/oxfmt/configuration_schema.json", + "singleQuote": true, + "trailingComma": "all", + "semi": true, + "printWidth": 80, + "sortPackageJson": false, + "ignorePatterns": [ + "coverage", + "design", + "dist", + "node_modules", + "package-lock.json" + ] +} diff --git a/.oxlintrc.json b/.oxlintrc.json new file mode 100644 index 0000000..604c7e9 --- /dev/null +++ b/.oxlintrc.json @@ -0,0 +1,97 @@ +{ + "$schema": "./node_modules/oxlint/configuration_schema.json", + "plugins": ["typescript", "unicorn", "oxc"], + "categories": { + "correctness": "error" + }, + "ignorePatterns": ["coverage/**", "dist/**", "node_modules/**"], + "env": { + "builtin": true, + "node": true + }, + "overrides": [ + { + "files": ["test/**/*.ts", "vitest.config.ts"], + "env": { + "vitest": true + } + } + ], + "options": { + "maxWarnings": 0, + "typeAware": true + }, + "rules": { + "typescript/ban-ts-comment": ["error", { "minimumDescriptionLength": 10 }], + "typescript/consistent-type-imports": [ + "error", + { "prefer": "type-imports" } + ], + "no-array-constructor": "error", + "no-case-declarations": "error", + "typescript/no-confusing-void-expression": [ + "error", + { "ignoreArrowShorthand": true } + ], + "typescript/no-deprecated": "error", + "typescript/no-dynamic-delete": "error", + "no-empty": ["error", { "allowEmptyCatch": false }], + "typescript/no-empty-object-type": "error", + "typescript/no-explicit-any": "error", + "typescript/no-extraneous-class": "error", + "no-fallthrough": "error", + "typescript/no-floating-promises": "error", + "typescript/no-invalid-void-type": "error", + "typescript/no-misused-promises": "error", + "typescript/no-mixed-enums": "error", + "typescript/no-namespace": "error", + "unicorn/no-new-array": "off", + "typescript/no-non-null-asserted-nullish-coalescing": "error", + "typescript/no-non-null-assertion": "error", + "no-prototype-builtins": "error", + "no-regex-spaces": "error", + "typescript/no-require-imports": "error", + "typescript/no-unnecessary-boolean-literal-compare": "error", + "typescript/no-unnecessary-condition": "error", + "typescript/no-unnecessary-template-expression": "error", + "typescript/no-unnecessary-type-arguments": "error", + "typescript/no-unnecessary-type-assertion": "error", + "typescript/no-unnecessary-type-constraint": "error", + "typescript/no-unnecessary-type-conversion": "error", + "typescript/no-unnecessary-type-parameters": "error", + "typescript/no-unsafe-argument": "error", + "typescript/no-unsafe-assignment": "error", + "typescript/no-unsafe-call": "error", + "typescript/no-unsafe-enum-comparison": "error", + "typescript/no-unsafe-function-type": "error", + "typescript/no-unsafe-member-access": "error", + "typescript/no-unsafe-return": "error", + "no-useless-assignment": "off", + "no-useless-constructor": "error", + "no-var": "error", + "typescript/only-throw-error": "error", + "prefer-const": "error", + "typescript/prefer-literal-enum-member": "error", + "typescript/prefer-promise-reject-errors": "error", + "typescript/prefer-reduce-type-parameter": "error", + "prefer-rest-params": "error", + "typescript/prefer-return-this-type": "error", + "prefer-spread": "error", + "preserve-caught-error": "error", + "typescript/related-getter-setter-pairs": "error", + "typescript/require-await": "error", + "typescript/restrict-plus-operands": [ + "error", + { + "allowAny": false, + "allowBoolean": false, + "allowNullish": false, + "allowNumberAndString": false, + "allowRegExp": false + } + ], + "typescript/return-await": ["error", "error-handling-correctness-only"], + "typescript/unified-signatures": "error", + "typescript/use-unknown-in-catch-callback-variable": "error" + } +} diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 2eea4f5..0000000 --- a/.prettierignore +++ /dev/null @@ -1,5 +0,0 @@ -coverage -design -dist -node_modules -package-lock.json diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index 9d06fb8..0000000 --- a/.prettierrc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "singleQuote": true, - "trailingComma": "all", - "semi": true -} diff --git a/AGENTS.md b/AGENTS.md index 5d2ade8..04e0afa 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -27,7 +27,7 @@ The current implementation is a TypeScript/Node v1 with these main building bloc - **node-pty** for PTY/process lifecycle. - **Zod** for protocol, manifest, and artifact validation. - **ghostty-web + Playwright** as the reference renderer for screenshot, wait, snapshot, and replay/export flows. -- **Vitest, ESLint, Prettier, and TypeScript** for quality gates. +- **Vitest, Oxlint, Oxfmt, and TypeScript** for quality gates. - **mise** as the canonical task runner in CI. Session state is stored under `~/.agent-tty` by default. In tests and automation, prefer an isolated absolute `AGENT_TTY_HOME` instead of writing into the real home directory. @@ -190,7 +190,7 @@ If validation cannot run, state why and name the next best check. - Follow the repo defaults: 2-space indentation, single quotes, trailing commas, semicolons, LF endings. - This is strict TypeScript with `NodeNext` modules and ESM imports that include `.js` file extensions from TypeScript source. -- Prefer `import type` for type-only imports; ESLint enforces this. +- Prefer `import type` for type-only imports; Oxlint enforces this. - Keep schemas strict (`z.object(...).strict()`) and prefer existing helper/assertion utilities over duplicated validation code. - Match the existing style of small helpers, explicit invariants, and straightforward control flow. Avoid introducing abstraction layers without a concrete need. diff --git a/docs/adr/0001-adopt-oxc-lint-format-tooling.md b/docs/adr/0001-adopt-oxc-lint-format-tooling.md new file mode 100644 index 0000000..e2c042a --- /dev/null +++ b/docs/adr/0001-adopt-oxc-lint-format-tooling.md @@ -0,0 +1,87 @@ +# ADR 0001: Adopt Oxc lint and format tooling + +Date: 2026-04-29 + +## Status + +Accepted + +## Context + +The repository previously used ESLint with `typescript-eslint` strict type-checked rules for linting and Prettier for repository-wide formatting. The migration goal was performance without a correctness regression, not rule churn for its own sake. + +Baseline timings were taken in this Mux cloud dev container before changing dependencies. The absolute numbers are environment-specific; the replacement ratios were the decision input: + +| Check | Previous command | Wall time | +| ------------ | -------------------------------------------------------------------- | --------: | +| Format check | `npm run format:check` / `prettier . --check` | 6.9s | +| Lint | `npm run lint` / `eslint src test vitest.config.ts --max-warnings=0` | 9.0s | + +The current Oxc timing samples after configuring and removing the replaced tools were: + +| Check | New command | Wall time samples | +| ------------ | --------------------------------------------------- | ----------------: | +| Format check | `npm run format:check` / `oxfmt . --check` | 1.5s, 1.4s, 1.5s | +| Lint | `npm run lint` / `oxlint src test vitest.config.ts` | 1.0s, 1.1s, 1.0s | + +Both replacements exceed the 2x performance threshold in this workspace. + +## Decision + +Replace Prettier with Oxfmt and replace ESLint with Oxlint. + +Committed integration points now use: + +- `.oxfmtrc.json` for formatter behavior, migrated from the previous Prettier settings. +- `.oxlintrc.json` for lint behavior, including type-aware linting via `oxlint-tsgolint`. +- `npm run format`, `npm run format:check`, `npm run lint`, and `npm run lint:fix` as the stable task entry points. +- Existing `mise` and CI tasks continue to call the npm scripts. + +No TypeScript upgrade was required. + +## Safety parity notes + +The Oxlint config keeps the repo's important safety checks enabled, including: + +- type-only import enforcement, +- floating promise detection, +- confusing void expression detection with `ignoreArrowShorthand: true`, +- strict type-aware unsafe-value checks such as `no-unsafe-assignment`, `no-unsafe-call`, `no-unsafe-member-access`, and `no-unsafe-return`, +- promise misuse and unnecessary-condition checks. + +A temporary fixture under `test/` was checked with both tools before removal. The reproduced output is preserved in `dogfood/oxlint-oxfmt-migration/logs/safety-parity.txt`. ESLint and Oxlint both rejected the fixture for the migration-critical cases: + +- `consistent-type-imports`, +- `no-floating-promises`, +- `no-unsafe-assignment`, +- `no-confusing-void-expression`, +- `require-await`. + +A few rule/configuration details are intentionally documented rather than left implicit: + +- `typescript/no-floating-promises` is listed explicitly in `.oxlintrc.json` even though the `correctness` category also enables it, because it is a migration-critical guarantee. +- `typescript/ban-ts-comment` keeps `minimumDescriptionLength: 10` from the captured ESLint `--print-config` output. +- `no-octal` is not an Oxlint rule, but TypeScript rejects legacy octal literals during parsing/typechecking. +- `no-useless-assignment` produced Oxlint false positives in existing integration-test cleanup patterns and is non-safety-oriented, so it is disabled in `.oxlintrc.json`. +- `unicorn/no-new-array` is disabled because `test/unit/host/eventLog.test.ts` intentionally uses `new Array(MAX_EVENT_BUFFER_ENTRIES)` to pre-allocate the event buffer in a bounded-buffer test. + +## Formatter churn + +Oxfmt was migrated from the Prettier config and preserves the previous practical formatting intent: + +- single quotes, +- trailing commas, +- semicolons, +- print width 80, +- package JSON sorting disabled, +- ignore behavior for `coverage`, `design`, `dist`, `node_modules`, and `package-lock.json`. + +Running Oxfmt did not require a source formatting churn diff beyond the tooling/configuration changes. + +## Consequences + +- Lint and format checks are materially faster for local and CI workflows. +- Native Oxc packages are now part of the install surface. The lockfile includes Linux and macOS packages used by the repository's CI platforms. +- `oxfmt` is still pre-1.0; future formatter upgrades should be treated as intentional formatting-change reviews because a minor-version bump may change formatting behavior. +- ESLint and Prettier remain absent from required checks; keeping a permanent hybrid lint setup was rejected because it would preserve the old slow path and undermine the migration goal. +- Historical dogfood artifacts that mention ESLint or Prettier remain archival records and are not rewritten. diff --git a/dogfood/CATALOG.md b/dogfood/CATALOG.md index c7072e5..46d9895 100644 --- a/dogfood/CATALOG.md +++ b/dogfood/CATALOG.md @@ -30,6 +30,7 @@ Paths below are relative to the repository root. | `dogfood/20260325-week8-bundle-validation/` | Validation of proof-bundle conventions. | | `dogfood/20260325-week8-capability-inventory/` | Runtime capability inventory/reporting evidence. | | `dogfood/20260325-week8-inspect-runtime/` | `inspect --json` runtime reporting review. | +| `dogfood/oxlint-oxfmt-migration/` | Oxc lint/format migration proof with migrated checks, screenshot, asciicast, and WebM recording. | | `dogfood/token-usage-phase5-proof/` | Phase 5 eval DX token-usage proof bundle (commit `91a571de`) with screenshot, WebM recording, snapshot, and replay script. | | `dogfood/20260323-week5-platform-closure/` | Platform/documentation closeout evidence from the earlier hardening phase. | diff --git a/dogfood/oxlint-oxfmt-migration/README.md b/dogfood/oxlint-oxfmt-migration/README.md new file mode 100644 index 0000000..313f321 --- /dev/null +++ b/dogfood/oxlint-oxfmt-migration/README.md @@ -0,0 +1,49 @@ +# Oxlint/Oxfmt migration proof + +Date: 2026-04-29 + +This bundle proves the migrated lint/format developer workflow through an isolated `agent-tty` session. + +## Environment + +- Isolated `AGENT_TTY_HOME`: see `agent-tty-home.txt`. +- Session id: see `session-id.txt`. +- Local command path: `npx tsx src/cli/main.ts --home "$AGENT_TTY_HOME" ...`. + +## Commands run in the recorded session + +See `commands.sh` for the exact replayable command list: + +```bash +npm run format:check +npm run lint +npm run typecheck +npm run build +npm run smoke:install -- --skip-build +echo "OXC_MIGRATION_DOGFOOD_DONE" +``` + +The full repository test suite was run locally and by PR CI outside the dogfood session. The recorded dogfood session intentionally keeps to the shorter static, build, and install-smoke checks so the screenshot and recordings stay small and reviewable. + +## Timing summary + +Baseline before migration: + +- `npm run format:check`: 6.9s wall time. +- `npm run lint`: 9.0s wall time. + +After migration: + +- `npm run format:check`: 1.5s, 1.4s, 1.5s wall-time samples. +- `npm run lint`: 1.0s, 1.1s, 1.0s wall-time samples. + +## Proof artifacts + +- Semantic snapshot: `artifacts/snapshot.txt`. +- Screenshot: `artifacts/validation-screenshot.png`. +- Asciicast recording: `artifacts/validation.cast`. +- WebM recording: `artifacts/validation.webm`. +- Safety-rule parity evidence: `logs/safety-parity.txt`. +- JSON command logs: `logs/*.json`. + +The snapshot and recordings end with `OXC_MIGRATION_DOGFOOD_DONE` after the migrated checks pass. diff --git a/dogfood/oxlint-oxfmt-migration/agent-tty-home.txt b/dogfood/oxlint-oxfmt-migration/agent-tty-home.txt new file mode 100644 index 0000000..9901ae5 --- /dev/null +++ b/dogfood/oxlint-oxfmt-migration/agent-tty-home.txt @@ -0,0 +1 @@ +/tmp/agent-tty-oxc-dogfood.6u0ylu diff --git a/dogfood/oxlint-oxfmt-migration/artifacts/snapshot.txt b/dogfood/oxlint-oxfmt-migration/artifacts/snapshot.txt new file mode 100644 index 0000000..3b26f63 --- /dev/null +++ b/dogfood/oxlint-oxfmt-migration/artifacts/snapshot.txt @@ -0,0 +1,24 @@ +Finished in 729ms on 200 files with 162 rules using 96 threads. + +> agent-tty@0.1.1-beta.4 typecheck +> tsc -p tsconfig.json --noEmit + + +> agent-tty@0.1.1-beta.4 build +> tsc -p tsconfig.build.json && node ./scripts/copy-renderer-assets.mjs + + +> agent-tty@0.1.1-beta.4 smoke:install +> node ./scripts/smoke-install.mjs --skip-build + +Packing release tarball into /tmp/agent-tty-install-smoke-bpaHNc/tarball... +Installing built tarball into isolated prefix... +Skipping git dependency install route; tarball install is the supported packagin +g path. +Packaging smoke passed: tarball route succeeded. +OXC_MIGRATION_DOGFOOD_DONE +coder in 🌐 aaaaaaa in linter-formatter-xpba on  linter-formatter-xpba:main [$✘ +!?⇣] is 📦 v0.1.1-beta.4 via  v25.9.0 on ☁ took 9s +coder in 🌐 aaaaaaa in linter-formatter-xpba on  linter-formatter-xpba:main [$✘ +!?⇣] is 📦 v0.1.1-beta.4 via  v25.9.0 on ☁ +⬢ [Docker] XY diff --git a/dogfood/oxlint-oxfmt-migration/artifacts/validation-screenshot.png b/dogfood/oxlint-oxfmt-migration/artifacts/validation-screenshot.png new file mode 100644 index 0000000..e8cd0b3 Binary files /dev/null and b/dogfood/oxlint-oxfmt-migration/artifacts/validation-screenshot.png differ diff --git a/dogfood/oxlint-oxfmt-migration/artifacts/validation.cast b/dogfood/oxlint-oxfmt-migration/artifacts/validation.cast new file mode 100644 index 0000000..b851c8f --- /dev/null +++ b/dogfood/oxlint-oxfmt-migration/artifacts/validation.cast @@ -0,0 +1,34 @@ +{"version":2,"width":80,"height":24,"timestamp":1777473323,"title":"01KQCTN015XDZD9N58QXFDKRN7","sessionId":"01KQCTN015XDZD9N58QXFDKRN7","env":{"TERM":"xterm-256color"},"toolVersion":"0.1.1-beta.4"} +[0,"o","bash: /home/linuxbrew/.linuxbrew/bin/brew: No such file or directory\r\n"] +[0.161,"o","\u001b[?2004h\u001b[1;33mcoder\u001b[0m in \u001b[1;2;32m🌐 aaaaaaa\u001b[0m in \u001b[1;36mlinter-formatter-xpba\u001b[0m on \u001b[1;35m linter-formatter-xpba:main\u001b[0m \u001b[1;31m[$✘!?⇣]\u001b[0m is \u001b[1;38;5;208m📦 v0.1.1-beta.4\u001b[0m via \u001b[1;32m v25.9.0 \u001b[0mon \u001b[1;34m☁️ \u001b[0m \r\n\u001b[1;2;31m⬢ [Docker]\u001b[0m \u001b[1;32mXY\u001b[0m "] +[1.189,"o","bash dogfood/oxlint-oxfmt-migration/commands.sh\r\n\u001b[?2004l\r"] +[1.287,"o","\r\n> agent-tty@0.1.1-beta.4 format:check\r\n> oxfmt . --check\r\n\r\n"] +[1.979,"o","Checking formatting...\r\n\r\n"] +[2.4,"o","All matched files use the correct format.\r\nFinished in 1068ms on 1016 files using 96 threads.\r\n"] +[2.533,"o","\\"] +[2.534,"o","\u001b[1G"] +[2.534,"o","\u001b[0K"] +[2.625,"o","\r\n> agent-tty@0.1.1-beta.4 lint\r\n> oxlint src test vitest.config.ts\r\n\r\n"] +[3.419,"o","Found 0 warnings and 0 errors.\r\nFinished in 729ms on 200 files with 162 rules using 96 threads.\r\n"] +[3.436,"o","\\"] +[3.437,"o","\u001b[1G"] +[3.437,"o","\u001b[0K"] +[3.554,"o","\r\n> agent-tty@0.1.1-beta.4 typecheck\r\n> tsc -p tsconfig.json --noEmit\r\n\r\n"] +[4.693,"o","\\"] +[4.694,"o","\u001b[1G"] +[4.695,"o","\u001b[0K"] +[4.807,"o","\r\n> agent-tty@0.1.1-beta.4 build\r\n> tsc -p tsconfig.build.json && node ./scripts/copy-renderer-assets.mjs\r\n\r\n"] +[5.596,"o","\\"] +[5.597,"o","\u001b[1G"] +[5.597,"o","\u001b[0K"] +[5.695,"o","\r\n> agent-tty@0.1.1-beta.4 smoke:install\r\n> node ./scripts/smoke-install.mjs --skip-build\r\n\r\n"] +[5.731,"o","Packing release tarball into /tmp/agent-tty-install-smoke-bpaHNc/tarball...\r\n"] +[6.445,"o","Installing built tarball into isolated prefix...\r\n"] +[10.667,"o","Skipping git dependency install route; tarball install is the supported packaging path.\r\nPackaging smoke passed: tarball route succeeded.\r\n"] +[10.757,"o","\\"] +[10.759,"o","\u001b[1G\u001b[0K"] +[10.764,"o","OXC_MIGRATION_DOGFOOD_DONE\r\n"] +[10.826,"o","\u001b[?2004h\u001b[1;33mcoder\u001b[0m in \u001b[1;2;32m🌐 aaaaaaa\u001b[0m in \u001b[1;36mlinter-formatter-xpba\u001b[0m on \u001b[1;35m linter-formatter-xpba:main\u001b[0m \u001b[1;31m[$✘!?⇣]\u001b[0m is \u001b[1;38;5;208m📦 v0.1.1-beta.4\u001b[0m via \u001b[1;32m v25.9.0 \u001b[0mon \u001b[1;34m☁️ \u001b[0m took \u001b[1;33m9s\u001b[0m \r\n"] +[10.826,"o","\u001b[1;2;31m⬢ [Docker]\u001b[0m \u001b[1;32mXY\u001b[0m \u001b[K"] +[10.826,"o","\u001b[?2004l\r"] +[10.891,"o","\u001b[?2004h\u001b[1;33mcoder\u001b[0m in \u001b[1;2;32m🌐 aaaaaaa\u001b[0m in \u001b[1;36mlinter-formatter-xpba\u001b[0m on \u001b[1;35m linter-formatter-xpba:main\u001b[0m \u001b[1;31m[$✘!?⇣]\u001b[0m is \u001b[1;38;5;208m📦 v0.1.1-beta.4\u001b[0m via \u001b[1;32m v25.9.0 \u001b[0mon \u001b[1;34m☁️ \u001b[0m \r\n\u001b[1;2;31m⬢ [Docker]\u001b[0m \u001b[1;32mXY\u001b[0m \u001b[K"] diff --git a/dogfood/oxlint-oxfmt-migration/artifacts/validation.webm b/dogfood/oxlint-oxfmt-migration/artifacts/validation.webm new file mode 100644 index 0000000..1498932 Binary files /dev/null and b/dogfood/oxlint-oxfmt-migration/artifacts/validation.webm differ diff --git a/dogfood/oxlint-oxfmt-migration/commands.sh b/dogfood/oxlint-oxfmt-migration/commands.sh new file mode 100755 index 0000000..680cc87 --- /dev/null +++ b/dogfood/oxlint-oxfmt-migration/commands.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -euo pipefail +npm run format:check +npm run lint +npm run typecheck +npm run build +npm run smoke:install -- --skip-build +echo "OXC_MIGRATION_DOGFOOD_DONE" diff --git a/dogfood/oxlint-oxfmt-migration/logs/create.json b/dogfood/oxlint-oxfmt-migration/logs/create.json new file mode 100644 index 0000000..21243de --- /dev/null +++ b/dogfood/oxlint-oxfmt-migration/logs/create.json @@ -0,0 +1,12 @@ +{ + "ok": true, + "command": "create", + "timestamp": "2026-04-29T14:35:23.770Z", + "result": { + "sessionId": "01KQCTN015XDZD9N58QXFDKRN7", + "createdAt": "2026-04-29T14:35:23.048Z", + "cols": 80, + "rows": 24, + "shell": "/bin/bash" + } +} diff --git a/dogfood/oxlint-oxfmt-migration/logs/destroy.json b/dogfood/oxlint-oxfmt-migration/logs/destroy.json new file mode 100644 index 0000000..777cab1 --- /dev/null +++ b/dogfood/oxlint-oxfmt-migration/logs/destroy.json @@ -0,0 +1,9 @@ +{ + "ok": true, + "command": "destroy", + "timestamp": "2026-04-29T14:35:42.974Z", + "result": { + "sessionId": "01KQCTN015XDZD9N58QXFDKRN7", + "destroyed": true + } +} diff --git a/dogfood/oxlint-oxfmt-migration/logs/doctor.json b/dogfood/oxlint-oxfmt-migration/logs/doctor.json new file mode 100644 index 0000000..0832489 --- /dev/null +++ b/dogfood/oxlint-oxfmt-migration/logs/doctor.json @@ -0,0 +1,130 @@ +{ + "ok": true, + "command": "doctor", + "timestamp": "2026-04-29T14:33:26.324Z", + "result": { + "ok": true, + "checks": { + "environment": [ + { + "name": "node-runtime", + "status": "pass", + "message": "Node 25.9.0 ok", + "durationMs": 0 + }, + { + "name": "cwd-access", + "status": "pass", + "message": "cwd read/write: /home/coder/.mux/src/agent-terminal/linter-formatter-xpba", + "durationMs": 2 + }, + { + "name": "temp-dir", + "status": "pass", + "message": "temp dir ok: /tmp", + "durationMs": 1 + }, + { + "name": "home_isolation", + "status": "pass", + "message": "agent-tty home is isolated from system home: /tmp/agent-tty-oxc-dogfood.6u0ylu", + "durationMs": 0 + }, + { + "name": "home-writable", + "status": "pass", + "message": "home writable: /tmp/agent-tty-oxc-dogfood.6u0ylu", + "durationMs": 1 + }, + { + "name": "pty-spawn", + "status": "pass", + "message": "spawned /home/coder/.local/share/mise/installs/node/25.9.0/bin/node", + "durationMs": 28 + }, + { + "name": "socket-viable", + "status": "pass", + "message": "socket ok: /tmp/agent-tty/e32946ea/1f5dc3c1f9eb", + "durationMs": 3 + }, + { + "name": "artifact-atomicity", + "status": "pass", + "message": "atomic rename ok: /tmp/agent-tty-oxc-dogfood.6u0ylu/sessions/doctor-3057927-mok5njdf-3/artifacts", + "durationMs": 1 + }, + { + "name": "event-log-writable", + "status": "pass", + "message": "append ok: /tmp/agent-tty-oxc-dogfood.6u0ylu/sessions/doctor-3057927-mok5njdg-5/events.jsonl", + "durationMs": 1 + } + ], + "renderer": [ + { + "name": "playwright_available", + "status": "pass", + "message": "available", + "durationMs": 1 + }, + { + "name": "browser_cache_accessible", + "status": "pass", + "message": "browser cache accessible: /home/coder/.cache/ms-playwright", + "durationMs": 0 + }, + { + "name": "browser_launch", + "status": "pass", + "message": "chromium launches", + "durationMs": 102 + }, + { + "name": "ghostty_web_available", + "status": "pass", + "message": "WASM available", + "durationMs": 83 + }, + { + "name": "screenshot_viable", + "status": "pass", + "message": "viable", + "durationMs": 164 + } + ] + }, + "capabilities": [ + { + "name": "snapshot", + "status": "available", + "reason": "built-in capability", + "detail": "available without external renderer dependencies" + }, + { + "name": "wait", + "status": "available", + "reason": "built-in capability", + "detail": "available without external renderer dependencies" + }, + { + "name": "screenshot", + "status": "available", + "reason": "renderer smoke checks passed", + "detail": "playwright_available: available; browser_launch: chromium launches; ghostty_web_available: WASM available; screenshot_viable: viable" + }, + { + "name": "record-export-asciicast", + "status": "available", + "reason": "built-in capability", + "detail": "available without external renderer dependencies" + }, + { + "name": "record-export-webm", + "status": "available", + "reason": "browser-backed export dependencies available", + "detail": "playwright_available: available; browser_launch: chromium launches; ghostty_web_available: WASM available" + } + ] + } +} diff --git a/dogfood/oxlint-oxfmt-migration/logs/record-asciicast.json b/dogfood/oxlint-oxfmt-migration/logs/record-asciicast.json new file mode 100644 index 0000000..72ed4c9 --- /dev/null +++ b/dogfood/oxlint-oxfmt-migration/logs/record-asciicast.json @@ -0,0 +1,23 @@ +{ + "ok": true, + "command": "record export", + "timestamp": "2026-04-29T14:35:38.954Z", + "result": { + "sessionId": "01KQCTN015XDZD9N58QXFDKRN7", + "format": "asciicast", + "artifactPath": "/home/coder/.mux/src/agent-terminal/linter-formatter-xpba/dogfood/oxlint-oxfmt-migration/artifacts/validation.cast", + "bytes": 3173, + "sha256": "35f336622e219df527b1d2e9efaf44b2ab17d27cf9a2b8f1bc3a03d00054e4e9", + "capturedAtSeq": 34, + "durationMs": 10891, + "metadata": { + "width": 80, + "height": 24, + "title": "01KQCTN015XDZD9N58QXFDKRN7", + "timestamp": 1777473323, + "outputEventCount": 33, + "resizeEventCount": 0, + "markerCount": 0 + } + } +} diff --git a/dogfood/oxlint-oxfmt-migration/logs/record-webm.json b/dogfood/oxlint-oxfmt-migration/logs/record-webm.json new file mode 100644 index 0000000..b1ea3a1 --- /dev/null +++ b/dogfood/oxlint-oxfmt-migration/logs/record-webm.json @@ -0,0 +1,24 @@ +{ + "ok": true, + "command": "record export", + "timestamp": "2026-04-29T14:35:41.651Z", + "result": { + "sessionId": "01KQCTN015XDZD9N58QXFDKRN7", + "format": "webm", + "artifactPath": "/home/coder/.mux/src/agent-terminal/linter-formatter-xpba/dogfood/oxlint-oxfmt-migration/artifacts/validation.webm", + "bytes": 178974, + "sha256": "56ab64b95eac6e0df52fd1b5e63891403c8752fdc9770f9acef8d63f912a0f65", + "capturedAtSeq": 34, + "durationMs": 10891, + "metadata": { + "width": 80, + "height": 24, + "profileName": "reference-dark", + "renderProfileHash": "8ffed6af301ec7c0e6b69599c3be0d1d12096f9fcdfc59d0bbb4cc474d64c53d", + "timingMode": "max-speed", + "rendererBackend": "ghostty-web", + "outputEventCount": 33, + "resizeEventCount": 0 + } + } +} diff --git a/dogfood/oxlint-oxfmt-migration/logs/run-validation.json b/dogfood/oxlint-oxfmt-migration/logs/run-validation.json new file mode 100644 index 0000000..4a3bfc6 --- /dev/null +++ b/dogfood/oxlint-oxfmt-migration/logs/run-validation.json @@ -0,0 +1,13 @@ +{ + "ok": true, + "command": "run", + "timestamp": "2026-04-29T14:35:35.429Z", + "result": { + "accepted": true, + "completed": true, + "timedOut": false, + "seq": 2, + "durationMs": 9643, + "marker": "__AT_MARKER_cdafb1129f0d422da54a866f8fc6f3df__" + } +} diff --git a/dogfood/oxlint-oxfmt-migration/logs/safety-parity.txt b/dogfood/oxlint-oxfmt-migration/logs/safety-parity.txt new file mode 100644 index 0000000..0ffb32a --- /dev/null +++ b/dogfood/oxlint-oxfmt-migration/logs/safety-parity.txt @@ -0,0 +1,19 @@ +Safety-rule parity fixture evidence +Generated: 2026-04-29 +Fixture: test/oxlint-parity.fixture.ts (temporary, removed after this run) +ESLint status: 1 +Oxlint status: 1 + +ESLint rules: + @typescript-eslint/consistent-type-imports@1 + @typescript-eslint/require-await@17 + @typescript-eslint/no-floating-promises@18 + @typescript-eslint/no-unsafe-assignment@19 + @typescript-eslint/no-confusing-void-expression@20 + +Oxlint rules: + typescript-eslint(consistent-type-imports)@1 + typescript-eslint(no-floating-promises)@18 + typescript-eslint(no-unsafe-assignment)@19 + typescript-eslint(no-confusing-void-expression)@20 + typescript-eslint(require-await)@17 diff --git a/dogfood/oxlint-oxfmt-migration/logs/screenshot.json b/dogfood/oxlint-oxfmt-migration/logs/screenshot.json new file mode 100644 index 0000000..a0856b6 --- /dev/null +++ b/dogfood/oxlint-oxfmt-migration/logs/screenshot.json @@ -0,0 +1,20 @@ +{ + "ok": true, + "command": "screenshot", + "timestamp": "2026-04-29T14:35:37.862Z", + "result": { + "sessionId": "01KQCTN015XDZD9N58QXFDKRN7", + "capturedAtSeq": 34, + "profileName": "reference-dark", + "cols": 80, + "rows": 24, + "artifactPath": "/tmp/agent-tty-oxc-dogfood.6u0ylu/sessions/01KQCTN015XDZD9N58QXFDKRN7/artifacts/screenshot-34-reference-dark.png", + "pngSizeBytes": 55271, + "cursorVisible": false, + "rendererBackend": "ghostty-web", + "pixelWidth": 640, + "pixelHeight": 384, + "sha256": "909cbe05fd7e134eb3dba7287c6c71e3f07147aad44856a301fc370b5dc41dc5", + "renderProfileHash": "8ffed6af301ec7c0e6b69599c3be0d1d12096f9fcdfc59d0bbb4cc474d64c53d" + } +} diff --git a/dogfood/oxlint-oxfmt-migration/logs/snapshot.json b/dogfood/oxlint-oxfmt-migration/logs/snapshot.json new file mode 100644 index 0000000..62d113f --- /dev/null +++ b/dogfood/oxlint-oxfmt-migration/logs/snapshot.json @@ -0,0 +1,15 @@ +{ + "ok": true, + "command": "snapshot", + "timestamp": "2026-04-29T14:35:36.500Z", + "result": { + "format": "text", + "sessionId": "01KQCTN015XDZD9N58QXFDKRN7", + "capturedAtSeq": 34, + "cols": 80, + "rows": 24, + "cursorRow": 23, + "cursorCol": 15, + "text": "Finished in 729ms on 200 files with 162 rules using 96 threads.\n\n> agent-tty@0.1.1-beta.4 typecheck\n> tsc -p tsconfig.json --noEmit\n\n\n> agent-tty@0.1.1-beta.4 build\n> tsc -p tsconfig.build.json && node ./scripts/copy-renderer-assets.mjs\n\n\n> agent-tty@0.1.1-beta.4 smoke:install\n> node ./scripts/smoke-install.mjs --skip-build\n\nPacking release tarball into /tmp/agent-tty-install-smoke-bpaHNc/tarball...\nInstalling built tarball into isolated prefix...\nSkipping git dependency install route; tarball install is the supported packagin\ng path.\nPackaging smoke passed: tarball route succeeded.\nOXC_MIGRATION_DOGFOOD_DONE\ncoder in 🌐 aaaaaaa in linter-formatter-xpba on  linter-formatter-xpba:main [$✘\n!?⇣] is 📦 v0.1.1-beta.4 via  v25.9.0 on ☁ took 9s\ncoder in 🌐 aaaaaaa in linter-formatter-xpba on  linter-formatter-xpba:main [$✘\n!?⇣] is 📦 v0.1.1-beta.4 via  v25.9.0 on ☁\n⬢ [Docker] XY" + } +} diff --git a/dogfood/oxlint-oxfmt-migration/session-id.txt b/dogfood/oxlint-oxfmt-migration/session-id.txt new file mode 100644 index 0000000..e5aa7f6 --- /dev/null +++ b/dogfood/oxlint-oxfmt-migration/session-id.txt @@ -0,0 +1 @@ +01KQCTN015XDZD9N58QXFDKRN7 diff --git a/eslint.config.mjs b/eslint.config.mjs deleted file mode 100644 index 666d661..0000000 --- a/eslint.config.mjs +++ /dev/null @@ -1,57 +0,0 @@ -import js from '@eslint/js'; -import prettierConfig from 'eslint-config-prettier'; -import globals from 'globals'; -import tseslint from 'typescript-eslint'; - -export default tseslint.config( - { - ignores: ['coverage/**', 'dist/**', 'node_modules/**'], - }, - { - files: ['**/*.{js,mjs,cjs}'], - languageOptions: { - globals: { - ...globals.node, - }, - }, - }, - js.configs.recommended, - ...tseslint.configs.strictTypeChecked, - { - files: ['**/*.ts'], - languageOptions: { - globals: { - ...globals.node, - }, - parserOptions: { - projectService: true, - tsconfigRootDir: import.meta.dirname, - }, - }, - rules: { - '@typescript-eslint/consistent-type-imports': [ - 'error', - { prefer: 'type-imports' }, - ], - '@typescript-eslint/no-confusing-void-expression': [ - 'error', - { ignoreArrowShorthand: true }, - ], - '@typescript-eslint/no-floating-promises': 'error', - }, - }, - { - files: ['test/**/*.ts', 'vitest.config.ts'], - languageOptions: { - globals: { - ...globals.node, - ...globals.vitest, - }, - parserOptions: { - projectService: true, - tsconfigRootDir: import.meta.dirname, - }, - }, - }, - prettierConfig, -); diff --git a/mise.toml b/mise.toml index 8fbe744..23678a0 100644 --- a/mise.toml +++ b/mise.toml @@ -53,7 +53,8 @@ run = "npm run lint" sources = [ "src/**/*.ts", "test/**/*.ts", - "eslint.config.mjs", + ".oxlintrc.json", + "tsconfig.json", "vitest.config.ts", "package.json", ] @@ -68,6 +69,7 @@ run = "npm run format:check" sources = [ "src/**/*.ts", "test/**/*.ts", + ".oxfmtrc.json", "*.json", "mise.lock", "*.mjs", diff --git a/package-lock.json b/package-lock.json index 802ba54..a70cb2d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,16 +20,13 @@ "agent-tty": "dist/cli/main.js" }, "devDependencies": { - "@eslint/js": "10.0.1", "@types/node": "25.5.0", - "eslint": "10.1.0", - "eslint-config-prettier": "10.1.8", - "globals": "17.4.0", - "prettier": "3.8.1", + "oxfmt": "0.47.0", + "oxlint": "1.62.0", + "oxlint-tsgolint": "0.22.1", "rimraf": "6.1.3", "tsx": "4.21.0", "typescript": "5.9.3", - "typescript-eslint": "8.57.2", "vitest": "4.1.2" }, "engines": { @@ -530,234 +527,818 @@ "node": ">=18" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", - "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", + "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "@tybys/wasm-util": "^0.10.1" }, "funding": { - "url": "https://opencollective.com/eslint" + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" } }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/@oxc-project/types": { + "version": "0.127.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.127.0.tgz", + "integrity": "sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, + "license": "MIT", "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/Boshen" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", - "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "node_modules/@oxfmt/binding-android-arm-eabi": { + "version": "0.47.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm-eabi/-/binding-android-arm-eabi-0.47.0.tgz", + "integrity": "sha512-KrMQRdMi/upr81qT4ijK6X6BNp6jqpMY7FwILQnwIy9QLc3qpnhUx5rsCLGzn4ewsCQ0CNAspN2ogmP1GXLyLw==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@eslint/config-array": { - "version": "0.23.5", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz", - "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==", + "node_modules/@oxfmt/binding-android-arm64": { + "version": "0.47.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-android-arm64/-/binding-android-arm64-0.47.0.tgz", + "integrity": "sha512-r4ixS/PeUpAFKgrpDoZ5pSkthjZzVzKd95525Aazj+aOv9H4ulK5zYHGb7wFY5n5kZxHK8TbOJUZgoEb1ohddQ==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/object-schema": "^3.0.5", - "debug": "^4.3.1", - "minimatch": "^10.2.4" - }, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@eslint/config-helpers": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.5.tgz", - "integrity": "sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==", + "node_modules/@oxfmt/binding-darwin-arm64": { + "version": "0.47.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-arm64/-/binding-darwin-arm64-0.47.0.tgz", + "integrity": "sha512-CLWxiKpMl+195cm09CuaWEhJK0CirRkoMa07aR9+9AFPat2LfIKtwx1JqxZM0MTvcMe6+adlJNdVL6jdInvq3g==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.2.1" - }, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@eslint/core": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", - "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", + "node_modules/@oxfmt/binding-darwin-x64": { + "version": "0.47.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-darwin-x64/-/binding-darwin-x64-0.47.0.tgz", + "integrity": "sha512-Xq5fjTYDC50faUeLSm0rZdBqoTgleXEdD7NpJdARtQIczkCJn3xNjMUSQQkUmh4CtxkKTNL68lytcOK3e/osgg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/json-schema": "^7.0.15" - }, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@eslint/js": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", - "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", + "node_modules/@oxfmt/binding-freebsd-x64": { + "version": "0.47.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-freebsd-x64/-/binding-freebsd-x64-0.47.0.tgz", + "integrity": "sha512-QOU9ZIJ52p5askcEC0QJvvr8trHAWoonul8bgISo6gYUL3s50zkqafBYcNAr9LJZQbsZtPfIWHk9+5+nUp1qJQ==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "eslint": "^10.0.0" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@eslint/object-schema": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz", - "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==", + "node_modules/@oxfmt/binding-linux-arm-gnueabihf": { + "version": "0.47.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-0.47.0.tgz", + "integrity": "sha512-oJxDM1aBhPvz9gmElBv8UpxyiqhwfjcbrSxT5F0xtuUzY6dQI27/AQPIt3eu3Z5Yvn0kQl5R7MA3Z+MbnRvCBw==", + "cpu": [ + "arm" + ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@eslint/plugin-kit": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.6.1.tgz", - "integrity": "sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==", + "node_modules/@oxfmt/binding-linux-arm-musleabihf": { + "version": "0.47.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-0.47.0.tgz", + "integrity": "sha512-g8Lh50VS4ibGz2q6v7r9UZY4D0dM16SdrFYOMzhqIoCwGcai8VMIRUAcqn1/jlCsOOzUXJ741+kCeJt0cofakQ==", + "cpu": [ + "arm" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@eslint/core": "^1.1.1", - "levn": "^0.4.1" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@humanfs/core": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", - "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", + "node_modules/@oxfmt/binding-linux-arm64-gnu": { + "version": "0.47.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-0.47.0.tgz", + "integrity": "sha512-YrNT1vQ0asaXoRbrvYENPqmBfOQ9Xr8enPNOULeYfg44VjCcrUowFy5QZr+WawE0zyP8cH9e9Gxxg0fDEFzhcg==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/types": "^0.15.0" - }, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-linux-arm64-musl": { + "version": "0.47.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-arm64-musl/-/binding-linux-arm64-musl-0.47.0.tgz", + "integrity": "sha512-IxtQC/sbBi4ubbY+MdwdanRWrG9InQJVZqyMsBa5IUaQcnSg86gQme574HxXMC1p4bo4YhV99zQ+wNnGCvEgzw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-linux-ppc64-gnu": { + "version": "0.47.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-0.47.0.tgz", + "integrity": "sha512-EWXEhOMbWO0q6eJSbu0QLkU8cKi0ljlYLngeDs2Ocu/pm1rrLwyQiYzlFbdnMRURI4w9ndr1sI9rSbhlJ5o23Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-linux-riscv64-gnu": { + "version": "0.47.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-0.47.0.tgz", + "integrity": "sha512-tZrjS11TUiDuEpRaqdk8K9F9xETRyKXfuZKmdeW+Gj7coBnm7+8sBEfyt033EAFEQSlkniAXvBLh+Qja2ioGBQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-linux-riscv64-musl": { + "version": "0.47.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-0.47.0.tgz", + "integrity": "sha512-KBFy+2CFKUCZzYwX2ZOPQKck1vjQbz+hextuc19G4r0WRJwadfAeuQMQRQvB+Ivc8brlbOVg7et8K7E467440g==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-linux-s390x-gnu": { + "version": "0.47.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-0.47.0.tgz", + "integrity": "sha512-REUPFKVGSiK99B+9eaPhluEVglzaoj/SMykNC5SUiV2RSsBfV5lWN7Y0iCIc251Wz3GaeAGZsJ/zj3gjarxdFg==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-linux-x64-gnu": { + "version": "0.47.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-gnu/-/binding-linux-x64-gnu-0.47.0.tgz", + "integrity": "sha512-KVftVSVEDeIfRW3TIeLe3aNI/iY4m1fu5mDwHcisKMZSCMKLkrhFsjowC7o9RoqNPxbbglm2+/6KAKBIts2t0Q==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-linux-x64-musl": { + "version": "0.47.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-linux-x64-musl/-/binding-linux-x64-musl-0.47.0.tgz", + "integrity": "sha512-DTsmGEaA2860Aq5VUyDO8/MT9NFxwVL93RnRYmpMwK6DsSkThmvEpqoUDDljziEpAedMRG19SCogrNbINSbLUQ==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-openharmony-arm64": { + "version": "0.47.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-openharmony-arm64/-/binding-openharmony-arm64-0.47.0.tgz", + "integrity": "sha512-8r5BDro7fLOBoq1JXHLVSs55OlrxQhEso4HVo0TcY7OXJUPYfjPoOaYL5us+yIwqyP9rQwN+rxuiNFSmaxSuOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], "engines": { - "node": ">=18.18.0" + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-win32-arm64-msvc": { + "version": "0.47.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-0.47.0.tgz", + "integrity": "sha512-qtz/gzm8IjSPUlseZ0ofW8zyHLoZsuP5HTfcGGkWkUblB89JT8GNYH3ICqjbDsqsGqXum0/ZndXTFplSdXFIcg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-win32-ia32-msvc": { + "version": "0.47.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-0.47.0.tgz", + "integrity": "sha512-5vIcdcIDE7nCx+MXN6sm8kbC4zajDB31E86rez4i45iHNH/2NjdKlJ720xcHTr3eeiMcttCGPHPhE1TjtBDGZw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxfmt/binding-win32-x64-msvc": { + "version": "0.47.0", + "resolved": "https://registry.npmjs.org/@oxfmt/binding-win32-x64-msvc/-/binding-win32-x64-msvc-0.47.0.tgz", + "integrity": "sha512-Sr59Y5ms54ONBjxFeWhVlGyQcHXxcl9DxC23f6yXlRkcos7LXBLoO+KDfxexjHIOZh7cWqrWduzvUjJ+pHp8cQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint-tsgolint/darwin-arm64": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/darwin-arm64/-/darwin-arm64-0.22.1.tgz", + "integrity": "sha512-4150Lpgc1YM09GcjA6GSrra1JoPjC7aOpfywLjWEY4vW0Sd1qKzqHF1WRaiw0/qUZ40OATYdv3aRd7ipPkWQbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oxlint-tsgolint/darwin-x64": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/darwin-x64/-/darwin-x64-0.22.1.tgz", + "integrity": "sha512-vFWcPWYOgZs4HWcgS1EjUZg33NLcNfEYU49KGImmCfZWkflENrmBYV4HN/C0YeAPum6ZZ/goPSvQrB/cOD+NfA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oxlint-tsgolint/linux-arm64": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/linux-arm64/-/linux-arm64-0.22.1.tgz", + "integrity": "sha512-6LiUpP0Zir3+29FvBm7Y28q/dBjSHqTZ5MhG1Ckw4fGhI4cAvbcwXaKvbjx1TP7rRmBNOoq/M5xdpHjTb+GAew==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxlint-tsgolint/linux-x64": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/linux-x64/-/linux-x64-0.22.1.tgz", + "integrity": "sha512-fuX1hEQfpHauUbXADsfqVhRzrUrGabzGXbj5wsp2vKhV5uk/Rze8Mba9GdjFGECzvXudMGqHqxB4r6jGRdhxVA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oxlint-tsgolint/win32-arm64": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/win32-arm64/-/win32-arm64-0.22.1.tgz", + "integrity": "sha512-8SZidAj+jrbZf9ZjBEYW0tiNZ+KasqB2zgW26qdiPpQSF/DzURnPmXz651IeA9YsmbVdHGIooEHUmev6QJdquA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@oxlint-tsgolint/win32-x64": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/@oxlint-tsgolint/win32-x64/-/win32-x64-0.22.1.tgz", + "integrity": "sha512-QweSk9H5lFh5Y+WUf2Kq/OAN88V6+62ZwGhP38gqdRotI90luXSMkruFTj7Q2rYrzH4ZVNaSqx7NY8JpSfIzqg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@oxlint/binding-android-arm-eabi": { + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm-eabi/-/binding-android-arm-eabi-1.62.0.tgz", + "integrity": "sha512-pKsthNECyvJh8lPTICz6VcwVy2jOqdhhsp1rlxCkhgZR47aKvXPmaRWQDv+zlXpRae4qm1MaaTnutkaOk5aofg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-android-arm64": { + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-android-arm64/-/binding-android-arm64-1.62.0.tgz", + "integrity": "sha512-b1AUNViByvgmR2xJDubvLIr+dSuu3uraG7bsAoKo+xrpspPvu6RIn6Fhr2JUhobfep3jwUTy18Huco6GkwdvGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-darwin-arm64": { + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-arm64/-/binding-darwin-arm64-1.62.0.tgz", + "integrity": "sha512-iG+Tvf70UJ6otfwFYIHk36Sjq9cpPP5YLxkoggANNRtzgi3Tj3g8q6Ybqi6AtkU3+yg9QwF7bDCkCS6bbL4PCg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-darwin-x64": { + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-darwin-x64/-/binding-darwin-x64-1.62.0.tgz", + "integrity": "sha512-oOWI6YPPr5AJUx+yIDlxmuUbQjS5gZX3OH3QisawYvsZgLiQVvZtR0rPBcJTxLWqt2ClrWg0DlSrlUiG5SQNHg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-freebsd-x64": { + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-freebsd-x64/-/binding-freebsd-x64-1.62.0.tgz", + "integrity": "sha512-dLP33T7VLCmLVv4cvjkVX+rmkcwNk2UfxmsZPNur/7BQHoQR60zJ7XLiRvNUawlzn0u8ngCa3itjEG73MAMa/w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm-gnueabihf": { + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.62.0.tgz", + "integrity": "sha512-fl//LWNks6qo9chNY60UDYyIwtp7a5cEx4Y/rHPjaarhuwqx6jtbzEpD5V5AqmdL4a6Y5D8zeXg5HF2Cr0QmSQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm-musleabihf": { + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm-musleabihf/-/binding-linux-arm-musleabihf-1.62.0.tgz", + "integrity": "sha512-i5vkAuxvueTODV3J2dL61/TXewDHhMFKvtD156cIsk7GsdfiAu7zW7kY0NJXhKeFHeiMZIh7eFNjkPYH6J47HQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm64-gnu": { + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.62.0.tgz", + "integrity": "sha512-QwN19LLuIGuOjEflSeJkZmOTfBdBMlTmW8xbMf8TZhjd//cxVNYQPq75q7oKZBJc6hRx3gY7sX0Egc8cEIFZYg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-arm64-musl": { + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.62.0.tgz", + "integrity": "sha512-8eCy3FCDuWUM5hWujAv6heMvfZPbcCOU3SdQUAkixZLu5bSzOkNfirJiLGoQFO943xceOKkiQRMQNzH++jM3WA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-ppc64-gnu": { + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.62.0.tgz", + "integrity": "sha512-NjQ7K7tpTPDe9J+yq8p/s/J0E7lRCkK2uDBDqvT4XIT6f4Z0tlnr59OBg/WcrmVHER1AbrcfyxhGTXgcG8ytWg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-riscv64-gnu": { + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-gnu/-/binding-linux-riscv64-gnu-1.62.0.tgz", + "integrity": "sha512-oKZed9gmSwze29dEt3/Wnsv6l/Ygw/FUst+8Kfpv2SGeS/glEoTGZAMQw37SVyzFV76UTHJN2snGgxK2t2+8ow==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-riscv64-musl": { + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-riscv64-musl/-/binding-linux-riscv64-musl-1.62.0.tgz", + "integrity": "sha512-gBjBxQ+9lGpAYq+ELqw0w8QXsBnkZclFc7GRX2r0LnEVn3ZTEqeIKpKcGjucmp76Q53bvJD0i4qBWBhcfhSfGA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@oxlint/binding-linux-s390x-gnu": { + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.62.0.tgz", + "integrity": "sha512-Ew2Kxs9EQ9/mbAIJ2hvocMC0wsOu6YKzStI2eFBDt+Td5O8seVC/oxgRIHqCcl5sf5ratA1nozQBAuv7tphkHg==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@humanfs/node": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", - "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", + "node_modules/@oxlint/binding-linux-x64-gnu": { + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.62.0.tgz", + "integrity": "sha512-5z25jcAA0gfKyVwz71A0VXgaPlocPoTAxhlv/hgoK6tlCrfoNuw7haWbDHvGMfjXhdic4EqVXGRv5XsTqFnbRQ==", + "cpu": [ + "x64" + ], "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanfs/core": "^0.19.2", - "@humanfs/types": "^0.15.0", - "@humanwhocodes/retry": "^0.4.0" - }, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18.18.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@humanfs/types": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", - "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "node_modules/@oxlint/binding-linux-x64-musl": { + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-linux-x64-musl/-/binding-linux-x64-musl-1.62.0.tgz", + "integrity": "sha512-IWpHmMB6ZDllPvqWDkG6AmXrN7JF5e/c4g/0PuURsmlK+vHoYZPB70rr4u1bn3I4LsKCSpqqfveyx6UCOC8wdg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "Apache-2.0", + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18.18.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "node_modules/@oxlint/binding-openharmony-arm64": { + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-openharmony-arm64/-/binding-openharmony-arm64-1.62.0.tgz", + "integrity": "sha512-fjlSxxrD5pA594vkyikCS9MnPRjQawW6/BLgyTYkO+73wwPlYjkcZ7LSd974l0Q2zkHQmu4DPvJFLYA7o8xrxQ==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@humanwhocodes/retry": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", - "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "node_modules/@oxlint/binding-win32-arm64-msvc": { + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.62.0.tgz", + "integrity": "sha512-EiFXr8loNS0Ul3Gu80+9nr1T8jRmnKocqmHHg16tj5ZqTgUXyb97l2rrspVHdDluyFn9JfR4PoJFdNzw4paHww==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=18.18" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", - "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", + "node_modules/@oxlint/binding-win32-ia32-msvc": { + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.62.0.tgz", + "integrity": "sha512-IgOFvL73li1bFgab+hThXYA0N2Xms2kV2MvZN95cebV+fmrZ9AVui1JSxfeeqRLo3CpPxKZlzhyq4G0cnaAvIw==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", "optional": true, - "dependencies": { - "@tybys/wasm-util": "^0.10.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "peerDependencies": { - "@emnapi/core": "^1.7.1", - "@emnapi/runtime": "^1.7.1" + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@oxc-project/types": { - "version": "0.127.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.127.0.tgz", - "integrity": "sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==", + "node_modules/@oxlint/binding-win32-x64-msvc": { + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/@oxlint/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.62.0.tgz", + "integrity": "sha512-6hMpyDWQ2zGA1OXFKBrdYMUveUCO8UJhkO6JdwZPd78xIdHZNhjx+pib+4fC2Cljuhjyl0QwA2F3df/bs4Bp6A==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/Boshen" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, "node_modules/@rolldown/binding-android-arm64": { @@ -985,358 +1566,114 @@ "node_modules/@rolldown/binding-wasm32-wasi": { "version": "1.0.0-rc.17", "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.17.tgz", - "integrity": "sha512-LEXei6vo0E5wTGwpkJ4KoT3OZJRnglwldt5ziLzOlc6qqb55z4tWNq2A+PFqCJuvWWdP53CVhG1Z9NtToDPJrA==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "1.10.0", - "@emnapi/runtime": "1.10.0", - "@napi-rs/wasm-runtime": "^1.1.4" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.0.0-rc.17", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.17.tgz", - "integrity": "sha512-gUmyzBl3SPMa6hrqFUth9sVfcLBlYsbMzBx5PlexMroZStgzGqlZ26pYG89rBb45Mnia+oil6YAIFeEWGWhoZA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.0.0-rc.17", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.17.tgz", - "integrity": "sha512-3hkiolcUAvPB9FLb3UZdfjVVNWherN1f/skkGWJP/fgSQhYUZpSIRr0/I8ZK9TkF3F7kxvJAk0+IcKvPHk9qQg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.17", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.17.tgz", - "integrity": "sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@standard-schema/spec": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", - "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tybys/wasm-util": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/chai": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", - "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/deep-eql": "*", - "assertion-error": "^2.0.1" - } - }, - "node_modules/@types/deep-eql": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", - "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/esrecurse": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", - "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "25.5.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz", - "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~7.18.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.2.tgz", - "integrity": "sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.57.2", - "@typescript-eslint/type-utils": "8.57.2", - "@typescript-eslint/utils": "8.57.2", - "@typescript-eslint/visitor-keys": "8.57.2", - "ignore": "^7.0.5", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.4.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.57.2", - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.2.tgz", - "integrity": "sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.57.2", - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/typescript-estree": "8.57.2", - "@typescript-eslint/visitor-keys": "8.57.2", - "debug": "^4.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/project-service": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.2.tgz", - "integrity": "sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.57.2", - "@typescript-eslint/types": "^8.57.2", - "debug": "^4.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.2.tgz", - "integrity": "sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw==", + "integrity": "sha512-LEXei6vo0E5wTGwpkJ4KoT3OZJRnglwldt5ziLzOlc6qqb55z4tWNq2A+PFqCJuvWWdP53CVhG1Z9NtToDPJrA==", + "cpu": [ + "wasm32" + ], "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/visitor-keys": "8.57.2" + "@emnapi/core": "1.10.0", + "@emnapi/runtime": "1.10.0", + "@napi-rs/wasm-runtime": "^1.1.4" }, "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.2.tgz", - "integrity": "sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw==", + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.17.tgz", + "integrity": "sha512-gUmyzBl3SPMa6hrqFUth9sVfcLBlYsbMzBx5PlexMroZStgzGqlZ26pYG89rBb45Mnia+oil6YAIFeEWGWhoZA==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.57.2.tgz", - "integrity": "sha512-Co6ZCShm6kIbAM/s+oYVpKFfW7LBc6FXoPXjTRQ449PPNBY8U0KZXuevz5IFuuUj2H9ss40atTaf9dlGLzbWZg==", + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.17.tgz", + "integrity": "sha512-3hkiolcUAvPB9FLb3UZdfjVVNWherN1f/skkGWJP/fgSQhYUZpSIRr0/I8ZK9TkF3F7kxvJAk0+IcKvPHk9qQg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/typescript-estree": "8.57.2", - "@typescript-eslint/utils": "8.57.2", - "debug": "^4.4.3", - "ts-api-utils": "^2.4.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@typescript-eslint/types": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.2.tgz", - "integrity": "sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA==", + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.17", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.17.tgz", + "integrity": "sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==", "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } + "license": "MIT" + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.2.tgz", - "integrity": "sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA==", + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "@typescript-eslint/project-service": "8.57.2", - "@typescript-eslint/tsconfig-utils": "8.57.2", - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/visitor-keys": "8.57.2", - "debug": "^4.4.3", - "minimatch": "^10.2.2", - "semver": "^7.7.3", - "tinyglobby": "^0.2.15", - "ts-api-utils": "^2.4.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "typescript": ">=4.8.4 <6.0.0" + "tslib": "^2.4.0" } }, - "node_modules/@typescript-eslint/utils": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.2.tgz", - "integrity": "sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg==", + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.9.1", - "@typescript-eslint/scope-manager": "8.57.2", - "@typescript-eslint/types": "8.57.2", - "@typescript-eslint/typescript-estree": "8.57.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.2.tgz", - "integrity": "sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw==", + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz", + "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.57.2", - "eslint-visitor-keys": "^5.0.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "undici-types": "~7.18.0" } }, "node_modules/@vitest/expect": { @@ -1452,46 +1789,6 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.15.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", - "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "node_modules/assertion-error": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", @@ -1551,46 +1848,6 @@ "dev": true, "license": "MIT" }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, "node_modules/detect-libc": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", @@ -1650,177 +1907,6 @@ "@esbuild/win32-x64": "0.27.7" } }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.1.0.tgz", - "integrity": "sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.3", - "@eslint/config-helpers": "^0.5.3", - "@eslint/core": "^1.1.1", - "@eslint/plugin-kit": "^0.6.1", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^8.0.0", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "node_modules/eslint-config-prettier": { - "version": "10.1.8", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", - "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "funding": { - "url": "https://opencollective.com/eslint-config-prettier" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", - "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@types/esrecurse": "^4.3.1", - "@types/estree": "^1.0.8", - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", - "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", - "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.16.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^5.0.1" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", - "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, "node_modules/estree-walker": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", @@ -1831,46 +1917,15 @@ "@types/estree": "^1.0.0" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expect-type": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", - "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", "dev": true, - "license": "MIT" + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } }, "node_modules/fdir": { "version": "6.5.0", @@ -1890,57 +1945,6 @@ } } }, - "node_modules/file-entry-cache": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", - "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^4.0.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", - "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.4" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -1992,127 +1996,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "17.4.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-17.4.0.tgz", - "integrity": "sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/lightningcss": { "version": "1.32.0", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", @@ -2386,22 +2269,6 @@ "url": "https://opencollective.com/parcel" } }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/lru-cache": { "version": "11.3.5", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz", @@ -2448,13 +2315,6 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", @@ -2474,13 +2334,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, "node_modules/node-addon-api": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.7.0.tgz", @@ -2530,54 +2383,107 @@ ], "license": "MIT" }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "node_modules/oxfmt": { + "version": "0.47.0", + "resolved": "https://registry.npmjs.org/oxfmt/-/oxfmt-0.47.0.tgz", + "integrity": "sha512-OFbkbzxKCpooQEnRmpTDnuwTX8KHXzZTQ4Df/hz85fpS67Pl+lxPEFvUtin56HIIS0B1k4X8oIzTXRZPufA2CA==", "dev": true, "license": "MIT", "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" + "tinypool": "2.1.0" + }, + "bin": { + "oxfmt": "bin/oxfmt" }, "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxfmt/binding-android-arm-eabi": "0.47.0", + "@oxfmt/binding-android-arm64": "0.47.0", + "@oxfmt/binding-darwin-arm64": "0.47.0", + "@oxfmt/binding-darwin-x64": "0.47.0", + "@oxfmt/binding-freebsd-x64": "0.47.0", + "@oxfmt/binding-linux-arm-gnueabihf": "0.47.0", + "@oxfmt/binding-linux-arm-musleabihf": "0.47.0", + "@oxfmt/binding-linux-arm64-gnu": "0.47.0", + "@oxfmt/binding-linux-arm64-musl": "0.47.0", + "@oxfmt/binding-linux-ppc64-gnu": "0.47.0", + "@oxfmt/binding-linux-riscv64-gnu": "0.47.0", + "@oxfmt/binding-linux-riscv64-musl": "0.47.0", + "@oxfmt/binding-linux-s390x-gnu": "0.47.0", + "@oxfmt/binding-linux-x64-gnu": "0.47.0", + "@oxfmt/binding-linux-x64-musl": "0.47.0", + "@oxfmt/binding-openharmony-arm64": "0.47.0", + "@oxfmt/binding-win32-arm64-msvc": "0.47.0", + "@oxfmt/binding-win32-ia32-msvc": "0.47.0", + "@oxfmt/binding-win32-x64-msvc": "0.47.0" + } + }, + "node_modules/oxlint": { + "version": "1.62.0", + "resolved": "https://registry.npmjs.org/oxlint/-/oxlint-1.62.0.tgz", + "integrity": "sha512-1uFkg6HakjsGIpW9wNdeW4/2LOHW9MEkoWjZUTUfQtIHyLIZPYt00w3Sg+H3lH+206FgBPHBbW5dVE5l2ExECQ==", "dev": true, "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" + "bin": { + "oxlint": "bin/oxlint" }, "engines": { - "node": ">=10" + "node": "^20.19.0 || >=22.12.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/Boshen" + }, + "optionalDependencies": { + "@oxlint/binding-android-arm-eabi": "1.62.0", + "@oxlint/binding-android-arm64": "1.62.0", + "@oxlint/binding-darwin-arm64": "1.62.0", + "@oxlint/binding-darwin-x64": "1.62.0", + "@oxlint/binding-freebsd-x64": "1.62.0", + "@oxlint/binding-linux-arm-gnueabihf": "1.62.0", + "@oxlint/binding-linux-arm-musleabihf": "1.62.0", + "@oxlint/binding-linux-arm64-gnu": "1.62.0", + "@oxlint/binding-linux-arm64-musl": "1.62.0", + "@oxlint/binding-linux-ppc64-gnu": "1.62.0", + "@oxlint/binding-linux-riscv64-gnu": "1.62.0", + "@oxlint/binding-linux-riscv64-musl": "1.62.0", + "@oxlint/binding-linux-s390x-gnu": "1.62.0", + "@oxlint/binding-linux-x64-gnu": "1.62.0", + "@oxlint/binding-linux-x64-musl": "1.62.0", + "@oxlint/binding-openharmony-arm64": "1.62.0", + "@oxlint/binding-win32-arm64-msvc": "1.62.0", + "@oxlint/binding-win32-ia32-msvc": "1.62.0", + "@oxlint/binding-win32-x64-msvc": "1.62.0" + }, + "peerDependencies": { + "oxlint-tsgolint": ">=0.18.0" + }, + "peerDependenciesMeta": { + "oxlint-tsgolint": { + "optional": true + } } }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "node_modules/oxlint-tsgolint": { + "version": "0.22.1", + "resolved": "https://registry.npmjs.org/oxlint-tsgolint/-/oxlint-tsgolint-0.22.1.tgz", + "integrity": "sha512-YUSGSLUnoolsu8gxISEDio3q1rtsCozwfOzASUn3DT2mR2EeQ93uEEnen7s+6LpF+lyTQFln1pQfqwBh/fsVEg==", "dev": true, "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" + "bin": { + "tsgolint": "bin/tsgolint.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "@oxlint-tsgolint/darwin-arm64": "0.22.1", + "@oxlint-tsgolint/darwin-x64": "0.22.1", + "@oxlint-tsgolint/linux-arm64": "0.22.1", + "@oxlint-tsgolint/linux-x64": "0.22.1", + "@oxlint-tsgolint/win32-arm64": "0.22.1", + "@oxlint-tsgolint/win32-x64": "0.22.1" } }, "node_modules/package-json-from-dist": { @@ -2587,26 +2493,6 @@ "dev": true, "license": "BlueOak-1.0.0" }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/path-scurry": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", @@ -2710,42 +2596,6 @@ "node": "^10 || ^12 || >=14" } }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz", - "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/resolve-pkg-maps": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", @@ -2810,42 +2660,6 @@ "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.17" } }, - "node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/siginfo": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", @@ -2911,27 +2725,24 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tinyrainbow": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", - "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", + "node_modules/tinypool": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-2.1.0.tgz", + "integrity": "sha512-Pugqs6M0m7Lv1I7FtxN4aoyToKg1C4tu+/381vH35y8oENM/Ai7f7C4StcoK4/+BSw9ebcS8jRiVrORFKCALLw==", "dev": true, "license": "MIT", "engines": { - "node": ">=14.0.0" + "node": "^20.0.0 || >=22.0.0" } }, - "node_modules/ts-api-utils": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", - "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "node_modules/tinyrainbow": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", "dev": true, "license": "MIT", "engines": { - "node": ">=18.12" - }, - "peerDependencies": { - "typescript": ">=4.8.4" + "node": ">=14.0.0" } }, "node_modules/tslib": { @@ -2977,19 +2788,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/typescript": { "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", @@ -3004,30 +2802,6 @@ "node": ">=14.17" } }, - "node_modules/typescript-eslint": { - "version": "8.57.2", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.57.2.tgz", - "integrity": "sha512-VEPQ0iPgWO/sBaZOU1xo4nuNdODVOajPnTIbog2GKYr31nIlZ0fWPoCQgGfF3ETyBl1vn63F/p50Um9Z4J8O8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "8.57.2", - "@typescript-eslint/parser": "8.57.2", - "@typescript-eslint/typescript-estree": "8.57.2", - "@typescript-eslint/utils": "8.57.2" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.0.0" - } - }, "node_modules/ulid": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/ulid/-/ulid-3.0.2.tgz", @@ -3044,16 +2818,6 @@ "dev": true, "license": "MIT" }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, "node_modules/vite": { "version": "8.0.10", "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.10.tgz", @@ -3229,22 +2993,6 @@ } } }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/why-is-node-running": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", @@ -3262,29 +3010,6 @@ "node": ">=8" } }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/zod": { "version": "4.3.6", "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", diff --git a/package.json b/package.json index 6fd5429..fb29b76 100644 --- a/package.json +++ b/package.json @@ -42,11 +42,11 @@ "clean": "rimraf coverage dist *.tsbuildinfo", "cli": "tsx src/cli/main.ts", "doctor": "tsx src/cli/main.ts doctor", - "format": "prettier . --write", - "format:check": "prettier . --check", + "format": "oxfmt . --write", + "format:check": "oxfmt . --check", "intent:validate": "npx @tanstack/intent@latest validate", - "lint": "eslint src test vitest.config.ts --max-warnings=0", - "lint:fix": "eslint src test vitest.config.ts --fix", + "lint": "oxlint src test vitest.config.ts", + "lint:fix": "oxlint src test vitest.config.ts --fix", "pack:private": "npm run build && npm pack --json --ignore-scripts", "pack:release": "node ./scripts/pack-release.mjs", "prepare": "npm run build", @@ -64,16 +64,13 @@ "version:json": "tsx src/cli/main.ts version --json" }, "devDependencies": { - "@eslint/js": "10.0.1", "@types/node": "25.5.0", - "eslint": "10.1.0", - "eslint-config-prettier": "10.1.8", - "globals": "17.4.0", - "prettier": "3.8.1", + "oxfmt": "0.47.0", + "oxlint": "1.62.0", + "oxlint-tsgolint": "0.22.1", "rimraf": "6.1.3", "tsx": "4.21.0", "typescript": "5.9.3", - "typescript-eslint": "8.57.2", "vitest": "4.1.2" }, "dependencies": { diff --git a/src/tools/review-bundle.ts b/src/tools/review-bundle.ts index 0156512..7527987 100644 --- a/src/tools/review-bundle.ts +++ b/src/tools/review-bundle.ts @@ -72,7 +72,7 @@ export interface ReviewBundlePageModel { allArtifacts: BundleArtifact[]; } -/* eslint-disable @typescript-eslint/no-deprecated -- review-bundle intentionally uses passthrough manifests to keep legacy dogfood bundles readable. */ +/* oxlint-disable typescript/no-deprecated -- review-bundle intentionally uses passthrough manifests to keep legacy dogfood bundles readable. */ const COMMAND_ENTRY_SCHEMA = z .union([ z.string(), @@ -122,7 +122,7 @@ export const BundleManifestSchema = z .optional(), }) .passthrough(); -/* eslint-enable @typescript-eslint/no-deprecated */ +/* oxlint-enable typescript/no-deprecated */ const NOTE_FILE_NAMES = new Set([ 'README.md', diff --git a/test/e2e/helpers.ts b/test/e2e/helpers.ts index 3f9d905..a693683 100644 --- a/test/e2e/helpers.ts +++ b/test/e2e/helpers.ts @@ -37,7 +37,7 @@ function withJsonFlag(args: string[]): string[] { ]; } -// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-parameters -- typed JSON helper keeps call sites concise in test code. +// oxlint-disable-next-line typescript/no-unnecessary-type-parameters -- typed JSON helper keeps call sites concise in test code. export function runCliJson( args: string[], env: Record, @@ -54,7 +54,7 @@ export function normalizeTerminalOutput(output: string): string { } export async function createIsolatedHome(): Promise { - // prettier-ignore + // oxfmt-ignore const home = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-e2e-home-'))); return home; } diff --git a/test/integration/backend-selection.test.ts b/test/integration/backend-selection.test.ts index 12e6735..ee3d16f 100644 --- a/test/integration/backend-selection.test.ts +++ b/test/integration/backend-selection.test.ts @@ -24,7 +24,7 @@ describe('backend selection integration', () => { let sessionId = ''; beforeEach(async () => { - // prettier-ignore + // oxfmt-ignore testHome = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-backend-selection-'))); }); diff --git a/test/integration/cli.test.ts b/test/integration/cli.test.ts index 843955a..400688f 100644 --- a/test/integration/cli.test.ts +++ b/test/integration/cli.test.ts @@ -49,7 +49,7 @@ const SEMVER_WITH_OPTIONAL_PRERELEASE = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/; describe('CLI integration', () => { beforeEach(() => { - // prettier-ignore + // oxfmt-ignore testHome = realpathSync(mkdtempSync(join(tmpdir(), 'agent-tty-cli-home-'))); }); @@ -354,7 +354,7 @@ describe('CLI integration', () => { }); it('uses --home instead of AGENT_TTY_HOME', () => { - // prettier-ignore + // oxfmt-ignore const overrideHome = realpathSync(mkdtempSync(join(tmpdir(), 'agent-tty-cli-override-'))); try { diff --git a/test/integration/evals-compare-baseline.test.ts b/test/integration/evals-compare-baseline.test.ts index 170e5ee..0fc2cb2 100644 --- a/test/integration/evals-compare-baseline.test.ts +++ b/test/integration/evals-compare-baseline.test.ts @@ -41,7 +41,7 @@ function readJsonFile(filePath: string): unknown { } function expectPerCaseComparisonShape(comparison: PerCaseComparison): void { - /* eslint-disable @typescript-eslint/no-unsafe-assignment -- expect.any() and expect.objectContaining() return any */ + /* oxlint-disable typescript/no-unsafe-assignment -- expect.any() and expect.objectContaining() return any */ expect(comparison).toEqual( expect.objectContaining({ caseId: expect.any(String), @@ -76,7 +76,7 @@ function expectPerCaseComparisonShape(comparison: PerCaseComparison): void { verdict: expect.any(String), }), ); - /* eslint-enable @typescript-eslint/no-unsafe-assignment */ + /* oxlint-enable typescript/no-unsafe-assignment */ } let testRoot = ''; @@ -88,7 +88,7 @@ describe( }, () => { beforeEach(() => { - // prettier-ignore + // oxfmt-ignore testRoot = realpathSync(mkdtempSync(join(tmpdir(), 'agent-tty-evals-compare-baseline-'))); }); diff --git a/test/integration/evals-parallelization.test.ts b/test/integration/evals-parallelization.test.ts index da9ec5b..b9cc879 100644 --- a/test/integration/evals-parallelization.test.ts +++ b/test/integration/evals-parallelization.test.ts @@ -136,7 +136,7 @@ let testRoot = ''; describe('eval scheduler parity', { timeout: DEFAULT_EVAL_TIMEOUT_MS }, () => { beforeEach(() => { - // prettier-ignore + // oxfmt-ignore testRoot = realpathSync(mkdtempSync(join(tmpdir(), 'agent-tty-evals-parity-'))); }); diff --git a/test/integration/evals-reporter-default-parity.test.ts b/test/integration/evals-reporter-default-parity.test.ts index ac8e2d7..0c21e86 100644 --- a/test/integration/evals-reporter-default-parity.test.ts +++ b/test/integration/evals-reporter-default-parity.test.ts @@ -133,7 +133,7 @@ describe( { timeout: DEFAULT_EVAL_TIMEOUT_MS }, () => { beforeEach(() => { - // prettier-ignore + // oxfmt-ignore testRoot = realpathSync(mkdtempSync(join(tmpdir(), 'agent-tty-evals-reporter-final-'))); }); diff --git a/test/integration/evals-reporter-jsonl.test.ts b/test/integration/evals-reporter-jsonl.test.ts index 88563de..621ce33 100644 --- a/test/integration/evals-reporter-jsonl.test.ts +++ b/test/integration/evals-reporter-jsonl.test.ts @@ -125,7 +125,7 @@ describe( { timeout: DEFAULT_EVAL_TIMEOUT_MS }, () => { beforeEach(() => { - // prettier-ignore + // oxfmt-ignore testRoot = realpathSync(mkdtempSync(join(tmpdir(), 'agent-tty-evals-reporter-jsonl-'))); }); diff --git a/test/integration/evals/authoring-pilots.test.ts b/test/integration/evals/authoring-pilots.test.ts index c3193e5..945c259 100644 --- a/test/integration/evals/authoring-pilots.test.ts +++ b/test/integration/evals/authoring-pilots.test.ts @@ -524,7 +524,7 @@ describe( { timeout: DEFAULT_EVAL_TIMEOUT_MS }, () => { beforeEach(() => { - // prettier-ignore + // oxfmt-ignore testRoot = realpathSync(mkdtempSync(join(tmpdir(), 'agent-tty-evals-authoring-pilots-'))); fixtureRoot = join(testRoot, 'fixture-provider'); createFixtureProviderDirectory(fixtureRoot); diff --git a/test/integration/event-log.test.ts b/test/integration/event-log.test.ts index 6f9fcc8..dbe5921 100644 --- a/test/integration/event-log.test.ts +++ b/test/integration/event-log.test.ts @@ -56,7 +56,7 @@ let testHome = ''; describe('event-log integration', { timeout: 30000 }, () => { beforeEach(async () => { - // prettier-ignore + // oxfmt-ignore testHome = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-home-'))); }); diff --git a/test/integration/gc.test.ts b/test/integration/gc.test.ts index c1bd1a9..f7844dc 100644 --- a/test/integration/gc.test.ts +++ b/test/integration/gc.test.ts @@ -38,7 +38,7 @@ let testHome = ''; describe('gc integration', { timeout: 30000 }, () => { beforeEach(async () => { - // prettier-ignore + // oxfmt-ignore testHome = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-gc-'))); }); diff --git a/test/integration/host-renderer-rpc.test.ts b/test/integration/host-renderer-rpc.test.ts index ddb755f..ce95fbd 100644 --- a/test/integration/host-renderer-rpc.test.ts +++ b/test/integration/host-renderer-rpc.test.ts @@ -82,7 +82,7 @@ describe( let sessDir = ''; beforeEach(async () => { - // prettier-ignore + // oxfmt-ignore testHome = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-host-renderer-'))); sessionId = createSession(testHome, [ '/bin/sh', diff --git a/test/integration/io-loop.test.ts b/test/integration/io-loop.test.ts index cfae327..6a3c7c7 100644 --- a/test/integration/io-loop.test.ts +++ b/test/integration/io-loop.test.ts @@ -20,7 +20,7 @@ let testHome = ''; describe('io-loop integration', { timeout: 30000 }, () => { beforeEach(async () => { - // prettier-ignore + // oxfmt-ignore testHome = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-home-'))); }); diff --git a/test/integration/lifecycle.test.ts b/test/integration/lifecycle.test.ts index 7f30a19..6f16acc 100644 --- a/test/integration/lifecycle.test.ts +++ b/test/integration/lifecycle.test.ts @@ -59,7 +59,7 @@ let testHome = ''; describe('lifecycle integration', { timeout: 30000 }, () => { beforeEach(async () => { - // prettier-ignore + // oxfmt-ignore testHome = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-home-'))); }); diff --git a/test/integration/pty-basics.test.ts b/test/integration/pty-basics.test.ts index 636a011..5f4bbfa 100644 --- a/test/integration/pty-basics.test.ts +++ b/test/integration/pty-basics.test.ts @@ -25,7 +25,7 @@ let testHome = ''; describe('pty-basics integration', { timeout: 30000 }, () => { beforeEach(async () => { - // prettier-ignore + // oxfmt-ignore testHome = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-home-'))); }); diff --git a/test/integration/record-export.test.ts b/test/integration/record-export.test.ts index 4f1ae77..b8b554b 100644 --- a/test/integration/record-export.test.ts +++ b/test/integration/record-export.test.ts @@ -83,7 +83,7 @@ describe('record export integration', { timeout: 120_000 }, () => { let testHome = ''; beforeEach(async () => { - // prettier-ignore + // oxfmt-ignore testHome = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-record-export-'))); }); diff --git a/test/integration/renderer-backend.test.ts b/test/integration/renderer-backend.test.ts index 9a53011..2d78766 100644 --- a/test/integration/renderer-backend.test.ts +++ b/test/integration/renderer-backend.test.ts @@ -112,7 +112,7 @@ describe('GhosttyWebBackend integration', { timeout: 120_000 }, () => { }); it('resolves the browser cache from the original HOME when HOME is isolated before boot', async () => { - // prettier-ignore + // oxfmt-ignore const isolatedHome = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-renderer-home-'))); const previousHome = process.env.HOME; const previousBrowsersPath = process.env.PLAYWRIGHT_BROWSERS_PATH; @@ -373,7 +373,7 @@ describe('GhosttyWebBackend integration', { timeout: 120_000 }, () => { payload: { data: `${expectedText}\r\n` }, }, ]); - // prettier-ignore + // oxfmt-ignore const outputDir = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-renderer-restart-'))); const screenshotAPath = join(outputDir, 'renderer-a.png'); const screenshotBPath = join(outputDir, 'renderer-b.png'); @@ -443,7 +443,7 @@ describe('GhosttyWebBackend integration', { timeout: 120_000 }, () => { ]), ); - // prettier-ignore + // oxfmt-ignore const outputDir = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-renderer-shot-'))); const outputPath = join(outputDir, 'renderer.png'); diff --git a/test/integration/run.test.ts b/test/integration/run.test.ts index d0edc5e..5a251fb 100644 --- a/test/integration/run.test.ts +++ b/test/integration/run.test.ts @@ -92,7 +92,7 @@ function testEnv(): Record { describe('run command integration', { timeout: 45_000 }, () => { beforeEach(() => { - // prettier-ignore + // oxfmt-ignore testHome = realpathSync(mkdtempSync(join(tmpdir(), 'agent-tty-run-home-'))); }); diff --git a/test/integration/wait-render.test.ts b/test/integration/wait-render.test.ts index c6aa041..4cc8115 100644 --- a/test/integration/wait-render.test.ts +++ b/test/integration/wait-render.test.ts @@ -106,7 +106,7 @@ describe('wait render integration', { timeout: 120_000 }, () => { let rpcSocketPath = ''; beforeEach(async () => { - // prettier-ignore + // oxfmt-ignore testHome = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-wait-render-'))); sessionId = createSession(testHome, [...SESSION_COMMAND]); await waitForOutputMarker(testHome, sessionId, 'booting'); diff --git a/test/unit/commands/doctor.test.ts b/test/unit/commands/doctor.test.ts index d82405b..22bb334 100644 --- a/test/unit/commands/doctor.test.ts +++ b/test/unit/commands/doctor.test.ts @@ -100,7 +100,7 @@ describe('doctor command', () => { beforeEach(async () => { originalHome = process.env.HOME; originalPlaywrightBrowsersPath = process.env.PLAYWRIGHT_BROWSERS_PATH; - // prettier-ignore + // oxfmt-ignore testHome = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-doctor-home-'))); process.env.AGENT_TTY_HOME = testHome; }); diff --git a/test/unit/config/resolveConfig.test.ts b/test/unit/config/resolveConfig.test.ts index d676008..0325e2b 100644 --- a/test/unit/config/resolveConfig.test.ts +++ b/test/unit/config/resolveConfig.test.ts @@ -12,7 +12,7 @@ import { const temporaryHomes: string[] = []; async function createTemporaryHome(): Promise { - // prettier-ignore + // oxfmt-ignore const home = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-config-'))); temporaryHomes.push(home); return home; diff --git a/test/unit/host/eventLog.test.ts b/test/unit/host/eventLog.test.ts index 59071d9..398cb73 100644 --- a/test/unit/host/eventLog.test.ts +++ b/test/unit/host/eventLog.test.ts @@ -23,7 +23,7 @@ let eventLogPath = ''; describe('countEventLogEntries', () => { beforeEach(async () => { - // prettier-ignore + // oxfmt-ignore tempDir = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-event-log-'))); eventLogPath = join(tempDir, 'events.jsonl'); }); @@ -62,7 +62,7 @@ describe('countEventLogEntries', () => { describe('EventLog', () => { beforeEach(async () => { - // prettier-ignore + // oxfmt-ignore tempDir = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-event-log-'))); eventLogPath = join(tempDir, 'events.jsonl'); await writeFile(eventLogPath, '', 'utf8'); diff --git a/test/unit/host/renderer.test.ts b/test/unit/host/renderer.test.ts index 427e3e3..7b9dae1 100644 --- a/test/unit/host/renderer.test.ts +++ b/test/unit/host/renderer.test.ts @@ -179,7 +179,7 @@ describe('HostRendererManager', () => { let backendFactory: ReturnType>; beforeEach(async () => { - // prettier-ignore + // oxfmt-ignore sessionDir = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-renderer-'))); backends = []; backendFactory = vi.fn(() => { diff --git a/test/unit/renderer/ghosttyWebBackend.test.ts b/test/unit/renderer/ghosttyWebBackend.test.ts index 5f518a9..be6d0aa 100644 --- a/test/unit/renderer/ghosttyWebBackend.test.ts +++ b/test/unit/renderer/ghosttyWebBackend.test.ts @@ -330,7 +330,7 @@ describe('GhosttyWebBackend unit guards', () => { it('returns screenshot metadata including png dimensions and hashes', async () => { const backend = createBackend(); - // prettier-ignore + // oxfmt-ignore const temporaryDirectory = await realpath(await mkdtemp(join(tmpdir(), 'ghostty-web-backend-'))); const outputPath = join(temporaryDirectory, 'screenshot.png'); const pngBuffer = createPngBuffer(800, 600); @@ -397,7 +397,7 @@ describe('GhosttyWebBackend unit guards', () => { it('uses initial caret capture when showCursor is enabled', async () => { const backend = createBackend(); - // prettier-ignore + // oxfmt-ignore const temporaryDirectory = await realpath(await mkdtemp(join(tmpdir(), 'ghostty-web-backend-cursor-'))); const outputPath = join(temporaryDirectory, 'screenshot.png'); const pngBuffer = createPngBuffer(640, 480); diff --git a/test/unit/replay/offlineReplay.test.ts b/test/unit/replay/offlineReplay.test.ts index 82424a2..2b6cd3d 100644 --- a/test/unit/replay/offlineReplay.test.ts +++ b/test/unit/replay/offlineReplay.test.ts @@ -167,7 +167,7 @@ async function createSessionFixture(options?: { includeEventLog?: boolean; manifestOverrides?: Partial; }): Promise<{ sessionDir: string; sessionId: string }> { - // prettier-ignore + // oxfmt-ignore const sessionDir = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-offline-replay-'))); tempDirs.push(sessionDir); diff --git a/test/unit/storage/eventLogCodec.test.ts b/test/unit/storage/eventLogCodec.test.ts index 14de273..16c8492 100644 --- a/test/unit/storage/eventLogCodec.test.ts +++ b/test/unit/storage/eventLogCodec.test.ts @@ -48,7 +48,7 @@ let eventLogPath = ''; describe('event log codec', () => { beforeEach(async () => { - // prettier-ignore + // oxfmt-ignore tempDir = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-event-log-codec-'))); eventLogPath = join(tempDir, 'events.jsonl'); }); diff --git a/test/unit/storage/sessionPaths.test.ts b/test/unit/storage/sessionPaths.test.ts index 2649228..4c8ad99 100644 --- a/test/unit/storage/sessionPaths.test.ts +++ b/test/unit/storage/sessionPaths.test.ts @@ -84,7 +84,7 @@ describe('session paths', () => { describe('manifest storage', () => { it('writes and reads manifests with validation', async () => { - // prettier-ignore + // oxfmt-ignore const home = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-home-'))); temporaryDirectories.push(home); const path = manifestPath(sessionDir(home, 'session-01')); @@ -98,7 +98,7 @@ describe('manifest storage', () => { }); it('returns null when a manifest does not exist', async () => { - // prettier-ignore + // oxfmt-ignore const home = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-home-'))); temporaryDirectories.push(home); const path = manifestPath(sessionDir(home, 'missing-session')); @@ -107,7 +107,7 @@ describe('manifest storage', () => { }); it('rejects invalid manifest contents during reads', async () => { - // prettier-ignore + // oxfmt-ignore const home = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-home-'))); temporaryDirectories.push(home); const path = manifestPath(sessionDir(home, 'session-01')); diff --git a/test/unit/tools/review-bundle.test.ts b/test/unit/tools/review-bundle.test.ts index 558f7be..a159308 100644 --- a/test/unit/tools/review-bundle.test.ts +++ b/test/unit/tools/review-bundle.test.ts @@ -24,7 +24,7 @@ import { const tempDirs: string[] = []; async function createTempDir(): Promise { - // prettier-ignore + // oxfmt-ignore const directory = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-review-bundle-'))); tempDirs.push(directory); return directory; diff --git a/test/unit/tools/validate-bundle.test.ts b/test/unit/tools/validate-bundle.test.ts index 3263820..942a2e4 100644 --- a/test/unit/tools/validate-bundle.test.ts +++ b/test/unit/tools/validate-bundle.test.ts @@ -22,7 +22,7 @@ import { const tempDirs: string[] = []; async function createTempDir(): Promise { - // prettier-ignore + // oxfmt-ignore const directory = await realpath(await mkdtemp(join(tmpdir(), 'agent-tty-validate-bundle-'))); tempDirs.push(directory); return directory;