From 31dd56e7866543d123cf0772dabfd2a2eb121deb Mon Sep 17 00:00:00 2001 From: Mao Nakamoto <41178744+catomean@users.noreply.github.com> Date: Mon, 31 Aug 2026 18:08:33 +0200 Subject: [PATCH 1/4] style: format with oxfmt (11 files) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The repo already had oxfmt wired as format/format:check, but nothing in scripts/check.mjs ever called it — verify passing was never evidence the tree was formatted. These 11 files had drifted; fixed mechanically with 'oxfmt --write'. --- .github/pull_request_template.md | 14 ---- .github/workflows/full-release-validation.yml | 11 +++- extensions/canvas/scripts/copy-a2ui.d.mts | 5 +- extensions/diffs/src/viewer-client.test.ts | 7 +- extensions/oc-path/src/oc-path/edit.ts | 64 ++++++++++++++----- extensions/oc-path/src/oc-path/jsonc/emit.ts | 4 +- .../oc-path/src/oc-path/jsonc/resolve.ts | 12 +++- extensions/oc-path/src/oc-path/parse.ts | 17 ++--- extensions/oc-path/src/oc-path/resolve.ts | 44 +++++++++---- scripts/lib/local-build-metadata.d.mts | 5 +- scripts/package-openclaw-for-docker.mjs | 17 ++--- 11 files changed, 120 insertions(+), 80 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index d325fb5e84ee8..06c78d2d180ba 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -2,19 +2,14 @@ What problem does this PR solve? - Why does this matter now? - What is the intended outcome? - What is intentionally out of scope? - What does success look like? - What should reviewers focus on?
@@ -75,13 +70,10 @@ Be mindful of private information like IP addresses, API keys, phone numbers, no Which commands did you run? - What regression coverage was added or updated? - What failed before this fix, if known? - If no test was added, why not?
@@ -95,16 +87,12 @@ List focused commands, not every incidental check. CI is useful support, but ext Did user-visible behavior change? (`Yes/No`) - Did config, environment, or migration behavior change? (`Yes/No`) - Did security, auth, secrets, network, or tool execution behavior change? (`Yes/No`) - What is the highest-risk area? - How is that risk mitigated?
@@ -118,10 +106,8 @@ Use this for author judgment that is not obvious from the diff. ClawSweeper can What is the next action? - What is still waiting on author, maintainer, CI, or external proof? - Which bot or reviewer comments were addressed?
diff --git a/.github/workflows/full-release-validation.yml b/.github/workflows/full-release-validation.yml index 2f3a283a4c8a8..24999295fbc5c 100644 --- a/.github/workflows/full-release-validation.yml +++ b/.github/workflows/full-release-validation.yml @@ -1139,7 +1139,16 @@ jobs: summary: name: Verify full validation - needs: [resolve_target, docker_runtime_assets_preflight, normal_ci, plugin_prerelease, release_checks, npm_telegram, performance] + needs: + [ + resolve_target, + docker_runtime_assets_preflight, + normal_ci, + plugin_prerelease, + release_checks, + npm_telegram, + performance, + ] if: always() runs-on: ubuntu-24.04 timeout-minutes: 5 diff --git a/extensions/canvas/scripts/copy-a2ui.d.mts b/extensions/canvas/scripts/copy-a2ui.d.mts index 76f35c91c1532..6e9d240c0d4fc 100644 --- a/extensions/canvas/scripts/copy-a2ui.d.mts +++ b/extensions/canvas/scripts/copy-a2ui.d.mts @@ -1,4 +1 @@ -export declare function copyA2uiAssets(params: { - srcDir: string; - outDir: string; -}): Promise; +export declare function copyA2uiAssets(params: { srcDir: string; outDir: string }): Promise; diff --git a/extensions/diffs/src/viewer-client.test.ts b/extensions/diffs/src/viewer-client.test.ts index 01191811bd39b..c7883cdfdf1e0 100644 --- a/extensions/diffs/src/viewer-client.test.ts +++ b/extensions/diffs/src/viewer-client.test.ts @@ -99,10 +99,9 @@ describe("createToolbarButton icon safety", () => { it("SVG strings in toolbarIconSvg contain no XSS patterns", () => { for (const pattern of XSS_PATTERNS) { - expect( - VIEWER_CLIENT_SRC.includes(pattern), - `source must not contain "${pattern}"`, - ).toBe(false); + expect(VIEWER_CLIENT_SRC.includes(pattern), `source must not contain "${pattern}"`).toBe( + false, + ); } }); diff --git a/extensions/oc-path/src/oc-path/edit.ts b/extensions/oc-path/src/oc-path/edit.ts index c1cd01db5875c..7217eca5e8b65 100644 --- a/extensions/oc-path/src/oc-path/edit.ts +++ b/extensions/oc-path/src/oc-path/edit.ts @@ -26,11 +26,17 @@ export function setMdOcPath(ast: MdAst, path: OcPath, newValue: string): MdEditR guardSentinel(newValue, formatOcPath(path)); if (path.section === "[frontmatter]") { const key = path.item ?? path.field; - if (key === undefined) {return { ok: false, reason: "unresolved" };} + if (key === undefined) { + return { ok: false, reason: "unresolved" }; + } const idx = ast.frontmatter.findIndex((e) => e.key === key); - if (idx === -1) {return { ok: false, reason: "unresolved" };} + if (idx === -1) { + return { ok: false, reason: "unresolved" }; + } const existing = ast.frontmatter[idx]; - if (existing === undefined) {return { ok: false, reason: "unresolved" };} + if (existing === undefined) { + return { ok: false, reason: "unresolved" }; + } const newEntry: FrontmatterEntry = { ...existing, value: newValue }; const newFm = ast.frontmatter.slice(); newFm[idx] = newEntry; @@ -43,16 +49,26 @@ export function setMdOcPath(ast: MdAst, path: OcPath, newValue: string): MdEditR const sectionSlug = path.section.toLowerCase(); const blockIdx = ast.blocks.findIndex((b) => b.slug === sectionSlug); - if (blockIdx === -1) {return { ok: false, reason: "unresolved" };} + if (blockIdx === -1) { + return { ok: false, reason: "unresolved" }; + } const block = ast.blocks[blockIdx]; - if (block === undefined) {return { ok: false, reason: "unresolved" };} + if (block === undefined) { + return { ok: false, reason: "unresolved" }; + } const itemSlug = path.item.toLowerCase(); const itemIdx = block.items.findIndex((i) => i.slug === itemSlug); - if (itemIdx === -1) {return { ok: false, reason: "unresolved" };} + if (itemIdx === -1) { + return { ok: false, reason: "unresolved" }; + } const item = block.items[itemIdx]; - if (item === undefined) {return { ok: false, reason: "unresolved" };} - if (item.kv === undefined) {return { ok: false, reason: "no-item-kv" };} + if (item === undefined) { + return { ok: false, reason: "unresolved" }; + } + if (item.kv === undefined) { + return { ok: false, reason: "no-item-kv" }; + } if (item.kv.key.toLowerCase() !== path.field.toLowerCase()) { return { ok: false, reason: "unresolved" }; } @@ -78,9 +94,15 @@ function rebuildBlockBody(block: AstBlock, newItems: readonly AstItem[]): string for (let i = 0; i < newItems.length; i++) { const newItem = newItems[i]; const oldItem = block.items[i]; - if (newItem === undefined || oldItem === undefined) {continue;} - if (newItem.kv === undefined || oldItem.kv === undefined) {continue;} - if (newItem.kv.value === oldItem.kv.value) {continue;} + if (newItem === undefined || oldItem === undefined) { + continue; + } + if (newItem.kv === undefined || oldItem.kv === undefined) { + continue; + } + if (newItem.kv.value === oldItem.kv.value) { + continue; + } const re = new RegExp(`^(\\s*-\\s*${escapeRegex(oldItem.kv.key)}\\s*:\\s*).*$`, "m"); body = body.replace(re, `$1${newItem.kv.value}`); } @@ -101,19 +123,29 @@ function finalize(ast: MdAst): MdEditResult { parts.push("---"); } if (ast.preamble.length > 0) { - if (parts.length > 0) {parts.push("");} + if (parts.length > 0) { + parts.push(""); + } parts.push(ast.preamble); } for (const block of ast.blocks) { - if (parts.length > 0) {parts.push("");} + if (parts.length > 0) { + parts.push(""); + } parts.push(`## ${block.heading}`); - if (block.bodyText.length > 0) {parts.push(block.bodyText);} + if (block.bodyText.length > 0) { + parts.push(block.bodyText); + } } return { ok: true, ast: { ...ast, raw: parts.join("\n") } }; } function formatFrontmatterValue(value: string): string { - if (value.length === 0) {return '""';} - if (/[:#&*?|<>=!%@`,[\]{}\r\n]/.test(value)) {return JSON.stringify(value);} + if (value.length === 0) { + return '""'; + } + if (/[:#&*?|<>=!%@`,[\]{}\r\n]/.test(value)) { + return JSON.stringify(value); + } return value; } diff --git a/extensions/oc-path/src/oc-path/jsonc/emit.ts b/extensions/oc-path/src/oc-path/jsonc/emit.ts index 6afe3c038e555..8df49c8d3f3da 100644 --- a/extensions/oc-path/src/oc-path/jsonc/emit.ts +++ b/extensions/oc-path/src/oc-path/jsonc/emit.ts @@ -33,7 +33,9 @@ export function emitJsonc(ast: JsoncAst, opts: JsoncEmitOptions = {}): string { } // Render mode loses comments; walks leaves for caller-injected sentinel. - if (ast.root === null) {return "";} + if (ast.root === null) { + return ""; + } return renderValue(ast.root, guardPath, []); } diff --git a/extensions/oc-path/src/oc-path/jsonc/resolve.ts b/extensions/oc-path/src/oc-path/jsonc/resolve.ts index a261777a1169d..2d96be2f69a9f 100644 --- a/extensions/oc-path/src/oc-path/jsonc/resolve.ts +++ b/extensions/oc-path/src/oc-path/jsonc/resolve.ts @@ -21,11 +21,15 @@ export type JsoncOcPathMatch = }; export function resolveJsoncOcPath(ast: JsoncAst, path: OcPath): JsoncOcPathMatch | null { - if (ast.root === null) {return null;} + if (ast.root === null) { + return null; + } const segments: string[] = []; const collect = (slot: string | undefined): void => { - if (slot === undefined) {return;} + if (slot === undefined) { + return; + } for (const s of splitRespectingBrackets(slot, ".")) { segments.push(isQuotedSeg(s) ? unquoteSeg(s) : s); } @@ -34,7 +38,9 @@ export function resolveJsoncOcPath(ast: JsoncAst, path: OcPath): JsoncOcPathMatc collect(path.item); collect(path.field); - if (segments.length === 0) {return { kind: "root", node: ast };} + if (segments.length === 0) { + return { kind: "root", node: ast }; + } return resolveJsoncValueOcPath(ast.root, segments); } diff --git a/extensions/oc-path/src/oc-path/parse.ts b/extensions/oc-path/src/oc-path/parse.ts index 3fa0b725308e3..91210f4b43309 100644 --- a/extensions/oc-path/src/oc-path/parse.ts +++ b/extensions/oc-path/src/oc-path/parse.ts @@ -12,14 +12,7 @@ */ import MarkdownIt from "markdown-it"; - -import type { - AstBlock, - AstItem, - Diagnostic, - FrontmatterEntry, - ParseResult, -} from "./ast.js"; +import type { AstBlock, AstItem, Diagnostic, FrontmatterEntry, ParseResult } from "./ast.js"; import { slugify } from "./slug.js"; type Token = ReturnType[number]; @@ -153,7 +146,9 @@ function extractItems(tokens: readonly Token[], bodyFileLine: number): AstItem[] const items: AstItem[] = []; for (let i = 0; i < tokens.length; i++) { const t = tokens[i]; - if (t.type !== "list_item_open" || t.map === null) {continue;} + if (t.type !== "list_item_open" || t.map === null) { + continue; + } // First inline at the item's own depth is the item text. let nestedDepth = 0; let text = ""; @@ -175,9 +170,7 @@ function extractItems(tokens: readonly Token[], bodyFileLine: number): AstItem[] text, slug: kvMatch ? slugify(kvMatch[1]) : slugify(text), line: bodyFileLine + t.map[0], - ...(kvMatch !== null - ? { kv: { key: kvMatch[1].trim(), value: kvMatch[2].trim() } } - : {}), + ...(kvMatch !== null ? { kv: { key: kvMatch[1].trim(), value: kvMatch[2].trim() } } : {}), }); } return items; diff --git a/extensions/oc-path/src/oc-path/resolve.ts b/extensions/oc-path/src/oc-path/resolve.ts index 25ae98fdbf468..423e03448b6c2 100644 --- a/extensions/oc-path/src/oc-path/resolve.ts +++ b/extensions/oc-path/src/oc-path/resolve.ts @@ -35,39 +35,61 @@ export type OcPathMatch = export function resolveMdOcPath(ast: MdAst, path: OcPath): OcPathMatch | null { if (path.section === "[frontmatter]") { const key = path.item ?? path.field; - if (key === undefined) {return null;} + if (key === undefined) { + return null; + } const entry = ast.frontmatter.find((e) => e.key === key); - if (entry === undefined) {return null;} + if (entry === undefined) { + return null; + } return { kind: "frontmatter", node: entry }; } - if (path.section === undefined) {return { kind: "root", node: ast };} + if (path.section === undefined) { + return { kind: "root", node: ast }; + } const block = ast.blocks.find((b) => b.slug === path.section!.toLowerCase()); - if (block === undefined) {return null;} - if (path.item === undefined) {return { kind: "block", node: block };} + if (block === undefined) { + return null; + } + if (path.item === undefined) { + return { kind: "block", node: block }; + } // Item dispatch: ordinal (#N) > positional ($last) > slug. // Ordinal uses document order so duplicate-slug items stay distinct. let item: AstItem | undefined; if (isOrdinalSeg(path.item)) { const n = parseOrdinalSeg(path.item); - if (n === null || n < 0 || n >= block.items.length) {return null;} + if (n === null || n < 0 || n >= block.items.length) { + return null; + } item = block.items[n]; } else if (isPositionalSeg(path.item)) { const concrete = resolvePositionalSeg(path.item, { indexable: true, size: block.items.length, }); - if (concrete === null) {return null;} + if (concrete === null) { + return null; + } item = block.items[Number(concrete)]; } else { item = block.items.find((i) => i.slug === path.item!.toLowerCase()); } - if (item === undefined) {return null;} - if (path.field === undefined) {return { kind: "item", node: item, block };} + if (item === undefined) { + return null; + } + if (path.field === undefined) { + return { kind: "item", node: item, block }; + } - if (item.kv === undefined) {return null;} - if (item.kv.key.toLowerCase() !== path.field.toLowerCase()) {return null;} + if (item.kv === undefined) { + return null; + } + if (item.kv.key.toLowerCase() !== path.field.toLowerCase()) { + return null; + } return { kind: "item-field", node: item, block, value: item.kv.value }; } diff --git a/scripts/lib/local-build-metadata.d.mts b/scripts/lib/local-build-metadata.d.mts index 0e367d588f0f1..b4eba18835873 100644 --- a/scripts/lib/local-build-metadata.d.mts +++ b/scripts/lib/local-build-metadata.d.mts @@ -1,7 +1,4 @@ -export { - BUILD_STAMP_FILE, - RUNTIME_POSTBUILD_STAMP_FILE, -} from "./local-build-metadata-paths.mjs"; +export { BUILD_STAMP_FILE, RUNTIME_POSTBUILD_STAMP_FILE } from "./local-build-metadata-paths.mjs"; export function resolveGitHead(params?: { cwd?: string; diff --git a/scripts/package-openclaw-for-docker.mjs b/scripts/package-openclaw-for-docker.mjs index c403a4539bcad..155802d69478b 100644 --- a/scripts/package-openclaw-for-docker.mjs +++ b/scripts/package-openclaw-for-docker.mjs @@ -155,16 +155,13 @@ function run(command, args, cwd, options = {}) { }; const terminateChild = () => { killChild("SIGTERM"); - forceKillTimeout = setTimeout( - () => { - forceKillTimeout = undefined; - if (settled && !processGroupAlive()) { - return; - } - killChild("SIGKILL"); - }, - options.killAfterMs ?? DEFAULT_TIMEOUT_KILL_AFTER_MS, - ); + forceKillTimeout = setTimeout(() => { + forceKillTimeout = undefined; + if (settled && !processGroupAlive()) { + return; + } + killChild("SIGKILL"); + }, options.killAfterMs ?? DEFAULT_TIMEOUT_KILL_AFTER_MS); forceKillTimeout.unref?.(); }; ACTIVE_CHILD_KILLERS.add(killChild); From 61faa4e996e98a812e451e8ebf23076fd0512976 Mon Sep 17 00:00:00 2001 From: Mao Nakamoto <41178744+catomean@users.noreply.github.com> Date: Mon, 31 Aug 2026 18:08:35 +0200 Subject: [PATCH 2/4] fix(ci): wire the existing oxfmt gate into check.mjs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit format/format:check have existed since oxfmt was adopted, but scripts/check.mjs never called format:check — a passing 'pnpm check' was never evidence the tree was formatted, only that it built and typechecked. Prettier was never the right formatter here for a 17.6k-file repo; this repo already made the right call with a faster Rust-based one, it just never got wired in. Added as the last entry in the existing 'preflight guards' stage, alongside the other cheap npm-script guards it already runs in parallel with — one line, same shape as every other entry there. Proved by mutation: appended deliberately mis-formatted code to a tracked file and ran 'node scripts/check.mjs' end to end. It failed at the format step, naming exactly that file, and nothing else changed. Reverted before committing. Unrelated pre-existing finding while running the full check, noted for whoever owns it: 'npm shrinkwrap guard' also failed — 'npm-shrinkwrap.json is stale. Run pnpm deps:shrinkwrap:generate.' — with a clean git status on both npm-shrinkwrap.json and pnpm-lock.yaml beforehand, so it is not something this change caused. --- scripts/check.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/check.mjs b/scripts/check.mjs index 96ca9170abcce..f82cc2533f51e 100644 --- a/scripts/check.mjs +++ b/scripts/check.mjs @@ -108,6 +108,7 @@ export async function main(argv = process.argv.slice(2)) { { name: "duplicate scan target coverage", args: ["dup:check:coverage"] }, { name: "npm shrinkwrap guard", args: ["deps:shrinkwrap:check"] }, { name: "package patch guard", args: ["deps:patches:check"] }, + { name: "format", args: ["format:check"] }, ], }, { From f180f3228ddfb2f04ff2f3e7118c4683bd3fefd9 Mon Sep 17 00:00:00 2001 From: Mao Nakamoto <41178744+catomean@users.noreply.github.com> Date: Mon, 31 Aug 2026 19:33:38 +0200 Subject: [PATCH 3/4] fix(ci): also add format:check to the CI guards shard MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The scripts/check.mjs wiring in the previous commit is what 'pnpm check' and any local dev running the aggregate check picks up. It turns out CI itself does not call check.mjs at all for this task: .github/workflows/ci.yml's check-shard job hand-lists the same commands a second time, independently, in a 'case "$TASK" in guards) ... esac' block — and that list had drifted from check.mjs's own array even before this PR (it's missing several entries check.mjs has, e.g. media-download-helpers, runtime-sidecar-loaders, opengrep-rule-metadata). Confirmed by reading check-guards' actual CI log: the workflow runs each 'pnpm check:*'/'lint:*' line directly, never invoking node scripts/check.mjs. So the previous commit alone, however correct, would never have been enforced by CI — only by a human or agent remembering to run 'pnpm check' locally, which is the exact kind of unenforced-by-default gap this PR exists to close. Added as one more line in the 'guards)' case, matching every other entry's shape. The two lists (check.mjs's array, and this case block) are still two independently-maintained copies of the same guard list after this change — that duplication is pre-existing and out of scope here, but is worth someone eventually collapsing to one source of truth. --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1675b8822cd4c..c044860ddb946 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1302,6 +1302,7 @@ jobs: pnpm lint:auth:no-pairing-store-group pnpm lint:auth:pairing-account-scope pnpm check:import-cycles + pnpm format:check # build-artifacts already runs the tsdown/runtime build for the same Node-relevant changes. NODE_OPTIONS=--max-old-space-size=8192 pnpm build:plugin-sdk:strict-smoke ;; From 44767780459e618e5b8c979eb77f50ad30b18f8b Mon Sep 17 00:00:00 2001 From: Mao Nakamoto <41178744+catomean@users.noreply.github.com> Date: Tue, 1 Sep 2026 02:12:40 +0200 Subject: [PATCH 4/4] diag: does oxfmt 0.65.0 fix the native-binding install bug on CI? Throwaway diagnostic branch, not for merging as-is. 0.52.0 (the pinned version) fails 'Cannot find native binding' for @oxfmt/binding-linux-x64-gnu on every CI attempt (4/4), 0/N locally, independent of cache state and with a verified-correct lockfile entry. 13 minor versions have shipped since 0.52.0; testing whether one of them fixed the binding resolution bug before ruling this out as unfixable from this side. --- package.json | 2 +- pnpm-lock.yaml | 171 ++++++++++++++++++++++++++----------------------- 2 files changed, 91 insertions(+), 82 deletions(-) diff --git a/package.json b/package.json index 917ac3c150649..296bd9dd90c8e 100644 --- a/package.json +++ b/package.json @@ -1939,7 +1939,7 @@ "jscpd": "4.2.4", "jsdom": "29.1.1", "lit": "3.3.3", - "oxfmt": "0.52.0", + "oxfmt": "0.65.0", "oxlint": "1.67.0", "oxlint-tsgolint": "0.23.0", "shiki": "4.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 274643e64493a..0d01fea7283b7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -274,8 +274,8 @@ importers: specifier: 3.3.3 version: 3.3.3 oxfmt: - specifier: 0.52.0 - version: 0.52.0 + specifier: 0.65.0 + version: 0.65.0 oxlint: specifier: 1.67.0 version: 1.67.0(oxlint-tsgolint@0.23.0) @@ -3220,124 +3220,124 @@ packages: '@oxc-project/types@0.133.0': resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} - '@oxfmt/binding-android-arm-eabi@0.52.0': - resolution: {integrity: sha512-17EMSJnQ9g+upVHrAUYDMfH5lvRKQ9Nvg8WtEoH72oDr1VpWz+7/o3tD97U1EToen2YAQ/68JmtDYkQUi20dfQ==} + '@oxfmt/binding-android-arm-eabi@0.65.0': + resolution: {integrity: sha512-M10Gs1SSpTNI6ahGx3M/OlIdUF4hkaP6OgUb+MS79t/Pgflk3r1nW5gPFqsZGUAXg0H1AfANT9AvLdBSTIhZKg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] - '@oxfmt/binding-android-arm64@0.52.0': - resolution: {integrity: sha512-A2G1IdwGEW2lLJkIxcvuirRH1CzSl/e0NX11zTlW1gvxJThfwbI/BEoaKrTNpm7M2FchvIf6guvIQU7d5iz+OQ==} + '@oxfmt/binding-android-arm64@0.65.0': + resolution: {integrity: sha512-6DXH5sftNlaHpWJG50hFMF+Qxtq5D2TmahvcDPxWNcGIf8qrC9Y0YgHYcYZ2hlWzaccKXh/f3GcssH8vtkl4JA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@oxfmt/binding-darwin-arm64@0.52.0': - resolution: {integrity: sha512-f9+bLvOYxy7NttCLFTvQ7afmqDOWY4wIP9xdvfj5trQ1qj6f2UFAGwZESlfsMjvJNTyRpXfIlOanCI9FOvoeQA==} + '@oxfmt/binding-darwin-arm64@0.65.0': + resolution: {integrity: sha512-K9m7lr53pcOLETNsC88sWes/GWHUGjZyHx95UhYcSXy0r30haLdeXlSufSenEAtoLaW753WN8/l4M7GYcRt6cg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@oxfmt/binding-darwin-x64@0.52.0': - resolution: {integrity: sha512-YSTB9sJ5nnQd/Q0ddHkgof0ZCHPAnWZT1IW2SJ8omz7CP7KluJhO1fNHrpqdxCtpztJwSs4hY1uAee35wKxxaw==} + '@oxfmt/binding-darwin-x64@0.65.0': + resolution: {integrity: sha512-sTNwIx1gre3MyiHOPLu7IGW4UyMScYL4DTmJT01p4vzB0En+OJUQz6KuH8t0PpsClRSaMuY3b0QmtoPItfO8Lg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@oxfmt/binding-freebsd-x64@0.52.0': - resolution: {integrity: sha512-NIrRNTTPCs4UbmVs0bxLSCDlLCtIRMJIXklNKaXa5Oj2/K1UIMBvgE8+uPVo01Io3N9HF0+GAX+aAHjUgZS7vA==} + '@oxfmt/binding-freebsd-x64@0.65.0': + resolution: {integrity: sha512-lYZMVIiIpnjGu5hJb2jxA8NYQ/e0OTGuaiAf4dqlGPNnPmUTu23FZRMltmjro/KkQm1uE4NT4n5yJ2zWmKcpfA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@oxfmt/binding-linux-arm-gnueabihf@0.52.0': - resolution: {integrity: sha512-JXUCde8mn3GpgQouz2PXUokgy/uT1QrRJBL2s983VWcSQp62wTFYiNXgTKdeo1Jgbr0IgUnKKvzIk/YBlj/nVQ==} + '@oxfmt/binding-linux-arm-gnueabihf@0.65.0': + resolution: {integrity: sha512-gIdXFAt/bURnjxuoedDEWdZ0PEWEmdDcm8qdpoFYYvW3QMk/5D4vUaH4mlMeRpeTdST4izUgHVO6RawQ4QulJw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm-musleabihf@0.52.0': - resolution: {integrity: sha512-psbUXaRZ+V8DaXz10Qf7LSHtdtdKAmC8fxXgeU608jjzrmWK4quamZMOpl6sf+dikoFHA85uE93Q0BqxrCdQrQ==} + '@oxfmt/binding-linux-arm-musleabihf@0.65.0': + resolution: {integrity: sha512-jJVyADto7gA2AaX5qAjAexrxx9PJQaKWOe8PICE7yKMbjBRyOHcmj9TtVJ+MZYDUQ3hodU0AcoTj0jFQ1W4C6Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@oxfmt/binding-linux-arm64-gnu@0.52.0': - resolution: {integrity: sha512-Jw7MgWUU9lcLCcy82updISP3EthTlfvAwR6gWNxPzqly7+fLvOi2gHQE9xXQjpqaVLm/8P+gOzlv9ODuoVlaaw==} + '@oxfmt/binding-linux-arm64-gnu@0.65.0': + resolution: {integrity: sha512-p3RFkB+u7u+8up99b/NEcI1hdpLDiGgJYNwDorB60n7eH+eKposAKuMBxx+NqB3b+sJP4CZmYDh9G7X62tUsKg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-arm64-musl@0.52.0': - resolution: {integrity: sha512-wZg6bLjDvh2KibyI3QFUYo8GTXneIFsd0JvehtvJiUmQ8WRPERgxd/VM4ctWb86U5FT1FkqgS8/wZKVB+AZScg==} + '@oxfmt/binding-linux-arm64-musl@0.65.0': + resolution: {integrity: sha512-5Prb0uFzJHr+OUD/qS/TmU526wD+PaHDsm3KoRiUXbMIDpTSErjeQYkK3OQeshAvD/PuLa9WGEi9WPajjdOZJg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-ppc64-gnu@0.52.0': - resolution: {integrity: sha512-IngE8uxhNvxcMrLjZNDo9xNLY7rEK33AKnaMd2B46he1e/mz2CfcW6If/U1wUjdRZddm1QzQaciqZkuMkdh1FA==} + '@oxfmt/binding-linux-ppc64-gnu@0.65.0': + resolution: {integrity: sha512-S8svxTp81obnF3admN9yd+u2rOYXtyzThLGBTg1PY6TPtGcC09BaaXLQD+TBSMa7yvqhCDZ8DFri+S/yG60qCg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-gnu@0.52.0': - resolution: {integrity: sha512-H3+DdFMv/efN3Efmhsv18jDrpiWWqKG7wsfAlQBqAt6z/E2Bx+TwEj2Nowe51CPOWB8/mFBC2dAMSgVFLvvowA==} + '@oxfmt/binding-linux-riscv64-gnu@0.65.0': + resolution: {integrity: sha512-WtXBr75G/h2qOHy8SiGtC1R6aS3jt4mE52v1D8AtwMXIgoOmSNP9lKvbSaTRoL0e5wsMPoi6T72QWDYPu+S+nA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-riscv64-musl@0.52.0': - resolution: {integrity: sha512-zji+1kb7lJKohSDjzC1IsS+K/cKRs1hdVf0ZH0VbdbiakmtLvN9twBoXo/k8VdjFax7kfo+DyPxS7vv52br1aw==} + '@oxfmt/binding-linux-riscv64-musl@0.65.0': + resolution: {integrity: sha512-YwSLVvpaz4o/nv/miiPEBJz+eJ+VmbgNIrao6RccK9ce+L5EA8wP+ZD0uFeq6wKOza6zoWv/dR0sj6lip6R3EA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] libc: [musl] - '@oxfmt/binding-linux-s390x-gnu@0.52.0': - resolution: {integrity: sha512-hcLBYedpCy7ToUvvBidWk7+11Yhg1oAZ4+6hKPic/mQI6NaqXJSXMps5nFlwUuX2ewhtLZZDPg63TI042qGKBg==} + '@oxfmt/binding-linux-s390x-gnu@0.65.0': + resolution: {integrity: sha512-XQTPqgvyrgkKcFq+Tp2eK6JS7sqqJ+nRmy2Fav4j3I+i4dJoPJm7YwEdoeSDX9xkqj9jZ/lWfF3bXUWztIrn6A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-gnu@0.52.0': - resolution: {integrity: sha512-IDO2loXK2OtTOhSPchU9MW25mWL2QCDGdJbjN8MXKZVS80qXe5gMTwQWu/gMJ3juoBHbkuUZNB2N1LHzNT7DoA==} + '@oxfmt/binding-linux-x64-gnu@0.65.0': + resolution: {integrity: sha512-cjZlx6S/VkeCNWCbwZriTnLnZeTcV3DEyeRGSw/2wwLP9viq+C0bJ4bC1k/ZLkFxDcB1lUgSasPkYGP1bdraOg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [glibc] - '@oxfmt/binding-linux-x64-musl@0.52.0': - resolution: {integrity: sha512-mAV2Hjn0SatJ+KoAzKUC3eJhdJ8wv+3m1KyuS0dTsbF0c5weq+QrCt/DRZZM+uj/XiKzCDEUKYsBF30e2qkcyw==} + '@oxfmt/binding-linux-x64-musl@0.65.0': + resolution: {integrity: sha512-2azCjxdLtK4zCcIOU1dlXlU0xxfbPi6EjwWx7Ac7teWPidIIDOcIhudup83xNCKYhtqeVd/gaVDOxbUq4syXWA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] libc: [musl] - '@oxfmt/binding-openharmony-arm64@0.52.0': - resolution: {integrity: sha512-vd4npaUIwChxp7XzkqmepBWTT9YMcSe/NBApVGPC30/lLyOVaV3dvma1SKo03t8O73BPRAG7EyJzGlN5cJM5hQ==} + '@oxfmt/binding-openharmony-arm64@0.65.0': + resolution: {integrity: sha512-KXQ7xi1e/voP0IQaw6fG6XY4Z5+Llf1XmRSZS1t7pVFCecFJ0iXaboKmVwjFtp5MLlT5iWQrJ2U1C3GJdZ2u+Q==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@oxfmt/binding-win32-arm64-msvc@0.52.0': - resolution: {integrity: sha512-k2sz6gWQdMfh5HPpIS+Bw/0UEV/kaK2xuqJRrWL233sEHx9WLlsmvlPFM4HUNThkYbSN0U0vPW7LVKZWDS8hPQ==} + '@oxfmt/binding-win32-arm64-msvc@0.65.0': + resolution: {integrity: sha512-2FbbjG5jEqLSLKVJwBap84uJfpn5Y5A53KEO0aUNr+zeiRB9nyPUIFMcSbZVMFLitfBytFWRNngozXYjb6Rsbw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@oxfmt/binding-win32-ia32-msvc@0.52.0': - resolution: {integrity: sha512-rhke69GTcArodLHpjMTfNnvjTEBryDeZcUCKK/VjXDMtfTULl6QRh0ymX5/hbCUv2WjYm9h/QbW++q2vE15gWQ==} + '@oxfmt/binding-win32-ia32-msvc@0.65.0': + resolution: {integrity: sha512-LJ+ZacAPSjegDOnSLyA1TMWAhdDrsK4el3REdr1oL2UtVBCMhO2II/Sb3cEW6mF2MfLhl8hDNCSvc7KSbgk3LQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ia32] os: [win32] - '@oxfmt/binding-win32-x64-msvc@0.52.0': - resolution: {integrity: sha512-q5xL7oeXkZdEtNZWBdvehJcmt+GRu9l2bK40yJs1jJXlqq+r0Hygb1rTjq+FM2o/2xyt4cufH6KRplHp3Jjsvw==} + '@oxfmt/binding-win32-x64-msvc@0.65.0': + resolution: {integrity: sha512-higu9cWEO6XXFzATD1jf0mCK34rNfN2H9JrJie7QB1IhleVpTh0QlLH9Ip2C1H/Nd5n0v5pvRtC+5R0uE4HpVg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -4268,40 +4268,47 @@ packages: resolution: {integrity: sha512-9/tnj1fXeXIONgr+5FGwr3bkqd4jaORdr3X9/k++rzHW+UIzvgIeXrJKv43403gtuKp0BoxdzsFxe2qsAQhhkw==} cpu: [arm64] os: [darwin] + deprecated: This package has been replaced by @agentclientprotocol/codex-acp. Please migrate to continue receiving updates. hasBin: true '@zed-industries/codex-acp-darwin-x64@0.15.0': resolution: {integrity: sha512-2cmflnVYM5yzvNu4ldff6OsfLzQThFToPszCT3t7jytWuG28V+W1cUEGsvFJGNkGC1Wo29Z4w5LZ3wyfOkvPxg==} cpu: [x64] os: [darwin] + deprecated: This package has been replaced by @agentclientprotocol/codex-acp. Please migrate to continue receiving updates. hasBin: true '@zed-industries/codex-acp-linux-arm64@0.15.0': resolution: {integrity: sha512-ioCXCiZMd4v7Eqyed9Iz4xcPKsZbSH157wOitsWQKxUiX43c1Ti5fykZcrh9cNSLOgiGmI3V2nbYp0aTf66grQ==} cpu: [arm64] os: [linux] + deprecated: This package has been replaced by @agentclientprotocol/codex-acp. Please migrate to continue receiving updates. hasBin: true '@zed-industries/codex-acp-linux-x64@0.15.0': resolution: {integrity: sha512-WtqI8KGX9z7XvdkazumYraoDwpip5lFBRtFXoIwYCSBoDZdOqQsfNQndIfTDttfQ1BdZYKczDnrfbRaiIFU9UA==} cpu: [x64] os: [linux] + deprecated: This package has been replaced by @agentclientprotocol/codex-acp. Please migrate to continue receiving updates. hasBin: true '@zed-industries/codex-acp-win32-arm64@0.15.0': resolution: {integrity: sha512-L+OFIPOzAuxsImlq8E227MZxgujMLMEJSqiR9QjZq8fiIFCKh/HnxmvyXvjWaHbJdb1pZ09WKe3MNwV9ln/+GQ==} cpu: [arm64] os: [win32] + deprecated: This package has been replaced by @agentclientprotocol/codex-acp. Please migrate to continue receiving updates. hasBin: true '@zed-industries/codex-acp-win32-x64@0.15.0': resolution: {integrity: sha512-LDnADpCg1Rzbkyxs4hMaOvRwNa68KLp8CoNVom8ZE/sChSvcDrj/RCoMsZWrARJGWs7EQ9zYeLoeVk5VcVQoPQ==} cpu: [x64] os: [win32] + deprecated: This package has been replaced by @agentclientprotocol/codex-acp. Please migrate to continue receiving updates. hasBin: true '@zed-industries/codex-acp@0.15.0': resolution: {integrity: sha512-eAv7sGBeiYrYkOulF729nrM51szS7WIhBtugRj5wWq6csRKZUhAZfoUZlF8xUWdHPtOIzd/eT6MNG6gMHu6z0w==} + deprecated: This package has been replaced by @agentclientprotocol/codex-acp. Please migrate to continue receiving updates. hasBin: true abort-controller@3.0.0: @@ -4417,6 +4424,7 @@ packages: audio-decode@2.2.3: resolution: {integrity: sha512-Z0lHvMayR/Pad9+O9ddzaBJE0DrhZkQlStrC1RwcAHF3AhQAsdwKHeLGK8fYKyp2DDU6xHxzGb4CLMui12yVrg==} + deprecated: Renamed to @audio/decode — same API; this name remains a thin alias. npm i @audio/decode audio-type@2.4.1: resolution: {integrity: sha512-dK9Z/P83C/rBfTrXXgPD3jZ+aXxx2o/P4rq8+H1JqxbXklitEeJw4CrcwMC5CkON3CX3yy2gaWnIEVYejYh0zQ==} @@ -4738,6 +4746,7 @@ packages: crypto-js@4.2.0: resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + deprecated: Active development of CryptoJS has been discontinued. This library is no longer maintained. css-select@5.2.2: resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} @@ -6098,8 +6107,8 @@ packages: opus-decoder@0.7.11: resolution: {integrity: sha512-+e+Jz3vGQLxRTBHs8YJQPRPc1Tr+/aC6coV/DlZylriA29BdHQAYXhvNRKtjftof17OFng0+P4wsFIqQu3a48A==} - oxfmt@0.52.0: - resolution: {integrity: sha512-nJlYM35F64zTDMecCNhoHNkf+D/eHv7xcjj9XDSj+bFAVtN93m7v8DQMdHd6nDG6Akf/kEYYHmDUBs2Dz27Sug==} + oxfmt@0.65.0: + resolution: {integrity: sha512-SgS5VgnP42T0zl3zWD+xoH8FCqg1SAFnSRoOT/qeoa6gxcYIqrDMOmcXIg/EWSN92Du4ogB4riuKhKd6Y4CGhw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -8847,61 +8856,61 @@ snapshots: '@oxc-project/types@0.133.0': {} - '@oxfmt/binding-android-arm-eabi@0.52.0': + '@oxfmt/binding-android-arm-eabi@0.65.0': optional: true - '@oxfmt/binding-android-arm64@0.52.0': + '@oxfmt/binding-android-arm64@0.65.0': optional: true - '@oxfmt/binding-darwin-arm64@0.52.0': + '@oxfmt/binding-darwin-arm64@0.65.0': optional: true - '@oxfmt/binding-darwin-x64@0.52.0': + '@oxfmt/binding-darwin-x64@0.65.0': optional: true - '@oxfmt/binding-freebsd-x64@0.52.0': + '@oxfmt/binding-freebsd-x64@0.65.0': optional: true - '@oxfmt/binding-linux-arm-gnueabihf@0.52.0': + '@oxfmt/binding-linux-arm-gnueabihf@0.65.0': optional: true - '@oxfmt/binding-linux-arm-musleabihf@0.52.0': + '@oxfmt/binding-linux-arm-musleabihf@0.65.0': optional: true - '@oxfmt/binding-linux-arm64-gnu@0.52.0': + '@oxfmt/binding-linux-arm64-gnu@0.65.0': optional: true - '@oxfmt/binding-linux-arm64-musl@0.52.0': + '@oxfmt/binding-linux-arm64-musl@0.65.0': optional: true - '@oxfmt/binding-linux-ppc64-gnu@0.52.0': + '@oxfmt/binding-linux-ppc64-gnu@0.65.0': optional: true - '@oxfmt/binding-linux-riscv64-gnu@0.52.0': + '@oxfmt/binding-linux-riscv64-gnu@0.65.0': optional: true - '@oxfmt/binding-linux-riscv64-musl@0.52.0': + '@oxfmt/binding-linux-riscv64-musl@0.65.0': optional: true - '@oxfmt/binding-linux-s390x-gnu@0.52.0': + '@oxfmt/binding-linux-s390x-gnu@0.65.0': optional: true - '@oxfmt/binding-linux-x64-gnu@0.52.0': + '@oxfmt/binding-linux-x64-gnu@0.65.0': optional: true - '@oxfmt/binding-linux-x64-musl@0.52.0': + '@oxfmt/binding-linux-x64-musl@0.65.0': optional: true - '@oxfmt/binding-openharmony-arm64@0.52.0': + '@oxfmt/binding-openharmony-arm64@0.65.0': optional: true - '@oxfmt/binding-win32-arm64-msvc@0.52.0': + '@oxfmt/binding-win32-arm64-msvc@0.65.0': optional: true - '@oxfmt/binding-win32-ia32-msvc@0.52.0': + '@oxfmt/binding-win32-ia32-msvc@0.65.0': optional: true - '@oxfmt/binding-win32-x64-msvc@0.52.0': + '@oxfmt/binding-win32-x64-msvc@0.65.0': optional: true '@oxlint-tsgolint/darwin-arm64@0.23.0': @@ -11918,29 +11927,29 @@ snapshots: dependencies: '@wasm-audio-decoders/common': 9.0.7 - oxfmt@0.52.0: + oxfmt@0.65.0: dependencies: tinypool: 2.1.0 optionalDependencies: - '@oxfmt/binding-android-arm-eabi': 0.52.0 - '@oxfmt/binding-android-arm64': 0.52.0 - '@oxfmt/binding-darwin-arm64': 0.52.0 - '@oxfmt/binding-darwin-x64': 0.52.0 - '@oxfmt/binding-freebsd-x64': 0.52.0 - '@oxfmt/binding-linux-arm-gnueabihf': 0.52.0 - '@oxfmt/binding-linux-arm-musleabihf': 0.52.0 - '@oxfmt/binding-linux-arm64-gnu': 0.52.0 - '@oxfmt/binding-linux-arm64-musl': 0.52.0 - '@oxfmt/binding-linux-ppc64-gnu': 0.52.0 - '@oxfmt/binding-linux-riscv64-gnu': 0.52.0 - '@oxfmt/binding-linux-riscv64-musl': 0.52.0 - '@oxfmt/binding-linux-s390x-gnu': 0.52.0 - '@oxfmt/binding-linux-x64-gnu': 0.52.0 - '@oxfmt/binding-linux-x64-musl': 0.52.0 - '@oxfmt/binding-openharmony-arm64': 0.52.0 - '@oxfmt/binding-win32-arm64-msvc': 0.52.0 - '@oxfmt/binding-win32-ia32-msvc': 0.52.0 - '@oxfmt/binding-win32-x64-msvc': 0.52.0 + '@oxfmt/binding-android-arm-eabi': 0.65.0 + '@oxfmt/binding-android-arm64': 0.65.0 + '@oxfmt/binding-darwin-arm64': 0.65.0 + '@oxfmt/binding-darwin-x64': 0.65.0 + '@oxfmt/binding-freebsd-x64': 0.65.0 + '@oxfmt/binding-linux-arm-gnueabihf': 0.65.0 + '@oxfmt/binding-linux-arm-musleabihf': 0.65.0 + '@oxfmt/binding-linux-arm64-gnu': 0.65.0 + '@oxfmt/binding-linux-arm64-musl': 0.65.0 + '@oxfmt/binding-linux-ppc64-gnu': 0.65.0 + '@oxfmt/binding-linux-riscv64-gnu': 0.65.0 + '@oxfmt/binding-linux-riscv64-musl': 0.65.0 + '@oxfmt/binding-linux-s390x-gnu': 0.65.0 + '@oxfmt/binding-linux-x64-gnu': 0.65.0 + '@oxfmt/binding-linux-x64-musl': 0.65.0 + '@oxfmt/binding-openharmony-arm64': 0.65.0 + '@oxfmt/binding-win32-arm64-msvc': 0.65.0 + '@oxfmt/binding-win32-ia32-msvc': 0.65.0 + '@oxfmt/binding-win32-x64-msvc': 0.65.0 oxlint-tsgolint@0.23.0: optionalDependencies: